@nodii/approval 0.3.1 → 0.3.3
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.
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/metric-vocab.d.ts +9 -0
- package/dist/metric-vocab.d.ts.map +1 -0
- package/dist/metric-vocab.js +96 -0
- package/dist/metric-vocab.js.map +1 -0
- package/dist/outbox.d.ts.map +1 -1
- package/dist/outbox.js +13 -1
- package/dist/outbox.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
export declare const LIB_NAME = "approval";
|
|
2
|
-
export declare const VERSION = "0.3.
|
|
2
|
+
export declare const VERSION = "0.3.3";
|
|
3
3
|
export { defineApprovalKinds, KindRegistry, RequesterRegistry, validateCrossOwnerKind, type DefineApprovalKindsOpts, } from "./kinds";
|
|
4
4
|
export { initApproval, requireApproval, getApprovalOrNull, requireKindRegistry, requireHandlers, requesterRegistry, defineApprovalRequester, registerKinds, _resetForTests, } from "./init";
|
|
5
5
|
export { bindApprovalHandlers, type BindApprovalHandlersOpts, } from "./handlers";
|
|
6
6
|
export { requestApproval } from "./request";
|
|
7
|
+
export { APPROVAL_METRIC_VOCABULARY } from "./metric-vocab";
|
|
7
8
|
export { validatePreviewSummary, PII_PATTERNS, } from "./preview-validation";
|
|
8
9
|
export { startApprovalConsumer, stopApprovalConsumer, defaultQueueName, _resetConsumerForTests, type StartApprovalConsumerOpts, type ApprovalConsumerHandle, } from "./consumer";
|
|
9
10
|
export { getApprovalMigrationSQL, splitStatements, type GetMigrationSQLOpts, } from "./migrations";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,QAAQ,aAAa,CAAC;AACnC,eAAO,MAAM,OAAO,UAAU,CAAC;AAE/B,OAAO,EACL,mBAAmB,EACnB,YAAY,EACZ,iBAAiB,EACjB,sBAAsB,EACtB,KAAK,uBAAuB,GAC7B,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,YAAY,EACZ,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,iBAAiB,EACjB,uBAAuB,EACvB,aAAa,EACb,cAAc,GACf,MAAM,QAAQ,CAAC;AAEhB,OAAO,EACL,oBAAoB,EACpB,KAAK,wBAAwB,GAC9B,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,QAAQ,aAAa,CAAC;AACnC,eAAO,MAAM,OAAO,UAAU,CAAC;AAE/B,OAAO,EACL,mBAAmB,EACnB,YAAY,EACZ,iBAAiB,EACjB,sBAAsB,EACtB,KAAK,uBAAuB,GAC7B,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,YAAY,EACZ,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,iBAAiB,EACjB,uBAAuB,EACvB,aAAa,EACb,cAAc,GACf,MAAM,QAAQ,CAAC;AAEhB,OAAO,EACL,oBAAoB,EACpB,KAAK,wBAAwB,GAC9B,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAK5C,OAAO,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;AAE5D,OAAO,EACL,sBAAsB,EACtB,YAAY,GACb,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,gBAAgB,EAChB,sBAAsB,EACtB,KAAK,yBAAyB,EAC9B,KAAK,sBAAsB,GAC5B,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,uBAAuB,EACvB,eAAe,EACf,KAAK,mBAAmB,GACzB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,8BAA8B,EAC9B,yBAAyB,EACzB,sBAAsB,EACtB,yBAAyB,EACzB,KAAK,yBAAyB,EAC9B,KAAK,8BAA8B,GACpC,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,KAAK,0BAA0B,GAChC,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,0BAA0B,EAC1B,wBAAwB,EACxB,uBAAuB,EACvB,KAAK,8BAA8B,GACpC,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,aAAa,EACb,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,EACtB,0BAA0B,EAC1B,oBAAoB,EACpB,sBAAsB,EACtB,2BAA2B,EAC3B,sBAAsB,EACtB,4BAA4B,EAC5B,kBAAkB,EAClB,uBAAuB,EACvB,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,UAAU,CAAC;AAElB,YAAY,EACV,eAAe,EACf,oBAAoB,EACpB,iBAAiB,EACjB,2BAA2B,EAC3B,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,SAAS,EACT,4BAA4B,EAC5B,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,UAAU,EACV,kBAAkB,EAClB,qBAAqB,EACrB,gBAAgB,EAChB,aAAa,EACb,mBAAmB,EACnB,qBAAqB,EACrB,2BAA2B,EAC3B,sBAAsB,EACtB,cAAc,EACd,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,8BAA8B,EAC9B,4BAA4B,EAC5B,sBAAsB,EACtB,+BAA+B,EAC/B,sBAAsB,GACvB,MAAM,SAAS,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -3,11 +3,15 @@
|
|
|
3
3
|
// Spec: planning hub feature_doc serviceId=nodii-libs docKey=approval.
|
|
4
4
|
// Polyglot ship: TS + Python + Go in parity. This is the TypeScript impl.
|
|
5
5
|
export const LIB_NAME = "approval";
|
|
6
|
-
export const VERSION = "0.3.
|
|
6
|
+
export const VERSION = "0.3.3";
|
|
7
7
|
export { defineApprovalKinds, KindRegistry, RequesterRegistry, validateCrossOwnerKind, } from "./kinds";
|
|
8
8
|
export { initApproval, requireApproval, getApprovalOrNull, requireKindRegistry, requireHandlers, requesterRegistry, defineApprovalRequester, registerKinds, _resetForTests, } from "./init";
|
|
9
9
|
export { bindApprovalHandlers, } from "./handlers";
|
|
10
10
|
export { requestApproval } from "./request";
|
|
11
|
+
// The 8 locked approval metrics (`approval.md § 5.15`). Adopters merge
|
|
12
|
+
// this into `initTelemetry({ vocabularyRegistry })` so the names emitted
|
|
13
|
+
// by the telemetry shim register cleanly (request 23c449a7).
|
|
14
|
+
export { APPROVAL_METRIC_VOCABULARY } from "./metric-vocab";
|
|
11
15
|
export { validatePreviewSummary, PII_PATTERNS, } from "./preview-validation";
|
|
12
16
|
export { startApprovalConsumer, stopApprovalConsumer, defaultQueueName, _resetConsumerForTests, } from "./consumer";
|
|
13
17
|
export { getApprovalMigrationSQL, splitStatements, } from "./migrations";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,EAAE;AACF,uEAAuE;AACvE,0EAA0E;AAE1E,MAAM,CAAC,MAAM,QAAQ,GAAG,UAAU,CAAC;AACnC,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC;AAE/B,OAAO,EACL,mBAAmB,EACnB,YAAY,EACZ,iBAAiB,EACjB,sBAAsB,GAEvB,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,YAAY,EACZ,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,iBAAiB,EACjB,uBAAuB,EACvB,aAAa,EACb,cAAc,GACf,MAAM,QAAQ,CAAC;AAEhB,OAAO,EACL,oBAAoB,GAErB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE5C,OAAO,EACL,sBAAsB,EACtB,YAAY,GACb,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,gBAAgB,EAChB,sBAAsB,GAGvB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,uBAAuB,EACvB,eAAe,GAEhB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,8BAA8B,EAC9B,yBAAyB,EACzB,sBAAsB,EACtB,yBAAyB,GAG1B,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EACL,sBAAsB,EACtB,uBAAuB,GAExB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,0BAA0B,EAC1B,wBAAwB,EACxB,uBAAuB,GAExB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,aAAa,EACb,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,EACtB,0BAA0B,EAC1B,oBAAoB,EACpB,sBAAsB,EACtB,2BAA2B,EAC3B,sBAAsB,EACtB,4BAA4B,EAC5B,kBAAkB,EAClB,uBAAuB,EACvB,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,UAAU,CAAC;AA+BlB,OAAO,EACL,8BAA8B,EAC9B,4BAA4B,EAC5B,sBAAsB,EACtB,+BAA+B,EAC/B,sBAAsB,GACvB,MAAM,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,EAAE;AACF,uEAAuE;AACvE,0EAA0E;AAE1E,MAAM,CAAC,MAAM,QAAQ,GAAG,UAAU,CAAC;AACnC,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC;AAE/B,OAAO,EACL,mBAAmB,EACnB,YAAY,EACZ,iBAAiB,EACjB,sBAAsB,GAEvB,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,YAAY,EACZ,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,iBAAiB,EACjB,uBAAuB,EACvB,aAAa,EACb,cAAc,GACf,MAAM,QAAQ,CAAC;AAEhB,OAAO,EACL,oBAAoB,GAErB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE5C,uEAAuE;AACvE,yEAAyE;AACzE,6DAA6D;AAC7D,OAAO,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;AAE5D,OAAO,EACL,sBAAsB,EACtB,YAAY,GACb,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,gBAAgB,EAChB,sBAAsB,GAGvB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,uBAAuB,EACvB,eAAe,GAEhB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,8BAA8B,EAC9B,yBAAyB,EACzB,sBAAsB,EACtB,yBAAyB,GAG1B,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EACL,sBAAsB,EACtB,uBAAuB,GAExB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,0BAA0B,EAC1B,wBAAwB,EACxB,uBAAuB,GAExB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,aAAa,EACb,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,EACtB,0BAA0B,EAC1B,oBAAoB,EACpB,sBAAsB,EACtB,2BAA2B,EAC3B,sBAAsB,EACtB,4BAA4B,EAC5B,kBAAkB,EAClB,uBAAuB,EACvB,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,UAAU,CAAC;AA+BlB,OAAO,EACL,8BAA8B,EAC9B,4BAA4B,EAC5B,sBAAsB,EACtB,+BAA+B,EAC/B,sBAAsB,GACvB,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { MetricVocabularyRegistry } from "@nodii/telemetry";
|
|
2
|
+
/**
|
|
3
|
+
* The 8 locked `@nodii/approval` metric names (5 counters + 3 histograms)
|
|
4
|
+
* under families `request_handler` (request path) and `async_worker`
|
|
5
|
+
* (consumer path), per `approval.md § 5.15`. Merge into
|
|
6
|
+
* `initTelemetry({ vocabularyRegistry })`.
|
|
7
|
+
*/
|
|
8
|
+
export declare const APPROVAL_METRIC_VOCABULARY: MetricVocabularyRegistry;
|
|
9
|
+
//# sourceMappingURL=metric-vocab.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metric-vocab.d.ts","sourceRoot":"","sources":["../src/metric-vocab.ts"],"names":[],"mappings":"AAiCA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAKjE;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,EAAE,wBA8DxC,CAAC"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
// The 8 locked `@nodii/approval` metrics per `approval.md § 5.15`. Wired
|
|
2
|
+
// through `@nodii/telemetry`'s vocabulary-bound `metrics.counter` /
|
|
3
|
+
// `metrics.histogram` API (see `telemetry-shim.ts`).
|
|
4
|
+
//
|
|
5
|
+
// Adopters merge this registry into their `initTelemetry({
|
|
6
|
+
// vocabularyRegistry })` call so the metric names `@nodii/approval` emits
|
|
7
|
+
// pass vocabulary validation instead of hand-authoring the entries:
|
|
8
|
+
//
|
|
9
|
+
// import { APPROVAL_METRIC_VOCABULARY } from "@nodii/approval";
|
|
10
|
+
// import { REPLICA_CONSUMER_VOCABULARY } from "@nodii/telemetry";
|
|
11
|
+
//
|
|
12
|
+
// initTelemetry({
|
|
13
|
+
// ...,
|
|
14
|
+
// vocabularyRegistry: {
|
|
15
|
+
// ...serviceVocab,
|
|
16
|
+
// ...APPROVAL_METRIC_VOCABULARY,
|
|
17
|
+
// ...REPLICA_CONSUMER_VOCABULARY,
|
|
18
|
+
// },
|
|
19
|
+
// });
|
|
20
|
+
//
|
|
21
|
+
// Without the registration `metrics.counter/histogram` throws
|
|
22
|
+
// `MetricVocabularyError`; the shim catches + warn-logs once per metric so
|
|
23
|
+
// the gap is visible (see `telemetry-shim.ts`). This export removes the
|
|
24
|
+
// per-adopter toil of re-declaring the names (request 23c449a7 from
|
|
25
|
+
// nodii-ticketing). Mirrors the lib-owned-vocab precedent in
|
|
26
|
+
// `ts/db-rls/src/metrics.ts` (`DB_RLS_METRIC_VOCABULARY`) and the locked
|
|
27
|
+
// `REPLICA_CONSUMER_VOCABULARY` in `ts/telemetry/src/types.ts`.
|
|
28
|
+
//
|
|
29
|
+
// `request_handler` (request-path) + `async_worker` (consumer-path) are
|
|
30
|
+
// both locked D18 `MetricFamily` values. The five counters + three
|
|
31
|
+
// histograms below match the `inc({...})` / `observe({...})` call sites in
|
|
32
|
+
// `request.ts` + `consumer.ts` byte-for-byte (name + family).
|
|
33
|
+
/** The ADR/spec section that gates these 8 metrics into the vocabulary. */
|
|
34
|
+
const DECISION = "approval.md § 5.15";
|
|
35
|
+
/**
|
|
36
|
+
* The 8 locked `@nodii/approval` metric names (5 counters + 3 histograms)
|
|
37
|
+
* under families `request_handler` (request path) and `async_worker`
|
|
38
|
+
* (consumer path), per `approval.md § 5.15`. Merge into
|
|
39
|
+
* `initTelemetry({ vocabularyRegistry })`.
|
|
40
|
+
*/
|
|
41
|
+
export const APPROVAL_METRIC_VOCABULARY = {
|
|
42
|
+
// ── request path (family: request_handler) ──
|
|
43
|
+
approval_requested_total: {
|
|
44
|
+
family: "request_handler",
|
|
45
|
+
kind: "counter",
|
|
46
|
+
description: "Approval requests created via requestApproval(), labeled by service + kind (+ owner_service/requester_service for cross-owner requests per D231).",
|
|
47
|
+
decision: DECISION,
|
|
48
|
+
},
|
|
49
|
+
approval_self_action_total: {
|
|
50
|
+
family: "request_handler",
|
|
51
|
+
kind: "counter",
|
|
52
|
+
description: "Approval requests short-circuited because the requester is also the approver (self-action), labeled by service + kind.",
|
|
53
|
+
decision: DECISION,
|
|
54
|
+
},
|
|
55
|
+
approval_opt_in_disabled_total: {
|
|
56
|
+
family: "request_handler",
|
|
57
|
+
kind: "counter",
|
|
58
|
+
description: "Approval requests skipped because the tenant has approval opt-in disabled for the kind, labeled by service + kind.",
|
|
59
|
+
decision: DECISION,
|
|
60
|
+
},
|
|
61
|
+
approval_decision_duration_seconds: {
|
|
62
|
+
family: "request_handler",
|
|
63
|
+
kind: "histogram",
|
|
64
|
+
unit: "seconds",
|
|
65
|
+
description: "Wall-clock seconds from approval request creation to the decision outcome on the request path.",
|
|
66
|
+
decision: DECISION,
|
|
67
|
+
},
|
|
68
|
+
// ── consumer / async-worker path (family: async_worker) ──
|
|
69
|
+
approval_handler_failures_total: {
|
|
70
|
+
family: "async_worker",
|
|
71
|
+
kind: "counter",
|
|
72
|
+
description: "Approval handler failures on the request + consumer paths, labeled by service + kind + reason.",
|
|
73
|
+
decision: DECISION,
|
|
74
|
+
},
|
|
75
|
+
approval_completion_unknown_total: {
|
|
76
|
+
family: "async_worker",
|
|
77
|
+
kind: "counter",
|
|
78
|
+
description: "Completion events received by the consumer for an unknown/missing deferred-action id, labeled by service.",
|
|
79
|
+
decision: DECISION,
|
|
80
|
+
},
|
|
81
|
+
approval_consumer_lag_seconds: {
|
|
82
|
+
family: "async_worker",
|
|
83
|
+
kind: "histogram",
|
|
84
|
+
unit: "seconds",
|
|
85
|
+
description: "Wall-clock lag (seconds) between completion-event emission and consumer processing, labeled by service.",
|
|
86
|
+
decision: DECISION,
|
|
87
|
+
},
|
|
88
|
+
approval_execution_duration_seconds: {
|
|
89
|
+
family: "async_worker",
|
|
90
|
+
kind: "histogram",
|
|
91
|
+
unit: "seconds",
|
|
92
|
+
description: "Wall-clock seconds to execute the deferred action in the async consumer, labeled by service + kind.",
|
|
93
|
+
decision: DECISION,
|
|
94
|
+
},
|
|
95
|
+
};
|
|
96
|
+
//# sourceMappingURL=metric-vocab.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metric-vocab.js","sourceRoot":"","sources":["../src/metric-vocab.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,oEAAoE;AACpE,qDAAqD;AACrD,EAAE;AACF,2DAA2D;AAC3D,0EAA0E;AAC1E,oEAAoE;AACpE,EAAE;AACF,kEAAkE;AAClE,oEAAoE;AACpE,EAAE;AACF,oBAAoB;AACpB,WAAW;AACX,4BAA4B;AAC5B,yBAAyB;AACzB,uCAAuC;AACvC,wCAAwC;AACxC,SAAS;AACT,QAAQ;AACR,EAAE;AACF,8DAA8D;AAC9D,2EAA2E;AAC3E,wEAAwE;AACxE,oEAAoE;AACpE,6DAA6D;AAC7D,yEAAyE;AACzE,gEAAgE;AAChE,EAAE;AACF,wEAAwE;AACxE,mEAAmE;AACnE,2EAA2E;AAC3E,8DAA8D;AAI9D,2EAA2E;AAC3E,MAAM,QAAQ,GAAG,oBAAoB,CAAC;AAEtC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAA6B;IAClE,+CAA+C;IAC/C,wBAAwB,EAAE;QACxB,MAAM,EAAE,iBAAiB;QACzB,IAAI,EAAE,SAAS;QACf,WAAW,EACT,mJAAmJ;QACrJ,QAAQ,EAAE,QAAQ;KACnB;IACD,0BAA0B,EAAE;QAC1B,MAAM,EAAE,iBAAiB;QACzB,IAAI,EAAE,SAAS;QACf,WAAW,EACT,wHAAwH;QAC1H,QAAQ,EAAE,QAAQ;KACnB;IACD,8BAA8B,EAAE;QAC9B,MAAM,EAAE,iBAAiB;QACzB,IAAI,EAAE,SAAS;QACf,WAAW,EACT,oHAAoH;QACtH,QAAQ,EAAE,QAAQ;KACnB;IACD,kCAAkC,EAAE;QAClC,MAAM,EAAE,iBAAiB;QACzB,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,SAAS;QACf,WAAW,EACT,gGAAgG;QAClG,QAAQ,EAAE,QAAQ;KACnB;IACD,4DAA4D;IAC5D,+BAA+B,EAAE;QAC/B,MAAM,EAAE,cAAc;QACtB,IAAI,EAAE,SAAS;QACf,WAAW,EACT,gGAAgG;QAClG,QAAQ,EAAE,QAAQ;KACnB;IACD,iCAAiC,EAAE;QACjC,MAAM,EAAE,cAAc;QACtB,IAAI,EAAE,SAAS;QACf,WAAW,EACT,2GAA2G;QAC7G,QAAQ,EAAE,QAAQ;KACnB;IACD,6BAA6B,EAAE;QAC7B,MAAM,EAAE,cAAc;QACtB,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,SAAS;QACf,WAAW,EACT,yGAAyG;QAC3G,QAAQ,EAAE,QAAQ;KACnB;IACD,mCAAmC,EAAE;QACnC,MAAM,EAAE,cAAc;QACtB,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,SAAS;QACf,WAAW,EACT,qGAAqG;QACvG,QAAQ,EAAE,QAAQ;KACnB;CACF,CAAC"}
|
package/dist/outbox.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"outbox.d.ts","sourceRoot":"","sources":["../src/outbox.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,4BAA4B,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE3E,yEAAyE;AACzE,eAAO,MAAM,8BAA8B,oBAAoB,CAAC;AAEhE,8EAA8E;AAC9E,eAAO,MAAM,yBAAyB,WAAW,CAAC;AAoBlD;;kFAEkF;AAClF,MAAM,WAAW,yBAAyB;IACxC,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,+DAA+D;IAC/D,aAAa,EAAE,MAAM,CAAC;IACtB,oEAAoE;IACpE,kBAAkB,EAAE,MAAM,CAAC;IAC3B,wEAAwE;IACxE,eAAe,EAAE,MAAM,CAAC;IACxB,+EAA+E;IAC/E,SAAS,EAAE,MAAM,CAAC;IAClB,wDAAwD;IACxD,uBAAuB,EAAE,MAAM,CAAC;IAChC,qEAAqE;IACrE,qBAAqB,EAAE,MAAM,CAAC;IAC9B,iFAAiF;IACjF,0BAA0B,EAAE,MAAM,CAAC;IACnC,6DAA6D;IAC7D,+BAA+B,CAAC,EAAE,4BAA4B,CAAC;IAC/D,wEAAwE;IACxE,8BAA8B,EAAE,MAAM,CAAC;IACvC,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,8BAA8B;IAC7C,kCAAkC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,0CAA0C;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,mDAAmD;IACnD,KAAK,EAAE,MAAM,CAAC;IACd,0CAA0C;IAC1C,OAAO,EAAE,yBAAyB,CAAC;CACpC;AAED;;;;;;;mEAOmE;AACnE,wBAAsB,yBAAyB,CAC7C,EAAE,EAAE,aAAa,EACjB,KAAK,EAAE,8BAA8B,GACpC,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"outbox.d.ts","sourceRoot":"","sources":["../src/outbox.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,4BAA4B,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE3E,yEAAyE;AACzE,eAAO,MAAM,8BAA8B,oBAAoB,CAAC;AAEhE,8EAA8E;AAC9E,eAAO,MAAM,yBAAyB,WAAW,CAAC;AAoBlD;;kFAEkF;AAClF,MAAM,WAAW,yBAAyB;IACxC,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,+DAA+D;IAC/D,aAAa,EAAE,MAAM,CAAC;IACtB,oEAAoE;IACpE,kBAAkB,EAAE,MAAM,CAAC;IAC3B,wEAAwE;IACxE,eAAe,EAAE,MAAM,CAAC;IACxB,+EAA+E;IAC/E,SAAS,EAAE,MAAM,CAAC;IAClB,wDAAwD;IACxD,uBAAuB,EAAE,MAAM,CAAC;IAChC,qEAAqE;IACrE,qBAAqB,EAAE,MAAM,CAAC;IAC9B,iFAAiF;IACjF,0BAA0B,EAAE,MAAM,CAAC;IACnC,6DAA6D;IAC7D,+BAA+B,CAAC,EAAE,4BAA4B,CAAC;IAC/D,wEAAwE;IACxE,8BAA8B,EAAE,MAAM,CAAC;IACvC,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,8BAA8B;IAC7C,kCAAkC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,0CAA0C;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,mDAAmD;IACnD,KAAK,EAAE,MAAM,CAAC;IACd,0CAA0C;IAC1C,OAAO,EAAE,yBAAyB,CAAC;CACpC;AAED;;;;;;;mEAOmE;AACnE,wBAAsB,yBAAyB,CAC7C,EAAE,EAAE,aAAa,EACjB,KAAK,EAAE,8BAA8B,GACpC,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAmC1C;AAED,2EAA2E;AAC3E,wBAAgB,sBAAsB,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM,CAEvE"}
|
package/dist/outbox.js
CHANGED
|
@@ -46,10 +46,22 @@ export async function insertBeginEventOutboxRow(tx, input) {
|
|
|
46
46
|
const id = randomUUID();
|
|
47
47
|
const eventId = uuidv7();
|
|
48
48
|
assertSafeOutboxTableName(input.tableName);
|
|
49
|
+
// `payload` is the pre-serialized JSON string of the begin-event. The
|
|
50
|
+
// `$7::text::jsonb` cast is load-bearing on postgres.js: without it, the
|
|
51
|
+
// driver infers the param's OID as `jsonb` from the column/cast and
|
|
52
|
+
// JSON-encodes the already-stringified value a SECOND time, so the JSONB
|
|
53
|
+
// column ends up holding a STRING SCALAR (jsonb_typeof = 'string') instead
|
|
54
|
+
// of an object — D264's `NEW.payload->>'tenant_id'` trigger then reads NULL
|
|
55
|
+
// and the NOT NULL tenant_id constraint trips. Pinning the bind to `text`
|
|
56
|
+
// first forces postgres.js to send the value verbatim and lets Postgres cast
|
|
57
|
+
// text->jsonb (correct on BOTH postgres.js and node-pg). The Go impl
|
|
58
|
+
// (go/approval/outbox.go) achieves the same with `$7::jsonb` because pgx
|
|
59
|
+
// binds the string as text by default; postgres.js needs the explicit
|
|
60
|
+
// `::text` step to defeat its jsonb-OID inference. See request 57e181f6.
|
|
49
61
|
await tx.unsafe(`INSERT INTO ${input.tableName}
|
|
50
62
|
(id, event_id, aggregate_kind, aggregate_id, source_entity_version,
|
|
51
63
|
topic, payload)
|
|
52
|
-
VALUES ($1, $2, $3, $4, $5, $6, $7)`, [
|
|
64
|
+
VALUES ($1, $2, $3, $4, $5, $6, $7::text::jsonb)`, [
|
|
53
65
|
id,
|
|
54
66
|
eventId,
|
|
55
67
|
APPROVAL_OUTBOX_AGGREGATE_KIND,
|
package/dist/outbox.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"outbox.js","sourceRoot":"","sources":["../src/outbox.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,0EAA0E;AAC1E,oEAAoE;AACpE,yEAAyE;AACzE,wEAAwE;AACxE,2EAA2E;AAC3E,oBAAoB;AACpB,EAAE;AACF,2DAA2D;AAC3D,iEAAiE;AACjE,2EAA2E;AAC3E,iEAAiE;AAEjE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhC,yEAAyE;AACzE,MAAM,CAAC,MAAM,8BAA8B,GAAG,iBAAiB,CAAC;AAEhE,8EAA8E;AAC9E,MAAM,CAAC,MAAM,yBAAyB,GAAG,QAAQ,CAAC;AAElD;;;;;;GAMG;AACH,MAAM,mBAAmB,GACvB,qDAAqD,CAAC;AAExD,SAAS,yBAAyB,CAAC,SAAiB;IAClD,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CACb,8BAA8B,SAAS,wFAAwF,CAChI,CAAC;IACJ,CAAC;AACH,CAAC;AA2CD;;;;;;;mEAOmE;AACnE,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,EAAiB,EACjB,KAAqC;IAErC,2EAA2E;IAC3E,mEAAmE;IACnE,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;IACxB,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC;IACzB,yBAAyB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC3C,MAAM,EAAE,CAAC,MAAM,CACb,eAAe,KAAK,CAAC,SAAS;;;
|
|
1
|
+
{"version":3,"file":"outbox.js","sourceRoot":"","sources":["../src/outbox.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,0EAA0E;AAC1E,oEAAoE;AACpE,yEAAyE;AACzE,wEAAwE;AACxE,2EAA2E;AAC3E,oBAAoB;AACpB,EAAE;AACF,2DAA2D;AAC3D,iEAAiE;AACjE,2EAA2E;AAC3E,iEAAiE;AAEjE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhC,yEAAyE;AACzE,MAAM,CAAC,MAAM,8BAA8B,GAAG,iBAAiB,CAAC;AAEhE,8EAA8E;AAC9E,MAAM,CAAC,MAAM,yBAAyB,GAAG,QAAQ,CAAC;AAElD;;;;;;GAMG;AACH,MAAM,mBAAmB,GACvB,qDAAqD,CAAC;AAExD,SAAS,yBAAyB,CAAC,SAAiB;IAClD,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CACb,8BAA8B,SAAS,wFAAwF,CAChI,CAAC;IACJ,CAAC;AACH,CAAC;AA2CD;;;;;;;mEAOmE;AACnE,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,EAAiB,EACjB,KAAqC;IAErC,2EAA2E;IAC3E,mEAAmE;IACnE,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;IACxB,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC;IACzB,yBAAyB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC3C,sEAAsE;IACtE,yEAAyE;IACzE,oEAAoE;IACpE,yEAAyE;IACzE,2EAA2E;IAC3E,4EAA4E;IAC5E,0EAA0E;IAC1E,6EAA6E;IAC7E,qEAAqE;IACrE,yEAAyE;IACzE,sEAAsE;IACtE,yEAAyE;IACzE,MAAM,EAAE,CAAC,MAAM,CACb,eAAe,KAAK,CAAC,SAAS;;;sDAGoB,EAClD;QACE,EAAE;QACF,OAAO;QACP,8BAA8B;QAC9B,KAAK,CAAC,WAAW;QACjB,oEAAoE;QACpE,CAAC;QACD,KAAK,CAAC,KAAK;QACX,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC;KAC9B,CACF,CAAC;IACF,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC;AACzB,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,sBAAsB,CAAC,gBAAwB;IAC7D,OAAO,GAAG,gBAAgB,wBAAwB,CAAC;AACrD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nodii/approval",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.3",
|
|
4
4
|
"description": "Approval library for the Nodii microservice stack — defineApprovalKinds + requestApproval + bindApprovalHandlers + per-tenant policies + completion-event consumer + migrate-gen. Polyglot ship: TS + Python + Go in parity. Spec: planning hub docKey=approval.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|