@ixo/topic-protocol 0.6.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/README.md +6 -2
  2. package/dist/schemas/action-receipt.schema.json +105 -11
  3. package/dist/schemas/approval-decision.schema.json +30 -0
  4. package/dist/schemas/claim-record.schema.json +30 -0
  5. package/dist/schemas/decision-to-pay-template.schema.json +346 -0
  6. package/dist/schemas/delivery-decision.schema.json +28 -0
  7. package/dist/schemas/delivery-packet.schema.json +58 -0
  8. package/dist/schemas/evaluation-assertion.schema.json +37 -0
  9. package/dist/schemas/external-work-binding.schema.json +83 -0
  10. package/dist/schemas/external-work-state-map.schema.json +29 -0
  11. package/dist/schemas/payable-obligation.schema.json +312 -0
  12. package/dist/schemas/payment-terms.schema.json +287 -0
  13. package/dist/schemas/settlement-receipt.schema.json +53 -0
  14. package/dist/schemas/topic-action-request.schema.json +30 -0
  15. package/dist/schemas/topic-contract-state.schema.json +29 -3
  16. package/dist/schemas/topic-flow-binding.schema.json +28 -0
  17. package/dist/schemas/topic-kind-profile.schema.json +32 -2
  18. package/dist/schemas/topic-operation.schema.json +2 -2
  19. package/dist/schemas/topic-state.schema.json +14 -0
  20. package/dist/schemas/work-item-snapshot.schema.json +73 -0
  21. package/dist/src/action-runtime/types.d.ts +101 -0
  22. package/dist/src/action-runtime/types.js +12 -0
  23. package/dist/src/action-runtime/types.js.map +1 -0
  24. package/dist/src/contracts/schemas.d.ts +3611 -130
  25. package/dist/src/contracts/schemas.js +28 -0
  26. package/dist/src/contracts/schemas.js.map +1 -1
  27. package/dist/src/contracts/topic-contract.d.ts +8 -1
  28. package/dist/src/contracts/topic-contract.js.map +1 -1
  29. package/dist/src/contracts/topic-kind-profile.d.ts +29 -0
  30. package/dist/src/contracts/topic-kind-profile.js +31 -0
  31. package/dist/src/contracts/topic-kind-profile.js.map +1 -1
  32. package/dist/src/errors.d.ts +1 -1
  33. package/dist/src/errors.js.map +1 -1
  34. package/dist/src/index.d.ts +4 -1
  35. package/dist/src/index.js +4 -1
  36. package/dist/src/index.js.map +1 -1
  37. package/dist/src/projector/payload.d.ts +47 -0
  38. package/dist/src/projector/payload.js +140 -2
  39. package/dist/src/projector/payload.js.map +1 -1
  40. package/dist/src/projector/state.js +150 -0
  41. package/dist/src/projector/state.js.map +1 -1
  42. package/dist/src/projector/types.d.ts +15 -3
  43. package/dist/src/projector/types.js.map +1 -1
  44. package/dist/src/work-bridge/mapping.d.ts +2 -0
  45. package/dist/src/work-bridge/mapping.js +17 -0
  46. package/dist/src/work-bridge/mapping.js.map +1 -0
  47. package/dist/src/work-bridge/project.d.ts +7 -0
  48. package/dist/src/work-bridge/project.js +262 -0
  49. package/dist/src/work-bridge/project.js.map +1 -0
  50. package/dist/src/work-bridge/types.d.ts +232 -0
  51. package/dist/src/work-bridge/types.js +26 -0
  52. package/dist/src/work-bridge/types.js.map +1 -0
  53. package/package.json +4 -2
  54. package/templates/decision-to-pay/README.md +59 -0
  55. package/templates/decision-to-pay/milestone-payment-release.template.json +195 -0
  56. package/templates/decision-to-pay/outcome-payment-claim.template.json +198 -0
  57. package/templates/decision-to-pay/payment-on-delivery.template.json +198 -0
  58. package/templates/decision-to-pay/verified-work-payment.template.json +283 -0
@@ -1,5 +1,6 @@
1
1
  import { TopicProtocolError } from "../errors.js";
2
2
  import { compareText } from "../shared/compare.js";
