@nestarc/webhook 0.12.0 → 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.
- package/README.md +97 -0
- package/dist/adapters/fetch-http-client.d.ts +2 -2
- package/dist/adapters/fetch-http-client.d.ts.map +1 -1
- package/dist/adapters/fetch-http-client.js +165 -29
- package/dist/adapters/fetch-http-client.js.map +1 -1
- package/dist/adapters/prisma-delivery.repository.d.ts +9 -3
- package/dist/adapters/prisma-delivery.repository.d.ts.map +1 -1
- package/dist/adapters/prisma-delivery.repository.js +228 -19
- package/dist/adapters/prisma-delivery.repository.js.map +1 -1
- package/dist/adapters/prisma-endpoint.repository.d.ts.map +1 -1
- package/dist/adapters/prisma-endpoint.repository.js +6 -2
- package/dist/adapters/prisma-endpoint.repository.js.map +1 -1
- package/dist/adapters/prisma-event.repository.d.ts +3 -1
- package/dist/adapters/prisma-event.repository.d.ts.map +1 -1
- package/dist/adapters/prisma-event.repository.js +36 -2
- package/dist/adapters/prisma-event.repository.js.map +1 -1
- package/dist/index.d.ts +5 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/interfaces/webhook-delivery.interface.d.ts +26 -0
- package/dist/interfaces/webhook-delivery.interface.d.ts.map +1 -1
- package/dist/interfaces/webhook-options.interface.d.ts +27 -0
- package/dist/interfaces/webhook-options.interface.d.ts.map +1 -1
- package/dist/ports/webhook-delivery.repository.d.ts +6 -2
- package/dist/ports/webhook-delivery.repository.d.ts.map +1 -1
- package/dist/ports/webhook-event.repository.d.ts +6 -0
- package/dist/ports/webhook-event.repository.d.ts.map +1 -1
- package/dist/ports/webhook-http-client.d.ts +8 -1
- package/dist/ports/webhook-http-client.d.ts.map +1 -1
- package/dist/webhook.admin.service.d.ts +4 -2
- package/dist/webhook.admin.service.d.ts.map +1 -1
- package/dist/webhook.admin.service.js +8 -2
- package/dist/webhook.admin.service.js.map +1 -1
- package/dist/webhook.delivery-admin.service.d.ts +4 -2
- package/dist/webhook.delivery-admin.service.d.ts.map +1 -1
- package/dist/webhook.delivery-admin.service.js +14 -2
- package/dist/webhook.delivery-admin.service.js.map +1 -1
- package/dist/webhook.dispatcher.d.ts.map +1 -1
- package/dist/webhook.dispatcher.js +5 -2
- package/dist/webhook.dispatcher.js.map +1 -1
- package/dist/webhook.module.d.ts.map +1 -1
- package/dist/webhook.module.js +6 -2
- package/dist/webhook.module.js.map +1 -1
- package/dist/webhook.retention-admin.service.d.ts +10 -0
- package/dist/webhook.retention-admin.service.d.ts.map +1 -0
- package/dist/webhook.retention-admin.service.js +50 -0
- package/dist/webhook.retention-admin.service.js.map +1 -0
- package/dist/webhook.service.d.ts +7 -4
- package/dist/webhook.service.d.ts.map +1 -1
- package/dist/webhook.service.js +40 -10
- package/dist/webhook.service.js.map +1 -1
- package/dist/webhook.signer.d.ts +5 -0
- package/dist/webhook.signer.d.ts.map +1 -1
- package/dist/webhook.signer.js +14 -0
- package/dist/webhook.signer.js.map +1 -1
- package/dist/webhook.url-validator.d.ts +1 -1
- package/dist/webhook.url-validator.d.ts.map +1 -1
- package/dist/webhook.url-validator.js +145 -51
- package/dist/webhook.url-validator.js.map +1 -1
- package/package.json +9 -3
- package/src/sql/create-webhook-tables.sql +11 -5
- package/src/sql/migrations/v0.13.0.sql +11 -0
|
@@ -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. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhook-options.interface.d.ts","sourceRoot":"","sources":["../../src/interfaces/webhook-options.interface.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"webhook-options.interface.d.ts","sourceRoot":"","sources":["../../src/interfaces/webhook-options.interface.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { DeliveryAttemptRecord, DeliveryLogFilters, DeliveryRecord, DeliveryResult } from '../interfaces/webhook-delivery.interface';
|
|
1
|
+
import { DeliveryAttemptRecord, DeliveryLogFilters, DeliveryRecord, DeliveryResult, ReplayEventOptions, ReplayEventResult, RetryDeliveryOptions, RetryFailedDeliveriesFilters, RetryFailedDeliveriesResult, WebhookRetentionPurgeResult } from '../interfaces/webhook-delivery.interface';
|
|
2
|
+
import { WebhookRetentionOptions } from '../interfaces/webhook-options.interface';
|
|
2
3
|
declare const webhookTransactionBrand: unique symbol;
|
|
3
4
|
/** Opaque transaction token created by repository adapters. */
|
|
4
5
|
export type WebhookTransaction = {
|
|
@@ -48,7 +49,10 @@ export interface WebhookDeliveryRepository {
|
|
|
48
49
|
getDeliveryLogs(endpointId: string, filters?: DeliveryLogFilters): Promise<DeliveryRecord[]>;
|
|
49
50
|
/** @returns attempts sorted by attemptNumber ASC. */
|
|
50
51
|
getDeliveryAttempts(deliveryId: string): Promise<DeliveryAttemptRecord[]>;
|
|
51
|
-
retryDelivery(deliveryId: string): Promise<boolean>;
|
|
52
|
+
retryDelivery(deliveryId: string, options?: RetryDeliveryOptions): Promise<boolean>;
|
|
53
|
+
retryFailedDeliveries?(filters: RetryFailedDeliveriesFilters, options?: RetryDeliveryOptions): Promise<RetryFailedDeliveriesResult>;
|
|
54
|
+
replayEvent?(eventId: string, options?: ReplayEventOptions): Promise<ReplayEventResult>;
|
|
55
|
+
purgeExpiredData?(options: WebhookRetentionOptions, now?: Date): Promise<WebhookRetentionPurgeResult>;
|
|
52
56
|
createTestDelivery(eventId: string, endpointId: string): Promise<void>;
|
|
53
57
|
}
|
|
54
58
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhook-delivery.repository.d.ts","sourceRoot":"","sources":["../../src/ports/webhook-delivery.repository.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,cAAc,EACd,cAAc,
|
|
1
|
+
{"version":3,"file":"webhook-delivery.repository.d.ts","sourceRoot":"","sources":["../../src/ports/webhook-delivery.repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
import { WebhookTransaction } from './webhook-delivery.repository';
|
|
2
|
+
import { WebhookPublishOptions } from '../interfaces/webhook-options.interface';
|
|
3
|
+
export interface SavedWebhookEvent {
|
|
4
|
+
id: string;
|
|
5
|
+
created: boolean;
|
|
6
|
+
}
|
|
2
7
|
export interface WebhookEventRepository {
|
|
3
8
|
saveEvent(eventType: string, payload: Record<string, unknown>, tenantId: string | null): Promise<string>;
|
|
4
9
|
/** Use only with a transaction object received from WebhookDeliveryRepository.runInTransaction(). */
|
|
5
10
|
saveEventInTransaction(tx: WebhookTransaction, eventType: string, payload: Record<string, unknown>, tenantId: string | null): Promise<string>;
|
|
11
|
+
saveEventOnceInTransaction?(tx: WebhookTransaction, eventType: string, payload: Record<string, unknown>, tenantId: string | null, options: Required<Pick<WebhookPublishOptions, 'idempotencyKey'>> & Pick<WebhookPublishOptions, 'correlationId'>): Promise<SavedWebhookEvent>;
|
|
6
12
|
}
|
|
7
13
|
//# sourceMappingURL=webhook-event.repository.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhook-event.repository.d.ts","sourceRoot":"","sources":["../../src/ports/webhook-event.repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"webhook-event.repository.d.ts","sourceRoot":"","sources":["../../src/ports/webhook-event.repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAEhF,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,sBAAsB;IACrC,SAAS,CACP,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,QAAQ,EAAE,MAAM,GAAG,IAAI,GACtB,OAAO,CAAC,MAAM,CAAC,CAAC;IAEnB,qGAAqG;IACrG,sBAAsB,CACpB,EAAE,EAAE,kBAAkB,EACtB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,QAAQ,EAAE,MAAM,GAAG,IAAI,GACtB,OAAO,CAAC,MAAM,CAAC,CAAC;IAEnB,0BAA0B,CAAC,CACzB,EAAE,EAAE,kBAAkB,EACtB,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,CAAC;CAC/B"}
|
|
@@ -1,9 +1,16 @@
|
|
|
1
1
|
import { DeliveryResult } from '../interfaces/webhook-delivery.interface';
|
|
2
|
+
export interface WebhookHttpClientRequestOptions {
|
|
3
|
+
/**
|
|
4
|
+
* IP addresses already validated by the dispatcher. Built-in clients should
|
|
5
|
+
* connect only to these addresses while preserving the original URL host.
|
|
6
|
+
*/
|
|
7
|
+
resolvedIpAddresses?: string[];
|
|
8
|
+
}
|
|
2
9
|
export interface WebhookHttpClient {
|
|
3
10
|
/**
|
|
4
11
|
* @param timeout milliseconds before the request is aborted.
|
|
5
12
|
* @returns DeliveryResult with success false on timeout/network failure; implementations should not throw for HTTP failures.
|
|
6
13
|
*/
|
|
7
|
-
post(url: string, headers: Record<string, string>, body: string, timeout: number): Promise<DeliveryResult>;
|
|
14
|
+
post(url: string, headers: Record<string, string>, body: string, timeout: number, options?: WebhookHttpClientRequestOptions): Promise<DeliveryResult>;
|
|
8
15
|
}
|
|
9
16
|
//# sourceMappingURL=webhook-http-client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhook-http-client.d.ts","sourceRoot":"","sources":["../../src/ports/webhook-http-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAE1E,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,IAAI,CACF,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"webhook-http-client.d.ts","sourceRoot":"","sources":["../../src/ports/webhook-http-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAE1E,MAAM,WAAW,+BAA+B;IAC9C;;;OAGG;IACH,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,IAAI,CACF,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,+BAA+B,GACxC,OAAO,CAAC,cAAc,CAAC,CAAC;CAC5B"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { WebhookEndpointAdminService } from './webhook.endpoint-admin.service';
|
|
2
2
|
import { WebhookDeliveryAdminService } from './webhook.delivery-admin.service';
|
|
3
3
|
import { CreateEndpointDto, EndpointRecord, EndpointRecordWithSecret, RotateEndpointSecretDto, UpdateEndpointDto } from './interfaces/webhook-endpoint.interface';
|
|
4
|
-
import { DeliveryAttemptRecord, DeliveryLogFilters, DeliveryRecord } from './interfaces/webhook-delivery.interface';
|
|
4
|
+
import { DeliveryAttemptRecord, DeliveryLogFilters, DeliveryRecord, ReplayEventOptions, ReplayEventResult, RetryDeliveryOptions, RetryFailedDeliveriesFilters, RetryFailedDeliveriesResult } from './interfaces/webhook-delivery.interface';
|
|
5
5
|
/**
|
|
6
6
|
* @deprecated since v0.2.0. Will be removed in v1.0.0.
|
|
7
7
|
* Use WebhookEndpointAdminService and WebhookDeliveryAdminService directly.
|
|
@@ -18,7 +18,9 @@ export declare class WebhookAdminService {
|
|
|
18
18
|
deleteEndpoint(endpointId: string): Promise<boolean>;
|
|
19
19
|
getDeliveryLogs(endpointId: string, filters?: DeliveryLogFilters): Promise<DeliveryRecord[]>;
|
|
20
20
|
getDeliveryAttempts(deliveryId: string): Promise<DeliveryAttemptRecord[]>;
|
|
21
|
-
retryDelivery(deliveryId: string): Promise<boolean>;
|
|
21
|
+
retryDelivery(deliveryId: string, options?: RetryDeliveryOptions): Promise<boolean>;
|
|
22
|
+
retryFailedDeliveries(filters: RetryFailedDeliveriesFilters, options?: RetryDeliveryOptions): Promise<RetryFailedDeliveriesResult>;
|
|
23
|
+
replayEvent(eventId: string, options?: ReplayEventOptions): Promise<ReplayEventResult>;
|
|
22
24
|
sendTestEvent(endpointId: string): Promise<string | null>;
|
|
23
25
|
}
|
|
24
26
|
//# sourceMappingURL=webhook.admin.service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhook.admin.service.d.ts","sourceRoot":"","sources":["../src/webhook.admin.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,wBAAwB,EACxB,uBAAuB,EACvB,iBAAiB,EAClB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,cAAc,
|
|
1
|
+
{"version":3,"file":"webhook.admin.service.d.ts","sourceRoot":"","sources":["../src/webhook.admin.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,wBAAwB,EACxB,uBAAuB,EACvB,iBAAiB,EAClB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,4BAA4B,EAC5B,2BAA2B,EAC5B,MAAM,yCAAyC,CAAC;AAEjD;;;GAGG;AACH,qBACa,mBAAmB;IAE5B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,UAAU;gBADV,SAAS,EAAE,2BAA2B,EACtC,UAAU,EAAE,2BAA2B;IAGpD,cAAc,CAAC,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAIzE,aAAa,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAI3D,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAI/D,cAAc,CAClB,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,iBAAiB,GACrB,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAI3B,YAAY,CAChB,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,uBAAuB,GAC3B,OAAO,CAAC,wBAAwB,GAAG,IAAI,CAAC;IAIrC,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIpD,eAAe,CACnB,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,cAAc,EAAE,CAAC;IAItB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;IAIzE,aAAa,CACjB,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,OAAO,CAAC;IAIb,qBAAqB,CACzB,OAAO,EAAE,4BAA4B,EACrC,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,2BAA2B,CAAC;IAIjC,WAAW,CACf,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,iBAAiB,CAAC;IAIvB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAGhE"}
|
|
@@ -48,8 +48,14 @@ let WebhookAdminService = class WebhookAdminService {
|
|
|
48
48
|
async getDeliveryAttempts(deliveryId) {
|
|
49
49
|
return this.deliveries.getDeliveryAttempts(deliveryId);
|
|
50
50
|
}
|
|
51
|
-
async retryDelivery(deliveryId) {
|
|
52
|
-
return this.deliveries.retryDelivery(deliveryId);
|
|
51
|
+
async retryDelivery(deliveryId, options) {
|
|
52
|
+
return this.deliveries.retryDelivery(deliveryId, options);
|
|
53
|
+
}
|
|
54
|
+
async retryFailedDeliveries(filters, options) {
|
|
55
|
+
return this.deliveries.retryFailedDeliveries(filters, options);
|
|
56
|
+
}
|
|
57
|
+
async replayEvent(eventId, options) {
|
|
58
|
+
return this.deliveries.replayEvent(eventId, options);
|
|
53
59
|
}
|
|
54
60
|
async sendTestEvent(endpointId) {
|
|
55
61
|
return this.endpoints.sendTestEvent(endpointId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhook.admin.service.js","sourceRoot":"","sources":["../src/webhook.admin.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,qFAA+E;AAC/E,qFAA+E;
|
|
1
|
+
{"version":3,"file":"webhook.admin.service.js","sourceRoot":"","sources":["../src/webhook.admin.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,qFAA+E;AAC/E,qFAA+E;AAmB/E;;;GAGG;AAEI,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;IAEX;IACA;IAFnB,YACmB,SAAsC,EACtC,UAAuC;QADvC,cAAS,GAAT,SAAS,CAA6B;QACtC,eAAU,GAAV,UAAU,CAA6B;IACvD,CAAC;IAEJ,KAAK,CAAC,cAAc,CAAC,GAAsB;QACzC,OAAO,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,QAAiB;QACnC,OAAO,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,UAAkB;QAClC,OAAO,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,UAAkB,EAClB,GAAsB;QAEtB,OAAO,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IACxD,CAAC;IAED,KAAK,CAAC,YAAY,CAChB,UAAkB,EAClB,GAA4B;QAE5B,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IACtD,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,UAAkB;QACrC,OAAO,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,UAAkB,EAClB,OAA4B;QAE5B,OAAO,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,UAAkB;QAC1C,OAAO,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,aAAa,CACjB,UAAkB,EAClB,OAA8B;QAE9B,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,qBAAqB,CACzB,OAAqC,EACrC,OAA8B;QAE9B,OAAO,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACjE,CAAC;IAED,KAAK,CAAC,WAAW,CACf,OAAe,EACf,OAA4B;QAE5B,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACvD,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,UAAkB;QACpC,OAAO,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IAClD,CAAC;CACF,CAAA;AAvEY,kDAAmB;8BAAnB,mBAAmB;IAD/B,IAAA,mBAAU,GAAE;qCAGmB,4DAA2B;QAC1B,4DAA2B;GAH/C,mBAAmB,CAuE/B"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { WebhookDeliveryRepository } from './ports/webhook-delivery.repository';
|
|
2
|
-
import { DeliveryAttemptRecord, DeliveryLogFilters, DeliveryRecord } from './interfaces/webhook-delivery.interface';
|
|
2
|
+
import { DeliveryAttemptRecord, DeliveryLogFilters, DeliveryRecord, ReplayEventOptions, ReplayEventResult, RetryDeliveryOptions, RetryFailedDeliveriesFilters, RetryFailedDeliveriesResult } from './interfaces/webhook-delivery.interface';
|
|
3
3
|
export declare class WebhookDeliveryAdminService {
|
|
4
4
|
private readonly deliveryRepo;
|
|
5
5
|
constructor(deliveryRepo: WebhookDeliveryRepository);
|
|
6
6
|
getDeliveryLogs(endpointId: string, filters?: DeliveryLogFilters): Promise<DeliveryRecord[]>;
|
|
7
7
|
getDeliveryAttempts(deliveryId: string): Promise<DeliveryAttemptRecord[]>;
|
|
8
|
-
retryDelivery(deliveryId: string): Promise<boolean>;
|
|
8
|
+
retryDelivery(deliveryId: string, options?: RetryDeliveryOptions): Promise<boolean>;
|
|
9
|
+
retryFailedDeliveries(filters: RetryFailedDeliveriesFilters, options?: RetryDeliveryOptions): Promise<RetryFailedDeliveriesResult>;
|
|
10
|
+
replayEvent(eventId: string, options?: ReplayEventOptions): Promise<ReplayEventResult>;
|
|
9
11
|
}
|
|
10
12
|
//# sourceMappingURL=webhook.delivery-admin.service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhook.delivery-admin.service.d.ts","sourceRoot":"","sources":["../src/webhook.delivery-admin.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AAChF,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,cAAc,
|
|
1
|
+
{"version":3,"file":"webhook.delivery-admin.service.d.ts","sourceRoot":"","sources":["../src/webhook.delivery-admin.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AAChF,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,4BAA4B,EAC5B,2BAA2B,EAC5B,MAAM,yCAAyC,CAAC;AAEjD,qBACa,2BAA2B;IAGpC,OAAO,CAAC,QAAQ,CAAC,YAAY;gBAAZ,YAAY,EAAE,yBAAyB;IAGpD,eAAe,CACnB,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,cAAc,EAAE,CAAC;IAItB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;IAIzE,aAAa,CACjB,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,OAAO,CAAC;IAIb,qBAAqB,CACzB,OAAO,EAAE,4BAA4B,EACrC,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,2BAA2B,CAAC;IAUjC,WAAW,CACf,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,iBAAiB,CAAC;CAO9B"}
|
|
@@ -26,8 +26,20 @@ let WebhookDeliveryAdminService = class WebhookDeliveryAdminService {
|
|
|
26
26
|
async getDeliveryAttempts(deliveryId) {
|
|
27
27
|
return this.deliveryRepo.getDeliveryAttempts(deliveryId);
|
|
28
28
|
}
|
|
29
|
-
async retryDelivery(deliveryId) {
|
|
30
|
-
return this.deliveryRepo.retryDelivery(deliveryId);
|
|
29
|
+
async retryDelivery(deliveryId, options) {
|
|
30
|
+
return this.deliveryRepo.retryDelivery(deliveryId, options);
|
|
31
|
+
}
|
|
32
|
+
async retryFailedDeliveries(filters, options) {
|
|
33
|
+
if (!this.deliveryRepo.retryFailedDeliveries) {
|
|
34
|
+
throw new Error('WebhookDeliveryRepository does not support bulk failed delivery retry');
|
|
35
|
+
}
|
|
36
|
+
return this.deliveryRepo.retryFailedDeliveries(filters, options);
|
|
37
|
+
}
|
|
38
|
+
async replayEvent(eventId, options) {
|
|
39
|
+
if (!this.deliveryRepo.replayEvent) {
|
|
40
|
+
throw new Error('WebhookDeliveryRepository does not support event replay');
|
|
41
|
+
}
|
|
42
|
+
return this.deliveryRepo.replayEvent(eventId, options);
|
|
31
43
|
}
|
|
32
44
|
};
|
|
33
45
|
exports.WebhookDeliveryAdminService = WebhookDeliveryAdminService;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhook.delivery-admin.service.js","sourceRoot":"","sources":["../src/webhook.delivery-admin.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAoD;AACpD,2DAAkE;
|
|
1
|
+
{"version":3,"file":"webhook.delivery-admin.service.js","sourceRoot":"","sources":["../src/webhook.delivery-admin.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAoD;AACpD,2DAAkE;AAc3D,IAAM,2BAA2B,GAAjC,MAAM,2BAA2B;IAGnB;IAFnB,YAEmB,YAAuC;QAAvC,iBAAY,GAAZ,YAAY,CAA2B;IACvD,CAAC;IAEJ,KAAK,CAAC,eAAe,CACnB,UAAkB,EAClB,OAA4B;QAE5B,OAAO,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,UAAkB;QAC1C,OAAO,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;IAC3D,CAAC;IAED,KAAK,CAAC,aAAa,CACjB,UAAkB,EAClB,OAA8B;QAE9B,OAAO,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,qBAAqB,CACzB,OAAqC,EACrC,OAA8B;QAE9B,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,qBAAqB,EAAE,CAAC;YAC7C,MAAM,IAAI,KAAK,CACb,uEAAuE,CACxE,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC,YAAY,CAAC,qBAAqB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACnE,CAAC;IAED,KAAK,CAAC,WAAW,CACf,OAAe,EACf,OAA4B;QAE5B,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;QAC7E,CAAC;QAED,OAAO,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACzD,CAAC;CACF,CAAA;AA/CY,kEAA2B;sCAA3B,2BAA2B;IADvC,IAAA,mBAAU,GAAE;IAGR,WAAA,IAAA,eAAM,EAAC,+CAA2B,CAAC,CAAA;;GAF3B,2BAA2B,CA+CvC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhook.dispatcher.d.ts","sourceRoot":"","sources":["../src/webhook.dispatcher.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAMjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAMtE,qBACa,iBAAiB;IAK1B,OAAO,CAAC,QAAQ,CAAC,MAAM;IAEvB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAN7B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAU;gBAGxB,MAAM,EAAE,aAAa,EAErB,UAAU,EAAE,iBAAiB,EAE9C,OAAO,EAAE,oBAAoB;IAMzB,QAAQ,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"webhook.dispatcher.d.ts","sourceRoot":"","sources":["../src/webhook.dispatcher.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAMjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAMtE,qBACa,iBAAiB;IAK1B,OAAO,CAAC,QAAQ,CAAC,MAAM;IAEvB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAN7B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAU;gBAGxB,MAAM,EAAE,aAAa,EAErB,UAAU,EAAE,iBAAiB,EAE9C,OAAO,EAAE,oBAAoB;IAMzB,QAAQ,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;IA8BlE,OAAO,CAAC,gBAAgB;CAWzB"}
|
|
@@ -30,9 +30,10 @@ let WebhookDispatcher = class WebhookDispatcher {
|
|
|
30
30
|
}
|
|
31
31
|
async dispatch(delivery) {
|
|
32
32
|
const parsedUrl = this.parseDeliveryUrl(delivery.url);
|
|
33
|
+
let resolvedIpAddresses;
|
|
33
34
|
// DNS rebinding defense — validate resolved IPs before every dispatch
|
|
34
35
|
if (!this.allowPrivateUrls) {
|
|
35
|
-
await (0, webhook_url_validator_1.resolveAndValidateHost)(parsedUrl.hostname, delivery.url);
|
|
36
|
+
resolvedIpAddresses = await (0, webhook_url_validator_1.resolveAndValidateHost)(parsedUrl.hostname, delivery.url);
|
|
36
37
|
}
|
|
37
38
|
const body = JSON.stringify({
|
|
38
39
|
type: delivery.eventType,
|
|
@@ -40,7 +41,9 @@ let WebhookDispatcher = class WebhookDispatcher {
|
|
|
40
41
|
});
|
|
41
42
|
const timestamp = Math.floor(Date.now() / 1000);
|
|
42
43
|
const headers = this.signer.signAll(delivery.eventId, timestamp, body, [delivery.secret, ...delivery.additionalSecrets]);
|
|
43
|
-
return this.httpClient.post(delivery.url, headers, body, this.timeout
|
|
44
|
+
return this.httpClient.post(delivery.url, headers, body, this.timeout, {
|
|
45
|
+
resolvedIpAddresses,
|
|
46
|
+
});
|
|
44
47
|
}
|
|
45
48
|
parseDeliveryUrl(url) {
|
|
46
49
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhook.dispatcher.js","sourceRoot":"","sources":["../src/webhook.dispatcher.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAoD;AACpD,qDAAiD;AACjD,2DAI6B;AAK7B,mEAGiC;AAG1B,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAKT;IAEA;IANF,OAAO,CAAS;IAChB,gBAAgB,CAAU;IAE3C,YACmB,MAAqB,EAErB,UAA6B,EAE9C,OAA6B;QAJZ,WAAM,GAAN,MAAM,CAAe;QAErB,eAAU,GAAV,UAAU,CAAmB;QAI9C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,QAAQ,EAAE,OAAO,IAAI,4CAAwB,CAAC;QACrE,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,IAAI,KAAK,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,QAAyB;QACtC,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"webhook.dispatcher.js","sourceRoot":"","sources":["../src/webhook.dispatcher.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAoD;AACpD,qDAAiD;AACjD,2DAI6B;AAK7B,mEAGiC;AAG1B,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAKT;IAEA;IANF,OAAO,CAAS;IAChB,gBAAgB,CAAU;IAE3C,YACmB,MAAqB,EAErB,UAA6B,EAE9C,OAA6B;QAJZ,WAAM,GAAN,MAAM,CAAe;QAErB,eAAU,GAAV,UAAU,CAAmB;QAI9C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,QAAQ,EAAE,OAAO,IAAI,4CAAwB,CAAC;QACrE,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,IAAI,KAAK,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,QAAyB;QACtC,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACtD,IAAI,mBAAyC,CAAC;QAE9C,sEAAsE;QACtE,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC3B,mBAAmB,GAAG,MAAM,IAAA,8CAAsB,EAChD,SAAS,CAAC,QAAQ,EAClB,QAAQ,CAAC,GAAG,CACb,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;YAC1B,IAAI,EAAE,QAAQ,CAAC,SAAS;YACxB,IAAI,EAAE,QAAQ,CAAC,OAAO;SACvB,CAAC,CAAC;QAEH,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAChD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CACjC,QAAQ,CAAC,OAAO,EAChB,SAAS,EACT,IAAI,EACJ,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,QAAQ,CAAC,iBAAiB,CAAC,CACjD,CAAC;QAEF,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE;YACrE,mBAAmB;SACpB,CAAC,CAAC;IACL,CAAC;IAEO,gBAAgB,CAAC,GAAW;QAClC,IAAI,CAAC;YACH,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QACtB,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,iDAAyB,CACjC,yCAAyC,GAAG,GAAG,EAC/C,OAAO,EACP,GAAG,CACJ,CAAC;QACJ,CAAC;IACH,CAAC;CACF,CAAA;AAxDY,8CAAiB;4BAAjB,iBAAiB;IAD7B,IAAA,mBAAU,GAAE;IAOR,WAAA,IAAA,eAAM,EAAC,uCAAmB,CAAC,CAAA;IAE3B,WAAA,IAAA,eAAM,EAAC,0CAAsB,CAAC,CAAA;qCAHN,8BAAa;GAL7B,iBAAiB,CAwD7B"}
|
|
@@ -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;
|
|
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;AAkBlE,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EAE1B,MAAM,wCAAwC,CAAC;AAuGhD,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;IASpB,eAAe,IAAI,IAAI;CAOxB"}
|
package/dist/webhook.module.js
CHANGED
|
@@ -24,6 +24,7 @@ const webhook_dispatcher_1 = require("./webhook.dispatcher");
|
|
|
24
24
|
const webhook_retry_policy_1 = require("./webhook.retry-policy");
|
|
25
25
|
const webhook_endpoint_admin_service_1 = require("./webhook.endpoint-admin.service");
|
|
26
26
|
const webhook_delivery_admin_service_1 = require("./webhook.delivery-admin.service");
|
|
27
|
+
const webhook_retention_admin_service_1 = require("./webhook.retention-admin.service");
|
|
27
28
|
const webhook_admin_service_1 = require("./webhook.admin.service");
|
|
28
29
|
const webhook_constants_1 = require("./webhook.constants");
|
|
29
30
|
const prisma_event_repository_1 = require("./adapters/prisma-event.repository");
|
|
@@ -50,7 +51,7 @@ function createPortProviders(options) {
|
|
|
50
51
|
{
|
|
51
52
|
provide: webhook_constants_1.WEBHOOK_DELIVERY_REPOSITORY,
|
|
52
53
|
useFactory: (vault) => options.deliveryRepository ??
|
|
53
|
-
new prisma_delivery_repository_1.PrismaDeliveryRepository(options.prisma, vault),
|
|
54
|
+
new prisma_delivery_repository_1.PrismaDeliveryRepository(options.prisma, vault, options.redaction),
|
|
54
55
|
inject: [webhook_constants_1.WEBHOOK_SECRET_VAULT],
|
|
55
56
|
},
|
|
56
57
|
{
|
|
@@ -78,7 +79,8 @@ function createAsyncPortProviders() {
|
|
|
78
79
|
},
|
|
79
80
|
{
|
|
80
81
|
provide: webhook_constants_1.WEBHOOK_DELIVERY_REPOSITORY,
|
|
81
|
-
useFactory: (opts, vault) => opts.deliveryRepository ??
|
|
82
|
+
useFactory: (opts, vault) => opts.deliveryRepository ??
|
|
83
|
+
new prisma_delivery_repository_1.PrismaDeliveryRepository(opts.prisma, vault, opts.redaction),
|
|
82
84
|
inject: [webhook_constants_1.WEBHOOK_MODULE_OPTIONS, webhook_constants_1.WEBHOOK_SECRET_VAULT],
|
|
83
85
|
},
|
|
84
86
|
{
|
|
@@ -97,12 +99,14 @@ const CORE_PROVIDERS = [
|
|
|
97
99
|
webhook_delivery_worker_1.WebhookDeliveryWorker,
|
|
98
100
|
webhook_endpoint_admin_service_1.WebhookEndpointAdminService,
|
|
99
101
|
webhook_delivery_admin_service_1.WebhookDeliveryAdminService,
|
|
102
|
+
webhook_retention_admin_service_1.WebhookRetentionAdminService,
|
|
100
103
|
webhook_admin_service_1.WebhookAdminService,
|
|
101
104
|
];
|
|
102
105
|
const EXPORTS = [
|
|
103
106
|
webhook_service_1.WebhookService,
|
|
104
107
|
webhook_endpoint_admin_service_1.WebhookEndpointAdminService,
|
|
105
108
|
webhook_delivery_admin_service_1.WebhookDeliveryAdminService,
|
|
109
|
+
webhook_retention_admin_service_1.WebhookRetentionAdminService,
|
|
106
110
|
webhook_admin_service_1.WebhookAdminService,
|
|
107
111
|
webhook_signer_1.WebhookSigner,
|
|
108
112
|
webhook_constants_1.WEBHOOK_EVENT_REPOSITORY,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhook.module.js","sourceRoot":"","sources":["../src/webhook.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAQwB;AACxB,+CAAqE;AACrE,uDAAmD;AACnD,uEAAkE;AAClE,qDAAiD;AACjD,uEAAkE;AAClE,6DAAyD;AACzD,iEAA4D;AAC5D,qFAA+E;AAC/E,qFAA+E;AAC/E,mEAA8D;AAC9D,2DAQ6B;AAM7B,gFAA2E;AAC3E,sFAAiF;AACjF,sFAAiF;AACjF,oEAA+D;AAC/D,8EAAyE;AAGzE,SAAS,mBAAmB,CAAC,OAA6B;IACxD,OAAO;QACL;YACE,OAAO,EAAE,wCAAoB;YAC7B,UAAU,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,WAAW,IAAI,IAAI,6CAAoB,EAAE;SACpE;QACD;YACE,OAAO,EAAE,4CAAwB;YACjC,UAAU,EAAE,GAAG,EAAE,CACf,OAAO,CAAC,eAAe,IAAI,IAAI,+CAAqB,CAAC,OAAO,CAAC,MAAM,CAAC;SACvE;QACD;YACE,OAAO,EAAE,+CAA2B;YACpC,UAAU,EAAE,CAAC,KAAyB,EAAE,EAAE,CACxC,OAAO,CAAC,kBAAkB;gBAC1B,IAAI,qDAAwB,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC;YACrD,MAAM,EAAE,CAAC,wCAAoB,CAAC;SAC/B;QACD;YACE,OAAO,EAAE,+CAA2B;YACpC,UAAU,EAAE,CAAC,KAAyB,EAAE,EAAE,CACxC,OAAO,CAAC,kBAAkB;gBAC1B,IAAI,qDAAwB,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"webhook.module.js","sourceRoot":"","sources":["../src/webhook.module.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { WebhookDeliveryRepository } from './ports/webhook-delivery.repository';
|
|
2
|
+
import { WebhookModuleOptions } from './interfaces/webhook-options.interface';
|
|
3
|
+
import { WebhookRetentionPurgeResult } from './interfaces/webhook-delivery.interface';
|
|
4
|
+
export declare class WebhookRetentionAdminService {
|
|
5
|
+
private readonly deliveryRepo;
|
|
6
|
+
private readonly options;
|
|
7
|
+
constructor(deliveryRepo: WebhookDeliveryRepository, options: WebhookModuleOptions);
|
|
8
|
+
purgeExpiredData(now?: Date): Promise<WebhookRetentionPurgeResult>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=webhook.retention-admin.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhook.retention-admin.service.d.ts","sourceRoot":"","sources":["../src/webhook.retention-admin.service.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AAChF,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAC9E,OAAO,EAAE,2BAA2B,EAAE,MAAM,yCAAyC,CAAC;AAQtF,qBACa,4BAA4B;IAGrC,OAAO,CAAC,QAAQ,CAAC,YAAY;IAE7B,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAFP,YAAY,EAAE,yBAAyB,EAEvC,OAAO,EAAE,oBAAoB;IAG1C,gBAAgB,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,2BAA2B,CAAC;CAmBzE"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.WebhookRetentionAdminService = void 0;
|
|
16
|
+
const common_1 = require("@nestjs/common");
|
|
17
|
+
const webhook_constants_1 = require("./webhook.constants");
|
|
18
|
+
const ZERO_PURGE_RESULT = {
|
|
19
|
+
eventsPurged: 0,
|
|
20
|
+
deliveriesPurged: 0,
|
|
21
|
+
attemptsPurged: 0,
|
|
22
|
+
};
|
|
23
|
+
let WebhookRetentionAdminService = class WebhookRetentionAdminService {
|
|
24
|
+
deliveryRepo;
|
|
25
|
+
options;
|
|
26
|
+
constructor(deliveryRepo, options) {
|
|
27
|
+
this.deliveryRepo = deliveryRepo;
|
|
28
|
+
this.options = options;
|
|
29
|
+
}
|
|
30
|
+
async purgeExpiredData(now) {
|
|
31
|
+
const retention = this.options.retention;
|
|
32
|
+
if (retention?.eventPayloadRetentionDays == null &&
|
|
33
|
+
retention?.deliveryResponseBodyRetentionDays == null &&
|
|
34
|
+
retention?.attemptResponseBodyRetentionDays == null) {
|
|
35
|
+
return ZERO_PURGE_RESULT;
|
|
36
|
+
}
|
|
37
|
+
if (!this.deliveryRepo.purgeExpiredData) {
|
|
38
|
+
throw new Error('WebhookDeliveryRepository does not support retention purge');
|
|
39
|
+
}
|
|
40
|
+
return this.deliveryRepo.purgeExpiredData(retention, now);
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
exports.WebhookRetentionAdminService = WebhookRetentionAdminService;
|
|
44
|
+
exports.WebhookRetentionAdminService = WebhookRetentionAdminService = __decorate([
|
|
45
|
+
(0, common_1.Injectable)(),
|
|
46
|
+
__param(0, (0, common_1.Inject)(webhook_constants_1.WEBHOOK_DELIVERY_REPOSITORY)),
|
|
47
|
+
__param(1, (0, common_1.Inject)(webhook_constants_1.WEBHOOK_MODULE_OPTIONS)),
|
|
48
|
+
__metadata("design:paramtypes", [Object, Object])
|
|
49
|
+
], WebhookRetentionAdminService);
|
|
50
|
+
//# sourceMappingURL=webhook.retention-admin.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhook.retention-admin.service.js","sourceRoot":"","sources":["../src/webhook.retention-admin.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAoD;AACpD,2DAG6B;AAK7B,MAAM,iBAAiB,GAAgC;IACrD,YAAY,EAAE,CAAC;IACf,gBAAgB,EAAE,CAAC;IACnB,cAAc,EAAE,CAAC;CAClB,CAAC;AAGK,IAAM,4BAA4B,GAAlC,MAAM,4BAA4B;IAGpB;IAEA;IAJnB,YAEmB,YAAuC,EAEvC,OAA6B;QAF7B,iBAAY,GAAZ,YAAY,CAA2B;QAEvC,YAAO,GAAP,OAAO,CAAsB;IAC7C,CAAC;IAEJ,KAAK,CAAC,gBAAgB,CAAC,GAAU;QAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;QAEzC,IACE,SAAS,EAAE,yBAAyB,IAAI,IAAI;YAC5C,SAAS,EAAE,iCAAiC,IAAI,IAAI;YACpD,SAAS,EAAE,gCAAgC,IAAI,IAAI,EACnD,CAAC;YACD,OAAO,iBAAiB,CAAC;QAC3B,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,gBAAgB,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CACb,4DAA4D,CAC7D,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IAC5D,CAAC;CACF,CAAA;AA3BY,oEAA4B;uCAA5B,4BAA4B;IADxC,IAAA,mBAAU,GAAE;IAGR,WAAA,IAAA,eAAM,EAAC,+CAA2B,CAAC,CAAA;IAEnC,WAAA,IAAA,eAAM,EAAC,0CAAsB,CAAC,CAAA;;GAJtB,4BAA4B,CA2BxC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { WebhookEvent } from './webhook.event';
|
|
2
|
-
import { WebhookModuleOptions } from './interfaces/webhook-options.interface';
|
|
2
|
+
import { WebhookModuleOptions, WebhookPublishOptions } from './interfaces/webhook-options.interface';
|
|
3
3
|
import { WebhookEventRepository } from './ports/webhook-event.repository';
|
|
4
4
|
import { WebhookEndpointRepository } from './ports/webhook-endpoint.repository';
|
|
5
5
|
import { WebhookDeliveryRepository } from './ports/webhook-delivery.repository';
|
|
@@ -9,10 +9,13 @@ export declare class WebhookService {
|
|
|
9
9
|
private readonly deliveryRepo;
|
|
10
10
|
private readonly logger;
|
|
11
11
|
private readonly maxAttempts;
|
|
12
|
+
private readonly redaction?;
|
|
12
13
|
constructor(eventRepo: WebhookEventRepository, endpointRepo: WebhookEndpointRepository, deliveryRepo: WebhookDeliveryRepository, options: WebhookModuleOptions);
|
|
13
|
-
send(event: WebhookEvent): Promise<string>;
|
|
14
|
-
sendToTenant(tenantId: string, event: WebhookEvent): Promise<string>;
|
|
15
|
-
sendToEndpoints(endpointIds: string[], event: WebhookEvent,
|
|
14
|
+
send(event: WebhookEvent, options?: WebhookPublishOptions): Promise<string>;
|
|
15
|
+
sendToTenant(tenantId: string, event: WebhookEvent, options?: WebhookPublishOptions): Promise<string>;
|
|
16
|
+
sendToEndpoints(endpointIds: string[], event: WebhookEvent, tenantIdOrOptions?: string | WebhookPublishOptions, options?: WebhookPublishOptions): Promise<string>;
|
|
16
17
|
private sendInternal;
|
|
18
|
+
private saveEventInTransaction;
|
|
19
|
+
private sanitizePayload;
|
|
17
20
|
}
|
|
18
21
|
//# sourceMappingURL=webhook.service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhook.service.d.ts","sourceRoot":"","sources":["../src/webhook.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAO/C,OAAO,
|
|
1
|
+
{"version":3,"file":"webhook.service.d.ts","sourceRoot":"","sources":["../src/webhook.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAO/C,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EAEtB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AAChF,OAAO,EACL,yBAAyB,EAE1B,MAAM,qCAAqC,CAAC;AAE7C,qBACa,cAAc;IAOvB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAE1B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAE7B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAV/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmC;IAC1D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAA0B;gBAIlC,SAAS,EAAE,sBAAsB,EAEjC,YAAY,EAAE,yBAAyB,EAEvC,YAAY,EAAE,yBAAyB,EAExD,OAAO,EAAE,oBAAoB;IAMzB,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC;IAI3E,YAAY,CAChB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,YAAY,EACnB,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,MAAM,CAAC;IAIZ,eAAe,CACnB,WAAW,EAAE,MAAM,EAAE,EACrB,KAAK,EAAE,YAAY,EACnB,iBAAiB,CAAC,EAAE,MAAM,GAAG,qBAAqB,EAClD,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,MAAM,CAAC;YAmDJ,YAAY;YA2DZ,sBAAsB;IA6BpC,OAAO,CAAC,eAAe;CAOxB"}
|
package/dist/webhook.service.js
CHANGED
|
@@ -22,23 +22,32 @@ let WebhookService = WebhookService_1 = class WebhookService {
|
|
|
22
22
|
deliveryRepo;
|
|
23
23
|
logger = new common_1.Logger(WebhookService_1.name);
|
|
24
24
|
maxAttempts;
|
|
25
|
+
redaction;
|
|
25
26
|
constructor(eventRepo, endpointRepo, deliveryRepo, options) {
|
|
26
27
|
this.eventRepo = eventRepo;
|
|
27
28
|
this.endpointRepo = endpointRepo;
|
|
28
29
|
this.deliveryRepo = deliveryRepo;
|
|
29
30
|
this.maxAttempts = options.delivery?.maxRetries ?? 5;
|
|
31
|
+
this.redaction = options.redaction;
|
|
30
32
|
}
|
|
31
|
-
async send(event) {
|
|
32
|
-
return this.sendInternal(event, undefined);
|
|
33
|
+
async send(event, options) {
|
|
34
|
+
return this.sendInternal(event, undefined, options);
|
|
33
35
|
}
|
|
34
|
-
async sendToTenant(tenantId, event) {
|
|
35
|
-
return this.sendInternal(event, tenantId);
|
|
36
|
+
async sendToTenant(tenantId, event, options) {
|
|
37
|
+
return this.sendInternal(event, tenantId, options);
|
|
36
38
|
}
|
|
37
|
-
async sendToEndpoints(endpointIds, event,
|
|
38
|
-
const
|
|
39
|
+
async sendToEndpoints(endpointIds, event, tenantIdOrOptions, options) {
|
|
40
|
+
const tenantId = typeof tenantIdOrOptions === 'string' ? tenantIdOrOptions : undefined;
|
|
41
|
+
const publishOptions = typeof tenantIdOrOptions === 'object' ? tenantIdOrOptions : options;
|
|
39
42
|
const eventType = event.eventType;
|
|
43
|
+
const payload = this.sanitizePayload(event.toPayload(), eventType, tenantId ?? null);
|
|
40
44
|
return this.deliveryRepo.runInTransaction(async (tx) => {
|
|
41
|
-
const
|
|
45
|
+
const savedEvent = await this.saveEventInTransaction(tx, eventType, payload, tenantId ?? null, publishOptions);
|
|
46
|
+
const eventId = savedEvent.id;
|
|
47
|
+
if (!savedEvent.created) {
|
|
48
|
+
this.logger.debug(`Idempotent event ${eventType} (${eventId}) already exists; skipping targeted delivery creation`);
|
|
49
|
+
return eventId;
|
|
50
|
+
}
|
|
42
51
|
if (endpointIds.length === 0) {
|
|
43
52
|
this.logger.debug(`No endpoint IDs provided for event ${eventType} (eventId=${eventId})`);
|
|
44
53
|
return eventId;
|
|
@@ -48,11 +57,16 @@ let WebhookService = WebhookService_1 = class WebhookService {
|
|
|
48
57
|
return eventId;
|
|
49
58
|
});
|
|
50
59
|
}
|
|
51
|
-
async sendInternal(event, tenantId) {
|
|
52
|
-
const payload = event.toPayload();
|
|
60
|
+
async sendInternal(event, tenantId, options) {
|
|
53
61
|
const eventType = event.eventType;
|
|
62
|
+
const payload = this.sanitizePayload(event.toPayload(), eventType, tenantId ?? null);
|
|
54
63
|
return this.deliveryRepo.runInTransaction(async (tx) => {
|
|
55
|
-
const
|
|
64
|
+
const savedEvent = await this.saveEventInTransaction(tx, eventType, payload, tenantId ?? null, options);
|
|
65
|
+
const eventId = savedEvent.id;
|
|
66
|
+
if (!savedEvent.created) {
|
|
67
|
+
this.logger.debug(`Idempotent event ${eventType} (${eventId}) already exists; skipping delivery creation`);
|
|
68
|
+
return eventId;
|
|
69
|
+
}
|
|
56
70
|
const endpoints = await this.endpointRepo.findMatchingEndpointsInTransaction(tx, eventType, tenantId);
|
|
57
71
|
if (endpoints.length === 0) {
|
|
58
72
|
this.logger.debug(`No matching endpoints for event ${eventType} (eventId=${eventId})`);
|
|
@@ -64,6 +78,22 @@ let WebhookService = WebhookService_1 = class WebhookService {
|
|
|
64
78
|
return eventId;
|
|
65
79
|
});
|
|
66
80
|
}
|
|
81
|
+
async saveEventInTransaction(tx, eventType, payload, tenantId, options) {
|
|
82
|
+
if (!options?.idempotencyKey) {
|
|
83
|
+
const id = await this.eventRepo.saveEventInTransaction(tx, eventType, payload, tenantId);
|
|
84
|
+
return { id, created: true };
|
|
85
|
+
}
|
|
86
|
+
if (!this.eventRepo.saveEventOnceInTransaction) {
|
|
87
|
+
throw new Error('WebhookEventRepository does not support idempotent event persistence');
|
|
88
|
+
}
|
|
89
|
+
return this.eventRepo.saveEventOnceInTransaction(tx, eventType, payload, tenantId, {
|
|
90
|
+
idempotencyKey: options.idempotencyKey,
|
|
91
|
+
correlationId: options.correlationId,
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
sanitizePayload(payload, eventType, tenantId) {
|
|
95
|
+
return this.redaction?.sanitizePayload?.(payload, { eventType, tenantId }) ?? payload;
|
|
96
|
+
}
|
|
67
97
|
};
|
|
68
98
|
exports.WebhookService = WebhookService;
|
|
69
99
|
exports.WebhookService = WebhookService = WebhookService_1 = __decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhook.service.js","sourceRoot":"","sources":["../src/webhook.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAA4D;AAE5D,2DAK6B;
|
|
1
|
+
{"version":3,"file":"webhook.service.js","sourceRoot":"","sources":["../src/webhook.service.ts"],"names":[],"mappings":"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"}
|