@clipboard-health/notifications 0.4.0 → 0.5.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/package.json +5 -4
- package/src/lib/createIdempotencyKey.d.ts +1 -1
- package/src/lib/createIdempotencyKey.js +3 -3
- package/src/lib/createIdempotencyKey.js.map +1 -1
- package/src/lib/internal/createChunkedIdempotencyKey.d.ts +18 -0
- package/src/lib/internal/createChunkedIdempotencyKey.js +30 -0
- package/src/lib/internal/createChunkedIdempotencyKey.js.map +1 -0
- package/src/lib/notificationClient.d.ts +2 -2
- package/src/lib/notificationClient.js +25 -22
- package/src/lib/notificationClient.js.map +1 -1
- package/src/lib/types.d.ts +13 -3
package/package.json
CHANGED
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@clipboard-health/notifications",
|
|
3
3
|
"description": "Send notifications through third-party providers.",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.5.0",
|
|
5
5
|
"bugs": "https://github.com/ClipboardHealth/core-utils/issues",
|
|
6
6
|
"dependencies": {
|
|
7
|
-
"@clipboard-health/phone-number": "0.
|
|
8
|
-
"@clipboard-health/util-ts": "3.
|
|
7
|
+
"@clipboard-health/phone-number": "0.4.0",
|
|
8
|
+
"@clipboard-health/util-ts": "3.13.0",
|
|
9
9
|
"@knocklabs/node": "1.16.0",
|
|
10
|
+
"p-limit": "3.1.0",
|
|
10
11
|
"tslib": "2.8.1"
|
|
11
12
|
},
|
|
12
13
|
"devDependencies": {
|
|
13
|
-
"@clipboard-health/testing-core": "0.
|
|
14
|
+
"@clipboard-health/testing-core": "0.22.0"
|
|
14
15
|
},
|
|
15
16
|
"keywords": [],
|
|
16
17
|
"license": "MIT",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Creates a deterministic hash for use as an idempotency key.
|
|
3
3
|
*
|
|
4
4
|
* The function sorts `valuesToHash`, generates a SHA-256 hash, prepends the workflow key, and
|
|
5
|
-
* truncates the result to
|
|
5
|
+
* truncates the result to MAX_IDEMPOTENCY_KEY_LENGTH characters maximum.
|
|
6
6
|
*
|
|
7
7
|
* @param params.key - Workflow key to prepend to the hash.
|
|
8
8
|
* @param params.valuesToHash - Array of strings to hash.
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createIdempotencyKey = createIdempotencyKey;
|
|
4
4
|
const node_crypto_1 = require("node:crypto");
|
|
5
|
-
const
|
|
5
|
+
const createChunkedIdempotencyKey_1 = require("./internal/createChunkedIdempotencyKey");
|
|
6
6
|
/**
|
|
7
7
|
* Creates a deterministic hash for use as an idempotency key.
|
|
8
8
|
*
|
|
9
9
|
* The function sorts `valuesToHash`, generates a SHA-256 hash, prepends the workflow key, and
|
|
10
|
-
* truncates the result to
|
|
10
|
+
* truncates the result to MAX_IDEMPOTENCY_KEY_LENGTH characters maximum.
|
|
11
11
|
*
|
|
12
12
|
* @param params.key - Workflow key to prepend to the hash.
|
|
13
13
|
* @param params.valuesToHash - Array of strings to hash.
|
|
@@ -21,6 +21,6 @@ function createIdempotencyKey(params) {
|
|
|
21
21
|
.update(JSON.stringify([...valuesToHash].sort()))
|
|
22
22
|
.digest("hex");
|
|
23
23
|
const result = `${key}${hash}`;
|
|
24
|
-
return result.slice(0, MAX_IDEMPOTENCY_KEY_LENGTH);
|
|
24
|
+
return result.slice(0, createChunkedIdempotencyKey_1.MAX_IDEMPOTENCY_KEY_LENGTH);
|
|
25
25
|
}
|
|
26
26
|
//# sourceMappingURL=createIdempotencyKey.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createIdempotencyKey.js","sourceRoot":"","sources":["../../../../../packages/notifications/src/lib/createIdempotencyKey.ts"],"names":[],"mappings":";;AAeA,oDAUC;AAzBD,6CAAyC;AAEzC,
|
|
1
|
+
{"version":3,"file":"createIdempotencyKey.js","sourceRoot":"","sources":["../../../../../packages/notifications/src/lib/createIdempotencyKey.ts"],"names":[],"mappings":";;AAeA,oDAUC;AAzBD,6CAAyC;AAEzC,wFAAoF;AAEpF;;;;;;;;;;GAUG;AACH,SAAgB,oBAAoB,CAAC,MAA+C;IAClF,MAAM,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,MAAM,CAAC;IAErC,MAAM,IAAI,GAAG,IAAA,wBAAU,EAAC,QAAQ,CAAC;QAC/B,+FAA+F;SAC9F,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;SAChD,MAAM,CAAC,KAAK,CAAC,CAAC;IAEjB,MAAM,MAAM,GAAG,GAAG,GAAG,GAAG,IAAI,EAAE,CAAC;IAC/B,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,wDAA0B,CAAC,CAAC;AACrD,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export declare const MAX_IDEMPOTENCY_KEY_LENGTH = 255;
|
|
2
|
+
/**
|
|
3
|
+
* Creates a chunked idempotency key by appending a chunk suffix.
|
|
4
|
+
*
|
|
5
|
+
* If the idempotency key with the chunk suffix exceeds MAX_IDEMPOTENCY_KEY_LENGTH characters, it
|
|
6
|
+
* truncates the base key to fit within the limit.
|
|
7
|
+
*
|
|
8
|
+
* @param params.baseKey - The base idempotency key
|
|
9
|
+
* @param params.chunkIndex - Zero-based chunk index
|
|
10
|
+
* @param params.totalChunks - Total number of chunks
|
|
11
|
+
*
|
|
12
|
+
* @returns An idempotency key with chunk information, max MAX_IDEMPOTENCY_KEY_LENGTH characters
|
|
13
|
+
*/
|
|
14
|
+
export declare function createChunkedIdempotencyKey(params: {
|
|
15
|
+
baseKey: string;
|
|
16
|
+
chunkIndex: number;
|
|
17
|
+
totalChunks: number;
|
|
18
|
+
}): string;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MAX_IDEMPOTENCY_KEY_LENGTH = void 0;
|
|
4
|
+
exports.createChunkedIdempotencyKey = createChunkedIdempotencyKey;
|
|
5
|
+
exports.MAX_IDEMPOTENCY_KEY_LENGTH = 255;
|
|
6
|
+
/**
|
|
7
|
+
* Creates a chunked idempotency key by appending a chunk suffix.
|
|
8
|
+
*
|
|
9
|
+
* If the idempotency key with the chunk suffix exceeds MAX_IDEMPOTENCY_KEY_LENGTH characters, it
|
|
10
|
+
* truncates the base key to fit within the limit.
|
|
11
|
+
*
|
|
12
|
+
* @param params.baseKey - The base idempotency key
|
|
13
|
+
* @param params.chunkIndex - Zero-based chunk index
|
|
14
|
+
* @param params.totalChunks - Total number of chunks
|
|
15
|
+
*
|
|
16
|
+
* @returns An idempotency key with chunk information, max MAX_IDEMPOTENCY_KEY_LENGTH characters
|
|
17
|
+
*/
|
|
18
|
+
function createChunkedIdempotencyKey(params) {
|
|
19
|
+
const { baseKey, chunkIndex, totalChunks } = params;
|
|
20
|
+
if (totalChunks === 1) {
|
|
21
|
+
return baseKey.slice(0, exports.MAX_IDEMPOTENCY_KEY_LENGTH);
|
|
22
|
+
}
|
|
23
|
+
const chunkSuffix = `-chunk-${chunkIndex + 1}`;
|
|
24
|
+
const maxBaseKeyLength = exports.MAX_IDEMPOTENCY_KEY_LENGTH - chunkSuffix.length;
|
|
25
|
+
const fullKey = `${baseKey}${chunkSuffix}`;
|
|
26
|
+
return fullKey.length <= exports.MAX_IDEMPOTENCY_KEY_LENGTH
|
|
27
|
+
? fullKey
|
|
28
|
+
: `${baseKey.slice(0, maxBaseKeyLength)}${chunkSuffix}`;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=createChunkedIdempotencyKey.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createChunkedIdempotencyKey.js","sourceRoot":"","sources":["../../../../../../packages/notifications/src/lib/internal/createChunkedIdempotencyKey.ts"],"names":[],"mappings":";;;AAcA,kEAkBC;AAhCY,QAAA,0BAA0B,GAAG,GAAG,CAAC;AAE9C;;;;;;;;;;;GAWG;AACH,SAAgB,2BAA2B,CAAC,MAI3C;IACC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;IAEpD,IAAI,WAAW,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,kCAA0B,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,WAAW,GAAG,UAAU,UAAU,GAAG,CAAC,EAAE,CAAC;IAC/C,MAAM,gBAAgB,GAAG,kCAA0B,GAAG,WAAW,CAAC,MAAM,CAAC;IACzE,MAAM,OAAO,GAAG,GAAG,OAAO,GAAG,WAAW,EAAE,CAAC;IAE3C,OAAO,OAAO,CAAC,MAAM,IAAI,kCAA0B;QACjD,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC,GAAG,WAAW,EAAE,CAAC;AAC5D,CAAC"}
|
|
@@ -4,7 +4,6 @@ import type { AppendPushTokenRequest, AppendPushTokenResponse, LogParams, Notifi
|
|
|
4
4
|
export declare const MAXIMUM_RECIPIENTS_COUNT = 1000;
|
|
5
5
|
export declare const ERROR_CODES: {
|
|
6
6
|
readonly expired: "expired";
|
|
7
|
-
readonly recipientCountAboveMaximum: "recipientCountAboveMaximum";
|
|
8
7
|
readonly recipientCountBelowMinimum: "recipientCountBelowMinimum";
|
|
9
8
|
readonly missingSigningKey: "missingSigningKey";
|
|
10
9
|
readonly unknown: "unknown";
|
|
@@ -30,9 +29,10 @@ export declare class NotificationClient {
|
|
|
30
29
|
* Triggers a notification through third-party providers.
|
|
31
30
|
*
|
|
32
31
|
* This method handles:
|
|
33
|
-
* - Stale notifications prevention through
|
|
32
|
+
* - Stale notifications prevention through expiresAt.
|
|
34
33
|
* - Logging with sensitive data redaction.
|
|
35
34
|
* - Distributed tracing with notification metadata.
|
|
35
|
+
* - Chunking to prevent exceeding maximum recipient count.
|
|
36
36
|
* - Idempotency to prevent duplicate notifications.
|
|
37
37
|
* - Comprehensive error handling and logging.
|
|
38
38
|
*
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.NotificationClient = exports.ERROR_CODES = exports.MAXIMUM_RECIPIENTS_COUNT = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
4
5
|
const util_ts_1 = require("@clipboard-health/util-ts");
|
|
5
6
|
const node_1 = require("@knocklabs/node");
|
|
7
|
+
const p_limit_1 = tslib_1.__importDefault(require("p-limit"));
|
|
8
|
+
const createChunkedIdempotencyKey_1 = require("./internal/createChunkedIdempotencyKey");
|
|
6
9
|
const createTriggerLogParams_1 = require("./internal/createTriggerLogParams");
|
|
7
10
|
const createTriggerTraceOptions_1 = require("./internal/createTriggerTraceOptions");
|
|
8
11
|
const formatPhoneNumber_1 = require("./internal/formatPhoneNumber");
|
|
@@ -30,7 +33,6 @@ const LOG_PARAMS = {
|
|
|
30
33
|
exports.MAXIMUM_RECIPIENTS_COUNT = 1000;
|
|
31
34
|
exports.ERROR_CODES = {
|
|
32
35
|
expired: "expired",
|
|
33
|
-
recipientCountAboveMaximum: "recipientCountAboveMaximum",
|
|
34
36
|
recipientCountBelowMinimum: "recipientCountBelowMinimum",
|
|
35
37
|
missingSigningKey: "missingSigningKey",
|
|
36
38
|
unknown: "unknown",
|
|
@@ -62,9 +64,10 @@ class NotificationClient {
|
|
|
62
64
|
* Triggers a notification through third-party providers.
|
|
63
65
|
*
|
|
64
66
|
* This method handles:
|
|
65
|
-
* - Stale notifications prevention through
|
|
67
|
+
* - Stale notifications prevention through expiresAt.
|
|
66
68
|
* - Logging with sensitive data redaction.
|
|
67
69
|
* - Distributed tracing with notification metadata.
|
|
70
|
+
* - Chunking to prevent exceeding maximum recipient count.
|
|
68
71
|
* - Idempotency to prevent duplicate notifications.
|
|
69
72
|
* - Comprehensive error handling and logging.
|
|
70
73
|
*
|
|
@@ -121,14 +124,26 @@ class NotificationClient {
|
|
|
121
124
|
return validated;
|
|
122
125
|
}
|
|
123
126
|
try {
|
|
124
|
-
const { key, body, idempotencyKey, keysToRedact = [] } = validated.value;
|
|
125
|
-
|
|
126
|
-
const
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
127
|
+
const { key, body, idempotencyKey: baseKey, keysToRedact = [] } = validated.value;
|
|
128
|
+
const chunks = (0, util_ts_1.chunk)(body.recipients, exports.MAXIMUM_RECIPIENTS_COUNT);
|
|
129
|
+
const limit = (0, p_limit_1.default)(10);
|
|
130
|
+
const workflowRunIds = await Promise.all(chunks.map(async (recipients, chunkIndex) => {
|
|
131
|
+
const chunkedBody = { ...body, recipients };
|
|
132
|
+
const chunkedKey = (0, createChunkedIdempotencyKey_1.createChunkedIdempotencyKey)({
|
|
133
|
+
baseKey,
|
|
134
|
+
chunkIndex,
|
|
135
|
+
totalChunks: chunks.length,
|
|
136
|
+
});
|
|
137
|
+
return await limit(async () => {
|
|
138
|
+
this.logTriggerRequest({ logParams, body: chunkedBody, keysToRedact });
|
|
139
|
+
const response = await this.provider.workflows.trigger(key, (0, toKnockBody_1.toKnockBody)(chunkedBody), { idempotencyKey: chunkedKey });
|
|
140
|
+
const id = response.workflow_run_id;
|
|
141
|
+
this.logTriggerResponse({ span, response, id, logParams });
|
|
142
|
+
return id;
|
|
143
|
+
});
|
|
144
|
+
}));
|
|
145
|
+
// workflowRunIds[0] is safe because recipients are validated to be > 0
|
|
146
|
+
return (0, util_ts_1.success)({ id: workflowRunIds[0], ids: workflowRunIds });
|
|
132
147
|
}
|
|
133
148
|
catch (maybeError) {
|
|
134
149
|
const error = (0, util_ts_1.toError)(maybeError);
|
|
@@ -294,18 +309,6 @@ class NotificationClient {
|
|
|
294
309
|
logParams,
|
|
295
310
|
});
|
|
296
311
|
}
|
|
297
|
-
if (body.recipients.length > exports.MAXIMUM_RECIPIENTS_COUNT) {
|
|
298
|
-
const recipientsCount = body.recipients.length;
|
|
299
|
-
return this.createAndLogError({
|
|
300
|
-
notificationError: {
|
|
301
|
-
code: exports.ERROR_CODES.recipientCountAboveMaximum,
|
|
302
|
-
message: `Got ${recipientsCount} recipients; must be <= ${exports.MAXIMUM_RECIPIENTS_COUNT}.`,
|
|
303
|
-
},
|
|
304
|
-
span,
|
|
305
|
-
logParams,
|
|
306
|
-
metadata: { recipientsCount },
|
|
307
|
-
});
|
|
308
|
-
}
|
|
309
312
|
const now = new Date();
|
|
310
313
|
if (now > expiresAt) {
|
|
311
314
|
return this.createAndLogError({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notificationClient.js","sourceRoot":"","sources":["../../../../../packages/notifications/src/lib/notificationClient.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"notificationClient.js","sourceRoot":"","sources":["../../../../../packages/notifications/src/lib/notificationClient.ts"],"names":[],"mappings":";;;;AAAA,uDAUmC;AAEnC,0CAAgD;AAChD,8DAA6B;AAE7B,wFAAqF;AACrF,8EAA2E;AAC3E,oFAAiF;AACjF,oEAAiE;AACjE,gEAA6D;AAC7D,8CAA2C;AAC3C,wDAAqD;AAiBrD,MAAM,UAAU,GAAG;IACjB,OAAO,EAAE;QACP,SAAS,EAAE,uBAAuB;QAClC,WAAW,EAAE,yBAAyB;KACvC;IACD,eAAe,EAAE;QACf,SAAS,EAAE,+BAA+B;QAC1C,WAAW,EAAE,4BAA4B;KAC1C;IACD,eAAe,EAAE;QACf,SAAS,EAAE,+BAA+B;QAC1C,WAAW,EAAE,mBAAmB;KACjC;IACD,aAAa,EAAE;QACb,SAAS,EAAE,6BAA6B;QACxC,WAAW,EAAE,qBAAqB;KACnC;CACF,CAAC;AAEW,QAAA,wBAAwB,GAAG,IAAI,CAAC;AAEhC,QAAA,WAAW,GAAG;IACzB,OAAO,EAAE,SAAS;IAClB,0BAA0B,EAAE,4BAA4B;IACxD,iBAAiB,EAAE,mBAAmB;IACtC,OAAO,EAAE,SAAS;CACV,CAAC;AASX;;GAEG;AACH,MAAa,kBAAkB;IACV,MAAM,CAAS;IACf,QAAQ,CAAkB;IAC1B,MAAM,CAAS;IACjB,UAAU,CAAqB;IAEhD;;OAEG;IACH,YAAY,MAAgC;QAC1C,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;QAE9C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,QAAQ;YACX,UAAU,IAAI,MAAM;gBAClB,CAAC,CAAC,4DAA4D;oBAC5D,MAAM,CAAC,QAAQ;gBACjB,CAAC,CAAC,4DAA4D;oBAC5D,IAAI,iCAAe,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAuDG;IACI,KAAK,CAAC,OAAO,CAAC,MAAsB;QACzC,MAAM,SAAS,GAAG,IAAA,+CAAsB,EAAC,EAAE,GAAG,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/E,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAC5B,SAAS,CAAC,SAAS,EACnB,IAAA,qDAAyB,EAAC,SAAS,CAAC,EACpC,KAAK,EAAE,IAAI,EAAE,EAAE;YACb,MAAM,SAAS,GAAG,IAAI,CAAC,sBAAsB,CAAC,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;YAC9E,IAAI,IAAA,mBAAS,EAAC,SAAS,CAAC,EAAE,CAAC;gBACzB,OAAO,SAAS,CAAC;YACnB,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,YAAY,GAAG,EAAE,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC;gBAElF,MAAM,MAAM,GAAG,IAAA,eAAK,EAAC,IAAI,CAAC,UAAU,EAAE,gCAAwB,CAAC,CAAC;gBAChE,MAAM,KAAK,GAAG,IAAA,iBAAM,EAAC,EAAE,CAAC,CAAC;gBAEzB,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,GAAG,CACtC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE;oBAC1C,MAAM,WAAW,GAAG,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,CAAC;oBAC5C,MAAM,UAAU,GAAG,IAAA,yDAA2B,EAAC;wBAC7C,OAAO;wBACP,UAAU;wBACV,WAAW,EAAE,MAAM,CAAC,MAAM;qBAC3B,CAAC,CAAC;oBAEH,OAAO,MAAM,KAAK,CAAC,KAAK,IAAI,EAAE;wBAC5B,IAAI,CAAC,iBAAiB,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,CAAC;wBAEvE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CACpD,GAAG,EACH,IAAA,yBAAW,EAAC,WAAW,CAAC,EACxB,EAAE,cAAc,EAAE,UAAU,EAAE,CAC/B,CAAC;wBAEF,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;wBACpC,IAAI,CAAC,kBAAkB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;wBAE3D,OAAO,EAAE,CAAC;oBACZ,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC,CACH,CAAC;gBAEF,uEAAuE;gBACvE,OAAO,IAAA,iBAAO,EAAC,EAAE,EAAE,EAAE,cAAc,CAAC,CAAC,CAAE,EAAE,GAAG,EAAE,cAAc,EAAE,CAAC,CAAC;YAClE,CAAC;YAAC,OAAO,UAAU,EAAE,CAAC;gBACpB,MAAM,KAAK,GAAG,IAAA,iBAAO,EAAC,UAAU,CAAC,CAAC;gBAClC,OAAO,IAAI,CAAC,iBAAiB,CAAC;oBAC5B,iBAAiB,EAAE;wBACjB,IAAI,EAAE,mBAAW,CAAC,OAAO;wBACzB,OAAO,EAAE,KAAK,CAAC,OAAO;qBACvB;oBACD,IAAI;oBACJ,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;oBAC9B,SAAS;oBACT,QAAQ,EAAE,EAAE,KAAK,EAAE;iBACpB,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CACF,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,eAAe,CAC1B,MAA8B;QAE9B,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;QAC5C,MAAM,SAAS,GAAG,EAAE,GAAG,UAAU,CAAC,eAAe,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;QAEvE,IAAI,CAAC;YACH,6CAA6C;YAC7C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,SAAS,UAAU,EAAE,SAAS,CAAC,CAAC;YAC9D,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;YACtF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,SAAS,kBAAkB,EAAE;gBACzD,GAAG,SAAS;gBACZ,kBAAkB,EAAE,cAAc,CAAC,MAAM;aAC1C,CAAC,CAAC;YAEH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE;gBAC3E,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE;aAC3D,CAAC,CAAC;YAEH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,SAAS,WAAW,EAAE;gBAClD,GAAG,SAAS;gBACZ,4DAA4D;gBAC5D,QAAQ,EAAE,EAAE,UAAU,EAAE,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;aACtF,CAAC,CAAC;YAEH,OAAO,IAAA,iBAAO,EAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,UAAU,EAAE,CAAC;YACpB,MAAM,KAAK,GAAG,IAAA,iBAAO,EAAC,UAAU,CAAC,CAAC;YAClC,OAAO,IAAI,CAAC,iBAAiB,CAAC;gBAC5B,iBAAiB,EAAE;oBACjB,IAAI,EAAE,mBAAW,CAAC,OAAO;oBACzB,OAAO,EAAE,KAAK,CAAC,OAAO;iBACvB;gBACD,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;gBAC9B,SAAS;gBACT,QAAQ,EAAE,EAAE,KAAK,EAAE;aACpB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACI,KAAK,CAAC,aAAa,CACxB,MAA4B;QAE5B,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;QAEnD,MAAM,SAAS,GAAG,EAAE,GAAG,UAAU,CAAC,aAAa,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;QAE5E,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC,iBAAiB,CAAC;gBAC5B,iBAAiB,EAAE;oBACjB,IAAI,EAAE,mBAAW,CAAC,iBAAiB;oBACnC,OAAO,EAAE,sBAAsB;iBAChC;gBACD,SAAS;aACV,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,SAAS,UAAU,EAAE,SAAS,CAAC,CAAC;YAE9D,MAAM,QAAQ,GAAG,MAAM,IAAA,oBAAa,EAAC,MAAM,EAAE;gBAC3C,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,gBAAgB;aACjB,CAAC,CAAC;YAEH,4DAA4D;YAC5D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,SAAS,WAAW,EAAE,SAAS,CAAC,CAAC;YAE/D,OAAO,IAAA,iBAAO,EAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QACtC,CAAC;QAAC,OAAO,UAAU,EAAE,CAAC;YACpB,MAAM,KAAK,GAAG,IAAA,iBAAO,EAAC,UAAU,CAAC,CAAC;YAClC,OAAO,IAAI,CAAC,iBAAiB,CAAC;gBAC5B,iBAAiB,EAAE;oBACjB,IAAI,EAAE,mBAAW,CAAC,OAAO;oBACzB,OAAO,EAAE,KAAK,CAAC,OAAO;iBACvB;gBACD,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;gBAC9B,SAAS;gBACT,QAAQ,EAAE,EAAE,KAAK,EAAE;aACpB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,eAAe,CAC1B,MAA8B;QAE9B,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;QACxC,MAAM,SAAS,GAAG,EAAE,GAAG,UAAU,CAAC,eAAe,EAAE,WAAW,EAAE,GAAG,IAAI,EAAE,CAAC;QAE1E,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,SAAS,UAAU,EAAE,SAAS,CAAC,CAAC;YAE9D,oFAAoF;YACpF,MAAM,SAAS,GAAsD;gBACnE,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC5C,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzC,GAAG,CAAC,IAAI,CAAC,WAAW;oBAClB,CAAC,CAAC,EAAE,YAAY,EAAE,IAAA,qCAAiB,EAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE;oBACxE,CAAC,CAAC,EAAE,CAAC;gBACP,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACtD,CAAC;YAEF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YAEzE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,SAAS,WAAW,EAAE;gBAClD,GAAG,SAAS;gBACZ,QAAQ,EAAE,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE;aAC5D,CAAC,CAAC;YAEH,OAAO,IAAA,iBAAO,EAAC;gBACb,WAAW,EAAE,QAAQ,CAAC,EAAE;aACzB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,UAAU,EAAE,CAAC;YACpB,MAAM,KAAK,GAAG,IAAA,iBAAO,EAAC,UAAU,CAAC,CAAC;YAClC,OAAO,IAAI,CAAC,iBAAiB,CAAC;gBAC5B,iBAAiB,EAAE;oBACjB,IAAI,EAAE,mBAAW,CAAC,OAAO;oBACzB,OAAO,EAAE,KAAK,CAAC,OAAO;iBACvB;gBACD,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;gBAC9B,SAAS;gBACT,QAAQ,EAAE,EAAE,KAAK,EAAE;aACpB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAES,iBAAiB,CAAC,MAM3B;QACC,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,MAAM,CAAC;QAChG,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,iBAAiB,CAAC;QAE5C,IAAI,EAAE,OAAO,CAAC;YACZ,KAAK,EAAE,IAAI;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,OAAO;SACzB,CAAC,CAAC;QAEH,WAAW,CAAC,GAAG,SAAS,CAAC,SAAS,KAAK,IAAI,KAAK,OAAO,EAAE,EAAE;YACzD,GAAG,SAAS;YACZ,GAAG,QAAQ;SACZ,CAAC,CAAC;QAEH,OAAO,IAAA,iBAAO,EAAC,IAAI,sBAAY,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACpE,CAAC;IAEO,sBAAsB,CAC5B,MAAyE;QAEzE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;QAEpD,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC,iBAAiB,CAAC;gBAC5B,iBAAiB,EAAE;oBACjB,IAAI,EAAE,mBAAW,CAAC,0BAA0B;oBAC5C,OAAO,EAAE,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,2BAA2B;iBAClE;gBACD,IAAI;gBACJ,SAAS;aACV,CAAC,CAAC;QACL,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,GAAG,GAAG,SAAS,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC,iBAAiB,CAAC;gBAC5B,iBAAiB,EAAE;oBACjB,IAAI,EAAE,mBAAW,CAAC,OAAO;oBACzB,OAAO,EAAE,OAAO,GAAG,CAAC,WAAW,EAAE,6BAA6B,SAAS,CAAC,WAAW,EAAE,GAAG;iBACzF;gBACD,IAAI;gBACJ,SAAS;gBACT,QAAQ,EAAE,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,WAAW,EAAE,EAAE;aACjF,CAAC,CAAC;QACL,CAAC;QAED,OAAO,IAAA,iBAAO,EAAC,MAAM,CAAC,CAAC;IACzB,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAC,MAI/B;QACC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;QAEhD,kEAAkE;QAClE,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAC7E,OAAO,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,CAAC;QAAC,OAAO,UAAU,EAAE,CAAC;YACpB,MAAM,KAAK,GAAG,IAAA,iBAAO,EAAC,UAAU,CAAC,CAAC;YAClC,IAAI,QAAQ,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC9C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,SAAS,2BAA2B,EAAE,SAAS,CAAC,CAAC;gBAC/E,OAAO,EAAE,CAAC;YACZ,CAAC;YAED,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAEO,iBAAiB,CAAC,MAIzB;QACC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,MAAM,CAAC;QAEjD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,SAAS,UAAU,EAAE;YACjD,GAAG,SAAS;YACZ,YAAY,EAAE;gBACZ,GAAG,IAAI;gBACP,kDAAkD;gBAClD,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;gBAClC,IAAI,EAAE,IAAA,eAAM,EAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,SAAS,EAAE,YAAY,EAAE,CAAC;aAC7D;SACF,CAAC,CAAC;IACL,CAAC;IAEO,kBAAkB,CAAC,MAK1B;QACC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;QAEjD,IAAI,EAAE,OAAO,CAAC;YACZ,aAAa,EAAE,EAAE;YACjB,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,SAAS,WAAW,EAAE,EAAE,GAAG,SAAS,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QAEpF,OAAO,EAAE,CAAC;IACZ,CAAC;CACF;AA9YD,gDA8YC"}
|
package/src/lib/types.d.ts
CHANGED
|
@@ -139,17 +139,27 @@ export interface TriggerRequest {
|
|
|
139
139
|
idempotencyKey: string;
|
|
140
140
|
/** Array of data keys to redact in logs for privacy. */
|
|
141
141
|
keysToRedact?: string[];
|
|
142
|
-
/**
|
|
142
|
+
/**
|
|
143
|
+
* Expiration timestamp after which the request is dropped. Use this to prevent stale
|
|
144
|
+
* notifications. If, for example, you're notifying about an event that starts in one hour, you
|
|
145
|
+
* might set this to one hour from now.
|
|
146
|
+
*
|
|
147
|
+
* If you're triggering from a background job, don't set this at the call site! Set it when you
|
|
148
|
+
* enqueue the job. Otherwise, it gets updated each time the job retries, will always be in the
|
|
149
|
+
* future, and won't prevent stale notifications.
|
|
150
|
+
*/
|
|
143
151
|
expiresAt: Date;
|
|
144
|
-
/** Attempt number for
|
|
152
|
+
/** Attempt number for tracing. */
|
|
145
153
|
attempt: number;
|
|
146
154
|
}
|
|
147
155
|
/**
|
|
148
156
|
* Response from triggering a notification.
|
|
149
157
|
*/
|
|
150
158
|
export interface TriggerResponse {
|
|
151
|
-
/** Third-party provider's unique identifier. */
|
|
159
|
+
/** Third-party provider's unique identifier (first chunk for backwards compatibility). */
|
|
152
160
|
id: string;
|
|
161
|
+
/** Array of all workflow run IDs (one per chunk). */
|
|
162
|
+
ids: string[];
|
|
153
163
|
}
|
|
154
164
|
/**
|
|
155
165
|
* Request parameters for appending a push token.
|