Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4cefa5cd88 |
@@ -109,16 +109,6 @@ steps:
|
|||||||
# `apk add` guarantees openssl is present on PR pipelines too (and is a
|
# `apk add` guarantees openssl is present on PR pipelines too (and is a
|
||||||
# fast no-op once the rebuilt image already ships it).
|
# fast no-op once the rebuilt image already ships it).
|
||||||
- apk add --no-cache openssl
|
- apk add --no-cache openssl
|
||||||
# Pi runtime (Invariant R): invariant_r_unittest.py hard-requires an
|
|
||||||
# installed `pi` binary at exactly this measured version — the test
|
|
||||||
# boots Pi's real tool registry to prove the read-only carve-out
|
|
||||||
# resolves to real, unshadowed builtins, and fails loud (by design)
|
|
||||||
# when the runtime is absent or drifts. The canonical Pi is
|
|
||||||
# @earendil-works/[email protected] exactly (@mariozechner/* is
|
|
||||||
# embedded-legacy). Step-level install because ci-base image publishes
|
|
||||||
# are currently blocked on registry auth; fold into Dockerfile.ci once
|
|
||||||
# that is fixed, keeping this as a fast no-op guard.
|
|
||||||
- npm install -g @earendil-works/[email protected]
|
|
||||||
# postgresql-client (pg_isready) is baked into ci-base.
|
# postgresql-client (pg_isready) is baked into ci-base.
|
||||||
# Wait up to 60s for CI postgres to be ready; fail fast if it never comes up.
|
# Wait up to 60s for CI postgres to be ready; fail fast if it never comes up.
|
||||||
- |
|
- |
|
||||||
|
|||||||
@@ -0,0 +1,19 @@
|
|||||||
|
import 'reflect-metadata';
|
||||||
|
import { Test } from '@nestjs/testing';
|
||||||
|
import { describe, expect, it } from 'vitest';
|
||||||
|
import { CoordModule } from './coord.module.js';
|
||||||
|
import { InteractionCoordinationService } from './interaction-coordination.service.js';
|
||||||
|
import { AuthGuard } from '../auth/auth.guard.js';
|
||||||
|
|
||||||
|
describe('CoordModule DI (compiled-metadata boot)', () => {
|
||||||
|
it('resolves InteractionCoordinationService through Nest DI', async () => {
|
||||||
|
const moduleRef = await Test.createTestingModule({ imports: [CoordModule] })
|
||||||
|
.overrideGuard(AuthGuard)
|
||||||
|
.useValue({ canActivate: (): boolean => true })
|
||||||
|
.compile();
|
||||||
|
expect(moduleRef.get(InteractionCoordinationService)).toBeInstanceOf(
|
||||||
|
InteractionCoordinationService,
|
||||||
|
);
|
||||||
|
await moduleRef.close();
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
import { Inject, Injectable } from '@nestjs/common';
|
import { Inject, Injectable, Optional } from '@nestjs/common';
|
||||||
import {
|
import {
|
||||||
InteractionCoordinationClient,
|
InteractionCoordinationClient,
|
||||||
type CoordinationObservation,
|
type CoordinationObservation,
|
||||||
@@ -13,6 +13,7 @@ import type { CreateHandoffDto } from './interaction-coordination.dto.js';
|
|||||||
|
|
||||||
export const COORDINATION_PORT = Symbol('COORDINATION_PORT');
|
export const COORDINATION_PORT = Symbol('COORDINATION_PORT');
|
||||||
export const COORDINATION_CONFIG = Symbol('COORDINATION_CONFIG');
|
export const COORDINATION_CONFIG = Symbol('COORDINATION_CONFIG');
|
||||||
|
export const HANDOFF_ID_FACTORY = Symbol('HANDOFF_ID_FACTORY');
|
||||||
|
|
||||||
const HANDOFF_TRACKING_TTL_MS = 60 * 60 * 1_000;
|
const HANDOFF_TRACKING_TTL_MS = 60 * 60 * 1_000;
|
||||||
const MAX_TRACKED_HANDOFFS = 1_000;
|
const MAX_TRACKED_HANDOFFS = 1_000;
|
||||||
@@ -60,6 +61,8 @@ export class InteractionCoordinationService {
|
|||||||
constructor(
|
constructor(
|
||||||
@Inject(COORDINATION_PORT) private readonly port: InteractionCoordinationPort,
|
@Inject(COORDINATION_PORT) private readonly port: InteractionCoordinationPort,
|
||||||
@Inject(COORDINATION_CONFIG) private readonly config: InteractionCoordinationConfig,
|
@Inject(COORDINATION_CONFIG) private readonly config: InteractionCoordinationConfig,
|
||||||
|
@Optional()
|
||||||
|
@Inject(HANDOFF_ID_FACTORY)
|
||||||
private readonly handoffIdFactory: () => string = (): string => crypto.randomUUID(),
|
private readonly handoffIdFactory: () => string = (): string => crypto.randomUUID(),
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user