3
+ import { applyWorkBridgeOperation, emptyTopicWorkBridgeProjection } from "../work-bridge/project.js";
3
4
  export function initialState(root, anchor) {
4
5
  return {
5
6
  topicId: root.id,
@@ -13,6 +14,9 @@ export function initialState(root, anchor) {
13
14
  decisions: [],
14
15
  contracts: {},
15
16
  automations: [],
17
+ flowBindings: [],
18
+ actions: [],
19
+ workBridge: emptyTopicWorkBridgeProjection(),
16
20
  ...(root.overview === undefined
17
21
  ? {}
18
22
  : { overview: { ...root.overview, updatedBy: root.createdBy, updatedAt: root.createdAt } }),
@@ -143,6 +147,147 @@ function applyAutomation(state, operation) {
143
147
  }
144
148
  return state;
145
149
  }
150
+ function invalidRuntimeOperation(operation, message) {
151
+ throw new TopicProtocolError("INVALID_OPERATION_PAYLOAD", `${operation.type} ${operation.operationId}: ${message}`, { operationId: operation.operationId, operationType: operation.type });
152
+ }
153
+ function applyFlowBinding(state, operation) {
154
+ const payload = operation.parsedPayload;
155
+ if (payload.kind === "unbind-flow") {
156
+ const existing = state.flowBindings.some((binding) => binding.bindingId === payload.bindingId);
157
+ if (!existing)
158
+ return invalidRuntimeOperation(operation, `unknown flow binding: ${payload.bindingId}`);
159
+ return { ...state, flowBindings: state.flowBindings.filter((binding) => binding.bindingId !== payload.bindingId) };
160
+ }
161
+ if (payload.kind !== "bind-flow" && payload.kind !== "update-flow-binding")
162
+ return state;
163
+ if (payload.binding.topicId !== state.topicId)
164
+ return invalidRuntimeOperation(operation, "flow binding topicId does not match the Topic");
165
+ const existing = state.flowBindings.find((binding) => binding.bindingId === payload.binding.bindingId);
166
+ if (payload.kind === "bind-flow" && existing !== undefined)
167
+ return invalidRuntimeOperation(operation, `flow binding already exists: ${payload.binding.bindingId}`);
168
+ if (payload.kind === "update-flow-binding" && existing === undefined)
169
+ return invalidRuntimeOperation(operation, `unknown flow binding: ${payload.binding.bindingId}`);
170
+ if (payload.kind === "update-flow-binding" && existing !== undefined) {
171
+ const previousCapabilities = [...existing.capabilityReferences].sort();
172
+ const nextCapabilities = [...payload.binding.capabilityReferences].sort();
173
+ if (existing.capability !== payload.binding.capability || JSON.stringify(previousCapabilities) !== JSON.stringify(nextCapabilities)) {
174
+ return invalidRuntimeOperation(operation, "flow binding update cannot replace or widen capability references");
175
+ }
176
+ if (existing.controllerDid !== payload.binding.controllerDid) {
177
+ return invalidRuntimeOperation(operation, "flow binding controller cannot change; unbind and bind a new controller");
178
+ }
179
+ }
180
+ const competingPrimary = state.flowBindings.find((binding) => binding.bindingId !== payload.binding.bindingId
181
+ && binding.role === "primary"
182
+ && ["pending", "active", "paused"].includes(binding.status));
183
+ if (payload.binding.role === "primary" && ["pending", "active", "paused"].includes(payload.binding.status) && competingPrimary !== undefined) {
184
+ return invalidRuntimeOperation(operation, `active primary flow binding already exists: ${competingPrimary.bindingId}`);
185
+ }
186
+ const retained = state.flowBindings.filter((binding) => binding.bindingId !== payload.binding.bindingId);
187
+ return { ...state, flowBindings: [...retained, payload.binding].sort((left, right) => compareText(left.bindingId, right.bindingId)) };
188
+ }
189
+ const TERMINAL_ACTION_STATUSES = new Set(["succeeded", "failed", "rejected", "cancelled"]);
190
+ const ALLOWED_ACTION_RECEIPT_TRANSITIONS = {
191
+ requested: ["requested", "awaiting_confirmation", "running", "succeeded", "failed", "rejected", "cancelled", "needs_verification"],
192
+ awaiting_confirmation: ["awaiting_confirmation", "running", "succeeded", "failed", "rejected", "cancelled", "needs_verification"],
193
+ running: ["running", "succeeded", "failed", "rejected", "cancelled", "needs_verification"],
194
+ needs_verification: ["needs_verification", "succeeded", "failed", "rejected", "cancelled"],
195
+ };
196
+ function applyActionRequest(state, operation) {
197
+ const payload = operation.parsedPayload;
198
+ if (payload.kind !== "request-action")
199
+ return state;
200
+ const request = payload.request;
201
+ if (request.topicId !== state.topicId)
202
+ return invalidRuntimeOperation(operation, "action request topicId does not match the Topic");
203
+ if (request.topicRevision !== operation.previousRevision)
204
+ return invalidRuntimeOperation(operation, "action request topicRevision must equal previousRevision");
205
+ if (request.flowBindingId !== undefined && !state.flowBindings.some((binding) => binding.bindingId === request.flowBindingId)) {
206
+ return invalidRuntimeOperation(operation, `unknown flow binding: ${request.flowBindingId}`);
207
+ }
208
+ if (state.actions.some((action) => action.request.requestId === request.requestId)) {
209
+ return invalidRuntimeOperation(operation, `action request already exists: ${request.requestId}`);
210
+ }
211
+ const projected = {
212
+ request,
213
+ status: request.confirmation === "required" ? "awaiting_confirmation" : "requested",
214
+ operationId: operation.operationId,
215
+ };
216
+ return {
217
+ ...state,
218
+ actions: [...state.actions, projected]
219
+ .sort((left, right) => compareText(left.request.requestId, right.request.requestId)),
220
+ };
221
+ }
222
+ function applyActionCancellation(state, operation) {
223
+ const payload = operation.parsedPayload;
224
+ if (payload.kind !== "cancel-action")
225
+ return state;
226
+ const target = state.actions.find((action) => action.request.requestId === payload.requestId);
227
+ if (target === undefined)
228
+ return invalidRuntimeOperation(operation, `unknown action request: ${payload.requestId}`);
229
+ if (TERMINAL_ACTION_STATUSES.has(target.status))
230
+ return invalidRuntimeOperation(operation, `action request is already terminal: ${payload.requestId}`);
231
+ return {
232
+ ...state,
233
+ actions: state.actions.map((action) => action === target ? { ...action, status: "cancelled", operationId: operation.operationId } : action),
234
+ };
235
+ }
236
+ function validateActionReceipt(target, receipt, state, operation) {
237
+ if (receipt.topicId !== state.topicId || receipt.topicRevision !== target.request.topicRevision) {
238
+ return invalidRuntimeOperation(operation, "receipt Topic identity or revision does not match its request");
239
+ }
240
+ if (receipt.action.type !== target.request.actionType || receipt.action.contractDigest !== target.request.actionContractDigest) {
241
+ return invalidRuntimeOperation(operation, "receipt Action contract does not match its request");
242
+ }
243
+ if (receipt.runtime.provider !== target.request.executor)
244
+ return invalidRuntimeOperation(operation, "receipt runtime provider does not match its request");
245
+ if (receipt.input.digest !== target.request.inputs.digest)
246
+ return invalidRuntimeOperation(operation, "receipt input digest does not match its request");
247
+ if (receipt.idempotencyKey !== target.request.idempotencyKey)
248
+ return invalidRuntimeOperation(operation, "receipt idempotency key does not match its request");
249
+ if (receipt.runtime.bindingId !== target.request.flowBindingId)
250
+ return invalidRuntimeOperation(operation, "receipt flow binding does not match its request");
251
+ const previous = target.latestReceipt;
252
+ if (previous?.receiptId === receipt.receiptId && previous.sequence === receipt.sequence && JSON.stringify(previous) === JSON.stringify(receipt))
253
+ return "duplicate";
254
+ if (previous !== undefined && receipt.sequence <= previous.sequence)
255
+ return invalidRuntimeOperation(operation, "receipt sequence must increase monotonically");
256
+ if (TERMINAL_ACTION_STATUSES.has(target.status))
257
+ return invalidRuntimeOperation(operation, `action request is already terminal: ${receipt.requestId}`);
258
+ if (target.request.confirmation === "required"
259
+ && !["awaiting_confirmation", "rejected", "cancelled"].includes(receipt.status)
260
+ && receipt.authorization.confirmation === undefined) {
261
+ return invalidRuntimeOperation(operation, "receipt cannot execute a confirmation-required request without a confirmation reference");
262
+ }
263
+ if (!ALLOWED_ACTION_RECEIPT_TRANSITIONS[target.status]?.includes(receipt.status)) {
264
+ return invalidRuntimeOperation(operation, `invalid Action receipt transition: ${target.status} -> ${receipt.status}`);
265
+ }
266
+ return "valid";
267
+ }
268
+ function applyActionReceipt(state, operation) {
269
+ const payload = operation.parsedPayload;
270
+ if (payload.kind !== "record-action-receipt")
271
+ return state;
272
+ const receipt = payload.receipt;
273
+ const target = state.actions.find((action) => action.request.requestId === receipt.requestId);
274
+ if (target === undefined)
275
+ return invalidRuntimeOperation(operation, `unknown action request: ${receipt.requestId}`);
276
+ if (validateActionReceipt(target, receipt, state, operation) === "duplicate")
277
+ return state;
278
+ return {
279
+ ...state,
280
+ actions: state.actions.map((action) => action === target
281
+ ? { ...action, latestReceipt: receipt, status: receipt.status, operationId: operation.operationId }
282
+ : action),
283
+ };
284
+ }
285
+ function applyActionRuntime(state, operation) {
286
+ let updated = applyFlowBinding(state, operation);
287
+ updated = applyActionRequest(updated, operation);
288
+ updated = applyActionCancellation(updated, operation);
289
+ return applyActionReceipt(updated, operation);
290
+ }
146
291
  function applyRedirect(state, operation) {
147
292
  const payload = operation.parsedPayload;
148
293
  if (payload.kind !== "redirect")
@@ -185,6 +330,11 @@ export function applyOperation(state, operation) {
185
330
  updated = applyDecision(updated, operation);
186
331
  updated = applyContract(updated, operation);
187
332
  updated = applyAutomation(updated, operation);
333
+ updated = applyActionRuntime(updated, operation);
334
+ updated = {
335
+ ...updated,
336
+ workBridge: applyWorkBridgeOperation(updated.workBridge, operation, updated.contracts.effective),
337
+ };
188
338
  updated = applyGraphRelation(updated, operation);
189
339
  updated = applyRedirect(updated, operation);
190
340
  updated = applyResolution(updated, payload);
@@ -1 +1 @@
1
- {"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/projector/state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/projector/state.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,5 @@
1
+ import type { TopicWorkBridgeProjection } from "../work-bridge/types.js";
2
+ import type { ActionReceiptV2, ProjectedTopicAction, TopicActionRequestV1, TopicFlowBindingV1 } from "../action-runtime/types.js";
1
3
  export declare const TOPIC_STATUSES: readonly ["draft", "active", "waiting", "blocked", "resolved", "archived", "redirected"];
2
4
  export declare const TOPIC_KINDS: readonly ["discussion", "question", "decision", "proposal", "task", "incident", "flow", "agent_task", "evaluation", "claims"];
3
5
  export declare const TOPIC_CONTEXT_TYPES: readonly ["ixo.flow", "ixo.resource", "ixo.service", "ixo.authority", "ixo.domain", "ixo.account", "ixo.entity"];
@@ -5,7 +7,7 @@ export declare const TOPIC_VFS_FILE_PROVIDER = "ixo.vfs";
5
7
  export type TopicStatus = (typeof TOPIC_STATUSES)[number];
6
8
  export type TopicKind = (typeof TOPIC_KINDS)[number];
7
9
  export type TopicContextType = (typeof TOPIC_CONTEXT_TYPES)[number];
8
- export type TopicOperationType = "rename" | "change-status" | "update-overview" | "link-context" | "unlink-context" | "attach-files" | "detach-files" | "record-decision" | "propose-contract" | "update-contract" | "accept-contract" | "supersede-contract" | "bind-automation" | "update-automation" | "pause-automation" | "remove-automation" | "redirect" | "branch" | "merge" | "resolve-conflict";
10
+ export type TopicOperationType = "rename" | "change-status" | "update-overview" | "link-context" | "unlink-context" | "attach-files" | "detach-files" | "record-decision" | "propose-contract" | "update-contract" | "accept-contract" | "supersede-contract" | "bind-automation" | "update-automation" | "pause-automation" | "remove-automation" | "bind-flow" | "update-flow-binding" | "unbind-flow" | "request-action" | "cancel-action" | "record-action-receipt" | "bind-external-work" | "sync-external-work" | "unlink-external-work" | "submit-delivery" | "record-delivery-decision" | "record-evaluation" | "record-approval" | "record-claim" | "record-settlement" | "redirect" | "branch" | "merge" | "resolve-conflict";
9
11
  export interface TopicContext {
10
12
  readonly type: string;
11
13
  readonly id: string;
@@ -112,7 +114,14 @@ export type TopicAutomationStatus = "pending" | "active" | "paused" | "failed";
112
114
  export interface TopicAutomationBinding {
113
115
  readonly provider: "temporal";
114
116
  readonly scheduleId: string;
115
- readonly actionId: string;
117
+ readonly actionId?: string;
118
+ readonly target?: {
119
+ readonly kind: "action";
120
+ readonly actionType: string;
121
+ } | {
122
+ readonly kind: "flow";
123
+ readonly bindingId: string;
124
+ };
116
125
  readonly recurrence: Readonly<Record<string, unknown>>;
117
126
  readonly status: TopicAutomationStatus;
118
127
  readonly nextRunAt?: string;
@@ -150,6 +159,9 @@ export interface TopicProjection {
150
159
  readonly decisions: readonly TopicDecision[];
151
160
  readonly contracts: TopicContractHeads;
152
161
  readonly automations: readonly TopicAutomationBinding[];
162
+ readonly flowBindings: readonly TopicFlowBindingV1[];
163
+ readonly actions: readonly ProjectedTopicAction[];
164
+ readonly workBridge: TopicWorkBridgeProjection;
153
165
  readonly overview?: ProjectedTopicOverview;
154
166
  readonly relations: readonly ProjectedTopicRelation[];
155
167
  readonly redirectTo?: string;
@@ -163,4 +175,4 @@ export interface ProjectionInput {
163
175
  readonly operations: readonly TopicOperation[];
164
176
  readonly authorize: (operation: TopicOperation) => boolean;
165
177
  }
166
- export {};
178
+ export type { ActionReceiptV2, ProjectedTopicAction, TopicActionRequestV1, TopicFlowBindingV1, };
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/projector/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,OAAO;IACP,QAAQ;IACR,SAAS;IACT,SAAS;IACT,UAAU;IACV,UAAU;IACV,YAAY;CACJ,CAAC;AACX,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,YAAY;IACZ,UAAU;IACV,UAAU;IACV,UAAU;IACV,MAAM;IACN,UAAU;IACV,MAAM;IACN,YAAY;IACZ,YAAY;IACZ,QAAQ;CACA,CAAC;AACX,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,UAAU;IACV,cAAc;IACd,aAAa;IACb,eAAe;IACf,YAAY;IACZ,aAAa;IACb,YAAY;CACJ,CAAC;AACX,MAAM,CAAC,MAAM,uBAAuB,GAAG,SAAS,CAAC;AAgCjD;;;GAGG;AACH,MAAM,UAAU,2BAA2B,CAAC,KAAa;IACvD,OAAO,mBAAmB,CAAC,QAAQ,CAAC,KAAyB,CAAC;WACzD,mDAAmD,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACvE,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/projector/types.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,OAAO;IACP,QAAQ;IACR,SAAS;IACT,SAAS;IACT,UAAU;IACV,UAAU;IACV,YAAY;CACJ,CAAC;AACX,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,YAAY;IACZ,UAAU;IACV,UAAU;IACV,UAAU;IACV,MAAM;IACN,UAAU;IACV,MAAM;IACN,YAAY;IACZ,YAAY;IACZ,QAAQ;CACA,CAAC;AACX,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,UAAU;IACV,cAAc;IACd,aAAa;IACb,eAAe;IACf,YAAY;IACZ,aAAa;IACb,YAAY;CACJ,CAAC;AACX,MAAM,CAAC,MAAM,uBAAuB,GAAG,SAAS,CAAC;AA+CjD;;;GAGG;AACH,MAAM,UAAU,2BAA2B,CAAC,KAAa;IACvD,OAAO,mBAAmB,CAAC,QAAQ,CAAC,KAAyB,CAAC;WACzD,mDAAmD,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACvE,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { ExternalWorkflowStateInput, ExternalWorkStateMapV1, ExternalWorkStateMappingResult } from "./types.js";
2
+ export declare function mapExternalWorkState(profile: ExternalWorkStateMapV1, source: ExternalWorkflowStateInput): ExternalWorkStateMappingResult;
@@ -0,0 +1,17 @@
1
+ import { assertContract } from "../contracts/validator.js";
2
+ import { TopicProtocolError } from "../errors.js";
3
+ export function mapExternalWorkState(profile, source) {
4
+ assertContract("external-work-state-map", profile);
5
+ const matches = profile.mappings.filter((candidate) => candidate.workflowStateId === source.workflowStateId);
6
+ const mapping = matches[0];
7
+ if (matches.length !== 1 || mapping === undefined || mapping.category !== source.category) {
8
+ throw new TopicProtocolError("UNMAPPED_EXTERNAL_WORK_STATE", `Workflow state ${source.workflowStateId} is not uniquely mapped by ${profile.profileId}`, { profileId: profile.profileId, ...source });
9
+ }
10
+ return {
11
+ workState: mapping.workState,
12
+ mappingProfileId: profile.profileId,
13
+ mappingVersion: profile.version,
14
+ workflowStateId: source.workflowStateId,
15
+ };
16
+ }
17
+ //# sourceMappingURL=mapping.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapping.js","sourceRoot":"","sources":["../../../src/work-bridge/mapping.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAOlD,MAAM,UAAU,oBAAoB,CAClC,OAA+B,EAC/B,MAAkC;IAElC,cAAc,CAAC,yBAAyB,EAAE,OAAO,CAAC,CAAC;IACnD,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CACrC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,eAAe,KAAK,MAAM,CAAC,eAAe,CACpE,CAAC;IACF,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC1F,MAAM,IAAI,kBAAkB,CAC1B,8BAA8B,EAC9B,kBAAkB,MAAM,CAAC,eAAe,8BAA8B,OAAO,CAAC,SAAS,EAAE,EACzF,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,GAAG,MAAM,EAAE,CAC5C,CAAC;IACJ,CAAC;IACD,OAAO;QACL,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,gBAAgB,EAAE,OAAO,CAAC,SAAS;QACnC,cAAc,EAAE,OAAO,CAAC,OAAO;QAC/B,eAAe,EAAE,MAAM,CAAC,eAAe;KACxC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { PreparedOperation } from "../projector/state.js";
2
+ import type { TopicWorkBridgeProjection } from "./types.js";
3
+ export declare function emptyTopicWorkBridgeProjection(): TopicWorkBridgeProjection;
4
+ export declare function applyWorkBridgeOperation(state: TopicWorkBridgeProjection, operation: PreparedOperation, effectiveContract?: {
5
+ readonly revision: string;
6
+ readonly bodyHash: string;
7
+ }): TopicWorkBridgeProjection;
@@ -0,0 +1,262 @@
1
+ import { TopicProtocolError } from "../errors.js";
2
+ import { compareText } from "../shared/compare.js";
3
+ export function emptyTopicWorkBridgeProjection() {
4
+ return {
5
+ bindings: [],
6
+ deliveryPackets: [],
7
+ deliveryDecisions: [],
8
+ evaluations: [],
9
+ approvals: [],
10
+ claims: [],
11
+ settlements: [],
12
+ };
13
+ }
14
+ function invalid(operation, message) {
15
+ throw new TopicProtocolError("INVALID_OPERATION_PAYLOAD", `${operation.type} ${operation.operationId}: ${message}`, { operationId: operation.operationId, operationType: operation.type });
16
+ }
17
+ function externalKey(binding) {
18
+ const { provider, organizationId, resourceType, resourceId } = binding.external;
19
+ return [provider, organizationId, resourceType, resourceId].join("\u0000");
20
+ }
21
+ function sortedBindings(bindings) {
22
+ return [...bindings].sort((left, right) => compareText(left.bindingId, right.bindingId));
23
+ }
24
+ function applyBinding(state, operation, binding) {
25
+ if (binding.topicId !== operation.topicId)
26
+ return invalid(operation, "binding targets another Topic");
27
+ if (binding.checkpoint.topicRevision !== operation.previousRevision) {
28
+ return invalid(operation, "binding checkpoint must name the previous Topic revision");
29
+ }
30
+ if (state.bindings.some((candidate) => candidate.bindingId === binding.bindingId)) {
31
+ return invalid(operation, `binding already exists: ${binding.bindingId}`);
32
+ }
33
+ const primary = state.bindings.find((candidate) => candidate.tombstone === undefined && candidate.role === "primary" && externalKey(candidate) === externalKey(binding));
34
+ if (binding.role === "primary" && primary !== undefined) {
35
+ return invalid(operation, `external work already has active primary binding ${primary.bindingId}`);
36
+ }
37
+ const projected = { ...binding, lastOperationId: operation.operationId };
38
+ return { ...state, bindings: sortedBindings([...state.bindings, projected]) };
39
+ }
40
+ function applySync(state, operation, payload, effectiveContract) {
41
+ const existing = state.bindings.find((binding) => binding.bindingId === payload.sync.bindingId);
42
+ if (existing === undefined || existing.tombstone !== undefined) {
43
+ return invalid(operation, `active binding not found: ${payload.sync.bindingId}`);
44
+ }
45
+ if (payload.sync.checkpoint.topicRevision !== operation.previousRevision) {
46
+ return invalid(operation, "sync checkpoint must name the previous Topic revision");
47
+ }
48
+ if (effectiveContract !== undefined
49
+ && payload.sync.checkpoint.effectiveContractDigest !== `sha256:${effectiveContract.bodyHash}`) {
50
+ return invalid(operation, "sync checkpoint must bind the effective contract digest");
51
+ }
52
+ const updated = {
53
+ ...existing,
54
+ ...payload.sync,
55
+ lastOperationId: operation.operationId,
56
+ updatedBy: operation.actor,
57
+ updatedAt: operation.createdAt,
58
+ };
59
+ const retained = state.bindings.filter((binding) => binding.bindingId !== existing.bindingId);
60
+ return { ...state, bindings: sortedBindings([...retained, updated]) };
61
+ }
62
+ function applyUnlink(state, operation, payload) {
63
+ const existing = state.bindings.find((binding) => binding.bindingId === payload.bindingId);
64
+ if (existing === undefined)
65
+ return invalid(operation, `binding not found: ${payload.bindingId}`);
66
+ if (existing.tombstone !== undefined)
67
+ return state;
68
+ const tombstone = {
69
+ reason: payload.reason,
70
+ unlinkedBy: operation.actor,
71
+ unlinkedAt: operation.createdAt,
72
+ operationId: operation.operationId,
73
+ };
74
+ const updated = { ...existing, tombstone, lastOperationId: operation.operationId };
75
+ return { ...state, bindings: state.bindings.map((binding) => binding === existing ? updated : binding) };
76
+ }
77
+ function packetFor(state, operation, packetId, digest) {
78
+ const packet = state.deliveryPackets.find((candidate) => candidate.deliveryPacketId === packetId);
79
+ if (packet === undefined || packet.digest !== digest) {
80
+ return invalid(operation, `Delivery Packet reference does not resolve: ${packetId}`);
81
+ }
82
+ return packet;
83
+ }
84
+ function assertPacketSequence(state, operation, packet) {
85
+ const prior = state.deliveryPackets
86
+ .filter((candidate) => candidate.bindingId === packet.bindingId)
87
+ .sort((left, right) => right.sequence - left.sequence)[0];
88
+ if (prior === undefined && (packet.sequence !== 1 || packet.supersedes !== undefined)) {
89
+ return invalid(operation, "first Delivery Packet must use sequence 1 without supersedes");
90
+ }
91
+ if (prior !== undefined && (packet.sequence !== prior.sequence + 1 || packet.supersedes !== prior.deliveryPacketId)) {
92
+ return invalid(operation, "revised Delivery Packet must increment sequence and supersede the current packet");
93
+ }
94
+ }
95
+ function applyDelivery(state, operation, packet, effectiveContract) {
96
+ const binding = state.bindings.find((candidate) => candidate.bindingId === packet.bindingId && candidate.tombstone === undefined);
97
+ if (packet.topicId !== operation.topicId || binding === undefined)
98
+ return invalid(operation, "Delivery Packet requires an active Topic binding");
99
+ if (binding.workState !== "handoff_ready") {
100
+ return invalid(operation, `external work must be handoff_ready, received ${binding.workState}`);
101
+ }
102
+ if (binding.checkpoint.externalSnapshotDigest !== packet.workItemSnapshot.digest) {
103
+ return invalid(operation, "Delivery Packet snapshot does not match the binding checkpoint");
104
+ }
105
+ if (effectiveContract === undefined
106
+ || packet.contract.revision !== effectiveContract.revision
107
+ || packet.contract.digest !== `sha256:${effectiveContract.bodyHash}`) {
108
+ return invalid(operation, "Delivery Packet does not bind the effective accepted contract");
109
+ }
110
+ if (state.deliveryPackets.some((candidate) => candidate.deliveryPacketId === packet.deliveryPacketId)) {
111
+ return invalid(operation, `Delivery Packet already exists: ${packet.deliveryPacketId}`);
112
+ }
113
+ assertPacketSequence(state, operation, packet);
114
+ const handedOff = { ...binding, workState: "handed_off", lastOperationId: operation.operationId, updatedBy: operation.actor, updatedAt: operation.createdAt };
115
+ return {
116
+ ...state,
117
+ bindings: state.bindings.map((candidate) => candidate === binding ? handedOff : candidate),
118
+ deliveryPackets: [...state.deliveryPackets, packet],
119
+ };
120
+ }
121
+ function applyDeliveryDecision(state, operation, decision) {
122
+ packetFor(state, operation, decision.deliveryPacketId, decision.deliveryPacketDigest);
123
+ if (decision.topicId !== operation.topicId)
124
+ return invalid(operation, "delivery decision targets another Topic");
125
+ if (state.deliveryDecisions.some((candidate) => candidate.decisionId === decision.decisionId)) {
126
+ return invalid(operation, `delivery decision already exists: ${decision.decisionId}`);
127
+ }
128
+ return { ...state, deliveryDecisions: [...state.deliveryDecisions, decision] };
129
+ }
130
+ function applyEvaluation(state, operation, evaluation) {
131
+ const packet = packetFor(state, operation, evaluation.deliveryPacketId, evaluation.deliveryPacketDigest);
132
+ if (evaluation.topicId !== operation.topicId)
133
+ return invalid(operation, "evaluation targets another Topic");
134
+ const evidence = new Set(packet.evidence.map((reference) => reference.digest));
135
+ const traces = new Set(packet.traces.map((reference) => reference.digest));
136
+ if (evaluation.evidenceDigests.some((digest) => !evidence.has(digest))
137
+ || evaluation.traceDigests.some((digest) => !traces.has(digest))) {
138
+ return invalid(operation, "evaluation substituted evidence or traces outside the Delivery Packet");
139
+ }
140
+ if (state.evaluations.some((candidate) => candidate.evaluationId === evaluation.evaluationId)) {
141
+ return invalid(operation, `evaluation already exists: ${evaluation.evaluationId}`);
142
+ }
143
+ return { ...state, evaluations: [...state.evaluations, evaluation] };
144
+ }
145
+ function referencedEvaluations(state, operation, packetId, evaluationIds) {
146
+ return evaluationIds.map((evaluationId) => {
147
+ const evaluation = state.evaluations.find((candidate) => candidate.evaluationId === evaluationId);
148
+ if (evaluation === undefined || evaluation.deliveryPacketId !== packetId) {
149
+ return invalid(operation, `evaluation reference does not resolve: ${evaluationId}`);
150
+ }
151
+ return evaluation;
152
+ });
153
+ }
154
+ function applyApproval(state, operation, approval) {
155
+ packetFor(state, operation, approval.deliveryPacketId, approval.deliveryPacketDigest);
156
+ referencedEvaluations(state, operation, approval.deliveryPacketId, approval.evaluationIds);
157
+ if (approval.topicId !== operation.topicId)
158
+ return invalid(operation, "approval targets another Topic");
159
+ if (state.approvals.some((candidate) => candidate.approvalId === approval.approvalId)) {
160
+ return invalid(operation, `approval already exists: ${approval.approvalId}`);
161
+ }
162
+ return { ...state, approvals: [...state.approvals, approval] };
163
+ }
164
+ function applyClaim(state, operation, claim) {
165
+ packetFor(state, operation, claim.deliveryPacketId, claim.deliveryPacketDigest);
166
+ referencedEvaluations(state, operation, claim.deliveryPacketId, claim.evaluationIds);
167
+ const approval = state.approvals.find((candidate) => candidate.approvalId === claim.approvalId);
168
+ if (claim.topicId !== operation.topicId || approval?.deliveryPacketId !== claim.deliveryPacketId) {
169
+ return invalid(operation, "claim does not bind the Topic Packet approval");
170
+ }
171
+ const prior = state.claims.find((candidate) => candidate.claimId === claim.claimId);
172
+ if (prior !== undefined && !sameClaimCore(prior, claim)) {
173
+ return invalid(operation, `claim status update changed immutable claim fields: ${claim.claimId}`);
174
+ }
175
+ const replay = state.claims.find((candidate) => candidate.replayKey === claim.replayKey);
176
+ if (replay !== undefined && replay.claimId !== claim.claimId) {
177
+ return invalid(operation, `claim replay key was already consumed: ${claim.replayKey}`);
178
+ }
179
+ const retained = state.claims.filter((candidate) => candidate !== prior);
180
+ return { ...state, claims: [...retained, claim] };
181
+ }
182
+ function sameClaimCore(left, right) {
183
+ return left.topicId === right.topicId
184
+ && left.deliveryPacketId === right.deliveryPacketId
185
+ && left.deliveryPacketDigest === right.deliveryPacketDigest
186
+ && sameIds(left.evaluationIds, right.evaluationIds)
187
+ && left.approvalId === right.approvalId
188
+ && left.claimantDid === right.claimantDid
189
+ && left.requested.amount === right.requested.amount
190
+ && left.requested.asset === right.requested.asset
191
+ && left.requested.recipient === right.requested.recipient
192
+ && left.replayKey === right.replayKey
193
+ && left.source.provider === right.source.provider
194
+ && left.source.ref === right.source.ref;
195
+ }
196
+ function sameIds(left, right) {
197
+ if (left.length !== right.length)
198
+ return false;
199
+ const orderedLeft = [...left].sort(compareText);
200
+ const orderedRight = [...right].sort(compareText);
201
+ return orderedLeft.every((value, index) => value === orderedRight[index]);
202
+ }
203
+ function assertExecutableSettlement(state, operation, settlement) {
204
+ if (!["authorised", "submitted", "confirmed"].includes(settlement.state))
205
+ return;
206
+ const decision = [...state.deliveryDecisions].reverse().find((candidate) => candidate.deliveryPacketId === settlement.deliveryPacketId);
207
+ const evaluations = referencedEvaluations(state, operation, settlement.deliveryPacketId, settlement.evaluationIds);
208
+ const approval = state.approvals.find((candidate) => candidate.approvalId === settlement.approvalId);
209
+ const claim = state.claims.find((candidate) => candidate.claimId === settlement.claimId);
210
+ const supported = evaluations.length > 0 && evaluations.every((evaluation) => evaluation.outcome === "supported");
211
+ const amountMatches = claim?.requested.amount === settlement.amount
212
+ && claim.requested.asset === settlement.asset
213
+ && claim.requested.recipient === settlement.recipient;
214
+ const evaluationBindingsMatch = approval !== undefined && claim !== undefined
215
+ && sameIds(approval.evaluationIds, settlement.evaluationIds)
216
+ && sameIds(claim.evaluationIds, settlement.evaluationIds)
217
+ && claim.approvalId === settlement.approvalId;
218
+ if (decision?.decision !== "accepted" || !supported || approval?.decision !== "approved"
219
+ || claim?.status !== "approved" || !amountMatches || !evaluationBindingsMatch) {
220
+ return invalid(operation, "executable settlement is missing an accepted delivery, supported evaluation, approval, or eligible claim");
221
+ }
222
+ }
223
+ function applySettlement(state, operation, settlement) {
224
+ const packet = packetFor(state, operation, settlement.deliveryPacketId, settlement.deliveryPacketDigest);
225
+ if (settlement.topicId !== operation.topicId || packet.paymentTerms === undefined) {
226
+ return invalid(operation, "settlement requires the Topic Packet and pinned payment terms");
227
+ }
228
+ const duplicate = state.settlements.find((candidate) => candidate.idempotencyKey === settlement.idempotencyKey);
229
+ if (duplicate !== undefined && (duplicate.settlementId !== settlement.settlementId || duplicate.digest !== settlement.digest)) {
230
+ return invalid(operation, `settlement idempotency key was already consumed: ${settlement.idempotencyKey}`);
231
+ }
232
+ if (duplicate !== undefined)
233
+ return state;
234
+ if (state.settlements.some((candidate) => candidate.settlementId === settlement.settlementId)) {
235
+ return invalid(operation, `settlement already exists: ${settlement.settlementId}`);
236
+ }
237
+ assertExecutableSettlement(state, operation, settlement);
238
+ return { ...state, settlements: [...state.settlements, settlement] };
239
+ }
240
+ export function applyWorkBridgeOperation(state, operation, effectiveContract) {
241
+ const payload = operation.parsedPayload;
242
+ if (payload.kind === "bind-external-work")
243
+ return applyBinding(state, operation, payload.binding);
244
+ if (payload.kind === "sync-external-work")
245
+ return applySync(state, operation, payload, effectiveContract);
246
+ if (payload.kind === "unlink-external-work")
247
+ return applyUnlink(state, operation, payload);
248
+ if (payload.kind === "submit-delivery")
249
+ return applyDelivery(state, operation, payload.deliveryPacket, effectiveContract);
250
+ if (payload.kind === "record-delivery-decision")
251
+ return applyDeliveryDecision(state, operation, payload.deliveryDecision);
252
+ if (payload.kind === "record-evaluation")
253
+ return applyEvaluation(state, operation, payload.evaluation);
254
+ if (payload.kind === "record-approval")
255
+ return applyApproval(state, operation, payload.approval);
256
+ if (payload.kind === "record-claim")
257
+ return applyClaim(state, operation, payload.claim);
258
+ if (payload.kind === "record-settlement")
259
+ return applySettlement(state, operation, payload.settlement);
260
+ return state;
261
+ }
262
+ //# sourceMappingURL=project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../../../src/work-bridge/project.ts"],"names":[],"mappings":"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"}