doopush-react-native-sdk 0.1.2 → 0.5.2
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 +71 -34
- package/android/build.gradle +9 -7
- package/android/src/main/java/com/doopush/reactnative/DooPushReactNativeSDKModule.kt +188 -28
- package/build/DooPush.d.ts +44 -7
- package/build/DooPush.d.ts.map +1 -1
- package/build/DooPush.js +76 -1
- package/build/DooPush.js.map +1 -1
- package/build/events.d.ts +7 -4
- package/build/events.d.ts.map +1 -1
- package/build/events.js +5 -2
- package/build/events.js.map +1 -1
- package/build/hooks.d.ts +34 -0
- package/build/hooks.d.ts.map +1 -0
- package/build/hooks.js +138 -0
- package/build/hooks.js.map +1 -0
- package/build/index.d.ts +1 -0
- package/build/index.d.ts.map +1 -1
- package/build/index.js +1 -0
- package/build/index.js.map +1 -1
- package/build/types.d.ts +28 -1
- package/build/types.d.ts.map +1 -1
- package/build/types.js.map +1 -1
- package/ios/DooPushReactNativeSDK.podspec +1 -3
- package/ios/DooPushReactNativeSDKModule.swift +169 -4
- package/package.json +13 -8
- package/plugin/build/android/withAndroid.js +6 -0
- package/plugin/build/android/withAppBuildGradle.js +71 -30
- package/plugin/build/android/withGoogleServices.js +74 -12
- package/plugin/build/android/withGradleProperties.d.ts +3 -0
- package/plugin/build/android/withGradleProperties.js +26 -0
- package/plugin/build/android/withOppoManifest.d.ts +3 -0
- package/plugin/build/android/withOppoManifest.js +61 -0
- package/plugin/build/android/withRootBuildGradle.d.ts +2 -2
- package/plugin/build/android/withRootBuildGradle.js +65 -10
- package/plugin/build/android/withSettingsGradle.d.ts +8 -0
- package/plugin/build/android/withSettingsGradle.js +33 -0
- package/plugin/build/ios/withIOS.js +2 -0
- package/plugin/build/ios/withPodfile.d.ts +8 -0
- package/plugin/build/ios/withPodfile.js +48 -0
- package/plugin/build/schema.d.ts +327 -1
- package/plugin/build/schema.js +82 -1
package/build/DooPush.js
CHANGED
|
@@ -2,7 +2,8 @@ import { DooPushModule } from './DooPushModule';
|
|
|
2
2
|
/**
|
|
3
3
|
* DooPush React Native SDK — imperative API
|
|
4
4
|
*
|
|
5
|
-
* v0.
|
|
5
|
+
* v0.5.0 — registration, OEM channels, token/device getters, hooks,
|
|
6
|
+
* notification events, WebSocket gateway, badge, statistics, and coexistence controls.
|
|
6
7
|
*/
|
|
7
8
|
/**
|
|
8
9
|
* Configure the SDK. Call once per app launch, ideally in App entry point.
|
|
@@ -36,6 +37,65 @@ export function getDeviceToken() {
|
|
|
36
37
|
export function getDeviceId() {
|
|
37
38
|
return DooPushModule.getDeviceId();
|
|
38
39
|
}
|
|
40
|
+
/** Returns the current native SDK device information snapshot, or null before configure. */
|
|
41
|
+
export function getDeviceInfo() {
|
|
42
|
+
return DooPushModule.getDeviceInfo();
|
|
43
|
+
}
|
|
44
|
+
/** Refresh device information on the DooPush server using the current token. */
|
|
45
|
+
export function updateDeviceInfo() {
|
|
46
|
+
return DooPushModule.updateDeviceInfo();
|
|
47
|
+
}
|
|
48
|
+
/** Immediately flush locally collected push statistics. */
|
|
49
|
+
export function reportStatistics() {
|
|
50
|
+
return DooPushModule.reportStatistics();
|
|
51
|
+
}
|
|
52
|
+
/** Check OS-level push notification permission status. */
|
|
53
|
+
export function checkPermissionStatus() {
|
|
54
|
+
return DooPushModule.checkPermissionStatus();
|
|
55
|
+
}
|
|
56
|
+
/** Set the application badge count. */
|
|
57
|
+
export function setBadge(count) {
|
|
58
|
+
return DooPushModule.setBadge(count);
|
|
59
|
+
}
|
|
60
|
+
/** Clear the application badge count. */
|
|
61
|
+
export function clearBadge() {
|
|
62
|
+
return DooPushModule.clearBadge();
|
|
63
|
+
}
|
|
64
|
+
/** Return the last known application badge count. */
|
|
65
|
+
export function getBadge() {
|
|
66
|
+
return DooPushModule.getBadge();
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Set notification management mode.
|
|
70
|
+
*
|
|
71
|
+
* - active: DooPush requests permission / owns notification handling where possible.
|
|
72
|
+
* - passive: host app obtains token and calls registerWithToken().
|
|
73
|
+
*/
|
|
74
|
+
export function setNotificationManagementMode(mode) {
|
|
75
|
+
DooPushModule.setNotificationManagementMode(mode);
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Android: relay FCM messages to Expo Notifications coexistence broadcast.
|
|
79
|
+
* iOS: no-op because delegate forwarding is used.
|
|
80
|
+
*/
|
|
81
|
+
export function setExpoNotificationRelayEnabled(enabled) {
|
|
82
|
+
DooPushModule.setExpoNotificationRelayEnabled(enabled);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Android: toggle SDK-owned FCM notification display.
|
|
86
|
+
* iOS: no-op; use setNotificationManagementMode('passive') to disable DooPush delegate tracking.
|
|
87
|
+
*/
|
|
88
|
+
export function setNotificationDisplayEnabled(enabled) {
|
|
89
|
+
DooPushModule.setNotificationDisplayEnabled(enabled);
|
|
90
|
+
}
|
|
91
|
+
/** Manually connect the WebSocket gateway using the registered device token. */
|
|
92
|
+
export function connectGateway() {
|
|
93
|
+
return DooPushModule.connectGateway();
|
|
94
|
+
}
|
|
95
|
+
/** Manually disconnect the WebSocket gateway. */
|
|
96
|
+
export function disconnectGateway() {
|
|
97
|
+
return DooPushModule.disconnectGateway();
|
|
98
|
+
}
|
|
39
99
|
// ── Event subscriptions ──────────────────────────────────────────────────
|
|
40
100
|
export function addRegisterListener(listener) {
|
|
41
101
|
return DooPushModule.addListener('onRegister', listener);
|
|
@@ -46,4 +106,19 @@ export function addRegisterErrorListener(listener) {
|
|
|
46
106
|
export function addMessageListener(listener) {
|
|
47
107
|
return DooPushModule.addListener('onMessage', listener);
|
|
48
108
|
}
|
|
109
|
+
export function addNotificationClickListener(listener) {
|
|
110
|
+
return DooPushModule.addListener('onNotificationClick', listener);
|
|
111
|
+
}
|
|
112
|
+
export function addNotificationOpenListener(listener) {
|
|
113
|
+
return DooPushModule.addListener('onNotificationOpen', listener);
|
|
114
|
+
}
|
|
115
|
+
export function addGatewayOpenListener(listener) {
|
|
116
|
+
return DooPushModule.addListener('onGatewayOpen', listener);
|
|
117
|
+
}
|
|
118
|
+
export function addGatewayClosedListener(listener) {
|
|
119
|
+
return DooPushModule.addListener('onGatewayClosed', listener);
|
|
120
|
+
}
|
|
121
|
+
export function addGatewayErrorListener(listener) {
|
|
122
|
+
return DooPushModule.addListener('onGatewayError', listener);
|
|
123
|
+
}
|
|
49
124
|
//# sourceMappingURL=DooPush.js.map
|
package/build/DooPush.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DooPush.js","sourceRoot":"","sources":["../src/DooPush.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"DooPush.js","sourceRoot":"","sources":["../src/DooPush.ts"],"names":[],"mappings":"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","sourcesContent":["import { Subscription } from 'expo-modules-core';\nimport { DooPushModule } from './DooPushModule';\nimport type {\n DooPushConfig,\n DooPushVendor,\n DooPushMessage,\n DooPushNotificationManagementMode,\n DooPushGatewayOpenEvent,\n DooPushGatewayClosedEvent,\n DooPushGatewayErrorEvent,\n DooPushRegisterResult,\n DooPushDeviceInfo,\n DooPushPermissionStatus,\n} from './types';\nimport type {\n OnRegisterEvent,\n OnRegisterErrorEvent,\n} from './events';\n\n/**\n * DooPush React Native SDK — imperative API\n *\n * v0.5.0 — registration, OEM channels, token/device getters, hooks,\n * notification events, WebSocket gateway, badge, statistics, and coexistence controls.\n */\n\n/**\n * Configure the SDK. Call once per app launch, ideally in App entry point.\n * Idempotent — calling again replaces the prior config.\n */\nexport function configure(config: DooPushConfig): void {\n DooPushModule.configure(config);\n}\n\n/**\n * Register for push notifications. Triggers permission request (iOS) and\n * token retrieval, then registers the device with DooPush server.\n *\n * Returns the device token + DooPush deviceId on success.\n * Rejects if user denies permission or network fails.\n */\nexport function register(): Promise<DooPushRegisterResult> {\n return DooPushModule.register();\n}\n\n/**\n * Register with a token already obtained externally (e.g. via expo-notifications\n * `getDevicePushTokenAsync()`). Skips SDK's internal permission/token flow.\n */\nexport function registerWithToken(\n token: string,\n vendor: DooPushVendor = 'fcm'\n): Promise<{ deviceId: string }> {\n return DooPushModule.registerWithToken(token, vendor);\n}\n\n/** Returns current device token (after register success), or null. */\nexport function getDeviceToken(): Promise<string | null> {\n return DooPushModule.getDeviceToken();\n}\n\n/** Returns DooPush server-assigned deviceId (after register success), or null. */\nexport function getDeviceId(): Promise<string | null> {\n return DooPushModule.getDeviceId();\n}\n\n/** Returns the current native SDK device information snapshot, or null before configure. */\nexport function getDeviceInfo(): Promise<DooPushDeviceInfo | null> {\n return DooPushModule.getDeviceInfo();\n}\n\n/** Refresh device information on the DooPush server using the current token. */\nexport function updateDeviceInfo(): Promise<void> {\n return DooPushModule.updateDeviceInfo();\n}\n\n/** Immediately flush locally collected push statistics. */\nexport function reportStatistics(): Promise<void> {\n return DooPushModule.reportStatistics();\n}\n\n/** Check OS-level push notification permission status. */\nexport function checkPermissionStatus(): Promise<DooPushPermissionStatus> {\n return DooPushModule.checkPermissionStatus();\n}\n\n/** Set the application badge count. */\nexport function setBadge(count: number): Promise<boolean> {\n return DooPushModule.setBadge(count);\n}\n\n/** Clear the application badge count. */\nexport function clearBadge(): Promise<boolean> {\n return DooPushModule.clearBadge();\n}\n\n/** Return the last known application badge count. */\nexport function getBadge(): Promise<number> {\n return DooPushModule.getBadge();\n}\n\n/**\n * Set notification management mode.\n *\n * - active: DooPush requests permission / owns notification handling where possible.\n * - passive: host app obtains token and calls registerWithToken().\n */\nexport function setNotificationManagementMode(\n mode: DooPushNotificationManagementMode\n): void {\n DooPushModule.setNotificationManagementMode(mode);\n}\n\n/**\n * Android: relay FCM messages to Expo Notifications coexistence broadcast.\n * iOS: no-op because delegate forwarding is used.\n */\nexport function setExpoNotificationRelayEnabled(enabled: boolean): void {\n DooPushModule.setExpoNotificationRelayEnabled(enabled);\n}\n\n/**\n * Android: toggle SDK-owned FCM notification display.\n * iOS: no-op; use setNotificationManagementMode('passive') to disable DooPush delegate tracking.\n */\nexport function setNotificationDisplayEnabled(enabled: boolean): void {\n DooPushModule.setNotificationDisplayEnabled(enabled);\n}\n\n/** Manually connect the WebSocket gateway using the registered device token. */\nexport function connectGateway(): Promise<void> {\n return DooPushModule.connectGateway();\n}\n\n/** Manually disconnect the WebSocket gateway. */\nexport function disconnectGateway(): Promise<void> {\n return DooPushModule.disconnectGateway();\n}\n\n// ── Event subscriptions ──────────────────────────────────────────────────\n\nexport function addRegisterListener(\n listener: (e: OnRegisterEvent) => void\n): Subscription {\n return DooPushModule.addListener('onRegister', listener);\n}\n\nexport function addRegisterErrorListener(\n listener: (e: OnRegisterErrorEvent) => void\n): Subscription {\n return DooPushModule.addListener('onRegisterError', listener);\n}\n\nexport function addMessageListener(\n listener: (msg: DooPushMessage) => void\n): Subscription {\n return DooPushModule.addListener('onMessage', listener);\n}\n\nexport function addNotificationClickListener(\n listener: (msg: DooPushMessage) => void\n): Subscription {\n return DooPushModule.addListener('onNotificationClick', listener);\n}\n\nexport function addNotificationOpenListener(\n listener: (msg: DooPushMessage) => void\n): Subscription {\n return DooPushModule.addListener('onNotificationOpen', listener);\n}\n\nexport function addGatewayOpenListener(\n listener: (e: DooPushGatewayOpenEvent) => void\n): Subscription {\n return DooPushModule.addListener('onGatewayOpen', listener);\n}\n\nexport function addGatewayClosedListener(\n listener: (e: DooPushGatewayClosedEvent) => void\n): Subscription {\n return DooPushModule.addListener('onGatewayClosed', listener);\n}\n\nexport function addGatewayErrorListener(\n listener: (e: DooPushGatewayErrorEvent) => void\n): Subscription {\n return DooPushModule.addListener('onGatewayError', listener);\n}\n"]}
|
package/build/events.d.ts
CHANGED
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
import type { DooPushVendor, DooPushMessage } from './types';
|
|
1
|
+
import type { DooPushVendor, DooPushMessage, DooPushGatewayOpenEvent, DooPushGatewayClosedEvent, DooPushGatewayErrorEvent } from './types';
|
|
2
2
|
/**
|
|
3
3
|
* Event names emitted by the native module.
|
|
4
|
-
* v0.1.0 alpha: register / message events only.
|
|
5
|
-
* v0.5.0 will add: gateway / click / present.
|
|
6
4
|
*/
|
|
7
|
-
export declare const EVENT_NAMES: readonly ["onRegister", "onRegisterError", "onMessage"];
|
|
5
|
+
export declare const EVENT_NAMES: readonly ["onRegister", "onRegisterError", "onMessage", "onNotificationClick", "onNotificationOpen", "onGatewayOpen", "onGatewayClosed", "onGatewayError"];
|
|
8
6
|
export type EventName = (typeof EVENT_NAMES)[number];
|
|
9
7
|
export interface OnRegisterEvent {
|
|
10
8
|
token: string;
|
|
@@ -19,5 +17,10 @@ export interface EventPayloadMap {
|
|
|
19
17
|
onRegister: OnRegisterEvent;
|
|
20
18
|
onRegisterError: OnRegisterErrorEvent;
|
|
21
19
|
onMessage: DooPushMessage;
|
|
20
|
+
onNotificationClick: DooPushMessage;
|
|
21
|
+
onNotificationOpen: DooPushMessage;
|
|
22
|
+
onGatewayOpen: DooPushGatewayOpenEvent;
|
|
23
|
+
onGatewayClosed: DooPushGatewayClosedEvent;
|
|
24
|
+
onGatewayError: DooPushGatewayErrorEvent;
|
|
22
25
|
}
|
|
23
26
|
//# sourceMappingURL=events.d.ts.map
|
package/build/events.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EACd,uBAAuB,EACvB,yBAAyB,EACzB,wBAAwB,EACzB,MAAM,SAAS,CAAC;AAEjB;;GAEG;AACH,eAAO,MAAM,WAAW,4JASd,CAAC;AACX,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAErD,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,aAAa,CAAC;CACvB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAGD,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,eAAe,CAAC;IAC5B,eAAe,EAAE,oBAAoB,CAAC;IACtC,SAAS,EAAE,cAAc,CAAC;IAC1B,mBAAmB,EAAE,cAAc,CAAC;IACpC,kBAAkB,EAAE,cAAc,CAAC;IACnC,aAAa,EAAE,uBAAuB,CAAC;IACvC,eAAe,EAAE,yBAAyB,CAAC;IAC3C,cAAc,EAAE,wBAAwB,CAAC;CAC1C"}
|
package/build/events.js
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Event names emitted by the native module.
|
|
3
|
-
* v0.1.0 alpha: register / message events only.
|
|
4
|
-
* v0.5.0 will add: gateway / click / present.
|
|
5
3
|
*/
|
|
6
4
|
export const EVENT_NAMES = [
|
|
7
5
|
'onRegister',
|
|
8
6
|
'onRegisterError',
|
|
9
7
|
'onMessage',
|
|
8
|
+
'onNotificationClick',
|
|
9
|
+
'onNotificationOpen',
|
|
10
|
+
'onGatewayOpen',
|
|
11
|
+
'onGatewayClosed',
|
|
12
|
+
'onGatewayError',
|
|
10
13
|
];
|
|
11
14
|
//# sourceMappingURL=events.js.map
|
package/build/events.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAQA;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,YAAY;IACZ,iBAAiB;IACjB,WAAW;IACX,qBAAqB;IACrB,oBAAoB;IACpB,eAAe;IACf,iBAAiB;IACjB,gBAAgB;CACR,CAAC","sourcesContent":["import type {\n DooPushVendor,\n DooPushMessage,\n DooPushGatewayOpenEvent,\n DooPushGatewayClosedEvent,\n DooPushGatewayErrorEvent,\n} from './types';\n\n/**\n * Event names emitted by the native module.\n */\nexport const EVENT_NAMES = [\n 'onRegister',\n 'onRegisterError',\n 'onMessage',\n 'onNotificationClick',\n 'onNotificationOpen',\n 'onGatewayOpen',\n 'onGatewayClosed',\n 'onGatewayError',\n] as const;\nexport type EventName = (typeof EVENT_NAMES)[number];\n\nexport interface OnRegisterEvent {\n token: string;\n deviceId: string;\n vendor: DooPushVendor;\n}\n\nexport interface OnRegisterErrorEvent {\n code: string;\n message: string;\n}\n\n// Map event name → payload type. Used by typed addListener helpers.\nexport interface EventPayloadMap {\n onRegister: OnRegisterEvent;\n onRegisterError: OnRegisterErrorEvent;\n onMessage: DooPushMessage;\n onNotificationClick: DooPushMessage;\n onNotificationOpen: DooPushMessage;\n onGatewayOpen: DooPushGatewayOpenEvent;\n onGatewayClosed: DooPushGatewayClosedEvent;\n onGatewayError: DooPushGatewayErrorEvent;\n}\n"]}
|
package/build/hooks.d.ts
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { DooPushMessage, DooPushRegisterResult, DooPushVendor, DooPushError, DooPushPermissionStatus } from './types';
|
|
2
|
+
export interface UseDooPushState {
|
|
3
|
+
token: string | null;
|
|
4
|
+
deviceId: string | null;
|
|
5
|
+
vendor: DooPushVendor | null;
|
|
6
|
+
permissionStatus: DooPushPermissionStatus | null;
|
|
7
|
+
lastMessage: DooPushMessage | null;
|
|
8
|
+
lastNotificationClick: DooPushMessage | null;
|
|
9
|
+
lastNotificationOpen: DooPushMessage | null;
|
|
10
|
+
error: DooPushError | null;
|
|
11
|
+
isRegistering: boolean;
|
|
12
|
+
refresh: () => Promise<void>;
|
|
13
|
+
register: () => Promise<DooPushRegisterResult>;
|
|
14
|
+
registerWithToken: (token: string, vendor?: DooPushVendor) => Promise<{
|
|
15
|
+
deviceId: string;
|
|
16
|
+
}>;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* React hook for the common DooPush state lifecycle: token/deviceId snapshots,
|
|
20
|
+
* registration actions, permission status, messages, notification opens/clicks,
|
|
21
|
+
* and registration errors.
|
|
22
|
+
*/
|
|
23
|
+
export declare function useDooPush(): UseDooPushState;
|
|
24
|
+
/** Subscribe to push message/open/click events and keep a small in-memory list. */
|
|
25
|
+
export declare function useDooPushMessage(options?: {
|
|
26
|
+
maxMessages?: number;
|
|
27
|
+
}): {
|
|
28
|
+
messages: DooPushMessage[];
|
|
29
|
+
lastMessage: DooPushMessage | null;
|
|
30
|
+
lastNotificationClick: DooPushMessage | null;
|
|
31
|
+
lastNotificationOpen: DooPushMessage | null;
|
|
32
|
+
clearMessages: () => void;
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=hooks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,cAAc,EACd,qBAAqB,EACrB,aAAa,EACb,YAAY,EACZ,uBAAuB,EACxB,MAAM,SAAS,CAAC;AAEjB,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IAC7B,gBAAgB,EAAE,uBAAuB,GAAG,IAAI,CAAC;IACjD,WAAW,EAAE,cAAc,GAAG,IAAI,CAAC;IACnC,qBAAqB,EAAE,cAAc,GAAG,IAAI,CAAC;IAC7C,oBAAoB,EAAE,cAAc,GAAG,IAAI,CAAC;IAC5C,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IAC3B,aAAa,EAAE,OAAO,CAAC;IACvB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,QAAQ,EAAE,MAAM,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAC/C,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,aAAa,KAAK,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC7F;AAED;;;;GAIG;AACH,wBAAgB,UAAU,IAAI,eAAe,CA2F5C;AAED,mFAAmF;AACnF,wBAAgB,iBAAiB,CAAC,OAAO,GAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAO;;;;;;EAkCvE"}
|
package/build/hooks.js
ADDED
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { useCallback, useEffect, useState } from 'react';
|
|
2
|
+
import * as DooPush from './DooPush';
|
|
3
|
+
/**
|
|
4
|
+
* React hook for the common DooPush state lifecycle: token/deviceId snapshots,
|
|
5
|
+
* registration actions, permission status, messages, notification opens/clicks,
|
|
6
|
+
* and registration errors.
|
|
7
|
+
*/
|
|
8
|
+
export function useDooPush() {
|
|
9
|
+
const [token, setToken] = useState(null);
|
|
10
|
+
const [deviceId, setDeviceId] = useState(null);
|
|
11
|
+
const [vendor, setVendor] = useState(null);
|
|
12
|
+
const [permissionStatus, setPermissionStatus] = useState(null);
|
|
13
|
+
const [lastMessage, setLastMessage] = useState(null);
|
|
14
|
+
const [lastNotificationClick, setLastNotificationClick] = useState(null);
|
|
15
|
+
const [lastNotificationOpen, setLastNotificationOpen] = useState(null);
|
|
16
|
+
const [error, setError] = useState(null);
|
|
17
|
+
const [isRegistering, setIsRegistering] = useState(false);
|
|
18
|
+
const refresh = useCallback(async () => {
|
|
19
|
+
const [nextToken, nextDeviceId, nextPermissionStatus] = await Promise.all([
|
|
20
|
+
DooPush.getDeviceToken(),
|
|
21
|
+
DooPush.getDeviceId(),
|
|
22
|
+
DooPush.checkPermissionStatus().catch(() => 'unknown'),
|
|
23
|
+
]);
|
|
24
|
+
setToken(nextToken);
|
|
25
|
+
setDeviceId(nextDeviceId);
|
|
26
|
+
setPermissionStatus(nextPermissionStatus);
|
|
27
|
+
}, []);
|
|
28
|
+
const register = useCallback(async () => {
|
|
29
|
+
setIsRegistering(true);
|
|
30
|
+
setError(null);
|
|
31
|
+
try {
|
|
32
|
+
const result = await DooPush.register();
|
|
33
|
+
setToken(result.token);
|
|
34
|
+
setDeviceId(result.deviceId);
|
|
35
|
+
setVendor(result.vendor);
|
|
36
|
+
return result;
|
|
37
|
+
}
|
|
38
|
+
catch (e) {
|
|
39
|
+
const normalized = normalizeError(e);
|
|
40
|
+
setError(normalized);
|
|
41
|
+
throw e;
|
|
42
|
+
}
|
|
43
|
+
finally {
|
|
44
|
+
setIsRegistering(false);
|
|
45
|
+
}
|
|
46
|
+
}, []);
|
|
47
|
+
const registerWithToken = useCallback(async (externalToken, nextVendor = 'fcm') => {
|
|
48
|
+
setIsRegistering(true);
|
|
49
|
+
setError(null);
|
|
50
|
+
try {
|
|
51
|
+
const result = await DooPush.registerWithToken(externalToken, nextVendor);
|
|
52
|
+
setToken(externalToken);
|
|
53
|
+
setDeviceId(result.deviceId);
|
|
54
|
+
setVendor(nextVendor);
|
|
55
|
+
return result;
|
|
56
|
+
}
|
|
57
|
+
catch (e) {
|
|
58
|
+
const normalized = normalizeError(e);
|
|
59
|
+
setError(normalized);
|
|
60
|
+
throw e;
|
|
61
|
+
}
|
|
62
|
+
finally {
|
|
63
|
+
setIsRegistering(false);
|
|
64
|
+
}
|
|
65
|
+
}, []);
|
|
66
|
+
useEffect(() => {
|
|
67
|
+
refresh().catch((e) => setError(normalizeError(e)));
|
|
68
|
+
const subscriptions = [
|
|
69
|
+
DooPush.addRegisterListener((event) => {
|
|
70
|
+
setToken(event.token);
|
|
71
|
+
setDeviceId(event.deviceId);
|
|
72
|
+
setVendor(event.vendor);
|
|
73
|
+
setError(null);
|
|
74
|
+
}),
|
|
75
|
+
DooPush.addRegisterErrorListener((event) => setError(event)),
|
|
76
|
+
DooPush.addMessageListener(setLastMessage),
|
|
77
|
+
DooPush.addNotificationClickListener(setLastNotificationClick),
|
|
78
|
+
DooPush.addNotificationOpenListener(setLastNotificationOpen),
|
|
79
|
+
];
|
|
80
|
+
return () => subscriptions.forEach((subscription) => subscription.remove());
|
|
81
|
+
}, [refresh]);
|
|
82
|
+
return {
|
|
83
|
+
token,
|
|
84
|
+
deviceId,
|
|
85
|
+
vendor,
|
|
86
|
+
permissionStatus,
|
|
87
|
+
lastMessage,
|
|
88
|
+
lastNotificationClick,
|
|
89
|
+
lastNotificationOpen,
|
|
90
|
+
error,
|
|
91
|
+
isRegistering,
|
|
92
|
+
refresh,
|
|
93
|
+
register,
|
|
94
|
+
registerWithToken,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
/** Subscribe to push message/open/click events and keep a small in-memory list. */
|
|
98
|
+
export function useDooPushMessage(options = {}) {
|
|
99
|
+
const maxMessages = options.maxMessages ?? 50;
|
|
100
|
+
const [messages, setMessages] = useState([]);
|
|
101
|
+
const [lastMessage, setLastMessage] = useState(null);
|
|
102
|
+
const [lastNotificationClick, setLastNotificationClick] = useState(null);
|
|
103
|
+
const [lastNotificationOpen, setLastNotificationOpen] = useState(null);
|
|
104
|
+
useEffect(() => {
|
|
105
|
+
const appendMessage = (message) => {
|
|
106
|
+
setLastMessage(message);
|
|
107
|
+
setMessages((current) => [message, ...current].slice(0, maxMessages));
|
|
108
|
+
};
|
|
109
|
+
const subscriptions = [
|
|
110
|
+
DooPush.addMessageListener(appendMessage),
|
|
111
|
+
DooPush.addNotificationClickListener(setLastNotificationClick),
|
|
112
|
+
DooPush.addNotificationOpenListener(setLastNotificationOpen),
|
|
113
|
+
];
|
|
114
|
+
return () => subscriptions.forEach((subscription) => subscription.remove());
|
|
115
|
+
}, [maxMessages]);
|
|
116
|
+
const clearMessages = useCallback(() => {
|
|
117
|
+
setMessages([]);
|
|
118
|
+
setLastMessage(null);
|
|
119
|
+
}, []);
|
|
120
|
+
return {
|
|
121
|
+
messages,
|
|
122
|
+
lastMessage,
|
|
123
|
+
lastNotificationClick,
|
|
124
|
+
lastNotificationOpen,
|
|
125
|
+
clearMessages,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
function normalizeError(error) {
|
|
129
|
+
if (error && typeof error === 'object') {
|
|
130
|
+
const maybe = error;
|
|
131
|
+
return {
|
|
132
|
+
code: typeof maybe.code === 'string' ? maybe.code : 'E_UNKNOWN',
|
|
133
|
+
message: typeof maybe.message === 'string' ? maybe.message : String(error),
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
return { code: 'E_UNKNOWN', message: String(error) };
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"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","sourcesContent":["import { useCallback, useEffect, useState } from 'react';\nimport * as DooPush from './DooPush';\nimport type {\n DooPushMessage,\n DooPushRegisterResult,\n DooPushVendor,\n DooPushError,\n DooPushPermissionStatus,\n} from './types';\n\nexport interface UseDooPushState {\n token: string | null;\n deviceId: string | null;\n vendor: DooPushVendor | null;\n permissionStatus: DooPushPermissionStatus | null;\n lastMessage: DooPushMessage | null;\n lastNotificationClick: DooPushMessage | null;\n lastNotificationOpen: DooPushMessage | null;\n error: DooPushError | null;\n isRegistering: boolean;\n refresh: () => Promise<void>;\n register: () => Promise<DooPushRegisterResult>;\n registerWithToken: (token: string, vendor?: DooPushVendor) => Promise<{ deviceId: string }>;\n}\n\n/**\n * React hook for the common DooPush state lifecycle: token/deviceId snapshots,\n * registration actions, permission status, messages, notification opens/clicks,\n * and registration errors.\n */\nexport function useDooPush(): UseDooPushState {\n const [token, setToken] = useState<string | null>(null);\n const [deviceId, setDeviceId] = useState<string | null>(null);\n const [vendor, setVendor] = useState<DooPushVendor | null>(null);\n const [permissionStatus, setPermissionStatus] = useState<DooPushPermissionStatus | null>(null);\n const [lastMessage, setLastMessage] = useState<DooPushMessage | null>(null);\n const [lastNotificationClick, setLastNotificationClick] = useState<DooPushMessage | null>(null);\n const [lastNotificationOpen, setLastNotificationOpen] = useState<DooPushMessage | null>(null);\n const [error, setError] = useState<DooPushError | null>(null);\n const [isRegistering, setIsRegistering] = useState(false);\n\n const refresh = useCallback(async () => {\n const [nextToken, nextDeviceId, nextPermissionStatus] = await Promise.all([\n DooPush.getDeviceToken(),\n DooPush.getDeviceId(),\n DooPush.checkPermissionStatus().catch(() => 'unknown' as const),\n ]);\n setToken(nextToken);\n setDeviceId(nextDeviceId);\n setPermissionStatus(nextPermissionStatus);\n }, []);\n\n const register = useCallback(async () => {\n setIsRegistering(true);\n setError(null);\n try {\n const result = await DooPush.register();\n setToken(result.token);\n setDeviceId(result.deviceId);\n setVendor(result.vendor);\n return result;\n } catch (e) {\n const normalized = normalizeError(e);\n setError(normalized);\n throw e;\n } finally {\n setIsRegistering(false);\n }\n }, []);\n\n const registerWithToken = useCallback(async (externalToken: string, nextVendor: DooPushVendor = 'fcm') => {\n setIsRegistering(true);\n setError(null);\n try {\n const result = await DooPush.registerWithToken(externalToken, nextVendor);\n setToken(externalToken);\n setDeviceId(result.deviceId);\n setVendor(nextVendor);\n return result;\n } catch (e) {\n const normalized = normalizeError(e);\n setError(normalized);\n throw e;\n } finally {\n setIsRegistering(false);\n }\n }, []);\n\n useEffect(() => {\n refresh().catch((e) => setError(normalizeError(e)));\n\n const subscriptions = [\n DooPush.addRegisterListener((event) => {\n setToken(event.token);\n setDeviceId(event.deviceId);\n setVendor(event.vendor);\n setError(null);\n }),\n DooPush.addRegisterErrorListener((event) => setError(event)),\n DooPush.addMessageListener(setLastMessage),\n DooPush.addNotificationClickListener(setLastNotificationClick),\n DooPush.addNotificationOpenListener(setLastNotificationOpen),\n ];\n\n return () => subscriptions.forEach((subscription) => subscription.remove());\n }, [refresh]);\n\n return {\n token,\n deviceId,\n vendor,\n permissionStatus,\n lastMessage,\n lastNotificationClick,\n lastNotificationOpen,\n error,\n isRegistering,\n refresh,\n register,\n registerWithToken,\n };\n}\n\n/** Subscribe to push message/open/click events and keep a small in-memory list. */\nexport function useDooPushMessage(options: { maxMessages?: number } = {}) {\n const maxMessages = options.maxMessages ?? 50;\n const [messages, setMessages] = useState<DooPushMessage[]>([]);\n const [lastMessage, setLastMessage] = useState<DooPushMessage | null>(null);\n const [lastNotificationClick, setLastNotificationClick] = useState<DooPushMessage | null>(null);\n const [lastNotificationOpen, setLastNotificationOpen] = useState<DooPushMessage | null>(null);\n\n useEffect(() => {\n const appendMessage = (message: DooPushMessage) => {\n setLastMessage(message);\n setMessages((current) => [message, ...current].slice(0, maxMessages));\n };\n\n const subscriptions = [\n DooPush.addMessageListener(appendMessage),\n DooPush.addNotificationClickListener(setLastNotificationClick),\n DooPush.addNotificationOpenListener(setLastNotificationOpen),\n ];\n\n return () => subscriptions.forEach((subscription) => subscription.remove());\n }, [maxMessages]);\n\n const clearMessages = useCallback(() => {\n setMessages([]);\n setLastMessage(null);\n }, []);\n\n return {\n messages,\n lastMessage,\n lastNotificationClick,\n lastNotificationOpen,\n clearMessages,\n };\n}\n\nfunction normalizeError(error: unknown): DooPushError {\n if (error && typeof error === 'object') {\n const maybe = error as { code?: unknown; message?: unknown };\n return {\n code: typeof maybe.code === 'string' ? maybe.code : 'E_UNKNOWN',\n message: typeof maybe.message === 'string' ? maybe.message : String(error),\n };\n }\n return { code: 'E_UNKNOWN', message: String(error) };\n}\n"]}
|
package/build/index.d.ts
CHANGED
package/build/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC;AACrC,cAAc,SAAS,CAAC;AACxB,YAAY,EACV,eAAe,EACf,oBAAoB,EACpB,SAAS,GACV,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC;AACrC,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,YAAY,EACV,eAAe,EACf,oBAAoB,EACpB,SAAS,GACV,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
|
package/build/index.js
CHANGED
package/build/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"2BAAyB,WAAW;sBAAxB,OAAO;AACnB,cAAc,SAAS,CAAC;AAMxB,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC","sourcesContent":["export * as DooPush from './DooPush';\nexport * from './types';\nexport type {\n OnRegisterEvent,\n OnRegisterErrorEvent,\n EventName,\n} from './events';\nexport { DooPushModule } from './DooPushModule';\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"2BAAyB,WAAW;sBAAxB,OAAO;AACnB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AAMxB,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC","sourcesContent":["export * as DooPush from './DooPush';\nexport * from './types';\nexport * from './hooks';\nexport type {\n OnRegisterEvent,\n OnRegisterErrorEvent,\n EventName,\n} from './events';\nexport { DooPushModule } from './DooPushModule';\n"]}
|
package/build/types.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Vendor channel identifier — must match server-side device.channel field.
|
|
3
|
-
* v0.1.0 alpha only validates "apns" / "fcm"; OEM channels added in v0.5.0.
|
|
4
3
|
*/
|
|
5
4
|
export type DooPushVendor = 'apns' | 'fcm' | 'hms' | 'honor' | 'xiaomi' | 'oppo' | 'vivo' | 'meizu';
|
|
6
5
|
export type DooPushLogLevel = 'debug' | 'info' | 'warning' | 'error' | 'off';
|
|
6
|
+
export type DooPushNotificationManagementMode = 'active' | 'passive';
|
|
7
|
+
export type DooPushPermissionStatus = 'authorized' | 'denied' | 'notDetermined' | 'provisional' | 'ephemeral' | 'unknown';
|
|
7
8
|
export interface DooPushConfig {
|
|
8
9
|
/** DooPush platform appId (assigned by server) */
|
|
9
10
|
appId: string;
|
|
@@ -14,6 +15,21 @@ export interface DooPushConfig {
|
|
|
14
15
|
/** Log level for native SDK side. */
|
|
15
16
|
log?: DooPushLogLevel;
|
|
16
17
|
}
|
|
18
|
+
export interface DooPushRegisterResult {
|
|
19
|
+
token: string;
|
|
20
|
+
deviceId: string;
|
|
21
|
+
vendor: DooPushVendor;
|
|
22
|
+
}
|
|
23
|
+
export interface DooPushDeviceInfo {
|
|
24
|
+
platform: 'ios' | 'android' | string;
|
|
25
|
+
channel: DooPushVendor | string;
|
|
26
|
+
bundleId: string;
|
|
27
|
+
brand: string;
|
|
28
|
+
model: string;
|
|
29
|
+
systemVersion: string;
|
|
30
|
+
appVersion: string;
|
|
31
|
+
userAgent: string;
|
|
32
|
+
}
|
|
17
33
|
/**
|
|
18
34
|
* Push message payload as observed at the JS layer.
|
|
19
35
|
* Fields are union-of-best-effort across iOS APNs and Android FCM/OEM.
|
|
@@ -43,4 +59,15 @@ export interface DooPushError {
|
|
|
43
59
|
message: string;
|
|
44
60
|
vendor?: DooPushVendor;
|
|
45
61
|
}
|
|
62
|
+
export interface DooPushGatewayOpenEvent {
|
|
63
|
+
connected: true;
|
|
64
|
+
}
|
|
65
|
+
export interface DooPushGatewayClosedEvent {
|
|
66
|
+
code: number;
|
|
67
|
+
reason?: string;
|
|
68
|
+
}
|
|
69
|
+
export interface DooPushGatewayErrorEvent {
|
|
70
|
+
code: string;
|
|
71
|
+
message: string;
|
|
72
|
+
}
|
|
46
73
|
//# sourceMappingURL=types.d.ts.map
|
package/build/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,aAAa,GACrB,MAAM,GACN,KAAK,GACL,KAAK,GACL,OAAO,GACP,QAAQ,GACR,MAAM,GACN,MAAM,GACN,OAAO,CAAC;AAEZ,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,KAAK,CAAC;AAE7E,MAAM,MAAM,iCAAiC,GAAG,QAAQ,GAAG,SAAS,CAAC;AAErE,MAAM,MAAM,uBAAuB,GAC/B,YAAY,GACZ,QAAQ,GACR,eAAe,GACf,aAAa,GACb,WAAW,GACX,SAAS,CAAC;AAEd,MAAM,WAAW,aAAa;IAC5B,kDAAkD;IAClD,KAAK,EAAE,MAAM,CAAC;IACd,mDAAmD;IACnD,MAAM,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qCAAqC;IACrC,GAAG,CAAC,EAAE,eAAe,CAAC;CACvB;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,aAAa,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,KAAK,GAAG,SAAS,GAAG,MAAM,CAAC;IACrC,OAAO,EAAE,aAAa,GAAG,MAAM,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,yCAAyC;IACzC,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wBAAwB;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sDAAsD;IACtD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAED,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB"}
|
package/build/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * Vendor channel identifier — must match server-side device.channel field.\n
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * Vendor channel identifier — must match server-side device.channel field.\n */\nexport type DooPushVendor =\n | 'apns'\n | 'fcm'\n | 'hms'\n | 'honor'\n | 'xiaomi'\n | 'oppo'\n | 'vivo'\n | 'meizu';\n\nexport type DooPushLogLevel = 'debug' | 'info' | 'warning' | 'error' | 'off';\n\nexport type DooPushNotificationManagementMode = 'active' | 'passive';\n\nexport type DooPushPermissionStatus =\n | 'authorized'\n | 'denied'\n | 'notDetermined'\n | 'provisional'\n | 'ephemeral'\n | 'unknown';\n\nexport interface DooPushConfig {\n /** DooPush platform appId (assigned by server) */\n appId: string;\n /** DooPush platform apiKey (assigned by server) */\n apiKey: string;\n /** API base URL. Defaults to https://doopush.com/api/v1 if omitted. */\n baseURL?: string;\n /** Log level for native SDK side. */\n log?: DooPushLogLevel;\n}\n\nexport interface DooPushRegisterResult {\n token: string;\n deviceId: string;\n vendor: DooPushVendor;\n}\n\nexport interface DooPushDeviceInfo {\n platform: 'ios' | 'android' | string;\n channel: DooPushVendor | string;\n bundleId: string;\n brand: string;\n model: string;\n systemVersion: string;\n appVersion: string;\n userAgent: string;\n}\n\n/**\n * Push message payload as observed at the JS layer.\n * Fields are union-of-best-effort across iOS APNs and Android FCM/OEM.\n */\nexport interface DooPushMessage {\n /** Vendor that delivered this message */\n vendor?: DooPushVendor;\n /** Notification title (if push has notification block) */\n title?: string;\n /** Notification body */\n body?: string;\n /** Server-side push log id (if present in payload) */\n pushLogId?: string;\n /** Server-side dedup key (if present) */\n dedupKey?: string;\n /** Vendor-specific message id (FCM messageId / APNs apns-id / etc.) */\n messageId?: string;\n /** Original full data payload as a flat string-keyed map */\n data: Record<string, string>;\n}\n\n/**\n * Errors surfaced to JS from native bridge.\n * `code` matches the native DooPushError integer code stringified, plus human-readable form.\n */\nexport interface DooPushError {\n code: string;\n message: string;\n vendor?: DooPushVendor;\n}\n\nexport interface DooPushGatewayOpenEvent {\n connected: true;\n}\n\nexport interface DooPushGatewayClosedEvent {\n code: number;\n reason?: string;\n}\n\nexport interface DooPushGatewayErrorEvent {\n code: string;\n message: string;\n}\n"]}
|
|
@@ -16,9 +16,7 @@ Pod::Spec.new do |s|
|
|
|
16
16
|
s.static_framework = true
|
|
17
17
|
|
|
18
18
|
# Native SDK dependency.
|
|
19
|
-
|
|
20
|
-
# Switch to `s.dependency 'DooPushSDK', '~> 1.1'` once published.
|
|
21
|
-
s.dependency 'DooPushSDK'
|
|
19
|
+
s.dependency 'DooPushSDK', '~> 1.2'
|
|
22
20
|
|
|
23
21
|
s.dependency 'ExpoModulesCore'
|
|
24
22
|
|