@nodii/approval 0.2.0 → 0.3.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preview-validation.js","sourceRoot":"","sources":["../src/preview-validation.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../src/request.ts"],"names":[],"mappings":"AA8BA,OAAO,KAAK,EAKV,mBAAmB,EACnB,qBAAqB,EAEtB,MAAM,SAAS,CAAC;AAGjB,wBAAsB,eAAe,CACnC,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC,qBAAqB,CAAC,CA8ChC"}
1
+ {"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../src/request.ts"],"names":[],"mappings":"AAgCA,OAAO,KAAK,EAIV,mBAAmB,EACnB,qBAAqB,EAEtB,MAAM,SAAS,CAAC;AAGjB,wBAAsB,eAAe,CACnC,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC,qBAAqB,CAAC,CA0DhC"}
package/dist/request.js CHANGED
@@ -14,7 +14,9 @@ import { wrapForSagaStep } from "@nodii/idempotency";
14
14
  import { insertDeferredAction, markFailed } from "./deferred-actions";
15
15
  import { HandlerNotRegistered, IdempotencyKeyRequired, UndeclaredRequesterKind, } from "./errors";
16
16
  import { requireApproval, requireHandlers, requireKindRegistry, requesterRegistry, } from "./init";
17
+ import { approvalRequestedTopic, insertBeginEventOutboxRow } from "./outbox";
17
18
  import { resolvePolicy } from "./policies";
19
+ import { validatePreviewSummary } from "./preview-validation";
18
20
  import { emitAudit, inc, observe } from "./telemetry-shim";
19
21
  import { DEFAULT_IDEMPOTENCY_TTL_SECONDS } from "./types";
20
22
  export async function requestApproval(opts) {
@@ -38,6 +40,13 @@ export async function requestApproval(opts) {
38
40
  // task-tracking resolves it via ApprovalPolicyService.GetPolicy (D231
39
41
  // Rule 3); the requester library MUST NOT contact the owner here.
40
42
  const def = ownedDef ?? syntheticCrossOwnerDef(opts.kind);
43
+ // [1b] D236 — validate the structured non-PII preview summary BEFORE the
44
+ // idempotency wrap (hence BEFORE any deferred_action row is written or
45
+ // begin-event is emitted). Throws InvalidApprovalPreviewShape on a bad
46
+ // shape / forbidden / required-absent / PII-pattern hit. A cross-owner
47
+ // kind has no local previewSchema (the synthetic def carries `undefined`),
48
+ // so only the global allow-list applies to it.
49
+ const previewSummary = validatePreviewSummary(def.kind, opts.deferredActionPayloadSummary, def.previewSchema);
41
50
  // [2] Wrap via idempotency. Replay returns the same triple.
42
51
  return wrapForSagaStep({
43
52
  sagaId: opts.sagaId ??
@@ -51,8 +60,8 @@ export async function requestApproval(opts) {
51
60
  }),
52
61
  ttlSeconds: DEFAULT_IDEMPOTENCY_TTL_SECONDS,
53
62
  handler: () => ownedDef
54
- ? runCanonicalSequence(cfg, def, opts)
55
- : runCrossOwnerSequence(cfg, def, opts),
63
+ ? runCanonicalSequence(cfg, def, opts, previewSummary)
64
+ : runCrossOwnerSequence(cfg, def, opts, previewSummary),
56
65
  });
57
66
  }
58
67
  /** Owner service for a kind: everything before the first `.` (D231 Rule 1). */
@@ -85,11 +94,19 @@ function syntheticCrossOwnerDef(kind) {
85
94
  selfActionAllowed: false,
86
95
  expirySeconds: undefined,
87
96
  actionButtonLabel: undefined,
97
+ // A cross-owner kind has no local previewSchema — only the global
98
+ // allow-list applies (the owner enforces its own tighter rules).
99
+ previewSchema: undefined,
88
100
  };
89
101
  }
