@buoy-gg/notifications 7.0.41 → 7.0.43

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.
Files changed (71) hide show
  1. package/lib/commonjs/components/LocalNotificationTest.js +1 -185
  2. package/lib/commonjs/components/NotificationTestView.js +1 -329
  3. package/lib/commonjs/components/NotificationToolView.js +1 -673
  4. package/lib/commonjs/components/notificationStyles.js +1 -292
  5. package/lib/commonjs/expo.js +1 -247
  6. package/lib/commonjs/index.js +1 -148
  7. package/lib/commonjs/json.js +1 -58
  8. package/lib/commonjs/payload.js +1 -68
  9. package/lib/commonjs/preset.js +1 -56
  10. package/lib/commonjs/preview.js +1 -18
  11. package/lib/commonjs/recorder.js +1 -339
  12. package/lib/commonjs/runtime.js +1 -110
  13. package/lib/commonjs/storage.js +1 -61
  14. package/lib/commonjs/types.js +0 -1
  15. package/lib/module/components/LocalNotificationTest.js +1 -180
  16. package/lib/module/components/NotificationTestView.js +1 -324
  17. package/lib/module/components/NotificationToolView.js +1 -668
  18. package/lib/module/components/notificationStyles.js +1 -288
  19. package/lib/module/expo.js +1 -241
  20. package/lib/module/index.js +1 -13
  21. package/lib/module/json.js +1 -51
  22. package/lib/module/payload.js +1 -63
  23. package/lib/module/preset.js +1 -50
  24. package/lib/module/preview.js +1 -14
  25. package/lib/module/recorder.js +1 -332
  26. package/lib/module/runtime.js +1 -103
  27. package/lib/module/storage.js +1 -56
  28. package/lib/module/types.js +0 -1
  29. package/package.json +2 -2
  30. package/lib/commonjs/components/LocalNotificationTest.js.map +0 -1
  31. package/lib/commonjs/components/NotificationTestView.js.map +0 -1
  32. package/lib/commonjs/components/NotificationToolView.js.map +0 -1
  33. package/lib/commonjs/components/notificationStyles.js.map +0 -1
  34. package/lib/commonjs/expo.js.map +0 -1
  35. package/lib/commonjs/index.js.map +0 -1
  36. package/lib/commonjs/json.js.map +0 -1
  37. package/lib/commonjs/payload.js.map +0 -1
  38. package/lib/commonjs/preset.js.map +0 -1
  39. package/lib/commonjs/preview.js.map +0 -1
  40. package/lib/commonjs/recorder.js.map +0 -1
  41. package/lib/commonjs/runtime.js.map +0 -1
  42. package/lib/commonjs/storage.js.map +0 -1
  43. package/lib/commonjs/types.js.map +0 -1
  44. package/lib/module/components/LocalNotificationTest.js.map +0 -1
  45. package/lib/module/components/NotificationTestView.js.map +0 -1
  46. package/lib/module/components/NotificationToolView.js.map +0 -1
  47. package/lib/module/components/notificationStyles.js.map +0 -1
  48. package/lib/module/expo.js.map +0 -1
  49. package/lib/module/index.js.map +0 -1
  50. package/lib/module/json.js.map +0 -1
  51. package/lib/module/payload.js.map +0 -1
  52. package/lib/module/preset.js.map +0 -1
  53. package/lib/module/preview.js.map +0 -1
  54. package/lib/module/recorder.js.map +0 -1
  55. package/lib/module/runtime.js.map +0 -1
  56. package/lib/module/storage.js.map +0 -1
  57. package/lib/module/types.js.map +0 -1
  58. package/lib/typescript/components/LocalNotificationTest.d.ts.map +0 -1
  59. package/lib/typescript/components/NotificationTestView.d.ts.map +0 -1
  60. package/lib/typescript/components/NotificationToolView.d.ts.map +0 -1
  61. package/lib/typescript/components/notificationStyles.d.ts.map +0 -1
  62. package/lib/typescript/expo.d.ts.map +0 -1
  63. package/lib/typescript/index.d.ts.map +0 -1
  64. package/lib/typescript/json.d.ts.map +0 -1
  65. package/lib/typescript/payload.d.ts.map +0 -1
  66. package/lib/typescript/preset.d.ts.map +0 -1
  67. package/lib/typescript/preview.d.ts.map +0 -1
  68. package/lib/typescript/recorder.d.ts.map +0 -1
  69. package/lib/typescript/runtime.d.ts.map +0 -1
  70. package/lib/typescript/storage.d.ts.map +0 -1
  71. package/lib/typescript/types.d.ts.map +0 -1
