@clipboard-health/notifications 0.1.0 → 0.2.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 +4 -4
- package/src/lib/chunkRecipients.js +2 -2
- package/src/lib/chunkRecipients.js.map +1 -1
- package/src/lib/notificationClient.d.ts +15 -19
- package/src/lib/notificationClient.js +53 -7
- package/src/lib/notificationClient.js.map +1 -1
- package/src/lib/types.d.ts +43 -6
- package/src/lib/types.js.map +1 -1
- package/src/lib/chunk.d.ts +0 -9
- package/src/lib/chunk.js +0 -21
- package/src/lib/chunk.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@clipboard-health/notifications",
|
|
3
3
|
"description": "Send notifications through third-party providers.",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.2.0",
|
|
5
5
|
"bugs": "https://github.com/ClipboardHealth/core-utils/issues",
|
|
6
6
|
"dependencies": {
|
|
7
|
-
"@clipboard-health/phone-number": "0.2.
|
|
8
|
-
"@clipboard-health/util-ts": "3.12.
|
|
7
|
+
"@clipboard-health/phone-number": "0.2.1",
|
|
8
|
+
"@clipboard-health/util-ts": "3.12.1",
|
|
9
9
|
"@knocklabs/node": "1.16.0",
|
|
10
10
|
"tslib": "2.8.1"
|
|
11
11
|
},
|
|
12
12
|
"devDependencies": {
|
|
13
|
-
"@clipboard-health/testing-core": "0.21.
|
|
13
|
+
"@clipboard-health/testing-core": "0.21.1"
|
|
14
14
|
},
|
|
15
15
|
"keywords": [],
|
|
16
16
|
"license": "MIT",
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.chunkRecipients = chunkRecipients;
|
|
4
|
-
const
|
|
4
|
+
const util_ts_1 = require("@clipboard-health/util-ts");
|
|
5
5
|
const notificationClient_1 = require("./notificationClient");
|
|
6
6
|
function chunkRecipients(params) {
|
|
7
7
|
const { recipientIds, idempotencyKey } = params;
|
|
8
8
|
if (recipientIds.length === 0) {
|
|
9
9
|
return [{ idempotencyKey, recipientIds: [] }];
|
|
10
10
|
}
|
|
11
|
-
const idChunks = (0,
|
|
11
|
+
const idChunks = (0, util_ts_1.chunk)(recipientIds, notificationClient_1.MAXIMUM_RECIPIENTS_COUNT);
|
|
12
12
|
const singleChunk = idChunks.length === 1;
|
|
13
13
|
return idChunks.map((ids, index) => ({
|
|
14
14
|
idempotencyKey: singleChunk ? idempotencyKey : `${idempotencyKey}-chunk-${index + 1}`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunkRecipients.js","sourceRoot":"","sources":["../../../../../packages/notifications/src/lib/chunkRecipients.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"chunkRecipients.js","sourceRoot":"","sources":["../../../../../packages/notifications/src/lib/chunkRecipients.ts"],"names":[],"mappings":";;AAIA,0CAgBC;AApBD,uDAAkD;AAElD,6DAAgE;AAEhE,SAAgB,eAAe,CAAC,MAG/B;IACC,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,GAAG,MAAM,CAAC;IAEhD,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,EAAE,cAAc,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,QAAQ,GAAG,IAAA,eAAK,EAAC,YAAY,EAAE,6CAAwB,CAAC,CAAC;IAC/D,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC;IAC1C,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QACnC,cAAc,EAAE,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,cAAc,UAAU,KAAK,GAAG,CAAC,EAAE;QACrF,YAAY,EAAE,GAAG;KAClB,CAAC,CAAC,CAAC;AACN,CAAC"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { type
|
|
2
|
-
import {
|
|
3
|
-
import type { AppendPushTokenRequest, AppendPushTokenResponse, Tracer, TriggerRequest, TriggerResponse, UpsertWorkplaceRequest, UpsertWorkplaceResponse } from "./types";
|
|
1
|
+
import { type ServiceResult } from "@clipboard-health/util-ts";
|
|
2
|
+
import type { AppendPushTokenRequest, AppendPushTokenResponse, NotificationClientParams, SignUserTokenRequest, SignUserTokenResponse, TriggerRequest, TriggerResponse, UpsertWorkplaceRequest, UpsertWorkplaceResponse } from "./types";
|
|
4
3
|
export declare const MAXIMUM_RECIPIENTS_COUNT = 1000;
|
|
5
4
|
export declare const ERROR_CODES: {
|
|
6
|
-
readonly recipientCountBelowMinimum: "recipientCountBelowMinimum";
|
|
7
|
-
readonly recipientCountAboveMaximum: "recipientCountAboveMaximum";
|
|
8
5
|
readonly expired: "expired";
|
|
6
|
+
readonly recipientCountAboveMaximum: "recipientCountAboveMaximum";
|
|
7
|
+
readonly recipientCountBelowMinimum: "recipientCountBelowMinimum";
|
|
8
|
+
readonly missingSigningKey: "missingSigningKey";
|
|
9
9
|
readonly unknown: "unknown";
|
|
10
10
|
};
|
|
11
11
|
export type ErrorCode = (typeof ERROR_CODES)[keyof typeof ERROR_CODES];
|
|
@@ -15,24 +15,12 @@ export type ErrorCode = (typeof ERROR_CODES)[keyof typeof ERROR_CODES];
|
|
|
15
15
|
export declare class NotificationClient {
|
|
16
16
|
private readonly logger;
|
|
17
17
|
private readonly provider;
|
|
18
|
+
private readonly signingKey;
|
|
18
19
|
private readonly tracer;
|
|
19
20
|
/**
|
|
20
21
|
* Creates a new NotificationClient instance.
|
|
21
|
-
*
|
|
22
|
-
* @param params.apiKey - API key for the third-party provider.
|
|
23
|
-
* @param params.logger - Logger instance for structured logging.
|
|
24
|
-
* @param params.tracer - Tracer instance for distributed tracing.
|
|
25
22
|
*/
|
|
26
|
-
constructor(params:
|
|
27
|
-
logger: Logger;
|
|
28
|
-
tracer: Tracer;
|
|
29
|
-
} & ({
|
|
30
|
-
provider?: never;
|
|
31
|
-
apiKey: string;
|
|
32
|
-
} | {
|
|
33
|
-
provider: IdempotentKnock;
|
|
34
|
-
apiKey?: never;
|
|
35
|
-
}));
|
|
23
|
+
constructor(params: NotificationClientParams);
|
|
36
24
|
/**
|
|
37
25
|
* Triggers a notification through third-party providers.
|
|
38
26
|
*
|
|
@@ -95,6 +83,14 @@ export declare class NotificationClient {
|
|
|
95
83
|
* @returns Promise resolving to either an error or successful response.
|
|
96
84
|
*/
|
|
97
85
|
appendPushToken(params: AppendPushTokenRequest): Promise<ServiceResult<AppendPushTokenResponse>>;
|
|
86
|
+
/**
|
|
87
|
+
* Sign a user token for enhanced security.
|
|
88
|
+
*
|
|
89
|
+
* @see {@link https://docs.knock.app/in-app-ui/security-and-authentication#authentication-with-enhanced-security}
|
|
90
|
+
*
|
|
91
|
+
* @returns Promise resolving to either an error or successful response.
|
|
92
|
+
*/
|
|
93
|
+
signUserToken(params: SignUserTokenRequest): Promise<ServiceResult<SignUserTokenResponse>>;
|
|
98
94
|
/**
|
|
99
95
|
* Updates or creates a workplace (tenant) in Knock.
|
|
100
96
|
*
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.NotificationClient = exports.ERROR_CODES = exports.MAXIMUM_RECIPIENTS_COUNT = void 0;
|
|
4
4
|
const util_ts_1 = require("@clipboard-health/util-ts");
|
|
5
|
+
const node_1 = require("@knocklabs/node");
|
|
5
6
|
const createTriggerLogParams_1 = require("./internal/createTriggerLogParams");
|
|
6
7
|
const createTriggerTraceOptions_1 = require("./internal/createTriggerTraceOptions");
|
|
7
8
|
const formatPhoneNumber_1 = require("./internal/formatPhoneNumber");
|
|
@@ -21,12 +22,17 @@ const LOG_PARAMS = {
|
|
|
21
22
|
traceName: "notifications.upsertWorkplace",
|
|
22
23
|
destination: "knock.tenants.set",
|
|
23
24
|
},
|
|
25
|
+
signUserToken: {
|
|
26
|
+
traceName: "notifications.signUserToken",
|
|
27
|
+
destination: "knock.signUserToken",
|
|
28
|
+
},
|
|
24
29
|
};
|
|
25
30
|
exports.MAXIMUM_RECIPIENTS_COUNT = 1000;
|
|
26
31
|
exports.ERROR_CODES = {
|
|
27
|
-
recipientCountBelowMinimum: "recipientCountBelowMinimum",
|
|
28
|
-
recipientCountAboveMaximum: "recipientCountAboveMaximum",
|
|
29
32
|
expired: "expired",
|
|
33
|
+
recipientCountAboveMaximum: "recipientCountAboveMaximum",
|
|
34
|
+
recipientCountBelowMinimum: "recipientCountBelowMinimum",
|
|
35
|
+
missingSigningKey: "missingSigningKey",
|
|
30
36
|
unknown: "unknown",
|
|
31
37
|
};
|
|
32
38
|
/**
|
|
@@ -35,18 +41,16 @@ exports.ERROR_CODES = {
|
|
|
35
41
|
class NotificationClient {
|
|
36
42
|
logger;
|
|
37
43
|
provider;
|
|
44
|
+
signingKey;
|
|
38
45
|
tracer;
|
|
39
46
|
/**
|
|
40
47
|
* Creates a new NotificationClient instance.
|
|
41
|
-
*
|
|
42
|
-
* @param params.apiKey - API key for the third-party provider.
|
|
43
|
-
* @param params.logger - Logger instance for structured logging.
|
|
44
|
-
* @param params.tracer - Tracer instance for distributed tracing.
|
|
45
48
|
*/
|
|
46
49
|
constructor(params) {
|
|
47
|
-
const { logger, tracer } = params;
|
|
50
|
+
const { logger, signingKey, tracer } = params;
|
|
48
51
|
this.logger = logger;
|
|
49
52
|
this.tracer = tracer;
|
|
53
|
+
this.signingKey = signingKey;
|
|
50
54
|
this.provider =
|
|
51
55
|
"provider" in params
|
|
52
56
|
? // eslint-disable-next-line unicorn/consistent-destructuring
|
|
@@ -180,6 +184,48 @@ class NotificationClient {
|
|
|
180
184
|
});
|
|
181
185
|
}
|
|
182
186
|
}
|
|
187
|
+
/**
|
|
188
|
+
* Sign a user token for enhanced security.
|
|
189
|
+
*
|
|
190
|
+
* @see {@link https://docs.knock.app/in-app-ui/security-and-authentication#authentication-with-enhanced-security}
|
|
191
|
+
*
|
|
192
|
+
* @returns Promise resolving to either an error or successful response.
|
|
193
|
+
*/
|
|
194
|
+
async signUserToken(params) {
|
|
195
|
+
const { userId, expiresInSeconds = 3600 } = params;
|
|
196
|
+
const logParams = { ...LOG_PARAMS.signUserToken, userId, expiresInSeconds };
|
|
197
|
+
if (!this.signingKey) {
|
|
198
|
+
return this.createAndLogError({
|
|
199
|
+
notificationError: {
|
|
200
|
+
code: exports.ERROR_CODES.missingSigningKey,
|
|
201
|
+
message: "Missing signing key.",
|
|
202
|
+
},
|
|
203
|
+
logParams,
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
try {
|
|
207
|
+
this.logger.info(`${logParams.traceName} request`, logParams);
|
|
208
|
+
const response = await (0, node_1.signUserToken)(userId, {
|
|
209
|
+
signingKey: this.signingKey,
|
|
210
|
+
expiresInSeconds,
|
|
211
|
+
});
|
|
212
|
+
// Don't log the actual response; user tokens are sensitive.
|
|
213
|
+
this.logger.info(`${logParams.traceName} response`, logParams);
|
|
214
|
+
return (0, util_ts_1.success)({ token: response });
|
|
215
|
+
}
|
|
216
|
+
catch (maybeError) {
|
|
217
|
+
const error = (0, util_ts_1.toError)(maybeError);
|
|
218
|
+
return this.createAndLogError({
|
|
219
|
+
notificationError: {
|
|
220
|
+
code: exports.ERROR_CODES.unknown,
|
|
221
|
+
message: error.message,
|
|
222
|
+
},
|
|
223
|
+
logFunction: this.logger.error,
|
|
224
|
+
logParams,
|
|
225
|
+
metadata: { error },
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
}
|
|
183
229
|
/**
|
|
184
230
|
* Updates or creates a workplace (tenant) in Knock.
|
|
185
231
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notificationClient.js","sourceRoot":"","sources":["../../../../../packages/notifications/src/lib/notificationClient.ts"],"names":[],"mappings":";;;AAAA,uDASmC;
|
|
1
|
+
{"version":3,"file":"notificationClient.js","sourceRoot":"","sources":["../../../../../packages/notifications/src/lib/notificationClient.ts"],"names":[],"mappings":"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"}
|
package/src/lib/types.d.ts
CHANGED
|
@@ -1,14 +1,10 @@
|
|
|
1
|
+
import { type Logger } from "@clipboard-health/util-ts";
|
|
2
|
+
import { type IdempotentKnock } from "./internal/idempotentKnock";
|
|
1
3
|
export type Tags = Record<string, unknown>;
|
|
2
|
-
export declare const MOBILE_PLATFORMS: readonly ["android", "ios"];
|
|
3
|
-
export type MobilePlatform = (typeof MOBILE_PLATFORMS)[number];
|
|
4
4
|
export interface TraceOptions {
|
|
5
5
|
resource?: string;
|
|
6
6
|
tags?: Tags;
|
|
7
7
|
}
|
|
8
|
-
export interface LogParams {
|
|
9
|
-
traceName: string;
|
|
10
|
-
destination: string;
|
|
11
|
-
}
|
|
12
8
|
export interface Span {
|
|
13
9
|
addTags: (tags: Tags) => void;
|
|
14
10
|
}
|
|
@@ -18,6 +14,37 @@ export interface Span {
|
|
|
18
14
|
export interface Tracer {
|
|
19
15
|
trace<T>(name: string, options: TraceOptions, fun: (span?: Span) => T): T;
|
|
20
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* Configuration parameters for the NotificationClient constructor.
|
|
19
|
+
*/
|
|
20
|
+
export type NotificationClientParams = {
|
|
21
|
+
/** Logger instance for structured logging. */
|
|
22
|
+
logger: Logger;
|
|
23
|
+
/** Signing key for user token authentication. Only required if calling `signUserToken`. */
|
|
24
|
+
signingKey?: string;
|
|
25
|
+
/** Tracer instance for distributed tracing. */
|
|
26
|
+
tracer: Tracer;
|
|
27
|
+
} &
|
|
28
|
+
/**
|
|
29
|
+
* Pass the third-party provider's apiKey.
|
|
30
|
+
*/
|
|
31
|
+
({
|
|
32
|
+
provider?: never;
|
|
33
|
+
apiKey: string;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Pass the third-party provider's instance (used by tests).
|
|
37
|
+
*/
|
|
38
|
+
| {
|
|
39
|
+
provider: IdempotentKnock;
|
|
40
|
+
apiKey?: never;
|
|
41
|
+
});
|
|
42
|
+
export declare const MOBILE_PLATFORMS: readonly ["android", "ios"];
|
|
43
|
+
export type MobilePlatform = (typeof MOBILE_PLATFORMS)[number];
|
|
44
|
+
export interface LogParams {
|
|
45
|
+
traceName: string;
|
|
46
|
+
destination: string;
|
|
47
|
+
}
|
|
21
48
|
export interface PushChannelData {
|
|
22
49
|
/**
|
|
23
50
|
* A list of push channel tokens.
|
|
@@ -133,6 +160,16 @@ export interface AppendPushTokenResponse {
|
|
|
133
160
|
/** Whether the push token was appended successfully. */
|
|
134
161
|
success: boolean;
|
|
135
162
|
}
|
|
163
|
+
export interface SignUserTokenRequest {
|
|
164
|
+
/** The user ID. */
|
|
165
|
+
userId: string;
|
|
166
|
+
/** The expiration time in seconds. */
|
|
167
|
+
expiresInSeconds?: number;
|
|
168
|
+
}
|
|
169
|
+
export interface SignUserTokenResponse {
|
|
170
|
+
/** The signed user token. */
|
|
171
|
+
token: string;
|
|
172
|
+
}
|
|
136
173
|
/**
|
|
137
174
|
* Request parameters for workplace upsert.
|
|
138
175
|
*/
|
package/src/lib/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../packages/notifications/src/lib/types.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../packages/notifications/src/lib/types.ts"],"names":[],"mappings":";;;AA2Ca,QAAA,gBAAgB,GAAG,CAAC,SAAS,EAAE,KAAK,CAAU,CAAC"}
|
package/src/lib/chunk.d.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Creates an `array` of elements split into groups the length of `size`. If `array` can't be split
|
|
3
|
-
* evenly, the final chunk will be the remaining elements.
|
|
4
|
-
*
|
|
5
|
-
* @param array - The array to chunk.
|
|
6
|
-
* @param size - The length of each chunk.
|
|
7
|
-
* @returns the new 2D array of chunks.
|
|
8
|
-
*/
|
|
9
|
-
export declare function chunk<T>(array: T[], size: number): T[][];
|
package/src/lib/chunk.js
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.chunk = chunk;
|
|
4
|
-
/**
|
|
5
|
-
* Creates an `array` of elements split into groups the length of `size`. If `array` can't be split
|
|
6
|
-
* evenly, the final chunk will be the remaining elements.
|
|
7
|
-
*
|
|
8
|
-
* @param array - The array to chunk.
|
|
9
|
-
* @param size - The length of each chunk.
|
|
10
|
-
* @returns the new 2D array of chunks.
|
|
11
|
-
*/
|
|
12
|
-
function chunk(array, size) {
|
|
13
|
-
if (!Number.isInteger(size) || size <= 0) {
|
|
14
|
-
throw new RangeError("size must be a positive integer");
|
|
15
|
-
}
|
|
16
|
-
if (array.length === 0) {
|
|
17
|
-
return [];
|
|
18
|
-
}
|
|
19
|
-
return Array.from({ length: Math.ceil(array.length / size) }, (_, index) => array.slice(index * size, (index + 1) * size));
|
|
20
|
-
}
|
|
21
|
-
//# sourceMappingURL=chunk.js.map
|
package/src/lib/chunk.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"chunk.js","sourceRoot":"","sources":["../../../../../packages/notifications/src/lib/chunk.ts"],"names":[],"mappings":";;AAQA,sBAYC;AApBD;;;;;;;GAOG;AACH,SAAgB,KAAK,CAAI,KAAU,EAAE,IAAY;IAC/C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,UAAU,CAAC,iCAAiC,CAAC,CAAC;IAC1D,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CACzE,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAC9C,CAAC;AACJ,CAAC"}
|