@nestarc/webhook 0.12.1 → 0.13.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.
Files changed (61) hide show
  1. package/README.md +97 -0
  2. package/dist/adapters/fetch-http-client.d.ts +2 -2
  3. package/dist/adapters/fetch-http-client.d.ts.map +1 -1
  4. package/dist/adapters/fetch-http-client.js +165 -29
  5. package/dist/adapters/fetch-http-client.js.map +1 -1
  6. package/dist/adapters/prisma-delivery.repository.d.ts +9 -3
  7. package/dist/adapters/prisma-delivery.repository.d.ts.map +1 -1
  8. package/dist/adapters/prisma-delivery.repository.js +228 -19
  9. package/dist/adapters/prisma-delivery.repository.js.map +1 -1
  10. package/dist/adapters/prisma-endpoint.repository.js +1 -1
  11. package/dist/adapters/prisma-event.repository.d.ts +3 -1
  12. package/dist/adapters/prisma-event.repository.d.ts.map +1 -1
  13. package/dist/adapters/prisma-event.repository.js +36 -2
  14. package/dist/adapters/prisma-event.repository.js.map +1 -1
  15. package/dist/index.d.ts +5 -4
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.js +3 -1
  18. package/dist/index.js.map +1 -1
  19. package/dist/interfaces/webhook-delivery.interface.d.ts +26 -0
  20. package/dist/interfaces/webhook-delivery.interface.d.ts.map +1 -1
  21. package/dist/interfaces/webhook-options.interface.d.ts +27 -0
  22. package/dist/interfaces/webhook-options.interface.d.ts.map +1 -1
  23. package/dist/ports/webhook-delivery.repository.d.ts +6 -2
  24. package/dist/ports/webhook-delivery.repository.d.ts.map +1 -1
  25. package/dist/ports/webhook-event.repository.d.ts +6 -0
  26. package/dist/ports/webhook-event.repository.d.ts.map +1 -1
  27. package/dist/ports/webhook-http-client.d.ts +8 -1
  28. package/dist/ports/webhook-http-client.d.ts.map +1 -1
  29. package/dist/webhook.admin.service.d.ts +4 -2
  30. package/dist/webhook.admin.service.d.ts.map +1 -1
  31. package/dist/webhook.admin.service.js +8 -2
  32. package/dist/webhook.admin.service.js.map +1 -1
  33. package/dist/webhook.delivery-admin.service.d.ts +4 -2
  34. package/dist/webhook.delivery-admin.service.d.ts.map +1 -1
  35. package/dist/webhook.delivery-admin.service.js +14 -2
  36. package/dist/webhook.delivery-admin.service.js.map +1 -1
  37. package/dist/webhook.dispatcher.d.ts.map +1 -1
  38. package/dist/webhook.dispatcher.js +5 -2
  39. package/dist/webhook.dispatcher.js.map +1 -1
  40. package/dist/webhook.module.d.ts.map +1 -1
  41. package/dist/webhook.module.js +6 -2
  42. package/dist/webhook.module.js.map +1 -1
  43. package/dist/webhook.retention-admin.service.d.ts +10 -0
  44. package/dist/webhook.retention-admin.service.d.ts.map +1 -0
  45. package/dist/webhook.retention-admin.service.js +50 -0
  46. package/dist/webhook.retention-admin.service.js.map +1 -0
  47. package/dist/webhook.service.d.ts +7 -4
  48. package/dist/webhook.service.d.ts.map +1 -1
  49. package/dist/webhook.service.js +40 -10
  50. package/dist/webhook.service.js.map +1 -1
  51. package/dist/webhook.signer.d.ts +5 -0
  52. package/dist/webhook.signer.d.ts.map +1 -1
  53. package/dist/webhook.signer.js +14 -0
  54. package/dist/webhook.signer.js.map +1 -1
  55. package/dist/webhook.url-validator.d.ts +1 -1
  56. package/dist/webhook.url-validator.d.ts.map +1 -1
  57. package/dist/webhook.url-validator.js +145 -51
  58. package/dist/webhook.url-validator.js.map +1 -1
  59. package/package.json +9 -3
  60. package/src/sql/create-webhook-tables.sql +11 -5
  61. package/src/sql/migrations/v0.13.0.sql +11 -0