@@ -1,50 +1 @@
1
- "use strict";
2
-
3
- import React, { useSyncExternalStore } from "react";
4
- import { createToolFactory, defineToolPreset, JsModal, NotificationsIcon } from "@buoy-gg/shared-ui";
5
- import { NotificationToolView } from "./components/NotificationToolView";
6
- import { notificationSyncAdapter } from "./runtime";
7
- import { jsx as _jsx } from "react/jsx-runtime";
8
- export function NotificationsModal(props) {
9
- const snapshot = useSyncExternalStore(notificationSyncAdapter.subscribe, notificationSyncAdapter.getSnapshot);
10
- return /*#__PURE__*/_jsx(NotificationToolView, {
11
- snapshot: snapshot,
12
- renderShell: ({
13
- header,
14
- body
15
- }) => /*#__PURE__*/_jsx(JsModal, {
16
- ...props,
17
- persistenceKey: props.persistenceKey ?? "buoy-notifications",
18
- variant: "night",
19
- header: {
20
- showToggleButton: true,
21
- customContent: header
22
- },
23
- enablePersistence: true,
24
- initialMode: "bottomSheet",
25
- disableScrollWrapper: true,
26
- children: body
27
- }),
28
- onAction: async (action, params) => {
29
- const fn = notificationSyncAdapter.actions[action];
30
- if (!fn) throw new Error("This notification action is unavailable.");
31
- return fn(params);
32
- }
33
- });
34
- }
35
- export const notificationToolPreset = defineToolPreset({
36
- id: "push-notifications",
37
- name: "NOTIFICATIONS",
38
- description: "Send a test notification and inspect how the app responds",
39
- slot: "both",
40
- icon: ({
41
- size,
42
- color
43
- }) => /*#__PURE__*/_jsx(NotificationsIcon, {
44
- size: size,
45
- color: color
46
- }),
47
- component: NotificationsModal
48
- });
49
- export const createNotificationTool = createToolFactory(notificationToolPreset);
50
- //# sourceMappingURL=preset.js.map
1
+ "use strict";import m,{useSyncExternalStore as a}from"react";import{createToolFactory as c,defineToolPreset as l,JsModal as p,NotificationsIcon as f}from"@buoy-gg/shared-ui";import{NotificationToolView as h}from"./components/NotificationToolView";import{notificationSyncAdapter as n}from"./runtime";import{jsx as r}from"react/jsx-runtime";export function NotificationsModal(o){const t=a(n.subscribe,n.getSnapshot);return r(h,{snapshot:t,renderShell:({header:e,body:i})=>r(p,{...o,persistenceKey:o.persistenceKey??"buoy-notifications",variant:"night",header:{showToggleButton:true,customContent:e},enablePersistence:true,initialMode:"bottomSheet",disableScrollWrapper:true,children:i}),onAction:async(e,i)=>{const s=n.actions[e];if(!s)throw new Error("This notification action is unavailable.");return s(i)}})}export const notificationToolPreset=l({id:"push-notifications",name:"NOTIFICATIONS",description:"Send a test notification and inspect how the app responds",slot:"both",icon:({size:o,color:t})=>r(f,{size:o,color:t}),component:NotificationsModal});export const createNotificationTool=c(notificationToolPreset);
@@ -1,14 +1 @@
1
- "use strict";
2
-
3
- /** Keep preview artwork self-contained and small enough for device snapshots. */
4
- export function normalizePreviewAppearance(value) {
5
- if (!value || typeof value !== "object") return undefined;
6
- const result = {};
7
- if (typeof value.appName === "string") result.appName = value.appName.trim().slice(0, 80);
8
- if (typeof value.iconUri === "string" && value.iconUri.length <= 32768 && /^data:image\/(png|jpeg|webp);base64,[A-Za-z0-9+/]+={0,2}$/.test(value.iconUri)) result.iconUri = value.iconUri;
9
- for (const key of ["backgroundColor", "textColor"]) {
10
- if (typeof value[key] === "string" && /^#[0-9a-f]{6}$/i.test(value[key])) result[key] = value[key];
11
- }
12
- return Object.keys(result).length ? result : undefined;
13
- }
14
- //# sourceMappingURL=preview.js.map
1
+ "use strict";export function normalizePreviewAppearance(t){if(!t||typeof t!=="object")return void 0;const i={};if(typeof t.appName==="string")i.appName=t.appName.trim().slice(0,80);if(typeof t.iconUri==="string"&&t.iconUri.length<=32768&&/^data:image\/(png|jpeg|webp);base64,[A-Za-z0-9+/]+={0,2}$/.test(t.iconUri))i.iconUri=t.iconUri;for(const e of["backgroundColor","textColor"]){if(typeof t[e]==="string"&&/^#[0-9a-f]{6}$/i.test(t[e]))i[e]=t[e]}return Object.keys(i).length?i:void 0}
@@ -1,332 +1 @@
1
- "use strict";
2
-
3
- import { byteLength, json, object, string } from "./json";
4
- const PREFIX = "buoy.notifications.v1.";
5
- const SESSION = PREFIX + "session";
6
- const TOKENS = PREFIX + "tokens";
7
- const EVENT = PREFIX + "event.";
8
- const MAX_RECORD_BYTES = 16 * 1024;
9
- const MAX_JOURNAL_BYTES = 512 * 1024;
10
- const MAX_RECORDS = 200;
11
- /** Recording runs independently of the desktop's snapshot subscriptions. */
12
- export class NotificationRecorder {
13
- state = {
14
- version: 1,
15
- ready: false,
16
- provider: null,
17
- providerVersion: null,
18
- platform: "unknown",
19
- appId: null,
20
- capabilities: [],
21
- durable: false,
22
- storageError: null,
23
- evicted: 0,
24
- session: null,
25
- events: [],
26
- tokens: [],
27
- permissions: null,
28
- presented: null
29
- };
30
- listeners = new Set();
31
- sequence = 0;
32
- queue = Promise.resolve();
33
- constructor(options = {}) {
34
- this.options = options;
35
- this.now = options.now ?? Date.now;
36
- this.processId = options.processId ?? `${this.now().toString(36)}-${Math.random().toString(36).slice(2)}`;
37
- this.state.durable = !!options.storage && options.durable === true;
38
- this.ready = this.hydrate();
39
- this.queue = this.ready;
40
- }
41
- getSnapshot = () => this.state;
42
- subscribe = listener => {
43
- this.listeners.add(listener);
44
- return () => {
45
- this.listeners.delete(listener);
46
- };
47
- };
48
- update(patch) {
49
- this.state = {
50
- ...this.state,
51
- ...patch
52
- };
53
- for (const listener of this.listeners) {
54
- try {
55
- listener();
56
- } catch {/* Observers cannot interrupt app callbacks. */}
57
- }
58
- }
59
- configure(patch) {
60
- this.update(patch);
61
- }
62
- allowed() {
63
- return this.options.enabled?.() ?? true;
64
- }
65
- storageFailure(error) {
66
- this.update({
67
- storageError: error instanceof Error ? error.message : String(error),
68
- durable: false
69
- });
70
- }
71
- serial(task) {
72
- const next = this.queue.then(task);
73
- this.queue = next.catch(() => {});
74
- return next;
75
- }
76
- async hydrate() {
77
- if (!this.allowed()) {
78
- this.update({
79
- ready: true
80
- });
81
- return;
82
- }
83
- if (this.options.durability) {
84
- try {
85
- this.update({
86
- durable: await this.options.durability
87
- });
88
- } catch (error) {
89
- this.storageFailure(error);
90
- }
91
- }
92
- const storage = this.options.storage;
93
- let explicitlyStopped = false;
94
- if (storage) try {
95
- const rawSession = await storage.getItem(SESSION);
96
- explicitlyStopped = rawSession === "null";
97
- if (rawSession) {
98
- const s = JSON.parse(rawSession);
99
- if (s && typeof s.runId === "string" && Number.isFinite(s.expiresAt) && s.expiresAt > this.now()) this.update({
100
- session: s
101
- });
102
- }
103
- const rawTokens = await storage.getItem(TOKENS);
104
- if (rawTokens) {
105
- const tokens = JSON.parse(rawTokens);
106
- if (Array.isArray(tokens)) this.update({
107
- tokens: tokens.filter(t => t && ["apns", "fcm", "expo"].includes(t.type) && typeof t.value === "string").slice(-10)
108
- });
109
- }
110
- const keys = (await storage.getAllKeys()).filter(key => key.startsWith(EVENT)).sort();
111
- const records = [];
112
- for (const key of keys) {
113
- try {
114
- const raw = await storage.getItem(key);
115
- if (!raw || byteLength(raw) > MAX_RECORD_BYTES) {
116
- await storage.removeItem(key);
117
- continue;
118
- }
119
- const record = JSON.parse(raw);
120
- if (typeof record.id === "string" && typeof record.kind === "string" && Number.isFinite(record.capturedAt)) records.push(record);else await storage.removeItem(key);
121
- } catch {
122
- await storage.removeItem(key);
123
- }
124
- }
125
- records.sort((a, b) => a.capturedAt - b.capturedAt || a.sequence - b.sequence || a.id.localeCompare(b.id));
126
- this.update({
127
- events: records
128
- });
129
- await this.prune();
130
- } catch (error) {
131
- this.storageFailure(error);
132
- }
133
- if (this.options.autoStart && !this.state.session && !explicitlyStopped) {
134
- const startedAt = this.now();
135
- const session = {
136
- runId: this.processId,
137
- startedAt,
138
- expiresAt: startedAt + 30 * 60 * 1000
139
- };
140
- try {
141
- await storage?.setItem(SESSION, JSON.stringify(session));
142
- } catch (error) {
143
- this.storageFailure(error);
144
- }
145
- this.update({
146
- session
147
- });
148
- }
149
- this.update({
150
- ready: true
151
- });
152
- }
153
- async setCaptureSession(runId, durationMs = 30 * 60 * 1000) {
154
- if (!this.allowed()) throw new Error("Notification capture is disabled in this build.");
155
- if (runId !== null && (typeof runId !== "string" || !runId.trim() || runId.length > 128)) throw new Error("runId must contain 1 to 128 characters, or be null to stop capture.");
156
- if (!Number.isFinite(durationMs) || durationMs < 1000 || durationMs > 60 * 60 * 1000) throw new Error("Capture duration must be between 1 second and 1 hour.");
157
- return this.serial(async () => {
158
- const startedAt = this.now();
159
- const session = runId === null ? null : {
160
- runId,
161
- startedAt,
162
- expiresAt: startedAt + durationMs
163
- };
164
- try {
165
- if (this.options.storage) await this.options.storage.setItem(SESSION, JSON.stringify(session));
166
- } catch (error) {
167
- this.storageFailure(error);
168
- throw new Error("Could not persist the capture session. Keep the app open and check storage.");
169
- }
170
- this.update({
171
- session
172
- });
173
- return {
174
- session,
175
- durable: this.state.durable
176
- };
177
- });
178
- }
179
- record(kind, raw, metadata = {}) {
180
- const capturedAt = this.now();
181
- const observedAppState = this.options.appState?.() ?? "unknown";
182
- const clean = json(raw);
183
- return this.serial(async () => {
184
- if (!this.allowed()) return null;
185
- const session = this.state.session;
186
- if (!session || session.expiresAt <= capturedAt) {
187
- if (session) this.update({
188
- session: null
189
- });
190
- return null;
191
- }
192
- const clipped = (value, max = 512) => typeof value === "string" ? value.slice(0, max) : null;
193
- const dedupeKey = clipped(metadata.dedupeKey, 2048);
194
- if (dedupeKey && this.state.events.some(e => e.dedupeKey === dedupeKey)) return null;
195
- const record = {
196
- id: `${this.processId}-${++this.sequence}`,
197
- processId: this.processId,
198
- sequence: this.sequence,
199
- capturedAt,
200
- runId: session.runId,
201
- kind,
202
- provider: clipped(metadata.provider, 64) ?? this.state.provider ?? "app",
203
- observedAppState,
204
- notificationId: clipped(metadata.notificationId),
205
- testId: clipped(metadata.testId),
206
- title: clipped(metadata.title, 1024),
207
- actionIdentifier: clipped(metadata.actionIdentifier),
208
- ...(dedupeKey ? {
209
- dedupeKey
210
- } : {}),
211
- raw: clean
212
- };
213
- if (byteLength(JSON.stringify(record)) > MAX_RECORD_BYTES) {
214
- record.raw = {
215
- note: "Payload exceeded the 16 KiB capture limit."
216
- };
217
- record.truncated = true;
218
- }
219
- this.update({
220
- events: [...this.state.events, record]
221
- });
222
- try {
223
- await this.options.storage?.setItem(EVENT + record.id, JSON.stringify(record));
224
- } catch (error) {
225
- this.storageFailure(error);
226
- }
227
- // Keep the in-memory bound even when the disk is full or unavailable.
228
- try {
229
- await this.prune();
230
- } catch (error) {
231
- this.storageFailure(error);
232
- }
233
- return record;
234
- });
235
- }
236
- async prune() {
237
- const events = [...this.state.events];
238
- const sizes = events.map(e => byteLength(JSON.stringify(e)));
239
- let bytes = sizes.reduce((sum, size) => sum + size, 0);
240
- const removed = [];
241
- while (events.length > MAX_RECORDS || bytes > MAX_JOURNAL_BYTES) {
242
- removed.push(events.shift());
243
- bytes -= sizes.shift();
244
- }
245
- if (removed.length) this.update({
246
- events,
247
- evicted: this.state.evicted + removed.length
248
- });
249
- for (const event of removed) await this.options.storage?.removeItem(EVENT + event.id);
250
- }
251
- async clearCapturedEvents() {
252
- return this.serial(async () => {
253
- const events = this.state.events;
254
- for (const event of events) await this.options.storage?.removeItem(EVENT + event.id);
255
- this.update({
256
- events: [],
257
- evicted: 0
258
- });
259
- return {
260
- cleared: true
261
- };
262
- });
263
- }
264
- async observeToken(type, value, metadata = {}) {
265
- if (!this.allowed()) return;
266
- if (!value || value.length > 8192) throw new Error("The notification token is empty or too long.");
267
- return this.serial(async () => {
268
- const token = {
269
- type,
270
- value,
271
- observedAt: this.now(),
272
- ...(typeof metadata.projectId === "string" ? {
273
- projectId: metadata.projectId.slice(0, 256)
274
- } : {}),
275
- ...(typeof metadata.environment === "string" ? {
276
- environment: metadata.environment.slice(0, 256)
277
- } : {})
278
- };
279
- const tokens = [...this.state.tokens.filter(t => !(t.type === type && t.projectId === metadata.projectId && t.environment === metadata.environment)), token].slice(-10);
280
- this.update({
281
- tokens
282
- });
283
- try {
284
- await this.options.storage?.setItem(TOKENS, JSON.stringify(tokens));
285
- } catch (error) {
286
- this.storageFailure(error);
287
- }
288
- });
289
- }
290
- setPermissions(permissions) {
291
- const value = json(permissions);
292
- this.update({
293
- permissions: byteLength(JSON.stringify(value)) <= MAX_RECORD_BYTES ? value : {
294
- note: "Permission result exceeded the capture limit."
295
- }
296
- });
297
- }
298
- setPresented(presented) {
299
- const value = json(presented);
300
- if (byteLength(JSON.stringify(value)) <= 128 * 1024) this.update({
301
- presented: value
302
- });else this.update({
303
- presented: {
304
- note: "System tray result exceeded 128 KiB. Inspect fewer presented notifications in the app.",
305
- count: Array.isArray(presented) ? presented.length : null
306
- }
307
- });
308
- }
309
- async flush() {
310
- await this.queue;
311
- }
312
- }
313
- export function expoMetadata(value) {
314
- const raw = object(value);
315
- const notification = object(raw.notification ?? value);
316
- const request = object(notification.request);
317
- const content = object(request.content);
318
- const payload = object(object(request.trigger).payload);
319
- const data = object(content.data ?? payload.body);
320
- return {
321
- notificationId: string(request.identifier),
322
- testId: string(data.__buoyTestId),
323
- title: string(content.title),
324
- actionIdentifier: string(raw.actionIdentifier)
325
- };
326
- }
327
- export function responseKey(value) {
328
- const raw = object(value);
329
- const notification = object(raw.notification);
330
- return JSON.stringify([object(notification.request).identifier, notification.date, raw.actionIdentifier, raw.userText]);
331
- }
332
- //# sourceMappingURL=recorder.js.map
1
+ "use strict";import{byteLength as p,json as g,object as c,string as f}from"./json";const w="buoy.notifications.v1.";const v=w+"session";const m=w+"tokens";const y=w+"event.";const I=16*1024;const b=512*1024;const A=200;export class NotificationRecorder{state={version:1,ready:false,provider:null,providerVersion:null,platform:"unknown",appId:null,capabilities:[],durable:false,storageError:null,evicted:0,session:null,events:[],tokens:[],permissions:null,presented:null};listeners=new Set;sequence=0;queue=Promise.resolve();constructor(t={}){this.options=t;this.now=t.now??Date.now;this.processId=t.processId??`${this.now().toString(36)}-${Math.random().toString(36).slice(2)}`;this.state.durable=!!t.storage&&t.durable===true;this.ready=this.hydrate();this.queue=this.ready}getSnapshot=()=>this.state;subscribe=t=>{this.listeners.add(t);return()=>{this.listeners.delete(t)}};update(t){this.state={...this.state,...t};for(const e of this.listeners){try{e()}catch{}}}configure(t){this.update(t)}allowed(){return this.options.enabled?.()??true}storageFailure(t){this.update({storageError:t instanceof Error?t.message:String(t),durable:false})}serial(t){const e=this.queue.then(t);this.queue=e.catch(()=>{});return e}async hydrate(){if(!this.allowed()){this.update({ready:true});return}if(this.options.durability){try{this.update({durable:await this.options.durability})}catch(s){this.storageFailure(s)}}const t=this.options.storage;let e=false;if(t)try{const s=await t.getItem(v);e=s==="null";if(s){const i=JSON.parse(s);if(i&&typeof i.runId==="string"&&Number.isFinite(i.expiresAt)&&i.expiresAt>this.now())this.update({session:i})}const r=await t.getItem(m);if(r){const i=JSON.parse(r);if(Array.isArray(i))this.update({tokens:i.filter(o=>o&&["apns","fcm","expo"].includes(o.type)&&typeof o.value==="string").slice(-10)})}const n=(await t.getAllKeys()).filter(i=>i.startsWith(y)).sort();const a=[];for(const i of n){try{const o=await t.getItem(i);if(!o||p(o)>I){await t.removeItem(i);continue}const u=JSON.parse(o);if(typeof u.id==="string"&&typeof u.kind==="string"&&Number.isFinite(u.capturedAt))a.push(u);else await t.removeItem(i)}catch{await t.removeItem(i)}}a.sort((i,o)=>i.capturedAt-o.capturedAt||i.sequence-o.sequence||i.id.localeCompare(o.id));this.update({events:a});await this.prune()}catch(s){this.storageFailure(s)}if(this.options.autoStart&&!this.state.session&&!e){const s=this.now();const r={runId:this.processId,startedAt:s,expiresAt:s+30*60*1e3};try{await t?.setItem(v,JSON.stringify(r))}catch(n){this.storageFailure(n)}this.update({session:r})}this.update({ready:true})}async setCaptureSession(t,e=30*60*1e3){if(!this.allowed())throw new Error("Notification capture is disabled in this build.");if(t!==null&&(typeof t!=="string"||!t.trim()||t.length>128))throw new Error("runId must contain 1 to 128 characters, or be null to stop capture.");if(!Number.isFinite(e)||e<1e3||e>60*60*1e3)throw new Error("Capture duration must be between 1 second and 1 hour.");return this.serial(async()=>{const s=this.now();const r=t===null?null:{runId:t,startedAt:s,expiresAt:s+e};try{if(this.options.storage)await this.options.storage.setItem(v,JSON.stringify(r))}catch(n){this.storageFailure(n);throw new Error("Could not persist the capture session. Keep the app open and check storage.")}this.update({session:r});return{session:r,durable:this.state.durable}})}record(t,e,s={}){const r=this.now();const n=this.options.appState?.()??"unknown";const a=g(e);return this.serial(async()=>{if(!this.allowed())return null;const i=this.state.session;if(!i||i.expiresAt<=r){if(i)this.update({session:null});return null}const o=(h,S=512)=>typeof h==="string"?h.slice(0,S):null;const u=o(s.dedupeKey,2048);if(u&&this.state.events.some(h=>h.dedupeKey===u))return null;const l={id:`${this.processId}-${++this.sequence}`,processId:this.processId,sequence:this.sequence,capturedAt:r,runId:i.runId,kind:t,provider:o(s.provider,64)??this.state.provider??"app",observedAppState:n,notificationId:o(s.notificationId),testId:o(s.testId),title:o(s.title,1024),actionIdentifier:o(s.actionIdentifier),...u?{dedupeKey:u}:{},raw:a};if(p(JSON.stringify(l))>I){l.raw={note:"Payload exceeded the 16 KiB capture limit."};l.truncated=true}this.update({events:[...this.state.events,l]});try{await this.options.storage?.setItem(y+l.id,JSON.stringify(l))}catch(h){this.storageFailure(h)}try{await this.prune()}catch(h){this.storageFailure(h)}return l})}async prune(){const t=[...this.state.events];const e=t.map(n=>p(JSON.stringify(n)));let s=e.reduce((n,a)=>n+a,0);const r=[];while(t.length>A||s>b){r.push(t.shift());s-=e.shift()}if(r.length)this.update({events:t,evicted:this.state.evicted+r.length});for(const n of r)await this.options.storage?.removeItem(y+n.id)}async clearCapturedEvents(){return this.serial(async()=>{const t=this.state.events;for(const e of t)await this.options.storage?.removeItem(y+e.id);this.update({events:[],evicted:0});return{cleared:true}})}async observeToken(t,e,s={}){if(!this.allowed())return;if(!e||e.length>8192)throw new Error("The notification token is empty or too long.");return this.serial(async()=>{const r={type:t,value:e,observedAt:this.now(),...typeof s.projectId==="string"?{projectId:s.projectId.slice(0,256)}:{},...typeof s.environment==="string"?{environment:s.environment.slice(0,256)}:{}};const n=[...this.state.tokens.filter(a=>!(a.type===t&&a.projectId===s.projectId&&a.environment===s.environment)),r].slice(-10);this.update({tokens:n});try{await this.options.storage?.setItem(m,JSON.stringify(n))}catch(a){this.storageFailure(a)}})}setPermissions(t){const e=g(t);this.update({permissions:p(JSON.stringify(e))<=I?e:{note:"Permission result exceeded the capture limit."}})}setPresented(t){const e=g(t);if(p(JSON.stringify(e))<=128*1024)this.update({presented:e});else this.update({presented:{note:"System tray result exceeded 128 KiB. Inspect fewer presented notifications in the app.",count:Array.isArray(t)?t.length:null}})}async flush(){await this.queue}}export function expoMetadata(d){const t=c(d);const e=c(t.notification??d);const s=c(e.request);const r=c(s.content);const n=c(c(s.trigger).payload);const a=c(r.data??n.body);return{notificationId:f(s.identifier),testId:f(a.__buoyTestId),title:f(r.title),actionIdentifier:f(t.actionIdentifier)}}export function responseKey(d){const t=c(d);const e=c(t.notification);return JSON.stringify([c(e.request).identifier,e.date,t.actionIdentifier,t.userText])}
@@ -1,103 +1 @@
1
- "use strict";
2
-
3
- import { AppState, Platform } from "react-native";
4
- import { defaultNotificationStorage } from "./storage";
5
- import { NotificationRecorder } from "./recorder";
6
- import { attachExpoNotifications } from "./expo";
7
- import { object } from "./json";
8
- const globals = globalThis;
9
- export function captureEnabled(enableInRelease = false) {
10
- return typeof __DEV__ !== "undefined" && __DEV__ || enableInRelease === true;
11
- }
12
- export function getNotificationRecorder() {
13
- return globals.__buoyNotificationsV1?.recorder ?? null;
14
- }
15
- export function installExpoNotificationCapture(sdk, options = {}) {
16
- if (!captureEnabled(options.enableInRelease)) return null;
17
- const key = JSON.stringify([options.platform ?? Platform.OS, options.appId, options.providerVersion, options.projectId, options.enableInRelease, options.preview]);
18
- let runtime = globals.__buoyNotificationsV1;
19
- if (!runtime) {
20
- const persistence = options.storage ? {
21
- storage: options.storage,
22
- durable: options.durable === true
23
- } : defaultNotificationStorage();
24
- const recorder = new NotificationRecorder({
25
- ...persistence,
26
- enabled: () => captureEnabled(options.enableInRelease),
27
- appState: () => AppState.currentState ?? "unknown",
28
- autoStart: true
29
- });
30
- runtime = {
31
- recorder
32
- };
33
- globals.__buoyNotificationsV1 = runtime;
34
- }
35
- if (runtime.sdk !== sdk || runtime.key !== key) {
36
- runtime.attachment?.dispose();
37
- runtime.attachment = attachExpoNotifications(runtime.recorder, sdk, {
38
- ...options,
39
- platform: options.platform ?? Platform.OS
40
- });
41
- runtime.sdk = sdk;
42
- runtime.key = key;
43
- }
44
- return runtime.recorder;
45
- }
46
- const emptyRecorder = new NotificationRecorder();
47
- function current() {
48
- const runtime = globals.__buoyNotificationsV1;
49
- if (!runtime) throw new Error("Install Expo notification capture in the app entry point, before rendering the root component.");
50
- return runtime;
51
- }
52
- export const notificationSyncAdapter = {
53
- version: 1,
54
- getSnapshot: () => (getNotificationRecorder() ?? emptyRecorder).getSnapshot(),
55
- subscribe: listener => (getNotificationRecorder() ?? emptyRecorder).subscribe(listener),
56
- actions: {
57
- getSnapshot: () => notificationSyncAdapter.getSnapshot(),
58
- getCapabilities: () => {
59
- const {
60
- ready,
61
- provider,
62
- providerVersion,
63
- platform,
64
- appId,
65
- capabilities,
66
- durable,
67
- storageError
68
- } = notificationSyncAdapter.getSnapshot();
69
- return {
70
- ready,
71
- provider,
72
- providerVersion,
73
- platform,
74
- appId,
75
- capabilities,
76
- durable,
77
- storageError
78
- };
79
- },
80
- getEvent(params) {
81
- const {
82
- id
83
- } = object(params);
84
- if (typeof id !== "string") throw new Error("Provide the captured event id.");
85
- return current().recorder.getSnapshot().events.find(event => event.id === id) ?? null;
86
- },
87
- async setCaptureSession(params) {
88
- const {
89
- runId,
90
- durationMs
91
- } = object(params);
92
- if (typeof runId !== "string" && runId !== null) throw new Error("Provide runId, or null to stop capture.");
93
- if (durationMs !== undefined && typeof durationMs !== "number") throw new Error("durationMs must be a number.");
94
- return current().recorder.setCaptureSession(runId, durationMs);
95
- },
96
- clearCapturedEvents: () => current().recorder.clearCapturedEvents(),
97
- getPermissions: () => current().attachment.actions.getPermissions(),
98
- listPresented: () => current().attachment.actions.listPresented(),
99
- refreshToken: params => current().attachment.actions.refreshToken(params),
100
- scheduleLocal: params => current().attachment.actions.scheduleLocal(params)
101
- }
102
- };
103
- //# sourceMappingURL=runtime.js.map
1
+ "use strict";import{AppState as m,Platform as c}from"react-native";import{defaultNotificationStorage as b}from"./storage";import{NotificationRecorder as u}from"./recorder";import{attachExpoNotifications as h}from"./expo";import{object as d}from"./json";const a=globalThis;export function captureEnabled(t=false){return typeof __DEV__!=="undefined"&&__DEV__||t===true}export function getNotificationRecorder(){return a.__buoyNotificationsV1?.recorder??null}export function installExpoNotificationCapture(t,e={}){if(!captureEnabled(e.enableInRelease))return null;const n=JSON.stringify([e.platform??c.OS,e.appId,e.providerVersion,e.projectId,e.enableInRelease,e.preview]);let r=a.__buoyNotificationsV1;if(!r){const i=e.storage?{storage:e.storage,durable:e.durable===true}:b();const s=new u({...i,enabled:()=>captureEnabled(e.enableInRelease),appState:()=>m.currentState??"unknown",autoStart:true});r={recorder:s};a.__buoyNotificationsV1=r}if(r.sdk!==t||r.key!==n){r.attachment?.dispose();r.attachment=h(r.recorder,t,{...e,platform:e.platform??c.OS});r.sdk=t;r.key=n}return r.recorder}const l=new u;function o(){const t=a.__buoyNotificationsV1;if(!t)throw new Error("Install Expo notification capture in the app entry point, before rendering the root component.");return t}export const notificationSyncAdapter={version:1,getSnapshot:()=>(getNotificationRecorder()??l).getSnapshot(),subscribe:t=>(getNotificationRecorder()??l).subscribe(t),actions:{getSnapshot:()=>notificationSyncAdapter.getSnapshot(),getCapabilities:()=>{const{ready:t,provider:e,providerVersion:n,platform:r,appId:i,capabilities:s,durable:p,storageError:f}=notificationSyncAdapter.getSnapshot();return{ready:t,provider:e,providerVersion:n,platform:r,appId:i,capabilities:s,durable:p,storageError:f}},getEvent(t){const{id:e}=d(t);if(typeof e!=="string")throw new Error("Provide the captured event id.");return o().recorder.getSnapshot().events.find(n=>n.id===e)??null},async setCaptureSession(t){const{runId:e,durationMs:n}=d(t);if(typeof e!=="string"&&e!==null)throw new Error("Provide runId, or null to stop capture.");if(n!==void 0&&typeof n!=="number")throw new Error("durationMs must be a number.");return o().recorder.setCaptureSession(e,n)},clearCapturedEvents:()=>o().recorder.clearCapturedEvents(),getPermissions:()=>o().attachment.actions.getPermissions(),listPresented:()=>o().attachment.actions.listPresented(),refreshToken:t=>o().attachment.actions.refreshToken(t),scheduleLocal:t=>o().attachment.actions.scheduleLocal(t)}};
@@ -1,56 +1 @@
1
- "use strict";
2
-
3
- /** Propagates native I/O failures so capture never acknowledges a memory fallback as durable. */
4
- export function createExpoNotificationStorage(fs) {
5
- if (!fs.documentDirectory) throw new Error("Expo FileSystem has no persistent document directory.");
6
- const directory = fs.documentDirectory + "buoy-notifications/";
7
- const pathFor = key => directory + encodeURIComponent(key) + ".json";
8
- return {
9
- async getItem(key) {
10
- const path = pathFor(key);
11
- return (await fs.getInfoAsync(path)).exists ? fs.readAsStringAsync(path) : null;
12
- },
13
- async setItem(key, value) {
14
- if (!(await fs.getInfoAsync(directory)).exists) await fs.makeDirectoryAsync(directory, {
15
- intermediates: true
16
- });
17
- await fs.writeAsStringAsync(pathFor(key), value);
18
- },
19
- async removeItem(key) {
20
- await fs.deleteAsync(pathFor(key), {
21
- idempotent: true
22
- });
23
- },
24
- async getAllKeys() {
25
- if (!(await fs.getInfoAsync(directory)).exists) return [];
26
- return (await fs.readDirectoryAsync(directory)).filter(file => file.endsWith(".json")).flatMap(file => {
27
- try {
28
- return [decodeURIComponent(file.slice(0, -5))];
29
- } catch {
30
- return [];
31
- }
32
- });
33
- }
34
- };
35
- }
36
- export function defaultNotificationStorage() {
37
- try {
38
- const fs = require("expo-file-system/legacy");
39
- if (fs.documentDirectory && typeof fs.writeAsStringAsync === "function") return {
40
- storage: createExpoNotificationStorage(fs),
41
- durable: true
42
- };
43
- } catch {/* An app can provide its own storage when Expo FileSystem is absent. */}
44
- try {
45
- const module = require("@react-native-async-storage/async-storage");
46
- const storage = module.default ?? module;
47
- if (typeof storage.getItem === "function" && typeof storage.setItem === "function" && typeof storage.getAllKeys === "function") return {
48
- storage,
49
- durable: true
50
- };
51
- } catch {/* Capture remains available in memory. */}
52
- return {
53
- durable: false
54
- };
55
- }
56
- //# sourceMappingURL=storage.js.map
1
+ "use strict";export function createExpoNotificationStorage(t){if(!t.documentDirectory)throw new Error("Expo FileSystem has no persistent document directory.");const r=t.documentDirectory+"buoy-notifications/";const o=e=>r+encodeURIComponent(e)+".json";return{async getItem(e){const n=o(e);return(await t.getInfoAsync(n)).exists?t.readAsStringAsync(n):null},async setItem(e,n){if(!(await t.getInfoAsync(r)).exists)await t.makeDirectoryAsync(r,{intermediates:true});await t.writeAsStringAsync(o(e),n)},async removeItem(e){await t.deleteAsync(o(e),{idempotent:true})},async getAllKeys(){if(!(await t.getInfoAsync(r)).exists)return[];return(await t.readDirectoryAsync(r)).filter(e=>e.endsWith(".json")).flatMap(e=>{try{return[decodeURIComponent(e.slice(0,-5))]}catch{return[]}})}}}export function defaultNotificationStorage(){try{const t=require("expo-file-system/legacy");if(t.documentDirectory&&typeof t.writeAsStringAsync==="function")return{storage:createExpoNotificationStorage(t),durable:true}}catch{}try{const t=require("@react-native-async-storage/async-storage");const r=t.default??t;if(typeof r.getItem==="function"&&typeof r.setItem==="function"&&typeof r.getAllKeys==="function")return{storage:r,durable:true}}catch{}return{durable:false}}
@@ -1,2 +1 @@
1
1
  "use strict";
2
- //# sourceMappingURL=types.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@buoy-gg/notifications",
3
- "version": "7.0.41",
3
+ "version": "7.0.43",
4
4
  "description": "Send simulator notifications and inspect app receipt, interactions and device tokens.",
5
5
  "main": "lib/commonjs/index.js",
6
6
  "module": "lib/module/index.js",
@@ -12,7 +12,7 @@
12
12
  ],
13
13
  "sideEffects": false,
14
14
  "dependencies": {
15
- "@buoy-gg/shared-ui": "^7.0.41"
15
+ "@buoy-gg/shared-ui": "^7.0.43"
16
16
  },
17
17
  "peerDependencies": {
18
18
  "react": "*",
@@ -1 +0,0 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_sharedUi","_NotificationTestView","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","LocalNotificationTest","snapshot","onAction","onViewActivity","title","setTitle","useState","message","setMessage","data","setData","seconds","setSeconds","busy","setBusy","lock","useRef","error","setError","latest","setLatest","custom","validation","JSON","parse","Array","isArray","Error","send","current","test","testId","Date","now","Math","random","toString","slice","startedAt","appId","runId","durationMs","body","__buoyTestId","Number","String","events","filter","event","capturedAt","received","some","kind","tapped","outcome","supported","capabilities","includes","jsx","NotificationTestView","onTitleChange","onMessageChange","appName","appearance","preview","destination","jsxs","View","style","s","children","field","Text","label","value","options","NightSegmented","tabs","key","activeKey","onChange","size","glass","TextInput","accessibilityLabel","onChangeText","multiline","autoCapitalize","autoCorrect","json","result","onSend","disabled","hint","StyleSheet","create","flexDirection","gap","flex","color","night","textSecondary","fontSize","lineHeight","text","borderWidth","borderColor","glassBorder","backgroundColor","borderRadius","padding","minHeight","textAlignVertical"],"sourceRoot":"../../../src","sources":["components/LocalNotificationTest.tsx"],"mappings":"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","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_sharedUi","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","NotificationTestView","props","iconFailed","setIconFailed","useState","useEffect","appearance","iconUri","ink","textColor","color","undefined","optionsOpen","setOptionsOpen","insets","useSafeAreaInsets","minBottom","jsxs","View","style","s","root","children","jsx","ScrollView","testID","contentContainerStyle","scroll","keyboardShouldPersistTaps","content","intro","Text","accessibilityRole","heading","caption","destination","previewNote","preview","backgroundColor","borderColor","accessibilityLabel","row","Image","source","uri","appName","appIcon","onError","iconFallback","NotificationsIcon","size","night","accent","numberOfLines","TextInput","placeholder","placeholderTextColor","value","title","onChangeText","onTitleChange","input","editable","busy","message","onMessageChange","result","accessibilityLiveRegion","failed","XCircle","danger","CheckCircle","resultTitle","Pressable","onPress","onViewActivity","secondary","secondaryText","accessibilityState","expanded","options","ChevronDown","textSecondary","ChevronRight","footer","paddingBottom","bottom","error","notice","footerRow","hint","disabled","onSend","pressed","send","onAccent","sendText","StyleSheet","create","flex","minHeight","minWidth","padding","flexGrow","width","maxWidth","alignSelf","gap","paddingTop","text","fontSize","fontWeight","letterSpacing","lineHeight","flexDirection","alignItems","height","borderRadius","justifyContent","fillSecondary","borderWidth","glassBorder","glass","flexShrink","paddingHorizontal","paddingVertical","borderTopWidth","borderTopColor","separator","flexWrap","flexBasis","opacity"],"sourceRoot":"../../../src","sources":["components/NotificationTestView.tsx"],"mappings":"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","ignoreList":[]}