@buoy-gg/notifications 7.0.41
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/LICENSE +58 -0
- package/README.md +28 -0
- package/lib/commonjs/components/LocalNotificationTest.js +185 -0
- package/lib/commonjs/components/LocalNotificationTest.js.map +1 -0
- package/lib/commonjs/components/NotificationTestView.js +329 -0
- package/lib/commonjs/components/NotificationTestView.js.map +1 -0
- package/lib/commonjs/components/NotificationToolView.js +673 -0
- package/lib/commonjs/components/NotificationToolView.js.map +1 -0
- package/lib/commonjs/components/notificationStyles.js +292 -0
- package/lib/commonjs/components/notificationStyles.js.map +1 -0
- package/lib/commonjs/expo.js +247 -0
- package/lib/commonjs/expo.js.map +1 -0
- package/lib/commonjs/index.js +148 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/json.js +58 -0
- package/lib/commonjs/json.js.map +1 -0
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/payload.js +68 -0
- package/lib/commonjs/payload.js.map +1 -0
- package/lib/commonjs/preset.js +56 -0
- package/lib/commonjs/preset.js.map +1 -0
- package/lib/commonjs/preview.js +18 -0
- package/lib/commonjs/preview.js.map +1 -0
- package/lib/commonjs/recorder.js +339 -0
- package/lib/commonjs/recorder.js.map +1 -0
- package/lib/commonjs/runtime.js +110 -0
- package/lib/commonjs/runtime.js.map +1 -0
- package/lib/commonjs/storage.js +61 -0
- package/lib/commonjs/storage.js.map +1 -0
- package/lib/commonjs/types.js +2 -0
- package/lib/commonjs/types.js.map +1 -0
- package/lib/module/components/LocalNotificationTest.js +180 -0
- package/lib/module/components/LocalNotificationTest.js.map +1 -0
- package/lib/module/components/NotificationTestView.js +324 -0
- package/lib/module/components/NotificationTestView.js.map +1 -0
- package/lib/module/components/NotificationToolView.js +668 -0
- package/lib/module/components/NotificationToolView.js.map +1 -0
- package/lib/module/components/notificationStyles.js +288 -0
- package/lib/module/components/notificationStyles.js.map +1 -0
- package/lib/module/expo.js +241 -0
- package/lib/module/expo.js.map +1 -0
- package/lib/module/index.js +13 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/json.js +51 -0
- package/lib/module/json.js.map +1 -0
- package/lib/module/payload.js +63 -0
- package/lib/module/payload.js.map +1 -0
- package/lib/module/preset.js +50 -0
- package/lib/module/preset.js.map +1 -0
- package/lib/module/preview.js +14 -0
- package/lib/module/preview.js.map +1 -0
- package/lib/module/recorder.js +332 -0
- package/lib/module/recorder.js.map +1 -0
- package/lib/module/runtime.js +103 -0
- package/lib/module/runtime.js.map +1 -0
- package/lib/module/storage.js +56 -0
- package/lib/module/storage.js.map +1 -0
- package/lib/module/types.js +2 -0
- package/lib/module/types.js.map +1 -0
- package/lib/typescript/components/LocalNotificationTest.d.ts +8 -0
- package/lib/typescript/components/LocalNotificationTest.d.ts.map +1 -0
- package/lib/typescript/components/NotificationTestView.d.ts +27 -0
- package/lib/typescript/components/NotificationTestView.d.ts.map +1 -0
- package/lib/typescript/components/NotificationToolView.d.ts +16 -0
- package/lib/typescript/components/NotificationToolView.d.ts.map +1 -0
- package/lib/typescript/components/notificationStyles.d.ts +284 -0
- package/lib/typescript/components/notificationStyles.d.ts.map +1 -0
- package/lib/typescript/expo.d.ts +66 -0
- package/lib/typescript/expo.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +15 -0
- package/lib/typescript/index.d.ts.map +1 -0
- package/lib/typescript/json.d.ts +7 -0
- package/lib/typescript/json.d.ts.map +1 -0
- package/lib/typescript/payload.d.ts +18 -0
- package/lib/typescript/payload.d.ts.map +1 -0
- package/lib/typescript/preset.d.ts +31 -0
- package/lib/typescript/preset.d.ts.map +1 -0
- package/lib/typescript/preview.d.ts +4 -0
- package/lib/typescript/preview.d.ts.map +1 -0
- package/lib/typescript/recorder.d.ts +52 -0
- package/lib/typescript/recorder.d.ts.map +1 -0
- package/lib/typescript/runtime.d.ts +50 -0
- package/lib/typescript/runtime.d.ts.map +1 -0
- package/lib/typescript/storage.d.ts +23 -0
- package/lib/typescript/storage.d.ts.map +1 -0
- package/lib/typescript/types.d.ts +64 -0
- package/lib/typescript/types.d.ts.map +1 -0
- package/package.json +66 -0
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.NotificationRecorder = void 0;
|
|
7
|
+
exports.expoMetadata = expoMetadata;
|
|
8
|
+
exports.responseKey = responseKey;
|
|
9
|
+
var _json = require("./json");
|
|
10
|
+
const PREFIX = "buoy.notifications.v1.";
|
|
11
|
+
const SESSION = PREFIX + "session";
|
|
12
|
+
const TOKENS = PREFIX + "tokens";
|
|
13
|
+
const EVENT = PREFIX + "event.";
|
|
14
|
+
const MAX_RECORD_BYTES = 16 * 1024;
|
|
15
|
+
const MAX_JOURNAL_BYTES = 512 * 1024;
|
|
16
|
+
const MAX_RECORDS = 200;
|
|
17
|
+
/** Recording runs independently of the desktop's snapshot subscriptions. */
|
|
18
|
+
class NotificationRecorder {
|
|
19
|
+
state = {
|
|
20
|
+
version: 1,
|
|
21
|
+
ready: false,
|
|
22
|
+
provider: null,
|
|
23
|
+
providerVersion: null,
|
|
24
|
+
platform: "unknown",
|
|
25
|
+
appId: null,
|
|
26
|
+
capabilities: [],
|
|
27
|
+
durable: false,
|
|
28
|
+
storageError: null,
|
|
29
|
+
evicted: 0,
|
|
30
|
+
session: null,
|
|
31
|
+
events: [],
|
|
32
|
+
tokens: [],
|
|
33
|
+
permissions: null,
|
|
34
|
+
presented: null
|
|
35
|
+
};
|
|
36
|
+
listeners = new Set();
|
|
37
|
+
sequence = 0;
|
|
38
|
+
queue = Promise.resolve();
|
|
39
|
+
constructor(options = {}) {
|
|
40
|
+
this.options = options;
|
|
41
|
+
this.now = options.now ?? Date.now;
|
|
42
|
+
this.processId = options.processId ?? `${this.now().toString(36)}-${Math.random().toString(36).slice(2)}`;
|
|
43
|
+
this.state.durable = !!options.storage && options.durable === true;
|
|
44
|
+
this.ready = this.hydrate();
|
|
45
|
+
this.queue = this.ready;
|
|
46
|
+
}
|
|
47
|
+
getSnapshot = () => this.state;
|
|
48
|
+
subscribe = listener => {
|
|
49
|
+
this.listeners.add(listener);
|
|
50
|
+
return () => {
|
|
51
|
+
this.listeners.delete(listener);
|
|
52
|
+
};
|
|
53
|
+
};
|
|
54
|
+
update(patch) {
|
|
55
|
+
this.state = {
|
|
56
|
+
...this.state,
|
|
57
|
+
...patch
|
|
58
|
+
};
|
|
59
|
+
for (const listener of this.listeners) {
|
|
60
|
+
try {
|
|
61
|
+
listener();
|
|
62
|
+
} catch {/* Observers cannot interrupt app callbacks. */}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
configure(patch) {
|
|
66
|
+
this.update(patch);
|
|
67
|
+
}
|
|
68
|
+
allowed() {
|
|
69
|
+
return this.options.enabled?.() ?? true;
|
|
70
|
+
}
|
|
71
|
+
storageFailure(error) {
|
|
72
|
+
this.update({
|
|
73
|
+
storageError: error instanceof Error ? error.message : String(error),
|
|
74
|
+
durable: false
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
serial(task) {
|
|
78
|
+
const next = this.queue.then(task);
|
|
79
|
+
this.queue = next.catch(() => {});
|
|
80
|
+
return next;
|
|
81
|
+
}
|
|
82
|
+
async hydrate() {
|
|
83
|
+
if (!this.allowed()) {
|
|
84
|
+
this.update({
|
|
85
|
+
ready: true
|
|
86
|
+
});
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
if (this.options.durability) {
|
|
90
|
+
try {
|
|
91
|
+
this.update({
|
|
92
|
+
durable: await this.options.durability
|
|
93
|
+
});
|
|
94
|
+
} catch (error) {
|
|
95
|
+
this.storageFailure(error);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
const storage = this.options.storage;
|
|
99
|
+
let explicitlyStopped = false;
|
|
100
|
+
if (storage) try {
|
|
101
|
+
const rawSession = await storage.getItem(SESSION);
|
|
102
|
+
explicitlyStopped = rawSession === "null";
|
|
103
|
+
if (rawSession) {
|
|
104
|
+
const s = JSON.parse(rawSession);
|
|
105
|
+
if (s && typeof s.runId === "string" && Number.isFinite(s.expiresAt) && s.expiresAt > this.now()) this.update({
|
|
106
|
+
session: s
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
const rawTokens = await storage.getItem(TOKENS);
|
|
110
|
+
if (rawTokens) {
|
|
111
|
+
const tokens = JSON.parse(rawTokens);
|
|
112
|
+
if (Array.isArray(tokens)) this.update({
|
|
113
|
+
tokens: tokens.filter(t => t && ["apns", "fcm", "expo"].includes(t.type) && typeof t.value === "string").slice(-10)
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
const keys = (await storage.getAllKeys()).filter(key => key.startsWith(EVENT)).sort();
|
|
117
|
+
const records = [];
|
|
118
|
+
for (const key of keys) {
|
|
119
|
+
try {
|
|
120
|
+
const raw = await storage.getItem(key);
|
|
121
|
+
if (!raw || (0, _json.byteLength)(raw) > MAX_RECORD_BYTES) {
|
|
122
|
+
await storage.removeItem(key);
|
|
123
|
+
continue;
|
|
124
|
+
}
|
|
125
|
+
const record = JSON.parse(raw);
|
|
126
|
+
if (typeof record.id === "string" && typeof record.kind === "string" && Number.isFinite(record.capturedAt)) records.push(record);else await storage.removeItem(key);
|
|
127
|
+
} catch {
|
|
128
|
+
await storage.removeItem(key);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
records.sort((a, b) => a.capturedAt - b.capturedAt || a.sequence - b.sequence || a.id.localeCompare(b.id));
|
|
132
|
+
this.update({
|
|
133
|
+
events: records
|
|
134
|
+
});
|
|
135
|
+
await this.prune();
|
|
136
|
+
} catch (error) {
|
|
137
|
+
this.storageFailure(error);
|
|
138
|
+
}
|
|
139
|
+
if (this.options.autoStart && !this.state.session && !explicitlyStopped) {
|
|
140
|
+
const startedAt = this.now();
|
|
141
|
+
const session = {
|
|
142
|
+
runId: this.processId,
|
|
143
|
+
startedAt,
|
|
144
|
+
expiresAt: startedAt + 30 * 60 * 1000
|
|
145
|
+
};
|
|
146
|
+
try {
|
|
147
|
+
await storage?.setItem(SESSION, JSON.stringify(session));
|
|
148
|
+
} catch (error) {
|
|
149
|
+
this.storageFailure(error);
|
|
150
|
+
}
|
|
151
|
+
this.update({
|
|
152
|
+
session
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
this.update({
|
|
156
|
+
ready: true
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
async setCaptureSession(runId, durationMs = 30 * 60 * 1000) {
|
|
160
|
+
if (!this.allowed()) throw new Error("Notification capture is disabled in this build.");
|
|
161
|
+
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.");
|
|
162
|
+
if (!Number.isFinite(durationMs) || durationMs < 1000 || durationMs > 60 * 60 * 1000) throw new Error("Capture duration must be between 1 second and 1 hour.");
|
|
163
|
+
return this.serial(async () => {
|
|
164
|
+
const startedAt = this.now();
|
|
165
|
+
const session = runId === null ? null : {
|
|
166
|
+
runId,
|
|
167
|
+
startedAt,
|
|
168
|
+
expiresAt: startedAt + durationMs
|
|
169
|
+
};
|
|
170
|
+
try {
|
|
171
|
+
if (this.options.storage) await this.options.storage.setItem(SESSION, JSON.stringify(session));
|
|
172
|
+
} catch (error) {
|
|
173
|
+
this.storageFailure(error);
|
|
174
|
+
throw new Error("Could not persist the capture session. Keep the app open and check storage.");
|
|
175
|
+
}
|
|
176
|
+
this.update({
|
|
177
|
+
session
|
|
178
|
+
});
|
|
179
|
+
return {
|
|
180
|
+
session,
|
|
181
|
+
durable: this.state.durable
|
|
182
|
+
};
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
record(kind, raw, metadata = {}) {
|
|
186
|
+
const capturedAt = this.now();
|
|
187
|
+
const observedAppState = this.options.appState?.() ?? "unknown";
|
|
188
|
+
const clean = (0, _json.json)(raw);
|
|
189
|
+
return this.serial(async () => {
|
|
190
|
+
if (!this.allowed()) return null;
|
|
191
|
+
const session = this.state.session;
|
|
192
|
+
if (!session || session.expiresAt <= capturedAt) {
|
|
193
|
+
if (session) this.update({
|
|
194
|
+
session: null
|
|
195
|
+
});
|
|
196
|
+
return null;
|
|
197
|
+
}
|
|
198
|
+
const clipped = (value, max = 512) => typeof value === "string" ? value.slice(0, max) : null;
|
|
199
|
+
const dedupeKey = clipped(metadata.dedupeKey, 2048);
|
|
200
|
+
if (dedupeKey && this.state.events.some(e => e.dedupeKey === dedupeKey)) return null;
|
|
201
|
+
const record = {
|
|
202
|
+
id: `${this.processId}-${++this.sequence}`,
|
|
203
|
+
processId: this.processId,
|
|
204
|
+
sequence: this.sequence,
|
|
205
|
+
capturedAt,
|
|
206
|
+
runId: session.runId,
|
|
207
|
+
kind,
|
|
208
|
+
provider: clipped(metadata.provider, 64) ?? this.state.provider ?? "app",
|
|
209
|
+
observedAppState,
|
|
210
|
+
notificationId: clipped(metadata.notificationId),
|
|
211
|
+
testId: clipped(metadata.testId),
|
|
212
|
+
title: clipped(metadata.title, 1024),
|
|
213
|
+
actionIdentifier: clipped(metadata.actionIdentifier),
|
|
214
|
+
...(dedupeKey ? {
|
|
215
|
+
dedupeKey
|
|
216
|
+
} : {}),
|
|
217
|
+
raw: clean
|
|
218
|
+
};
|
|
219
|
+
if ((0, _json.byteLength)(JSON.stringify(record)) > MAX_RECORD_BYTES) {
|
|
220
|
+
record.raw = {
|
|
221
|
+
note: "Payload exceeded the 16 KiB capture limit."
|
|
222
|
+
};
|
|
223
|
+
record.truncated = true;
|
|
224
|
+
}
|
|
225
|
+
this.update({
|
|
226
|
+
events: [...this.state.events, record]
|
|
227
|
+
});
|
|
228
|
+
try {
|
|
229
|
+
await this.options.storage?.setItem(EVENT + record.id, JSON.stringify(record));
|
|
230
|
+
} catch (error) {
|
|
231
|
+
this.storageFailure(error);
|
|
232
|
+
}
|
|
233
|
+
// Keep the in-memory bound even when the disk is full or unavailable.
|
|
234
|
+
try {
|
|
235
|
+
await this.prune();
|
|
236
|
+
} catch (error) {
|
|
237
|
+
this.storageFailure(error);
|
|
238
|
+
}
|
|
239
|
+
return record;
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
async prune() {
|
|
243
|
+
const events = [...this.state.events];
|
|
244
|
+
const sizes = events.map(e => (0, _json.byteLength)(JSON.stringify(e)));
|
|
245
|
+
let bytes = sizes.reduce((sum, size) => sum + size, 0);
|
|
246
|
+
const removed = [];
|
|
247
|
+
while (events.length > MAX_RECORDS || bytes > MAX_JOURNAL_BYTES) {
|
|
248
|
+
removed.push(events.shift());
|
|
249
|
+
bytes -= sizes.shift();
|
|
250
|
+
}
|
|
251
|
+
if (removed.length) this.update({
|
|
252
|
+
events,
|
|
253
|
+
evicted: this.state.evicted + removed.length
|
|
254
|
+
});
|
|
255
|
+
for (const event of removed) await this.options.storage?.removeItem(EVENT + event.id);
|
|
256
|
+
}
|
|
257
|
+
async clearCapturedEvents() {
|
|
258
|
+
return this.serial(async () => {
|
|
259
|
+
const events = this.state.events;
|
|
260
|
+
for (const event of events) await this.options.storage?.removeItem(EVENT + event.id);
|
|
261
|
+
this.update({
|
|
262
|
+
events: [],
|
|
263
|
+
evicted: 0
|
|
264
|
+
});
|
|
265
|
+
return {
|
|
266
|
+
cleared: true
|
|
267
|
+
};
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
async observeToken(type, value, metadata = {}) {
|
|
271
|
+
if (!this.allowed()) return;
|
|
272
|
+
if (!value || value.length > 8192) throw new Error("The notification token is empty or too long.");
|
|
273
|
+
return this.serial(async () => {
|
|
274
|
+
const token = {
|
|
275
|
+
type,
|
|
276
|
+
value,
|
|
277
|
+
observedAt: this.now(),
|
|
278
|
+
...(typeof metadata.projectId === "string" ? {
|
|
279
|
+
projectId: metadata.projectId.slice(0, 256)
|
|
280
|
+
} : {}),
|
|
281
|
+
...(typeof metadata.environment === "string" ? {
|
|
282
|
+
environment: metadata.environment.slice(0, 256)
|
|
283
|
+
} : {})
|
|
284
|
+
};
|
|
285
|
+
const tokens = [...this.state.tokens.filter(t => !(t.type === type && t.projectId === metadata.projectId && t.environment === metadata.environment)), token].slice(-10);
|
|
286
|
+
this.update({
|
|
287
|
+
tokens
|
|
288
|
+
});
|
|
289
|
+
try {
|
|
290
|
+
await this.options.storage?.setItem(TOKENS, JSON.stringify(tokens));
|
|
291
|
+
} catch (error) {
|
|
292
|
+
this.storageFailure(error);
|
|
293
|
+
}
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
setPermissions(permissions) {
|
|
297
|
+
const value = (0, _json.json)(permissions);
|
|
298
|
+
this.update({
|
|
299
|
+
permissions: (0, _json.byteLength)(JSON.stringify(value)) <= MAX_RECORD_BYTES ? value : {
|
|
300
|
+
note: "Permission result exceeded the capture limit."
|
|
301
|
+
}
|
|
302
|
+
});
|
|
303
|
+
}
|
|
304
|
+
setPresented(presented) {
|
|
305
|
+
const value = (0, _json.json)(presented);
|
|
306
|
+
if ((0, _json.byteLength)(JSON.stringify(value)) <= 128 * 1024) this.update({
|
|
307
|
+
presented: value
|
|
308
|
+
});else this.update({
|
|
309
|
+
presented: {
|
|
310
|
+
note: "System tray result exceeded 128 KiB. Inspect fewer presented notifications in the app.",
|
|
311
|
+
count: Array.isArray(presented) ? presented.length : null
|
|
312
|
+
}
|
|
313
|
+
});
|
|
314
|
+
}
|
|
315
|
+
async flush() {
|
|
316
|
+
await this.queue;
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
exports.NotificationRecorder = NotificationRecorder;
|
|
320
|
+
function expoMetadata(value) {
|
|
321
|
+
const raw = (0, _json.object)(value);
|
|
322
|
+
const notification = (0, _json.object)(raw.notification ?? value);
|
|
323
|
+
const request = (0, _json.object)(notification.request);
|
|
324
|
+
const content = (0, _json.object)(request.content);
|
|
325
|
+
const payload = (0, _json.object)((0, _json.object)(request.trigger).payload);
|
|
326
|
+
const data = (0, _json.object)(content.data ?? payload.body);
|
|
327
|
+
return {
|
|
328
|
+
notificationId: (0, _json.string)(request.identifier),
|
|
329
|
+
testId: (0, _json.string)(data.__buoyTestId),
|
|
330
|
+
title: (0, _json.string)(content.title),
|
|
331
|
+
actionIdentifier: (0, _json.string)(raw.actionIdentifier)
|
|
332
|
+
};
|
|
333
|
+
}
|
|
334
|
+
function responseKey(value) {
|
|
335
|
+
const raw = (0, _json.object)(value);
|
|
336
|
+
const notification = (0, _json.object)(raw.notification);
|
|
337
|
+
return JSON.stringify([(0, _json.object)(notification.request).identifier, notification.date, raw.actionIdentifier, raw.userText]);
|
|
338
|
+
}
|
|
339
|
+
//# sourceMappingURL=recorder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_json","require","PREFIX","SESSION","TOKENS","EVENT","MAX_RECORD_BYTES","MAX_JOURNAL_BYTES","MAX_RECORDS","NotificationRecorder","state","version","ready","provider","providerVersion","platform","appId","capabilities","durable","storageError","evicted","session","events","tokens","permissions","presented","listeners","Set","sequence","queue","Promise","resolve","constructor","options","now","Date","processId","toString","Math","random","slice","storage","hydrate","getSnapshot","subscribe","listener","add","delete","update","patch","configure","allowed","enabled","storageFailure","error","Error","message","String","serial","task","next","then","catch","durability","explicitlyStopped","rawSession","getItem","s","JSON","parse","runId","Number","isFinite","expiresAt","rawTokens","Array","isArray","filter","t","includes","type","value","keys","getAllKeys","key","startsWith","sort","records","raw","byteLength","removeItem","record","id","kind","capturedAt","push","a","b","localeCompare","prune","autoStart","startedAt","setItem","stringify","setCaptureSession","durationMs","trim","length","metadata","observedAppState","appState","clean","json","clipped","max","dedupeKey","some","e","notificationId","testId","title","actionIdentifier","note","truncated","sizes","map","bytes","reduce","sum","size","removed","shift","event","clearCapturedEvents","cleared","observeToken","token","observedAt","projectId","environment","setPermissions","setPresented","count","flush","exports","expoMetadata","object","notification","request","content","payload","trigger","data","body","string","identifier","__buoyTestId","responseKey","date","userText"],"sourceRoot":"../../src","sources":["recorder.ts"],"mappings":";;;;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AAGA,MAAMC,MAAM,GAAG,wBAAwB;AACvC,MAAMC,OAAO,GAAGD,MAAM,GAAG,SAAS;AAClC,MAAME,MAAM,GAAGF,MAAM,GAAG,QAAQ;AAChC,MAAMG,KAAK,GAAGH,MAAM,GAAG,QAAQ;AAC/B,MAAMI,gBAAgB,GAAG,EAAE,GAAG,IAAI;AAClC,MAAMC,iBAAiB,GAAG,GAAG,GAAG,IAAI;AACpC,MAAMC,WAAW,GAAG,GAAG;AAavB;AACO,MAAMC,oBAAoB,CAAC;EACxBC,KAAK,GAAyB;IACpCC,OAAO,EAAE,CAAC;IAAEC,KAAK,EAAE,KAAK;IAAEC,QAAQ,EAAE,IAAI;IAAEC,eAAe,EAAE,IAAI;IAAEC,QAAQ,EAAE,SAAS;IACpFC,KAAK,EAAE,IAAI;IAAEC,YAAY,EAAE,EAAE;IAAEC,OAAO,EAAE,KAAK;IAAEC,YAAY,EAAE,IAAI;IAAEC,OAAO,EAAE,CAAC;IAC7EC,OAAO,EAAE,IAAI;IAAEC,MAAM,EAAE,EAAE;IAAEC,MAAM,EAAE,EAAE;IAAEC,WAAW,EAAE,IAAI;IAAEC,SAAS,EAAE;EACvE,CAAC;EACOC,SAAS,GAAG,IAAIC,GAAG,CAAa,CAAC;EACjCC,QAAQ,GAAG,CAAC;EACZC,KAAK,GAAqBC,OAAO,CAACC,OAAO,CAAC,CAAC;EAInDC,WAAWA,CAASC,OAAwB,GAAG,CAAC,CAAC,EAAE;IAAA,KAA/BA,OAAwB,GAAxBA,OAAwB;IAC1C,IAAI,CAACC,GAAG,GAAGD,OAAO,CAACC,GAAG,IAAIC,IAAI,CAACD,GAAG;IAClC,IAAI,CAACE,SAAS,GAAGH,OAAO,CAACG,SAAS,IAAI,GAAG,IAAI,CAACF,GAAG,CAAC,CAAC,CAACG,QAAQ,CAAC,EAAE,CAAC,IAAIC,IAAI,CAACC,MAAM,CAAC,CAAC,CAACF,QAAQ,CAAC,EAAE,CAAC,CAACG,KAAK,CAAC,CAAC,CAAC,EAAE;IACzG,IAAI,CAAC9B,KAAK,CAACQ,OAAO,GAAG,CAAC,CAACe,OAAO,CAACQ,OAAO,IAAIR,OAAO,CAACf,OAAO,KAAK,IAAI;IAClE,IAAI,CAACN,KAAK,GAAG,IAAI,CAAC8B,OAAO,CAAC,CAAC;IAC3B,IAAI,CAACb,KAAK,GAAG,IAAI,CAACjB,KAAK;EACzB;EACA+B,WAAW,GAAGA,CAAA,KAA4B,IAAI,CAACjC,KAAK;EACpDkC,SAAS,GAAIC,QAAoB,IAAmB;IAClD,IAAI,CAACnB,SAAS,CAACoB,GAAG,CAACD,QAAQ,CAAC;IAC5B,OAAO,MAAM;MAAE,IAAI,CAACnB,SAAS,CAACqB,MAAM,CAACF,QAAQ,CAAC;IAAE,CAAC;EACnD,CAAC;EACOG,MAAMA,CAACC,KAAoC,EAAE;IACnD,IAAI,CAACvC,KAAK,GAAG;MAAE,GAAG,IAAI,CAACA,KAAK;MAAE,GAAGuC;IAAM,CAAC;IACxC,KAAK,MAAMJ,QAAQ,IAAI,IAAI,CAACnB,SAAS,EAAE;MAAE,IAAI;QAAEmB,QAAQ,CAAC,CAAC;MAAE,CAAC,CAAC,MAAM,CAAE;IAAkD;EACzH;EACAK,SAASA,CAACD,KAA8H,EAAE;IAAE,IAAI,CAACD,MAAM,CAACC,KAAK,CAAC;EAAE;EACxJE,OAAOA,CAAA,EAAG;IAAE,OAAO,IAAI,CAAClB,OAAO,CAACmB,OAAO,GAAG,CAAC,IAAI,IAAI;EAAE;EACrDC,cAAcA,CAACC,KAAc,EAAE;IAAE,IAAI,CAACN,MAAM,CAAC;MAAE7B,YAAY,EAAEmC,KAAK,YAAYC,KAAK,GAAGD,KAAK,CAACE,OAAO,GAAGC,MAAM,CAACH,KAAK,CAAC;MAAEpC,OAAO,EAAE;IAAM,CAAC,CAAC;EAAE;EACxIwC,MAAMA,CAAIC,IAAsB,EAAc;IACpD,MAAMC,IAAI,GAAG,IAAI,CAAC/B,KAAK,CAACgC,IAAI,CAACF,IAAI,CAAC;IAClC,IAAI,CAAC9B,KAAK,GAAG+B,IAAI,CAACE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IACjC,OAAOF,IAAI;EACb;EACA,MAAclB,OAAOA,CAAA,EAAG;IACtB,IAAI,CAAC,IAAI,CAACS,OAAO,CAAC,CAAC,EAAE;MAAE,IAAI,CAACH,MAAM,CAAC;QAAEpC,KAAK,EAAE;MAAK,CAAC,CAAC;MAAE;IAAQ;IAC7D,IAAI,IAAI,CAACqB,OAAO,CAAC8B,UAAU,EAAE;MAC3B,IAAI;QAAE,IAAI,CAACf,MAAM,CAAC;UAAE9B,OAAO,EAAE,MAAM,IAAI,CAACe,OAAO,CAAC8B;QAAW,CAAC,CAAC;MAAE,CAAC,CAChE,OAAOT,KAAK,EAAE;QAAE,IAAI,CAACD,cAAc,CAACC,KAAK,CAAC;MAAE;IAC9C;IACA,MAAMb,OAAO,GAAG,IAAI,CAACR,OAAO,CAACQ,OAAO;IACpC,IAAIuB,iBAAiB,GAAG,KAAK;IAC7B,IAAIvB,OAAO,EAAE,IAAI;MACf,MAAMwB,UAAU,GAAG,MAAMxB,OAAO,CAACyB,OAAO,CAAC/D,OAAO,CAAC;MACjD6D,iBAAiB,GAAGC,UAAU,KAAK,MAAM;MACzC,IAAIA,UAAU,EAAE;QACd,MAAME,CAAC,GAAGC,IAAI,CAACC,KAAK,CAACJ,UAAU,CAAmB;QAClD,IAAIE,CAAC,IAAI,OAAOA,CAAC,CAACG,KAAK,KAAK,QAAQ,IAAIC,MAAM,CAACC,QAAQ,CAACL,CAAC,CAACM,SAAS,CAAC,IAAIN,CAAC,CAACM,SAAS,GAAG,IAAI,CAACvC,GAAG,CAAC,CAAC,EAAE,IAAI,CAACc,MAAM,CAAC;UAAE3B,OAAO,EAAE8C;QAAE,CAAC,CAAC;MAC/H;MACA,MAAMO,SAAS,GAAG,MAAMjC,OAAO,CAACyB,OAAO,CAAC9D,MAAM,CAAC;MAC/C,IAAIsE,SAAS,EAAE;QACb,MAAMnD,MAAe,GAAG6C,IAAI,CAACC,KAAK,CAACK,SAAS,CAAC;QAC7C,IAAIC,KAAK,CAACC,OAAO,CAACrD,MAAM,CAAC,EAAE,IAAI,CAACyB,MAAM,CAAC;UAAEzB,MAAM,EAAEA,MAAM,CAACsD,MAAM,CAACC,CAAC,IAAIA,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAACC,QAAQ,CAACD,CAAC,CAACE,IAAI,CAAC,IAAI,OAAOF,CAAC,CAACG,KAAK,KAAK,QAAQ,CAAC,CAACzC,KAAK,CAAC,CAAC,EAAE;QAAE,CAAC,CAAC;MACjK;MACA,MAAM0C,IAAI,GAAG,CAAC,MAAMzC,OAAO,CAAC0C,UAAU,CAAC,CAAC,EAAEN,MAAM,CAACO,GAAG,IAAIA,GAAG,CAACC,UAAU,CAAChF,KAAK,CAAC,CAAC,CAACiF,IAAI,CAAC,CAAC;MACrF,MAAMC,OAA6B,GAAG,EAAE;MACxC,KAAK,MAAMH,GAAG,IAAIF,IAAI,EAAE;QACtB,IAAI;UACF,MAAMM,GAAG,GAAG,MAAM/C,OAAO,CAACyB,OAAO,CAACkB,GAAG,CAAC;UACtC,IAAI,CAACI,GAAG,IAAI,IAAAC,gBAAU,EAACD,GAAG,CAAC,GAAGlF,gBAAgB,EAAE;YAAE,MAAMmC,OAAO,CAACiD,UAAU,CAACN,GAAG,CAAC;YAAE;UAAU;UAC3F,MAAMO,MAAM,GAAGvB,IAAI,CAACC,KAAK,CAACmB,GAAG,CAAuB;UACpD,IAAI,OAAOG,MAAM,CAACC,EAAE,KAAK,QAAQ,IAAI,OAAOD,MAAM,CAACE,IAAI,KAAK,QAAQ,IAAItB,MAAM,CAACC,QAAQ,CAACmB,MAAM,CAACG,UAAU,CAAC,EAAEP,OAAO,CAACQ,IAAI,CAACJ,MAAM,CAAC,CAAC,KAC5H,MAAMlD,OAAO,CAACiD,UAAU,CAACN,GAAG,CAAC;QACpC,CAAC,CAAC,MAAM;UAAE,MAAM3C,OAAO,CAACiD,UAAU,CAACN,GAAG,CAAC;QAAE;MAC3C;MACAG,OAAO,CAACD,IAAI,CAAC,CAACU,CAAC,EAAEC,CAAC,KAAKD,CAAC,CAACF,UAAU,GAAGG,CAAC,CAACH,UAAU,IAAIE,CAAC,CAACpE,QAAQ,GAAGqE,CAAC,CAACrE,QAAQ,IAAIoE,CAAC,CAACJ,EAAE,CAACM,aAAa,CAACD,CAAC,CAACL,EAAE,CAAC,CAAC;MAC1G,IAAI,CAAC5C,MAAM,CAAC;QAAE1B,MAAM,EAAEiE;MAAQ,CAAC,CAAC;MAChC,MAAM,IAAI,CAACY,KAAK,CAAC,CAAC;IACpB,CAAC,CAAC,OAAO7C,KAAK,EAAE;MAAE,IAAI,CAACD,cAAc,CAACC,KAAK,CAAC;IAAE;IAC9C,IAAI,IAAI,CAACrB,OAAO,CAACmE,SAAS,IAAI,CAAC,IAAI,CAAC1F,KAAK,CAACW,OAAO,IAAI,CAAC2C,iBAAiB,EAAE;MACvE,MAAMqC,SAAS,GAAG,IAAI,CAACnE,GAAG,CAAC,CAAC;MAC5B,MAAMb,OAAO,GAAG;QAAEiD,KAAK,EAAE,IAAI,CAAClC,SAAS;QAAEiE,SAAS;QAAE5B,SAAS,EAAE4B,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG;MAAK,CAAC;MAC3F,IAAI;QAAE,MAAM5D,OAAO,EAAE6D,OAAO,CAACnG,OAAO,EAAEiE,IAAI,CAACmC,SAAS,CAAClF,OAAO,CAAC,CAAC;MAAE,CAAC,CACjE,OAAOiC,KAAK,EAAE;QAAE,IAAI,CAACD,cAAc,CAACC,KAAK,CAAC;MAAE;MAC5C,IAAI,CAACN,MAAM,CAAC;QAAE3B;MAAQ,CAAC,CAAC;IAC1B;IACA,IAAI,CAAC2B,MAAM,CAAC;MAAEpC,KAAK,EAAE;IAAK,CAAC,CAAC;EAC9B;EACA,MAAM4F,iBAAiBA,CAAClC,KAAoB,EAAEmC,UAAU,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,EAAiE;IACxI,IAAI,CAAC,IAAI,CAACtD,OAAO,CAAC,CAAC,EAAE,MAAM,IAAII,KAAK,CAAC,iDAAiD,CAAC;IACvF,IAAIe,KAAK,KAAK,IAAI,KAAK,OAAOA,KAAK,KAAK,QAAQ,IAAI,CAACA,KAAK,CAACoC,IAAI,CAAC,CAAC,IAAIpC,KAAK,CAACqC,MAAM,GAAG,GAAG,CAAC,EAAE,MAAM,IAAIpD,KAAK,CAAC,qEAAqE,CAAC;IAChL,IAAI,CAACgB,MAAM,CAACC,QAAQ,CAACiC,UAAU,CAAC,IAAIA,UAAU,GAAG,IAAI,IAAIA,UAAU,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,MAAM,IAAIlD,KAAK,CAAC,uDAAuD,CAAC;IAC9J,OAAO,IAAI,CAACG,MAAM,CAAC,YAAY;MAC7B,MAAM2C,SAAS,GAAG,IAAI,CAACnE,GAAG,CAAC,CAAC;MAC5B,MAAMb,OAAO,GAAGiD,KAAK,KAAK,IAAI,GAAG,IAAI,GAAG;QAAEA,KAAK;QAAE+B,SAAS;QAAE5B,SAAS,EAAE4B,SAAS,GAAGI;MAAW,CAAC;MAC/F,IAAI;QACF,IAAI,IAAI,CAACxE,OAAO,CAACQ,OAAO,EAAE,MAAM,IAAI,CAACR,OAAO,CAACQ,OAAO,CAAC6D,OAAO,CAACnG,OAAO,EAAEiE,IAAI,CAACmC,SAAS,CAAClF,OAAO,CAAC,CAAC;MAChG,CAAC,CAAC,OAAOiC,KAAK,EAAE;QAAE,IAAI,CAACD,cAAc,CAACC,KAAK,CAAC;QAAE,MAAM,IAAIC,KAAK,CAAC,6EAA6E,CAAC;MAAE;MAC9I,IAAI,CAACP,MAAM,CAAC;QAAE3B;MAAQ,CAAC,CAAC;MACxB,OAAO;QAAEA,OAAO;QAAEH,OAAO,EAAE,IAAI,CAACR,KAAK,CAACQ;MAAQ,CAAC;IACjD,CAAC,CAAC;EACJ;EACAyE,MAAMA,CAACE,IAA2B,EAAEL,GAAY,EAAEoB,QAAkI,GAAG,CAAC,CAAC,EAAsC;IAC7N,MAAMd,UAAU,GAAG,IAAI,CAAC5D,GAAG,CAAC,CAAC;IAC7B,MAAM2E,gBAAgB,GAAG,IAAI,CAAC5E,OAAO,CAAC6E,QAAQ,GAAG,CAAC,IAAI,SAAS;IAC/D,MAAMC,KAAK,GAAG,IAAAC,UAAI,EAACxB,GAAG,CAAC;IACvB,OAAO,IAAI,CAAC9B,MAAM,CAAC,YAAY;MAC7B,IAAI,CAAC,IAAI,CAACP,OAAO,CAAC,CAAC,EAAE,OAAO,IAAI;MAChC,MAAM9B,OAAO,GAAG,IAAI,CAACX,KAAK,CAACW,OAAO;MAClC,IAAI,CAACA,OAAO,IAAIA,OAAO,CAACoD,SAAS,IAAIqB,UAAU,EAAE;QAC/C,IAAIzE,OAAO,EAAE,IAAI,CAAC2B,MAAM,CAAC;UAAE3B,OAAO,EAAE;QAAK,CAAC,CAAC;QAC3C,OAAO,IAAI;MACb;MACA,MAAM4F,OAAO,GAAGA,CAAChC,KAAc,EAAEiC,GAAG,GAAG,GAAG,KAAK,OAAOjC,KAAK,KAAK,QAAQ,GAAGA,KAAK,CAACzC,KAAK,CAAC,CAAC,EAAE0E,GAAG,CAAC,GAAG,IAAI;MACrG,MAAMC,SAAS,GAAGF,OAAO,CAACL,QAAQ,CAACO,SAAS,EAAE,IAAI,CAAC;MACnD,IAAIA,SAAS,IAAI,IAAI,CAACzG,KAAK,CAACY,MAAM,CAAC8F,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACF,SAAS,KAAKA,SAAS,CAAC,EAAE,OAAO,IAAI;MACpF,MAAMxB,MAA0B,GAAG;QACjCC,EAAE,EAAE,GAAG,IAAI,CAACxD,SAAS,IAAI,EAAE,IAAI,CAACR,QAAQ,EAAE;QAAEQ,SAAS,EAAE,IAAI,CAACA,SAAS;QACrER,QAAQ,EAAE,IAAI,CAACA,QAAQ;QAAEkE,UAAU;QAAExB,KAAK,EAAEjD,OAAO,CAACiD,KAAK;QAAEuB,IAAI;QAC/DhF,QAAQ,EAAEoG,OAAO,CAACL,QAAQ,CAAC/F,QAAQ,EAAE,EAAE,CAAC,IAAI,IAAI,CAACH,KAAK,CAACG,QAAQ,IAAI,KAAK;QAAEgG,gBAAgB;QAC1FS,cAAc,EAAEL,OAAO,CAACL,QAAQ,CAACU,cAAc,CAAC;QAAEC,MAAM,EAAEN,OAAO,CAACL,QAAQ,CAACW,MAAM,CAAC;QAClFC,KAAK,EAAEP,OAAO,CAACL,QAAQ,CAACY,KAAK,EAAE,IAAI,CAAC;QAAEC,gBAAgB,EAAER,OAAO,CAACL,QAAQ,CAACa,gBAAgB,CAAC;QAC1F,IAAIN,SAAS,GAAG;UAAEA;QAAU,CAAC,GAAG,CAAC,CAAC,CAAC;QAAE3B,GAAG,EAAEuB;MAC5C,CAAC;MACD,IAAI,IAAAtB,gBAAU,EAACrB,IAAI,CAACmC,SAAS,CAACZ,MAAM,CAAC,CAAC,GAAGrF,gBAAgB,EAAE;QACzDqF,MAAM,CAACH,GAAG,GAAG;UAAEkC,IAAI,EAAE;QAA6C,CAAC;QACnE/B,MAAM,CAACgC,SAAS,GAAG,IAAI;MACzB;MACA,IAAI,CAAC3E,MAAM,CAAC;QAAE1B,MAAM,EAAE,CAAC,GAAG,IAAI,CAACZ,KAAK,CAACY,MAAM,EAAEqE,MAAM;MAAE,CAAC,CAAC;MACvD,IAAI;QACF,MAAM,IAAI,CAAC1D,OAAO,CAACQ,OAAO,EAAE6D,OAAO,CAACjG,KAAK,GAAGsF,MAAM,CAACC,EAAE,EAAExB,IAAI,CAACmC,SAAS,CAACZ,MAAM,CAAC,CAAC;MAChF,CAAC,CAAC,OAAOrC,KAAK,EAAE;QAAE,IAAI,CAACD,cAAc,CAACC,KAAK,CAAC;MAAE;MAC9C;MACA,IAAI;QAAE,MAAM,IAAI,CAAC6C,KAAK,CAAC,CAAC;MAAE,CAAC,CAC3B,OAAO7C,KAAK,EAAE;QAAE,IAAI,CAACD,cAAc,CAACC,KAAK,CAAC;MAAE;MAC5C,OAAOqC,MAAM;IACf,CAAC,CAAC;EACJ;EACA,MAAcQ,KAAKA,CAAA,EAAG;IACpB,MAAM7E,MAAM,GAAG,CAAC,GAAG,IAAI,CAACZ,KAAK,CAACY,MAAM,CAAC;IACrC,MAAMsG,KAAK,GAAGtG,MAAM,CAACuG,GAAG,CAACR,CAAC,IAAI,IAAA5B,gBAAU,EAACrB,IAAI,CAACmC,SAAS,CAACc,CAAC,CAAC,CAAC,CAAC;IAC5D,IAAIS,KAAK,GAAGF,KAAK,CAACG,MAAM,CAAC,CAACC,GAAG,EAAEC,IAAI,KAAKD,GAAG,GAAGC,IAAI,EAAE,CAAC,CAAC;IACtD,MAAMC,OAA6B,GAAG,EAAE;IACxC,OAAO5G,MAAM,CAACqF,MAAM,GAAGnG,WAAW,IAAIsH,KAAK,GAAGvH,iBAAiB,EAAE;MAC/D2H,OAAO,CAACnC,IAAI,CAACzE,MAAM,CAAC6G,KAAK,CAAC,CAAE,CAAC;MAC7BL,KAAK,IAAIF,KAAK,CAACO,KAAK,CAAC,CAAE;IACzB;IACA,IAAID,OAAO,CAACvB,MAAM,EAAE,IAAI,CAAC3D,MAAM,CAAC;MAAE1B,MAAM;MAAEF,OAAO,EAAE,IAAI,CAACV,KAAK,CAACU,OAAO,GAAG8G,OAAO,CAACvB;IAAO,CAAC,CAAC;IACzF,KAAK,MAAMyB,KAAK,IAAIF,OAAO,EAAE,MAAM,IAAI,CAACjG,OAAO,CAACQ,OAAO,EAAEiD,UAAU,CAACrF,KAAK,GAAG+H,KAAK,CAACxC,EAAE,CAAC;EACvF;EACA,MAAMyC,mBAAmBA,CAAA,EAA+B;IACtD,OAAO,IAAI,CAAC3E,MAAM,CAAC,YAAY;MAC7B,MAAMpC,MAAM,GAAG,IAAI,CAACZ,KAAK,CAACY,MAAM;MAChC,KAAK,MAAM8G,KAAK,IAAI9G,MAAM,EAAE,MAAM,IAAI,CAACW,OAAO,CAACQ,OAAO,EAAEiD,UAAU,CAACrF,KAAK,GAAG+H,KAAK,CAACxC,EAAE,CAAC;MACpF,IAAI,CAAC5C,MAAM,CAAC;QAAE1B,MAAM,EAAE,EAAE;QAAEF,OAAO,EAAE;MAAE,CAAC,CAAC;MACvC,OAAO;QAAEkH,OAAO,EAAE;MAAK,CAAC;IAC1B,CAAC,CAAC;EACJ;EACA,MAAMC,YAAYA,CAACvD,IAA+B,EAAEC,KAAa,EAAE2B,QAAuE,GAAG,CAAC,CAAC,EAAiB;IAC9J,IAAI,CAAC,IAAI,CAACzD,OAAO,CAAC,CAAC,EAAE;IACrB,IAAI,CAAC8B,KAAK,IAAIA,KAAK,CAAC0B,MAAM,GAAG,IAAI,EAAE,MAAM,IAAIpD,KAAK,CAAC,8CAA8C,CAAC;IAClG,OAAO,IAAI,CAACG,MAAM,CAAC,YAAY;MAC7B,MAAM8E,KAAwB,GAAG;QAC/BxD,IAAI;QAAEC,KAAK;QAAEwD,UAAU,EAAE,IAAI,CAACvG,GAAG,CAAC,CAAC;QACnC,IAAI,OAAO0E,QAAQ,CAAC8B,SAAS,KAAK,QAAQ,GAAG;UAAEA,SAAS,EAAE9B,QAAQ,CAAC8B,SAAS,CAAClG,KAAK,CAAC,CAAC,EAAE,GAAG;QAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAClG,IAAI,OAAOoE,QAAQ,CAAC+B,WAAW,KAAK,QAAQ,GAAG;UAAEA,WAAW,EAAE/B,QAAQ,CAAC+B,WAAW,CAACnG,KAAK,CAAC,CAAC,EAAE,GAAG;QAAE,CAAC,GAAG,CAAC,CAAC;MACzG,CAAC;MACD,MAAMjB,MAAM,GAAG,CAAC,GAAG,IAAI,CAACb,KAAK,CAACa,MAAM,CAACsD,MAAM,CAACC,CAAC,IAAI,EAAEA,CAAC,CAACE,IAAI,KAAKA,IAAI,IAAIF,CAAC,CAAC4D,SAAS,KAAK9B,QAAQ,CAAC8B,SAAS,IAAI5D,CAAC,CAAC6D,WAAW,KAAK/B,QAAQ,CAAC+B,WAAW,CAAC,CAAC,EAAEH,KAAK,CAAC,CAAChG,KAAK,CAAC,CAAC,EAAE,CAAC;MACvK,IAAI,CAACQ,MAAM,CAAC;QAAEzB;MAAO,CAAC,CAAC;MACvB,IAAI;QAAE,MAAM,IAAI,CAACU,OAAO,CAACQ,OAAO,EAAE6D,OAAO,CAAClG,MAAM,EAAEgE,IAAI,CAACmC,SAAS,CAAChF,MAAM,CAAC,CAAC;MAAE,CAAC,CAC5E,OAAO+B,KAAK,EAAE;QAAE,IAAI,CAACD,cAAc,CAACC,KAAK,CAAC;MAAE;IAC9C,CAAC,CAAC;EACJ;EACAsF,cAAcA,CAACpH,WAAoB,EAAE;IACnC,MAAMyD,KAAK,GAAG,IAAA+B,UAAI,EAACxF,WAAW,CAAC;IAC/B,IAAI,CAACwB,MAAM,CAAC;MAAExB,WAAW,EAAE,IAAAiE,gBAAU,EAACrB,IAAI,CAACmC,SAAS,CAACtB,KAAK,CAAC,CAAC,IAAI3E,gBAAgB,GAAG2E,KAAK,GAAG;QAAEyC,IAAI,EAAE;MAAgD;IAAE,CAAC,CAAC;EACzJ;EACAmB,YAAYA,CAACpH,SAAkB,EAAE;IAC/B,MAAMwD,KAAK,GAAG,IAAA+B,UAAI,EAACvF,SAAS,CAAC;IAC7B,IAAI,IAAAgE,gBAAU,EAACrB,IAAI,CAACmC,SAAS,CAACtB,KAAK,CAAC,CAAC,IAAI,GAAG,GAAG,IAAI,EAAE,IAAI,CAACjC,MAAM,CAAC;MAAEvB,SAAS,EAAEwD;IAAM,CAAC,CAAC,CAAC,KAClF,IAAI,CAACjC,MAAM,CAAC;MAAEvB,SAAS,EAAE;QAAEiG,IAAI,EAAE,wFAAwF;QAAEoB,KAAK,EAAEnE,KAAK,CAACC,OAAO,CAACnD,SAAS,CAAC,GAAGA,SAAS,CAACkF,MAAM,GAAG;MAAK;IAAE,CAAC,CAAC;EAChM;EACA,MAAMoC,KAAKA,CAAA,EAAG;IAAE,MAAM,IAAI,CAAClH,KAAK;EAAE;AACpC;AAACmH,OAAA,CAAAvI,oBAAA,GAAAA,oBAAA;AAEM,SAASwI,YAAYA,CAAChE,KAAc,EAAE;EAC3C,MAAMO,GAAG,GAAG,IAAA0D,YAAM,EAACjE,KAAK,CAAC;EACzB,MAAMkE,YAAY,GAAG,IAAAD,YAAM,EAAC1D,GAAG,CAAC2D,YAAY,IAAIlE,KAAK,CAAC;EACtD,MAAMmE,OAAO,GAAG,IAAAF,YAAM,EAACC,YAAY,CAACC,OAAO,CAAC;EAC5C,MAAMC,OAAO,GAAG,IAAAH,YAAM,EAACE,OAAO,CAACC,OAAO,CAAC;EACvC,MAAMC,OAAO,GAAG,IAAAJ,YAAM,EAAC,IAAAA,YAAM,EAACE,OAAO,CAACG,OAAO,CAAC,CAACD,OAAO,CAAC;EACvD,MAAME,IAAI,GAAG,IAAAN,YAAM,EAACG,OAAO,CAACG,IAAI,IAAIF,OAAO,CAACG,IAAI,CAAC;EACjD,OAAO;IACLnC,cAAc,EAAE,IAAAoC,YAAM,EAACN,OAAO,CAACO,UAAU,CAAC;IAAEpC,MAAM,EAAE,IAAAmC,YAAM,EAACF,IAAI,CAACI,YAAY,CAAC;IAC7EpC,KAAK,EAAE,IAAAkC,YAAM,EAACL,OAAO,CAAC7B,KAAK,CAAC;IAAEC,gBAAgB,EAAE,IAAAiC,YAAM,EAAClE,GAAG,CAACiC,gBAAgB;EAC7E,CAAC;AACH;AAEO,SAASoC,WAAWA,CAAC5E,KAAc,EAAU;EAClD,MAAMO,GAAG,GAAG,IAAA0D,YAAM,EAACjE,KAAK,CAAC;EACzB,MAAMkE,YAAY,GAAG,IAAAD,YAAM,EAAC1D,GAAG,CAAC2D,YAAY,CAAC;EAC7C,OAAO/E,IAAI,CAACmC,SAAS,CAAC,CAAC,IAAA2C,YAAM,EAACC,YAAY,CAACC,OAAO,CAAC,CAACO,UAAU,EAAER,YAAY,CAACW,IAAI,EAAEtE,GAAG,CAACiC,gBAAgB,EAAEjC,GAAG,CAACuE,QAAQ,CAAC,CAAC;AACzH","ignoreList":[]}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.captureEnabled = captureEnabled;
|
|
7
|
+
exports.getNotificationRecorder = getNotificationRecorder;
|
|
8
|
+
exports.installExpoNotificationCapture = installExpoNotificationCapture;
|
|
9
|
+
exports.notificationSyncAdapter = void 0;
|
|
10
|
+
var _reactNative = require("react-native");
|
|
11
|
+
var _storage = require("./storage");
|
|
12
|
+
var _recorder = require("./recorder");
|
|
13
|
+
var _expo = require("./expo");
|
|
14
|
+
var _json = require("./json");
|
|
15
|
+
const globals = globalThis;
|
|
16
|
+
function captureEnabled(enableInRelease = false) {
|
|
17
|
+
return typeof __DEV__ !== "undefined" && __DEV__ || enableInRelease === true;
|
|
18
|
+
}
|
|
19
|
+
function getNotificationRecorder() {
|
|
20
|
+
return globals.__buoyNotificationsV1?.recorder ?? null;
|
|
21
|
+
}
|
|
22
|
+
function installExpoNotificationCapture(sdk, options = {}) {
|
|
23
|
+
if (!captureEnabled(options.enableInRelease)) return null;
|
|
24
|
+
const key = JSON.stringify([options.platform ?? _reactNative.Platform.OS, options.appId, options.providerVersion, options.projectId, options.enableInRelease, options.preview]);
|
|
25
|
+
let runtime = globals.__buoyNotificationsV1;
|
|
26
|
+
if (!runtime) {
|
|
27
|
+
const persistence = options.storage ? {
|
|
28
|
+
storage: options.storage,
|
|
29
|
+
durable: options.durable === true
|
|
30
|
+
} : (0, _storage.defaultNotificationStorage)();
|
|
31
|
+
const recorder = new _recorder.NotificationRecorder({
|
|
32
|
+
...persistence,
|
|
33
|
+
enabled: () => captureEnabled(options.enableInRelease),
|
|
34
|
+
appState: () => _reactNative.AppState.currentState ?? "unknown",
|
|
35
|
+
autoStart: true
|
|
36
|
+
});
|
|
37
|
+
runtime = {
|
|
38
|
+
recorder
|
|
39
|
+
};
|
|
40
|
+
globals.__buoyNotificationsV1 = runtime;
|
|
41
|
+
}
|
|
42
|
+
if (runtime.sdk !== sdk || runtime.key !== key) {
|
|
43
|
+
runtime.attachment?.dispose();
|
|
44
|
+
runtime.attachment = (0, _expo.attachExpoNotifications)(runtime.recorder, sdk, {
|
|
45
|
+
...options,
|
|
46
|
+
platform: options.platform ?? _reactNative.Platform.OS
|
|
47
|
+
});
|
|
48
|
+
runtime.sdk = sdk;
|
|
49
|
+
runtime.key = key;
|
|
50
|
+
}
|
|
51
|
+
return runtime.recorder;
|
|
52
|
+
}
|
|
53
|
+
const emptyRecorder = new _recorder.NotificationRecorder();
|
|
54
|
+
function current() {
|
|
55
|
+
const runtime = globals.__buoyNotificationsV1;
|
|
56
|
+
if (!runtime) throw new Error("Install Expo notification capture in the app entry point, before rendering the root component.");
|
|
57
|
+
return runtime;
|
|
58
|
+
}
|
|
59
|
+
const notificationSyncAdapter = exports.notificationSyncAdapter = {
|
|
60
|
+
version: 1,
|
|
61
|
+
getSnapshot: () => (getNotificationRecorder() ?? emptyRecorder).getSnapshot(),
|
|
62
|
+
subscribe: listener => (getNotificationRecorder() ?? emptyRecorder).subscribe(listener),
|
|
63
|
+
actions: {
|
|
64
|
+
getSnapshot: () => notificationSyncAdapter.getSnapshot(),
|
|
65
|
+
getCapabilities: () => {
|
|
66
|
+
const {
|
|
67
|
+
ready,
|
|
68
|
+
provider,
|
|
69
|
+
providerVersion,
|
|
70
|
+
platform,
|
|
71
|
+
appId,
|
|
72
|
+
capabilities,
|
|
73
|
+
durable,
|
|
74
|
+
storageError
|
|
75
|
+
} = notificationSyncAdapter.getSnapshot();
|
|
76
|
+
return {
|
|
77
|
+
ready,
|
|
78
|
+
provider,
|
|
79
|
+
providerVersion,
|
|
80
|
+
platform,
|
|
81
|
+
appId,
|
|
82
|
+
capabilities,
|
|
83
|
+
durable,
|
|
84
|
+
storageError
|
|
85
|
+
};
|
|
86
|
+
},
|
|
87
|
+
getEvent(params) {
|
|
88
|
+
const {
|
|
89
|
+
id
|
|
90
|
+
} = (0, _json.object)(params);
|
|
91
|
+
if (typeof id !== "string") throw new Error("Provide the captured event id.");
|
|
92
|
+
return current().recorder.getSnapshot().events.find(event => event.id === id) ?? null;
|
|
93
|
+
},
|
|
94
|
+
async setCaptureSession(params) {
|
|
95
|
+
const {
|
|
96
|
+
runId,
|
|
97
|
+
durationMs
|
|
98
|
+
} = (0, _json.object)(params);
|
|
99
|
+
if (typeof runId !== "string" && runId !== null) throw new Error("Provide runId, or null to stop capture.");
|
|
100
|
+
if (durationMs !== undefined && typeof durationMs !== "number") throw new Error("durationMs must be a number.");
|
|
101
|
+
return current().recorder.setCaptureSession(runId, durationMs);
|
|
102
|
+
},
|
|
103
|
+
clearCapturedEvents: () => current().recorder.clearCapturedEvents(),
|
|
104
|
+
getPermissions: () => current().attachment.actions.getPermissions(),
|
|
105
|
+
listPresented: () => current().attachment.actions.listPresented(),
|
|
106
|
+
refreshToken: params => current().attachment.actions.refreshToken(params),
|
|
107
|
+
scheduleLocal: params => current().attachment.actions.scheduleLocal(params)
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
//# sourceMappingURL=runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_storage","_recorder","_expo","_json","globals","globalThis","captureEnabled","enableInRelease","__DEV__","getNotificationRecorder","__buoyNotificationsV1","recorder","installExpoNotificationCapture","sdk","options","key","JSON","stringify","platform","Platform","OS","appId","providerVersion","projectId","preview","runtime","persistence","storage","durable","defaultNotificationStorage","NotificationRecorder","enabled","appState","AppState","currentState","autoStart","attachment","dispose","attachExpoNotifications","emptyRecorder","current","Error","notificationSyncAdapter","exports","version","getSnapshot","subscribe","listener","actions","getCapabilities","ready","provider","capabilities","storageError","getEvent","params","id","object","events","find","event","setCaptureSession","runId","durationMs","undefined","clearCapturedEvents","getPermissions","listPresented","refreshToken","scheduleLocal"],"sourceRoot":"../../src","sources":["runtime.ts"],"mappings":";;;;;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AACA,IAAAE,SAAA,GAAAF,OAAA;AACA,IAAAG,KAAA,GAAAH,OAAA;AACA,IAAAI,KAAA,GAAAJ,OAAA;AAKA,MAAMK,OAAO,GAAGC,UAAqE;AAS9E,SAASC,cAAcA,CAACC,eAAe,GAAG,KAAK,EAAE;EACtD,OAAQ,OAAOC,OAAO,KAAK,WAAW,IAAIA,OAAO,IAAKD,eAAe,KAAK,IAAI;AAChF;AACO,SAASE,uBAAuBA,CAAA,EAAG;EAAE,OAAOL,OAAO,CAACM,qBAAqB,EAAEC,QAAQ,IAAI,IAAI;AAAE;AAE7F,SAASC,8BAA8BA,CAACC,GAAsB,EAAEC,OAAmC,GAAG,CAAC,CAAC,EAA+B;EAC5I,IAAI,CAACR,cAAc,CAACQ,OAAO,CAACP,eAAe,CAAC,EAAE,OAAO,IAAI;EACzD,MAAMQ,GAAG,GAAGC,IAAI,CAACC,SAAS,CAAC,CAACH,OAAO,CAACI,QAAQ,IAAIC,qBAAQ,CAACC,EAAE,EAAEN,OAAO,CAACO,KAAK,EAAEP,OAAO,CAACQ,eAAe,EAAER,OAAO,CAACS,SAAS,EAAET,OAAO,CAACP,eAAe,EAAEO,OAAO,CAACU,OAAO,CAAC,CAAC;EAClK,IAAIC,OAAO,GAAGrB,OAAO,CAACM,qBAAqB;EAC3C,IAAI,CAACe,OAAO,EAAE;IACZ,MAAMC,WAAW,GAAGZ,OAAO,CAACa,OAAO,GAAG;MAAEA,OAAO,EAAEb,OAAO,CAACa,OAAO;MAAEC,OAAO,EAAEd,OAAO,CAACc,OAAO,KAAK;IAAK,CAAC,GAAG,IAAAC,mCAA0B,EAAC,CAAC;IACpI,MAAMlB,QAAQ,GAAG,IAAImB,8BAAoB,CAAC;MACxC,GAAGJ,WAAW;MACdK,OAAO,EAAEA,CAAA,KAAMzB,cAAc,CAACQ,OAAO,CAACP,eAAe,CAAC;MACtDyB,QAAQ,EAAEA,CAAA,KAAMC,qBAAQ,CAACC,YAAY,IAAI,SAAS;MAClDC,SAAS,EAAE;IACb,CAAC,CAAC;IACFV,OAAO,GAAG;MAAEd;IAAS,CAAC;IACtBP,OAAO,CAACM,qBAAqB,GAAGe,OAAO;EACzC;EACA,IAAIA,OAAO,CAACZ,GAAG,KAAKA,GAAG,IAAIY,OAAO,CAACV,GAAG,KAAKA,GAAG,EAAE;IAC9CU,OAAO,CAACW,UAAU,EAAEC,OAAO,CAAC,CAAC;IAC7BZ,OAAO,CAACW,UAAU,GAAG,IAAAE,6BAAuB,EAACb,OAAO,CAACd,QAAQ,EAAEE,GAAG,EAAE;MAAE,GAAGC,OAAO;MAAEI,QAAQ,EAAEJ,OAAO,CAACI,QAAQ,IAAIC,qBAAQ,CAACC;IAAG,CAAC,CAAC;IAC9HK,OAAO,CAACZ,GAAG,GAAGA,GAAG;IACjBY,OAAO,CAACV,GAAG,GAAGA,GAAG;EACnB;EACA,OAAOU,OAAO,CAACd,QAAQ;AACzB;AAEA,MAAM4B,aAAa,GAAG,IAAIT,8BAAoB,CAAC,CAAC;AAChD,SAASU,OAAOA,CAAA,EAAG;EACjB,MAAMf,OAAO,GAAGrB,OAAO,CAACM,qBAAqB;EAC7C,IAAI,CAACe,OAAO,EAAE,MAAM,IAAIgB,KAAK,CAAC,gGAAgG,CAAC;EAC/H,OAAOhB,OAAO;AAChB;AACO,MAAMiB,uBAAuB,GAAAC,OAAA,CAAAD,uBAAA,GAAG;EACrCE,OAAO,EAAE,CAAC;EACVC,WAAW,EAAEA,CAAA,KAAM,CAACpC,uBAAuB,CAAC,CAAC,IAAI8B,aAAa,EAAEM,WAAW,CAAC,CAAC;EAC7EC,SAAS,EAAGC,QAAoB,IAAK,CAACtC,uBAAuB,CAAC,CAAC,IAAI8B,aAAa,EAAEO,SAAS,CAACC,QAAQ,CAAC;EACrGC,OAAO,EAAE;IACPH,WAAW,EAAEA,CAAA,KAAMH,uBAAuB,CAACG,WAAW,CAAC,CAAC;IACxDI,eAAe,EAAEA,CAAA,KAAM;MACrB,MAAM;QAAEC,KAAK;QAAEC,QAAQ;QAAE7B,eAAe;QAAEJ,QAAQ;QAAEG,KAAK;QAAE+B,YAAY;QAAExB,OAAO;QAAEyB;MAAa,CAAC,GAAGX,uBAAuB,CAACG,WAAW,CAAC,CAAC;MACxI,OAAO;QAAEK,KAAK;QAAEC,QAAQ;QAAE7B,eAAe;QAAEJ,QAAQ;QAAEG,KAAK;QAAE+B,YAAY;QAAExB,OAAO;QAAEyB;MAAa,CAAC;IACnG,CAAC;IACDC,QAAQA,CAACC,MAAe,EAAE;MACxB,MAAM;QAAEC;MAAG,CAAC,GAAG,IAAAC,YAAM,EAACF,MAAM,CAAC;MAC7B,IAAI,OAAOC,EAAE,KAAK,QAAQ,EAAE,MAAM,IAAIf,KAAK,CAAC,gCAAgC,CAAC;MAC7E,OAAOD,OAAO,CAAC,CAAC,CAAC7B,QAAQ,CAACkC,WAAW,CAAC,CAAC,CAACa,MAAM,CAACC,IAAI,CAACC,KAAK,IAAIA,KAAK,CAACJ,EAAE,KAAKA,EAAE,CAAC,IAAI,IAAI;IACvF,CAAC;IACD,MAAMK,iBAAiBA,CAACN,MAAe,EAAE;MACvC,MAAM;QAAEO,KAAK;QAAEC;MAAW,CAAC,GAAG,IAAAN,YAAM,EAACF,MAAM,CAAC;MAC5C,IAAI,OAAOO,KAAK,KAAK,QAAQ,IAAIA,KAAK,KAAK,IAAI,EAAE,MAAM,IAAIrB,KAAK,CAAC,yCAAyC,CAAC;MAC3G,IAAIsB,UAAU,KAAKC,SAAS,IAAI,OAAOD,UAAU,KAAK,QAAQ,EAAE,MAAM,IAAItB,KAAK,CAAC,8BAA8B,CAAC;MAC/G,OAAOD,OAAO,CAAC,CAAC,CAAC7B,QAAQ,CAACkD,iBAAiB,CAACC,KAAK,EAAEC,UAAU,CAAC;IAChE,CAAC;IACDE,mBAAmB,EAAEA,CAAA,KAAMzB,OAAO,CAAC,CAAC,CAAC7B,QAAQ,CAACsD,mBAAmB,CAAC,CAAC;IACnEC,cAAc,EAAEA,CAAA,KAAM1B,OAAO,CAAC,CAAC,CAACJ,UAAU,CAAEY,OAAO,CAACkB,cAAc,CAAC,CAAC;IACpEC,aAAa,EAAEA,CAAA,KAAM3B,OAAO,CAAC,CAAC,CAACJ,UAAU,CAAEY,OAAO,CAACmB,aAAa,CAAC,CAAC;IAClEC,YAAY,EAAGb,MAAe,IAAKf,OAAO,CAAC,CAAC,CAACJ,UAAU,CAAEY,OAAO,CAACoB,YAAY,CAACb,MAAM,CAAC;IACrFc,aAAa,EAAGd,MAAe,IAAKf,OAAO,CAAC,CAAC,CAACJ,UAAU,CAAEY,OAAO,CAACqB,aAAa,CAACd,MAAM;EACxF;AACF,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createExpoNotificationStorage = createExpoNotificationStorage;
|
|
7
|
+
exports.defaultNotificationStorage = defaultNotificationStorage;
|
|
8
|
+
/** Propagates native I/O failures so capture never acknowledges a memory fallback as durable. */
|
|
9
|
+
function createExpoNotificationStorage(fs) {
|
|
10
|
+
if (!fs.documentDirectory) throw new Error("Expo FileSystem has no persistent document directory.");
|
|
11
|
+
const directory = fs.documentDirectory + "buoy-notifications/";
|
|
12
|
+
const pathFor = key => directory + encodeURIComponent(key) + ".json";
|
|
13
|
+
return {
|
|
14
|
+
async getItem(key) {
|
|
15
|
+
const path = pathFor(key);
|
|
16
|
+
return (await fs.getInfoAsync(path)).exists ? fs.readAsStringAsync(path) : null;
|
|
17
|
+
},
|
|
18
|
+
async setItem(key, value) {
|
|
19
|
+
if (!(await fs.getInfoAsync(directory)).exists) await fs.makeDirectoryAsync(directory, {
|
|
20
|
+
intermediates: true
|
|
21
|
+
});
|
|
22
|
+
await fs.writeAsStringAsync(pathFor(key), value);
|
|
23
|
+
},
|
|
24
|
+
async removeItem(key) {
|
|
25
|
+
await fs.deleteAsync(pathFor(key), {
|
|
26
|
+
idempotent: true
|
|
27
|
+
});
|
|
28
|
+
},
|
|
29
|
+
async getAllKeys() {
|
|
30
|
+
if (!(await fs.getInfoAsync(directory)).exists) return [];
|
|
31
|
+
return (await fs.readDirectoryAsync(directory)).filter(file => file.endsWith(".json")).flatMap(file => {
|
|
32
|
+
try {
|
|
33
|
+
return [decodeURIComponent(file.slice(0, -5))];
|
|
34
|
+
} catch {
|
|
35
|
+
return [];
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
function defaultNotificationStorage() {
|
|
42
|
+
try {
|
|
43
|
+
const fs = require("expo-file-system/legacy");
|
|
44
|
+
if (fs.documentDirectory && typeof fs.writeAsStringAsync === "function") return {
|
|
45
|
+
storage: createExpoNotificationStorage(fs),
|
|
46
|
+
durable: true
|
|
47
|
+
};
|
|
48
|
+
} catch {/* An app can provide its own storage when Expo FileSystem is absent. */}
|
|
49
|
+
try {
|
|
50
|
+
const module = require("@react-native-async-storage/async-storage");
|
|
51
|
+
const storage = module.default ?? module;
|
|
52
|
+
if (typeof storage.getItem === "function" && typeof storage.setItem === "function" && typeof storage.getAllKeys === "function") return {
|
|
53
|
+
storage,
|
|
54
|
+
durable: true
|
|
55
|
+
};
|
|
56
|
+
} catch {/* Capture remains available in memory. */}
|
|
57
|
+
return {
|
|
58
|
+
durable: false
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createExpoNotificationStorage","fs","documentDirectory","Error","directory","pathFor","key","encodeURIComponent","getItem","path","getInfoAsync","exists","readAsStringAsync","setItem","value","makeDirectoryAsync","intermediates","writeAsStringAsync","removeItem","deleteAsync","idempotent","getAllKeys","readDirectoryAsync","filter","file","endsWith","flatMap","decodeURIComponent","slice","defaultNotificationStorage","require","storage","durable","module","default"],"sourceRoot":"../../src","sources":["storage.ts"],"mappings":";;;;;;;AAYA;AACO,SAASA,6BAA6BA,CAACC,EAA8B,EAAuB;EACjG,IAAI,CAACA,EAAE,CAACC,iBAAiB,EAAE,MAAM,IAAIC,KAAK,CAAC,uDAAuD,CAAC;EACnG,MAAMC,SAAS,GAAGH,EAAE,CAACC,iBAAiB,GAAG,qBAAqB;EAC9D,MAAMG,OAAO,GAAIC,GAAW,IAAKF,SAAS,GAAGG,kBAAkB,CAACD,GAAG,CAAC,GAAG,OAAO;EAC9E,OAAO;IACL,MAAME,OAAOA,CAACF,GAAG,EAAE;MACjB,MAAMG,IAAI,GAAGJ,OAAO,CAACC,GAAG,CAAC;MACzB,OAAO,CAAC,MAAML,EAAE,CAACS,YAAY,CAACD,IAAI,CAAC,EAAEE,MAAM,GAAGV,EAAE,CAACW,iBAAiB,CAACH,IAAI,CAAC,GAAG,IAAI;IACjF,CAAC;IACD,MAAMI,OAAOA,CAACP,GAAG,EAAEQ,KAAK,EAAE;MACxB,IAAI,CAAC,CAAC,MAAMb,EAAE,CAACS,YAAY,CAACN,SAAS,CAAC,EAAEO,MAAM,EAAE,MAAMV,EAAE,CAACc,kBAAkB,CAACX,SAAS,EAAE;QAAEY,aAAa,EAAE;MAAK,CAAC,CAAC;MAC/G,MAAMf,EAAE,CAACgB,kBAAkB,CAACZ,OAAO,CAACC,GAAG,CAAC,EAAEQ,KAAK,CAAC;IAClD,CAAC;IACD,MAAMI,UAAUA,CAACZ,GAAG,EAAE;MAAE,MAAML,EAAE,CAACkB,WAAW,CAACd,OAAO,CAACC,GAAG,CAAC,EAAE;QAAEc,UAAU,EAAE;MAAK,CAAC,CAAC;IAAE,CAAC;IACnF,MAAMC,UAAUA,CAAA,EAAG;MACjB,IAAI,CAAC,CAAC,MAAMpB,EAAE,CAACS,YAAY,CAACN,SAAS,CAAC,EAAEO,MAAM,EAAE,OAAO,EAAE;MACzD,OAAO,CAAC,MAAMV,EAAE,CAACqB,kBAAkB,CAAClB,SAAS,CAAC,EAAEmB,MAAM,CAACC,IAAI,IAAIA,IAAI,CAACC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAACC,OAAO,CAACF,IAAI,IAAI;QACrG,IAAI;UAAE,OAAO,CAACG,kBAAkB,CAACH,IAAI,CAACI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAAE,CAAC,CAAC,MAAM;UAAE,OAAO,EAAE;QAAE;MAC7E,CAAC,CAAC;IACJ;EACF,CAAC;AACH;AAEO,SAASC,0BAA0BA,CAAA,EAAwD;EAChG,IAAI;IACF,MAAM5B,EAAE,GAAG6B,OAAO,CAAC,yBAAyB,CAA+B;IAC3E,IAAI7B,EAAE,CAACC,iBAAiB,IAAI,OAAOD,EAAE,CAACgB,kBAAkB,KAAK,UAAU,EAAE,OAAO;MAAEc,OAAO,EAAE/B,6BAA6B,CAACC,EAAE,CAAC;MAAE+B,OAAO,EAAE;IAAK,CAAC;EAC/I,CAAC,CAAC,MAAM,CAAE;EACV,IAAI;IACF,MAAMC,MAAM,GAAGH,OAAO,CAAC,2CAA2C,CAAC;IACnE,MAAMC,OAAO,GAAGE,MAAM,CAACC,OAAO,IAAID,MAAM;IACxC,IAAI,OAAOF,OAAO,CAACvB,OAAO,KAAK,UAAU,IAAI,OAAOuB,OAAO,CAAClB,OAAO,KAAK,UAAU,IAAI,OAAOkB,OAAO,CAACV,UAAU,KAAK,UAAU,EAAE,OAAO;MAAEU,OAAO;MAAEC,OAAO,EAAE;IAAK,CAAC;EACnK,CAAC,CAAC,MAAM,CAAE;EACV,OAAO;IAAEA,OAAO,EAAE;EAAM,CAAC;AAC3B","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../src","sources":["types.ts"],"mappings":"","ignoreList":[]}
|