@antasphere/chassis-server 1.1.0 → 1.2.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.
- package/dist/api/apikeys.d.ts +4 -1
- package/dist/api/apikeys.d.ts.map +1 -1
- package/dist/api/apikeys.js +11 -1
- package/dist/api/apikeys.js.map +1 -1
- package/dist/api/create-api.d.ts +3 -0
- package/dist/api/create-api.d.ts.map +1 -1
- package/dist/api/create-api.js +8 -3
- package/dist/api/create-api.js.map +1 -1
- package/dist/api/invitations.d.ts.map +1 -1
- package/dist/api/invitations.js +6 -0
- package/dist/api/invitations.js.map +1 -1
- package/dist/api/members.d.ts +5 -2
- package/dist/api/members.d.ts.map +1 -1
- package/dist/api/members.js +1 -0
- package/dist/api/members.js.map +1 -1
- package/dist/api/projects.d.ts +3 -0
- package/dist/api/projects.d.ts.map +1 -1
- package/dist/api/projects.js +13 -1
- package/dist/api/projects.js.map +1 -1
- package/dist/api/webhooks.d.ts +24 -0
- package/dist/api/webhooks.d.ts.map +1 -0
- package/dist/api/webhooks.js +170 -0
- package/dist/api/webhooks.js.map +1 -0
- package/dist/boot.d.ts.map +1 -1
- package/dist/boot.js +47 -4
- package/dist/boot.js.map +1 -1
- package/dist/email/index.d.ts +1 -0
- package/dist/email/index.d.ts.map +1 -1
- package/dist/email/index.js +1 -0
- package/dist/email/index.js.map +1 -1
- package/dist/env.d.ts +9 -0
- package/dist/env.d.ts.map +1 -1
- package/dist/env.js +11 -0
- package/dist/env.js.map +1 -1
- package/dist/identity/demo-pass-rules.d.ts.map +1 -1
- package/dist/identity/demo-pass-rules.js +6 -1
- package/dist/identity/demo-pass-rules.js.map +1 -1
- package/dist/identity/hub-reconcile.d.ts +2 -2
- package/dist/identity/hub-reconcile.d.ts.map +1 -1
- package/dist/identity/hub-reconcile.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/jobs/index.d.ts +1 -1
- package/dist/jobs/index.d.ts.map +1 -1
- package/dist/jobs/index.js.map +1 -1
- package/dist/jobs/pgboss.d.ts +34 -0
- package/dist/jobs/pgboss.d.ts.map +1 -1
- package/dist/jobs/pgboss.js +32 -9
- package/dist/jobs/pgboss.js.map +1 -1
- package/dist/mcp/index.d.ts +1 -0
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +1 -0
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/server.d.ts +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +11 -2
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tool-kit.d.ts +2 -0
- package/dist/mcp/tool-kit.d.ts.map +1 -1
- package/dist/mcp/tool-kit.js +5 -1
- package/dist/mcp/tool-kit.js.map +1 -1
- package/dist/mcp/webhooks.d.ts +16 -0
- package/dist/mcp/webhooks.d.ts.map +1 -0
- package/dist/mcp/webhooks.js +226 -0
- package/dist/mcp/webhooks.js.map +1 -0
- package/dist/members/removal.d.ts +10 -2
- package/dist/members/removal.d.ts.map +1 -1
- package/dist/members/removal.js +3 -0
- package/dist/members/removal.js.map +1 -1
- package/dist/middleware/idempotency.d.ts.map +1 -1
- package/dist/middleware/idempotency.js +3 -1
- package/dist/middleware/idempotency.js.map +1 -1
- package/dist/middleware/scopes.d.ts +9 -1
- package/dist/middleware/scopes.d.ts.map +1 -1
- package/dist/middleware/scopes.js +8 -1
- package/dist/middleware/scopes.js.map +1 -1
- package/dist/secret-box.d.ts +10 -0
- package/dist/secret-box.d.ts.map +1 -0
- package/dist/secret-box.js +87 -0
- package/dist/secret-box.js.map +1 -0
- package/dist/testing/helpers.d.ts +8 -0
- package/dist/testing/helpers.d.ts.map +1 -1
- package/dist/testing/helpers.js.map +1 -1
- package/dist/tool-definition.d.ts +24 -0
- package/dist/tool-definition.d.ts.map +1 -1
- package/dist/tool-definition.js.map +1 -1
- package/dist/webhooks/catalog.d.ts +80 -0
- package/dist/webhooks/catalog.d.ts.map +1 -0
- package/dist/webhooks/catalog.js +134 -0
- package/dist/webhooks/catalog.js.map +1 -0
- package/dist/webhooks/index.d.ts +9 -0
- package/dist/webhooks/index.d.ts.map +1 -0
- package/dist/webhooks/index.js +9 -0
- package/dist/webhooks/index.js.map +1 -0
- package/dist/webhooks/jobs.d.ts +12 -0
- package/dist/webhooks/jobs.d.ts.map +1 -0
- package/dist/webhooks/jobs.js +77 -0
- package/dist/webhooks/jobs.js.map +1 -0
- package/dist/webhooks/mail.d.ts +24 -0
- package/dist/webhooks/mail.d.ts.map +1 -0
- package/dist/webhooks/mail.js +21 -0
- package/dist/webhooks/mail.js.map +1 -0
- package/dist/webhooks/match.d.ts +22 -0
- package/dist/webhooks/match.d.ts.map +1 -0
- package/dist/webhooks/match.js +40 -0
- package/dist/webhooks/match.js.map +1 -0
- package/dist/webhooks/safe-fetch.d.ts +94 -0
- package/dist/webhooks/safe-fetch.d.ts.map +1 -0
- package/dist/webhooks/safe-fetch.js +263 -0
- package/dist/webhooks/safe-fetch.js.map +1 -0
- package/dist/webhooks/service.d.ts +245 -0
- package/dist/webhooks/service.d.ts.map +1 -0
- package/dist/webhooks/service.js +861 -0
- package/dist/webhooks/service.js.map +1 -0
- package/dist/webhooks/signing.d.ts +40 -0
- package/dist/webhooks/signing.d.ts.map +1 -0
- package/dist/webhooks/signing.js +108 -0
- package/dist/webhooks/signing.js.map +1 -0
- package/dist/webhooks/tx-send.d.ts +31 -0
- package/dist/webhooks/tx-send.d.ts.map +1 -0
- package/dist/webhooks/tx-send.js +22 -0
- package/dist/webhooks/tx-send.js.map +1 -0
- package/package.json +7 -3
- package/src/api/apikeys.ts +12 -1
- package/src/api/create-api.ts +17 -3
- package/src/api/invitations.ts +6 -0
- package/src/api/members.ts +6 -2
- package/src/api/projects.ts +16 -1
- package/src/api/webhooks.ts +205 -0
- package/src/boot.ts +48 -4
- package/src/email/index.ts +1 -0
- package/src/env.ts +11 -0
- package/src/identity/demo-pass-rules.ts +6 -1
- package/src/identity/hub-reconcile.ts +2 -2
- package/src/index.ts +13 -1
- package/src/jobs/index.ts +1 -0
- package/src/jobs/pgboss.ts +71 -9
- package/src/mcp/index.ts +1 -0
- package/src/mcp/server.ts +10 -2
- package/src/mcp/tool-kit.ts +7 -1
- package/src/mcp/webhooks.ts +370 -0
- package/src/members/removal.ts +21 -1
- package/src/middleware/idempotency.ts +3 -1
- package/src/middleware/scopes.ts +14 -0
- package/src/secret-box.ts +93 -0
- package/src/testing/helpers.ts +8 -0
- package/src/tool-definition.ts +29 -0
- package/src/webhooks/catalog.ts +205 -0
- package/src/webhooks/index.ts +58 -0
- package/src/webhooks/jobs.ts +92 -0
- package/src/webhooks/mail.ts +48 -0
- package/src/webhooks/match.ts +52 -0
- package/src/webhooks/safe-fetch.ts +335 -0
- package/src/webhooks/service.ts +1089 -0
- package/src/webhooks/signing.ts +132 -0
- package/src/webhooks/tx-send.ts +53 -0
- package/test/host/drizzle/0002_webhooks.sql +49 -0
- package/test/host/drizzle/meta/0002_snapshot.json +3952 -0
- package/test/host/drizzle/meta/_journal.json +8 -1
- package/test/host/identity.ts +6 -1
- package/test/host/minimal-host.ts +2 -1
- package/test/host/minimal-tool.ts +32 -4
- package/test/integration/mcp-webhooks.test.ts +360 -0
- package/test/integration/webhooks.test.ts +1684 -0
- package/test/unit/secret-box.test.ts +124 -0
- package/test/unit/tx-send.test.ts +23 -0
- package/test/unit/webhook-catalog.test.ts +151 -0
- package/test/unit/webhook-env.test.ts +60 -0
- package/test/unit/webhook-jobs.test.ts +92 -0
- package/test/unit/webhook-match.test.ts +81 -0
- package/test/unit/webhook-safe-fetch.test.ts +330 -0
- package/test/unit/webhook-signing.test.ts +169 -0
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { createCipheriv, createDecipheriv, hkdfSync, randomBytes } from 'node:crypto';
|
|
2
|
+
/**
|
|
3
|
+
* A box for secrets the instance must read back (a signing secret it hands to
|
|
4
|
+
* a receiver, a refresh token it presents later): AES-256-GCM under a key
|
|
5
|
+
* derived from the instance's auth secret by HKDF-SHA256 with a caller-given
|
|
6
|
+
* `info`, so the database never holds them in the clear and a copy of the
|
|
7
|
+
* database alone opens nothing. A one-way secret (a password, an API key the
|
|
8
|
+
* instance only compares) never goes in here: it is hashed, not sealed.
|
|
9
|
+
*
|
|
10
|
+
* `info` separates the boxes: two boxes of one instance with different infos
|
|
11
|
+
* derive different keys, so a value sealed for one purpose never opens under
|
|
12
|
+
* another. Name it `<area>:<purpose>` and never change it once values are
|
|
13
|
+
* stored under it (they would no longer open).
|
|
14
|
+
*
|
|
15
|
+
* A sealed value reads `v1.<iv>.<tag>.<ciphertext>`, each part base64url: a
|
|
16
|
+
* fresh 12-byte IV per seal (two seals of one value differ), the 16-byte GCM
|
|
17
|
+
* tag, which `open` checks before it answers anything (a changed byte
|
|
18
|
+
* anywhere is refused, never decrypted to garbage). The version prefix lets a
|
|
19
|
+
* later key or cipher change read the old rows. Every refusal, a malformed
|
|
20
|
+
* string included, is a `SecretBoxError` and nothing else.
|
|
21
|
+
*/
|
|
22
|
+
const VERSION = 'v1';
|
|
23
|
+
const IV_BYTES = 12;
|
|
24
|
+
const TAG_BYTES = 16;
|
|
25
|
+
const KEY_BYTES = 32;
|
|
26
|
+
const BASE64URL = /^[A-Za-z0-9_-]*$/;
|
|
27
|
+
export class SecretBoxError extends Error {
|
|
28
|
+
constructor(message) {
|
|
29
|
+
super(message);
|
|
30
|
+
this.name = 'SecretBoxError';
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/** `info` separates the boxes: two boxes of one instance with different infos never open each other's values. */
|
|
34
|
+
export function createSecretBox(authSecret, info) {
|
|
35
|
+
if (typeof authSecret !== 'string' || authSecret.length === 0) {
|
|
36
|
+
throw new SecretBoxError('the secret box needs the auth secret');
|
|
37
|
+
}
|
|
38
|
+
if (typeof info !== 'string' || info.length === 0) {
|
|
39
|
+
throw new SecretBoxError('the secret box needs an info string that names its purpose');
|
|
40
|
+
}
|
|
41
|
+
const key = Buffer.from(hkdfSync('sha256', authSecret, Buffer.alloc(0), info, KEY_BYTES));
|
|
42
|
+
return {
|
|
43
|
+
seal(plain) {
|
|
44
|
+
if (typeof plain !== 'string')
|
|
45
|
+
throw new SecretBoxError('the secret box seals strings only');
|
|
46
|
+
const iv = randomBytes(IV_BYTES);
|
|
47
|
+
const cipher = createCipheriv('aes-256-gcm', key, iv, { authTagLength: TAG_BYTES });
|
|
48
|
+
const ciphertext = Buffer.concat([cipher.update(plain, 'utf8'), cipher.final()]);
|
|
49
|
+
const tag = cipher.getAuthTag();
|
|
50
|
+
return [
|
|
51
|
+
VERSION,
|
|
52
|
+
iv.toString('base64url'),
|
|
53
|
+
tag.toString('base64url'),
|
|
54
|
+
ciphertext.toString('base64url')
|
|
55
|
+
].join('.');
|
|
56
|
+
},
|
|
57
|
+
open(sealed) {
|
|
58
|
+
if (typeof sealed !== 'string')
|
|
59
|
+
throw new SecretBoxError('not a sealed value');
|
|
60
|
+
const parts = sealed.split('.');
|
|
61
|
+
if (parts.length !== 4 || parts[0] !== VERSION) {
|
|
62
|
+
throw new SecretBoxError('not a sealed value of this version');
|
|
63
|
+
}
|
|
64
|
+
const [, ivPart, tagPart, ciphertextPart] = parts;
|
|
65
|
+
// Buffer.from skips characters outside the alphabet silently: refuse them
|
|
66
|
+
// here, so only the one spelling of a sealed value opens.
|
|
67
|
+
if (!BASE64URL.test(ivPart) || !BASE64URL.test(tagPart) || !BASE64URL.test(ciphertextPart)) {
|
|
68
|
+
throw new SecretBoxError('a sealed value with a part that is not base64url');
|
|
69
|
+
}
|
|
70
|
+
const iv = Buffer.from(ivPart, 'base64url');
|
|
71
|
+
const tag = Buffer.from(tagPart, 'base64url');
|
|
72
|
+
const ciphertext = Buffer.from(ciphertextPart, 'base64url');
|
|
73
|
+
if (iv.length !== IV_BYTES || tag.length !== TAG_BYTES) {
|
|
74
|
+
throw new SecretBoxError('a sealed value with a malformed iv or tag');
|
|
75
|
+
}
|
|
76
|
+
try {
|
|
77
|
+
const decipher = createDecipheriv('aes-256-gcm', key, iv, { authTagLength: TAG_BYTES });
|
|
78
|
+
decipher.setAuthTag(tag);
|
|
79
|
+
return Buffer.concat([decipher.update(ciphertext), decipher.final()]).toString('utf8');
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
throw new SecretBoxError('the sealed value does not open under this key');
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=secret-box.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secret-box.js","sourceRoot":"","sources":["../src/secret-box.ts"],"names":[],"mappings":"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"}
|
|
@@ -79,6 +79,14 @@ export interface ChassisTestHost<TResult extends BootResultLike, TOverrides> {
|
|
|
79
79
|
* scope) that answers 200 to any principal the gates let through.
|
|
80
80
|
*/
|
|
81
81
|
probeRoute: string;
|
|
82
|
+
/**
|
|
83
|
+
* The host's tool is the chassis's minimal test tool, which declares the
|
|
84
|
+
* `thing` subject and the `thing.created` / `thing.deleted` events the
|
|
85
|
+
* webhooks suite emits (PRDCT-3482). A real tool leaves it unset: the
|
|
86
|
+
* suite's delivery scenarios skip under its host, and the tool proves its
|
|
87
|
+
* own events in its own suite.
|
|
88
|
+
*/
|
|
89
|
+
webhooks?: boolean;
|
|
82
90
|
}
|
|
83
91
|
/**
|
|
84
92
|
* End a pool and wait until every one of its clients has REALLY closed
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/testing/helpers.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/testing/helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/testing/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAmC,MAAM,4BAA4B,CAAC;AAClG,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,MAAM,IAAI,CAAC;AAKpB;;;;;GAKG;AACH,MAAM,OAAO,oBAAoB;IACtB,IAAI,GAAG,MAAe,CAAC,CAAC,0CAA0C;IAClE,QAAQ,GAAG,IAAI,CAAC;IAChB,IAAI,GAAmB,EAAE,CAAC;IACnC,KAAK,CAAC,IAAI,CAAC,OAAqB;QAC9B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1B,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,8BAA8B,CAAC;AAE1D,sEAAsE;AACtE,MAAM,CAAC,MAAM,QAAQ,GAAG,wBAAwB,CAAC;AAEjD,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,OAAO,IAAI,mBAAmB,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC;AACnD,CAAC;
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/testing/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAmC,MAAM,4BAA4B,CAAC;AAClG,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,MAAM,IAAI,CAAC;AAKpB;;;;;GAKG;AACH,MAAM,OAAO,oBAAoB;IACtB,IAAI,GAAG,MAAe,CAAC,CAAC,0CAA0C;IAClE,QAAQ,GAAG,IAAI,CAAC;IAChB,IAAI,GAAmB,EAAE,CAAC;IACnC,KAAK,CAAC,IAAI,CAAC,OAAqB;QAC9B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1B,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,8BAA8B,CAAC;AAE1D,sEAAsE;AACtE,MAAM,CAAC,MAAM,QAAQ,GAAG,wBAAwB,CAAC;AAEjD,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,OAAO,IAAI,mBAAmB,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC;AACnD,CAAC;AAqED,wGAAwG;AACxG,MAAM,cAAc,GAAG,OAAO,CAAC;AAE/B,0FAA0F;AAC1F,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAErC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAAa,EAAE,YAAoB,qBAAqB;IACpF,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAA8B,EAAE,EAAE;QAClD,IAAI,GAAG,CAAC,IAAI,KAAK,cAAc;YAAE,MAAM,GAAG,CAAC;IAC7C,CAAC,CAAC,CAAC;IACH,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC;IAC3B,IAAI,KAAiC,CAAC;IACtC,MAAM,MAAM,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QAC3C,IAAI,IAAI,KAAK,CAAC;YAAE,OAAO,OAAO,EAAE,CAAC;QACjC,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;YACrB,IAAI,EAAE,IAAI,KAAK,CAAC;gBAAE,OAAO,EAAE,CAAC;QAC9B,CAAC,CAAC,CAAC;QACH,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YACtB,OAAO,CAAC,IAAI,CACV,YAAY,IAAI,wCAAwC,SAAS,mCAAmC,CACrG,CAAC;YACF,OAAO,EAAE,CAAC;QACZ,CAAC,EAAE,SAAS,CAAC,CAAC;QACd,KAAK,CAAC,KAAK,EAAE,CAAC;IAChB,CAAC,CAAC,CAAC;IACH,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC;IACjB,MAAM,MAAM,CAAC;IACb,YAAY,CAAC,KAAK,CAAC,CAAC;AACtB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,IAAiC;IAMjC,OAAO,KAAK,EAAE,gBAAgB,EAAE,QAAQ,GAAG,EAAE,EAAE,SAAS,EAAE,EAAE;QAC1D,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,eAAe,CAAC,CAAC,CAAC;QAC/D,MAAM,MAAM,GAAG,MAAM,IAAI,CACvB;YACE,YAAY,EAAE,gBAAgB;YAC9B,QAAQ,EAAE,OAAO;YACjB,WAAW,EAAE,0DAA0D;YACvE,WAAW;YACX,QAAQ,EAAE,MAAM;YAChB,SAAS,EAAE,OAAO;YAClB,eAAe,EAAE,uBAAuB;YACxC,oEAAoE;YACpE,uCAAuC;YACvC,WAAW,EAAE,MAAM;YACnB,qEAAqE;YACrE,mEAAmE;YACnE,wCAAwC;YACxC,yBAAyB,EAAE,QAAQ;YACnC,oBAAoB,EAAE,OAAO;YAC7B,GAAG,QAAQ;SACZ,EACD,SAAS,CACV,CAAC;QACF,OAAO;YACL,GAAG,MAAM;YACT,IAAI,EAAE,KAAK,IAAI,EAAE;gBACf,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;gBACzC,MAAM,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;YAChC,CAAC;SACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAAsB,EAAE,EAAU;IACxE,IAAI,GAAwB,CAAC;IAC7B,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,IAAI,CAAC;IACnB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,OAAO,EAAE,CAAC,CAAC;QACxF,OAAO;IACT,CAAC;IACD,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IACjB,MAAM,IAAI,KAAK,CAAC,yCAAyC,EAAE,eAAe,CAAC,CAAC;AAC9E,CAAC;AAED,kEAAkE;AAClE,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,SAAqC,EAAE,IAAY;IACtF,MAAM,MAAM,GAAG,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,gBAAgB,EAAE,SAAS,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;IACjF,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;IACvB,MAAM,MAAM,CAAC,KAAK,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC;IAC9C,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC;IACnB,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACnD,IAAI,CAAC,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC;IAC3B,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;AACzB,CAAC;AAED,kEAAkE;AAClE,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,gBAAwB;IACxD,MAAM,MAAM,GAAG,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC;IACnD,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;IACvB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,KAAK,CAC5B,6DAA6D,CAC9D,CAAC;QACF,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClE,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,MAAM,CAAC,KAAK,CAAC,YAAY,MAAM,2BAA2B,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC;IACrB,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,8DAA8D;AAC9D,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,GAAa;IAC1C,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,GAAa;IACzC,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAChD,IAAI,CAAC,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACpE,OAAO,SAAS;SACb,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;SACzC,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC"}
|
|
@@ -29,6 +29,8 @@ import type { McpToolDefinition } from './mcp/server.js';
|
|
|
29
29
|
import type { BucketDeclaration, ClientIpFn, RateLimiters } from './middleware/rate-limit.js';
|
|
30
30
|
import type { Otel } from './observability/otel.js';
|
|
31
31
|
import type { EventBus } from './platform/events.js';
|
|
32
|
+
import type { WebhookCatalogDeclaration, WebhookDials, WebhookEmitter, WebhookService } from './webhooks/index.js';
|
|
33
|
+
import type { SafeFetchOptions } from './webhooks/safe-fetch.js';
|
|
32
34
|
import type { PlatformRegistry } from './platform/registry.js';
|
|
33
35
|
import type { RuntimeState } from './state.js';
|
|
34
36
|
import type { StorageDriver } from './storage/driver.js';
|
|
@@ -62,6 +64,13 @@ export interface ServiceCore<TEnvShape extends z.ZodRawShape, TEvents, TToolOver
|
|
|
62
64
|
authSecret: string;
|
|
63
65
|
/** One-off timers on the queues the `jobs` slot declared (`jobs/timers.ts`): a service arms and withdraws them. */
|
|
64
66
|
timers: Timers;
|
|
67
|
+
/**
|
|
68
|
+
* The outbound webhooks' emitter (PRDCT-3482): a service calls
|
|
69
|
+
* `webhooks.emit(tx, …)` INSIDE the transaction of the write it reports,
|
|
70
|
+
* with a type the tool's `webhooks` slot declared. Costs one lookup when
|
|
71
|
+
* no endpoint of the workspace listens.
|
|
72
|
+
*/
|
|
73
|
+
webhooks: WebhookEmitter;
|
|
65
74
|
/** The tool's own test seams (`BootOverrides.tool`); undefined in production. */
|
|
66
75
|
overrides: TToolOverrides | undefined;
|
|
67
76
|
}
|
|
@@ -293,6 +302,15 @@ export interface ToolDefinition<TEnvShape extends z.ZodRawShape, TDomain, TBucke
|
|
|
293
302
|
* Absent = nothing declared: no route gated, empty lists in discovery.
|
|
294
303
|
*/
|
|
295
304
|
entitlements?: (env: ToolEnv<TEnvShape>, ctx: EntitlementsContext<TDomain>) => ToolEntitlementDeclaration;
|
|
305
|
+
/**
|
|
306
|
+
* Slot 25: the tool's event catalog for outbound webhooks (PRDCT-3482):
|
|
307
|
+
* the subjects an endpoint may filter on (each with the envelope field it
|
|
308
|
+
* is written under) and the event types the tool emits, each with the zod
|
|
309
|
+
* schema of its `data`. Checked at boot (`buildWebhookCatalog`), merged
|
|
310
|
+
* with the chassis's own events, served on `GET /webhooks/events`. Absent
|
|
311
|
+
* = the chassis events alone; the routes exist on every instance.
|
|
312
|
+
*/
|
|
313
|
+
webhooks?: WebhookCatalogDeclaration;
|
|
296
314
|
}
|
|
297
315
|
/**
|
|
298
316
|
* What the `entitlements` slot receives beside the env (PRDCT-2634): the
|
|
@@ -356,6 +374,10 @@ export interface BootOverrides<TToolOverrides = never> {
|
|
|
356
374
|
hubCreateOrg?: HubOrgCreator;
|
|
357
375
|
/** The tool's own test seams, handed to its `services` slot as `core.overrides`. */
|
|
358
376
|
tool?: TToolOverrides;
|
|
377
|
+
/** Shrinks the webhooks' retry budget, hold, auto-disable streak, listener cache and overlap for the tests. */
|
|
378
|
+
webhookDials?: Partial<WebhookDials> | undefined;
|
|
379
|
+
/** The guarded fetch's seams (a lookup, a transport) so a suite delivers to a loopback receiver. */
|
|
380
|
+
webhookFetch?: SafeFetchOptions | undefined;
|
|
359
381
|
}
|
|
360
382
|
export interface BootResult<TEnvShape extends z.ZodRawShape, TDomain, TEvents = {}> {
|
|
361
383
|
app: Hono;
|
|
@@ -371,6 +393,8 @@ export interface BootResult<TEnvShape extends z.ZodRawShape, TDomain, TEvents =
|
|
|
371
393
|
email: EmailDriver;
|
|
372
394
|
otel: Otel;
|
|
373
395
|
authSecret: string;
|
|
396
|
+
/** The outbound webhooks (PRDCT-3482): the emitter, the fan-out and the delivery, for a suite to drive directly. */
|
|
397
|
+
webhooks: WebhookService;
|
|
374
398
|
}
|
|
375
399
|
/**
|
|
376
400
|
* The boot-time half of "identity is required": a definition that reached the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-definition.d.ts","sourceRoot":"","sources":["../src/tool-definition.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"tool-definition.d.ts","sourceRoot":"","sources":["../src/tool-definition.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-definition.js","sourceRoot":"","sources":["../src/tool-definition.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tool-definition.js","sourceRoot":"","sources":["../src/tool-definition.ts"],"names":[],"mappings":"AA+bA;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,IAA0B;IACvD,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAC3E,KAAK,MAAM,IAAI,IAAI,CAAC,gBAAgB,EAAE,aAAa,EAAE,WAAW,CAAU,EAAE,CAAC;QAC3E,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;YACxD,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,qCAAqC,CAAC,CAAC;QACtF,CAAC;IACH,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,iBAAiB,CAAU,EAAE,CAAC;QAC1E,IAAI,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;YACpE,MAAM,IAAI,KAAK,CAAC,8BAA8B,IAAI,gCAAgC,CAAC,CAAC;QACtF,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,QAAkC;IACnE,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACnF,MAAM,CAAC,GAAG,QACe,CAAC;IAC1B,MAAM,MAAM,GAA6B;QACvC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC;QAChB,CAAC,aAAa,EAAE,CAAC,CAAC,WAAW,CAAC;QAC9B,CAAC,cAAc,EAAE,CAAC,CAAC,YAAY,CAAC;QAChC,CAAC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC;QAC/B,CAAC,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC;QACjC,CAAC,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC;QAC3C,CAAC,mBAAmB,EAAE,CAAC,CAAC,iBAAiB,CAAC;QAC1C,CAAC,SAAS,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC;QACvB,CAAC,eAAe,EAAE,CAAC,CAAC,GAAG,EAAE,SAAS,CAAC;QACnC,CAAC,qBAAqB,EAAE,CAAC,CAAC,GAAG,EAAE,eAAe,CAAC;QAC/C,CAAC,gBAAgB,EAAE,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC;QACrC,CAAC,gBAAgB,EAAE,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC;QACrC,CAAC,iBAAiB,EAAE,CAAC,CAAC,eAAe,CAAC;QACtC,CAAC,WAAW,EAAE,CAAC,CAAC,SAAS,CAAC;KAC3B,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;QACnC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;YAC9C,MAAM,IAAI,KAAK,CAAC,6BAA6B,IAAI,mCAAmC,CAAC,CAAC;QACxF,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { WebhookCatalog } from '@antasphere/chassis-contract';
|
|
3
|
+
/**
|
|
4
|
+
* The event catalog (PRDCT-3482): what an instance can deliver to a webhook
|
|
5
|
+
* endpoint. The TOOL declares its events through the `webhooks` slot of its
|
|
6
|
+
* definition (its subjects, its event types, the zod schema of each event's
|
|
7
|
+
* `data`); the chassis adds its own events, checks the whole at boot, matches
|
|
8
|
+
* subscriptions against it and serves it on `GET /webhooks/events` with the
|
|
9
|
+
* JSON Schema of every payload, so an agent discovers the types and the
|
|
10
|
+
* shapes without reading a page of documentation.
|
|
11
|
+
*
|
|
12
|
+
* A SUBJECT is a filterable key the tool exposes (`thing`, `project`): an
|
|
13
|
+
* endpoint narrows its subscription to a list of ids per subject, and the
|
|
14
|
+
* envelope carries each subject's value under the FIELD the tool names for it
|
|
15
|
+
* (`thingId`, `projectIds`). An event declares which subjects it carries. A
|
|
16
|
+
* subject's value in the envelope is one id, or always a list of ids when
|
|
17
|
+
* the subject is declared `list` (the shape never varies per event).
|
|
18
|
+
*/
|
|
19
|
+
/** One filterable key of the tool, as the slot declares it. */
|
|
20
|
+
export interface WebhookSubjectDeclaration {
|
|
21
|
+
/** The envelope field the subject's value is written under (`thingId`, `projectIds`). */
|
|
22
|
+
field: string;
|
|
23
|
+
description: string;
|
|
24
|
+
/**
|
|
25
|
+
* The subject's value is a LIST of ids (a thing in several projects): the
|
|
26
|
+
* envelope always writes an array under the field, a single id included.
|
|
27
|
+
* Absent: one id, always a string; a list is refused at emit.
|
|
28
|
+
*/
|
|
29
|
+
list?: boolean;
|
|
30
|
+
}
|
|
31
|
+
/** One event type of the tool, as the slot declares it. */
|
|
32
|
+
export interface WebhookEventDeclaration {
|
|
33
|
+
/** `thing.created`: a lowercase family, a dot, a lowercase verb. */
|
|
34
|
+
type: string;
|
|
35
|
+
description: string;
|
|
36
|
+
/** The subjects this event carries, by key; every one must be declared in `subjects`. */
|
|
37
|
+
subjects: readonly string[];
|
|
38
|
+
/** The schema of the event's `data`, validated at emit (a mismatch is a bug, logged and skipped). */
|
|
39
|
+
data: z.ZodType;
|
|
40
|
+
}
|
|
41
|
+
/** The `webhooks` slot of a tool definition. */
|
|
42
|
+
export interface WebhookCatalogDeclaration {
|
|
43
|
+
subjects: Readonly<Record<string, WebhookSubjectDeclaration>>;
|
|
44
|
+
events: readonly WebhookEventDeclaration[];
|
|
45
|
+
}
|
|
46
|
+
/** The value one emit gives a subject: one id, or a list (a thing in several projects). */
|
|
47
|
+
export type WebhookSubjectValue = string | readonly string[];
|
|
48
|
+
/** An event type: `family.verb`, lowercase, digits and underscores allowed after the first letter. */
|
|
49
|
+
export declare const WEBHOOK_EVENT_TYPE: RegExp;
|
|
50
|
+
/** The test ping every endpoint can be sent (`POST /webhooks/{id}/test`). */
|
|
51
|
+
export declare const WEBHOOK_PING_EVENT = "webhook.ping";
|
|
52
|
+
/**
|
|
53
|
+
* The chassis's own events: what the generic half knows happened, bridged
|
|
54
|
+
* from the in-process bus (member, workspace, key events) or emitted inside
|
|
55
|
+
* the write's transaction where the chassis owns it (projects, the ping).
|
|
56
|
+
* None names a tool. A tool may not re-declare one of these types.
|
|
57
|
+
*/
|
|
58
|
+
export declare const CHASSIS_WEBHOOK_EVENTS: readonly WebhookEventDeclaration[];
|
|
59
|
+
/**
|
|
60
|
+
* The chassis's own subject: a project, which every tool has (the chassis
|
|
61
|
+
* owns projects). A tool that declares `project` itself may name another
|
|
62
|
+
* field for it (`projectIds`, a list); the chassis's project events follow.
|
|
63
|
+
*/
|
|
64
|
+
export declare const CHASSIS_WEBHOOK_SUBJECTS: Readonly<Record<string, WebhookSubjectDeclaration>>;
|
|
65
|
+
/** The merged, checked catalog an instance runs on. */
|
|
66
|
+
export interface WebhookCatalogIndex {
|
|
67
|
+
subjects: Readonly<Record<string, WebhookSubjectDeclaration>>;
|
|
68
|
+
events: ReadonlyMap<string, WebhookEventDeclaration>;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Merge the chassis's events with the tool's and check the whole, at boot:
|
|
72
|
+
* a type that is not `family.verb`, a type declared twice (or re-declaring a
|
|
73
|
+
* chassis type), a subject key that is not a plain identifier, an event
|
|
74
|
+
* carrying a subject nobody declared, or the chassis's `project` subject
|
|
75
|
+
* declared under another field, stops the boot naming the fault.
|
|
76
|
+
*/
|
|
77
|
+
export declare function buildWebhookCatalog(tool: WebhookCatalogDeclaration | undefined): WebhookCatalogIndex;
|
|
78
|
+
/** The catalog as `GET /webhooks/events` answers it: every event with the JSON Schema of its data. */
|
|
79
|
+
export declare function catalogToWire(catalog: WebhookCatalogIndex): WebhookCatalog;
|
|
80
|
+
//# sourceMappingURL=catalog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/webhooks/catalog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAEnE;;;;;;;;;;;;;;;GAeG;AAEH,+DAA+D;AAC/D,MAAM,WAAW,yBAAyB;IACxC,yFAAyF;IACzF,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,2DAA2D;AAC3D,MAAM,WAAW,uBAAuB;IACtC,oEAAoE;IACpE,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,yFAAyF;IACzF,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,qGAAqG;IACrG,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC;CACjB;AAED,gDAAgD;AAChD,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC,CAAC;IAC9D,MAAM,EAAE,SAAS,uBAAuB,EAAE,CAAC;CAC5C;AAED,2FAA2F;AAC3F,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;AAE7D,sGAAsG;AACtG,eAAO,MAAM,kBAAkB,QAAuC,CAAC;AAGvE,6EAA6E;AAC7E,eAAO,MAAM,kBAAkB,iBAAiB,CAAC;AAEjD;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,EAAE,SAAS,uBAAuB,EAmDpE,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAExF,CAAC;AAEF,uDAAuD;AACvD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC,CAAC;IAC9D,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;CACtD;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,yBAAyB,GAAG,SAAS,GAAG,mBAAmB,CA0CpG;AAED,sGAAsG;AACtG,wBAAgB,aAAa,CAAC,OAAO,EAAE,mBAAmB,GAAG,cAAc,CAkB1E"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/** An event type: `family.verb`, lowercase, digits and underscores allowed after the first letter. */
|
|
3
|
+
export const WEBHOOK_EVENT_TYPE = /^[a-z][a-z0-9_]*\.[a-z][a-z0-9_]*$/;
|
|
4
|
+
const SUBJECT_KEY = /^[a-z][a-z0-9_]*$/;
|
|
5
|
+
/** The test ping every endpoint can be sent (`POST /webhooks/{id}/test`). */
|
|
6
|
+
export const WEBHOOK_PING_EVENT = 'webhook.ping';
|
|
7
|
+
/**
|
|
8
|
+
* The chassis's own events: what the generic half knows happened, bridged
|
|
9
|
+
* from the in-process bus (member, workspace, key events) or emitted inside
|
|
10
|
+
* the write's transaction where the chassis owns it (projects, the ping).
|
|
11
|
+
* None names a tool. A tool may not re-declare one of these types.
|
|
12
|
+
*/
|
|
13
|
+
export const CHASSIS_WEBHOOK_EVENTS = [
|
|
14
|
+
{
|
|
15
|
+
type: WEBHOOK_PING_EVENT,
|
|
16
|
+
description: 'A test delivery, sent on request from the endpoint page or the API.',
|
|
17
|
+
subjects: [],
|
|
18
|
+
data: z.object({ endpointId: z.string(), sentBy: z.string().nullable() })
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
type: 'member.joined',
|
|
22
|
+
description: 'A person joined the workspace by accepting an invitation.',
|
|
23
|
+
subjects: [],
|
|
24
|
+
data: z.object({ userId: z.string(), role: z.string() })
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
type: 'member.removed',
|
|
28
|
+
description: 'A person was removed from the workspace by an owner or an admin.',
|
|
29
|
+
subjects: [],
|
|
30
|
+
data: z.object({ userId: z.string() })
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
type: 'workspace.created',
|
|
34
|
+
description: 'A workspace was created from inside the product.',
|
|
35
|
+
subjects: [],
|
|
36
|
+
data: z.object({ ownerUserId: z.string() })
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
type: 'apikey.created',
|
|
40
|
+
description: 'An API key was created on the API keys page or through the API (not the command line’s own sign-in key).',
|
|
41
|
+
subjects: [],
|
|
42
|
+
data: z.object({ apiKeyId: z.string() })
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
type: 'apikey.revoked',
|
|
46
|
+
description: 'An API key of the workspace was revoked from the API keys page or through the API (not a key revoking itself at logout).',
|
|
47
|
+
subjects: [],
|
|
48
|
+
data: z.object({ apiKeyId: z.string() })
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
type: 'project.created',
|
|
52
|
+
description: 'A project was created in the workspace.',
|
|
53
|
+
subjects: ['project'],
|
|
54
|
+
data: z.object({ projectId: z.string(), name: z.string(), createdBy: z.string() })
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
type: 'project.archived',
|
|
58
|
+
description: 'A project of the workspace was archived.',
|
|
59
|
+
subjects: ['project'],
|
|
60
|
+
data: z.object({ projectId: z.string(), name: z.string() })
|
|
61
|
+
}
|
|
62
|
+
];
|
|
63
|
+
/**
|
|
64
|
+
* The chassis's own subject: a project, which every tool has (the chassis
|
|
65
|
+
* owns projects). A tool that declares `project` itself may name another
|
|
66
|
+
* field for it (`projectIds`, a list); the chassis's project events follow.
|
|
67
|
+
*/
|
|
68
|
+
export const CHASSIS_WEBHOOK_SUBJECTS = {
|
|
69
|
+
project: { field: 'projectId', description: 'A project of the workspace, by id' }
|
|
70
|
+
};
|
|
71
|
+
/**
|
|
72
|
+
* Merge the chassis's events with the tool's and check the whole, at boot:
|
|
73
|
+
* a type that is not `family.verb`, a type declared twice (or re-declaring a
|
|
74
|
+
* chassis type), a subject key that is not a plain identifier, an event
|
|
75
|
+
* carrying a subject nobody declared, or the chassis's `project` subject
|
|
76
|
+
* declared under another field, stops the boot naming the fault.
|
|
77
|
+
*/
|
|
78
|
+
export function buildWebhookCatalog(tool) {
|
|
79
|
+
const subjects = { ...CHASSIS_WEBHOOK_SUBJECTS };
|
|
80
|
+
for (const [key, subject] of Object.entries(tool?.subjects ?? {})) {
|
|
81
|
+
if (!SUBJECT_KEY.test(key)) {
|
|
82
|
+
throw new Error(`tool definition: webhooks.subjects key "${key}" must match ${SUBJECT_KEY}`);
|
|
83
|
+
}
|
|
84
|
+
if (typeof subject.field !== 'string' || subject.field === '') {
|
|
85
|
+
throw new Error(`tool definition: webhooks.subjects.${key}.field is required (the envelope field)`);
|
|
86
|
+
}
|
|
87
|
+
// A tool may re-declare the chassis's `project` subject under its own
|
|
88
|
+
// field (a tool whose things belong to several projects writes a list
|
|
89
|
+
// under `projectIds`); the chassis's own project events then write
|
|
90
|
+
// their one id under that field too. A subject's value is one id or a
|
|
91
|
+
// list of ids, and the catalog says so.
|
|
92
|
+
subjects[key] = subject;
|
|
93
|
+
}
|
|
94
|
+
const events = new Map();
|
|
95
|
+
for (const event of [...CHASSIS_WEBHOOK_EVENTS, ...(tool?.events ?? [])]) {
|
|
96
|
+
if (!WEBHOOK_EVENT_TYPE.test(event.type)) {
|
|
97
|
+
throw new Error(`tool definition: webhooks event type "${event.type}" must be family.verb (${WEBHOOK_EVENT_TYPE})`);
|
|
98
|
+
}
|
|
99
|
+
if (events.has(event.type)) {
|
|
100
|
+
throw new Error(`tool definition: webhooks event type "${event.type}" is declared twice`);
|
|
101
|
+
}
|
|
102
|
+
if (event.type === '*' || event.type.endsWith('.*')) {
|
|
103
|
+
throw new Error(`tool definition: webhooks event type "${event.type}" is a pattern, not a type`);
|
|
104
|
+
}
|
|
105
|
+
for (const key of event.subjects) {
|
|
106
|
+
if (!(key in subjects)) {
|
|
107
|
+
throw new Error(`tool definition: webhooks event "${event.type}" carries the subject "${key}", which webhooks.subjects does not declare`);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
if (typeof event.description !== 'string' || event.description === '') {
|
|
111
|
+
throw new Error(`tool definition: webhooks event "${event.type}" needs a description`);
|
|
112
|
+
}
|
|
113
|
+
events.set(event.type, event);
|
|
114
|
+
}
|
|
115
|
+
return { subjects, events };
|
|
116
|
+
}
|
|
117
|
+
/** The catalog as `GET /webhooks/events` answers it: every event with the JSON Schema of its data. */
|
|
118
|
+
export function catalogToWire(catalog) {
|
|
119
|
+
return {
|
|
120
|
+
subjects: Object.entries(catalog.subjects).map(([key, s]) => ({
|
|
121
|
+
key,
|
|
122
|
+
field: s.field,
|
|
123
|
+
description: s.description,
|
|
124
|
+
list: s.list === true
|
|
125
|
+
})),
|
|
126
|
+
events: [...catalog.events.values()].map((e) => ({
|
|
127
|
+
type: e.type,
|
|
128
|
+
description: e.description,
|
|
129
|
+
subjects: [...e.subjects],
|
|
130
|
+
schema: z.toJSONSchema(e.data, { target: 'draft-2020-12', unrepresentable: 'any' })
|
|
131
|
+
}))
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/webhooks/catalog.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { buildWebhookCatalog, catalogToWire, CHASSIS_WEBHOOK_EVENTS, CHASSIS_WEBHOOK_SUBJECTS, WEBHOOK_EVENT_TYPE, WEBHOOK_PING_EVENT, type WebhookCatalogDeclaration, type WebhookCatalogIndex, type WebhookEventDeclaration, type WebhookSubjectDeclaration, type WebhookSubjectValue } from './catalog.js';
|
|
2
|
+
export { endpointWants, matchesEventType, matchesFilters } from './match.js';
|
|
3
|
+
export { checkWebhookUrl, isPublicAddress, safePost, WebhookUrlRefusedError, type SafeFetchOptions, type SafeFetchPolicy, type SafeFetchResult, type SafeLookup, type SafeTransport, type WebhookUrlRefusal } from './safe-fetch.js';
|
|
4
|
+
export { generateWebhookSecret, signWebhook, SigningError, verifyWebhookSignature, WEBHOOK_SECRET_PREFIX, webhookHeaders, webhookSecretKey } from './signing.js';
|
|
5
|
+
export { DEFAULT_WEBHOOK_DIALS, deliveryToWire, endpointToWire, WEBHOOK_DELIVERIES_HELD_QUEUE, WEBHOOK_DELIVERIES_QUEUE, WEBHOOK_EVENTS_QUEUE, WEBHOOK_PURGE_QUEUE, WEBHOOK_SECRET_BOX_INFO, MAX_IN_FLIGHT_PER_ENDPOINT, WebhookDeliveryDeferred, WebhookDeliveryFailed, WebhookRefusedError, WebhookService, type WebhookDials, type WebhookEmit, type WebhookEmitter, type WebhookEventJob, type WebhookServiceDeps } from './service.js';
|
|
6
|
+
export { webhookJobs } from './jobs.js';
|
|
7
|
+
export { buildWebhookDisabledEmail, type WebhookDisabledEmailParams } from './mail.js';
|
|
8
|
+
export { connectionOf, drizzleExecutor, sendInTx } from './tx-send.js';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/webhooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,sBAAsB,EACtB,wBAAwB,EACxB,kBAAkB,EAClB,kBAAkB,EAClB,KAAK,yBAAyB,EAC9B,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAC5B,KAAK,yBAAyB,EAC9B,KAAK,mBAAmB,EACzB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC7E,OAAO,EACL,eAAe,EACf,eAAe,EACf,QAAQ,EACR,sBAAsB,EACtB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,qBAAqB,EACrB,WAAW,EACX,YAAY,EACZ,sBAAsB,EACtB,qBAAqB,EACrB,cAAc,EACd,gBAAgB,EACjB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,qBAAqB,EACrB,cAAc,EACd,cAAc,EACd,6BAA6B,EAC7B,wBAAwB,EACxB,oBAAoB,EACpB,mBAAmB,EACnB,uBAAuB,EACvB,0BAA0B,EAC1B,uBAAuB,EACvB,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,EACd,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACxB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,yBAAyB,EAAE,KAAK,0BAA0B,EAAE,MAAM,WAAW,CAAC;AACvF,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { buildWebhookCatalog, catalogToWire, CHASSIS_WEBHOOK_EVENTS, CHASSIS_WEBHOOK_SUBJECTS, WEBHOOK_EVENT_TYPE, WEBHOOK_PING_EVENT } from './catalog.js';
|
|
2
|
+
export { endpointWants, matchesEventType, matchesFilters } from './match.js';
|
|
3
|
+
export { checkWebhookUrl, isPublicAddress, safePost, WebhookUrlRefusedError } from './safe-fetch.js';
|
|
4
|
+
export { generateWebhookSecret, signWebhook, SigningError, verifyWebhookSignature, WEBHOOK_SECRET_PREFIX, webhookHeaders, webhookSecretKey } from './signing.js';
|
|
5
|
+
export { DEFAULT_WEBHOOK_DIALS, deliveryToWire, endpointToWire, WEBHOOK_DELIVERIES_HELD_QUEUE, WEBHOOK_DELIVERIES_QUEUE, WEBHOOK_EVENTS_QUEUE, WEBHOOK_PURGE_QUEUE, WEBHOOK_SECRET_BOX_INFO, MAX_IN_FLIGHT_PER_ENDPOINT, WebhookDeliveryDeferred, WebhookDeliveryFailed, WebhookRefusedError, WebhookService } from './service.js';
|
|
6
|
+
export { webhookJobs } from './jobs.js';
|
|
7
|
+
export { buildWebhookDisabledEmail } from './mail.js';
|
|
8
|
+
export { connectionOf, drizzleExecutor, sendInTx } from './tx-send.js';
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/webhooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,sBAAsB,EACtB,wBAAwB,EACxB,kBAAkB,EAClB,kBAAkB,EAMnB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC7E,OAAO,EACL,eAAe,EACf,eAAe,EACf,QAAQ,EACR,sBAAsB,EAOvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,qBAAqB,EACrB,WAAW,EACX,YAAY,EACZ,sBAAsB,EACtB,qBAAqB,EACrB,cAAc,EACd,gBAAgB,EACjB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,qBAAqB,EACrB,cAAc,EACd,cAAc,EACd,6BAA6B,EAC7B,wBAAwB,EACxB,oBAAoB,EACpB,mBAAmB,EACnB,uBAAuB,EACvB,0BAA0B,EAC1B,uBAAuB,EACvB,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,EAMf,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,yBAAyB,EAAmC,MAAM,WAAW,CAAC;AACvF,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { JobDeclaration } from '../jobs/pgboss.js';
|
|
2
|
+
import type { Logger } from '../logger.js';
|
|
3
|
+
import { type WebhookService } from './service.js';
|
|
4
|
+
/**
|
|
5
|
+
* The four queues of the webhooks, declared to the job runtime like a tool's
|
|
6
|
+
* own (`createJobs` installs them in the same lock section, in this order):
|
|
7
|
+
* the held queue FIRST so the delivery queue can name it as its dead letter
|
|
8
|
+
* (pg-boss's job row holds a foreign key on it), then the fan-out, the
|
|
9
|
+
* delivery with its retry budget, and the nightly purge.
|
|
10
|
+
*/
|
|
11
|
+
export declare function webhookJobs(service: WebhookService, logger: Logger, retentionDays: number): JobDeclaration[];
|
|
12
|
+
//# sourceMappingURL=jobs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jobs.d.ts","sourceRoot":"","sources":["../../src/webhooks/jobs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EASL,KAAK,cAAc,EACpB,MAAM,cAAc,CAAC;AAEtB;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM,GACpB,cAAc,EAAE,CAkElB"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { WEBHOOK_DELIVERIES_HELD_QUEUE, WEBHOOK_DELIVERIES_QUEUE, WEBHOOK_EVENTS_QUEUE, WEBHOOK_PURGE_QUEUE, WebhookDeliveryDeferred, WebhookDeliveryFailed } from './service.js';
|
|
2
|
+
/**
|
|
3
|
+
* The four queues of the webhooks, declared to the job runtime like a tool's
|
|
4
|
+
* own (`createJobs` installs them in the same lock section, in this order):
|
|
5
|
+
* the held queue FIRST so the delivery queue can name it as its dead letter
|
|
6
|
+
* (pg-boss's job row holds a foreign key on it), then the fan-out, the
|
|
7
|
+
* delivery with its retry budget, and the nightly purge.
|
|
8
|
+
*/
|
|
9
|
+
export function webhookJobs(service, logger, retentionDays) {
|
|
10
|
+
const { dials } = service;
|
|
11
|
+
return [
|
|
12
|
+
{
|
|
13
|
+
queue: WEBHOOK_DELIVERIES_HELD_QUEUE,
|
|
14
|
+
options: { retryLimit: 10, retryDelaySeconds: 60, retryBackoff: true },
|
|
15
|
+
handler: async (data) => {
|
|
16
|
+
const job = data;
|
|
17
|
+
if (!job?.deliveryId)
|
|
18
|
+
return;
|
|
19
|
+
await service.hold(job.deliveryId);
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
queue: WEBHOOK_EVENTS_QUEUE,
|
|
24
|
+
concurrency: 2,
|
|
25
|
+
pollingIntervalSeconds: 0.5,
|
|
26
|
+
handler: async (data) => {
|
|
27
|
+
const job = data;
|
|
28
|
+
if (!job?.id)
|
|
29
|
+
return;
|
|
30
|
+
const count = await service.fanOut(job);
|
|
31
|
+
logger.debug({ eventId: job.id, type: job.type, deliveries: count }, 'webhooks: event fanned out');
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
queue: WEBHOOK_DELIVERIES_QUEUE,
|
|
36
|
+
options: {
|
|
37
|
+
retryLimit: dials.retryLimit,
|
|
38
|
+
retryDelaySeconds: dials.retryDelaySeconds,
|
|
39
|
+
retryBackoff: true,
|
|
40
|
+
deadLetter: WEBHOOK_DELIVERIES_HELD_QUEUE
|
|
41
|
+
},
|
|
42
|
+
// Eight deliveries in flight per replica: a receiver that answers
|
|
43
|
+
// nothing holds one slot for its timeout, not the instance.
|
|
44
|
+
concurrency: 8,
|
|
45
|
+
pollingIntervalSeconds: 0.5,
|
|
46
|
+
handler: async (data) => {
|
|
47
|
+
const job = data;
|
|
48
|
+
if (!job?.deliveryId)
|
|
49
|
+
return;
|
|
50
|
+
try {
|
|
51
|
+
await service.attempt(job.deliveryId, { retryable: true });
|
|
52
|
+
}
|
|
53
|
+
catch (e) {
|
|
54
|
+
if (e instanceof WebhookDeliveryDeferred) {
|
|
55
|
+
// The endpoint already holds its share of the pollers: back in the
|
|
56
|
+
// queue in two seconds, its retry budget untouched.
|
|
57
|
+
await service.requeue(job.deliveryId, 2);
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
if (e instanceof WebhookDeliveryFailed) {
|
|
61
|
+
logger.warn({ deliveryId: e.deliveryId, reason: e.message }, 'webhooks: a delivery attempt failed, will retry');
|
|
62
|
+
}
|
|
63
|
+
throw e;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
queue: WEBHOOK_PURGE_QUEUE,
|
|
69
|
+
schedule: { cron: '0 3 * * *', enabled: retentionDays > 0 },
|
|
70
|
+
handler: async () => {
|
|
71
|
+
const deleted = await service.purge(retentionDays);
|
|
72
|
+
logger.info({ retentionDays, deleted }, 'webhook deliveries retention purge ran');
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
];
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=jobs.js.map
|