90
- async function runCanonicalSequence(cfg, def, opts) {
102
+ async function runCanonicalSequence(cfg, def, opts, previewSummary) {
91
103
  const startMs = Date.now();
92
104
  const pg = cfg.pgPool;
105
+ // The validated D236 summary is folded into the row metadata + begin-event
106
+ // metadata under a stable key. It is NON-PII by construction (validated).
107
+ const summaryMeta = previewSummary
108
+ ? { deferred_action_payload_summary: previewSummary }
109
+ : {};
93
110
  // [3] Resolve tenant policy
94
111
  const policy = await resolvePolicy(cfg, pg, opts.tenantId, def);
95
112
  // [3a] Opt-in default off + fallthrough → short-circuit (no task created).
@@ -134,6 +151,8 @@ async function runCanonicalSequence(cfg, def, opts) {
134
151
  return {
135
152
  approvalId: row.id,
136
153
  taskId: null,
154
+ // No begin-event on the short-circuit path — no task is created.
155
+ beginEventId: null,
137
156
  status: "opt_in_disabled_executed",
138
157
  };
139
158
  }
@@ -174,26 +193,61 @@ async function runCanonicalSequence(cfg, def, opts) {
174
193
  return {
175
194
  approvalId: row.id,
176
195
  taskId: null,
196
+ // No begin-event on the short-circuit path — no task is created.
197
+ beginEventId: null,
177
198
  status: "self_action_executed",
178
199
  };
179
200
  }
180
201
  }
181
- // [5] Persist deferred-action row + audit emit (one tx)
202
+ // [5] Persist deferred-action row + emit the begin-event into the requester's
203
+ // transactional outbox — IN THE SAME TRANSACTION (D237 Rule 3 + 01-comms
204
+ // § 9.1). Same-tx atomicity: if the outbox insert fails (or commit
205
+ // fails), the deferred_action row rolls back too — no half-state. NO
206
+ // synchronous gRPC CreateTask is called from the request flow anymore;
207
+ // the service's @nodii/outbox-dispatcher drainer publishes the row to
208
+ // `<svc>.approval.requested.v1` (01-comms § 9.2), where task-tracking's
209
+ // approval-runtime consumer projects it (D232 + R2).
210
+ // For an owned kind the owner IS the requester (D231 Rule 1).
211
+ const ownerService = ownerOf(def.kind);
212
+ const expirySeconds = opts.expirySeconds ?? policy.expirySeconds ?? cfg.defaultExpirySeconds;
182
213
  const correlationId = randomUUID();
183
- const row = await pg.begin(async (tx) => {
214
+ const { row, beginEventId } = await pg.begin(async (tx) => {
184
215
  const inserted = await insertDeferredAction(cfg, tx, {
185
216
  tenantId: opts.tenantId,
186
217
  kind: def.kind,
187
218
  requesterMembershipId: opts.requesterMembershipId,
188
219
  deferredActionPayload: opts.deferredActionPayload,
189
220
  idempotencyKey: opts.idempotencyKey,
190
- metadata: opts.metadata ?? {},
221
+ // The validated D236 preview summary rides in the row metadata so the
222
+ // deferred_action carries the structured non-PII preview.
223
+ metadata: { ...(opts.metadata ?? {}), ...summaryMeta },
191
224
  auditCorrelationId: correlationId,
192
225
  });
193
- return inserted;
226
+ // Same-tx begin-event outbox emit (D237). tenant_id rides INSIDE payload —
227
+ // the canonical `outbox` table has no tenant_id column.
228
+ const { eventId } = await insertBeginEventOutboxRow(tx, {
229
+ tableName: cfg.outboxTableName,
230
+ aggregateId: inserted.id,
231
+ topic: approvalRequestedTopic(cfg.serviceName),
232
+ payload: {
233
+ kind: def.kind,
234
+ requester_service: cfg.serviceName,
235
+ owner_service: ownerService,
236
+ deferred_action_id: inserted.id,
237
+ idempotency_key: opts.idempotencyKey,
238
+ tenant_id: opts.tenantId,
239
+ requester_membership_id: opts.requesterMembershipId,
240
+ default_approver_role: policy.approverRole,
241
+ default_expires_in_seconds: expirySeconds,
242
+ ...(previewSummary
243
+ ? { deferred_action_payload_summary: previewSummary }
244
+ : {}),
245
+ occurred_at_in_requester_tx_ms: Date.now(),
246
+ ...(opts.metadata ? { metadata: opts.metadata } : {}),
247
+ },
248
+ });
249
+ return { row: inserted, beginEventId: eventId };
194
250
  });
195
- // For an owned kind the owner IS the requester (D231 Rule 1).
196
- const ownerService = ownerOf(def.kind);
197
251
  emitAudit({
198
252
  tenantId: opts.tenantId,
199
253
  action: `${cfg.serviceName}.approval.requested`,
@@ -202,75 +256,18 @@ async function runCanonicalSequence(cfg, def, opts) {
202
256
  // Caller metadata first; lib-mandated fields last so they win.
203
257
  metadata: {
204
258
  ...(opts.metadata ?? {}),
259
+ ...summaryMeta,
205
260
  kind: def.kind,
206
261
  requester_membership_id: opts.requesterMembershipId,
207
262
  audit_correlation_id: correlationId,
208
263
  // D231 begin-event cross-owner provenance fields.
209
264
  requester_service: cfg.serviceName,
210
265
  owner_service: ownerService,
266
+ // D237 — the begin-event is now an outbox row, not a CreateTask.
267
+ begin_event_id: beginEventId,
268
+ begin_event_transport: "outbox",
211
269
  },
212
270
  });
213
- // [6] gRPC CreateTask
214
- const expirySeconds = opts.expirySeconds ?? policy.expirySeconds ?? cfg.defaultExpirySeconds;
215
- const expiresAt = new Date(Date.now() + expirySeconds * 1000).toISOString();
216
- const taskRequest = {
217
- tenantId: opts.tenantId,
218
- kind: `approval:${def.kind}`,
219
- title: titleFor(def, opts.metadata ?? {}),
220
- description: def.description,
221
- assigneeRole: policy.approverRole,
222
- // Caller metadata first; lib-mandated fields last so they win
223
- // (task-tracking's task.metadata payload — the D231 begin-event).
224
- metadata: {
225
- ...(opts.metadata ?? {}),
226
- approvalId: row.id,
227
- deferredActionId: row.id,
228
- kind: def.kind,
229
- requesterMembershipId: opts.requesterMembershipId,
230
- thresholdEvalContext: policy.thresholdParams,
231
- // D231 begin-event cross-owner provenance fields (Rule 1 + Rule 3:
232
- // task-tracking parses owner_service from the kind to call GetPolicy).
233
- requester_service: cfg.serviceName,
234
- owner_service: ownerService,
235
- },
236
- expiresAt,
237
- idempotencyKey: opts.idempotencyKey,
238
- sourceModule: cfg.serviceName,
239
- actionButton: opts.actionButton ?? {
240
- label: def.actionButtonLabel ?? "Review",
241
- moduleKey: cfg.serviceName,
242
- actionKey: `approval:${def.shortKind}`,
243
- params: { approvalId: row.id },
244
- },
245
- };
246
- let taskResponse;
247
- try {
248
- taskResponse = await cfg.taskServiceClient.createTask(taskRequest);
249
- }
250
- catch (err) {
251
- emitAudit({
252
- tenantId: opts.tenantId,
253
- action: `${cfg.serviceName}.approval.task_creation_failed`,
254
- targetKind: "deferred_action",
255
- targetId: row.id,
256
- metadata: {
257
- kind: def.kind,
258
- error: err instanceof Error ? err.message : String(err),
259
- },
260
- });
261
- inc({
262
- name: "approval_task_creation_failed_total",
263
- family: "request_handler",
264
- labels: {
265
- service: cfg.serviceName,
266
- kind: def.kind,
267
- reason: classifyError(err),
268
- },
269
- });
270
- throw err;
271
- }
272
- // [7] Persist task_id back
273
- await pg.unsafe(`UPDATE ${cfg.serviceName}_deferred_actions SET task_id = $1 WHERE id = $2`, [taskResponse.taskId, row.id]);
274
271
  inc({
275
272
  name: "approval_requested_total",
276
273
  family: "request_handler",
@@ -282,7 +279,10 @@ async function runCanonicalSequence(cfg, def, opts) {
282
279
  });
283
280
  return {
284
281
  approvalId: row.id,
285
- taskId: taskResponse.taskId,
282
+ // D237 — no synchronous task id at request time; task-tracking mints the
283
+ // task asynchronously from the drained outbox row.
284
+ taskId: null,
285
+ beginEventId,
286
286
  status: "task_created",
287
287
  };
288
288
  }
@@ -299,20 +299,57 @@ async function runCanonicalSequence(cfg, def, opts) {
299
299
  * via `ApprovalPolicyService.GetPolicy` (Rule 3). This function makes ZERO
300
300
  * gRPC calls to the owner service.
301
301
  */
302
- async function runCrossOwnerSequence(cfg, def, opts) {
302
+ async function runCrossOwnerSequence(cfg, def, opts, previewSummary) {
303
303
  const ownerService = ownerOf(def.kind);
304
304
  const requesterService = cfg.serviceName;
305
- // [5] Persist deferred-action row to the REQUESTER's local table + audit.
305
+ const summaryMeta = previewSummary
306
+ ? { deferred_action_payload_summary: previewSummary }
307
+ : {};
308
+ // Expiry defaults to the requester's configured fallback; task-tracking
309
+ // overrides from the owner policy when it drains the begin-event.
310
+ const expirySeconds = opts.expirySeconds ?? cfg.defaultExpirySeconds;
311
+ // [5] Persist deferred-action row to the REQUESTER's local table AND emit the
312
+ // begin-event into the requester's outbox — SAME TX (D237 Rule 3). The
313
+ // owner resolves approverRole + expiry when its consumer drains the row
314
+ // (Rule 3) — the requester carries an EMPTY default_approver_role. NO
315
+ // gRPC CreateTask is called.
306
316
  const correlationId = randomUUID();
307
- const row = await cfg.pgPool.begin((tx) => insertDeferredAction(cfg, tx, {
308
- tenantId: opts.tenantId,
309
- kind: def.kind,
310
- requesterMembershipId: opts.requesterMembershipId,
311
- deferredActionPayload: opts.deferredActionPayload,
312
- idempotencyKey: opts.idempotencyKey,
313
- metadata: opts.metadata ?? {},
314
- auditCorrelationId: correlationId,
315
- }));
317
+ const { row, beginEventId } = await cfg.pgPool.begin(async (tx) => {
318
+ const inserted = await insertDeferredAction(cfg, tx, {
319
+ tenantId: opts.tenantId,
320
+ kind: def.kind,
321
+ requesterMembershipId: opts.requesterMembershipId,
322
+ deferredActionPayload: opts.deferredActionPayload,
323
+ idempotencyKey: opts.idempotencyKey,
324
+ metadata: { ...(opts.metadata ?? {}), ...summaryMeta },
325
+ auditCorrelationId: correlationId,
326
+ });
327
+ const { eventId } = await insertBeginEventOutboxRow(tx, {
328
+ tableName: cfg.outboxTableName,
329
+ aggregateId: inserted.id,
330
+ // Topic is the REQUESTER service's name (D237 Rule 3) — the cross-owner
331
+ // owner is carried inside the payload's owner_service, not the topic.
332
+ topic: approvalRequestedTopic(requesterService),
333
+ payload: {
334
+ kind: def.kind,
335
+ requester_service: requesterService,
336
+ owner_service: ownerService,
337
+ deferred_action_id: inserted.id,
338
+ idempotency_key: opts.idempotencyKey,
339
+ tenant_id: opts.tenantId,
340
+ requester_membership_id: opts.requesterMembershipId,
341
+ // Owner-resolved — empty default for a cross-owner kind.
342
+ default_approver_role: "",
343
+ default_expires_in_seconds: expirySeconds,
344
+ ...(previewSummary
345
+ ? { deferred_action_payload_summary: previewSummary }
346
+ : {}),
347
+ occurred_at_in_requester_tx_ms: Date.now(),
348
+ ...(opts.metadata ? { metadata: opts.metadata } : {}),
349
+ },
350
+ });
351
+ return { row: inserted, beginEventId: eventId };
352
+ });
316
353
  emitAudit({
317
354
  tenantId: opts.tenantId,
318
355
  action: `${requesterService}.approval.requested`,
@@ -320,76 +357,16 @@ async function runCrossOwnerSequence(cfg, def, opts) {
320
357
  targetId: row.id,
321
358
  metadata: {
322
359
  ...(opts.metadata ?? {}),
360
+ ...summaryMeta,
323
361
  kind: def.kind,
324
362
  requester_membership_id: opts.requesterMembershipId,
325
363
  audit_correlation_id: correlationId,
326
364
  requester_service: requesterService,
327
365
  owner_service: ownerService,
366
+ begin_event_id: beginEventId,
367
+ begin_event_transport: "outbox",
328
368
  },
329
369
  });
330
- // [6] gRPC CreateTask. The owner resolves approverRole + expiry via
331
- // GetPolicy (task-tracking, Rule 3) — the requester does NOT set
332
- // assigneeRole from a local policy. Expiry defaults to the requester's
333
- // configured fallback; task-tracking overrides from the owner policy.
334
- const expirySeconds = opts.expirySeconds ?? cfg.defaultExpirySeconds;
335
- const expiresAt = new Date(Date.now() + expirySeconds * 1000).toISOString();
336
- const taskRequest = {
337
- tenantId: opts.tenantId,
338
- kind: `approval:${def.kind}`,
339
- title: titleFor(def, opts.metadata ?? {}),
340
- description: def.description,
341
- // No local approverRole for a cross-owner kind — task-tracking sets the
342
- // assignee from the owner's GetPolicy. Empty = "owner-resolved".
343
- assigneeRole: "",
344
- metadata: {
345
- ...(opts.metadata ?? {}),
346
- approvalId: row.id,
347
- deferredActionId: row.id,
348
- kind: def.kind,
349
- requesterMembershipId: opts.requesterMembershipId,
350
- // D231 begin-event cross-owner provenance fields.
351
- requester_service: requesterService,
352
- owner_service: ownerService,
353
- },
354
- expiresAt,
355
- idempotencyKey: opts.idempotencyKey,
356
- sourceModule: requesterService,
357
- actionButton: opts.actionButton ?? {
358
- label: def.actionButtonLabel ?? "Review",
359
- moduleKey: requesterService,
360
- actionKey: `approval:${def.shortKind}`,
361
- params: { approvalId: row.id },
362
- },
363
- };
364
- let taskResponse;
365
- try {
366
- taskResponse = await cfg.taskServiceClient.createTask(taskRequest);
367
- }
368
- catch (err) {
369
- emitAudit({
370
- tenantId: opts.tenantId,
371
- action: `${requesterService}.approval.task_creation_failed`,
372
- targetKind: "deferred_action",
373
- targetId: row.id,
374
- metadata: {
375
- kind: def.kind,
376
- owner_service: ownerService,
377
- error: err instanceof Error ? err.message : String(err),
378
- },
379
- });
380
- inc({
381
- name: "approval_task_creation_failed_total",
382
- family: "request_handler",
383
- labels: {
384
- service: requesterService,
385
- kind: def.kind,
386
- reason: classifyError(err),
387
- },
388
- });
389
- throw err;
390
- }
391
- // [7] Persist task_id back.
392
- await cfg.pgPool.unsafe(`UPDATE ${requesterService}_deferred_actions SET task_id = $1 WHERE id = $2`, [taskResponse.taskId, row.id]);
393
370
  inc({
394
371
  name: "approval_requested_total",
395
372
  family: "request_handler",
@@ -401,7 +378,8 @@ async function runCrossOwnerSequence(cfg, def, opts) {
401
378
  });
402
379
  return {
403
380
  approvalId: row.id,
404
- taskId: taskResponse.taskId,
381
+ taskId: null,
382
+ beginEventId,
405
383
  status: "task_created",
406
384
  };
407
385
  }
@@ -477,22 +455,6 @@ function syntheticSagaId(serviceName, kind, idempotencyKey) {
477
455
  h.update(idempotencyKey);
478
456
  return `synthetic:${serviceName}:${h.digest("hex").slice(0, 32)}`;
479
457
  }
480
- function titleFor(def, metadata) {
481
- if (typeof metadata.title === "string" && metadata.title.length > 0) {
482
- return metadata.title;
483
- }
484
- return `Approve ${def.kind}`;
485
- }
486
- function classifyError(err) {
487
- if (err && typeof err === "object" && "message" in err) {
488
- const msg = String(err.message);
489
- if (msg.includes("UNAVAILABLE"))
490
- return "unavailable";
491
- if (msg.includes("FAILED_PRECONDITION"))
492
- return "failed_precondition";
493
- }
494
- return "unknown";
495
- }
496
458
  /** Shared finaliser when a short-circuit (opt-in disabled / self-action)
497
459
  * handler throws. Mirrors the consumer.ts apply-tx failure path —
498
460
  * marks the row failed + emits the failure audit + bumps the metric.
@@ -1 +1 @@
1
- {"version":3,"file":"request.js","sourceRoot":"","sources":["../src/request.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"request.js","sourceRoot":"","sources":["../src/request.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -15,6 +15,36 @@ export interface SqlPoolExecutor extends SqlExecutor {
15
15
  /** Reserved approval-service-name namespaces, mirrored from role-catalog. */
16
16
  export declare const RESERVED_SERVICE_NAMES: readonly ["platform", "system", "pii", "audit", "dsar"];
17
17
  export type ReservedServiceName = (typeof RESERVED_SERVICE_NAMES)[number];
18
+ /**
19
+ * Structured non-PII preview of a deferred action (D236). Distinct from the
20
+ * full `deferredActionPayload` (which may carry PII and is NOT surfaced into
21
+ * task-tracking's notification UI). This SUMMARY is the approver-facing
22
+ * preview — a strict allow-list, validated at request time. NO other
23
+ * top-level fields are permitted.
24
+ */
25
+ export interface DeferredActionPayloadSummary {
26
+ /** REQUIRED; non-PII human-readable label (e.g. "Refund of 3 invoices"). */
27
+ preview_label: string;
28
+ /** OPTIONAL; non-PII secondary line. */
29
+ preview_subline?: string;
30
+ /** OPTIONAL; non-PII numeric counters (string → number). */
31
+ counts?: Record<string, number>;
32
+ }
33
+ /** Per-field rule in a kind's `previewSchema` (D236). */
34
+ export type PreviewFieldRule = "required" | "optional" | "forbidden";
35
+ /**
36
+ * Per-kind preview schema (D236), OPTIONAL on a kind def. Layered ON TOP of
37
+ * the global allow-list ({@link DeferredActionPayloadSummary}) — the global
38
+ * allow-list always applies; `previewSchema` tightens it per-kind.
39
+ *
40
+ * `counts` may be EITHER a single top-level rule (applies to the presence of
41
+ * the whole `counts` object) OR a nested map of specific count-key → rule.
42
+ */
43
+ export interface PreviewSchema {
44
+ preview_label?: PreviewFieldRule;
45
+ preview_subline?: PreviewFieldRule;
46
+ counts?: PreviewFieldRule | Record<string, PreviewFieldRule>;
47
+ }
18
48
  /** Input shape for one entry in `defineApprovalKinds({...})`. */
19
49
  export interface ApprovalKindDefInput {
20
50
  /** Lowercase + underscores; no dots; matches role-catalog's permission-segment rule. */
@@ -36,6 +66,11 @@ export interface ApprovalKindDefInput {
36
66
  expirySeconds?: number;
37
67
  /** Optional override for the task-tracking action-button label. */
38
68
  actionButtonLabel?: string;
69
+ /**
70
+ * Optional per-kind preview schema (D236). Tightens the global non-PII
71
+ * allow-list at request time. Absent ⇒ only the global allow-list applies.
72
+ */
73
+ previewSchema?: PreviewSchema;
39
74
  }
40
75
  /** Fully-resolved kind def stored in the runtime registry. */
41
76
  export interface ApprovalKindDef {
@@ -51,6 +86,8 @@ export interface ApprovalKindDef {
51
86
  selfActionAllowed: boolean;
52
87
  expirySeconds: number | undefined;
53
88
  actionButtonLabel: string | undefined;
89
+ /** Optional per-kind preview schema (D236); `undefined` ⇒ global-only. */
90
+ previewSchema: PreviewSchema | undefined;
54
91
  }
55
92
  /** Result of `defineApprovalKinds<K, T>(serviceName, defs)`. */
56
93
  export type DefinedKindMap<S extends string, T extends Record<string, ApprovalKindDefInput>> = {
@@ -84,8 +121,16 @@ export interface RequestApprovalOpts {
84
121
  tenantId: string;
85
122
  requesterMembershipId: string;
86
123
  idempotencyKey: string;
87
- /** Arbitrary JSON — library serialises + persists. */
124
+ /** Arbitrary JSON — library serialises + persists. May carry PII. */
88
125
  deferredActionPayload: Record<string, unknown>;
126
+ /**
127
+ * Structured non-PII preview surfaced into task-tracking's notification
128
+ * UI (D236). Validated against the global allow-list + the kind's
129
+ * `previewSchema` BEFORE any row write or begin-event emit. Optional — a
130
+ * kind whose `previewSchema` marks `preview_label` `required` makes it
131
+ * mandatory; otherwise omitting it is allowed.
132
+ */
133
+ deferredActionPayloadSummary?: DeferredActionPayloadSummary;
89
134
  /** Surfaced into task-tracking's `task.metadata`. */
90
135
  metadata?: Record<string, unknown>;
91
136
  /** Override per-call (rare — prefer kind-level default). */
@@ -107,7 +152,22 @@ export interface RequestApprovalOpts {
107
152
  export type RequestApprovalResultStatus = "task_created" | "self_action_executed" | "opt_in_disabled_executed" | "duplicate";
108
153
  export interface RequestApprovalResult {
109
154
  approvalId: string;
155
+ /**
156
+ * Deprecated as a task-tracking task id. Since D237 (v0.3.0) the begin-event
157
+ * is a same-tx outbox emit, not a synchronous `CreateTask`, so there is no
158
+ * task id at request time — task-tracking mints the task asynchronously when
159
+ * its consumer drains `<svc>.approval.requested.v1`. Always `null` on the
160
+ * `task_created` path now; retained for back-compat with the v0.2.x shape.
161
+ * Use {@link RequestApprovalResult.beginEventId} for the outbox event id.
162
+ */
110
163
  taskId: string | null;
164
+ /**
165
+ * The begin-event outbox row's `event_id` (uuid v7) emitted on the
166
+ * `task_created` path (D237). `null` on the short-circuit paths
167
+ * (`self_action_executed` / `opt_in_disabled_executed`) and on `duplicate`
168
+ * replays where the prior result is returned from the idempotency cache.
169
+ */
170
+ beginEventId: string | null;
111
171
  status: RequestApprovalResultStatus;
112
172
  }
113
173
  /** Membership lookup function — service provides per its own RBAC store. */
@@ -220,10 +280,25 @@ export interface InitApprovalConfig {
220
280
  /** Optional db-rls handle (when wired). Both can coexist; rls wins. */
221
281
  dbRls?: DbRlsLike;
222
282
  redis: IoRedis;
223
- /** Task-tracking gRPC URL. Ignored if `taskServiceClient` is provided. */
283
+ /**
284
+ * Task-tracking gRPC URL. OPTIONAL since D237 (v0.3.0) — `requestApproval`
285
+ * no longer calls `CreateTask` (the begin-event is a same-tx outbox emit),
286
+ * so the request flow does not need it. Still wired (when provided) so a
287
+ * service can use `TaskService.CreateTask` for NON-approval direct task
288
+ * creation (D237 Rule 5). Ignored if `taskServiceClient` is provided.
289
+ */
224
290
  taskServiceUrl?: string;
225
- /** Test-only override — supersedes `taskServiceUrl`. */
291
+ /**
292
+ * Injectable task-tracking client. OPTIONAL since D237 (v0.3.0) — see
293
+ * `taskServiceUrl`. Supersedes `taskServiceUrl` when both are present.
294
+ */
226
295
  taskServiceClient?: TaskServiceClient;
296
+ /**
297
+ * Override the outbox table name the begin-event is INSERTed into (D237 +
298
+ * 01-comms § 9.1). Defaults to `'outbox'` (the @nodii/outbox-dispatcher
299
+ * default). Set this when the requester's outbox table is named differently.
300
+ */
301
+ outboxTableName?: string;
227
302
  /** Production knob: pass through to the internally-constructed
228
303
  * `TaskTrackingGrpcClient` when `taskServiceUrl` is set. This is how
229
304
  * adopting services layer in `@nodii/grpc-auth`'s S2S interceptor +
@@ -264,7 +339,15 @@ export interface ResolvedApprovalConfig {
264
339
  pgPool: SqlPoolExecutor;
265
340
  dbRls: DbRlsLike | undefined;
266
341
  redis: IoRedis;
267
- taskServiceClient: TaskServiceClient;
342
+ /**
343
+ * Resolved task-tracking client, or `undefined` since D237 — the request
344
+ * flow no longer requires it (begin-event is an outbox emit). Present only
345
+ * when the service wired `taskServiceUrl` / `taskServiceClient` for
346
+ * NON-approval direct task creation (D237 Rule 5).
347
+ */
348
+ taskServiceClient: TaskServiceClient | undefined;
349
+ /** Resolved outbox table name for the begin-event emit (default `outbox`). */
350
+ outboxTableName: string;
268
351
  membershipRolesLookup: MembershipRolesLookup;
269
352
  defaultExpirySeconds: number;
270
353
  consumerLeaseSeconds: number;