@voyant-travel/action-ledger 0.104.10

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 (62) hide show
  1. package/LICENSE +201 -0
  2. package/dist/canary.d.ts +17 -0
  3. package/dist/canary.d.ts.map +1 -0
  4. package/dist/canary.js +77 -0
  5. package/dist/capability.d.ts +73 -0
  6. package/dist/capability.d.ts.map +1 -0
  7. package/dist/capability.js +206 -0
  8. package/dist/fingerprint.d.ts +26 -0
  9. package/dist/fingerprint.d.ts.map +1 -0
  10. package/dist/fingerprint.js +55 -0
  11. package/dist/index.d.ts +9 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +8 -0
  14. package/dist/request-context.d.ts +136 -0
  15. package/dist/request-context.d.ts.map +1 -0
  16. package/dist/request-context.js +237 -0
  17. package/dist/route-schemas.d.ts +745 -0
  18. package/dist/route-schemas.d.ts.map +1 -0
  19. package/dist/route-schemas.js +428 -0
  20. package/dist/routes.d.ts +1602 -0
  21. package/dist/routes.d.ts.map +1 -0
  22. package/dist/routes.js +271 -0
  23. package/dist/schema.d.ts +1759 -0
  24. package/dist/schema.d.ts.map +1 -0
  25. package/dist/schema.js +237 -0
  26. package/dist/service/approval-status.d.ts +3 -0
  27. package/dist/service/approval-status.d.ts.map +1 -0
  28. package/dist/service/approval-status.js +14 -0
  29. package/dist/service/cursors.d.ts +22 -0
  30. package/dist/service/cursors.d.ts.map +1 -0
  31. package/dist/service/cursors.js +48 -0
  32. package/dist/service/entries.d.ts +9 -0
  33. package/dist/service/entries.d.ts.map +1 -0
  34. package/dist/service/entries.js +75 -0
  35. package/dist/service/errors.d.ts +20 -0
  36. package/dist/service/errors.d.ts.map +1 -0
  37. package/dist/service/errors.js +36 -0
  38. package/dist/service/listing.d.ts +7 -0
  39. package/dist/service/listing.d.ts.map +1 -0
  40. package/dist/service/listing.js +77 -0
  41. package/dist/service/predicates.d.ts +8 -0
  42. package/dist/service/predicates.d.ts.map +1 -0
  43. package/dist/service/predicates.js +368 -0
  44. package/dist/service/records.d.ts +6 -0
  45. package/dist/service/records.d.ts.map +1 -0
  46. package/dist/service/records.js +51 -0
  47. package/dist/service/relay-lifecycle.d.ts +7 -0
  48. package/dist/service/relay-lifecycle.d.ts.map +1 -0
  49. package/dist/service/relay-lifecycle.js +78 -0
  50. package/dist/service/relay-outbox.d.ts +15 -0
  51. package/dist/service/relay-outbox.d.ts.map +1 -0
  52. package/dist/service/relay-outbox.js +15 -0
  53. package/dist/service/types.d.ts +249 -0
  54. package/dist/service/types.d.ts.map +1 -0
  55. package/dist/service/types.js +1 -0
  56. package/dist/service.d.ts +40 -0
  57. package/dist/service.d.ts.map +1 -0
  58. package/dist/service.js +283 -0
  59. package/dist/timeline.d.ts +67 -0
  60. package/dist/timeline.d.ts.map +1 -0
  61. package/dist/timeline.js +79 -0
  62. package/package.json +93 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route-schemas.d.ts","sourceRoot":"","sources":["../src/route-schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AA8EvB,eAAO,MAAM,gCAAgC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuExC,CAAA;AAEL,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gCAAgC,CAAC,CAAA;AAEzF,eAAO,MAAM,sCAAsC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDhD,CAAA;AAEH,MAAM,MAAM,gCAAgC,GAAG,CAAC,CAAC,KAAK,CACpD,OAAO,sCAAsC,CAC9C,CAAA;AAED,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0DvC,CAAA;AAEH,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAA;AA0CnF,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsBvC,CAAA;AAEL,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAA;AAsCvF,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAUtC,CAAA;AAEL,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAA;AA+CrF,eAAO,MAAM,oCAAoC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAQ/C,CAAA;AAEF,MAAM,MAAM,8BAA8B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oCAAoC,CAAC,CAAA;AAEjG,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDzC,CAAA;AAEH,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAA"}
