@goliapkg/sentori-react-native 5.8.0 → 6.1.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/lib/native.d.ts +173 -0
- package/lib/native.d.ts.map +1 -1
- package/lib/native.js +7 -0
- package/lib/native.js.map +1 -1
- package/lib/push.d.ts +45 -5
- package/lib/push.d.ts.map +1 -1
- package/lib/push.js +69 -32
- package/lib/push.js.map +1 -1
- package/lib/transport.js +1 -1
- package/package.json +4 -4
- package/src/__tests__/push.test.ts +204 -0
- package/src/native.ts +8 -0
- package/src/push.ts +115 -38
- package/src/transport.ts +1 -1
package/lib/native.d.ts
CHANGED
|
@@ -3,6 +3,178 @@
|
|
|
3
3
|
* No-op when not running in an Expo runtime that has the module installed —
|
|
4
4
|
* this keeps the SDK usable in pure-JS environments (jest, bun test, web).
|
|
5
5
|
*/
|
|
6
|
+
type SentoriNativeModule = {
|
|
7
|
+
drainPending: () => Promise<string[]>;
|
|
8
|
+
setConfig: (config: {
|
|
9
|
+
environment: string;
|
|
10
|
+
release: string;
|
|
11
|
+
token: string;
|
|
12
|
+
}) => void;
|
|
13
|
+
/**
|
|
14
|
+
* v0.9.4 #1 — cold start measurement. iOS:
|
|
15
|
+
* `mach_absolute_time` from `applicationDidFinishLaunching` to first
|
|
16
|
+
* JS bridge ready. Android: `Process.getStartElapsedRealtime()`.
|
|
17
|
+
* Returns null when native side hasn't captured yet.
|
|
18
|
+
*/
|
|
19
|
+
getColdStartMs?: () => null | number;
|
|
20
|
+
isColdStartPrewarmed?: () => boolean;
|
|
21
|
+
/**
|
|
22
|
+
* v0.9.4 #1 — call once at JS init() to finalize the cold-start
|
|
23
|
+
* measurement. iOS subtracts from the app-delegate anchor;
|
|
24
|
+
* Android uses Process.getStartElapsedRealtime() so the call is
|
|
25
|
+
* idempotent if missed.
|
|
26
|
+
*/
|
|
27
|
+
markJsBridgeReady?: () => void;
|
|
28
|
+
/**
|
|
29
|
+
* v0.9.4 #1 — slow/frozen frame counters since the most recent
|
|
30
|
+
* navigation transition. Native side hooks `CADisplayLink` (iOS)
|
|
31
|
+
* / `Choreographer.FrameCallback` (Android). Frame > 16.67ms =
|
|
32
|
+
* slow; > 700ms = frozen.
|
|
33
|
+
*/
|
|
34
|
+
getFrameCounters?: () => null | {
|
|
35
|
+
frozen: number;
|
|
36
|
+
slow: number;
|
|
37
|
+
};
|
|
38
|
+
/** Reset counters on navigation transition (called by useTraceNavigation). */
|
|
39
|
+
resetFrameCounters?: () => void;
|
|
40
|
+
/**
|
|
41
|
+
* v0.9.5 #8 — read the most-recent native exception recorded by
|
|
42
|
+
* `SentoriNativeExceptionBridge` within the last 1 s. Used by the
|
|
43
|
+
* JS-side capture path to attach native stack info to a JSError
|
|
44
|
+
* that RN wrapped from a swallowed NSException / Java Exception.
|
|
45
|
+
*/
|
|
46
|
+
getRecentNativeException?: () => null | {
|
|
47
|
+
ageMs: number;
|
|
48
|
+
name: string;
|
|
49
|
+
reason: string;
|
|
50
|
+
stack: string[];
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* v0.7.3 — JS-triggered screenshot with consumer-supplied mask IDs.
|
|
54
|
+
* `maskedIds` are RN `nativeID` strings; native walks the view
|
|
55
|
+
* tree, finds each subview by identifier, and paints a black
|
|
56
|
+
* rectangle over its frame in the captured bitmap. Resolves to
|
|
57
|
+
* `null` if there's no key window / API < 24 (Android) / render
|
|
58
|
+
* timed out. Replaced the previous `react-native-view-shot`
|
|
59
|
+
* peer-dep path.
|
|
60
|
+
*/
|
|
61
|
+
captureScreenshotWithMask?: (maskedIds: string[]) => Promise<null | {
|
|
62
|
+
base64: string;
|
|
63
|
+
mediaType: string;
|
|
64
|
+
}>;
|
|
65
|
+
/**
|
|
66
|
+
* v0.9.6 #2 — wireframe view-tree snapshot. iOS walks the
|
|
67
|
+
* UIView hierarchy, paints each node as a rect/text descriptor,
|
|
68
|
+
* intersects with masked nativeIDs. Returns an NDJSON-shaped
|
|
69
|
+
* snapshot string or null on failure.
|
|
70
|
+
*/
|
|
71
|
+
captureWireframe?: (maskedIds: string[]) => null | string;
|
|
72
|
+
/** v5.1 — low-bitrate replay frame; absent on older native builds. */
|
|
73
|
+
captureReplayFrame?: (maskedIds: string[], longEdgePx: number, quality: number) => Promise<null | {
|
|
74
|
+
base64: string;
|
|
75
|
+
mediaType: string;
|
|
76
|
+
w?: number;
|
|
77
|
+
h?: number;
|
|
78
|
+
}>;
|
|
79
|
+
/**
|
|
80
|
+
* v0.9.12 — diagnostic readout for the wireframe path. Cheap
|
|
81
|
+
* synchronous call that returns the path the last `captureWireframe`
|
|
82
|
+
* tick took plus scene/window counts at that moment. Used by the
|
|
83
|
+
* example app's debug button and the Insight verify flow to tell
|
|
84
|
+
* "no window resolvable" from "window walked but tree empty" without
|
|
85
|
+
* shipping a new pod.
|
|
86
|
+
*/
|
|
87
|
+
probeWireframe?: () => {
|
|
88
|
+
lastPath: string;
|
|
89
|
+
lastNodes: number;
|
|
90
|
+
sceneCount?: number;
|
|
91
|
+
windowCount?: number;
|
|
92
|
+
trackedSource?: string;
|
|
93
|
+
trackedActivity?: string;
|
|
94
|
+
decorViewFound?: boolean;
|
|
95
|
+
/** v1.0.0-rc.3: deepest descendant reached by the walker. If
|
|
96
|
+
* this is 2-3 the walker bailed early; if it matches the
|
|
97
|
+
* expected view-tree depth (~20-40 for RN apps) the capture
|
|
98
|
+
* is healthy. */
|
|
99
|
+
lastDepthMax?: number;
|
|
100
|
+
/** v1.0.0-rc.3: byte length of the last serialised payload. */
|
|
101
|
+
lastSizeBytes?: number;
|
|
102
|
+
/** v1.0.0-rc.3: lifetime counters — totalTicks is the number
|
|
103
|
+
* of times native captureWireframe ran; totalEmptyResultTicks
|
|
104
|
+
* is the subset that came back null or empty. Ratio surfaces
|
|
105
|
+
* intermittent failures (e.g. 200/240 ≈ 80% failure rate). */
|
|
106
|
+
totalTicks?: number;
|
|
107
|
+
totalEmptyResultTicks?: number;
|
|
108
|
+
};
|
|
109
|
+
/**
|
|
110
|
+
* v1.0.0-rc.2 — diagnostic mirror of probeWireframe for the
|
|
111
|
+
* screenshot path. Returned shape is best-effort cross-platform —
|
|
112
|
+
* Android carries `trackedActivity` / `decorViewFound` / dims,
|
|
113
|
+
* iOS carries `windowFound` / `rootViewControllerFound` / `bounds*`.
|
|
114
|
+
* Callers should treat unknown keys as missing.
|
|
115
|
+
*/
|
|
116
|
+
probeScreenshot?: () => Record<string, unknown>;
|
|
117
|
+
/**
|
|
118
|
+
* Phase 22 sub-D / sub-E: cross-platform main-thread watchdog.
|
|
119
|
+
* Android: 5 s / 1 s defaults (matches the OS ANR threshold).
|
|
120
|
+
* iOS: 2 s / 1 s (more aggressive — iOS has no system-level
|
|
121
|
+
* watchdog signal we can lean on, so we surface stutter Apple's
|
|
122
|
+
* own runtime never flags).
|
|
123
|
+
* Reports a `kind = "anr"` event when the main thread is wedged.
|
|
124
|
+
*/
|
|
125
|
+
startAnrWatchdog?: (options?: {
|
|
126
|
+
force?: boolean;
|
|
127
|
+
intervalMs?: number;
|
|
128
|
+
timeoutMs?: number;
|
|
129
|
+
}) => void;
|
|
130
|
+
stopAnrWatchdog?: () => void;
|
|
131
|
+
/** Dev-only — example app uses this to verify the crash flow. */
|
|
132
|
+
triggerTestNativeCrash?: () => void;
|
|
133
|
+
/**
|
|
134
|
+
* v2.9 — current iOS push permission status without prompting.
|
|
135
|
+
* Returns `granted` / `denied` / `notDetermined` / `provisional`
|
|
136
|
+
* / `ephemeral` (iOS-specific) mirroring web `Notification.permission`.
|
|
137
|
+
*/
|
|
138
|
+
pushGetStatus?: () => Promise<string>;
|
|
139
|
+
/**
|
|
140
|
+
* v2.9 — triggers the OS permission prompt the first time, or
|
|
141
|
+
* returns the cached decision. Same return shape as
|
|
142
|
+
* `pushGetStatus`.
|
|
143
|
+
*/
|
|
144
|
+
pushRequestPermission?: () => Promise<string>;
|
|
145
|
+
/**
|
|
146
|
+
* v2.9 — kicks off `UIApplication.registerForRemoteNotifications`.
|
|
147
|
+
* The token comes back asynchronously via the AppDelegate swizzle
|
|
148
|
+
* and lands in the native buffer — JS retrieves it through
|
|
149
|
+
* `pushDrainState`.
|
|
150
|
+
*/
|
|
151
|
+
pushRegister?: () => void;
|
|
152
|
+
/**
|
|
153
|
+
* v2.9 — counterpart to `pushRegister`. Calls
|
|
154
|
+
* `UIApplication.unregisterForRemoteNotifications` + clears the
|
|
155
|
+
* cached token. The server-side DELETE is the JS layer's
|
|
156
|
+
* responsibility.
|
|
157
|
+
*/
|
|
158
|
+
pushUnregister?: () => void;
|
|
159
|
+
/**
|
|
160
|
+
* v2.9 — snapshot the buffered token, foreground notifications,
|
|
161
|
+
* and tap responses, and clear the buffers atomically. Returns
|
|
162
|
+
* { token?: string, error?: string, notifications: [...], taps: [...] }
|
|
163
|
+
* where each notification carries
|
|
164
|
+
* { id, title, body, subtitle?, category?, userInfo, receivedAt }.
|
|
165
|
+
*/
|
|
166
|
+
pushDrainState?: () => Promise<{
|
|
167
|
+
token?: string;
|
|
168
|
+
error?: string;
|
|
169
|
+
notifications: Array<Record<string, unknown>>;
|
|
170
|
+
taps: Array<Record<string, unknown>>;
|
|
171
|
+
}>;
|
|
172
|
+
};
|
|
173
|
+
/** Test-only: stand in for the native module so the paths that only
|
|
174
|
+
* exist when one is bound — a denied permission, a token that never
|
|
175
|
+
* arrives — can be exercised off-device. `undefined` restores real
|
|
176
|
+
* resolution. Production never calls this. */
|
|
177
|
+
export declare function __setNativeForTests(m: Partial<SentoriNativeModule> | null | undefined): void;
|
|
6
178
|
export declare function setNativeConfig(config: {
|
|
7
179
|
environment: string;
|
|
8
180
|
release: string;
|
|
@@ -163,4 +335,5 @@ export declare function probeNativeScreenshot(): {
|
|
|
163
335
|
lastPath: string;
|
|
164
336
|
raw: Record<string, unknown>;
|
|
165
337
|
};
|
|
338
|
+
export {};
|
|
166
339
|
//# sourceMappingURL=native.d.ts.map
|
package/lib/native.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../src/native.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../src/native.ts"],"names":[],"mappings":"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"}
|
package/lib/native.js
CHANGED
|
@@ -5,6 +5,13 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { logger } from '@goliapkg/sentori-core';
|
|
7
7
|
let _native;
|
|
8
|
+
/** Test-only: stand in for the native module so the paths that only
|
|
9
|
+
* exist when one is bound — a denied permission, a token that never
|
|
10
|
+
* arrives — can be exercised off-device. `undefined` restores real
|
|
11
|
+
* resolution. Production never calls this. */
|
|
12
|
+
export function __setNativeForTests(m) {
|
|
13
|
+
_native = m === undefined ? undefined : m;
|
|
14
|
+
}
|
|
8
15
|
function native() {
|
|
9
16
|
if (_native !== undefined)
|
|
10
17
|
return _native;
|
package/lib/native.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native.js","sourceRoot":"","sources":["../src/native.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"native.js","sourceRoot":"","sources":["../src/native.ts"],"names":[],"mappings":"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"}
|
package/lib/push.d.ts
CHANGED
|
@@ -15,8 +15,9 @@ export type PushRegisterOptions = {
|
|
|
15
15
|
/** Token registration completed — useful when the host wants the
|
|
16
16
|
* ipt handle in real time without awaiting `register()`. */
|
|
17
17
|
onToken?: (ipt: string) => void;
|
|
18
|
-
/** Any failure in the registration flow.
|
|
19
|
-
*
|
|
18
|
+
/** Any failure in the registration flow. Convenience only — the
|
|
19
|
+
* promise resolves to `{ ok: false, reason }` either way and
|
|
20
|
+
* never rejects. */
|
|
20
21
|
onError?: (err: Error) => void;
|
|
21
22
|
/** Override the timeout when waiting for the native token to
|
|
22
23
|
* arrive after `registerForRemoteNotifications`. Defaults to
|
|
@@ -24,9 +25,37 @@ export type PushRegisterOptions = {
|
|
|
24
25
|
* delays. */
|
|
25
26
|
tokenTimeoutMs?: number;
|
|
26
27
|
};
|
|
28
|
+
/** Why a registration did not produce a device handle. Each value is
|
|
29
|
+
* a different thing for the host to do, which is the only reason to
|
|
30
|
+
* distinguish them:
|
|
31
|
+
*
|
|
32
|
+
* - `not-initialised` — `sentori.init()` has not run. A wiring bug.
|
|
33
|
+
* - `permission-denied` — the user said no. Not an error. Do not
|
|
34
|
+
* retry on a timer; offer it again from a settings screen.
|
|
35
|
+
* - `no-transport` — no native push module in this binary (Expo Go,
|
|
36
|
+
* a simulator without a push entitlement). Nothing to do at
|
|
37
|
+
* runtime.
|
|
38
|
+
* - `token-timeout` — the OS never handed back a token inside the
|
|
39
|
+
* window. Usually provisioning; retrying later is reasonable.
|
|
40
|
+
* - `server-rejected` — Sentori answered non-2xx. Settings ▸ Push
|
|
41
|
+
* is where to look.
|
|
42
|
+
*/
|
|
43
|
+
export type PushRegisterFailure = 'not-initialised' | 'no-transport' | 'permission-denied' | 'server-rejected' | 'token-timeout';
|
|
44
|
+
/** Registration outcome. `register()` never throws and there is no
|
|
45
|
+
* `catch` branch to forget: a denied permission is an ordinary
|
|
46
|
+
* answer, not an exception. An opt-in that throws inside someone's
|
|
47
|
+
* `useEffect` is precisely the failure this SDK's contract with its
|
|
48
|
+
* host app is written against. */
|
|
27
49
|
export type PushRegisterResult = {
|
|
28
|
-
|
|
50
|
+
ok: true;
|
|
51
|
+
/** Stable device handle: the `device_tokens` row id, a bare
|
|
52
|
+
* uuid. Named `ipt` for the handle format this once returned;
|
|
53
|
+
* the revoke and send routes take the uuid. */
|
|
29
54
|
ipt: string;
|
|
55
|
+
} | {
|
|
56
|
+
ok: false;
|
|
57
|
+
message: string;
|
|
58
|
+
reason: PushRegisterFailure;
|
|
30
59
|
};
|
|
31
60
|
export type PushNotificationPayload = {
|
|
32
61
|
id?: string;
|
|
@@ -38,8 +67,15 @@ export type PushNotificationPayload = {
|
|
|
38
67
|
receivedAt?: number;
|
|
39
68
|
};
|
|
40
69
|
/**
|
|
41
|
-
* Run the
|
|
42
|
-
*
|
|
70
|
+
* Run the push opt-in flow on either platform. Safe to call on every
|
|
71
|
+
* launch: the OS returns its cached permission decision without
|
|
72
|
+
* re-prompting, and the server upserts on
|
|
73
|
+
* `(project_id, provider, native_token)`. Use `getCachedIpt()` if you
|
|
74
|
+
* want the handle without a round trip.
|
|
75
|
+
*
|
|
76
|
+
* Never throws. Every way this can fail comes back as
|
|
77
|
+
* `{ ok: false, reason }` — see `PushRegisterFailure` for what each
|
|
78
|
+
* one asks the host to do.
|
|
43
79
|
*/
|
|
44
80
|
export declare function register(opts?: PushRegisterOptions): Promise<PushRegisterResult>;
|
|
45
81
|
/**
|
|
@@ -55,6 +91,10 @@ export { pushGetStatus as getStatus, pushRequestPermission as requestPermission
|
|
|
55
91
|
/** v2.26 — set the host's current session id so the next ack carries
|
|
56
92
|
* it. Useful for v2.27 correlation (push -> session -> events). */
|
|
57
93
|
export declare function setSessionContext(sessionId: null | string): void;
|
|
94
|
+
/** Test-only: drop the cached handle and stop both timers, so one
|
|
95
|
+
* test's successful registration does not leave an interval running
|
|
96
|
+
* into the next. Production code paths must not call this. */
|
|
97
|
+
export declare function __resetForTests(): void;
|
|
58
98
|
/** Test-only hook to override Platform.OS detection. Production
|
|
59
99
|
* code paths must not call this. */
|
|
60
100
|
export declare function __setPlatformForTests(p: 'ios' | 'android' | 'unknown' | null): void;
|
package/lib/push.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../src/push.ts"],"names":[],"mappings":"AAqCA,OAAO,EAEL,aAAa,EAEb,qBAAqB,EAEtB,MAAM,aAAa,CAAA;AAqBpB,MAAM,MAAM,mBAAmB,GAAG;IAChC;;wEAEoE;IACpE,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;sCACkC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAClC;kDAC8C;IAC9C,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,uBAAuB,KAAK,IAAI,CAAA;IACtD,sDAAsD;IACtD,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IAC/B;iEAC6D;IAC7D,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;IAC/B;
|
|
1
|
+
{"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../src/push.ts"],"names":[],"mappings":"AAqCA,OAAO,EAEL,aAAa,EAEb,qBAAqB,EAEtB,MAAM,aAAa,CAAA;AAqBpB,MAAM,MAAM,mBAAmB,GAAG;IAChC;;wEAEoE;IACpE,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;sCACkC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAClC;kDAC8C;IAC9C,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,uBAAuB,KAAK,IAAI,CAAA;IACtD,sDAAsD;IACtD,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IAC/B;iEAC6D;IAC7D,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;IAC/B;;yBAEqB;IACrB,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAA;IAC9B;;;kBAGc;IACd,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB,CAAA;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,MAAM,mBAAmB,GAC3B,iBAAiB,GACjB,cAAc,GACd,mBAAmB,GACnB,iBAAiB,GACjB,eAAe,CAAA;AAEnB;;;;mCAImC;AACnC,MAAM,MAAM,kBAAkB,GAC1B;IACE,EAAE,EAAE,IAAI,CAAA;IACR;;oDAEgD;IAChD,GAAG,EAAE,MAAM,CAAA;CACZ,GACD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,mBAAmB,CAAA;CAAE,CAAA;AAE/D,MAAM,MAAM,uBAAuB,GAAG;IACpC,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAClC,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,QAAQ,CAAC,IAAI,GAAE,mBAAwB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAqC1F;AAyBD;;;GAGG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAiBhD;AAED;4DAC4D;AAC5D,wBAAgB,YAAY,IAAI,IAAI,GAAG,MAAM,CAE5C;AAED,sDAAsD;AACtD,OAAO,EAAE,aAAa,IAAI,SAAS,EAAE,qBAAqB,IAAI,iBAAiB,EAAE,CAAA;AA+MjF;oEACoE;AACpE,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,CAEhE;AA+ED;;+DAE+D;AAC/D,wBAAgB,eAAe,IAAI,IAAI,CAMtC;AAID;qCACqC;AACrC,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,KAAK,GAAG,SAAS,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,CAEnF"}
|
package/lib/push.js
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
//
|
|
2
|
-
//
|
|
3
|
-
// Mirrors `@goliapkg/sentori-javascript`'s `registerWeb` ergonomics
|
|
4
|
-
// so a cross-platform host app reasons about both flows the same way.
|
|
1
|
+
// React Native push notification opt-in. Both platforms: iOS via
|
|
2
|
+
// APNs, Android via FCM.
|
|
5
3
|
//
|
|
6
4
|
// Flow:
|
|
7
5
|
// 1. `pushRequestPermission()` — OS prompt the first time, or
|
|
8
6
|
// returns the cached decision.
|
|
9
|
-
// 2. `pushRegister()` — kicks off
|
|
10
|
-
// `UIApplication.registerForRemoteNotifications
|
|
11
|
-
//
|
|
12
|
-
// in the native buffer.
|
|
7
|
+
// 2. `pushRegister()` — on iOS kicks off
|
|
8
|
+
// `UIApplication.registerForRemoteNotifications`; on Android
|
|
9
|
+
// asks FCM for the instance token. Either way the token arrives
|
|
10
|
+
// asynchronously and lands in the native buffer.
|
|
13
11
|
// 3. Poll `pushDrainState()` at 200 ms ticks for up to 8 s waiting
|
|
14
12
|
// for the token.
|
|
15
|
-
// 4. POST `/v1/push/tokens` with
|
|
16
|
-
//
|
|
17
|
-
//
|
|
18
|
-
//
|
|
13
|
+
// 4. POST `/v1/push/tokens` with `kind: 'apns' | 'fcm'` — the
|
|
14
|
+
// server's field name; sending `provider` here earned a 422 for
|
|
15
|
+
// every registration this SDK ever attempted — plus
|
|
16
|
+
// `nativeToken`, `userKey`, and `env` on iOS only (FCM is a
|
|
17
|
+
// single host and has no sandbox/production split).
|
|
18
|
+
// 5. Cache the returned device handle (AsyncStorage when
|
|
19
19
|
// available, otherwise module-scoped).
|
|
20
20
|
// 6. Start a 1 Hz drain loop that fires `onMessage` / `onTap` from
|
|
21
21
|
// buffered events while the app is foreground. Pauses on
|
|
@@ -39,12 +39,22 @@ let _ackQueue = [];
|
|
|
39
39
|
let _ackFlushInterval = null;
|
|
40
40
|
let _sessionId = null;
|
|
41
41
|
/**
|
|
42
|
-
* Run the
|
|
43
|
-
*
|
|
42
|
+
* Run the push opt-in flow on either platform. Safe to call on every
|
|
43
|
+
* launch: the OS returns its cached permission decision without
|
|
44
|
+
* re-prompting, and the server upserts on
|
|
45
|
+
* `(project_id, provider, native_token)`. Use `getCachedIpt()` if you
|
|
46
|
+
* want the handle without a round trip.
|
|
47
|
+
*
|
|
48
|
+
* Never throws. Every way this can fail comes back as
|
|
49
|
+
* `{ ok: false, reason }` — see `PushRegisterFailure` for what each
|
|
50
|
+
* one asks the host to do.
|
|
44
51
|
*/
|
|
45
52
|
export async function register(opts = {}) {
|
|
46
53
|
try {
|
|
47
|
-
const cfg =
|
|
54
|
+
const cfg = tryGetRuntimeConfig();
|
|
55
|
+
if (!cfg) {
|
|
56
|
+
return fail(opts, 'not-initialised', 'sentori.init() has not run');
|
|
57
|
+
}
|
|
48
58
|
// Bind callbacks up front so the buffer drain inside
|
|
49
59
|
// waitForToken can fire onMessage / onTap for events that arrive
|
|
50
60
|
// alongside or before the device token (e.g. user taps a push
|
|
@@ -53,8 +63,15 @@ export async function register(opts = {}) {
|
|
|
53
63
|
_onMessage = opts.onMessage;
|
|
54
64
|
_onTap = opts.onTap;
|
|
55
65
|
const status = await pushRequestPermission();
|
|
66
|
+
// `null` means there is no native push module in this binary —
|
|
67
|
+
// a different thing from the user declining, and a different
|
|
68
|
+
// thing for the host to do about it. These were one branch and
|
|
69
|
+
// one message until now.
|
|
70
|
+
if (status == null) {
|
|
71
|
+
return fail(opts, 'no-transport', 'no native push module in this build');
|
|
72
|
+
}
|
|
56
73
|
if (status !== 'granted' && status !== 'provisional' && status !== 'ephemeral') {
|
|
57
|
-
|
|
74
|
+
return fail(opts, 'permission-denied', `push permission '${status}'`);
|
|
58
75
|
}
|
|
59
76
|
nativePushRegister();
|
|
60
77
|
const token = await waitForToken(opts.tokenTimeoutMs ?? 8000);
|
|
@@ -63,13 +80,29 @@ export async function register(opts = {}) {
|
|
|
63
80
|
void persistIpt(ipt);
|
|
64
81
|
opts.onToken?.(ipt);
|
|
65
82
|
bindBufferDrain(opts.onMessage, opts.onTap);
|
|
66
|
-
return { ipt };
|
|
83
|
+
return { ok: true, ipt };
|
|
67
84
|
}
|
|
68
85
|
catch (e) {
|
|
69
86
|
const err = e instanceof Error ? e : new Error(String(e));
|
|
70
|
-
|
|
71
|
-
opts.
|
|
72
|
-
|
|
87
|
+
const reason = e instanceof PushRegisterError ? e.reason : 'server-rejected';
|
|
88
|
+
return fail(opts, reason, err.message);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/** One exit for every failure: warn once, tell `onError` if the host
|
|
92
|
+
* wants a callback, hand back the reason. */
|
|
93
|
+
function fail(opts, reason, message) {
|
|
94
|
+
logger.warn('push', `register failed (${reason}):`, message);
|
|
95
|
+
opts.onError?.(new Error(message));
|
|
96
|
+
return { ok: false, message, reason };
|
|
97
|
+
}
|
|
98
|
+
/** Internal carrier so the helpers below can name which failure they
|
|
99
|
+
* are without every one of them returning a result object. */
|
|
100
|
+
class PushRegisterError extends Error {
|
|
101
|
+
reason;
|
|
102
|
+
constructor(reason, message) {
|
|
103
|
+
super(message);
|
|
104
|
+
this.name = 'PushRegisterError';
|
|
105
|
+
this.reason = reason;
|
|
73
106
|
}
|
|
74
107
|
}
|
|
75
108
|
/**
|
|
@@ -102,13 +135,6 @@ export function getCachedIpt() {
|
|
|
102
135
|
}
|
|
103
136
|
/** Public re-export of the no-prompt status check. */
|
|
104
137
|
export { pushGetStatus as getStatus, pushRequestPermission as requestPermission };
|
|
105
|
-
function getRuntimeConfig() {
|
|
106
|
-
const cfg = tryGetRuntimeConfig();
|
|
107
|
-
if (!cfg) {
|
|
108
|
-
throw new Error('sentori is not initialised; call sentori.init() first');
|
|
109
|
-
}
|
|
110
|
-
return cfg;
|
|
111
|
-
}
|
|
112
138
|
function tryGetRuntimeConfig() {
|
|
113
139
|
// Dynamic require avoids a circular import — `./init` already
|
|
114
140
|
// depends on `./push` via the top-level barrel re-export.
|
|
@@ -125,7 +151,7 @@ async function waitForToken(timeoutMs) {
|
|
|
125
151
|
while (Date.now() - start < timeoutMs) {
|
|
126
152
|
const state = await pushDrainState();
|
|
127
153
|
if (state.error) {
|
|
128
|
-
throw new
|
|
154
|
+
throw new PushRegisterError('no-transport', `OS registration failed: ${state.error}`);
|
|
129
155
|
}
|
|
130
156
|
if (state.token) {
|
|
131
157
|
// Push any buffered events that arrived alongside the token
|
|
@@ -136,7 +162,7 @@ async function waitForToken(timeoutMs) {
|
|
|
136
162
|
flushBuffered(state.notifications, state.taps);
|
|
137
163
|
await new Promise((resolve) => setTimeout(resolve, 200));
|
|
138
164
|
}
|
|
139
|
-
throw new
|
|
165
|
+
throw new PushRegisterError('token-timeout', `no device token within ${timeoutMs} ms`);
|
|
140
166
|
}
|
|
141
167
|
async function registerWithServer(cfg, nativeToken, opts) {
|
|
142
168
|
// v2.10 — cross-platform. iOS routes via APNs with a
|
|
@@ -170,14 +196,15 @@ async function registerWithServer(cfg, nativeToken, opts) {
|
|
|
170
196
|
},
|
|
171
197
|
body: JSON.stringify(body),
|
|
172
198
|
});
|
|
173
|
-
if (!res.ok)
|
|
174
|
-
throw new
|
|
199
|
+
if (!res.ok) {
|
|
200
|
+
throw new PushRegisterError('server-rejected', `/v1/push/tokens HTTP ${res.status}`);
|
|
201
|
+
}
|
|
175
202
|
// The handle is the device_tokens row id — a uuid, which is what
|
|
176
203
|
// the revoke and send routes take. It was parsed here as an
|
|
177
204
|
// `ipt_*` string that no server has ever returned.
|
|
178
205
|
const json = (await res.json());
|
|
179
206
|
if (typeof json.token_id !== 'string' || json.token_id.length === 0) {
|
|
180
|
-
throw new
|
|
207
|
+
throw new PushRegisterError('server-rejected', 'server did not return a device token id');
|
|
181
208
|
}
|
|
182
209
|
return json.token_id;
|
|
183
210
|
}
|
|
@@ -369,6 +396,16 @@ async function tryAsyncStorage() {
|
|
|
369
396
|
function joinUrl(base, path) {
|
|
370
397
|
return `${base.replace(/\/+$/, '')}${path}`;
|
|
371
398
|
}
|
|
399
|
+
/** Test-only: drop the cached handle and stop both timers, so one
|
|
400
|
+
* test's successful registration does not leave an interval running
|
|
401
|
+
* into the next. Production code paths must not call this. */
|
|
402
|
+
export function __resetForTests() {
|
|
403
|
+
_cachedIpt = null;
|
|
404
|
+
_onMessage = undefined;
|
|
405
|
+
_onTap = undefined;
|
|
406
|
+
_ackQueue = [];
|
|
407
|
+
teardownBufferDrain();
|
|
408
|
+
}
|
|
372
409
|
let _platformOverride = null;
|
|
373
410
|
/** Test-only hook to override Platform.OS detection. Production
|
|
374
411
|
* code paths must not call this. */
|
package/lib/push.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"push.js","sourceRoot":"","sources":["../src/push.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"push.js","sourceRoot":"","sources":["../src/push.ts"],"names":[],"mappings":"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"}
|
package/lib/transport.js
CHANGED
|
@@ -15,7 +15,7 @@ const MAX_RETRY = 3;
|
|
|
15
15
|
const STORAGE_KEY = '@sentori/pending';
|
|
16
16
|
const MAX_PERSISTED = 1000;
|
|
17
17
|
// Pinned to package.json by a test — bump both together.
|
|
18
|
-
const SDK_VERSION = '
|
|
18
|
+
const SDK_VERSION = '6.1.0';
|
|
19
19
|
let _queue = [];
|
|
20
20
|
let _assertStats = new Map();
|
|
21
21
|
let _flushTimer = null;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@goliapkg/sentori-react-native",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "Sentori SDK for React Native
|
|
3
|
+
"version": "6.1.0",
|
|
4
|
+
"description": "Sentori SDK for React Native — JS-layer error capture, native crash handlers (iOS / Android), batched transport, fetch + react-navigation tracing.",
|
|
5
5
|
"license": "Apache-2.0 OR MIT",
|
|
6
6
|
"author": "GOLIA K.K. <takagi@golia.jp> (https://golia.jp)",
|
|
7
7
|
"homepage": "https://sentori.golia.jp",
|
|
@@ -52,9 +52,9 @@
|
|
|
52
52
|
"prepack": "bun run build"
|
|
53
53
|
},
|
|
54
54
|
"peerDependencies": {
|
|
55
|
-
"expo-modules-core": ">=
|
|
55
|
+
"expo-modules-core": ">=57.0.0",
|
|
56
56
|
"react": ">=19",
|
|
57
|
-
"react-native": ">=0.
|
|
57
|
+
"react-native": ">=0.86.0"
|
|
58
58
|
},
|
|
59
59
|
"peerDependenciesMeta": {
|
|
60
60
|
"@react-native-async-storage/async-storage": {
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
// Push registration: never throws, and names why it failed.
|
|
2
|
+
//
|
|
3
|
+
// There were no push tests in this package at all. That is the
|
|
4
|
+
// reason three unbalanced INSERTs on the server and two field
|
|
5
|
+
// mismatches in this file survived a year: every one of them made
|
|
6
|
+
// registration fail, and nothing anywhere asserted that registration
|
|
7
|
+
// succeeds.
|
|
8
|
+
|
|
9
|
+
import { afterEach, beforeEach, describe, expect, it } from 'bun:test';
|
|
10
|
+
|
|
11
|
+
import { __setNativeForTests } from '../native';
|
|
12
|
+
import {
|
|
13
|
+
__resetForTests as resetPush,
|
|
14
|
+
__setPlatformForTests as setPlatform,
|
|
15
|
+
register,
|
|
16
|
+
} from '../push';
|
|
17
|
+
import { __resetForTests as resetConfig, setConfig } from '../config';
|
|
18
|
+
import { __resetForTests as resetScope } from '../scope';
|
|
19
|
+
|
|
20
|
+
const baseConfig = {
|
|
21
|
+
token: 'st_test',
|
|
22
|
+
ingestUrl: 'http://localhost:18080',
|
|
23
|
+
release: 'app@1.0.0',
|
|
24
|
+
environment: 'test',
|
|
25
|
+
enabled: true,
|
|
26
|
+
detect: { rageTap: false, longFreeze: false, slowColdStart: false, slowApi: false },
|
|
27
|
+
replaySeconds: 30,
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
/** A native module that grants permission and hands back a token on
|
|
31
|
+
* the first drain — the shape the real one has when everything
|
|
32
|
+
* works. Override pieces per test. */
|
|
33
|
+
function grantingNative(over: Record<string, unknown> = {}) {
|
|
34
|
+
return {
|
|
35
|
+
pushRequestPermission: () => Promise.resolve('granted'),
|
|
36
|
+
pushGetStatus: () => Promise.resolve('granted'),
|
|
37
|
+
pushRegister: () => undefined,
|
|
38
|
+
pushUnregister: () => undefined,
|
|
39
|
+
pushDrainState: () => Promise.resolve({ token: 'abc123', notifications: [], taps: [] }),
|
|
40
|
+
...over,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const realFetch = globalThis.fetch;
|
|
45
|
+
|
|
46
|
+
/** Answer /v1/push/tokens with `body` under `status`. */
|
|
47
|
+
function stubFetch(status: number, body: unknown): void {
|
|
48
|
+
globalThis.fetch = (() =>
|
|
49
|
+
Promise.resolve({
|
|
50
|
+
ok: status >= 200 && status < 300,
|
|
51
|
+
status,
|
|
52
|
+
json: () => Promise.resolve(body),
|
|
53
|
+
})) as unknown as typeof fetch;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
describe('push.register', () => {
|
|
57
|
+
beforeEach(() => {
|
|
58
|
+
resetPush();
|
|
59
|
+
resetConfig();
|
|
60
|
+
resetScope();
|
|
61
|
+
setPlatform('ios');
|
|
62
|
+
setConfig(baseConfig);
|
|
63
|
+
});
|
|
64
|
+
afterEach(() => {
|
|
65
|
+
resetPush();
|
|
66
|
+
resetConfig();
|
|
67
|
+
resetScope();
|
|
68
|
+
setPlatform(null);
|
|
69
|
+
__setNativeForTests(undefined);
|
|
70
|
+
globalThis.fetch = realFetch;
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
it('returns the device handle when the whole flow works', async () => {
|
|
74
|
+
__setNativeForTests(grantingNative());
|
|
75
|
+
stubFetch(200, { token_id: '018f0000-0000-7000-8000-000000000001', is_new: true });
|
|
76
|
+
|
|
77
|
+
const r = await register();
|
|
78
|
+
|
|
79
|
+
expect(r.ok).toBe(true);
|
|
80
|
+
if (r.ok) expect(r.ipt).toBe('018f0000-0000-7000-8000-000000000001');
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
it('sends `kind`, not `provider` — the field name that 422d for a year', async () => {
|
|
84
|
+
__setNativeForTests(grantingNative());
|
|
85
|
+
let sent: Record<string, unknown> = {};
|
|
86
|
+
globalThis.fetch = ((_url: string, init: { body: string }) => {
|
|
87
|
+
sent = JSON.parse(init.body) as Record<string, unknown>;
|
|
88
|
+
return Promise.resolve({
|
|
89
|
+
ok: true,
|
|
90
|
+
status: 200,
|
|
91
|
+
json: () => Promise.resolve({ token_id: 'id-1' }),
|
|
92
|
+
});
|
|
93
|
+
}) as unknown as typeof fetch;
|
|
94
|
+
|
|
95
|
+
await register();
|
|
96
|
+
|
|
97
|
+
expect(sent.kind).toBe('apns');
|
|
98
|
+
expect(sent.provider).toBeUndefined();
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
it('sends kind=fcm and no env on Android — FCM has no sandbox split', async () => {
|
|
102
|
+
setPlatform('android');
|
|
103
|
+
__setNativeForTests(grantingNative());
|
|
104
|
+
let sent: Record<string, unknown> = {};
|
|
105
|
+
globalThis.fetch = ((_url: string, init: { body: string }) => {
|
|
106
|
+
sent = JSON.parse(init.body) as Record<string, unknown>;
|
|
107
|
+
return Promise.resolve({
|
|
108
|
+
ok: true,
|
|
109
|
+
status: 200,
|
|
110
|
+
json: () => Promise.resolve({ token_id: 'id-1' }),
|
|
111
|
+
});
|
|
112
|
+
}) as unknown as typeof fetch;
|
|
113
|
+
|
|
114
|
+
await register();
|
|
115
|
+
|
|
116
|
+
expect(sent.kind).toBe('fcm');
|
|
117
|
+
expect('env' in sent).toBe(false);
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
it('reports not-initialised rather than throwing when init() has not run', async () => {
|
|
121
|
+
resetConfig();
|
|
122
|
+
__setNativeForTests(grantingNative());
|
|
123
|
+
|
|
124
|
+
const r = await register();
|
|
125
|
+
|
|
126
|
+
expect(r.ok).toBe(false);
|
|
127
|
+
if (!r.ok) expect(r.reason).toBe('not-initialised');
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
it('separates "no native module" from "user declined"', async () => {
|
|
131
|
+
__setNativeForTests(null);
|
|
132
|
+
const absent = await register();
|
|
133
|
+
expect(absent.ok).toBe(false);
|
|
134
|
+
if (!absent.ok) expect(absent.reason).toBe('no-transport');
|
|
135
|
+
|
|
136
|
+
__setNativeForTests(grantingNative({ pushRequestPermission: () => Promise.resolve('denied') }));
|
|
137
|
+
const declined = await register();
|
|
138
|
+
expect(declined.ok).toBe(false);
|
|
139
|
+
if (!declined.ok) expect(declined.reason).toBe('permission-denied');
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
it('reports token-timeout when the OS never hands one back', async () => {
|
|
143
|
+
__setNativeForTests(
|
|
144
|
+
grantingNative({
|
|
145
|
+
pushDrainState: () => Promise.resolve({ notifications: [], taps: [] }),
|
|
146
|
+
}),
|
|
147
|
+
);
|
|
148
|
+
|
|
149
|
+
const r = await register({ tokenTimeoutMs: 250 });
|
|
150
|
+
|
|
151
|
+
expect(r.ok).toBe(false);
|
|
152
|
+
if (!r.ok) expect(r.reason).toBe('token-timeout');
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
it('reports server-rejected on a non-2xx, and on a 2xx with no id', async () => {
|
|
156
|
+
__setNativeForTests(grantingNative());
|
|
157
|
+
|
|
158
|
+
stubFetch(500, {});
|
|
159
|
+
const five = await register();
|
|
160
|
+
expect(five.ok).toBe(false);
|
|
161
|
+
if (!five.ok) expect(five.reason).toBe('server-rejected');
|
|
162
|
+
|
|
163
|
+
// A 200 that carries nothing usable is the same problem wearing a
|
|
164
|
+
// better status code — this is what the SDK used to accept and
|
|
165
|
+
// then throw on, deeper in.
|
|
166
|
+
stubFetch(200, { ok: true });
|
|
167
|
+
const empty = await register();
|
|
168
|
+
expect(empty.ok).toBe(false);
|
|
169
|
+
if (!empty.ok) expect(empty.reason).toBe('server-rejected');
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
it('never rejects — the whole point (client zero-cost iron rule)', async () => {
|
|
173
|
+
// Every failure mode in one loop, including a native module that
|
|
174
|
+
// throws out of each of its methods.
|
|
175
|
+
const hostile = [
|
|
176
|
+
null,
|
|
177
|
+
grantingNative({
|
|
178
|
+
pushRequestPermission: () => {
|
|
179
|
+
throw new Error('native exploded');
|
|
180
|
+
},
|
|
181
|
+
}),
|
|
182
|
+
grantingNative({
|
|
183
|
+
pushDrainState: () => Promise.resolve({ error: 'APS denied', notifications: [], taps: [] }),
|
|
184
|
+
}),
|
|
185
|
+
];
|
|
186
|
+
globalThis.fetch = (() => Promise.reject(new Error('network down'))) as unknown as typeof fetch;
|
|
187
|
+
|
|
188
|
+
for (const n of hostile) {
|
|
189
|
+
__setNativeForTests(n as never);
|
|
190
|
+
const r = await register({ tokenTimeoutMs: 150 });
|
|
191
|
+
expect(r.ok).toBe(false);
|
|
192
|
+
}
|
|
193
|
+
});
|
|
194
|
+
|
|
195
|
+
it('calls onError but still resolves, so a host can use either style', async () => {
|
|
196
|
+
__setNativeForTests(null);
|
|
197
|
+
let seen: null | string = null;
|
|
198
|
+
|
|
199
|
+
const r = await register({ onError: (e) => (seen = e.message) });
|
|
200
|
+
|
|
201
|
+
expect(r.ok).toBe(false);
|
|
202
|
+
expect(seen).not.toBeNull();
|
|
203
|
+
});
|
|
204
|
+
});
|
package/src/native.ts
CHANGED
|
@@ -174,6 +174,14 @@ type SentoriNativeModule = {
|
|
|
174
174
|
|
|
175
175
|
let _native: SentoriNativeModule | null | undefined
|
|
176
176
|
|
|
177
|
+
/** Test-only: stand in for the native module so the paths that only
|
|
178
|
+
* exist when one is bound — a denied permission, a token that never
|
|
179
|
+
* arrives — can be exercised off-device. `undefined` restores real
|
|
180
|
+
* resolution. Production never calls this. */
|
|
181
|
+
export function __setNativeForTests(m: Partial<SentoriNativeModule> | null | undefined): void {
|
|
182
|
+
_native = m === undefined ? undefined : (m as SentoriNativeModule | null)
|
|
183
|
+
}
|
|
184
|
+
|
|
177
185
|
function native(): SentoriNativeModule | null {
|
|
178
186
|
if (_native !== undefined) return _native
|
|
179
187
|
try {
|
package/src/push.ts
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
//
|
|
2
|
-
//
|
|
3
|
-
// Mirrors `@goliapkg/sentori-javascript`'s `registerWeb` ergonomics
|
|
4
|
-
// so a cross-platform host app reasons about both flows the same way.
|
|
1
|
+
// React Native push notification opt-in. Both platforms: iOS via
|
|
2
|
+
// APNs, Android via FCM.
|
|
5
3
|
//
|
|
6
4
|
// Flow:
|
|
7
5
|
// 1. `pushRequestPermission()` — OS prompt the first time, or
|
|
8
6
|
// returns the cached decision.
|
|
9
|
-
// 2. `pushRegister()` — kicks off
|
|
10
|
-
// `UIApplication.registerForRemoteNotifications
|
|
11
|
-
//
|
|
12
|
-
// in the native buffer.
|
|
7
|
+
// 2. `pushRegister()` — on iOS kicks off
|
|
8
|
+
// `UIApplication.registerForRemoteNotifications`; on Android
|
|
9
|
+
// asks FCM for the instance token. Either way the token arrives
|
|
10
|
+
// asynchronously and lands in the native buffer.
|
|
13
11
|
// 3. Poll `pushDrainState()` at 200 ms ticks for up to 8 s waiting
|
|
14
12
|
// for the token.
|
|
15
|
-
// 4. POST `/v1/push/tokens` with
|
|
16
|
-
//
|
|
17
|
-
//
|
|
18
|
-
//
|
|
13
|
+
// 4. POST `/v1/push/tokens` with `kind: 'apns' | 'fcm'` — the
|
|
14
|
+
// server's field name; sending `provider` here earned a 422 for
|
|
15
|
+
// every registration this SDK ever attempted — plus
|
|
16
|
+
// `nativeToken`, `userKey`, and `env` on iOS only (FCM is a
|
|
17
|
+
// single host and has no sandbox/production split).
|
|
18
|
+
// 5. Cache the returned device handle (AsyncStorage when
|
|
19
19
|
// available, otherwise module-scoped).
|
|
20
20
|
// 6. Start a 1 Hz drain loop that fires `onMessage` / `onTap` from
|
|
21
21
|
// buffered events while the app is foreground. Pauses on
|
|
@@ -78,8 +78,9 @@ export type PushRegisterOptions = {
|
|
|
78
78
|
/** Token registration completed — useful when the host wants the
|
|
79
79
|
* ipt handle in real time without awaiting `register()`. */
|
|
80
80
|
onToken?: (ipt: string) => void
|
|
81
|
-
/** Any failure in the registration flow.
|
|
82
|
-
*
|
|
81
|
+
/** Any failure in the registration flow. Convenience only — the
|
|
82
|
+
* promise resolves to `{ ok: false, reason }` either way and
|
|
83
|
+
* never rejects. */
|
|
83
84
|
onError?: (err: Error) => void
|
|
84
85
|
/** Override the timeout when waiting for the native token to
|
|
85
86
|
* arrive after `registerForRemoteNotifications`. Defaults to
|
|
@@ -88,10 +89,42 @@ export type PushRegisterOptions = {
|
|
|
88
89
|
tokenTimeoutMs?: number
|
|
89
90
|
}
|
|
90
91
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
92
|
+
/** Why a registration did not produce a device handle. Each value is
|
|
93
|
+
* a different thing for the host to do, which is the only reason to
|
|
94
|
+
* distinguish them:
|
|
95
|
+
*
|
|
96
|
+
* - `not-initialised` — `sentori.init()` has not run. A wiring bug.
|
|
97
|
+
* - `permission-denied` — the user said no. Not an error. Do not
|
|
98
|
+
* retry on a timer; offer it again from a settings screen.
|
|
99
|
+
* - `no-transport` — no native push module in this binary (Expo Go,
|
|
100
|
+
* a simulator without a push entitlement). Nothing to do at
|
|
101
|
+
* runtime.
|
|
102
|
+
* - `token-timeout` — the OS never handed back a token inside the
|
|
103
|
+
* window. Usually provisioning; retrying later is reasonable.
|
|
104
|
+
* - `server-rejected` — Sentori answered non-2xx. Settings ▸ Push
|
|
105
|
+
* is where to look.
|
|
106
|
+
*/
|
|
107
|
+
export type PushRegisterFailure =
|
|
108
|
+
| 'not-initialised'
|
|
109
|
+
| 'no-transport'
|
|
110
|
+
| 'permission-denied'
|
|
111
|
+
| 'server-rejected'
|
|
112
|
+
| 'token-timeout'
|
|
113
|
+
|
|
114
|
+
/** Registration outcome. `register()` never throws and there is no
|
|
115
|
+
* `catch` branch to forget: a denied permission is an ordinary
|
|
116
|
+
* answer, not an exception. An opt-in that throws inside someone's
|
|
117
|
+
* `useEffect` is precisely the failure this SDK's contract with its
|
|
118
|
+
* host app is written against. */
|
|
119
|
+
export type PushRegisterResult =
|
|
120
|
+
| {
|
|
121
|
+
ok: true
|
|
122
|
+
/** Stable device handle: the `device_tokens` row id, a bare
|
|
123
|
+
* uuid. Named `ipt` for the handle format this once returned;
|
|
124
|
+
* the revoke and send routes take the uuid. */
|
|
125
|
+
ipt: string
|
|
126
|
+
}
|
|
127
|
+
| { ok: false; message: string; reason: PushRegisterFailure }
|
|
95
128
|
|
|
96
129
|
export type PushNotificationPayload = {
|
|
97
130
|
id?: string
|
|
@@ -104,12 +137,22 @@ export type PushNotificationPayload = {
|
|
|
104
137
|
}
|
|
105
138
|
|
|
106
139
|
/**
|
|
107
|
-
* Run the
|
|
108
|
-
*
|
|
140
|
+
* Run the push opt-in flow on either platform. Safe to call on every
|
|
141
|
+
* launch: the OS returns its cached permission decision without
|
|
142
|
+
* re-prompting, and the server upserts on
|
|
143
|
+
* `(project_id, provider, native_token)`. Use `getCachedIpt()` if you
|
|
144
|
+
* want the handle without a round trip.
|
|
145
|
+
*
|
|
146
|
+
* Never throws. Every way this can fail comes back as
|
|
147
|
+
* `{ ok: false, reason }` — see `PushRegisterFailure` for what each
|
|
148
|
+
* one asks the host to do.
|
|
109
149
|
*/
|
|
110
150
|
export async function register(opts: PushRegisterOptions = {}): Promise<PushRegisterResult> {
|
|
111
151
|
try {
|
|
112
|
-
const cfg =
|
|
152
|
+
const cfg = tryGetRuntimeConfig()
|
|
153
|
+
if (!cfg) {
|
|
154
|
+
return fail(opts, 'not-initialised', 'sentori.init() has not run')
|
|
155
|
+
}
|
|
113
156
|
// Bind callbacks up front so the buffer drain inside
|
|
114
157
|
// waitForToken can fire onMessage / onTap for events that arrive
|
|
115
158
|
// alongside or before the device token (e.g. user taps a push
|
|
@@ -118,8 +161,15 @@ export async function register(opts: PushRegisterOptions = {}): Promise<PushRegi
|
|
|
118
161
|
_onMessage = opts.onMessage
|
|
119
162
|
_onTap = opts.onTap
|
|
120
163
|
const status = await pushRequestPermission()
|
|
164
|
+
// `null` means there is no native push module in this binary —
|
|
165
|
+
// a different thing from the user declining, and a different
|
|
166
|
+
// thing for the host to do about it. These were one branch and
|
|
167
|
+
// one message until now.
|
|
168
|
+
if (status == null) {
|
|
169
|
+
return fail(opts, 'no-transport', 'no native push module in this build')
|
|
170
|
+
}
|
|
121
171
|
if (status !== 'granted' && status !== 'provisional' && status !== 'ephemeral') {
|
|
122
|
-
|
|
172
|
+
return fail(opts, 'permission-denied', `push permission '${status}'`)
|
|
123
173
|
}
|
|
124
174
|
nativePushRegister()
|
|
125
175
|
const token = await waitForToken(opts.tokenTimeoutMs ?? 8000)
|
|
@@ -128,12 +178,34 @@ export async function register(opts: PushRegisterOptions = {}): Promise<PushRegi
|
|
|
128
178
|
void persistIpt(ipt)
|
|
129
179
|
opts.onToken?.(ipt)
|
|
130
180
|
bindBufferDrain(opts.onMessage, opts.onTap)
|
|
131
|
-
return { ipt }
|
|
181
|
+
return { ok: true, ipt }
|
|
132
182
|
} catch (e) {
|
|
133
183
|
const err = e instanceof Error ? e : new Error(String(e))
|
|
134
|
-
|
|
135
|
-
opts.
|
|
136
|
-
|
|
184
|
+
const reason = e instanceof PushRegisterError ? e.reason : 'server-rejected'
|
|
185
|
+
return fail(opts, reason, err.message)
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/** One exit for every failure: warn once, tell `onError` if the host
|
|
190
|
+
* wants a callback, hand back the reason. */
|
|
191
|
+
function fail(
|
|
192
|
+
opts: PushRegisterOptions,
|
|
193
|
+
reason: PushRegisterFailure,
|
|
194
|
+
message: string,
|
|
195
|
+
): PushRegisterResult {
|
|
196
|
+
logger.warn('push', `register failed (${reason}):`, message)
|
|
197
|
+
opts.onError?.(new Error(message))
|
|
198
|
+
return { ok: false, message, reason }
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/** Internal carrier so the helpers below can name which failure they
|
|
202
|
+
* are without every one of them returning a result object. */
|
|
203
|
+
class PushRegisterError extends Error {
|
|
204
|
+
readonly reason: PushRegisterFailure
|
|
205
|
+
constructor(reason: PushRegisterFailure, message: string) {
|
|
206
|
+
super(message)
|
|
207
|
+
this.name = 'PushRegisterError'
|
|
208
|
+
this.reason = reason
|
|
137
209
|
}
|
|
138
210
|
}
|
|
139
211
|
|
|
@@ -173,14 +245,6 @@ export { pushGetStatus as getStatus, pushRequestPermission as requestPermission
|
|
|
173
245
|
|
|
174
246
|
type RuntimeConfig = { ingestUrl: string; token: string }
|
|
175
247
|
|
|
176
|
-
function getRuntimeConfig(): RuntimeConfig {
|
|
177
|
-
const cfg = tryGetRuntimeConfig()
|
|
178
|
-
if (!cfg) {
|
|
179
|
-
throw new Error('sentori is not initialised; call sentori.init() first')
|
|
180
|
-
}
|
|
181
|
-
return cfg
|
|
182
|
-
}
|
|
183
|
-
|
|
184
248
|
function tryGetRuntimeConfig(): RuntimeConfig | null {
|
|
185
249
|
// Dynamic require avoids a circular import — `./init` already
|
|
186
250
|
// depends on `./push` via the top-level barrel re-export.
|
|
@@ -197,7 +261,7 @@ async function waitForToken(timeoutMs: number): Promise<string> {
|
|
|
197
261
|
while (Date.now() - start < timeoutMs) {
|
|
198
262
|
const state = await pushDrainState()
|
|
199
263
|
if (state.error) {
|
|
200
|
-
throw new
|
|
264
|
+
throw new PushRegisterError('no-transport', `OS registration failed: ${state.error}`)
|
|
201
265
|
}
|
|
202
266
|
if (state.token) {
|
|
203
267
|
// Push any buffered events that arrived alongside the token
|
|
@@ -208,7 +272,7 @@ async function waitForToken(timeoutMs: number): Promise<string> {
|
|
|
208
272
|
flushBuffered(state.notifications, state.taps)
|
|
209
273
|
await new Promise((resolve) => setTimeout(resolve, 200))
|
|
210
274
|
}
|
|
211
|
-
throw new
|
|
275
|
+
throw new PushRegisterError('token-timeout', `no device token within ${timeoutMs} ms`)
|
|
212
276
|
}
|
|
213
277
|
|
|
214
278
|
async function registerWithServer(
|
|
@@ -246,13 +310,15 @@ async function registerWithServer(
|
|
|
246
310
|
},
|
|
247
311
|
body: JSON.stringify(body),
|
|
248
312
|
})
|
|
249
|
-
if (!res.ok)
|
|
313
|
+
if (!res.ok) {
|
|
314
|
+
throw new PushRegisterError('server-rejected', `/v1/push/tokens HTTP ${res.status}`)
|
|
315
|
+
}
|
|
250
316
|
// The handle is the device_tokens row id — a uuid, which is what
|
|
251
317
|
// the revoke and send routes take. It was parsed here as an
|
|
252
318
|
// `ipt_*` string that no server has ever returned.
|
|
253
319
|
const json = (await res.json()) as { token_id?: string }
|
|
254
320
|
if (typeof json.token_id !== 'string' || json.token_id.length === 0) {
|
|
255
|
-
throw new
|
|
321
|
+
throw new PushRegisterError('server-rejected', 'server did not return a device token id')
|
|
256
322
|
}
|
|
257
323
|
return json.token_id
|
|
258
324
|
}
|
|
@@ -463,6 +529,17 @@ function joinUrl(base: string, path: string): string {
|
|
|
463
529
|
return `${base.replace(/\/+$/, '')}${path}`
|
|
464
530
|
}
|
|
465
531
|
|
|
532
|
+
/** Test-only: drop the cached handle and stop both timers, so one
|
|
533
|
+
* test's successful registration does not leave an interval running
|
|
534
|
+
* into the next. Production code paths must not call this. */
|
|
535
|
+
export function __resetForTests(): void {
|
|
536
|
+
_cachedIpt = null
|
|
537
|
+
_onMessage = undefined
|
|
538
|
+
_onTap = undefined
|
|
539
|
+
_ackQueue = []
|
|
540
|
+
teardownBufferDrain()
|
|
541
|
+
}
|
|
542
|
+
|
|
466
543
|
let _platformOverride: 'ios' | 'android' | 'unknown' | null = null
|
|
467
544
|
|
|
468
545
|
/** Test-only hook to override Platform.OS detection. Production
|
package/src/transport.ts
CHANGED
|
@@ -20,7 +20,7 @@ const STORAGE_KEY = '@sentori/pending';
|
|
|
20
20
|
const MAX_PERSISTED = 1000;
|
|
21
21
|
|
|
22
22
|
// Pinned to package.json by a test — bump both together.
|
|
23
|
-
const SDK_VERSION = '
|
|
23
|
+
const SDK_VERSION = '6.1.0';
|
|
24
24
|
|
|
25
25
|
let _queue: WireEvent[] = [];
|
|
26
26
|
let _assertStats = new Map<string, AssertStat>();
|