@antasphere/chassis-server 1.0.2 → 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/cli-package.d.ts +58 -0
- package/dist/api/cli-package.d.ts.map +1 -0
- package/dist/api/cli-package.js +83 -0
- package/dist/api/cli-package.js.map +1 -0
- 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 +33 -4
- package/dist/api/create-api.js.map +1 -1
- package/dist/api/index.d.ts +1 -0
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +1 -0
- package/dist/api/index.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/cli-package/index.d.ts +44 -0
- package/dist/cli-package/index.d.ts.map +1 -0
- package/dist/cli-package/index.js +60 -0
- package/dist/cli-package/index.js.map +1 -0
- 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 +11 -0
- package/dist/env.d.ts.map +1 -1
- package/dist/env.js +24 -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 +11 -3
- package/src/api/apikeys.ts +12 -1
- package/src/api/cli-package.ts +151 -0
- package/src/api/create-api.ts +42 -4
- package/src/api/index.ts +1 -0
- 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/cli-package/index.ts +88 -0
- package/src/email/index.ts +1 -0
- package/src/env.ts +25 -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/cli-package.test.ts +403 -0
- package/test/integration/mcp-webhooks.test.ts +360 -0
- package/test/integration/webhooks.test.ts +1684 -0
- package/test/unit/cli-package.test.ts +93 -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
|
@@ -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":"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"}
|
|
@@ -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":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAClF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC7D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAC1E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAChF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC9F,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EACV,yBAAyB,EACzB,YAAY,EACZ,cAAc,EACd,cAAc,EACf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD;;;;;;;GAOG;AAEH,0FAA0F;AAC1F,MAAM,MAAM,WAAW,CAAC,QAAQ,SAAS,MAAM,IAAI;KAChD,CAAC,IAAI,QAAQ,GAAG,CAAC,SAAS,MAAM,YAAY,GAAG,KAAK,GAAG,iBAAiB;CAC1E,CAAC;AAEF,+EAA+E;AAC/E,MAAM,MAAM,gBAAgB,CAAC,QAAQ,SAAS,MAAM,IAAI,YAAY,GAAG,MAAM,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;AAE7G;;;GAGG;AACH,MAAM,WAAW,WAAW,CAAC,SAAS,SAAS,CAAC,CAAC,WAAW,EAAE,OAAO,EAAE,cAAc;IACnF,EAAE,EAAE,EAAE,CAAC;IACP,GAAG,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,aAAa,CAAC;IACvB,WAAW,EAAE,WAAW,CAAC;IACzB,cAAc,EAAE,cAAc,CAAC;IAC/B,KAAK,EAAE,WAAW,CAAC;IACnB,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,mHAAmH;IACnH,MAAM,EAAE,MAAM,CAAC;IACf;;;;;OAKG;IACH,QAAQ,EAAE,cAAc,CAAC;IACzB,iFAAiF;IACjF,SAAS,EAAE,cAAc,GAAG,SAAS,CAAC;CACvC;AAED,qFAAqF;AACrF,MAAM,WAAW,YAAY,CAC3B,SAAS,SAAS,CAAC,CAAC,WAAW,EAC/B,QAAQ,SAAS,MAAM,EACvB,OAAO,EACP,cAAc,CACd,SAAQ,WAAW,CAAC,SAAS,EAAE,OAAO,EAAE,cAAc,CAAC;IACvD,QAAQ,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC;CACtC;AAED,mGAAmG;AACnG,MAAM,WAAW,WAAW,CAAC,SAAS,SAAS,CAAC,CAAC,WAAW,EAAE,OAAO;IACnE,GAAG,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IACxB,EAAE,EAAE,EAAE,CAAC;IACP,MAAM,EAAE,MAAM,CAAC;IACf,qGAAqG;IACrG,OAAO,EAAE,MAAM,OAAO,GAAG,IAAI,CAAC;CAC/B;AAED,0DAA0D;AAC1D,MAAM,WAAW,UAAU,CAAC,SAAS,SAAS,CAAC,CAAC,WAAW,EAAE,QAAQ,SAAS,MAAM,EAAE,OAAO;IAC3F,EAAE,EAAE,EAAE,CAAC;IACP,GAAG,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IACxB,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,YAAY,CAAC;IACpB,KAAK,EAAE,WAAW,CAAC;IACnB,QAAQ,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACrC,OAAO,EAAE,aAAa,CAAC;IACvB,WAAW,EAAE,WAAW,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,wEAAwE;IACxE,MAAM,EAAE,aAAa,GAAG,SAAS,CAAC;CACnC;AAED,2FAA2F;AAC3F,MAAM,WAAW,mBAAmB,CAClC,SAAS,SAAS,CAAC,CAAC,WAAW,EAC/B,QAAQ,SAAS,MAAM,EACvB,OAAO,CACP,SAAQ,UAAU,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC;IAChD,QAAQ,EAAE,UAAU,CAAC;CACtB;AAED,gFAAgF;AAChF,MAAM,WAAW,gBAAgB,CAC/B,SAAS,SAAS,CAAC,CAAC,WAAW,EAC/B,QAAQ,SAAS,MAAM,EACvB,OAAO,CACP,SAAQ,mBAAmB,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC;IACzD,UAAU,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;CACnC;AAED,+GAA+G;AAC/G;;;;;;;;;;GAUG;AACH,MAAM,WAAW,OAAO;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,QAAQ,CAAC;CACnC;AACD,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;AAE9D,iGAAiG;AACjG,MAAM,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,WAAW,GAAG,eAAe,CAAC,CAAC;AAE5E;;;;;GAKG;AACH,MAAM,WAAW,QAAQ;IACvB,kHAAkH;IAClH,cAAc,EAAE,MAAM,CAAC;IACvB,uFAAuF;IACvF,WAAW,EAAE,MAAM,CAAC;IACpB,mGAAmG;IACnG,SAAS,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,IAAI,EAAE;QACJ,8DAA8D;QAC9D,OAAO,EAAE,MAAM,CAAC;QAChB,8FAA8F;QAC9F,WAAW,EAAE,MAAM,CAAC;QACpB,wFAAwF;QACxF,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;CACH;AAED,MAAM,WAAW,YAAY,CAAC,SAAS,SAAS,CAAC,CAAC,WAAW,EAAE,OAAO,EAAE,QAAQ,SAAS,MAAM,EAAE,OAAO;IACtG;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,SAAS,CAAC,KAAK,MAAM,EAAE,CAAC;IACzD,kGAAkG;IAClG,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IACvC,kFAAkF;IAClF,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IACxC,+EAA+E;IAC/E,kBAAkB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IAC/C,6FAA6F;IAC7F,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,UAAU,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAClF;;;;OAIG;IACH,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,UAAU,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,KAAK,gBAAgB,CAAC;IAClG,sFAAsF;IACtF,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IAC5C,yGAAyG;IACzG,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,mBAAmB,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAChG;;;;OAIG;IACH,UAAU,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,UAAU,CAAC;IAC1C;;;;;;;;;;;;OAYG;IACH,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,eAAe,CAAC;IACnD;;;OAGG;IACH,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,gBAAgB,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CACzG;AAED,MAAM,WAAW,YAAY,CAAC,SAAS,SAAS,CAAC,CAAC,WAAW,EAAE,OAAO,EAAE,QAAQ,SAAS,MAAM,EAAE,OAAO;IACtG;;;OAGG;IACH,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,SAAS,CAAC,KAAK,iBAAiB,GAAG,SAAS,CAAC;IAC5E,gEAAgE;IAChE,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,SAAS,CAAC,KAAK,MAAM,EAAE,CAAC;IACpD,oJAAoJ;IACpJ,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,SAAS,CAAC,KAAK,MAAM,EAAE,CAAC;IAClD,iGAAiG;IACjG,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CACjG;AAED,MAAM,WAAW,cAAc,CAC7B,SAAS,SAAS,CAAC,CAAC,WAAW,EAC/B,OAAO,EACP,QAAQ,SAAS,MAAM,GAAG,KAAK,EAE/B,OAAO,GAAG,EAAE,EACZ,cAAc,GAAG,KAAK;IAEtB;;;;;OAKG;IACH,QAAQ,EAAE,YAAY,CAAC;IACvB,oFAAoF;IACpF,OAAO,EAAE;QACP,8DAA8D;QAC9D,OAAO,EAAE,MAAM,CAAC;QAChB,8GAA8G;QAC9G,iBAAiB,EAAE,MAAM,MAAM,CAAC;QAChC,iDAAiD;QACjD,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,uEAAuE;IACvE,EAAE,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,QAAQ,CAAC;IAC9B,+EAA+E;IAC/E,GAAG,CAAC,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;IAC9B,8DAA8D;IAC9D,MAAM,EAAE;QACN,uDAAuD;QACvD,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;QACzB,iCAAiC;QACjC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;QAC1B,4FAA4F;QAC5F,gBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;QAClE,oHAAoH;QACpH,cAAc,EAAE,WAAW,CAAC;KAC7B,CAAC;IACF;;;;OAIG;IACH,QAAQ,EAAE,CAAC,IAAI,EAAE,WAAW,CAAC,SAAS,EAAE,OAAO,EAAE,cAAc,CAAC,KAAK,OAAO,CAAC;IAC7E,+FAA+F;IAC/F,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK,cAAc,EAAE,CAAC;IAClE,gEAAgE;IAChE,YAAY,CAAC,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;IACrC,kBAAkB;IAClB,GAAG,EAAE,YAAY,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IACzD,mBAAmB;IACnB,GAAG,CAAC,EAAE,YAAY,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC1D;;;OAGG;IACH,GAAG,EAAE,iBAAiB,CAAC;IACvB,gFAAgF;IAChF,IAAI,EAAE,QAAQ,CAAC;IACf;;;;;;;OAOG;IACH,iBAAiB,CAAC,EAAE,qBAAqB,CAAC;IAC1C;;;;;;;OAOG;IACH,wBAAwB,CAAC,EAAE,SAAS,0BAA0B,EAAE,CAAC;IACjE;;;;;;;;;OASG;IACH,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,mBAAmB,CAAC,OAAO,CAAC,KAAK,0BAA0B,CAAC;IAC1G;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,yBAAyB,CAAC;CACtC;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,mBAAmB,CAAC,OAAO;IAC1C,EAAE,EAAE,EAAE,CAAC;IACP,kGAAkG;IAClG,OAAO,EAAE,MAAM,OAAO,GAAG,IAAI,CAAC;CAC/B;AAED,gEAAgE;AAChE,MAAM,WAAW,aAAa,CAAC,cAAc,GAAG,KAAK;IACnD,4GAA4G;IAC5G,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IACjC,uGAAuG;IACvG,gBAAgB,CAAC,EAAE,OAAO,CAAC,uBAAuB,CAAC,CAAC;IACpD;;;;OAIG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,SAAS,CAAC;IAC9D;;;;OAIG;IACH,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACvC;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC;IACtB;;;;OAIG;IACH,YAAY,CAAC,EAAE,aAAa,CAAC;IAC7B,oFAAoF;IACpF,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,+GAA+G;IAC/G,YAAY,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC;IACjD,oGAAoG;IACpG,YAAY,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAC;CAC7C;AAED,MAAM,WAAW,UAAU,CACzB,SAAS,SAAS,CAAC,CAAC,WAAW,EAC/B,OAAO,EAEP,OAAO,GAAG,EAAE;IAEZ,GAAG,EAAE,IAAI,CAAC;IACV,GAAG,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,YAAY,CAAC;IACpB,EAAE,EAAE,QAAQ,CAAC;IACb,IAAI,EAAE,IAAI,CAAC;IACX,gDAAgD;IAChD,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACpC,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,EAAE,WAAW,CAAC;IACnB,IAAI,EAAE,IAAI,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,oHAAoH;IACpH,QAAQ,EAAE,cAAc,CAAC;CAC1B;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,IAAI,QAAQ,CAYnF;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,YAAY,GAAG,SAAS,GAAG,OAAO,CAAC,QAAQ,IAAI,YAAY,CAyBvG"}
|
|
@@ -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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jobs.js","sourceRoot":"","sources":["../../src/webhooks/jobs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type MailBrand } from '../email/shell.js';
|
|
2
|
+
/**
|
|
3
|
+
* The one mail of the webhooks: an endpoint was switched off after failing
|
|
4
|
+
* for days, sent once to the person who registered it. Env-free like the
|
|
5
|
+
* account mails (`email/templates.ts`): every value arrives as a parameter,
|
|
6
|
+
* so a tool's mail wall renders it standalone.
|
|
7
|
+
*/
|
|
8
|
+
export interface WebhookDisabledEmailParams {
|
|
9
|
+
brand: MailBrand;
|
|
10
|
+
recipientName: string;
|
|
11
|
+
url: string;
|
|
12
|
+
description: string;
|
|
13
|
+
workspaceName: string;
|
|
14
|
+
consecutiveFailures: number;
|
|
15
|
+
firstFailureAt: Date;
|
|
16
|
+
/** The endpoint on its page in the dashboard: where it is re-enabled. */
|
|
17
|
+
manageUrl: string;
|
|
18
|
+
}
|
|
19
|
+
export declare function buildWebhookDisabledEmail(p: WebhookDisabledEmailParams): {
|
|
20
|
+
subject: string;
|
|
21
|
+
html: string;
|
|
22
|
+
text: string;
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=mail.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mail.d.ts","sourceRoot":"","sources":["../../src/webhooks/mail.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4D,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE7G;;;;;GAKG;AACH,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,SAAS,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,cAAc,EAAE,IAAI,CAAC;IACrB,yEAAyE;IACzE,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,yBAAyB,CAAC,CAAC,EAAE,0BAA0B,GAAG;IACxE,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAuBA"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { button, esc, fine, fmtDate, makeShell, para, spelledLink } from '../email/shell.js';
|
|
2
|
+
export function buildWebhookDisabledEmail(p) {
|
|
3
|
+
const name = p.brand.name;
|
|
4
|
+
const what = p.description ? `${p.description} (${p.url})` : p.url;
|
|
5
|
+
const subject = `A webhook of ${p.workspaceName} was switched off`;
|
|
6
|
+
const html = makeShell(p.brand)({
|
|
7
|
+
preheader: `${what} has not accepted a delivery since ${fmtDate(p.firstFailureAt)}.`,
|
|
8
|
+
eyebrow: 'Webhooks',
|
|
9
|
+
title: 'A webhook was switched off',
|
|
10
|
+
body: para(`${esc(name)} has stopped delivering to <strong>${esc(what)}</strong>, a webhook of
|
|
11
|
+
<strong>${esc(p.workspaceName)}</strong>: every delivery since ${fmtDate(p.firstFailureAt)}
|
|
12
|
+
failed, ${p.consecutiveFailures} in a row.`) +
|
|
13
|
+
para('The deliveries it missed are kept on its page. Once the receiver answers again, switch the webhook back on there and redeliver what matters.') +
|
|
14
|
+
button(p.manageUrl, 'Open the webhook') +
|
|
15
|
+
fine(`You receive this because you registered the webhook, ${esc(p.recipientName)}.`) +
|
|
16
|
+
spelledLink(p.manageUrl)
|
|
17
|
+
});
|
|
18
|
+
const text = `${name} has stopped delivering to ${what}, a webhook of ${p.workspaceName}: every delivery since ${fmtDate(p.firstFailureAt)} failed, ${p.consecutiveFailures} in a row.\n\nOpen the webhook: ${p.manageUrl}\n\nThe deliveries it missed are kept on its page. Once the receiver answers again, switch the webhook back on there and redeliver what matters.`;
|
|
19
|
+
return { subject, html, text };
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=mail.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mail.js","sourceRoot":"","sources":["../../src/webhooks/mail.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAkB,MAAM,mBAAmB,CAAC;AAoB7G,MAAM,UAAU,yBAAyB,CAAC,CAA6B;IAKrE,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;IAC1B,MAAM,IAAI,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,WAAW,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACnE,MAAM,OAAO,GAAG,gBAAgB,CAAC,CAAC,aAAa,mBAAmB,CAAC;IACnE,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC9B,SAAS,EAAE,GAAG,IAAI,sCAAsC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG;QACpF,OAAO,EAAE,UAAU;QACnB,KAAK,EAAE,4BAA4B;QACnC,IAAI,EACF,IAAI,CACF,GAAG,GAAG,CAAC,IAAI,CAAC,sCAAsC,GAAG,CAAC,IAAI,CAAC;mBAChD,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,mCAAmC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC;mBAChF,CAAC,CAAC,mBAAmB,YAAY,CAC7C;YACD,IAAI,CACF,8IAA8I,CAC/I;YACD,MAAM,CAAC,CAAC,CAAC,SAAS,EAAE,kBAAkB,CAAC;YACvC,IAAI,CAAC,wDAAwD,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC;YACrF,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;KAC3B,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,GAAG,IAAI,8BAA8B,IAAI,kBAAkB,CAAC,CAAC,aAAa,0BAA0B,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,mBAAmB,mCAAmC,CAAC,CAAC,SAAS,kJAAkJ,CAAC;IAC5W,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { WebhookSubjectValue } from './catalog.js';
|
|
2
|
+
/**
|
|
3
|
+
* The subscription rule, pure and unit-tested (`webhook-match.test.ts`): an
|
|
4
|
+
* endpoint's `events` are matched against an event's type, its `filters`
|
|
5
|
+
* against the event's subjects. The chassis never knows what a subject IS,
|
|
6
|
+
* only that it is a key with one or several ids.
|
|
7
|
+
*/
|
|
8
|
+
/** `*` matches every type; `family.*` matches the family; a type matches itself. */
|
|
9
|
+
export declare function matchesEventType(patterns: readonly string[], type: string): boolean;
|
|
10
|
+
/**
|
|
11
|
+
* AND across the filter's keys, OR within a key's ids. An event that does not
|
|
12
|
+
* carry a filtered subject does not match (a filter on `project` excludes an
|
|
13
|
+
* event with no project). An empty filter matches everything.
|
|
14
|
+
*/
|
|
15
|
+
export declare function matchesFilters(filters: Readonly<Record<string, readonly string[]>>, subjects: Readonly<Record<string, WebhookSubjectValue>>): boolean;
|
|
16
|
+
/** Whether an endpoint takes this event: enabled, the type subscribed, the filters satisfied. */
|
|
17
|
+
export declare function endpointWants(endpoint: {
|
|
18
|
+
enabled: boolean;
|
|
19
|
+
events: readonly string[];
|
|
20
|
+
filters: Readonly<Record<string, readonly string[]>>;
|
|
21
|
+
}, type: string, subjects: Readonly<Record<string, WebhookSubjectValue>>): boolean;
|
|
22
|
+
//# sourceMappingURL=match.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"match.d.ts","sourceRoot":"","sources":["../../src/webhooks/match.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAExD;;;;;GAKG;AAEH,oFAAoF;AACpF,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAOnF;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,EACpD,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC,GACtD,OAAO,CAST;AAED,iGAAiG;AACjG,wBAAgB,aAAa,CAC3B,QAAQ,EAAE;IACR,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAAC;CACtD,EACD,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC,GACtD,OAAO,CAIT"}
|