@@ -41,9 +41,11 @@ function normalizeBacklogNumber(value, field) {
41
41
  let PrismaDeliveryRepository = class PrismaDeliveryRepository {
42
42
  prisma;
43
43
  vault;
44
- constructor(prisma, vault) {
44
+ redaction;
45
+ constructor(prisma, vault, redaction) {
45
46
  this.prisma = prisma;
46
47
  this.vault = vault;
48
+ this.redaction = redaction;
47
49
  }
48
50
  async createDeliveriesInTransaction(tx, eventId, endpointIds, maxAttempts) {
49
51
  await tx.$executeRawUnsafe(`INSERT INTO webhook_deliveries (
@@ -74,7 +76,11 @@ let PrismaDeliveryRepository = class PrismaDeliveryRepository {
74
76
  ELSE NULL
75
77
  END
76
78
  FROM webhook_endpoints e
77
- WHERE e.id = ANY($2::uuid[])`, eventId, endpointIds, maxAttempts);
79
+ JOIN webhook_events ev ON ev.id = $1::uuid
80
+ WHERE e.id = ANY($2::uuid[])
81
+ AND e.active = true
82
+ AND (ev.tenant_id IS NULL OR e.tenant_id = ev.tenant_id)
83
+ AND (ev.event_type = ANY(e.events) OR '*' = ANY(e.events))`, eventId, endpointIds, maxAttempts);
78
84
  }
79
85
  async runInTransaction(fn) {
80
86
  return this.prisma.$transaction(fn);
@@ -134,45 +140,48 @@ let PrismaDeliveryRepository = class PrismaDeliveryRepository {
134
140
  return rows;
135
141
  }
136
142
  async markSent(deliveryId, attempts, result) {
143
+ const sanitizedResult = this.sanitizeDeliveryResult(deliveryId, result);
137
144
  await this.prisma.$transaction(async (tx) => {
138
145
  await tx.$executeRaw `
139
146
  UPDATE webhook_deliveries
140
147
  SET status = 'SENT', attempts = ${attempts},
141
148
  last_attempt_at = NOW(), completed_at = NOW(),
142
- response_status = ${result.statusCode ?? null},
143
- response_body = ${result.body ?? null},
144
- latency_ms = ${result.latencyMs}
149
+ response_status = ${sanitizedResult.statusCode ?? null},
150
+ response_body = ${sanitizedResult.body ?? null},
151
+ latency_ms = ${sanitizedResult.latencyMs}
145
152
  WHERE id = ${deliveryId}::uuid`;
146
- await this.appendAttemptLog(tx, deliveryId, attempts, 'SENT', result);
153
+ await this.appendAttemptLog(tx, deliveryId, attempts, 'SENT', sanitizedResult);
147
154
  });
148
155
  }
149
156
  async markFailed(deliveryId, attempts, result) {
157
+ const sanitizedResult = this.sanitizeDeliveryResult(deliveryId, result);
150
158
  await this.prisma.$transaction(async (tx) => {
151
159
  await tx.$executeRaw `
152
160
  UPDATE webhook_deliveries
153
161
  SET status = 'FAILED', attempts = ${attempts},
154
162
  last_attempt_at = NOW(), completed_at = NOW(),
155
163
  next_attempt_at = NULL,
156
- response_status = ${result.statusCode ?? null},
157
- response_body = ${result.body ?? null},
158
- latency_ms = ${result.latencyMs},
159
- last_error = ${result.error ?? null}
164
+ response_status = ${sanitizedResult.statusCode ?? null},
165
+ response_body = ${sanitizedResult.body ?? null},
166
+ latency_ms = ${sanitizedResult.latencyMs},
167
+ last_error = ${sanitizedResult.error ?? null}
160
168
  WHERE id = ${deliveryId}::uuid`;
161
- await this.appendAttemptLog(tx, deliveryId, attempts, 'FAILED', result);
169
+ await this.appendAttemptLog(tx, deliveryId, attempts, 'FAILED', sanitizedResult);
162
170
  });
163
171
  }
164
172
  async markRetry(deliveryId, attempts, nextAt, result) {
173
+ const sanitizedResult = this.sanitizeDeliveryResult(deliveryId, result);
165
174
  await this.prisma.$transaction(async (tx) => {
166
175
  await tx.$executeRaw `
167
176
  UPDATE webhook_deliveries
168
177
  SET status = 'PENDING', attempts = ${attempts},
169
178
  last_attempt_at = NOW(), next_attempt_at = ${nextAt},
170
- response_status = ${result.statusCode ?? null},
171
- response_body = ${result.body ?? null},
172
- latency_ms = ${result.latencyMs},
173
- last_error = ${result.error ?? null}
179
+ response_status = ${sanitizedResult.statusCode ?? null},
180
+ response_body = ${sanitizedResult.body ?? null},
181
+ latency_ms = ${sanitizedResult.latencyMs},
182
+ last_error = ${sanitizedResult.error ?? null}
174
183
  WHERE id = ${deliveryId}::uuid`;
175
- await this.appendAttemptLog(tx, deliveryId, attempts, 'PENDING', result);
184
+ await this.appendAttemptLog(tx, deliveryId, attempts, 'PENDING', sanitizedResult);
176
185
  });
177
186
  }
178
187
  async recoverStaleSending(stalenessMinutes) {
@@ -357,13 +366,198 @@ let PrismaDeliveryRepository = class PrismaDeliveryRepository {
357
366
  WHERE delivery_id = ${deliveryId}::uuid
358
367
  ORDER BY attempt_number ASC`;
359
368
  }
360
- async retryDelivery(deliveryId) {
369
+ async retryDelivery(deliveryId, _options) {
361
370
  const result = await this.prisma.$executeRaw `
362
371
  UPDATE webhook_deliveries
363
- SET status = 'PENDING', next_attempt_at = NOW()
372
+ SET status = 'PENDING',
373
+ next_attempt_at = NOW(),
374
+ max_attempts = GREATEST(max_attempts, attempts + 1)
364
375
  WHERE id = ${deliveryId}::uuid AND status = 'FAILED'`;
365
376
  return result > 0;
366
377
  }
378
+ async retryFailedDeliveries(filters, _options) {
379
+ if (filters.status && filters.status !== 'FAILED') {
380
+ return { matched: 0, retried: 0, skipped: 0 };
381
+ }
382
+ const limit = filters.limit ?? 100;
383
+ if (!Number.isInteger(limit) || limit < 1 || limit > 1000) {
384
+ throw new Error('Bulk retry limit must be between 1 and 1000');
385
+ }
386
+ const conditions = [`d.status = 'FAILED'`];
387
+ const values = [];
388
+ let paramIndex = 1;
389
+ if (filters.endpointId) {
390
+ conditions.push(`d.endpoint_id = $${paramIndex++}::uuid`);
391
+ values.push(filters.endpointId);
392
+ }
393
+ if (filters.eventType) {
394
+ conditions.push(`ev.event_type = $${paramIndex++}`);
395
+ values.push(filters.eventType);
396
+ }
397
+ if (filters.since) {
398
+ conditions.push(`d.completed_at >= $${paramIndex++}`);
399
+ values.push(filters.since);
400
+ }
401
+ if (filters.until) {
402
+ conditions.push(`d.completed_at <= $${paramIndex++}`);
403
+ values.push(filters.until);
404
+ }
405
+ values.push(limit);
406
+ const query = `
407
+ WITH candidates AS (
408
+ SELECT d.id
409
+ FROM webhook_deliveries d
410
+ JOIN webhook_events ev ON ev.id = d.event_id
411
+ WHERE ${conditions.join(' AND ')}
412
+ ORDER BY d.completed_at DESC NULLS LAST, d.id
413
+ LIMIT $${paramIndex}
414
+ FOR UPDATE SKIP LOCKED
415
+ ),
416
+ updated AS (
417
+ UPDATE webhook_deliveries d
418
+ SET status = 'PENDING',
419
+ next_attempt_at = NOW(),
420
+ max_attempts = GREATEST(max_attempts, attempts + 1)
421
+ WHERE d.id IN (SELECT id FROM candidates)
422
+ RETURNING d.id
423
+ )
424
+ SELECT
425
+ (SELECT COUNT(*) FROM candidates) AS matched,
426
+ (SELECT COUNT(*) FROM updated) AS retried,
427
+ (SELECT COUNT(*) FROM candidates) - (SELECT COUNT(*) FROM updated) AS skipped`;
428
+ const rows = (await this.prisma.$queryRawUnsafe(query, ...values));
429
+ const [result] = rows;
430
+ return {
431
+ matched: normalizeBacklogNumber(result?.matched ?? 0, 'matched'),
432
+ retried: normalizeBacklogNumber(result?.retried ?? 0, 'retried'),
433
+ skipped: normalizeBacklogNumber(result?.skipped ?? 0, 'skipped'),
434
+ };
435
+ }
436
+ async replayEvent(eventId, options) {
437
+ const tenantId = options?.tenantId ?? null;
438
+ const endpointIds = options?.endpointIds ?? null;
439
+ const [result] = await this.prisma.$queryRaw `
440
+ WITH source_event AS (
441
+ SELECT ev.id, ev.event_type, ev.tenant_id
442
+ FROM webhook_events ev
443
+ WHERE ev.id = ${eventId}::uuid
444
+ AND ev.payload_purged_at IS NULL
445
+ AND (${tenantId}::text IS NULL OR ev.tenant_id = ${tenantId})
446
+ ),
447
+ selected_endpoints AS (
448
+ SELECT
449
+ e.id,
450
+ e.url,
451
+ e.secret,
452
+ CASE
453
+ WHEN e.previous_secret IS NOT NULL
454
+ AND e.previous_secret_expires_at IS NOT NULL
455
+ AND e.previous_secret_expires_at > NOW()
456
+ THEN e.previous_secret
457
+ ELSE NULL
458
+ END AS secondary_secret
459
+ FROM webhook_endpoints e
460
+ JOIN source_event ev ON true
461
+ WHERE e.active = true
462
+ AND (ev.tenant_id IS NULL OR e.tenant_id = ev.tenant_id)
463
+ AND (${tenantId}::text IS NULL OR e.tenant_id = ${tenantId})
464
+ AND (${endpointIds}::uuid[] IS NULL OR e.id = ANY(${endpointIds}::uuid[]))
465
+ AND (ev.event_type = ANY(e.events) OR '*' = ANY(e.events))
466
+ ),
467
+ inserted AS (
468
+ INSERT INTO webhook_deliveries (
469
+ event_id,
470
+ endpoint_id,
471
+ status,
472
+ attempts,
473
+ max_attempts,
474
+ next_attempt_at,
475
+ endpoint_url_snapshot,
476
+ signing_secret_snapshot,
477
+ secondary_signing_secret_snapshot
478
+ )
479
+ SELECT
480
+ ${eventId}::uuid,
481
+ e.id,
482
+ 'PENDING',
483
+ 0,
484
+ ${webhook_constants_1.DEFAULT_MAX_RETRIES},
485
+ NOW(),
486
+ e.url,
487
+ e.secret,
488
+ e.secondary_secret
489
+ FROM selected_endpoints e
490
+ RETURNING endpoint_id
491
+ )
492
+ SELECT
493
+ ${eventId} AS "eventId",
494
+ (SELECT COUNT(*) FROM source_event) AS "sourceEventCount",
495
+ COUNT(inserted.endpoint_id) AS "deliveriesCreated",
496
+ COALESCE(array_agg(inserted.endpoint_id::text)
497
+ FILTER (WHERE inserted.endpoint_id IS NOT NULL), ARRAY[]::text[]) AS "endpointIds"
498
+ FROM inserted`;
499
+ if (normalizeBacklogNumber(result?.sourceEventCount ?? 0, 'sourceEventCount') === 0) {
500
+ throw new Error('Webhook event is missing or its payload has been purged');
501
+ }
502
+ return {
503
+ eventId: result.eventId,
504
+ deliveriesCreated: normalizeBacklogNumber(result.deliveriesCreated, 'deliveriesCreated'),
505
+ endpointIds: result.endpointIds ?? [],
506
+ };
507
+ }
508
+ async purgeExpiredData(options, now = new Date()) {
509
+ const eventPayloadRetentionDays = options.eventPayloadRetentionDays ?? null;
510
+ const deliveryResponseBodyRetentionDays = options.deliveryResponseBodyRetentionDays ?? null;
511
+ const attemptResponseBodyRetentionDays = options.attemptResponseBodyRetentionDays ?? null;
512
+ if (eventPayloadRetentionDays == null &&
513
+ deliveryResponseBodyRetentionDays == null &&
514
+ attemptResponseBodyRetentionDays == null) {
515
+ return { eventsPurged: 0, deliveriesPurged: 0, attemptsPurged: 0 };
516
+ }
517
+ const [result] = await this.prisma.$queryRaw `
518
+ WITH event_payloads AS (
519
+ UPDATE webhook_events ev
520
+ SET payload = '{}'::jsonb,
521
+ payload_purged_at = ${now}
522
+ WHERE ${eventPayloadRetentionDays}::int IS NOT NULL
523
+ AND ev.payload_purged_at IS NULL
524
+ AND ev.created_at <= ${now} - (${eventPayloadRetentionDays}::text || ' days')::interval
525
+ AND NOT EXISTS (
526
+ SELECT 1
527
+ FROM webhook_deliveries d
528
+ WHERE d.event_id = ev.id
529
+ AND d.status IN ('PENDING', 'SENDING')
530
+ )
531
+ RETURNING ev.id
532
+ ),
533
+ delivery_bodies AS (
534
+ UPDATE webhook_deliveries d
535
+ SET response_body = NULL
536
+ WHERE ${deliveryResponseBodyRetentionDays}::int IS NOT NULL
537
+ AND d.response_body IS NOT NULL
538
+ AND d.completed_at IS NOT NULL
539
+ AND d.completed_at <= ${now} - (${deliveryResponseBodyRetentionDays}::text || ' days')::interval
540
+ RETURNING d.id
541
+ ),
542
+ attempt_bodies AS (
543
+ UPDATE webhook_delivery_attempts a
544
+ SET response_body = NULL,
545
+ response_body_truncated = FALSE
546
+ WHERE ${attemptResponseBodyRetentionDays}::int IS NOT NULL
547
+ AND a.response_body IS NOT NULL
548
+ AND a.created_at <= ${now} - (${attemptResponseBodyRetentionDays}::text || ' days')::interval
549
+ RETURNING a.id
550
+ )
551
+ SELECT
552
+ (SELECT COUNT(*) FROM event_payloads) AS "eventsPurged",
553
+ (SELECT COUNT(*) FROM delivery_bodies) AS "deliveriesPurged",
554
+ (SELECT COUNT(*) FROM attempt_bodies) AS "attemptsPurged"`;
555
+ return {
556
+ eventsPurged: normalizeBacklogNumber(result?.eventsPurged ?? 0, 'eventsPurged'),
557
+ deliveriesPurged: normalizeBacklogNumber(result?.deliveriesPurged ?? 0, 'deliveriesPurged'),
558
+ attemptsPurged: normalizeBacklogNumber(result?.attemptsPurged ?? 0, 'attemptsPurged'),
559
+ };
560
+ }
367
561
  async createTestDelivery(eventId, endpointId) {
368
562
  await this.prisma.$executeRaw `
369
563
  INSERT INTO webhook_deliveries (
@@ -418,10 +612,25 @@ let PrismaDeliveryRepository = class PrismaDeliveryRepository {
418
612
  ${result.error ?? null}
419
613
  )`;
420
614
  }
615
+ sanitizeDeliveryResult(deliveryId, result) {
616
+ if (result.body == null || !this.redaction?.sanitizeResponseBody) {
617
+ return result;
618
+ }
619
+ const sanitizedBody = this.redaction.sanitizeResponseBody(result.body, {
620
+ deliveryId,
621
+ endpointId: null,
622
+ eventId: null,
623
+ statusCode: result.statusCode ?? null,
624
+ });
625
+ return {
626
+ ...result,
627
+ body: sanitizedBody ?? undefined,
628
+ };
629
+ }
421
630
  };
422
631
  exports.PrismaDeliveryRepository = PrismaDeliveryRepository;
423
632
  exports.PrismaDeliveryRepository = PrismaDeliveryRepository = __decorate([
424
633
  (0, common_1.Injectable)(),
425
- __metadata("design:paramtypes", [Object, Object])
634
+ __metadata("design:paramtypes", [Object, Object, Object])
426
635
  ], PrismaDeliveryRepository);
427
636
  //# 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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"}
@@ -68,7 +68,7 @@ let PrismaEndpointRepository = class PrismaEndpointRepository {
68
68
  ? await this.vault.encrypt(input.secret)
69
69
  : input.secret;
70
70
  const [endpoint] = await this.prisma.$queryRawUnsafe(`INSERT INTO webhook_endpoints (url, secret, events, description, metadata, tenant_id)
71
- VALUES ($1, $2, $3::varchar[], $4, $5::jsonb, $6::uuid)
71
+ VALUES ($1, $2, $3::varchar[], $4, $5::jsonb, $6)
72
72
  RETURNING ${ENDPOINT_COLUMNS_WITH_SECRET}`, input.url, encryptedSecret, input.events, input.description, input.metadata ? JSON.stringify(input.metadata) : null, input.tenantId);
73
73
  return endpoint;
74
74
  }
@@ -1,8 +1,10 @@
1
- import { WebhookEventRepository } from '../ports/webhook-event.repository';
1
+ import { SavedWebhookEvent, WebhookEventRepository } from '../ports/webhook-event.repository';
2
+ import { WebhookPublishOptions } from '../interfaces/webhook-options.interface';
2
3
  export declare class PrismaEventRepository implements WebhookEventRepository {
3
4
  private readonly prisma;
4
5
  constructor(prisma: any);
5
6
  saveEvent(eventType: string, payload: Record<string, unknown>, tenantId: string | null): Promise<string>;
6
7
  saveEventInTransaction(tx: any, eventType: string, payload: Record<string, unknown>, tenantId: string | null): Promise<string>;
8
+ saveEventOnceInTransaction(tx: any, eventType: string, payload: Record<string, unknown>, tenantId: string | null, options: Required<Pick<WebhookPublishOptions, 'idempotencyKey'>> & Pick<WebhookPublishOptions, 'correlationId'>): Promise<SavedWebhookEvent>;
7
9
  }
8
10
  //# sourceMappingURL=prisma-event.repository.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prisma-event.repository.d.ts","sourceRoot":"","sources":["../../src/adapters/prisma-event.repository.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAE3E,qBACa,qBAAsB,YAAW,sBAAsB;IACtD,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,GAAG;IAElC,SAAS,CACb,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,QAAQ,EAAE,MAAM,GAAG,IAAI,GACtB,OAAO,CAAC,MAAM,CAAC;IAQZ,sBAAsB,CAC1B,EAAE,EAAE,GAAG,EACP,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,QAAQ,EAAE,MAAM,GAAG,IAAI,GACtB,OAAO,CAAC,MAAM,CAAC;CAOnB"}
1
+ {"version":3,"file":"prisma-event.repository.d.ts","sourceRoot":"","sources":["../../src/adapters/prisma-event.repository.ts"],"names":[],"mappings":"AACA,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACvB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAEhF,qBACa,qBAAsB,YAAW,sBAAsB;IACtD,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,GAAG;IAElC,SAAS,CACb,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,QAAQ,EAAE,MAAM,GAAG,IAAI,GACtB,OAAO,CAAC,MAAM,CAAC;IAQZ,sBAAsB,CAC1B,EAAE,EAAE,GAAG,EACP,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,QAAQ,EAAE,MAAM,GAAG,IAAI,GACtB,OAAO,CAAC,MAAM,CAAC;IAQZ,0BAA0B,CAC9B,EAAE,EAAE,GAAG,EACP,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,qBAAqB,EAAE,gBAAgB,CAAC,CAAC,GAC9D,IAAI,CAAC,qBAAqB,EAAE,eAAe,CAAC,GAC7C,OAAO,CAAC,iBAAiB,CAAC;CAoC9B"}
@@ -19,17 +19,51 @@ 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}::uuid)
22
+ VALUES (${eventType}, ${JSON.stringify(payload)}::jsonb, ${tenantId})
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}::uuid)
29
+ VALUES (${eventType}, ${JSON.stringify(payload)}::jsonb, ${tenantId})
30
30
  RETURNING id`;
31
31
  return saved.id;
32
32
  }
33
+ async saveEventOnceInTransaction(tx, eventType, payload, tenantId, options) {
34
+ const [saved] = await tx.$queryRaw `
35
+ WITH inserted AS (
36
+ INSERT INTO webhook_events (
37
+ event_type,
38
+ payload,
39
+ tenant_id,
40
+ idempotency_key,
41
+ correlation_id
42
+ )
43
+ VALUES (
44
+ ${eventType},
45
+ ${JSON.stringify(payload)}::jsonb,
46
+ ${tenantId},
47
+ ${options.idempotencyKey},
48
+ ${options.correlationId ?? null}
49
+ )
50
+ ON CONFLICT DO NOTHING
51
+ RETURNING id, TRUE AS created
52
+ )
53
+ SELECT id, created FROM inserted
54
+ UNION ALL
55
+ SELECT id, FALSE AS created
56
+ FROM webhook_events
57
+ WHERE COALESCE(tenant_id, '') = COALESCE(${tenantId}, '')
58
+ AND event_type = ${eventType}
59
+ AND idempotency_key = ${options.idempotencyKey}
60
+ AND NOT EXISTS (SELECT 1 FROM inserted)
61
+ LIMIT 1`;
62
+ if (!saved) {
63
+ throw new Error('Failed to save idempotent webhook event');
64
+ }
65
+ return saved;
66
+ }
33
67
  };
34
68
  exports.PrismaEventRepository = PrismaEventRepository;
35
69
  exports.PrismaEventRepository = PrismaEventRepository = __decorate([
@@ -1 +1 @@
1
- {"version":3,"file":"prisma-event.repository.js","sourceRoot":"","sources":["../../src/adapters/prisma-event.repository.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAIrC,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IACH;IAA7B,YAA6B,MAAW;QAAX,WAAM,GAAN,MAAM,CAAK;IAAG,CAAC;IAE5C,KAAK,CAAC,SAAS,CACb,SAAiB,EACjB,OAAgC,EAChC,QAAuB;QAEvB,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAkB;;gBAEjD,SAAS,KAAK,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,YAAY,QAAQ;mBACtD,CAAC;QAChB,OAAO,KAAK,CAAC,EAAE,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,sBAAsB,CAC1B,EAAO,EACP,SAAiB,EACjB,OAAgC,EAChC,QAAuB;QAEvB,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,EAAE,CAAC,SAAS,CAAkB;;gBAExC,SAAS,KAAK,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,YAAY,QAAQ;mBACtD,CAAC;QAChB,OAAO,KAAK,CAAC,EAAE,CAAC;IAClB,CAAC;CACF,CAAA;AA3BY,sDAAqB;gCAArB,qBAAqB;IADjC,IAAA,mBAAU,GAAE;;GACA,qBAAqB,CA2BjC"}
1
+ {"version":3,"file":"prisma-event.repository.js","sourceRoot":"","sources":["../../src/adapters/prisma-event.repository.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAQrC,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IACH;IAA7B,YAA6B,MAAW;QAAX,WAAM,GAAN,MAAM,CAAK;IAAG,CAAC;IAE5C,KAAK,CAAC,SAAS,CACb,SAAiB,EACjB,OAAgC,EAChC,QAAuB;QAEvB,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAkB;;gBAEjD,SAAS,KAAK,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,YAAY,QAAQ;mBACtD,CAAC;QAChB,OAAO,KAAK,CAAC,EAAE,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,sBAAsB,CAC1B,EAAO,EACP,SAAiB,EACjB,OAAgC,EAChC,QAAuB;QAEvB,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,EAAE,CAAC,SAAS,CAAkB;;gBAExC,SAAS,KAAK,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,YAAY,QAAQ;mBACtD,CAAC;QAChB,OAAO,KAAK,CAAC,EAAE,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,0BAA0B,CAC9B,EAAO,EACP,SAAiB,EACjB,OAAgC,EAChC,QAAuB,EACvB,OAC8C;QAE9C,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,EAAE,CAAC,SAAS,CAAqB;;;;;;;;;;YAU/C,SAAS;YACT,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;YACvB,QAAQ;YACR,OAAO,CAAC,cAAc;YACtB,OAAO,CAAC,aAAa,IAAI,IAAI;;;;;;;;;iDASQ,QAAQ;2BAC9B,SAAS;gCACJ,OAAO,CAAC,cAAc;;cAExC,CAAC;QAEX,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC7D,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;CACF,CAAA;AAvEY,sDAAqB;gCAArB,qBAAqB;IADjC,IAAA,mBAAU,GAAE;;GACA,qBAAqB,CAuEjC"}
package/dist/index.d.ts CHANGED
@@ -6,15 +6,16 @@ export { WebhookDeliveryWorker } from './webhook.delivery-worker';
6
6
  export { WebhookDispatcher } from './webhook.dispatcher';
7
7
  /** @internal Wired automatically by WebhookModule. Exported for advanced testing/custom integration only. */
8
8
  export { WebhookRetryPolicy } from './webhook.retry-policy';
9
- export { WebhookSigner, type SignatureHeaders } from './webhook.signer';
9
+ export { WebhookSigner, type SignatureHeaders, type WebhookVerificationOptions, } from './webhook.signer';
10
10
  /** @internal Wired automatically by WebhookModule. Exported for advanced testing/custom integration only. */
11
11
  export { WebhookCircuitBreaker } from './webhook.circuit-breaker';
12
12
  export { WebhookEvent } from './webhook.event';
13
13
  export { WebhookEndpointAdminService } from './webhook.endpoint-admin.service';
14
14
  export { WebhookDeliveryAdminService } from './webhook.delivery-admin.service';
15
+ export { WebhookRetentionAdminService } from './webhook.retention-admin.service';
15
16
  /** @deprecated since v0.2.0. Will be removed in v1.0.0. Use {@link WebhookEndpointAdminService} and {@link WebhookDeliveryAdminService}. */
16
17
  export { WebhookAdminService } from './webhook.admin.service';
17
- export type { WebhookEventRepository } from './ports/webhook-event.repository';
18
+ export type { WebhookEventRepository, SavedWebhookEvent, } from './ports/webhook-event.repository';
18
19
  export type { WebhookEndpointRepository, ResolvedCreateEndpointInput, ResolvedRotateEndpointSecretInput, } from './ports/webhook-endpoint.repository';
19
20
  export type { WebhookDeliveryRepository, ClaimedDelivery, DeliveryBacklogSummary, PendingDelivery, WebhookTransaction, } from './ports/webhook-delivery.repository';
20
21
  export type { WebhookHttpClient } from './ports/webhook-http-client';
@@ -24,9 +25,9 @@ export { PrismaEndpointRepository } from './adapters/prisma-endpoint.repository'
24
25
  export { PrismaDeliveryRepository } from './adapters/prisma-delivery.repository';
25
26
  export { FetchHttpClient } from './adapters/fetch-http-client';
26
27
  export { PlaintextSecretVault } from './adapters/plaintext-secret-vault';
27
- export type { WebhookModuleOptions, WebhookModuleAsyncOptions, WebhookOptionsFactory, DeliveryOptions, CircuitBreakerOptions, PollingOptions, WebhookPollContext, WebhookPollResult, WebhookDeliveryProcessingStatus, WebhookDeliveryProcessingResult, WebhookWorkerObserver, DeliveryFailedContext, DeliveryFailureKind, DeliveryRetryScheduledContext, EndpointDisabledContext, EndpointDegradedContext, } from './interfaces/webhook-options.interface';
28
+ export type { WebhookModuleOptions, WebhookModuleAsyncOptions, WebhookOptionsFactory, WebhookPublishOptions, WebhookRetentionOptions, WebhookRedactionOptions, DeliveryOptions, CircuitBreakerOptions, PollingOptions, WebhookPollContext, WebhookPollResult, WebhookDeliveryProcessingStatus, WebhookDeliveryProcessingResult, WebhookWorkerObserver, DeliveryFailedContext, DeliveryFailureKind, DeliveryRetryScheduledContext, EndpointDisabledContext, EndpointDegradedContext, } from './interfaces/webhook-options.interface';
28
29
  export type { EndpointRecord, EndpointRecordWithSecret, CreateEndpointDto, UpdateEndpointDto, RotateEndpointSecretDto, } from './interfaces/webhook-endpoint.interface';
29
- export type { DeliveryStatus, DeliveryAttemptStatus, DeliveryRecord, DeliveryAttemptRecord, EventRecord, DeliveryResult, DeliveryLogFilters, } from './interfaces/webhook-delivery.interface';
30
+ export type { DeliveryStatus, DeliveryAttemptStatus, DeliveryRecord, DeliveryAttemptRecord, EventRecord, DeliveryResult, DeliveryLogFilters, RetryDeliveryOptions, RetryFailedDeliveriesFilters, RetryFailedDeliveriesResult, ReplayEventOptions, ReplayEventResult, WebhookRetentionPurgeResult, } from './interfaces/webhook-delivery.interface';
30
31
  export { WEBHOOK_MODULE_OPTIONS, WEBHOOK_EVENT_REPOSITORY, WEBHOOK_ENDPOINT_REPOSITORY, WEBHOOK_DELIVERY_REPOSITORY, WEBHOOK_HTTP_CLIENT, WEBHOOK_SECRET_VAULT, DEFAULT_BACKOFF_SCHEDULE, DEFAULT_DELIVERY_TIMEOUT, DEFAULT_MAX_RETRIES, DEFAULT_POLLING_INTERVAL, DEFAULT_POLLING_BATCH_SIZE, DEFAULT_CIRCUIT_BREAKER_THRESHOLD, DEFAULT_CIRCUIT_BREAKER_COOLDOWN_MINUTES, ENDPOINT_DISABLED_REASON_CONSECUTIVE_FAILURES_EXCEEDED, DEFAULT_STALE_SENDING_MINUTES, } from './webhook.constants';
31
32
  export type { EndpointDisabledReason } from './webhook.constants';
32
33
  export { validateWebhookUrl, resolveAndValidateHost, WebhookUrlValidationError, type WebhookUrlValidationReason, } from './webhook.url-validator';
@@ -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,6GAA6G;AAC7G,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,6GAA6G;AAC7G,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,6GAA6G;AAC7G,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACxE,6GAA6G;AAC7G,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,4IAA4I;AAC5I,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAG9D,YAAY,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAC/E,YAAY,EACV,yBAAyB,EACzB,2BAA2B,EAC3B,iCAAiC,GAClC,MAAM,qCAAqC,CAAC;AAC7C,YAAY,EACV,yBAAyB,EACzB,eAAe,EACf,sBAAsB,EACtB,eAAe,EACf,kBAAkB,GACnB,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,EACd,kBAAkB,EAClB,iBAAiB,EACjB,+BAA+B,EAC/B,+BAA+B,EAC/B,qBAAqB,EACrB,qBAAqB,EACrB,mBAAmB,EACnB,6BAA6B,EAC7B,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,wCAAwC,CAAC;AAGhD,YAAY,EACV,cAAc,EACd,wBAAwB,EACxB,iBAAiB,EACjB,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,yCAAyC,CAAC;AAEjD,YAAY,EACV,cAAc,EACd,qBAAqB,EACrB,cAAc,EACd,qBAAqB,EACrB,WAAW,EACX,cAAc,EACd,kBAAkB,GACnB,MAAM,yCAAyC,CAAC;AAGjD,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,2BAA2B,EAC3B,2BAA2B,EAC3B,mBAAmB,EACnB,oBAAoB,EACpB,wBAAwB,EACxB,wBAAwB,EACxB,mBAAmB,EACnB,wBAAwB,EACxB,0BAA0B,EAC1B,iCAAiC,EACjC,wCAAwC,EACxC,sDAAsD,EACtD,6BAA6B,GAC9B,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAGlE,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EACtB,yBAAyB,EACzB,KAAK,0BAA0B,GAChC,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.WebhookUrlValidationError = exports.resolveAndValidateHost = exports.validateWebhookUrl = exports.DEFAULT_STALE_SENDING_MINUTES = exports.ENDPOINT_DISABLED_REASON_CONSECUTIVE_FAILURES_EXCEEDED = 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_SECRET_VAULT = 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;
3
+ exports.WebhookUrlValidationError = exports.resolveAndValidateHost = exports.validateWebhookUrl = exports.DEFAULT_STALE_SENDING_MINUTES = exports.ENDPOINT_DISABLED_REASON_CONSECUTIVE_FAILURES_EXCEEDED = 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_SECRET_VAULT = 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.WebhookRetentionAdminService = 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; } });
@@ -28,6 +28,8 @@ var webhook_endpoint_admin_service_1 = require("./webhook.endpoint-admin.service
28
28
  Object.defineProperty(exports, "WebhookEndpointAdminService", { enumerable: true, get: function () { return webhook_endpoint_admin_service_1.WebhookEndpointAdminService; } });
29
29
  var webhook_delivery_admin_service_1 = require("./webhook.delivery-admin.service");
30
30
  Object.defineProperty(exports, "WebhookDeliveryAdminService", { enumerable: true, get: function () { return webhook_delivery_admin_service_1.WebhookDeliveryAdminService; } });
31
+ var webhook_retention_admin_service_1 = require("./webhook.retention-admin.service");
32
+ Object.defineProperty(exports, "WebhookRetentionAdminService", { enumerable: true, get: function () { return webhook_retention_admin_service_1.WebhookRetentionAdminService; } });
31
33
  /** @deprecated since v0.2.0. Will be removed in v1.0.0. Use {@link WebhookEndpointAdminService} and {@link WebhookDeliveryAdminService}. */
32
34
  var webhook_admin_service_1 = require("./webhook.admin.service");
33
35
  Object.defineProperty(exports, "WebhookAdminService", { enumerable: true, get: function () { return webhook_admin_service_1.WebhookAdminService; } });
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,6GAA6G;AAC7G,qEAAkE;AAAzD,gIAAA,qBAAqB,OAAA;AAC9B,6GAA6G;AAC7G,2DAAyD;AAAhD,uHAAA,iBAAiB,OAAA;AAC1B,6GAA6G;AAC7G,+DAA4D;AAAnD,0HAAA,kBAAkB,OAAA;AAC3B,mDAAwE;AAA/D,+GAAA,aAAa,OAAA;AACtB,6GAA6G;AAC7G,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,4IAA4I;AAC5I,iEAA8D;AAArD,4HAAA,mBAAmB,OAAA;AAmB5B,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;AAyC7B,qBAAqB;AACrB,yDAgB6B;AAf3B,2HAAA,sBAAsB,OAAA;AACtB,6HAAA,wBAAwB,OAAA;AACxB,gIAAA,2BAA2B,OAAA;AAC3B,gIAAA,2BAA2B,OAAA;AAC3B,wHAAA,mBAAmB,OAAA;AACnB,yHAAA,oBAAoB,OAAA;AACpB,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,2JAAA,sDAAsD,OAAA;AACtD,kIAAA,6BAA6B,OAAA;AAI/B,iBAAiB;AACjB,iEAKiC;AAJ/B,2HAAA,kBAAkB,OAAA;AAClB,+HAAA,sBAAsB,OAAA;AACtB,kIAAA,yBAAyB,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,6GAA6G;AAC7G,qEAAkE;AAAzD,gIAAA,qBAAqB,OAAA;AAC9B,6GAA6G;AAC7G,2DAAyD;AAAhD,uHAAA,iBAAiB,OAAA;AAC1B,6GAA6G;AAC7G,+DAA4D;AAAnD,0HAAA,kBAAkB,OAAA;AAC3B,mDAI0B;AAHxB,+GAAA,aAAa,OAAA;AAIf,6GAA6G;AAC7G,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,qFAAiF;AAAxE,+IAAA,4BAA4B,OAAA;AACrC,4IAA4I;AAC5I,iEAA8D;AAArD,4HAAA,mBAAmB,OAAA;AAsB5B,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;AAkD7B,qBAAqB;AACrB,yDAgB6B;AAf3B,2HAAA,sBAAsB,OAAA;AACtB,6HAAA,wBAAwB,OAAA;AACxB,gIAAA,2BAA2B,OAAA;AAC3B,gIAAA,2BAA2B,OAAA;AAC3B,wHAAA,mBAAmB,OAAA;AACnB,yHAAA,oBAAoB,OAAA;AACpB,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,2JAAA,sDAAsD,OAAA;AACtD,kIAAA,6BAA6B,OAAA;AAI/B,iBAAiB;AACjB,iEAKiC;AAJ/B,2HAAA,kBAAkB,OAAA;AAClB,+HAAA,sBAAsB,OAAA;AACtB,kIAAA,yBAAyB,OAAA"}
@@ -53,4 +53,30 @@ export interface DeliveryLogFilters {
53
53
  limit?: number;
54
54
  offset?: number;
55
55
  }
56
+ export interface RetryDeliveryOptions {
57
+ reason?: string;
58
+ }
59
+ export interface RetryFailedDeliveriesFilters extends DeliveryLogFilters {
60
+ endpointId?: string;
61
+ }
62
+ export interface RetryFailedDeliveriesResult {
63
+ matched: number;
64
+ retried: number;
65
+ skipped: number;
66
+ }
67
+ export interface ReplayEventOptions {
68
+ endpointIds?: string[];
69
+ tenantId?: string;
70
+ reason?: string;
71
+ }
72
+ export interface ReplayEventResult {
73
+ eventId: string;
74
+ deliveriesCreated: number;
75
+ endpointIds: string[];
76
+ }
77
+ export interface WebhookRetentionPurgeResult {
78
+ eventsPurged: number;
79
+ deliveriesPurged: number;
80
+ attemptsPurged: number;
81
+ }
56
82
  //# sourceMappingURL=webhook-delivery.interface.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"webhook-delivery.interface.d.ts","sourceRoot":"","sources":["../../src/interfaces/webhook-delivery.interface.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;AACvE,MAAM,MAAM,qBAAqB,GAAG,OAAO,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;AAEvE,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,uFAAuF;IACvF,cAAc,EAAE,MAAM,CAAC;IACvB,kEAAkE;IAClE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,cAAc,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,IAAI,GAAG,IAAI,CAAC;IAC3B,aAAa,EAAE,IAAI,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,IAAI,GAAG,IAAI,CAAC;IACzB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,qBAAqB,CAAC;IAC9B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,IAAI,CAAC;IACb,KAAK,CAAC,EAAE,IAAI,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
1
+ {"version":3,"file":"webhook-delivery.interface.d.ts","sourceRoot":"","sources":["../../src/interfaces/webhook-delivery.interface.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,29 @@ export interface DeliveryOptions {
13
13
  backoff?: 'exponential';
14
14
  jitter?: boolean;
15
15
  }
16
+ export interface WebhookPublishOptions {
17
+ /** Application-provided key used to deduplicate publish attempts. */
18
+ idempotencyKey?: string;
19
+ /** Optional caller correlation ID stored with the event for diagnostics. */
20
+ correlationId?: string;
21
+ }
22
+ export interface WebhookRetentionOptions {
23
+ eventPayloadRetentionDays?: number;
24
+ deliveryResponseBodyRetentionDays?: number;
25
+ attemptResponseBodyRetentionDays?: number;
26
+ }
27
+ export interface WebhookRedactionOptions {
28
+ sanitizePayload?: (payload: Record<string, unknown>, context: {
29
+ eventType: string;
30
+ tenantId: string | null;
31
+ }) => Record<string, unknown>;
32
+ sanitizeResponseBody?: (body: string, context: {
33
+ deliveryId: string;
34
+ endpointId: string | null;
35
+ eventId: string | null;
36
+ statusCode: number | null;
37
+ }) => string | null;
38
+ }
16
39
  export interface CircuitBreakerOptions {
17
40
  failureThreshold?: number;
18
41
  degradedThreshold?: number;
@@ -158,6 +181,10 @@ export interface WebhookModuleOptions<TPrisma = unknown> {
158
181
  httpClient?: WebhookHttpClient;
159
182
  /** Custom secret vault for encrypting/decrypting endpoint signing secrets at rest. Default: PlaintextSecretVault (no-op). */
160
183
  secretVault?: WebhookSecretVault;
184
+ /** Optional retention purge policy. Disabled when omitted. */
185
+ retention?: WebhookRetentionOptions;
186
+ /** Optional minimization hooks applied before webhook data is persisted. */
187
+ redaction?: WebhookRedactionOptions;
161
188
  /** Called when a delivery exhausts retry attempts or receives a non-retryable response. Fire-and-forget — errors are logged, not propagated. */
162
189
  onDeliveryFailed?: (context: DeliveryFailedContext) => void | Promise<void>;
163
190
  /** Called after a retriable failed attempt is persisted with a next attempt time. Fire-and-forget — errors are logged, not propagated. */