@clipboard-health/notifications 2.5.21 → 2.6.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 CHANGED
@@ -4,12 +4,191 @@ Send notifications through third-party providers.
4
4
 
5
5
  ## Table of contents <!-- omit from toc -->
6
6
 
7
+ - [`triggerChunked`](#triggerchunked)
8
+ - [`trigger`](#trigger)
7
9
  - [Local development commands](#local-development-commands)
8
10
 
9
11
  <embedex source="packages/notifications/examples/usage.md">
10
12
 
13
+ ## `triggerChunked`
14
+
15
+ `triggerChunked` stores the full, immutable trigger request at job enqueue time, eliminating issues with stale data, chunking requests to stay under provider limits, and idempotency key conflicts that can occur if the request is updated at job execution time.
16
+
17
+ 1. Search your service for `triggerNotification.constants.ts`, `triggerNotification.job.ts` and `notifications.service.ts`. If they don't exist, create them:
18
+
19
+ ```ts
20
+ // triggerNotification.constants.ts
21
+ export const TRIGGER_NOTIFICATION_JOB_NAME = "TriggerNotificationJob";
22
+ ```
23
+
24
+ ```ts
25
+ // triggerNotification.job.ts
26
+ import { type BaseHandler } from "@clipboard-health/background-jobs-adapter";
27
+ import {
28
+ type SerializableTriggerChunkedRequest,
29
+ toTriggerChunkedRequest,
30
+ } from "@clipboard-health/notifications";
31
+ import { isFailure } from "@clipboard-health/util-ts";
32
+
33
+ import { type NotificationsService } from "./notifications.service";
34
+ import { CBHLogger } from "./setup";
35
+ import { TRIGGER_NOTIFICATION_JOB_NAME } from "./triggerNotification.constants";
36
+
37
+ /**
38
+ * For mongo-jobs, implement HandlerInterface<SerializableTriggerChunkedRequest>.
39
+ * For background-jobs-postgres, implement Handler<SerializableTriggerChunkedRequest>.
40
+ */
41
+ export class TriggerNotificationJob implements BaseHandler<SerializableTriggerChunkedRequest> {
42
+ public name = TRIGGER_NOTIFICATION_JOB_NAME;
43
+ private readonly logger = new CBHLogger({
44
+ defaultMeta: {
45
+ logContext: TRIGGER_NOTIFICATION_JOB_NAME,
46
+ },
47
+ });
48
+
49
+ public constructor(private readonly service: NotificationsService) {}
50
+
51
+ public async perform(
52
+ data: SerializableTriggerChunkedRequest,
53
+ job: { _id: string; attemptsCount: number; uniqueKey?: string },
54
+ ) {
55
+ const metadata = {
56
+ // Include the job's attempts count for debugging, this is called `retryAttempts` in `background-jobs-postgres`.
57
+ attempt: job.attemptsCount + 1,
58
+ jobId: job._id,
59
+ recipientCount: data.body.recipients.length,
60
+ workflowKey: data.workflowKey,
61
+ };
62
+ this.logger.info("Processing", metadata);
63
+
64
+ try {
65
+ const request = toTriggerChunkedRequest(data, {
66
+ attempt: metadata.attempt,
67
+ idempotencyKey: job.uniqueKey ?? metadata.jobId,
68
+ });
69
+ const result = await this.service.triggerChunked(request);
70
+
71
+ if (isFailure(result)) {
72
+ throw result.error;
73
+ }
74
+
75
+ this.logger.info("Success", { ...metadata, response: result.value });
76
+ } catch (error) {
77
+ this.logger.error("Failure", { ...metadata, error });
78
+ throw error;
79
+ }
80
+ }
81
+ }
82
+ ```
83
+
84
+ ```ts
85
+ // notifications.service.ts
86
+ import { NotificationClient } from "@clipboard-health/notifications";
87
+
88
+ import { CBHLogger, toLogger, tracer } from "./setup";
89
+
90
+ export class NotificationsService {
91
+ private readonly client: NotificationClient;
92
+
93
+ constructor() {
94
+ this.client = new NotificationClient({
95
+ apiKey: "YOUR_KNOCK_API_KEY",
96
+ logger: toLogger(new CBHLogger()),
97
+ tracer,
98
+ });
99
+ }
100
+
101
+ async triggerChunked(
102
+ params: Parameters<NotificationClient["triggerChunked"]>[0],
103
+ ): ReturnType<NotificationClient["triggerChunked"]> {
104
+ return await this.client.triggerChunked(params);
105
+ }
106
+ }
107
+ ```
108
+
109
+ 2. Search the service for a constant that stores workflow keys. If there isn't one, create it:
110
+
111
+ ```ts
112
+ /* eslint sort-keys: "error" */
113
+
114
+ /**
115
+ * Alphabetical list of workflow keys.
116
+ */
117
+ export const WORKFLOW_KEYS = {
118
+ eventStartingReminder: "event-starting-reminder",
119
+ } as const;
120
+ ```
121
+
122
+ 3. Build your `SerializableTriggerChunkedRequest` and enqueue your job:
123
+
124
+ ```ts
125
+ import { type BackgroundJobsAdapter } from "@clipboard-health/background-jobs-adapter";
126
+ import { type SerializableTriggerChunkedRequest } from "@clipboard-health/notifications";
127
+
128
+ import { BackgroundJobsService } from "./setup";
129
+ import { TRIGGER_NOTIFICATION_JOB_NAME } from "./triggerNotification.constants";
130
+ import { WORKFLOW_KEYS } from "./workflowKeys";
131
+
132
+ /**
133
+ * Enqueue a notification job in the same database transaction as the changes it's notifying about.
134
+ * The `session` option is called `transaction` in `background-jobs-postgres`.
135
+ */
136
+ async function enqueueTriggerNotificationJob(adapter: BackgroundJobsAdapter) {
137
+ // Assume this comes from a database and are used as template variables...
138
+ const notificationData = {
139
+ favoriteColor: "blue",
140
+ // Use @clipboard-health/date-time's formatShortDateTime in your service for consistency.
141
+ favoriteAt: new Date().toISOString(),
142
+ secret: "2",
143
+ };
144
+
145
+ const jobData: SerializableTriggerChunkedRequest = {
146
+ // Important: Read the TypeDoc documentation for additional context.
147
+ body: {
148
+ recipients: ["userId-1", "userId-2"],
149
+ data: notificationData,
150
+ },
151
+ // Helpful when controlling notifications with feature flags.
152
+ dryRun: false,
153
+ // Set expiresAt at enqueue-time so it remains stable across job retries. Use date-fns in your
154
+ // service instead of this manual calculation.
155
+ expiresAt: new Date(Date.now() + 60 * 60_000).toISOString(),
156
+ // Keys to redact from logs
157
+ keysToRedact: ["secret"],
158
+ workflowKey: WORKFLOW_KEYS.eventStartingReminder,
159
+ };
160
+
161
+ // Option 1 (default): Automatically use background job ID as idempotency key.
162
+ await adapter.enqueue(TRIGGER_NOTIFICATION_JOB_NAME, jobData, { session: "..." });
163
+
164
+ // Option 2 (advanced): Provide custom idempotency key to job and notification libraries for more
165
+ // control. You'd use this to provide enqueue-time deduplication. For example, if you enqueue when
166
+ // a user clicks a button and only want them to receive one notification.
167
+ await adapter.enqueue(TRIGGER_NOTIFICATION_JOB_NAME, jobData, {
168
+ // Called `idempotencyKey` in `background-jobs-postgres`.
169
+ unique: `meeting-123-reminder`,
170
+ session: "...",
171
+ });
172
+ }
173
+
174
+ // eslint-disable-next-line unicorn/prefer-top-level-await
175
+ void enqueueTriggerNotificationJob(
176
+ // Use your instance of `@clipboard-health/mongo-jobs` or `@clipboard-health/background-jobs-postgres` here.
177
+ new BackgroundJobsService(),
178
+ );
179
+ ```
180
+
181
+ </embedex>
182
+
183
+ ## `trigger`
184
+
185
+ > [!WARNING]
186
+ > Deprecated. See `triggerChunked`.
187
+
11
188
  1. Search your service for a `NotificationJobEnqueuer` instance. If there isn't one, create and export it:
12
189
 
190
+ <embedex source="packages/notifications/examples/notificationJobEnqueuer.ts">
191
+
13
192
  ```ts
14
193
  import { NotificationJobEnqueuer } from "@clipboard-health/notifications";
15
194
 
@@ -22,8 +201,12 @@ Send notifications through third-party providers.
22
201
  });
23
202
  ```
24
203
 
204
+ </embedex>
205
+
25
206
  2. Add types and the job name to the module's logic directory if it exists, else module root. You MUST create and use the `...DataJob` and `...DataEnqueue` types:
26
207
 
208
+ <embedex source="packages/notifications/examples/exampleNotification.constants.ts">
209
+
27
210
  ```ts
28
211
  import { type NotificationData } from "@clipboard-health/notifications";
29
212
 
@@ -39,8 +222,12 @@ Send notifications through third-party providers.
39
222
  export const EXAMPLE_NOTIFICATION_JOB_NAME = "ExampleNotificationJob";
40
223
  ```
41
224
 
225
+ </embedex>
226
+
42
227
  3. Implement a minimal job in the module's logic/job directory if it exists, else module root. The job calls off to a NestJS service for any business logic and to send the notification:
43
228
 
229
+ <embedex source="packages/notifications/examples/exampleNotification.job.ts">
230
+
44
231
  ```ts
45
232
  import { type BaseHandler } from "@clipboard-health/background-jobs-adapter";
46
233
  import { isFailure } from "@clipboard-health/util-ts";
@@ -91,16 +278,29 @@ Send notifications through third-party providers.
91
278
  }
92
279
  ```
93
280
 
94
- 4. Search the service for a constant that stores workflow keys. If there isn't one, create and export it. You MUST insert the key in alphabetical order:
281
+ </embedex>
282
+
283
+ 4. Search the service for a constant that stores workflow keys. If there isn't one, create and export it:
284
+
285
+ <embedex source="packages/notifications/examples/workflowKeys.ts">
95
286
 
96
287
  ```ts
288
+ /* eslint sort-keys: "error" */
289
+
290
+ /**
291
+ * Alphabetical list of workflow keys.
292
+ */
97
293
  export const WORKFLOW_KEYS = {
98
294
  eventStartingReminder: "event-starting-reminder",
99
295
  } as const;
100
296
  ```
101
297
 
298
+ </embedex>
299
+
102
300
  5. Enqueue the job:
103
301
 
302
+ <embedex source="packages/notifications/examples/enqueueNotificationJob.ts">
303
+
104
304
  ```ts
105
305
  import {
106
306
  EXAMPLE_NOTIFICATION_JOB_NAME,
@@ -141,8 +341,12 @@ Send notifications through third-party providers.
141
341
  void enqueueNotificationJob();
142
342
  ```
143
343
 
344
+ </embedex>
345
+
144
346
  6. Create the NestJS service in the module's logic directory if it exists, else module root. Trigger the NotificationClient:
145
347
 
348
+ <embedex source="packages/notifications/examples/exampleNotification.service.ts">
349
+
146
350
  ```ts
147
351
  import { type NotificationClient } from "@clipboard-health/notifications";
148
352
 
@@ -177,7 +381,7 @@ Send notifications through third-party providers.
177
381
  }
178
382
  ```
179
383
 
180
- </embedex>
384
+ </embedex>
181
385
 
182
386
  ## Local development commands
183
387
 
package/package.json CHANGED
@@ -1,17 +1,17 @@
1
1
  {
2
2
  "name": "@clipboard-health/notifications",
3
3
  "description": "Send notifications through third-party providers.",
4
- "version": "2.5.21",
4
+ "version": "2.6.0",
5
5
  "bugs": "https://github.com/ClipboardHealth/core-utils/issues",
6
6
  "dependencies": {
7
- "@clipboard-health/background-jobs-adapter": "1.5.21",
8
- "@clipboard-health/phone-number": "1.5.21",
9
- "@clipboard-health/util-ts": "4.5.21",
7
+ "@clipboard-health/background-jobs-adapter": "1.6.0",
8
+ "@clipboard-health/phone-number": "1.6.0",
9
+ "@clipboard-health/util-ts": "4.6.0",
10
10
  "@knocklabs/node": "1.24.0",
11
11
  "tslib": "2.8.1"
12
12
  },
13
13
  "devDependencies": {
14
- "@clipboard-health/testing-core": "1.5.21",
14
+ "@clipboard-health/testing-core": "1.6.0",
15
15
  "type-fest": "5.3.1"
16
16
  },
17
17
  "keywords": [],
package/src/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  export * from "./lib/errorsInResult";
2
2
  export * from "./lib/notificationClient";
3
3
  export * from "./lib/notificationJobEnqueuer";
4
+ export * from "./lib/toTriggerChunkedRequest";
4
5
  export * from "./lib/triggerIdempotencyKey";
5
6
  export * from "./lib/types";
package/src/index.js CHANGED
@@ -4,6 +4,7 @@ const tslib_1 = require("tslib");
4
4
  tslib_1.__exportStar(require("./lib/errorsInResult"), exports);
5
5
  tslib_1.__exportStar(require("./lib/notificationClient"), exports);
6
6
  tslib_1.__exportStar(require("./lib/notificationJobEnqueuer"), exports);
7
+ tslib_1.__exportStar(require("./lib/toTriggerChunkedRequest"), exports);
7
8
  tslib_1.__exportStar(require("./lib/triggerIdempotencyKey"), exports);
8
9
  tslib_1.__exportStar(require("./lib/types"), exports);
9
10
  //# sourceMappingURL=index.js.map
package/src/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/notifications/src/index.ts"],"names":[],"mappings":";;;AAAA,+DAAqC;AACrC,mEAAyC;AACzC,wEAA8C;AAC9C,sEAA4C;AAC5C,sDAA4B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/notifications/src/index.ts"],"names":[],"mappings":";;;AAAA,+DAAqC;AACrC,mEAAyC;AACzC,wEAA8C;AAC9C,wEAA8C;AAC9C,sEAA4C;AAC5C,sDAA4B"}
@@ -1,18 +1,22 @@
1
1
  /**
2
- * Chunks recipients into groups that don't exceed the maximum recipients count,
3
- * assigning a unique chunk number to each group.
2
+ * Maximum number of recipients allowed per trigger request.
3
+ */
4
+ export declare const MAXIMUM_RECIPIENTS_COUNT = 1000;
5
+ /**
6
+ * Chunks recipients into groups that don't exceed the maximum recipients count, assigning a unique
7
+ * chunk number to each group.
4
8
  *
5
- * This function is used to split large recipient lists into smaller batches that
6
- * comply with notification provider limits. Each chunk is numbered sequentially
7
- * starting from 1.
9
+ * This function is used to split large recipient lists into smaller batches that comply with
10
+ * notification provider limits. Each chunk is numbered sequentially starting from 1.
8
11
  *
9
12
  * @param params - The chunking parameters
10
- * @param params.recipients - Array of recipient IDs to chunk
13
+ * @param params.recipients - Array of recipient requests to chunk (can be user IDs or inline
14
+ * identify requests)
11
15
  * @returns Array of chunks, each containing a chunk number and recipients array
12
16
  */
13
- export declare function chunkRecipients(params: {
14
- recipients: string[];
17
+ export declare function chunkRecipients<T>(params: {
18
+ recipients: T[];
15
19
  }): Array<{
16
20
  number: number;
17
- recipients: string[];
21
+ recipients: T[];
18
22
  }>;
@@ -1,18 +1,22 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MAXIMUM_RECIPIENTS_COUNT = void 0;
3
4
  exports.chunkRecipients = chunkRecipients;
4
5
  const util_ts_1 = require("@clipboard-health/util-ts");
5
- const notificationClient_1 = require("../notificationClient");
6
6
  /**
7
- * Chunks recipients into groups that don't exceed the maximum recipients count,
8
- * assigning a unique chunk number to each group.
7
+ * Maximum number of recipients allowed per trigger request.
8
+ */
9
+ exports.MAXIMUM_RECIPIENTS_COUNT = 1000;
10
+ /**
11
+ * Chunks recipients into groups that don't exceed the maximum recipients count, assigning a unique
12
+ * chunk number to each group.
9
13
  *
10
- * This function is used to split large recipient lists into smaller batches that
11
- * comply with notification provider limits. Each chunk is numbered sequentially
12
- * starting from 1.
14
+ * This function is used to split large recipient lists into smaller batches that comply with
15
+ * notification provider limits. Each chunk is numbered sequentially starting from 1.
13
16
  *
14
17
  * @param params - The chunking parameters
15
- * @param params.recipients - Array of recipient IDs to chunk
18
+ * @param params.recipients - Array of recipient requests to chunk (can be user IDs or inline
19
+ * identify requests)
16
20
  * @returns Array of chunks, each containing a chunk number and recipients array
17
21
  */
18
22
  function chunkRecipients(params) {
@@ -20,7 +24,7 @@ function chunkRecipients(params) {
20
24
  if (recipients.length === 0) {
21
25
  return [{ number: 1, recipients: [] }];
22
26
  }
23
- return (0, util_ts_1.chunk)(recipients, notificationClient_1.MAXIMUM_RECIPIENTS_COUNT).map((recipientsChunk, index) => ({
27
+ return (0, util_ts_1.chunk)(recipients, exports.MAXIMUM_RECIPIENTS_COUNT).map((recipientsChunk, index) => ({
24
28
  number: index + 1,
25
29
  recipients: recipientsChunk,
26
30
  }));
@@ -1 +1 @@
1
- {"version":3,"file":"chunkRecipients.js","sourceRoot":"","sources":["../../../../../../packages/notifications/src/lib/internal/chunkRecipients.ts"],"names":[],"mappings":";;AAgBA,0CAaC;AA7BD,uDAAkD;AAElD,8DAAiE;AAEjE;;;;;;;;;;;GAWG;AACH,SAAgB,eAAe,CAAC,MAE/B;IACC,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;IAE9B,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,OAAO,IAAA,eAAK,EAAC,UAAU,EAAE,6CAAwB,CAAC,CAAC,GAAG,CAAC,CAAC,eAAe,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QAClF,MAAM,EAAE,KAAK,GAAG,CAAC;QACjB,UAAU,EAAE,eAAe;KAC5B,CAAC,CAAC,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"chunkRecipients.js","sourceRoot":"","sources":["../../../../../../packages/notifications/src/lib/internal/chunkRecipients.ts"],"names":[],"mappings":";;;AAmBA,0CAaC;AAhCD,uDAAkD;AAElD;;GAEG;AACU,QAAA,wBAAwB,GAAG,IAAI,CAAC;AAE7C;;;;;;;;;;;GAWG;AACH,SAAgB,eAAe,CAAI,MAElC;IACC,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;IAE9B,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,OAAO,IAAA,eAAK,EAAC,UAAU,EAAE,gCAAwB,CAAC,CAAC,GAAG,CAAC,CAAC,eAAe,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QAClF,MAAM,EAAE,KAAK,GAAG,CAAC;QACjB,UAAU,EAAE,eAAe;KAC5B,CAAC,CAAC,CAAC;AACN,CAAC"}
@@ -1,3 +1,7 @@
1
- import type { LogParams, TriggerRequest } from "../types";
2
- export type TriggerLogContext = LogParams & Pick<TriggerRequest, "attempt" | "dryRun" | "idempotencyKey" | "workflowKey">;
3
- export declare function createTriggerLogParams(params: TriggerRequest & LogParams): TriggerLogContext;
1
+ import type { LogParams, TriggerChunkedRequest, TriggerRequest } from "../types";
2
+ export type TriggerLogContext = LogParams & Pick<TriggerRequest, "attempt" | "dryRun" | "workflowKey"> & {
3
+ idempotencyKey: string;
4
+ };
5
+ type TriggerLogParamsInput = (TriggerRequest | TriggerChunkedRequest) & LogParams;
6
+ export declare function createTriggerLogParams(params: TriggerLogParamsInput): TriggerLogContext;
7
+ export {};
@@ -1 +1 @@
1
- {"version":3,"file":"createTriggerLogParams.js","sourceRoot":"","sources":["../../../../../../packages/notifications/src/lib/internal/createTriggerLogParams.ts"],"names":[],"mappings":";;AAKA,wDAWC;AAXD,SAAgB,sBAAsB,CAAC,MAAkC;IACvE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;IAEhG,OAAO;QACL,OAAO;QACP,WAAW;QACX,MAAM;QACN,cAAc;QACd,WAAW;QACX,SAAS;KACV,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"createTriggerLogParams.js","sourceRoot":"","sources":["../../../../../../packages/notifications/src/lib/internal/createTriggerLogParams.ts"],"names":[],"mappings":";;AASA,wDAWC;AAXD,SAAgB,sBAAsB,CAAC,MAA6B;IAClE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;IAEhG,OAAO;QACL,OAAO;QACP,WAAW;QACX,MAAM;QACN,cAAc;QACd,WAAW;QACX,SAAS;KACV,CAAC;AACJ,CAAC"}
@@ -1,3 +1,3 @@
1
1
  import { type Knock } from "@knocklabs/node";
2
- import { type InlineIdentifyUserRequest } from "../types";
2
+ import type { InlineIdentifyUserRequest } from "../types";
3
3
  export declare function toInlineIdentifyUserRequest(recipient: InlineIdentifyUserRequest): Knock.Users.InlineIdentifyUserRequest;
@@ -1,3 +1,5 @@
1
1
  import { type Knock } from "@knocklabs/node";
2
2
  import type { InlineIdentifyUserRequest } from "../types";
3
- export declare function toInlineIdentifyUserRequestWithoutUserId(recipient: Omit<InlineIdentifyUserRequest, "userId">): Omit<Knock.Users.InlineIdentifyUserRequest, "id">;
3
+ type RecipientWithoutUserId = Omit<InlineIdentifyUserRequest, "userId">;
4
+ export declare function toInlineIdentifyUserRequestWithoutUserId(recipient: RecipientWithoutUserId): Omit<Knock.Users.InlineIdentifyUserRequest, "id">;
5
+ export {};
@@ -1 +1 @@
1
- {"version":3,"file":"toInlineIdentifyUserRequestWithoutUserId.js","sourceRoot":"","sources":["../../../../../../packages/notifications/src/lib/internal/toInlineIdentifyUserRequestWithoutUserId.ts"],"names":[],"mappings":";;AAKA,4FAgBC;AAlBD,2DAAwD;AAExD,SAAgB,wCAAwC,CACtD,SAAoD;IAEpD,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,gBAAgB,EAAE,GAAG,IAAI,EAAE,GAC7F,SAAS,CAAC;IAEZ,OAAO;QACL,GAAG,IAAI;QACP,GAAG,gBAAgB;QACnB,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,SAAS,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3B,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzB,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAA,qCAAiB,EAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5E,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5C,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"toInlineIdentifyUserRequestWithoutUserId.js","sourceRoot":"","sources":["../../../../../../packages/notifications/src/lib/internal/toInlineIdentifyUserRequestWithoutUserId.ts"],"names":[],"mappings":";;AAOA,4FAgBC;AApBD,2DAAwD;AAIxD,SAAgB,wCAAwC,CACtD,SAAiC;IAEjC,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,gBAAgB,EAAE,GAAG,IAAI,EAAE,GAC7F,SAAS,CAAC;IAEZ,OAAO;QACL,GAAG,IAAI;QACP,GAAG,gBAAgB;QACnB,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,SAAS,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3B,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzB,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAA,qCAAiB,EAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5E,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5C,CAAC;AACJ,CAAC"}
@@ -1,8 +1,8 @@
1
1
  import { type LogFunction, type ServiceResult } from "@clipboard-health/util-ts";
2
- import type { AppendPushTokenRequest, AppendPushTokenResponse, LogParams, NotificationClientParams, SignUserTokenRequest, SignUserTokenResponse, Span, TriggerRequest, TriggerResponse, UpsertUserPreferencesRequest, UpsertUserPreferencesResponse, UpsertWorkplaceRequest, UpsertWorkplaceResponse } from "./types";
3
- export declare const MAXIMUM_RECIPIENTS_COUNT = 1000;
2
+ import { type AppendPushTokenRequest, type AppendPushTokenResponse, type LogParams, type NotificationClientParams, type SignUserTokenRequest, type SignUserTokenResponse, type Span, type TriggerChunkedRequest, type TriggerChunkedResponse, type TriggerRequest, type TriggerResponse, type UpsertUserPreferencesRequest, type UpsertUserPreferencesResponse, type UpsertWorkplaceRequest, type UpsertWorkplaceResponse } from "./types";
4
3
  export declare const ERROR_CODES: {
5
4
  readonly expired: "expired";
5
+ readonly invalidExpiresAt: "invalidExpiresAt";
6
6
  readonly invalidIdempotencyKey: "invalidIdempotencyKey";
7
7
  readonly recipientCountBelowMinimum: "recipientCountBelowMinimum";
8
8
  readonly recipientCountAboveMaximum: "recipientCountAboveMaximum";
@@ -78,6 +78,24 @@ export declare class NotificationClient {
78
78
  * </embedex>
79
79
  */
80
80
  trigger(params: TriggerRequest): Promise<ServiceResult<TriggerResponse>>;
81
+ /**
82
+ * Triggers a notification with automatic chunking for large recipient lists.
83
+ *
84
+ * This method handles:
85
+ * - Automatic chunking of recipients into groups of MAXIMUM_RECIPIENTS_COUNT.
86
+ * - Idempotency using `${idempotencyKey}-${chunkNumber}` for each chunk.
87
+ * - Stale notifications prevention through expiresAt.
88
+ * - Logging with sensitive data redaction.
89
+ * - Distributed tracing with notification metadata.
90
+ *
91
+ * Use this method from background jobs where you want to:
92
+ * - Store the full serializable request at enqueue time (no stale data issues).
93
+ * - Use the background job ID as the idempotency key base.
94
+ * - Not worry about recipient count limits.
95
+ *
96
+ * @returns Promise resolving to either an error or successful response with all chunk results.
97
+ */
98
+ triggerChunked(params: TriggerChunkedRequest): Promise<ServiceResult<TriggerChunkedResponse>>;
81
99
  /**
82
100
  * Append to a user's push tokens.
83
101
  *
@@ -112,6 +130,7 @@ export declare class NotificationClient {
112
130
  metadata?: Record<string, unknown>;
113
131
  }): ServiceResult<never>;
114
132
  private validateTriggerRequest;
133
+ private validateTriggerChunkedRequest;
115
134
  private getExistingTokens;
116
135
  private logTriggerRequest;
117
136
  private logTriggerResponse;
@@ -1,8 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.NotificationClient = exports.ERROR_CODES = exports.MAXIMUM_RECIPIENTS_COUNT = void 0;
3
+ exports.NotificationClient = exports.ERROR_CODES = void 0;
4
4
  const util_ts_1 = require("@clipboard-health/util-ts");
5
5
  const node_1 = require("@knocklabs/node");
6
+ const chunkRecipients_1 = require("./internal/chunkRecipients");
6
7
  const createTriggerLogParams_1 = require("./internal/createTriggerLogParams");
7
8
  const createTriggerTraceOptions_1 = require("./internal/createTriggerTraceOptions");
8
9
  const idempotentKnock_1 = require("./internal/idempotentKnock");
@@ -17,6 +18,10 @@ const LOG_PARAMS = {
17
18
  traceName: "notifications.trigger",
18
19
  destination: "knock.workflows.trigger",
19
20
  },
21
+ triggerChunked: {
22
+ traceName: "notifications.triggerChunked",
23
+ destination: "knock.workflows.trigger",
24
+ },
20
25
  appendPushToken: {
21
26
  traceName: "notifications.appendPushToken",
22
27
  destination: "knock.users.setChannelData",
@@ -34,9 +39,9 @@ const LOG_PARAMS = {
34
39
  destination: "knock.users.setPreferences",
35
40
  },
36
41
  };
37
- exports.MAXIMUM_RECIPIENTS_COUNT = 1000;
38
42
  exports.ERROR_CODES = {
39
43
  expired: "expired",
44
+ invalidExpiresAt: "invalidExpiresAt",
40
45
  invalidIdempotencyKey: "invalidIdempotencyKey",
41
46
  recipientCountBelowMinimum: "recipientCountBelowMinimum",
42
47
  recipientCountAboveMaximum: "recipientCountAboveMaximum",
@@ -156,6 +161,98 @@ class NotificationClient {
156
161
  }
157
162
  });
158
163
  }
164
+ /**
165
+ * Triggers a notification with automatic chunking for large recipient lists.
166
+ *
167
+ * This method handles:
168
+ * - Automatic chunking of recipients into groups of MAXIMUM_RECIPIENTS_COUNT.
169
+ * - Idempotency using `${idempotencyKey}-${chunkNumber}` for each chunk.
170
+ * - Stale notifications prevention through expiresAt.
171
+ * - Logging with sensitive data redaction.
172
+ * - Distributed tracing with notification metadata.
173
+ *
174
+ * Use this method from background jobs where you want to:
175
+ * - Store the full serializable request at enqueue time (no stale data issues).
176
+ * - Use the background job ID as the idempotency key base.
177
+ * - Not worry about recipient count limits.
178
+ *
179
+ * @returns Promise resolving to either an error or successful response with all chunk results.
180
+ */
181
+ async triggerChunked(params) {
182
+ const logParams = (0, createTriggerLogParams_1.createTriggerLogParams)({ ...params, ...LOG_PARAMS.triggerChunked });
183
+ return await this.tracer.trace(logParams.traceName, (0, createTriggerTraceOptions_1.createTriggerTraceOptions)(logParams), async (span) => {
184
+ const { body, expiresAt, idempotencyKey, keysToRedact = [], workflowKey } = params;
185
+ const { workplaceId } = body;
186
+ const validated = this.validateTriggerChunkedRequest({
187
+ body,
188
+ expiresAt,
189
+ span,
190
+ logParams,
191
+ });
192
+ if ((0, util_ts_1.isFailure)(validated)) {
193
+ return validated;
194
+ }
195
+ this.logTriggerRequest({ logParams, body, keysToRedact });
196
+ if (params.dryRun) {
197
+ this.logTriggerResponse({ span, response: { dryRun: true }, id: "dry-run", logParams });
198
+ return (0, util_ts_1.success)({ responses: [{ chunkNumber: 1, id: "dry-run" }] });
199
+ }
200
+ const chunks = (0, chunkRecipients_1.chunkRecipients)({ recipients: body.recipients });
201
+ const responses = [];
202
+ // Sequential execution is intentional - we want to fail fast on error and track progress
203
+ for (const recipientChunk of chunks) {
204
+ try {
205
+ const chunkIdempotencyKey = `${idempotencyKey}-${recipientChunk.number}`;
206
+ const chunkBody = {
207
+ ...body,
208
+ recipients: recipientChunk.recipients,
209
+ };
210
+ const triggerBody = (0, toTriggerBody_1.toTriggerBody)(chunkBody);
211
+ // eslint-disable-next-line no-await-in-loop
212
+ const response = await this.provider.workflows.trigger(workflowKey, triggerBody, {
213
+ idempotencyKey: chunkIdempotencyKey,
214
+ });
215
+ const id = response.workflow_run_id;
216
+ this.logger.info(`${logParams.traceName} chunk response`, {
217
+ ...logParams,
218
+ chunkNumber: recipientChunk.number,
219
+ totalChunks: chunks.length,
220
+ id,
221
+ });
222
+ responses.push({ chunkNumber: recipientChunk.number, id });
223
+ }
224
+ catch (maybeError) {
225
+ const error = (0, util_ts_1.toError)(maybeError);
226
+ return this.createAndLogError({
227
+ notificationError: {
228
+ code: exports.ERROR_CODES.unknown,
229
+ message: `Chunk ${recipientChunk.number}/${chunks.length} failed: ${error.message}`,
230
+ },
231
+ span,
232
+ logFunction: this.logger.error,
233
+ logParams,
234
+ metadata: {
235
+ error,
236
+ chunkNumber: recipientChunk.number,
237
+ totalChunks: chunks.length,
238
+ completedChunks: responses.length,
239
+ expiresAt: expiresAt.toISOString(),
240
+ workplaceId,
241
+ },
242
+ });
243
+ }
244
+ }
245
+ span?.addTags({
246
+ "response.chunks": responses.length,
247
+ success: true,
248
+ });
249
+ this.logger.info(`${logParams.traceName} response`, {
250
+ ...logParams,
251
+ responses,
252
+ });
253
+ return (0, util_ts_1.success)({ responses });
254
+ });
255
+ }
159
256
  /**
160
257
  * Append to a user's push tokens.
161
258
  *
@@ -326,12 +423,12 @@ class NotificationClient {
326
423
  logParams,
327
424
  });
328
425
  }
329
- if (body.recipients.length > exports.MAXIMUM_RECIPIENTS_COUNT) {
426
+ if (body.recipients.length > chunkRecipients_1.MAXIMUM_RECIPIENTS_COUNT) {
330
427
  const recipientsCount = body.recipients.length;
331
428
  return this.createAndLogError({
332
429
  notificationError: {
333
430
  code: exports.ERROR_CODES.recipientCountAboveMaximum,
334
- message: `Got ${recipientsCount} recipients; must be <= ${exports.MAXIMUM_RECIPIENTS_COUNT}.`,
431
+ message: `Got ${recipientsCount} recipients; must be <= ${chunkRecipients_1.MAXIMUM_RECIPIENTS_COUNT}.`,
335
432
  },
336
433
  span,
337
434
  logParams,
@@ -363,6 +460,42 @@ class NotificationClient {
363
460
  }
364
461
  return (0, util_ts_1.success)({ ...params, idempotencyKeyParams });
365
462
  }
463
+ validateTriggerChunkedRequest(params) {
464
+ const { body, expiresAt, span, logParams } = params;
465
+ if (body.recipients.length <= 0) {
466
+ return this.createAndLogError({
467
+ notificationError: {
468
+ code: exports.ERROR_CODES.recipientCountBelowMinimum,
469
+ message: `Got ${body.recipients.length} recipients; must be > 0.`,
470
+ },
471
+ span,
472
+ logParams,
473
+ });
474
+ }
475
+ if (Number.isNaN(expiresAt.getTime())) {
476
+ return this.createAndLogError({
477
+ notificationError: {
478
+ code: exports.ERROR_CODES.invalidExpiresAt,
479
+ message: `Invalid expiresAt: ${String(expiresAt)}`,
480
+ },
481
+ span,
482
+ logParams,
483
+ });
484
+ }
485
+ const now = new Date();
486
+ if (now > expiresAt) {
487
+ return this.createAndLogError({
488
+ notificationError: {
489
+ code: exports.ERROR_CODES.expired,
490
+ message: `Got ${now.toISOString()}; notification expires at ${expiresAt.toISOString()}.`,
491
+ },
492
+ span,
493
+ logParams,
494
+ metadata: { currentTime: now.toISOString(), expiresAt: expiresAt.toISOString() },
495
+ });
496
+ }
497
+ return (0, util_ts_1.success)({ expiresAt });
498
+ }
366
499
  async getExistingTokens(params) {
367
500
  const { userId, channelId, logParams } = params;
368
501
  // If existing tokens, use them; otherwise, start with empty array
@@ -1 +1 @@
1
- {"version":3,"file":"notificationClient.js","sourceRoot":"","sources":["../../../../../packages/notifications/src/lib/notificationClient.ts"],"names":[],"mappings":";;;AAAA,uDAQmC;AACnC,0CAAgD;AAEhD,8EAA2E;AAC3E,oFAAiF;AACjF,gEAA6D;AAC7D,sFAAmF;AACnF,8CAA2C;AAC3C,8EAA2E;AAC3E,sEAAmE;AACnE,4DAAyD;AACzD,oGAAiG;AAmBjG,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;IACD,qBAAqB,EAAE;QACrB,SAAS,EAAE,qCAAqC;QAChD,WAAW,EAAE,4BAA4B;KAC1C;CACF,CAAC;AAEW,QAAA,wBAAwB,GAAG,IAAI,CAAC;AAEhC,QAAA,WAAW,GAAG;IACzB,OAAO,EAAE,SAAS;IAClB,qBAAqB,EAAE,uBAAuB;IAC9C,0BAA0B,EAAE,4BAA4B;IACxD,0BAA0B,EAAE,4BAA4B;IACxD,iBAAiB,EAAE,mBAAmB;IACtC,OAAO,EAAE,SAAS;CACV,CAAC;AASX;;GAEG;AACH,MAAa,kBAAkB;IACV,MAAM,CAAqC;IAC3C,QAAQ,CAAiD;IACzD,MAAM,CAAqC;IAC7C,UAAU,CAAyC;IAEpE;;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,MAAM,CAAC,QAAQ;gBACjB,CAAC,CAAC,IAAI,iCAAe,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAkDG;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,IAAI,EAAE,oBAAoB,EAAE,YAAY,GAAG,EAAE,EAAE,WAAW,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC;gBACvF,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;gBAC7B,MAAM,WAAW,GAAG,IAAA,6BAAa,EAAC,IAAI,CAAC,CAAC;gBACxC,IAAI,CAAC,iBAAiB,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;gBAE1D,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;oBAClB,IAAI,CAAC,kBAAkB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;oBACxF,OAAO,IAAA,iBAAO,EAAC,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;gBACpC,CAAC;gBAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE,WAAW,EAAE;oBAC/E,cAAc,EAAE,IAAA,qEAAiC,EAAC;wBAChD,GAAG,oBAAoB;wBACvB,WAAW;qBACZ,CAAC;iBACH,CAAC,CAAC;gBAEH,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;gBACpC,IAAI,CAAC,kBAAkB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;gBAE3D,OAAO,IAAA,iBAAO,EAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACzB,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,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,IAAA,uCAAkB,EAAC,IAAI,CAAC,CAAC,CAAC;YAExF,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;IAED;;;;OAIG;IACI,KAAK,CAAC,qBAAqB,CAChC,MAAoC;QAEpC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;QAC1B,MAAM,SAAS,GAAG,EAAE,GAAG,UAAU,CAAC,qBAAqB,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;QAEvF,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,SAAS,UAAU,EAAE,SAAS,CAAC,CAAC;YAE9D,MAAM,eAAe,GAAG,IAAA,+CAAsB,EAAC,MAAM,CAAC,CAAC;YACvD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;YAE9F,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,SAAS,WAAW,EAAE;gBAClD,GAAG,SAAS;gBACZ,QAAQ,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE;aAC9C,CAAC,CAAC;YAEH,OAAO,IAAA,iBAAO,EAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QAC7B,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,cAAc,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;QAEpE,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,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,gCAAwB,EAAE,CAAC;YACtD,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;YAC/C,OAAO,IAAI,CAAC,iBAAiB,CAAC;gBAC5B,iBAAiB,EAAE;oBACjB,IAAI,EAAE,mBAAW,CAAC,0BAA0B;oBAC5C,OAAO,EAAE,OAAO,eAAe,2BAA2B,gCAAwB,GAAG;iBACtF;gBACD,IAAI;gBACJ,SAAS;gBACT,QAAQ,EAAE,EAAE,eAAe,EAAE;aAC9B,CAAC,CAAC;QACL,CAAC;QAED,MAAM,oBAAoB,GAAG,IAAA,uDAA0B,EAAC,EAAE,cAAc,EAAE,CAAC,CAAC;QAC5E,IAAI,oBAAoB,KAAK,KAAK,EAAE,CAAC;YACnC,OAAO,IAAI,CAAC,iBAAiB,CAAC;gBAC5B,iBAAiB,EAAE;oBACjB,IAAI,EAAE,mBAAW,CAAC,qBAAqB;oBACvC,OAAO,EAAE,4BAA4B,cAAc,EAAE;iBACtD;gBACD,IAAI;gBACJ,SAAS;aACV,CAAC,CAAC;QACL,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,SAAS,YAAY,IAAI,IAAI,GAAG,GAAG,SAAS,EAAE,CAAC;YACjD,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,EAAE,GAAG,MAAM,EAAE,oBAAoB,EAAE,CAAC,CAAC;IACtD,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;AA9aD,gDA8aC"}
1
+ {"version":3,"file":"notificationClient.js","sourceRoot":"","sources":["../../../../../packages/notifications/src/lib/notificationClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { type SerializableTriggerChunkedRequest, type TriggerChunkedRequest } from "./types";
2
+ /**
3
+ * Converts a serializable request to a TriggerChunkedRequest.
4
+ */
5
+ export declare function toTriggerChunkedRequest(request: SerializableTriggerChunkedRequest, params: {
6
+ attempt: number;
7
+ idempotencyKey: string;
8
+ }): TriggerChunkedRequest;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toTriggerChunkedRequest = toTriggerChunkedRequest;
4
+ /**
5
+ * Converts a serializable request to a TriggerChunkedRequest.
6
+ */
7
+ function toTriggerChunkedRequest(request, params) {
8
+ const { body, expiresAt, ...rest } = request;
9
+ const { actor, recipients, ...bodyRest } = body;
10
+ return {
11
+ ...rest,
12
+ attempt: params.attempt,
13
+ body: {
14
+ ...bodyRest,
15
+ ...(actor && { actor: toRecipientRequest(actor) }),
16
+ recipients: recipients.map(toRecipientRequest),
17
+ },
18
+ expiresAt: new Date(expiresAt),
19
+ idempotencyKey: params.idempotencyKey,
20
+ };
21
+ }
22
+ function toRecipientRequest(recipient) {
23
+ if (typeof recipient === "string") {
24
+ return recipient;
25
+ }
26
+ return {
27
+ ...recipient,
28
+ createdAt: recipient.createdAt ? new Date(recipient.createdAt) : undefined,
29
+ };
30
+ }
31
+ //# sourceMappingURL=toTriggerChunkedRequest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toTriggerChunkedRequest.js","sourceRoot":"","sources":["../../../../../packages/notifications/src/lib/toTriggerChunkedRequest.ts"],"names":[],"mappings":";;AAUA,0DAkBC;AArBD;;GAEG;AACH,SAAgB,uBAAuB,CACrC,OAA0C,EAC1C,MAAmD;IAEnD,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;IAC7C,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,QAAQ,EAAE,GAAG,IAAI,CAAC;IAEhD,OAAO;QACL,GAAG,IAAI;QACP,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,IAAI,EAAE;YACJ,GAAG,QAAQ;YACX,GAAG,CAAC,KAAK,IAAI,EAAE,KAAK,EAAE,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;YAClD,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,kBAAkB,CAAC;SAC/C;QACD,SAAS,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC;QAC9B,cAAc,EAAE,MAAM,CAAC,cAAc;KACtC,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,SAAuC;IACjE,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;QAClC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO;QACL,GAAG,SAAS;QACZ,SAAS,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS;KAC3E,CAAC;AACJ,CAAC"}
@@ -126,12 +126,7 @@ export interface TriggerRequest {
126
126
  attempt: number;
127
127
  /** Trigger payload. */
128
128
  body: TriggerBody;
129
- /**
130
- * If true, the notification will not be sent, but the request will be validated and logged.
131
- * Helpful when controlling notifications with feature flags.
132
- *
133
- * @default false
134
- */
129
+ /** If true, the notification will not be sent, but the request will be validated and logged. */
135
130
  dryRun?: boolean;
136
131
  /**
137
132
  * `expiresAt` prevents stale notifications across retries by dropping the request when `now >
@@ -147,11 +142,7 @@ export interface TriggerRequest {
147
142
  * @see {@link TriggerIdempotencyKey}
148
143
  */
149
144
  idempotencyKey: TriggerIdempotencyKey;
150
- /**
151
- * Array of data keys to redact in logs for privacy.
152
- *
153
- * @default []
154
- */
145
+ /** Array of data keys to redact in logs for privacy. */
155
146
  keysToRedact?: string[];
156
147
  /** Workflow key. */
157
148
  workflowKey: string;
@@ -292,3 +283,68 @@ export interface UpsertUserPreferencesRequest {
292
283
  export interface UpsertUserPreferencesResponse {
293
284
  userId: string;
294
285
  }
286
+ /**
287
+ * Serializable version of InlineIdentifyUserRequest for background job payloads.
288
+ * The only change is `createdAt` is an ISO string instead of a Date.
289
+ */
290
+ export interface SerializableInlineIdentifyUserRequest extends Omit<InlineIdentifyUserRequest, "createdAt"> {
291
+ /**
292
+ * The user's creation date as an ISO string.
293
+ */
294
+ createdAt?: string;
295
+ }
296
+ /**
297
+ * Serializable recipient request for background job payloads.
298
+ */
299
+ export type SerializableRecipientRequest = string | SerializableInlineIdentifyUserRequest;
300
+ /**
301
+ * Serializable TriggerBody for background job payloads.
302
+ * Recipients and actor use serializable types.
303
+ */
304
+ export interface SerializableTriggerBody extends Omit<TriggerBody, "recipients" | "actor"> {
305
+ /**
306
+ * The recipients to trigger the workflow for.
307
+ */
308
+ recipients: SerializableRecipientRequest[];
309
+ /**
310
+ * The trigger actor.
311
+ */
312
+ actor?: SerializableRecipientRequest;
313
+ }
314
+ /**
315
+ * Request parameters for triggerChunked.
316
+ *
317
+ * Extends SerializableTriggerChunkedRequest with job-provided fields.
318
+ */
319
+ export interface TriggerChunkedRequest extends Omit<TriggerRequest, "idempotencyKey"> {
320
+ /**
321
+ * Idempotency key base, typically the background job ID. Each chunk uses
322
+ * `${idempotencyKey}-${chunkNumber}`.
323
+ */
324
+ idempotencyKey: string;
325
+ }
326
+ /**
327
+ * Response from triggerChunked.
328
+ */
329
+ export interface TriggerChunkedResponse {
330
+ /** Results for each chunk. */
331
+ responses: Array<TriggerResponse & {
332
+ chunkNumber: number;
333
+ }>;
334
+ }
335
+ /**
336
+ * Serializable TriggerRequest for background job payloads.
337
+ *
338
+ * This is what gets enqueued in the background job. The job provides `attempt` and
339
+ * `idempotencyKey` at execution time, and `expiresAt` is an ISO string.
340
+ */
341
+ export interface SerializableTriggerChunkedRequest extends Omit<TriggerChunkedRequest, "idempotencyKey" | "attempt" | "expiresAt" | "body"> {
342
+ /** Trigger payload. */
343
+ body: SerializableTriggerBody;
344
+ /**
345
+ * `expiresAt` as an ISO string. Set at enqueue-time so it remains stable across job retries.
346
+ *
347
+ * @see {@link TriggerRequest.expiresAt}
348
+ */
349
+ expiresAt: string;
350
+ }