@@ -0,0 +1,428 @@
1
+ import { z } from "zod";
2
+ const actionLedgerActionKindValues = [
3
+ "read",
4
+ "create",
5
+ "update",
6
+ "delete",
7
+ "execute",
8
+ "approve",
9
+ "reject",
10
+ "reverse",
11
+ "compensate",
12
+ "duplicate",
13
+ ];
14
+ const actionLedgerPrincipalTypeValues = ["user", "api_key", "agent", "workflow", "system"];
15
+ const actionLedgerRiskValues = ["low", "medium", "high", "critical"];
16
+ const actionLedgerStatusValues = [
17
+ "requested",
18
+ "awaiting_approval",
19
+ "approved",
20
+ "denied",
21
+ "succeeded",
22
+ "failed",
23
+ "reversed",
24
+ "compensated",
25
+ "expired",
26
+ "cancelled",
27
+ "superseded",
28
+ ];
29
+ const actionLedgerApprovalStatusValues = [
30
+ "pending",
31
+ "approved",
32
+ "denied",
33
+ "expired",
34
+ "cancelled",
35
+ "superseded",
36
+ ];
37
+ const actionLedgerRelayStatusValues = [
38
+ "pending",
39
+ "processing",
40
+ "succeeded",
41
+ "failed",
42
+ "dead_letter",
43
+ ];
44
+ const actionLedgerReversalKindValues = ["none", "revert", "compensate", "domain_command"];
45
+ const actionLedgerReversalStateValues = [
46
+ "not_reversible",
47
+ "available",
48
+ "requested",
49
+ "running",
50
+ "completed",
51
+ "failed",
52
+ "expired",
53
+ ];
54
+ const actionLedgerReversalOutcomeValues = ["full", "partial", "failed"];
55
+ function commaSeparatedEnumList(values) {
56
+ return z.preprocess((value) => {
57
+ if (typeof value !== "string")
58
+ return value;
59
+ return value
60
+ .split(",")
61
+ .map((part) => part.trim())
62
+ .filter(Boolean);
63
+ }, z.array(z.enum(values)).min(1).optional());
64
+ }
65
+ function commaSeparatedStringList() {
66
+ return z.preprocess((value) => {
67
+ if (typeof value !== "string")
68
+ return value;
69
+ return value
70
+ .split(",")
71
+ .map((part) => part.trim())
72
+ .filter(Boolean);
73
+ }, z.array(z.string().trim().min(1)).min(1).optional());
74
+ }
75
+ export const actionLedgerEntryListQuerySchema = z
76
+ .object({
77
+ actionName: z.string().trim().min(1).optional(),
78
+ actionKind: z.enum(actionLedgerActionKindValues).optional(),
79
+ actorType: z.string().trim().min(1).optional(),
80
+ principalType: z.enum(actionLedgerPrincipalTypeValues).optional(),
81
+ principalId: z.string().trim().min(1).optional(),
82
+ apiTokenId: z.string().trim().min(1).optional(),
83
+ sessionId: z.string().trim().min(1).optional(),
84
+ callerType: z.string().trim().min(1).optional(),
85
+ organizationId: z.string().trim().min(1).optional(),
86
+ targetType: z.string().trim().min(1).optional(),
87
+ targetId: z.string().trim().min(1).optional(),
88
+ targetIds: commaSeparatedStringList(),
89
+ routeOrToolName: z.string().trim().min(1).optional(),
90
+ workflowRunId: z.string().trim().min(1).optional(),
91
+ workflowStepId: z.string().trim().min(1).optional(),
92
+ correlationId: z.string().trim().min(1).optional(),
93
+ causationActionId: z.string().trim().min(1).optional(),
94
+ capabilityId: z.string().trim().min(1).optional(),
95
+ capabilityVersion: z.string().trim().min(1).optional(),
96
+ authorizationSource: z.string().trim().min(1).optional(),
97
+ approvalId: z.string().trim().min(1).optional(),
98
+ amendsActionId: z.string().trim().min(1).optional(),
99
+ idempotencyScope: z.string().trim().min(1).optional(),
100
+ idempotencyKey: z.string().trim().min(1).optional(),
101
+ evaluatedRisk: commaSeparatedEnumList(actionLedgerRiskValues),
102
+ status: commaSeparatedEnumList(actionLedgerStatusValues),
103
+ reversalKind: commaSeparatedEnumList(actionLedgerReversalKindValues),
104
+ reversalState: commaSeparatedEnumList(actionLedgerReversalStateValues),
105
+ reversalOutcome: commaSeparatedEnumList(actionLedgerReversalOutcomeValues),
106
+ reversesActionId: z.string().trim().min(1).optional(),
107
+ reversedByActionId: z.string().trim().min(1).optional(),
108
+ sensitiveReasonCode: z.string().trim().min(1).optional(),
109
+ decisionPolicy: z.string().trim().min(1).optional(),
110
+ occurredAtFrom: z.string().datetime().optional(),
111
+ occurredAtTo: z.string().datetime().optional(),
112
+ cursorOccurredAt: z.string().datetime().optional(),
113
+ cursorId: z.string().trim().min(1).optional(),
114
+ sortDir: z.enum(["asc", "desc"]).optional(),
115
+ limit: z.coerce.number().int().min(1).max(200).optional(),
116
+ })
117
+ .superRefine((value, ctx) => {
118
+ if (Boolean(value.cursorOccurredAt) === Boolean(value.cursorId))
119
+ return;
120
+ ctx.addIssue({
121
+ code: z.ZodIssueCode.custom,
122
+ path: value.cursorOccurredAt ? ["cursorId"] : ["cursorOccurredAt"],
123
+ message: "cursorOccurredAt and cursorId must be provided together",
124
+ });
125
+ })
126
+ .superRefine((value, ctx) => {
127
+ if (!value.targetId || !value.targetIds)
128
+ return;
129
+ ctx.addIssue({
130
+ code: z.ZodIssueCode.custom,
131
+ path: ["targetIds"],
132
+ message: "targetId and targetIds cannot be provided together",
133
+ });
134
+ })
135
+ .transform(({ cursorOccurredAt, cursorId, occurredAtFrom, occurredAtTo, ...query }) => ({
136
+ ...query,
137
+ occurredAtFrom: occurredAtFrom ? new Date(occurredAtFrom) : undefined,
138
+ occurredAtTo: occurredAtTo ? new Date(occurredAtTo) : undefined,
139
+ cursor: cursorOccurredAt && cursorId
140
+ ? {
141
+ occurredAt: cursorOccurredAt,
142
+ id: cursorId,
143
+ }
144
+ : undefined,
145
+ }));
146
+ export const actionLedgerRelayOutboxListQuerySchema = z
147
+ .object({
148
+ actionId: z.string().trim().min(1).optional(),
149
+ organizationId: z.string().trim().min(1).optional(),
150
+ relayStatus: commaSeparatedEnumList(actionLedgerRelayStatusValues),
151
+ dueBefore: z.string().datetime().optional(),
152
+ createdAtFrom: z.string().datetime().optional(),
153
+ createdAtTo: z.string().datetime().optional(),
154
+ processedAtFrom: z.string().datetime().optional(),
155
+ processedAtTo: z.string().datetime().optional(),
156
+ cursorCreatedAt: z.string().datetime().optional(),
157
+ cursorId: z.string().trim().min(1).optional(),
158
+ limit: z.coerce.number().int().min(1).max(200).optional(),
159
+ })
160
+ .superRefine((value, ctx) => {
161
+ if (Boolean(value.cursorCreatedAt) === Boolean(value.cursorId))
162
+ return;
163
+ ctx.addIssue({
164
+ code: z.ZodIssueCode.custom,
165
+ path: value.cursorCreatedAt ? ["cursorId"] : ["cursorCreatedAt"],
166
+ message: "cursorCreatedAt and cursorId must be provided together",
167
+ });
168
+ })
169
+ .transform(({ cursorCreatedAt, cursorId, dueBefore, createdAtFrom, createdAtTo, processedAtFrom, processedAtTo, ...query }) => ({
170
+ ...query,
171
+ dueBefore: dueBefore ? new Date(dueBefore) : undefined,
172
+ createdAtFrom: createdAtFrom ? new Date(createdAtFrom) : undefined,
173
+ createdAtTo: createdAtTo ? new Date(createdAtTo) : undefined,
174
+ processedAtFrom: processedAtFrom ? new Date(processedAtFrom) : undefined,
175
+ processedAtTo: processedAtTo ? new Date(processedAtTo) : undefined,
176
+ cursor: cursorCreatedAt && cursorId
177
+ ? {
178
+ createdAt: cursorCreatedAt,
179
+ id: cursorId,
180
+ }
181
+ : undefined,
182
+ }));
183
+ export const actionApprovalListQuerySchema = z
184
+ .object({
185
+ requestedActionId: z.string().trim().min(1).optional(),
186
+ status: commaSeparatedEnumList(actionLedgerApprovalStatusValues),
187
+ requestedByPrincipalId: z.string().trim().min(1).optional(),
188
+ assignedToPrincipalId: z.string().trim().min(1).optional(),
189
+ decidedByPrincipalId: z.string().trim().min(1).optional(),
190
+ delegatedFromPrincipalId: z.string().trim().min(1).optional(),
191
+ policyName: z.string().trim().min(1).optional(),
192
+ policyVersion: z.string().trim().min(1).optional(),
193
+ riskSnapshot: commaSeparatedEnumList(actionLedgerRiskValues),
194
+ reasonCode: z.string().trim().min(1).optional(),
195
+ expiresAtFrom: z.string().datetime().optional(),
196
+ expiresAtTo: z.string().datetime().optional(),
197
+ decidedAtFrom: z.string().datetime().optional(),
198
+ decidedAtTo: z.string().datetime().optional(),
199
+ createdAtFrom: z.string().datetime().optional(),
200
+ createdAtTo: z.string().datetime().optional(),
201
+ cursorCreatedAt: z.string().datetime().optional(),
202
+ cursorId: z.string().trim().min(1).optional(),
203
+ limit: z.coerce.number().int().min(1).max(200).optional(),
204
+ })
205
+ .superRefine((value, ctx) => {
206
+ if (Boolean(value.cursorCreatedAt) === Boolean(value.cursorId))
207
+ return;
208
+ ctx.addIssue({
209
+ code: z.ZodIssueCode.custom,
210
+ path: value.cursorCreatedAt ? ["cursorId"] : ["cursorCreatedAt"],
211
+ message: "cursorCreatedAt and cursorId must be provided together",
212
+ });
213
+ })
214
+ .transform(({ cursorCreatedAt, cursorId, expiresAtFrom, expiresAtTo, decidedAtFrom, decidedAtTo, createdAtFrom, createdAtTo, ...query }) => ({
215
+ ...query,
216
+ expiresAtFrom: expiresAtFrom ? new Date(expiresAtFrom) : undefined,
217
+ expiresAtTo: expiresAtTo ? new Date(expiresAtTo) : undefined,
218
+ decidedAtFrom: decidedAtFrom ? new Date(decidedAtFrom) : undefined,
219
+ decidedAtTo: decidedAtTo ? new Date(decidedAtTo) : undefined,
220
+ createdAtFrom: createdAtFrom ? new Date(createdAtFrom) : undefined,
221
+ createdAtTo: createdAtTo ? new Date(createdAtTo) : undefined,
222
+ cursor: cursorCreatedAt && cursorId
223
+ ? {
224
+ createdAt: cursorCreatedAt,
225
+ id: cursorId,
226
+ }
227
+ : undefined,
228
+ }));
229
+ const nullableTrimmedString = z
230
+ .string()
231
+ .trim()
232
+ .min(1)
233
+ .optional()
234
+ .transform((value) => value ?? null);
235
+ const actionLedgerApprovalRequestedActionBodySchema = z.object({
236
+ actionName: z.string().trim().min(1),
237
+ actionVersion: z.string().trim().min(1).default("v1"),
238
+ actionKind: z.enum(actionLedgerActionKindValues),
239
+ evaluatedRisk: z.enum(actionLedgerRiskValues),
240
+ actorType: nullableTrimmedString,
241
+ principalType: z.enum(actionLedgerPrincipalTypeValues),
242
+ principalId: z.string().trim().min(1),
243
+ principalSubtype: nullableTrimmedString,
244
+ sessionId: nullableTrimmedString,
245
+ apiTokenId: nullableTrimmedString,
246
+ internalRequest: z.boolean().default(false),
247
+ delegatedByPrincipalType: z.enum(actionLedgerPrincipalTypeValues).optional(),
248
+ delegatedByPrincipalId: nullableTrimmedString,
249
+ delegationId: nullableTrimmedString,
250
+ callerType: nullableTrimmedString,
251
+ organizationId: nullableTrimmedString,
252
+ routeOrToolName: nullableTrimmedString,
253
+ workflowRunId: nullableTrimmedString,
254
+ workflowStepId: nullableTrimmedString,
255
+ correlationId: nullableTrimmedString,
256
+ causationActionId: nullableTrimmedString,
257
+ idempotencyScope: nullableTrimmedString,
258
+ idempotencyKey: nullableTrimmedString,
259
+ idempotencyFingerprint: nullableTrimmedString,
260
+ targetType: z.string().trim().min(1),
261
+ targetId: z.string().trim().min(1),
262
+ capabilityId: nullableTrimmedString,
263
+ capabilityVersion: nullableTrimmedString,
264
+ authorizationSource: nullableTrimmedString,
265
+ amendsActionId: nullableTrimmedString,
266
+ });
267
+ export const requestActionApprovalBodySchema = z
268
+ .object({
269
+ requestedAction: actionLedgerApprovalRequestedActionBodySchema,
270
+ approval: z.object({
271
+ requestedByPrincipalId: nullableTrimmedString,
272
+ assignedToPrincipalId: nullableTrimmedString,
273
+ delegatedFromPrincipalId: nullableTrimmedString,
274
+ policyName: z.string().trim().min(1),
275
+ policyVersion: z.string().trim().min(1),
276
+ targetSnapshotRef: nullableTrimmedString,
277
+ riskSnapshot: z.enum(actionLedgerRiskValues).optional(),
278
+ reasonCode: nullableTrimmedString,
279
+ expiresAt: z.string().datetime().optional(),
280
+ }),
281
+ })
282
+ .transform(({ approval, ...body }) => ({
283
+ ...body,
284
+ approval: {
285
+ ...approval,
286
+ riskSnapshot: approval.riskSnapshot ?? null,
287
+ expiresAt: approval.expiresAt ? new Date(approval.expiresAt) : null,
288
+ },
289
+ }));
290
+ const actionLedgerApprovalDecisionStatusValues = [
291
+ "approved",
292
+ "denied",
293
+ "expired",
294
+ "cancelled",
295
+ "superseded",
296
+ ];
297
+ const actionLedgerApprovalDecisionActionBodySchema = z.object({
298
+ actionName: z.string().trim().min(1),
299
+ actionVersion: z.string().trim().min(1).default("v1"),
300
+ actorType: nullableTrimmedString,
301
+ principalType: z.enum(actionLedgerPrincipalTypeValues),
302
+ principalId: z.string().trim().min(1),
303
+ principalSubtype: nullableTrimmedString,
304
+ sessionId: nullableTrimmedString,
305
+ apiTokenId: nullableTrimmedString,
306
+ internalRequest: z.boolean().default(false),
307
+ delegatedByPrincipalType: z.enum(actionLedgerPrincipalTypeValues).optional(),
308
+ delegatedByPrincipalId: nullableTrimmedString,
309
+ delegationId: nullableTrimmedString,
310
+ callerType: nullableTrimmedString,
311
+ organizationId: nullableTrimmedString,
312
+ routeOrToolName: nullableTrimmedString,
313
+ workflowRunId: nullableTrimmedString,
314
+ workflowStepId: nullableTrimmedString,
315
+ correlationId: nullableTrimmedString,
316
+ idempotencyScope: nullableTrimmedString,
317
+ idempotencyKey: nullableTrimmedString,
318
+ idempotencyFingerprint: nullableTrimmedString,
319
+ capabilityId: nullableTrimmedString,
320
+ capabilityVersion: nullableTrimmedString,
321
+ authorizationSource: nullableTrimmedString,
322
+ amendsActionId: nullableTrimmedString,
323
+ });
324
+ export const decideActionApprovalBodySchema = z
325
+ .object({
326
+ status: z.enum(actionLedgerApprovalDecisionStatusValues),
327
+ decidedByPrincipalId: z.string().trim().min(1),
328
+ decidedAt: z.string().datetime().optional(),
329
+ decisionAction: actionLedgerApprovalDecisionActionBodySchema,
330
+ })
331
+ .transform(({ decidedAt, ...body }) => ({
332
+ ...body,
333
+ decidedAt: decidedAt ? new Date(decidedAt) : undefined,
334
+ }));
335
+ const actionLedgerReversalActionBodySchema = z.object({
336
+ actionName: z.string().trim().min(1),
337
+ actionVersion: z.string().trim().min(1).default("v1"),
338
+ actionKind: z.enum(["reverse", "compensate"]),
339
+ status: z.enum(["reversed", "compensated", "failed"]),
340
+ evaluatedRisk: z.enum(actionLedgerRiskValues).default("high"),
341
+ actorType: nullableTrimmedString,
342
+ principalType: z.enum(actionLedgerPrincipalTypeValues),
343
+ principalId: z.string().trim().min(1),
344
+ principalSubtype: nullableTrimmedString,
345
+ sessionId: nullableTrimmedString,
346
+ apiTokenId: nullableTrimmedString,
347
+ internalRequest: z.boolean().default(false),
348
+ delegatedByPrincipalType: z.enum(actionLedgerPrincipalTypeValues).optional(),
349
+ delegatedByPrincipalId: nullableTrimmedString,
350
+ delegationId: nullableTrimmedString,
351
+ callerType: nullableTrimmedString,
352
+ organizationId: nullableTrimmedString,
353
+ routeOrToolName: nullableTrimmedString,
354
+ workflowRunId: nullableTrimmedString,
355
+ workflowStepId: nullableTrimmedString,
356
+ correlationId: nullableTrimmedString,
357
+ idempotencyScope: nullableTrimmedString,
358
+ idempotencyKey: nullableTrimmedString,
359
+ idempotencyFingerprint: nullableTrimmedString,
360
+ targetType: z.string().trim().min(1),
361
+ targetId: z.string().trim().min(1),
362
+ capabilityId: nullableTrimmedString,
363
+ capabilityVersion: nullableTrimmedString,
364
+ authorizationSource: nullableTrimmedString,
365
+ approvalId: nullableTrimmedString,
366
+ amendsActionId: nullableTrimmedString,
367
+ mutationDetail: z
368
+ .object({
369
+ commandInputRef: nullableTrimmedString,
370
+ commandResultRef: nullableTrimmedString,
371
+ summary: nullableTrimmedString,
372
+ reversalKind: z.enum(actionLedgerReversalKindValues).default("none"),
373
+ reversalCommandId: nullableTrimmedString,
374
+ reversalCommandVersion: nullableTrimmedString,
375
+ reversalArgsRef: nullableTrimmedString,
376
+ })
377
+ .optional(),
378
+ });
379
+ export const recordActionLedgerReversalBodySchema = z.object({
380
+ reversalAction: actionLedgerReversalActionBodySchema,
381
+ projection: z
382
+ .object({
383
+ reversalState: z.enum(actionLedgerReversalStateValues).optional(),
384
+ reversalOutcome: z.enum(actionLedgerReversalOutcomeValues).optional(),
385
+ })
386
+ .optional(),
387
+ });
388
+ export const actionDelegationListQuerySchema = z
389
+ .object({
390
+ rootPrincipalType: z.enum(actionLedgerPrincipalTypeValues).optional(),
391
+ rootPrincipalId: z.string().trim().min(1).optional(),
392
+ parentPrincipalType: z.enum(actionLedgerPrincipalTypeValues).optional(),
393
+ parentPrincipalId: z.string().trim().min(1).optional(),
394
+ childPrincipalType: z.enum(actionLedgerPrincipalTypeValues).optional(),
395
+ childPrincipalId: z.string().trim().min(1).optional(),
396
+ grantSource: z.string().trim().min(1).optional(),
397
+ capabilityScopeRef: z.string().trim().min(1).optional(),
398
+ budgetScopeRef: z.string().trim().min(1).optional(),
399
+ expiresAtFrom: z.string().datetime().optional(),
400
+ expiresAtTo: z.string().datetime().optional(),
401
+ createdAtFrom: z.string().datetime().optional(),
402
+ createdAtTo: z.string().datetime().optional(),
403
+ cursorCreatedAt: z.string().datetime().optional(),
404
+ cursorId: z.string().trim().min(1).optional(),
405
+ limit: z.coerce.number().int().min(1).max(200).optional(),
406
+ })
407
+ .superRefine((value, ctx) => {
408
+ if (Boolean(value.cursorCreatedAt) === Boolean(value.cursorId))
409
+ return;
410
+ ctx.addIssue({
411
+ code: z.ZodIssueCode.custom,
412
+ path: value.cursorCreatedAt ? ["cursorId"] : ["cursorCreatedAt"],
413
+ message: "cursorCreatedAt and cursorId must be provided together",
414
+ });
415
+ })
416
+ .transform(({ cursorCreatedAt, cursorId, expiresAtFrom, expiresAtTo, createdAtFrom, createdAtTo, ...query }) => ({
417
+ ...query,
418
+ expiresAtFrom: expiresAtFrom ? new Date(expiresAtFrom) : undefined,
419
+ expiresAtTo: expiresAtTo ? new Date(expiresAtTo) : undefined,
420
+ createdAtFrom: createdAtFrom ? new Date(createdAtFrom) : undefined,
421
+ createdAtTo: createdAtTo ? new Date(createdAtTo) : undefined,
422
+ cursor: cursorCreatedAt && cursorId
423
+ ? {
424
+ createdAt: cursorCreatedAt,
425
+ id: cursorId,
426
+ }
427
+ : undefined,
428
+ }));