react-native-notify-kit 10.7.2 → 10.8.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/android/src/main/java/app/notifee/core/ForegroundService.java +363 -66
- package/android/src/test/java/app/notifee/core/ForegroundServiceTest.java +1194 -32
- package/android/src/test/java/app/notifee/core/NotificationManagerActionRoutingTest.java +37 -0
- package/dist/fcm/parseFcmPayload.d.ts +1 -0
- package/dist/fcm/parseFcmPayload.js.map +1 -1
- package/dist/fcm/reconstructNotification.js +96 -8
- package/dist/fcm/reconstructNotification.js.map +1 -1
- package/dist/validators/validateAndroidPressAction.js +3 -0
- package/dist/validators/validateAndroidPressAction.js.map +1 -1
- package/dist/validators/validateIOSNotification.js +5 -2
- package/dist/validators/validateIOSNotification.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/ios/NotifeeCore/NotifeeCore.m +36 -3
- package/ios/NotifeeCore/NotifeeCoreExtensionHelper.m +82 -3
- package/ios/NotifeeCore/NotifeeCoreFcmIdentity.h +91 -0
- package/package.json +1 -1
- package/server/README.md +5 -3
- package/server/dist/buildPayload.d.ts.map +1 -1
- package/server/dist/buildPayload.js +2 -0
- package/server/dist/buildPayload.js.map +1 -1
- package/server/dist/ios.d.ts.map +1 -1
- package/server/dist/ios.js +8 -1
- package/server/dist/ios.js.map +1 -1
- package/server/dist/serialize.d.ts +2 -0
- package/server/dist/serialize.d.ts.map +1 -1
- package/server/dist/serialize.js +6 -0
- package/server/dist/serialize.js.map +1 -1
- package/server/dist/types.d.ts +1 -1
- package/server/dist/types.d.ts.map +1 -1
- package/server/dist/validation.d.ts.map +1 -1
- package/server/dist/validation.js +160 -6
- package/server/dist/validation.js.map +1 -1
- package/server/src/buildPayload.ts +2 -0
- package/server/src/ios.ts +8 -1
- package/server/src/serialize.ts +8 -0
- package/server/src/types.ts +1 -0
- package/server/src/validation.ts +187 -6
- package/src/fcm/parseFcmPayload.ts +1 -0
- package/src/fcm/reconstructNotification.ts +105 -10
- package/src/internal/fcmContract.d.ts +57 -12
- package/src/validators/validateAndroidPressAction.ts +4 -0
- package/src/validators/validateIOSNotification.ts +7 -2
- package/src/version.ts +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-notify-kit",
|
|
3
|
-
"version": "10.
|
|
3
|
+
"version": "10.8.0",
|
|
4
4
|
"author": "Marco Crupi",
|
|
5
5
|
"description": "Maintained Notifee-compatible React Native notifications library for Android, iOS, FCM Mode, rich notifications, foreground services, and Expo CNG development builds.",
|
|
6
6
|
"main": "dist/index.js",
|
package/server/README.md
CHANGED
|
@@ -66,7 +66,7 @@ Builds the iOS APNs half only: `{ headers, payload }` with the `aps` object, `no
|
|
|
66
66
|
|
|
67
67
|
### `serializeNotifeeOptions(input): string`
|
|
68
68
|
|
|
69
|
-
Returns the JSON-serialized `notifee_options` blob: `{ _v: 1, title, body, android?, ios? }`. Use when you want the blob string directly (e.g., to send via a non-FCM transport while preserving the wire contract).
|
|
69
|
+
Returns the JSON-serialized `notifee_options` blob: `{ _v: 1, id?, title, body, subtitle?, android?, ios? }`. Optional `id` is the public NotifyKit notification identity, separate from the transport collapse key. The optional `subtitle` is top-level; supported Android fields include `circularLargeIcon`, `BIG_TEXT` `title` / `summary`, `BIG_PICTURE` `title` / `summary` / `largeIcon` (string or explicit `null`), body `pressAction` (including explicit `null`), and actions with `icon`, the supported press-action fields, and `input: true` or an `AndroidInput` object. See the [interaction contract](../../../docs/fcm-mode.mdx#body-press-actions-and-action-buttons) for the exact fields and reply semantics. Use when you want the blob string directly (e.g., to send via a non-FCM transport while preserving the wire contract).
|
|
70
70
|
|
|
71
71
|
### Types
|
|
72
72
|
|
|
@@ -107,7 +107,7 @@ Full type definitions are in [`docs/fcm-mode.mdx#server-sdk-reference`](../../..
|
|
|
107
107
|
- **Android** messages are delivered **data-only** — the FCM SDK never auto-displays them. The client handler owns rendering.
|
|
108
108
|
- **iOS** messages use APNs alert delivery with `mutable-content: 1`, so the Notification Service Extension always activates and reads `notifee_options`.
|
|
109
109
|
- All payloads carry a `_v: 1` version field in `notifee_options` for forward compatibility.
|
|
110
|
-
- Collapse
|
|
110
|
+
- `notification.id` is preserved in `notifee_options` as the public NotifyKit identity for display, events, readback, and cancel. Collapse is separate: the effective transport key is `options.collapseKey ?? notification.id`, or omitted when both are absent. Transport coalescing does not guarantee replacement of a notification already delivered. See [identity and collapse](../../../docs/fcm-mode.mdx#notification-identity-and-transport-collapse).
|
|
111
111
|
- If the serialized payload approaches FCM's 4 KB limit, a `console.warn` is emitted (non-fatal). The exact byte count is also available via `output.sizeBytes` — non-enumerable, so it doesn't serialize into the FCM wire payload.
|
|
112
112
|
|
|
113
113
|
## Validation
|
|
@@ -121,10 +121,12 @@ All validation happens synchronously in `buildNotifyKitPayload`. Errors thrown a
|
|
|
121
121
|
- `options.ttl` must be a **positive** integer in seconds (zero is rejected — omit to use FCM default).
|
|
122
122
|
- iOS attachments require `https://` URLs.
|
|
123
123
|
- `options.iosBadgeCount` must be a non-negative integer.
|
|
124
|
+
- The effective APNs collapse ID (`options.collapseKey ?? notification.id`) must be at most **64 UTF-8 bytes**; a separate valid `collapseKey` does not impose this limit on `notification.id`.
|
|
125
|
+
- Android body `pressAction` accepts absence, explicit `null`, or a supported object. Actions require a `title` and press action; `input: false` is rejected for new payloads.
|
|
124
126
|
|
|
125
127
|
## Limitations
|
|
126
128
|
|
|
127
|
-
- **
|
|
129
|
+
- **Limited deep runtime validation of `notification.android` / `notification.ios` sub-objects.** The Server SDK validates `android.circularLargeIcon`, the supported Android style shape and fields, body and action press actions, action icons and inputs, alongside checks such as iOS attachment URLs and duplicate Android action IDs. Other nested fields (`channelId`, `smallIcon`, `color`, `sound`, `categoryId`, etc.) rely on TypeScript structural typing. JavaScript consumers bypassing TypeScript should validate them. Broader deep runtime validation is planned.
|
|
128
130
|
- **Style types are limited to `BIG_TEXT` and `BIG_PICTURE`.** `MESSAGING`, `INBOX`, and `CALL` styles are available via the client `displayNotification` but not yet wired through the server SDK — their richer schemas (person avatars, reply actions) need forward-compatible versioning before the wire contract is frozen.
|
|
129
131
|
- **FCM 4 KB hard limit.** The serialized message is capped at 4 KB by FCM. The SDK warns at ~3500 bytes — reduce `data` keys or body length, or switch to a nudge-then-fetch pattern for large payloads.
|
|
130
132
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buildPayload.d.ts","sourceRoot":"","sources":["../src/buildPayload.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAM7E,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,qBAAqB,GAAG,sBAAsB,
|
|
1
|
+
{"version":3,"file":"buildPayload.d.ts","sourceRoot":"","sources":["../src/buildPayload.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAM7E,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,qBAAqB,GAAG,sBAAsB,CAmF1F"}
|
|
@@ -17,8 +17,10 @@ function buildNotifyKitPayload(input) {
|
|
|
17
17
|
expiration = String(Math.floor(Date.now() / 1000) + options.ttl);
|
|
18
18
|
}
|
|
19
19
|
const notifeeOptions = (0, serialize_1.serializeNotifeeOptions)({
|
|
20
|
+
...(notification.id !== undefined ? { id: notification.id } : {}),
|
|
20
21
|
title: notification.title,
|
|
21
22
|
body: notification.body,
|
|
23
|
+
...(notification.subtitle !== undefined ? { subtitle: notification.subtitle } : {}),
|
|
22
24
|
...(notification.android !== undefined ? { android: notification.android } : {}),
|
|
23
25
|
...(notification.ios !== undefined ? { ios: notification.ios } : {}),
|
|
24
26
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buildPayload.js","sourceRoot":"","sources":["../src/buildPayload.ts"],"names":[],"mappings":";;AASA,
|
|
1
|
+
{"version":3,"file":"buildPayload.js","sourceRoot":"","sources":["../src/buildPayload.ts"],"names":[],"mappings":"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"}
|
package/server/dist/ios.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ios.d.ts","sourceRoot":"","sources":["../src/ios.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EAGrB,mBAAmB,EACnB,6BAA6B,EAG7B,qBAAqB,EACtB,MAAM,SAAS,CAAC;AAWjB,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,6BAA6B,GACnC,qBAAqB,CAQvB;AAED,KAAK,eAAe,GAAG;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,qBAAqB,EAC5B,OAAO,EAAE,eAAe,GACvB,mBAAmB,
|
|
1
|
+
{"version":3,"file":"ios.d.ts","sourceRoot":"","sources":["../src/ios.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EAGrB,mBAAmB,EACnB,6BAA6B,EAG7B,qBAAqB,EACtB,MAAM,SAAS,CAAC;AAWjB,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,6BAA6B,GACnC,qBAAqB,CAQvB;AAED,KAAK,eAAe,GAAG;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,qBAAqB,EAC5B,OAAO,EAAE,eAAe,GACvB,mBAAmB,CAoDrB"}
|
package/server/dist/ios.js
CHANGED
|
@@ -25,13 +25,20 @@ function buildIosApnsPayload(input, context) {
|
|
|
25
25
|
'apns-priority': '10',
|
|
26
26
|
};
|
|
27
27
|
if (context.collapseKey !== undefined) {
|
|
28
|
+
if (Buffer.byteLength(context.collapseKey, 'utf8') > 64) {
|
|
29
|
+
throw new Error(`${PREFIX} Validation: apns-collapse-id must be at most 64 UTF-8 bytes`);
|
|
30
|
+
}
|
|
28
31
|
headers['apns-collapse-id'] = context.collapseKey;
|
|
29
32
|
}
|
|
30
33
|
if (context.expiration !== undefined) {
|
|
31
34
|
headers['apns-expiration'] = context.expiration;
|
|
32
35
|
}
|
|
33
36
|
const aps = {
|
|
34
|
-
alert: {
|
|
37
|
+
alert: {
|
|
38
|
+
title: notification.title,
|
|
39
|
+
body: notification.body,
|
|
40
|
+
...(notification.subtitle !== undefined ? { subtitle: notification.subtitle } : {}),
|
|
41
|
+
},
|
|
35
42
|
'mutable-content': 1,
|
|
36
43
|
};
|
|
37
44
|
if (ios?.sound !== undefined) {
|
package/server/dist/ios.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ios.js","sourceRoot":"","sources":["../src/ios.ts"],"names":[],"mappings":";;AAoBA,0DAUC;AASD,
|
|
1
|
+
{"version":3,"file":"ios.js","sourceRoot":"","sources":["../src/ios.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serialize.d.ts","sourceRoot":"","sources":["../src/serialize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,kBAAkB,EAA4B,MAAM,SAAS,CAAC;AAEpG,KAAK,cAAc,GAAG;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,sBAAsB,CAAC;IACjC,GAAG,CAAC,EAAE,kBAAkB,CAAC;CAC1B,CAAC;AAIF,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"serialize.d.ts","sourceRoot":"","sources":["../src/serialize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,kBAAkB,EAA4B,MAAM,SAAS,CAAC;AAEpG,KAAK,cAAc,GAAG;IACpB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,sBAAsB,CAAC;IACjC,GAAG,CAAC,EAAE,kBAAkB,CAAC;CAC1B,CAAC;AAIF,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CAsBrE;AAED,wBAAgB,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,GAAG,SAAS,CAS/E"}
|
package/server/dist/serialize.js
CHANGED
|
@@ -5,6 +5,12 @@ exports.serializeData = serializeData;
|
|
|
5
5
|
const PREFIX = '[react-native-notify-kit/server]';
|
|
6
6
|
function serializeNotifeeOptions(input) {
|
|
7
7
|
const payload = { _v: 1, title: input.title, body: input.body };
|
|
8
|
+
if (input.id !== undefined) {
|
|
9
|
+
payload.id = input.id;
|
|
10
|
+
}
|
|
11
|
+
if (input.subtitle !== undefined) {
|
|
12
|
+
payload.subtitle = input.subtitle;
|
|
13
|
+
}
|
|
8
14
|
if (input.android !== undefined) {
|
|
9
15
|
payload.android = input.android;
|
|
10
16
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serialize.js","sourceRoot":"","sources":["../src/serialize.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"serialize.js","sourceRoot":"","sources":["../src/serialize.ts"],"names":[],"mappings":";;AAaA,0DAsBC;AAED,sCASC;AAnCD,MAAM,MAAM,GAAG,kCAAkC,CAAC;AAElD,SAAgB,uBAAuB,CAAC,KAAqB;IAC3D,MAAM,OAAO,GAA6B,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;IAC1F,IAAI,KAAK,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;IACxB,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACjC,OAAO,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;IACpC,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAClC,CAAC;IACD,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;IAC1B,CAAC;IACD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QACpB,MAAM,MAAM,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QACxE,MAAM,IAAI,KAAK,CACb,GAAG,MAAM,sJAAsJ,MAAM,EAAE,CACxK,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAgB,aAAa,CAAC,IAA6B;IACzD,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC"}
|
package/server/dist/types.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export type { NotifyKitPressAction, NotifyKitAndroidAction, NotifyKitAndroidStyle, NotifyKitAndroidConfig, NotifyKitIosAttachment, NotifyKitIosInterruptionLevel, NotifyKitIosConfig, NotifyKitNotification, NotifyKitOptions, NotifyKitPayloadInput, ApnsInterruptionLevel, NotifyKitAndroidOutput, NotifyKitApnsAps, NotifyKitApnsHeaders, NotifyKitApnsPayload, NotifyKitApnsOutput, NotifyKitPayloadOutput, SerializedNotifeeOptions, } from '../../src/internal/fcmContract';
|
|
1
|
+
export type { NotifyKitPressAction, NotifyKitAndroidInput, NotifyKitAndroidAction, NotifyKitAndroidStyle, NotifyKitAndroidConfig, NotifyKitIosAttachment, NotifyKitIosInterruptionLevel, NotifyKitIosConfig, NotifyKitNotification, NotifyKitOptions, NotifyKitPayloadInput, ApnsInterruptionLevel, NotifyKitAndroidOutput, NotifyKitApnsAps, NotifyKitApnsHeaders, NotifyKitApnsPayload, NotifyKitApnsOutput, NotifyKitPayloadOutput, SerializedNotifeeOptions, } from '../../src/internal/fcmContract';
|
|
2
2
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAIA,YAAY,EACV,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACtB,sBAAsB,EACtB,6BAA6B,EAC7B,kBAAkB,EAClB,qBAAqB,EACrB,gBAAgB,EAChB,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,gCAAgC,CAAC"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAIA,YAAY,EACV,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACtB,sBAAsB,EACtB,6BAA6B,EAC7B,kBAAkB,EAClB,qBAAqB,EACrB,gBAAgB,EAChB,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,gCAAgC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAyIrD,wBAAgB,aAAa,CAAC,KAAK,EAAE,qBAAqB,GAAG,IAAI,CAqMhE"}
|
|
@@ -3,12 +3,116 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.validateInput = validateInput;
|
|
4
4
|
const PREFIX = '[react-native-notify-kit/server]';
|
|
5
5
|
const RESERVED_DATA_KEYS = ['notifee_options', 'notifee_data'];
|
|
6
|
+
const BIG_TEXT_STYLE_KEYS = new Set(['type', 'text', 'title', 'summary']);
|
|
7
|
+
const BIG_PICTURE_STYLE_KEYS = new Set(['type', 'picture', 'title', 'summary', 'largeIcon']);
|
|
8
|
+
const PRESS_ACTION_KEYS = new Set(['id', 'launchActivity', 'mainComponent', 'launchActivityFlags']);
|
|
9
|
+
const ACTION_KEYS = new Set(['title', 'pressAction', 'icon', 'input']);
|
|
10
|
+
const INPUT_KEYS = new Set([
|
|
11
|
+
'allowFreeFormInput',
|
|
12
|
+
'allowGeneratedReplies',
|
|
13
|
+
'choices',
|
|
14
|
+
'editableChoices',
|
|
15
|
+
'placeholder',
|
|
16
|
+
]);
|
|
6
17
|
function err(category, message) {
|
|
7
18
|
return new Error(`${PREFIX} ${category}: ${message}`);
|
|
8
19
|
}
|
|
9
20
|
function isNonEmptyString(value) {
|
|
10
21
|
return typeof value === 'string' && value.length > 0;
|
|
11
22
|
}
|
|
23
|
+
function isPlainObject(value) {
|
|
24
|
+
if (value === null || typeof value !== 'object' || Array.isArray(value)) {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
const prototype = Object.getPrototypeOf(value);
|
|
28
|
+
return prototype === Object.prototype || prototype === null;
|
|
29
|
+
}
|
|
30
|
+
function rejectUnsupportedKeys(value, supported, path) {
|
|
31
|
+
for (const key of Object.keys(value)) {
|
|
32
|
+
if (!supported.has(key)) {
|
|
33
|
+
throw err('Android', `${path}.${key} is not supported`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
function validatePressAction(value, path) {
|
|
38
|
+
if (!isPlainObject(value)) {
|
|
39
|
+
throw err('Android', `${path} must be an object`);
|
|
40
|
+
}
|
|
41
|
+
rejectUnsupportedKeys(value, PRESS_ACTION_KEYS, path);
|
|
42
|
+
if (!isNonEmptyString(value.id)) {
|
|
43
|
+
throw err('Android', `${path}.id must be a non-empty string`);
|
|
44
|
+
}
|
|
45
|
+
if (value.id === '__NOTIFEE_OPT_OUT__') {
|
|
46
|
+
throw err('Android', `${path}.id is reserved for explicit null`);
|
|
47
|
+
}
|
|
48
|
+
if (value.launchActivity !== undefined && typeof value.launchActivity !== 'string') {
|
|
49
|
+
throw err('Android', `${path}.launchActivity must be a string`);
|
|
50
|
+
}
|
|
51
|
+
if (value.mainComponent !== undefined && typeof value.mainComponent !== 'string') {
|
|
52
|
+
throw err('Android', `${path}.mainComponent must be a string`);
|
|
53
|
+
}
|
|
54
|
+
if (value.launchActivityFlags !== undefined) {
|
|
55
|
+
if (!Array.isArray(value.launchActivityFlags)) {
|
|
56
|
+
throw err('Android', `${path}.launchActivityFlags must be an array of AndroidLaunchActivityFlag values`);
|
|
57
|
+
}
|
|
58
|
+
for (const flag of value.launchActivityFlags) {
|
|
59
|
+
if (typeof flag !== 'number' || !Number.isInteger(flag) || flag < 0 || flag > 20) {
|
|
60
|
+
throw err('Android', `${path}.launchActivityFlags must be an array of AndroidLaunchActivityFlag values`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
function validateActionInput(value, path) {
|
|
66
|
+
if (value === true) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
if (!isPlainObject(value)) {
|
|
70
|
+
throw err('Android', `${path} must be true or an AndroidInput object`);
|
|
71
|
+
}
|
|
72
|
+
rejectUnsupportedKeys(value, INPUT_KEYS, path);
|
|
73
|
+
for (const key of ['allowFreeFormInput', 'allowGeneratedReplies', 'editableChoices']) {
|
|
74
|
+
if (Object.prototype.hasOwnProperty.call(value, key) && typeof value[key] !== 'boolean') {
|
|
75
|
+
throw err('Android', `${path}.${key} must be a boolean`);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
if (Object.prototype.hasOwnProperty.call(value, 'choices')) {
|
|
79
|
+
if (!Array.isArray(value.choices) || value.choices.length === 0) {
|
|
80
|
+
throw err('Android', `${path}.choices must be a non-empty array of strings`);
|
|
81
|
+
}
|
|
82
|
+
for (const choice of value.choices) {
|
|
83
|
+
if (typeof choice !== 'string') {
|
|
84
|
+
throw err('Android', `${path}.choices must be a non-empty array of strings`);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
if (Object.prototype.hasOwnProperty.call(value, 'placeholder') &&
|
|
89
|
+
typeof value.placeholder !== 'string') {
|
|
90
|
+
throw err('Android', `${path}.placeholder must be a string`);
|
|
91
|
+
}
|
|
92
|
+
if (value.allowFreeFormInput === false &&
|
|
93
|
+
(!Array.isArray(value.choices) || value.choices.length === 0)) {
|
|
94
|
+
throw err('Android', `${path}.allowFreeFormInput requires choices when false`);
|
|
95
|
+
}
|
|
96
|
+
if (value.editableChoices === true && value.allowFreeFormInput === false) {
|
|
97
|
+
throw err('Android', `${path}.editableChoices requires allowFreeFormInput when true`);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
function validateAction(value, path) {
|
|
101
|
+
if (!isPlainObject(value)) {
|
|
102
|
+
throw err('Android', `${path} must be an AndroidAction object`);
|
|
103
|
+
}
|
|
104
|
+
rejectUnsupportedKeys(value, ACTION_KEYS, path);
|
|
105
|
+
if (!isNonEmptyString(value.title)) {
|
|
106
|
+
throw err('Android', `${path}.title must be a non-empty string`);
|
|
107
|
+
}
|
|
108
|
+
validatePressAction(value.pressAction, `${path}.pressAction`);
|
|
109
|
+
if (value.icon !== undefined && !isNonEmptyString(value.icon)) {
|
|
110
|
+
throw err('Android', `${path}.icon must be a non-empty string`);
|
|
111
|
+
}
|
|
112
|
+
if (value.input !== undefined) {
|
|
113
|
+
validateActionInput(value.input, `${path}.input`);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
12
116
|
function validateInput(input) {
|
|
13
117
|
if (input === null || typeof input !== 'object') {
|
|
14
118
|
throw err('Validation', 'input must be an object');
|
|
@@ -41,6 +145,9 @@ function validateInput(input) {
|
|
|
41
145
|
if (!isNonEmptyString(notification.body)) {
|
|
42
146
|
throw err('Validation', 'notification.body is required and must be a non-empty string');
|
|
43
147
|
}
|
|
148
|
+
if (notification.subtitle !== undefined && typeof notification.subtitle !== 'string') {
|
|
149
|
+
throw err('Validation', 'notification.subtitle must be a string when provided');
|
|
150
|
+
}
|
|
44
151
|
if (notification.data !== undefined) {
|
|
45
152
|
if (notification.data === null || typeof notification.data !== 'object') {
|
|
46
153
|
throw err('Validation', "'notification.data' must be an object");
|
|
@@ -56,6 +163,52 @@ function validateInput(input) {
|
|
|
56
163
|
}
|
|
57
164
|
}
|
|
58
165
|
}
|
|
166
|
+
if (notification.android !== undefined) {
|
|
167
|
+
if (!isPlainObject(notification.android)) {
|
|
168
|
+
throw err('Android', 'notification.android must be an object');
|
|
169
|
+
}
|
|
170
|
+
if (notification.android.pressAction !== undefined &&
|
|
171
|
+
notification.android.pressAction !== null) {
|
|
172
|
+
validatePressAction(notification.android.pressAction, 'notification.android.pressAction');
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
const circularLargeIcon = notification.android?.circularLargeIcon;
|
|
176
|
+
if (circularLargeIcon !== undefined && typeof circularLargeIcon !== 'boolean') {
|
|
177
|
+
throw err('Android', 'notification.android.circularLargeIcon must be a boolean when provided');
|
|
178
|
+
}
|
|
179
|
+
const style = notification.android?.style;
|
|
180
|
+
if (style !== undefined) {
|
|
181
|
+
if (style === null || typeof style !== 'object' || Array.isArray(style)) {
|
|
182
|
+
throw err('Android', 'notification.android.style must be a supported style object');
|
|
183
|
+
}
|
|
184
|
+
if (style.type !== 'BIG_TEXT' && style.type !== 'BIG_PICTURE') {
|
|
185
|
+
throw err('Android', 'notification.android.style type must be BIG_TEXT or BIG_PICTURE');
|
|
186
|
+
}
|
|
187
|
+
const supportedKeys = style.type === 'BIG_TEXT' ? BIG_TEXT_STYLE_KEYS : BIG_PICTURE_STYLE_KEYS;
|
|
188
|
+
for (const key of Object.keys(style)) {
|
|
189
|
+
if (!supportedKeys.has(key)) {
|
|
190
|
+
throw err('Android', `notification.android.style.${key} is not supported`);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
if (style.type === 'BIG_TEXT' && !isNonEmptyString(style.text)) {
|
|
194
|
+
throw err('Android', 'notification.android.style.text must be a non-empty string');
|
|
195
|
+
}
|
|
196
|
+
if (style.type === 'BIG_PICTURE' && !isNonEmptyString(style.picture)) {
|
|
197
|
+
throw err('Android', 'notification.android.style.picture must be a non-empty string');
|
|
198
|
+
}
|
|
199
|
+
if (style.title !== undefined && typeof style.title !== 'string') {
|
|
200
|
+
throw err('Android', 'notification.android.style.title must be a string when provided');
|
|
201
|
+
}
|
|
202
|
+
if (style.summary !== undefined && typeof style.summary !== 'string') {
|
|
203
|
+
throw err('Android', 'notification.android.style.summary must be a string when provided');
|
|
204
|
+
}
|
|
205
|
+
if (style.type === 'BIG_PICTURE' &&
|
|
206
|
+
style.largeIcon !== undefined &&
|
|
207
|
+
style.largeIcon !== null &&
|
|
208
|
+
typeof style.largeIcon !== 'string') {
|
|
209
|
+
throw err('Android', 'notification.android.style.largeIcon must be a string or null');
|
|
210
|
+
}
|
|
211
|
+
}
|
|
59
212
|
const attachments = notification.ios?.attachments;
|
|
60
213
|
if (attachments !== undefined) {
|
|
61
214
|
if (!Array.isArray(attachments)) {
|
|
@@ -98,13 +251,14 @@ function validateInput(input) {
|
|
|
98
251
|
}
|
|
99
252
|
}
|
|
100
253
|
const actions = notification.android?.actions;
|
|
101
|
-
if (
|
|
254
|
+
if (actions !== undefined) {
|
|
255
|
+
if (!Array.isArray(actions)) {
|
|
256
|
+
throw err('Android', 'notification.android.actions must be an array');
|
|
257
|
+
}
|
|
102
258
|
const pressActionIds = new Set();
|
|
103
|
-
for (const action of actions) {
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
continue;
|
|
107
|
-
}
|
|
259
|
+
for (const [index, action] of actions.entries()) {
|
|
260
|
+
validateAction(action, `notification.android.actions[${index}]`);
|
|
261
|
+
const pressActionId = action.pressAction.id;
|
|
108
262
|
if (pressActionIds.has(pressActionId)) {
|
|
109
263
|
throw err('Android', "'notification.android.actions' pressAction IDs must be unique within the notification");
|
|
110
264
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,8 +21,10 @@ export function buildNotifyKitPayload(input: NotifyKitPayloadInput): NotifyKitPa
|
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
const notifeeOptions = serializeNotifeeOptions({
|
|
24
|
+
...(notification.id !== undefined ? { id: notification.id } : {}),
|
|
24
25
|
title: notification.title,
|
|
25
26
|
body: notification.body,
|
|
27
|
+
...(notification.subtitle !== undefined ? { subtitle: notification.subtitle } : {}),
|
|
26
28
|
...(notification.android !== undefined ? { android: notification.android } : {}),
|
|
27
29
|
...(notification.ios !== undefined ? { ios: notification.ios } : {}),
|
|
28
30
|
});
|
package/server/src/ios.ts
CHANGED
|
@@ -50,6 +50,9 @@ export function buildIosApnsPayload(
|
|
|
50
50
|
'apns-priority': '10',
|
|
51
51
|
};
|
|
52
52
|
if (context.collapseKey !== undefined) {
|
|
53
|
+
if (Buffer.byteLength(context.collapseKey, 'utf8') > 64) {
|
|
54
|
+
throw new Error(`${PREFIX} Validation: apns-collapse-id must be at most 64 UTF-8 bytes`);
|
|
55
|
+
}
|
|
53
56
|
headers['apns-collapse-id'] = context.collapseKey;
|
|
54
57
|
}
|
|
55
58
|
if (context.expiration !== undefined) {
|
|
@@ -57,7 +60,11 @@ export function buildIosApnsPayload(
|
|
|
57
60
|
}
|
|
58
61
|
|
|
59
62
|
const aps: NotifyKitApnsAps = {
|
|
60
|
-
alert: {
|
|
63
|
+
alert: {
|
|
64
|
+
title: notification.title,
|
|
65
|
+
body: notification.body,
|
|
66
|
+
...(notification.subtitle !== undefined ? { subtitle: notification.subtitle } : {}),
|
|
67
|
+
},
|
|
61
68
|
'mutable-content': 1,
|
|
62
69
|
};
|
|
63
70
|
if (ios?.sound !== undefined) {
|
package/server/src/serialize.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import type { NotifyKitAndroidConfig, NotifyKitIosConfig, SerializedNotifeeOptions } from './types';
|
|
2
2
|
|
|
3
3
|
type SerializeInput = {
|
|
4
|
+
id?: string;
|
|
4
5
|
title: string;
|
|
6
|
+
subtitle?: string;
|
|
5
7
|
body: string;
|
|
6
8
|
android?: NotifyKitAndroidConfig;
|
|
7
9
|
ios?: NotifyKitIosConfig;
|
|
@@ -11,6 +13,12 @@ const PREFIX = '[react-native-notify-kit/server]';
|
|
|
11
13
|
|
|
12
14
|
export function serializeNotifeeOptions(input: SerializeInput): string {
|
|
13
15
|
const payload: SerializedNotifeeOptions = { _v: 1, title: input.title, body: input.body };
|
|
16
|
+
if (input.id !== undefined) {
|
|
17
|
+
payload.id = input.id;
|
|
18
|
+
}
|
|
19
|
+
if (input.subtitle !== undefined) {
|
|
20
|
+
payload.subtitle = input.subtitle;
|
|
21
|
+
}
|
|
14
22
|
if (input.android !== undefined) {
|
|
15
23
|
payload.android = input.android;
|
|
16
24
|
}
|