@nestarc/webhook 0.3.0 → 0.4.1

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/README.md CHANGED
@@ -139,6 +139,7 @@ export class WebhookController {
139
139
  |--------|-------------|
140
140
  | `send(event)` | Publish event to all matching endpoints |
141
141
  | `sendToTenant(tenantId, event)` | Publish to tenant-specific endpoints only |
142
+ | `sendToEndpoints(endpointIds, event)` | Publish to specific endpoint IDs only |
142
143
 
143
144
  ### WebhookEndpointAdminService
144
145
 
@@ -166,7 +167,7 @@ export class WebhookController {
166
167
  | `verify(eventId, timestamp, body, secret, signature)` | Verify a webhook signature |
167
168
  | `generateSecret()` | Generate a random base64 signing secret |
168
169
 
169
- > **Deprecated:** `WebhookAdminService` is a facade that delegates to `WebhookEndpointAdminService` and `WebhookDeliveryAdminService`. It will be removed in v0.3.0.
170
+ > **Deprecated:** `WebhookAdminService` is a facade that delegates to `WebhookEndpointAdminService` and `WebhookDeliveryAdminService`. It will be removed in a future release.
170
171
 
171
172
  ## Configuration
172
173
 
@@ -182,6 +183,7 @@ export class WebhookController {
182
183
  | `polling.batchSize` | `50` | Max deliveries per poll cycle |
183
184
  | `polling.staleSendingMinutes` | `5` | Minutes before a stuck SENDING delivery is recovered |
184
185
  | `allowPrivateUrls` | `false` | Allow private/internal URLs (dev/test only) |
186
+ | `secretVault` | `PlaintextSecretVault` | Custom vault for encrypting/decrypting endpoint secrets at rest |
185
187
 
186
188
  ### Custom adapters
187
189
 
@@ -194,6 +196,7 @@ WebhookModule.forRoot({
194
196
  eventRepository: myCustomEventRepo, // implements WebhookEventRepository
195
197
  endpointRepository: myCustomEndpointRepo,// implements WebhookEndpointRepository
196
198
  deliveryRepository: myCustomDeliveryRepo,// implements WebhookDeliveryRepository
199
+ secretVault: myCustomVault, // implements WebhookSecretVault
197
200
  });
198
201
  ```
199
202
 
@@ -239,6 +242,7 @@ webhook-signature: v1,<base64-hmac-sha256>
239
242
  - Signing secrets are excluded from read queries (`listEndpoints`, `getEndpoint`)
240
243
  - Secrets are only returned on `createEndpoint` (initial provisioning)
241
244
  - Delivery enrichment uses an internal path that does not expose secrets through admin APIs
245
+ - **At-rest encryption** — provide a custom `WebhookSecretVault` to encrypt secrets before storage and decrypt before HMAC signing. The default `PlaintextSecretVault` passes values through unchanged.
242
246
 
243
247
  ## Webhook Payload Format
244
248
 
@@ -0,0 +1,10 @@
1
+ import { WebhookSecretVault } from '../ports/webhook-secret-vault';
2
+ /**
3
+ * Default no-op vault — secrets are stored and retrieved as-is.
4
+ * Replace with a real implementation (e.g. AES-256-GCM) for production.
5
+ */
6
+ export declare class PlaintextSecretVault implements WebhookSecretVault {
7
+ encrypt(secret: string): Promise<string>;
8
+ decrypt(secret: string): Promise<string>;
9
+ }
10
+ //# sourceMappingURL=plaintext-secret-vault.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plaintext-secret-vault.d.ts","sourceRoot":"","sources":["../../src/adapters/plaintext-secret-vault.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAEnE;;;GAGG;AACH,qBAAa,oBAAqB,YAAW,kBAAkB;IACvD,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIxC,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAG/C"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PlaintextSecretVault = void 0;
4
+ /**
5
+ * Default no-op vault — secrets are stored and retrieved as-is.
6
+ * Replace with a real implementation (e.g. AES-256-GCM) for production.
7
+ */
8
+ class PlaintextSecretVault {
9
+ async encrypt(secret) {
10
+ return secret;
11
+ }
12
+ async decrypt(secret) {
13
+ return secret;
14
+ }
15
+ }
16
+ exports.PlaintextSecretVault = PlaintextSecretVault;
17
+ //# sourceMappingURL=plaintext-secret-vault.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plaintext-secret-vault.js","sourceRoot":"","sources":["../../src/adapters/plaintext-secret-vault.ts"],"names":[],"mappings":";;;AAEA;;;GAGG;AACH,MAAa,oBAAoB;IAC/B,KAAK,CAAC,OAAO,CAAC,MAAc;QAC1B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,MAAc;QAC1B,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AARD,oDAQC"}
@@ -1,8 +1,10 @@
1
1
  import { PendingDelivery, WebhookDeliveryRepository } from '../ports/webhook-delivery.repository';
2
2
  import { DeliveryLogFilters, DeliveryRecord, DeliveryResult } from '../interfaces/webhook-delivery.interface';
3
+ import { WebhookSecretVault } from '../ports/webhook-secret-vault';
3
4
  export declare class PrismaDeliveryRepository implements WebhookDeliveryRepository {
4
5
  private readonly prisma;
5
- constructor(prisma: any);
6
+ private readonly vault?;
7
+ constructor(prisma: any, vault?: WebhookSecretVault | undefined);
6
8
  createDeliveriesInTransaction(tx: any, eventId: string, endpointIds: string[], maxAttempts: number): Promise<void>;
7
9
  runInTransaction<T>(fn: (tx: unknown) => Promise<T>): Promise<T>;
8
10
  claimPendingDeliveries(batchSize: number): Promise<PendingDelivery[]>;
@@ -1 +1 @@
1
- {"version":3,"file":"prisma-delivery.repository.d.ts","sourceRoot":"","sources":["../../src/adapters/prisma-delivery.repository.ts"],"names":[],"mappings":"AACA,OAAO,EACL,eAAe,EACf,yBAAyB,EAC1B,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,cAAc,EACf,MAAM,0CAA0C,CAAC;AAElD,qBACa,wBAAyB,YAAW,yBAAyB;IAC5D,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,GAAG;IAElC,6BAA6B,CACjC,EAAE,EAAE,GAAG,EACP,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EAAE,EACrB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC;IAUV,gBAAgB,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAIhE,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAqBrE,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAYnE,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAWrF,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAYvF,SAAS,CACb,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,IAAI,EACZ,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,IAAI,CAAC;IAYV,mBAAmB,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAY9D,eAAe,CACnB,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,cAAc,EAAE,CAAC;IAgDtB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQnD,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAK7E"}
1
+ {"version":3,"file":"prisma-delivery.repository.d.ts","sourceRoot":"","sources":["../../src/adapters/prisma-delivery.repository.ts"],"names":[],"mappings":"AACA,OAAO,EACL,eAAe,EACf,yBAAyB,EAC1B,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,cAAc,EACf,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAEnE,qBACa,wBAAyB,YAAW,yBAAyB;IAEtE,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;gBADN,MAAM,EAAE,GAAG,EACX,KAAK,CAAC,EAAE,kBAAkB,YAAA;IAGvC,6BAA6B,CACjC,EAAE,EAAE,GAAG,EACP,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EAAE,EACrB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC;IAUV,gBAAgB,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAIhE,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAqBrE,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAmBnE,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAWrF,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAYvF,SAAS,CACb,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,IAAI,EACZ,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,IAAI,CAAC;IAYV,mBAAmB,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAY9D,eAAe,CACnB,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,cAAc,EAAE,CAAC;IAgDtB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQnD,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAK7E"}
@@ -13,8 +13,10 @@ exports.PrismaDeliveryRepository = void 0;
13
13
  const common_1 = require("@nestjs/common");
14
14
  let PrismaDeliveryRepository = class PrismaDeliveryRepository {
15
15
  prisma;
16
- constructor(prisma) {
16
+ vault;
17
+ constructor(prisma, vault) {
17
18
  this.prisma = prisma;
19
+ this.vault = vault;
18
20
  }
19
21
  async createDeliveriesInTransaction(tx, eventId, endpointIds, maxAttempts) {
20
22
  await tx.$executeRawUnsafe(`INSERT INTO webhook_deliveries (event_id, endpoint_id, status, attempts, max_attempts, next_attempt_at)
@@ -44,7 +46,7 @@ let PrismaDeliveryRepository = class PrismaDeliveryRepository {
44
46
  webhook_deliveries.max_attempts`;
45
47
  }
46
48
  async enrichDeliveries(deliveryIds) {
47
- return this.prisma.$queryRaw `
49
+ const rows = await this.prisma.$queryRaw `
48
50
  SELECT
49
51
  d.id, d.event_id, d.endpoint_id, d.attempts, d.max_attempts,
50
52
  e.url, e.secret,
@@ -53,6 +55,12 @@ let PrismaDeliveryRepository = class PrismaDeliveryRepository {
53
55
  JOIN webhook_endpoints e ON e.id = d.endpoint_id
54
56
  JOIN webhook_events ev ON ev.id = d.event_id
55
57
  WHERE d.id = ANY(${deliveryIds}::uuid[])`;
58
+ if (this.vault) {
59
+ for (const row of rows) {
60
+ row.secret = await this.vault.decrypt(row.secret);
61
+ }
62
+ }
63
+ return rows;
56
64
  }
57
65
  async markSent(deliveryId, attempts, result) {
58
66
  await this.prisma.$executeRaw `
@@ -157,6 +165,6 @@ let PrismaDeliveryRepository = class PrismaDeliveryRepository {
157
165
  exports.PrismaDeliveryRepository = PrismaDeliveryRepository;
158
166
  exports.PrismaDeliveryRepository = PrismaDeliveryRepository = __decorate([
159
167
  (0, common_1.Injectable)(),
160
- __metadata("design:paramtypes", [Object])
168
+ __metadata("design:paramtypes", [Object, Object])
161
169
  ], PrismaDeliveryRepository);
162
170
  //# sourceMappingURL=prisma-delivery.repository.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"prisma-delivery.repository.js","sourceRoot":"","sources":["../../src/adapters/prisma-delivery.repository.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prisma-delivery.repository.js","sourceRoot":"","sources":["../../src/adapters/prisma-delivery.repository.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,10 @@
1
1
  import { WebhookEndpointRepository } from '../ports/webhook-endpoint.repository';
2
2
  import { EndpointRecord, EndpointRecordWithSecret, UpdateEndpointDto } from '../interfaces/webhook-endpoint.interface';
3
+ import { WebhookSecretVault } from '../ports/webhook-secret-vault';
3
4
  export declare class PrismaEndpointRepository implements WebhookEndpointRepository {
4
5
  private readonly prisma;
5
- constructor(prisma: any);
6
+ private readonly vault?;
7
+ constructor(prisma: any, vault?: WebhookSecretVault | undefined);
6
8
  findMatchingEndpoints(eventType: string, tenantId: string | undefined): Promise<EndpointRecord[]>;
7
9
  findMatchingEndpointsInTransaction(tx: any, eventType: string, tenantId: string | undefined): Promise<EndpointRecord[]>;
8
10
  createEndpoint(url: string, secret: string, events: string[], description: string | null, metadata: Record<string, unknown> | null, tenantId: string | null): Promise<EndpointRecordWithSecret>;
@@ -1 +1 @@
1
- {"version":3,"file":"prisma-endpoint.repository.d.ts","sourceRoot":"","sources":["../../src/adapters/prisma-endpoint.repository.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;AACjF,OAAO,EACL,cAAc,EACd,wBAAwB,EACxB,iBAAiB,EAClB,MAAM,0CAA0C,CAAC;AAsBlD,qBACa,wBAAyB,YAAW,yBAAyB;IAC5D,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,GAAG;IAElC,qBAAqB,CACzB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC3B,OAAO,CAAC,cAAc,EAAE,CAAC;IAoBtB,kCAAkC,CACtC,EAAE,EAAE,GAAG,EACP,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC3B,OAAO,CAAC,cAAc,EAAE,CAAC;IAoBtB,cAAc,CAClB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EAAE,EAChB,WAAW,EAAE,MAAM,GAAG,IAAI,EAC1B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,EACxC,QAAQ,EAAE,MAAM,GAAG,IAAI,GACtB,OAAO,CAAC,wBAAwB,CAAC;IAe9B,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAQvD,aAAa,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAe3D,cAAc,CAClB,EAAE,EAAE,MAAM,EACV,GAAG,EAAE,iBAAiB,GACrB,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAqC3B,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAM5C,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQhD,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAStD,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOlE,wBAAwB,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAYzE"}
1
+ {"version":3,"file":"prisma-endpoint.repository.d.ts","sourceRoot":"","sources":["../../src/adapters/prisma-endpoint.repository.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;AACjF,OAAO,EACL,cAAc,EACd,wBAAwB,EACxB,iBAAiB,EAClB,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAsBnE,qBACa,wBAAyB,YAAW,yBAAyB;IAEtE,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;gBADN,MAAM,EAAE,GAAG,EACX,KAAK,CAAC,EAAE,kBAAkB,YAAA;IAGvC,qBAAqB,CACzB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC3B,OAAO,CAAC,cAAc,EAAE,CAAC;IAoBtB,kCAAkC,CACtC,EAAE,EAAE,GAAG,EACP,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC3B,OAAO,CAAC,cAAc,EAAE,CAAC;IAoBtB,cAAc,CAClB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EAAE,EAChB,WAAW,EAAE,MAAM,GAAG,IAAI,EAC1B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,EACxC,QAAQ,EAAE,MAAM,GAAG,IAAI,GACtB,OAAO,CAAC,wBAAwB,CAAC;IAgB9B,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAQvD,aAAa,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAe3D,cAAc,CAClB,EAAE,EAAE,MAAM,EACV,GAAG,EAAE,iBAAiB,GACrB,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAqC3B,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAM5C,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQhD,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAStD,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOlE,wBAAwB,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAYzE"}
@@ -31,13 +31,15 @@ const ENDPOINT_COLUMNS_WITH_SECRET = `
31
31
  updated_at AS "updatedAt"`;
32
32
  let PrismaEndpointRepository = class PrismaEndpointRepository {
33
33
  prisma;
34
- constructor(prisma) {
34
+ vault;
35
+ constructor(prisma, vault) {
35
36
  this.prisma = prisma;
37
+ this.vault = vault;
36
38
  }
37
39
  async findMatchingEndpoints(eventType, tenantId) {
38
40
  if (tenantId !== undefined) {
39
41
  const rows = await this.prisma.$queryRawUnsafe(`SELECT ${ENDPOINT_COLUMNS} FROM webhook_endpoints
40
- WHERE active = true AND tenant_id = $1
42
+ WHERE active = true AND tenant_id::text = $1
41
43
  AND ($2 = ANY(events) OR '*' = ANY(events))`, tenantId, eventType);
42
44
  return rows;
43
45
  }
@@ -49,7 +51,7 @@ let PrismaEndpointRepository = class PrismaEndpointRepository {
49
51
  async findMatchingEndpointsInTransaction(tx, eventType, tenantId) {
50
52
  if (tenantId !== undefined) {
51
53
  const rows = await tx.$queryRawUnsafe(`SELECT ${ENDPOINT_COLUMNS} FROM webhook_endpoints
52
- WHERE active = true AND tenant_id = $1
54
+ WHERE active = true AND tenant_id::text = $1
53
55
  AND ($2 = ANY(events) OR '*' = ANY(events))`, tenantId, eventType);
54
56
  return rows;
55
57
  }
@@ -59,9 +61,10 @@ let PrismaEndpointRepository = class PrismaEndpointRepository {
59
61
  return rows;
60
62
  }
61
63
  async createEndpoint(url, secret, events, description, metadata, tenantId) {
64
+ const encryptedSecret = this.vault ? await this.vault.encrypt(secret) : secret;
62
65
  const [endpoint] = await this.prisma.$queryRawUnsafe(`INSERT INTO webhook_endpoints (url, secret, events, description, metadata, tenant_id)
63
- VALUES ($1, $2, $3::varchar[], $4, $5::jsonb, $6)
64
- RETURNING ${ENDPOINT_COLUMNS_WITH_SECRET}`, url, secret, events, description, metadata ? JSON.stringify(metadata) : null, tenantId);
66
+ VALUES ($1, $2, $3::varchar[], $4, $5::jsonb, $6::uuid)
67
+ RETURNING ${ENDPOINT_COLUMNS_WITH_SECRET}`, url, encryptedSecret, events, description, metadata ? JSON.stringify(metadata) : null, tenantId);
65
68
  return endpoint;
66
69
  }
67
70
  async getEndpoint(id) {
@@ -71,7 +74,7 @@ let PrismaEndpointRepository = class PrismaEndpointRepository {
71
74
  async listEndpoints(tenantId) {
72
75
  if (tenantId) {
73
76
  const filtered = await this.prisma.$queryRawUnsafe(`SELECT ${ENDPOINT_COLUMNS} FROM webhook_endpoints
74
- WHERE tenant_id = $1 ORDER BY created_at DESC`, tenantId);
77
+ WHERE tenant_id::text = $1 ORDER BY created_at DESC`, tenantId);
75
78
  return filtered;
76
79
  }
77
80
  const all = await this.prisma.$queryRawUnsafe(`SELECT ${ENDPOINT_COLUMNS} FROM webhook_endpoints ORDER BY created_at DESC`);
@@ -152,6 +155,6 @@ let PrismaEndpointRepository = class PrismaEndpointRepository {
152
155
  exports.PrismaEndpointRepository = PrismaEndpointRepository;
153
156
  exports.PrismaEndpointRepository = PrismaEndpointRepository = __decorate([
154
157
  (0, common_1.Injectable)(),
155
- __metadata("design:paramtypes", [Object])
158
+ __metadata("design:paramtypes", [Object, Object])
156
159
  ], PrismaEndpointRepository);
157
160
  //# sourceMappingURL=prisma-endpoint.repository.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"prisma-endpoint.repository.js","sourceRoot":"","sources":["../../src/adapters/prisma-endpoint.repository.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAQ5C,uCAAuC;AACvC,MAAM,gBAAgB,GAAG;;;;;;;4BAOG,CAAC;AAE7B,sEAAsE;AACtE,MAAM,4BAA4B,GAAG;;;;;;;4BAOT,CAAC;AAGtB,IAAM,wBAAwB,GAA9B,MAAM,wBAAwB;IACN;IAA7B,YAA6B,MAAW;QAAX,WAAM,GAAN,MAAM,CAAK;IAAG,CAAC;IAE5C,KAAK,CAAC,qBAAqB,CACzB,SAAiB,EACjB,QAA4B;QAE5B,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,MAAM,IAAI,GAAqB,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,CAC9D,UAAU,gBAAgB;;uDAEqB,EAC/C,QAAQ,EACR,SAAS,CACV,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,IAAI,GAAqB,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,CAC9D,UAAU,gBAAgB;;qDAEqB,EAC/C,SAAS,CACV,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,kCAAkC,CACtC,EAAO,EACP,SAAiB,EACjB,QAA4B;QAE5B,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,MAAM,IAAI,GAAqB,MAAM,EAAE,CAAC,eAAe,CACrD,UAAU,gBAAgB;;uDAEqB,EAC/C,QAAQ,EACR,SAAS,CACV,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,IAAI,GAAqB,MAAM,EAAE,CAAC,eAAe,CACrD,UAAU,gBAAgB;;qDAEqB,EAC/C,SAAS,CACV,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,GAAW,EACX,MAAc,EACd,MAAgB,EAChB,WAA0B,EAC1B,QAAwC,EACxC,QAAuB;QAEvB,MAAM,CAAC,QAAQ,CAAC,GAA+B,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,CAC9E;;mBAEa,4BAA4B,EAAE,EAC3C,GAAG,EACH,MAAM,EACN,MAAM,EACN,WAAW,EACX,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAC1C,QAAQ,CACT,CAAC;QACF,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,EAAU;QAC1B,MAAM,OAAO,GAAqB,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,CACjE,UAAU,gBAAgB,6CAA6C,EACvE,EAAE,CACH,CAAC;QACF,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,QAAiB;QACnC,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,QAAQ,GAAqB,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,CAClE,UAAU,gBAAgB;uDACqB,EAC/C,QAAQ,CACT,CAAC;YACF,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,MAAM,GAAG,GAAqB,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,CAC7D,UAAU,gBAAgB,kDAAkD,CAC7E,CAAC;QACF,OAAO,GAAG,CAAC;IACb,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,EAAU,EACV,GAAsB;QAEtB,MAAM,UAAU,GAAa,CAAC,oBAAoB,CAAC,CAAC;QACpD,MAAM,MAAM,GAAc,EAAE,CAAC;QAC7B,IAAI,UAAU,GAAG,CAAC,CAAC;QAEnB,IAAI,GAAG,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YAC1B,UAAU,CAAC,IAAI,CAAC,UAAU,UAAU,EAAE,EAAE,CAAC,CAAC;YAC1C,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC7B,UAAU,CAAC,IAAI,CAAC,aAAa,UAAU,EAAE,aAAa,CAAC,CAAC;YACxD,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1B,CAAC;QACD,IAAI,GAAG,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YAClC,UAAU,CAAC,IAAI,CAAC,kBAAkB,UAAU,EAAE,EAAE,CAAC,CAAC;YAClD,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC/B,CAAC;QACD,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC/B,UAAU,CAAC,IAAI,CAAC,eAAe,UAAU,EAAE,SAAS,CAAC,CAAC;YACtD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC5C,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC7B,UAAU,CAAC,IAAI,CAAC,aAAa,UAAU,EAAE,EAAE,CAAC,CAAC;YAC7C,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1B,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,MAAM,KAAK,GAAG;;YAEN,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;oBACb,UAAU;kBACZ,gBAAgB,EAAE,CAAC;QAEjC,MAAM,OAAO,GAAqB,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,GAAG,MAAM,CAAC,CAAC;QACtF,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,EAAU;QAC7B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAA;iDACC,EAAE,QAAQ,CAAC;QACxD,OAAO,MAAM,GAAG,CAAC,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,UAAkB;QACpC,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAA;;;;mBAId,UAAU,QAAQ,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,UAAkB;QACxC,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAoC;;;mBAGlE,UAAU;qCACQ,CAAC;QAClC,OAAO,OAAO,CAAC,oBAAoB,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,UAAkB,EAAE,MAAc;QACtD,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAA;;mEAEkC,MAAM;mBACtD,UAAU,0BAA0B,CAAC;IACtD,CAAC;IAED,KAAK,CAAC,wBAAwB,CAAC,eAAuB;QACpD,MAAM,gBAAgB,GAAG,GAAG,eAAe,UAAU,CAAC;QACtD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAkB;;;;;;4BAMvC,gBAAgB;mBACzB,CAAC;QAChB,OAAO,SAAS,CAAC,MAAM,CAAC;IAC1B,CAAC;CACF,CAAA;AAjLY,4DAAwB;mCAAxB,wBAAwB;IADpC,IAAA,mBAAU,GAAE;;GACA,wBAAwB,CAiLpC"}
1
+ {"version":3,"file":"prisma-endpoint.repository.js","sourceRoot":"","sources":["../../src/adapters/prisma-endpoint.repository.ts"],"names":[],"mappings":"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"}
@@ -19,14 +19,14 @@ let PrismaEventRepository = class PrismaEventRepository {
19
19
  async saveEvent(eventType, payload, tenantId) {
20
20
  const [saved] = await this.prisma.$queryRaw `
21
21
  INSERT INTO webhook_events (event_type, payload, tenant_id)
22
- VALUES (${eventType}, ${JSON.stringify(payload)}::jsonb, ${tenantId})
22
+ VALUES (${eventType}, ${JSON.stringify(payload)}::jsonb, ${tenantId}::uuid)
23
23
  RETURNING id`;
24
24
  return saved.id;
25
25
  }
26
26
  async saveEventInTransaction(tx, eventType, payload, tenantId) {
27
27
  const [saved] = await tx.$queryRaw `
28
28
  INSERT INTO webhook_events (event_type, payload, tenant_id)
29
- VALUES (${eventType}, ${JSON.stringify(payload)}::jsonb, ${tenantId})
29
+ VALUES (${eventType}, ${JSON.stringify(payload)}::jsonb, ${tenantId}::uuid)
30
30
  RETURNING id`;
31
31
  return saved.id;
32
32
  }
package/dist/index.d.ts CHANGED
@@ -14,10 +14,12 @@ export type { WebhookEventRepository } from './ports/webhook-event.repository';
14
14
  export type { WebhookEndpointRepository } from './ports/webhook-endpoint.repository';
15
15
  export type { WebhookDeliveryRepository, PendingDelivery, } from './ports/webhook-delivery.repository';
16
16
  export type { WebhookHttpClient } from './ports/webhook-http-client';
17
+ export type { WebhookSecretVault } from './ports/webhook-secret-vault';
17
18
  export { PrismaEventRepository } from './adapters/prisma-event.repository';
18
19
  export { PrismaEndpointRepository } from './adapters/prisma-endpoint.repository';
19
20
  export { PrismaDeliveryRepository } from './adapters/prisma-delivery.repository';
20
21
  export { FetchHttpClient } from './adapters/fetch-http-client';
22
+ export { PlaintextSecretVault } from './adapters/plaintext-secret-vault';
21
23
  export type { WebhookModuleOptions, WebhookModuleAsyncOptions, WebhookOptionsFactory, DeliveryOptions, CircuitBreakerOptions, PollingOptions, } from './interfaces/webhook-options.interface';
22
24
  export type { EndpointRecord, EndpointRecordWithSecret, CreateEndpointDto, UpdateEndpointDto, } from './interfaces/webhook-endpoint.interface';
23
25
  export type { DeliveryStatus, DeliveryRecord, EventRecord, DeliveryResult, DeliveryLogFilters, } from './interfaces/webhook-delivery.interface';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGjD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAG/C,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,kFAAkF;AAClF,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAG9D,YAAY,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAC/E,YAAY,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AACrF,YAAY,EACV,yBAAyB,EACzB,eAAe,GAChB,MAAM,qCAAqC,CAAC;AAC7C,YAAY,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAGrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AACjF,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAG/D,YAAY,EACV,oBAAoB,EACpB,yBAAyB,EACzB,qBAAqB,EACrB,eAAe,EACf,qBAAqB,EACrB,cAAc,GACf,MAAM,wCAAwC,CAAC;AAGhD,YAAY,EACV,cAAc,EACd,wBAAwB,EACxB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,yCAAyC,CAAC;AAEjD,YAAY,EACV,cAAc,EACd,cAAc,EACd,WAAW,EACX,cAAc,EACd,kBAAkB,GACnB,MAAM,yCAAyC,CAAC;AAGjD,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,2BAA2B,EAC3B,2BAA2B,EAC3B,mBAAmB,EACnB,wBAAwB,EACxB,wBAAwB,EACxB,mBAAmB,EACnB,wBAAwB,EACxB,0BAA0B,EAC1B,iCAAiC,EACjC,wCAAwC,EACxC,6BAA6B,GAC9B,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGjD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAG/C,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,kFAAkF;AAClF,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAG9D,YAAY,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAC/E,YAAY,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AACrF,YAAY,EACV,yBAAyB,EACzB,eAAe,GAChB,MAAM,qCAAqC,CAAC;AAC7C,YAAY,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACrE,YAAY,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAGvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AACjF,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAGzE,YAAY,EACV,oBAAoB,EACpB,yBAAyB,EACzB,qBAAqB,EACrB,eAAe,EACf,qBAAqB,EACrB,cAAc,GACf,MAAM,wCAAwC,CAAC;AAGhD,YAAY,EACV,cAAc,EACd,wBAAwB,EACxB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,yCAAyC,CAAC;AAEjD,YAAY,EACV,cAAc,EACd,cAAc,EACd,WAAW,EACX,cAAc,EACd,kBAAkB,GACnB,MAAM,yCAAyC,CAAC;AAGjD,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,2BAA2B,EAC3B,2BAA2B,EAC3B,mBAAmB,EACnB,wBAAwB,EACxB,wBAAwB,EACxB,mBAAmB,EACnB,wBAAwB,EACxB,0BAA0B,EAC1B,iCAAiC,EACjC,wCAAwC,EACxC,6BAA6B,GAC9B,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC"}
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.resolveAndValidateHost = exports.validateWebhookUrl = exports.DEFAULT_STALE_SENDING_MINUTES = exports.DEFAULT_CIRCUIT_BREAKER_COOLDOWN_MINUTES = exports.DEFAULT_CIRCUIT_BREAKER_THRESHOLD = exports.DEFAULT_POLLING_BATCH_SIZE = exports.DEFAULT_POLLING_INTERVAL = exports.DEFAULT_MAX_RETRIES = exports.DEFAULT_DELIVERY_TIMEOUT = exports.DEFAULT_BACKOFF_SCHEDULE = exports.WEBHOOK_HTTP_CLIENT = exports.WEBHOOK_DELIVERY_REPOSITORY = exports.WEBHOOK_ENDPOINT_REPOSITORY = exports.WEBHOOK_EVENT_REPOSITORY = exports.WEBHOOK_MODULE_OPTIONS = exports.FetchHttpClient = exports.PrismaDeliveryRepository = exports.PrismaEndpointRepository = exports.PrismaEventRepository = exports.WebhookAdminService = exports.WebhookDeliveryAdminService = exports.WebhookEndpointAdminService = exports.WebhookEvent = exports.WebhookCircuitBreaker = exports.WebhookSigner = exports.WebhookRetryPolicy = exports.WebhookDispatcher = exports.WebhookDeliveryWorker = exports.WebhookService = exports.WebhookModule = void 0;
3
+ exports.resolveAndValidateHost = exports.validateWebhookUrl = exports.DEFAULT_STALE_SENDING_MINUTES = exports.DEFAULT_CIRCUIT_BREAKER_COOLDOWN_MINUTES = exports.DEFAULT_CIRCUIT_BREAKER_THRESHOLD = exports.DEFAULT_POLLING_BATCH_SIZE = exports.DEFAULT_POLLING_INTERVAL = exports.DEFAULT_MAX_RETRIES = exports.DEFAULT_DELIVERY_TIMEOUT = exports.DEFAULT_BACKOFF_SCHEDULE = exports.WEBHOOK_HTTP_CLIENT = exports.WEBHOOK_DELIVERY_REPOSITORY = exports.WEBHOOK_ENDPOINT_REPOSITORY = exports.WEBHOOK_EVENT_REPOSITORY = exports.WEBHOOK_MODULE_OPTIONS = exports.PlaintextSecretVault = exports.FetchHttpClient = exports.PrismaDeliveryRepository = exports.PrismaEndpointRepository = exports.PrismaEventRepository = exports.WebhookAdminService = exports.WebhookDeliveryAdminService = exports.WebhookEndpointAdminService = exports.WebhookEvent = exports.WebhookCircuitBreaker = exports.WebhookSigner = exports.WebhookRetryPolicy = exports.WebhookDispatcher = exports.WebhookDeliveryWorker = exports.WebhookService = exports.WebhookModule = void 0;
4
4
  // Module
5
5
  var webhook_module_1 = require("./webhook.module");
6
6
  Object.defineProperty(exports, "WebhookModule", { enumerable: true, get: function () { return webhook_module_1.WebhookModule; } });
@@ -36,6 +36,8 @@ var prisma_delivery_repository_1 = require("./adapters/prisma-delivery.repositor
36
36
  Object.defineProperty(exports, "PrismaDeliveryRepository", { enumerable: true, get: function () { return prisma_delivery_repository_1.PrismaDeliveryRepository; } });
37
37
  var fetch_http_client_1 = require("./adapters/fetch-http-client");
38
38
  Object.defineProperty(exports, "FetchHttpClient", { enumerable: true, get: function () { return fetch_http_client_1.FetchHttpClient; } });
39
+ var plaintext_secret_vault_1 = require("./adapters/plaintext-secret-vault");
40
+ Object.defineProperty(exports, "PlaintextSecretVault", { enumerable: true, get: function () { return plaintext_secret_vault_1.PlaintextSecretVault; } });
39
41
  // Constants & tokens
40
42
  var webhook_constants_1 = require("./webhook.constants");
41
43
  Object.defineProperty(exports, "WEBHOOK_MODULE_OPTIONS", { enumerable: true, get: function () { return webhook_constants_1.WEBHOOK_MODULE_OPTIONS; } });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,SAAS;AACT,mDAAiD;AAAxC,+GAAA,aAAa,OAAA;AAEtB,gBAAgB;AAChB,qDAAmD;AAA1C,iHAAA,cAAc,OAAA;AACvB,qEAAkE;AAAzD,gIAAA,qBAAqB,OAAA;AAC9B,2DAAyD;AAAhD,uHAAA,iBAAiB,OAAA;AAC1B,+DAA4D;AAAnD,0HAAA,kBAAkB,OAAA;AAC3B,mDAAwE;AAA/D,+GAAA,aAAa,OAAA;AACtB,qEAAkE;AAAzD,gIAAA,qBAAqB,OAAA;AAC9B,iDAA+C;AAAtC,6GAAA,YAAY,OAAA;AAErB,iBAAiB;AACjB,mFAA+E;AAAtE,6IAAA,2BAA2B,OAAA;AACpC,mFAA+E;AAAtE,6IAAA,2BAA2B,OAAA;AACpC,kFAAkF;AAClF,iEAA8D;AAArD,4HAAA,mBAAmB,OAAA;AAW5B,mBAAmB;AACnB,8EAA2E;AAAlE,gIAAA,qBAAqB,OAAA;AAC9B,oFAAiF;AAAxE,sIAAA,wBAAwB,OAAA;AACjC,oFAAiF;AAAxE,sIAAA,wBAAwB,OAAA;AACjC,kEAA+D;AAAtD,oHAAA,eAAe,OAAA;AA4BxB,qBAAqB;AACrB,yDAc6B;AAb3B,2HAAA,sBAAsB,OAAA;AACtB,6HAAA,wBAAwB,OAAA;AACxB,gIAAA,2BAA2B,OAAA;AAC3B,gIAAA,2BAA2B,OAAA;AAC3B,wHAAA,mBAAmB,OAAA;AACnB,6HAAA,wBAAwB,OAAA;AACxB,6HAAA,wBAAwB,OAAA;AACxB,wHAAA,mBAAmB,OAAA;AACnB,6HAAA,wBAAwB,OAAA;AACxB,+HAAA,0BAA0B,OAAA;AAC1B,sIAAA,iCAAiC,OAAA;AACjC,6IAAA,wCAAwC,OAAA;AACxC,kIAAA,6BAA6B,OAAA;AAG/B,iEAAqF;AAA5E,2HAAA,kBAAkB,OAAA;AAAE,+HAAA,sBAAsB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,SAAS;AACT,mDAAiD;AAAxC,+GAAA,aAAa,OAAA;AAEtB,gBAAgB;AAChB,qDAAmD;AAA1C,iHAAA,cAAc,OAAA;AACvB,qEAAkE;AAAzD,gIAAA,qBAAqB,OAAA;AAC9B,2DAAyD;AAAhD,uHAAA,iBAAiB,OAAA;AAC1B,+DAA4D;AAAnD,0HAAA,kBAAkB,OAAA;AAC3B,mDAAwE;AAA/D,+GAAA,aAAa,OAAA;AACtB,qEAAkE;AAAzD,gIAAA,qBAAqB,OAAA;AAC9B,iDAA+C;AAAtC,6GAAA,YAAY,OAAA;AAErB,iBAAiB;AACjB,mFAA+E;AAAtE,6IAAA,2BAA2B,OAAA;AACpC,mFAA+E;AAAtE,6IAAA,2BAA2B,OAAA;AACpC,kFAAkF;AAClF,iEAA8D;AAArD,4HAAA,mBAAmB,OAAA;AAY5B,mBAAmB;AACnB,8EAA2E;AAAlE,gIAAA,qBAAqB,OAAA;AAC9B,oFAAiF;AAAxE,sIAAA,wBAAwB,OAAA;AACjC,oFAAiF;AAAxE,sIAAA,wBAAwB,OAAA;AACjC,kEAA+D;AAAtD,oHAAA,eAAe,OAAA;AACxB,4EAAyE;AAAhE,8HAAA,oBAAoB,OAAA;AA4B7B,qBAAqB;AACrB,yDAc6B;AAb3B,2HAAA,sBAAsB,OAAA;AACtB,6HAAA,wBAAwB,OAAA;AACxB,gIAAA,2BAA2B,OAAA;AAC3B,gIAAA,2BAA2B,OAAA;AAC3B,wHAAA,mBAAmB,OAAA;AACnB,6HAAA,wBAAwB,OAAA;AACxB,6HAAA,wBAAwB,OAAA;AACxB,wHAAA,mBAAmB,OAAA;AACnB,6HAAA,wBAAwB,OAAA;AACxB,+HAAA,0BAA0B,OAAA;AAC1B,sIAAA,iCAAiC,OAAA;AACjC,6IAAA,wCAAwC,OAAA;AACxC,kIAAA,6BAA6B,OAAA;AAG/B,iEAAqF;AAA5E,2HAAA,kBAAkB,OAAA;AAAE,+HAAA,sBAAsB,OAAA"}
@@ -3,6 +3,7 @@ import { WebhookEventRepository } from '../ports/webhook-event.repository';
3
3
  import { WebhookEndpointRepository } from '../ports/webhook-endpoint.repository';
4
4
  import { WebhookDeliveryRepository } from '../ports/webhook-delivery.repository';
5
5
  import { WebhookHttpClient } from '../ports/webhook-http-client';
6
+ import { WebhookSecretVault } from '../ports/webhook-secret-vault';
6
7
  export interface DeliveryOptions {
7
8
  timeout?: number;
8
9
  maxRetries?: number;
@@ -32,6 +33,8 @@ export interface WebhookModuleOptions {
32
33
  endpointRepository?: WebhookEndpointRepository;
33
34
  deliveryRepository?: WebhookDeliveryRepository;
34
35
  httpClient?: WebhookHttpClient;
36
+ /** Custom secret vault for encrypting/decrypting endpoint signing secrets at rest. Default: PlaintextSecretVault (no-op). */
37
+ secretVault?: WebhookSecretVault;
35
38
  }
36
39
  export interface WebhookOptionsFactory {
37
40
  createWebhookOptions(): Promise<WebhookModuleOptions> | WebhookModuleOptions;
@@ -1 +1 @@
1
- {"version":3,"file":"webhook-options.interface.d.ts","sourceRoot":"","sources":["../../src/interfaces/webhook-options.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;AACjF,OAAO,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEjE,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6FAA6F;IAC7F,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,oBAAoB;IACnC,mHAAmH;IACnH,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,cAAc,CAAC,EAAE,qBAAqB,CAAC;IACvC,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,oGAAoG;IACpG,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,sFAAsF;IACtF,eAAe,CAAC,EAAE,sBAAsB,CAAC;IACzC,kBAAkB,CAAC,EAAE,yBAAyB,CAAC;IAC/C,kBAAkB,CAAC,EAAE,yBAAyB,CAAC;IAC/C,UAAU,CAAC,EAAE,iBAAiB,CAAC;CAChC;AAED,MAAM,WAAW,qBAAqB;IACpC,oBAAoB,IAAI,OAAO,CAAC,oBAAoB,CAAC,GAAG,oBAAoB,CAAC;CAC9E;AAED,MAAM,WAAW,yBAA0B,SAAQ,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC;IAChF,UAAU,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,oBAAoB,CAAC,GAAG,oBAAoB,CAAC;IACtF,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,QAAQ,CAAC,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;IACvC,WAAW,CAAC,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;CAC3C"}
1
+ {"version":3,"file":"webhook-options.interface.d.ts","sourceRoot":"","sources":["../../src/interfaces/webhook-options.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;AACjF,OAAO,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAEnE,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6FAA6F;IAC7F,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,oBAAoB;IACnC,mHAAmH;IACnH,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,cAAc,CAAC,EAAE,qBAAqB,CAAC;IACvC,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,oGAAoG;IACpG,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,sFAAsF;IACtF,eAAe,CAAC,EAAE,sBAAsB,CAAC;IACzC,kBAAkB,CAAC,EAAE,yBAAyB,CAAC;IAC/C,kBAAkB,CAAC,EAAE,yBAAyB,CAAC;IAC/C,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,6HAA6H;IAC7H,WAAW,CAAC,EAAE,kBAAkB,CAAC;CAClC;AAED,MAAM,WAAW,qBAAqB;IACpC,oBAAoB,IAAI,OAAO,CAAC,oBAAoB,CAAC,GAAG,oBAAoB,CAAC;CAC9E;AAED,MAAM,WAAW,yBAA0B,SAAQ,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC;IAChF,UAAU,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,oBAAoB,CAAC,GAAG,oBAAoB,CAAC;IACtF,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,QAAQ,CAAC,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;IACvC,WAAW,CAAC,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;CAC3C"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Port for encrypting/decrypting endpoint signing secrets at rest.
3
+ * Implement this interface to provide custom encryption (e.g. AES-256-GCM).
4
+ * The default PlaintextSecretVault passes values through unchanged.
5
+ */
6
+ export interface WebhookSecretVault {
7
+ encrypt(plainSecret: string): Promise<string>;
8
+ decrypt(encryptedSecret: string): Promise<string>;
9
+ }
10
+ //# sourceMappingURL=webhook-secret-vault.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook-secret-vault.d.ts","sourceRoot":"","sources":["../../src/ports/webhook-secret-vault.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9C,OAAO,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACnD"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=webhook-secret-vault.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook-secret-vault.js","sourceRoot":"","sources":["../../src/ports/webhook-secret-vault.ts"],"names":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"webhook.module.d.ts","sourceRoot":"","sources":["../src/webhook.module.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EAIb,eAAe,EACf,YAAY,EAEb,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAkB,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAgBlE,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EAE1B,MAAM,wCAAwC,CAAC;AAiFhD,qBAEa,aAAc,YAAW,YAAY,EAAE,eAAe;IAE/D,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,cAAc;IAE/B,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAHP,iBAAiB,EAAE,iBAAiB,EACpC,cAAc,EAAE,qBAAqB,EAErC,OAAO,EAAE,oBAAoB;IAGhD,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa;IAa5D,MAAM,CAAC,YAAY,CAAC,YAAY,EAAE,yBAAyB,GAAG,aAAa;IAwC3E,YAAY,IAAI,IAAI;IAQpB,eAAe,IAAI,IAAI;CAOxB"}
1
+ {"version":3,"file":"webhook.module.d.ts","sourceRoot":"","sources":["../src/webhook.module.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EAIb,eAAe,EACf,YAAY,EAEb,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAkB,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAgBlE,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EAE1B,MAAM,wCAAwC,CAAC;AAuFhD,qBAEa,aAAc,YAAW,YAAY,EAAE,eAAe;IAE/D,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,cAAc;IAE/B,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAHP,iBAAiB,EAAE,iBAAiB,EACpC,cAAc,EAAE,qBAAqB,EAErC,OAAO,EAAE,oBAAoB;IAGhD,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa;IAa5D,MAAM,CAAC,YAAY,CAAC,YAAY,EAAE,yBAAyB,GAAG,aAAa;IAwC3E,YAAY,IAAI,IAAI;IAQpB,eAAe,IAAI,IAAI;CAOxB"}
@@ -30,7 +30,9 @@ const prisma_event_repository_1 = require("./adapters/prisma-event.repository");
30
30
  const prisma_endpoint_repository_1 = require("./adapters/prisma-endpoint.repository");
31
31
  const prisma_delivery_repository_1 = require("./adapters/prisma-delivery.repository");
32
32
  const fetch_http_client_1 = require("./adapters/fetch-http-client");
33
+ const plaintext_secret_vault_1 = require("./adapters/plaintext-secret-vault");
33
34
  function createPortProviders(options) {
35
+ const vault = options.secretVault ?? new plaintext_secret_vault_1.PlaintextSecretVault();
34
36
  return [
35
37
  {
36
38
  provide: webhook_constants_1.WEBHOOK_EVENT_REPOSITORY,
@@ -39,12 +41,12 @@ function createPortProviders(options) {
39
41
  {
40
42
  provide: webhook_constants_1.WEBHOOK_ENDPOINT_REPOSITORY,
41
43
  useFactory: () => options.endpointRepository ??
42
- new prisma_endpoint_repository_1.PrismaEndpointRepository(options.prisma),
44
+ new prisma_endpoint_repository_1.PrismaEndpointRepository(options.prisma, vault),
43
45
  },
44
46
  {
45
47
  provide: webhook_constants_1.WEBHOOK_DELIVERY_REPOSITORY,
46
48
  useFactory: () => options.deliveryRepository ??
47
- new prisma_delivery_repository_1.PrismaDeliveryRepository(options.prisma),
49
+ new prisma_delivery_repository_1.PrismaDeliveryRepository(options.prisma, vault),
48
50
  },
49
51
  {
50
52
  provide: webhook_constants_1.WEBHOOK_HTTP_CLIENT,
@@ -61,12 +63,18 @@ function createAsyncPortProviders() {
61
63
  },
62
64
  {
63
65
  provide: webhook_constants_1.WEBHOOK_ENDPOINT_REPOSITORY,
64
- useFactory: (opts) => opts.endpointRepository ?? new prisma_endpoint_repository_1.PrismaEndpointRepository(opts.prisma),
66
+ useFactory: (opts) => {
67
+ const vault = opts.secretVault ?? new plaintext_secret_vault_1.PlaintextSecretVault();
68
+ return opts.endpointRepository ?? new prisma_endpoint_repository_1.PrismaEndpointRepository(opts.prisma, vault);
69
+ },
65
70
  inject: [webhook_constants_1.WEBHOOK_MODULE_OPTIONS],
66
71
  },
67
72
  {
68
73
  provide: webhook_constants_1.WEBHOOK_DELIVERY_REPOSITORY,
69
- useFactory: (opts) => opts.deliveryRepository ?? new prisma_delivery_repository_1.PrismaDeliveryRepository(opts.prisma),
74
+ useFactory: (opts) => {
75
+ const vault = opts.secretVault ?? new plaintext_secret_vault_1.PlaintextSecretVault();
76
+ return opts.deliveryRepository ?? new prisma_delivery_repository_1.PrismaDeliveryRepository(opts.prisma, vault);
77
+ },
70
78
  inject: [webhook_constants_1.WEBHOOK_MODULE_OPTIONS],
71
79
  },
72
80
  {
@@ -1 +1 @@
1
- {"version":3,"file":"webhook.module.js","sourceRoot":"","sources":["../src/webhook.module.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"webhook.module.js","sourceRoot":"","sources":["../src/webhook.module.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nestarc/webhook",
3
- "version": "0.3.0",
3
+ "version": "0.4.1",
4
4
  "description": "Outbound webhook delivery for NestJS — HMAC signing, exponential retry, circuit breaker, delivery logs, fan-out, Standard Webhooks compatible",
5
5
  "author": "nestarc",
6
6
  "license": "MIT",
@@ -47,7 +47,8 @@ CREATE TABLE IF NOT EXISTS webhook_deliveries (
47
47
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
48
48
  event_id UUID NOT NULL REFERENCES webhook_events(id),
49
49
  endpoint_id UUID NOT NULL REFERENCES webhook_endpoints(id),
50
- status VARCHAR(20) NOT NULL DEFAULT 'PENDING',
50
+ status VARCHAR(20) NOT NULL DEFAULT 'PENDING'
51
+ CHECK (status IN ('PENDING', 'SENDING', 'SENT', 'FAILED')),
51
52
  attempts INT NOT NULL DEFAULT 0,
52
53
  max_attempts INT NOT NULL DEFAULT 5,
53
54
  next_attempt_at TIMESTAMPTZ,
@@ -64,6 +65,11 @@ CREATE TABLE IF NOT EXISTS webhook_deliveries (
64
65
  CONSTRAINT fk_delivery_endpoint FOREIGN KEY (endpoint_id) REFERENCES webhook_endpoints(id)
65
66
  );
66
67
 
68
+ -- Migration for existing databases:
69
+ -- ALTER TABLE webhook_deliveries
70
+ -- ADD CONSTRAINT chk_delivery_status
71
+ -- CHECK (status IN ('PENDING', 'SENDING', 'SENT', 'FAILED'));
72
+
67
73
  CREATE INDEX IF NOT EXISTS idx_webhook_deliveries_status_next
68
74
  ON webhook_deliveries (status, next_attempt_at);
69
75
  CREATE INDEX IF NOT EXISTS idx_webhook_deliveries_endpoint_status