fix(coord): add neutral interaction route alias
All checks were successful
ci/woodpecker/pr/ci Pipeline was successful
All checks were successful
ci/woodpecker/pr/ci Pipeline was successful
This commit is contained in:
@@ -1,9 +1,20 @@
|
|||||||
|
const PATH_METADATA = 'path';
|
||||||
import { describe, expect, it, vi } from 'vitest';
|
import { describe, expect, it, vi } from 'vitest';
|
||||||
import { InteractionCoordinationController } from './interaction-coordination.controller.js';
|
import { InteractionCoordinationController } from './interaction-coordination.controller.js';
|
||||||
|
|
||||||
const user = { id: 'operator-1', tenantId: 'tenant-a' };
|
const user = { id: 'operator-1', tenantId: 'tenant-a' };
|
||||||
|
|
||||||
describe('InteractionCoordinationController', () => {
|
describe('InteractionCoordinationController', () => {
|
||||||
|
it('exposes the neutral canonical route and Mos compatibility alias over identical handlers', () => {
|
||||||
|
expect(Reflect.getMetadata(PATH_METADATA, InteractionCoordinationController)).toEqual([
|
||||||
|
'api/coord/interaction',
|
||||||
|
'api/coord/mos',
|
||||||
|
]);
|
||||||
|
expect(InteractionCoordinationController.prototype.handoff).toBeTypeOf('function');
|
||||||
|
expect(InteractionCoordinationController.prototype.observe).toBeTypeOf('function');
|
||||||
|
expect(InteractionCoordinationController.prototype.result).toBeTypeOf('function');
|
||||||
|
});
|
||||||
|
|
||||||
it('derives actor and tenant from the authenticated user rather than handoff input', async () => {
|
it('derives actor and tenant from the authenticated user rather than handoff input', async () => {
|
||||||
const coordination = {
|
const coordination = {
|
||||||
handoff: vi.fn(async () => ({ handoffId: 'handoff-1' })),
|
handoff: vi.fn(async () => ({ handoffId: 'handoff-1' })),
|
||||||
|
|||||||
@@ -22,7 +22,8 @@ import type {
|
|||||||
import { InteractionCoordinationService } from './interaction-coordination.service.js';
|
import { InteractionCoordinationService } from './interaction-coordination.service.js';
|
||||||
|
|
||||||
/** Authenticated interaction-plane boundary for the handoff/observe/result-only interaction coordination contract. */
|
/** Authenticated interaction-plane boundary for the handoff/observe/result-only interaction coordination contract. */
|
||||||
@Controller('api/coord/mos')
|
/** `api/coord/interaction` is canonical; the Mos path remains a compatibility alias. */
|
||||||
|
@Controller(['api/coord/interaction', 'api/coord/mos'])
|
||||||
@UseGuards(AuthGuard)
|
@UseGuards(AuthGuard)
|
||||||
export class InteractionCoordinationController {
|
export class InteractionCoordinationController {
|
||||||
constructor(
|
constructor(
|
||||||
|
|||||||
@@ -52,6 +52,10 @@ The port deliberately omits generic orchestrator verbs. It is tenant- and
|
|||||||
correlation-scoped; its gateway implementation obtains `actorId`, `tenantId`,
|
correlation-scoped; its gateway implementation obtains `actorId`, `tenantId`,
|
||||||
and the requester agent from trusted authentication/configuration only.
|
and the requester agent from trusted authentication/configuration only.
|
||||||
|
|
||||||
|
## HTTP routes
|
||||||
|
|
||||||
|
`/api/coord/interaction` is the canonical HTTP coordination prefix for handoff, observe, and result. `/api/coord/mos` remains a backward-compatible alias with the same handlers and DTOs; new integrations use the neutral canonical prefix.
|
||||||
|
|
||||||
## Enforcement point
|
## Enforcement point
|
||||||
|
|
||||||
`apps/gateway` owns a `MosCoordinationService` boundary that compares the
|
`apps/gateway` owns a `MosCoordinationService` boundary that compares the
|
||||||
|
|||||||
Reference in New Issue
Block a user