@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,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
export function object(value) {
|
|
4
|
+
return value !== null && typeof value === "object" && !Array.isArray(value) ? value : {};
|
|
5
|
+
}
|
|
6
|
+
export function string(value) {
|
|
7
|
+
return typeof value === "string" ? value : null;
|
|
8
|
+
}
|
|
9
|
+
export function json(value) {
|
|
10
|
+
const seen = new WeakSet();
|
|
11
|
+
function visit(v, depth) {
|
|
12
|
+
if (v == null) return null;
|
|
13
|
+
if (typeof v === "string") return v.length > 12000 ? v.slice(0, 12000) + " [truncated]" : v;
|
|
14
|
+
if (typeof v === "boolean") return v;
|
|
15
|
+
if (typeof v === "number") return Number.isFinite(v) ? v : String(v);
|
|
16
|
+
if (typeof v !== "object") return String(v);
|
|
17
|
+
if (seen.has(v)) return "[Circular]";
|
|
18
|
+
if (depth > 12) return "[Depth limit]";
|
|
19
|
+
seen.add(v);
|
|
20
|
+
if (v instanceof Error) return {
|
|
21
|
+
name: v.name,
|
|
22
|
+
message: v.message
|
|
23
|
+
};
|
|
24
|
+
if (v instanceof Date) return Number.isNaN(v.getTime()) ? "[Invalid date]" : v.toISOString();
|
|
25
|
+
if (Array.isArray(v)) return v.slice(0, 200).map(item => visit(item, depth + 1));
|
|
26
|
+
const out = {};
|
|
27
|
+
for (const key of Object.keys(v).slice(0, 200)) {
|
|
28
|
+
try {
|
|
29
|
+
Object.defineProperty(out, key, {
|
|
30
|
+
value: visit(v[key], depth + 1),
|
|
31
|
+
enumerable: true
|
|
32
|
+
});
|
|
33
|
+
} catch {
|
|
34
|
+
out[key] = "[Unreadable]";
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return out;
|
|
38
|
+
}
|
|
39
|
+
return visit(value, 0);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/** UTF-8 size without requiring Buffer or TextEncoder in Hermes. */
|
|
43
|
+
export function byteLength(value) {
|
|
44
|
+
let bytes = 0;
|
|
45
|
+
for (const character of value) {
|
|
46
|
+
const cp = character.codePointAt(0);
|
|
47
|
+
bytes += cp <= 0x7f ? 1 : cp <= 0x7ff ? 2 : cp <= 0xffff ? 3 : 4;
|
|
48
|
+
}
|
|
49
|
+
return bytes;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=json.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["object","value","Array","isArray","string","json","seen","WeakSet","visit","v","depth","length","slice","Number","isFinite","String","has","add","Error","name","message","Date","isNaN","getTime","toISOString","map","item","out","key","Object","keys","defineProperty","enumerable","byteLength","bytes","character","cp","codePointAt"],"sourceRoot":"../../src","sources":["json.ts"],"mappings":";;AAEA,OAAO,SAASA,MAAMA,CAACC,KAAc,EAA2B;EAC9D,OAAOA,KAAK,KAAK,IAAI,IAAI,OAAOA,KAAK,KAAK,QAAQ,IAAI,CAACC,KAAK,CAACC,OAAO,CAACF,KAAK,CAAC,GACvEA,KAAK,GAA8B,CAAC,CAAC;AAC3C;AACA,OAAO,SAASG,MAAMA,CAACH,KAAc,EAAiB;EACpD,OAAO,OAAOA,KAAK,KAAK,QAAQ,GAAGA,KAAK,GAAG,IAAI;AACjD;AACA,OAAO,SAASI,IAAIA,CAACJ,KAAc,EAAQ;EACzC,MAAMK,IAAI,GAAG,IAAIC,OAAO,CAAS,CAAC;EAClC,SAASC,KAAKA,CAACC,CAAU,EAAEC,KAAa,EAAQ;IAC9C,IAAID,CAAC,IAAI,IAAI,EAAE,OAAO,IAAI;IAC1B,IAAI,OAAOA,CAAC,KAAK,QAAQ,EAAE,OAAOA,CAAC,CAACE,MAAM,GAAG,KAAK,GAAGF,CAAC,CAACG,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,cAAc,GAAGH,CAAC;IAC3F,IAAI,OAAOA,CAAC,KAAK,SAAS,EAAE,OAAOA,CAAC;IACpC,IAAI,OAAOA,CAAC,KAAK,QAAQ,EAAE,OAAOI,MAAM,CAACC,QAAQ,CAACL,CAAC,CAAC,GAAGA,CAAC,GAAGM,MAAM,CAACN,CAAC,CAAC;IACpE,IAAI,OAAOA,CAAC,KAAK,QAAQ,EAAE,OAAOM,MAAM,CAACN,CAAC,CAAC;IAC3C,IAAIH,IAAI,CAACU,GAAG,CAACP,CAAC,CAAC,EAAE,OAAO,YAAY;IACpC,IAAIC,KAAK,GAAG,EAAE,EAAE,OAAO,eAAe;IACtCJ,IAAI,CAACW,GAAG,CAACR,CAAC,CAAC;IACX,IAAIA,CAAC,YAAYS,KAAK,EAAE,OAAO;MAAEC,IAAI,EAAEV,CAAC,CAACU,IAAI;MAAEC,OAAO,EAAEX,CAAC,CAACW;IAAQ,CAAC;IACnE,IAAIX,CAAC,YAAYY,IAAI,EAAE,OAAOR,MAAM,CAACS,KAAK,CAACb,CAAC,CAACc,OAAO,CAAC,CAAC,CAAC,GAAG,gBAAgB,GAAGd,CAAC,CAACe,WAAW,CAAC,CAAC;IAC5F,IAAItB,KAAK,CAACC,OAAO,CAACM,CAAC,CAAC,EAAE,OAAOA,CAAC,CAACG,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAACa,GAAG,CAACC,IAAI,IAAIlB,KAAK,CAACkB,IAAI,EAAEhB,KAAK,GAAG,CAAC,CAAC,CAAC;IAChF,MAAMiB,GAAyB,GAAG,CAAC,CAAC;IACpC,KAAK,MAAMC,GAAG,IAAIC,MAAM,CAACC,IAAI,CAACrB,CAAC,CAAC,CAACG,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;MAC9C,IAAI;QAAEiB,MAAM,CAACE,cAAc,CAACJ,GAAG,EAAEC,GAAG,EAAE;UAAE3B,KAAK,EAAEO,KAAK,CAAEC,CAAC,CAA6BmB,GAAG,CAAC,EAAElB,KAAK,GAAG,CAAC,CAAC;UAAEsB,UAAU,EAAE;QAAK,CAAC,CAAC;MAAE,CAAC,CAC5H,MAAM;QAAEL,GAAG,CAACC,GAAG,CAAC,GAAG,cAAc;MAAE;IACrC;IACA,OAAOD,GAAG;EACZ;EACA,OAAOnB,KAAK,CAACP,KAAK,EAAE,CAAC,CAAC;AACxB;;AAEA;AACA,OAAO,SAASgC,UAAUA,CAAChC,KAAa,EAAU;EAChD,IAAIiC,KAAK,GAAG,CAAC;EACb,KAAK,MAAMC,SAAS,IAAIlC,KAAK,EAAE;IAC7B,MAAMmC,EAAE,GAAGD,SAAS,CAACE,WAAW,CAAC,CAAC,CAAE;IACpCH,KAAK,IAAIE,EAAE,IAAI,IAAI,GAAG,CAAC,GAAGA,EAAE,IAAI,KAAK,GAAG,CAAC,GAAGA,EAAE,IAAI,MAAM,GAAG,CAAC,GAAG,CAAC;EAClE;EACA,OAAOF,KAAK;AACd","ignoreList":[]}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { byteLength, object } from "./json";
|
|
4
|
+
export function composeSimulatorPayload(draft) {
|
|
5
|
+
const data = {
|
|
6
|
+
...draft.data,
|
|
7
|
+
__buoyTestId: draft.testId
|
|
8
|
+
};
|
|
9
|
+
const aps = draft.silent ? {
|
|
10
|
+
"content-available": 1
|
|
11
|
+
} : {
|
|
12
|
+
alert: {
|
|
13
|
+
title: draft.title,
|
|
14
|
+
body: draft.body
|
|
15
|
+
},
|
|
16
|
+
sound: "default"
|
|
17
|
+
};
|
|
18
|
+
return JSON.stringify(draft.adapter === "expo" ? {
|
|
19
|
+
aps,
|
|
20
|
+
body: data
|
|
21
|
+
} : {
|
|
22
|
+
...data,
|
|
23
|
+
aps
|
|
24
|
+
}, null, 2);
|
|
25
|
+
}
|
|
26
|
+
export function validateSimulatorPayload(source) {
|
|
27
|
+
const errors = [];
|
|
28
|
+
const warnings = [];
|
|
29
|
+
if (typeof source !== "string") return {
|
|
30
|
+
valid: false,
|
|
31
|
+
bytes: 0,
|
|
32
|
+
errors: ["Provide the APNs payload as JSON text."],
|
|
33
|
+
warnings,
|
|
34
|
+
testId: null
|
|
35
|
+
};
|
|
36
|
+
const bytes = byteLength(source);
|
|
37
|
+
if (bytes > 4096) errors.push(`Payload is ${bytes} bytes. APNs payloads must fit in 4096 UTF-8 bytes.`);
|
|
38
|
+
let parsed;
|
|
39
|
+
try {
|
|
40
|
+
parsed = JSON.parse(source);
|
|
41
|
+
} catch {
|
|
42
|
+
errors.push("Payload is not valid JSON.");
|
|
43
|
+
}
|
|
44
|
+
const value = object(parsed);
|
|
45
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) errors.push("The payload must be a JSON object.");
|
|
46
|
+
if (!value.aps || typeof value.aps !== "object" || Array.isArray(value.aps)) errors.push('The payload needs an "aps" object.');
|
|
47
|
+
const aps = object(value.aps);
|
|
48
|
+
if (aps.alert !== undefined && typeof aps.alert !== "string" && (aps.alert === null || typeof aps.alert !== "object" || Array.isArray(aps.alert))) errors.push("aps.alert must be text or an object.");
|
|
49
|
+
if (aps.badge !== undefined && (!Number.isInteger(aps.badge) || Number(aps.badge) < 0)) errors.push("aps.badge must be a non-negative integer.");
|
|
50
|
+
for (const key of ["content-available", "mutable-content"]) if (aps[key] !== undefined && aps[key] !== 1) errors.push(`aps.${key} must be 1 when present.`);
|
|
51
|
+
if (aps["content-available"] === 1) warnings.push("Background execution depends on app configuration and OS scheduling. A successful send does not prove the task ran.");
|
|
52
|
+
if (aps["mutable-content"] === 1) warnings.push("Use real APNs delivery to verify notification service extensions.");
|
|
53
|
+
if (value.data !== undefined && value.body === undefined) warnings.push("Expo on iOS reads custom data from a top-level body object. This raw payload will be sent unchanged.");
|
|
54
|
+
const testId = object(value.body).__buoyTestId ?? value.__buoyTestId;
|
|
55
|
+
return {
|
|
56
|
+
valid: errors.length === 0,
|
|
57
|
+
bytes,
|
|
58
|
+
errors,
|
|
59
|
+
warnings,
|
|
60
|
+
testId: typeof testId === "string" ? testId : null
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=payload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["byteLength","object","composeSimulatorPayload","draft","data","__buoyTestId","testId","aps","silent","alert","title","body","sound","JSON","stringify","adapter","validateSimulatorPayload","source","errors","warnings","valid","bytes","push","parsed","parse","value","Array","isArray","undefined","badge","Number","isInteger","key","length"],"sourceRoot":"../../src","sources":["payload.ts"],"mappings":";;AAAA,SAASA,UAAU,EAAEC,MAAM,QAAQ,QAAQ;AAG3C,OAAO,SAASC,uBAAuBA,CAACC,KAAwB,EAAU;EACxE,MAAMC,IAAI,GAAG;IAAE,GAAGD,KAAK,CAACC,IAAI;IAAEC,YAAY,EAAEF,KAAK,CAACG;EAAO,CAAC;EAC1D,MAAMC,GAAG,GAAGJ,KAAK,CAACK,MAAM,GAAG;IAAE,mBAAmB,EAAE;EAAE,CAAC,GAAG;IAAEC,KAAK,EAAE;MAAEC,KAAK,EAAEP,KAAK,CAACO,KAAK;MAAEC,IAAI,EAAER,KAAK,CAACQ;IAAK,CAAC;IAAEC,KAAK,EAAE;EAAU,CAAC;EAC7H,OAAOC,IAAI,CAACC,SAAS,CAACX,KAAK,CAACY,OAAO,KAAK,MAAM,GAAG;IAAER,GAAG;IAAEI,IAAI,EAAEP;EAAK,CAAC,GAAG;IAAE,GAAGA,IAAI;IAAEG;EAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;AACnG;AAEA,OAAO,SAASS,wBAAwBA,CAACC,MAAe,EAAqB;EAC3E,MAAMC,MAAgB,GAAG,EAAE;EAC3B,MAAMC,QAAkB,GAAG,EAAE;EAC7B,IAAI,OAAOF,MAAM,KAAK,QAAQ,EAAE,OAAO;IAAEG,KAAK,EAAE,KAAK;IAAEC,KAAK,EAAE,CAAC;IAAEH,MAAM,EAAE,CAAC,wCAAwC,CAAC;IAAEC,QAAQ;IAAEb,MAAM,EAAE;EAAK,CAAC;EAC7I,MAAMe,KAAK,GAAGrB,UAAU,CAACiB,MAAM,CAAC;EAChC,IAAII,KAAK,GAAG,IAAI,EAAEH,MAAM,CAACI,IAAI,CAAC,cAAcD,KAAK,qDAAqD,CAAC;EACvG,IAAIE,MAAe;EACnB,IAAI;IAAEA,MAAM,GAAGV,IAAI,CAACW,KAAK,CAACP,MAAM,CAAC;EAAE,CAAC,CAAC,MAAM;IAAEC,MAAM,CAACI,IAAI,CAAC,4BAA4B,CAAC;EAAE;EACxF,MAAMG,KAAK,GAAGxB,MAAM,CAACsB,MAAM,CAAC;EAC5B,IAAI,CAACA,MAAM,IAAI,OAAOA,MAAM,KAAK,QAAQ,IAAIG,KAAK,CAACC,OAAO,CAACJ,MAAM,CAAC,EAAEL,MAAM,CAACI,IAAI,CAAC,oCAAoC,CAAC;EACrH,IAAI,CAACG,KAAK,CAAClB,GAAG,IAAI,OAAOkB,KAAK,CAAClB,GAAG,KAAK,QAAQ,IAAImB,KAAK,CAACC,OAAO,CAACF,KAAK,CAAClB,GAAG,CAAC,EAAEW,MAAM,CAACI,IAAI,CAAC,oCAAoC,CAAC;EAC9H,MAAMf,GAAG,GAAGN,MAAM,CAACwB,KAAK,CAAClB,GAAG,CAAC;EAC7B,IAAIA,GAAG,CAACE,KAAK,KAAKmB,SAAS,IAAI,OAAOrB,GAAG,CAACE,KAAK,KAAK,QAAQ,KAAKF,GAAG,CAACE,KAAK,KAAK,IAAI,IAAI,OAAOF,GAAG,CAACE,KAAK,KAAK,QAAQ,IAAIiB,KAAK,CAACC,OAAO,CAACpB,GAAG,CAACE,KAAK,CAAC,CAAC,EAAES,MAAM,CAACI,IAAI,CAAC,sCAAsC,CAAC;EACtM,IAAIf,GAAG,CAACsB,KAAK,KAAKD,SAAS,KAAK,CAACE,MAAM,CAACC,SAAS,CAACxB,GAAG,CAACsB,KAAK,CAAC,IAAIC,MAAM,CAACvB,GAAG,CAACsB,KAAK,CAAC,GAAG,CAAC,CAAC,EAAEX,MAAM,CAACI,IAAI,CAAC,2CAA2C,CAAC;EAChJ,KAAK,MAAMU,GAAG,IAAI,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,EAAE,IAAIzB,GAAG,CAACyB,GAAG,CAAC,KAAKJ,SAAS,IAAIrB,GAAG,CAACyB,GAAG,CAAC,KAAK,CAAC,EAAEd,MAAM,CAACI,IAAI,CAAC,OAAOU,GAAG,0BAA0B,CAAC;EAC3J,IAAIzB,GAAG,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAEY,QAAQ,CAACG,IAAI,CAAC,qHAAqH,CAAC;EACxK,IAAIf,GAAG,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAEY,QAAQ,CAACG,IAAI,CAAC,mEAAmE,CAAC;EACpH,IAAIG,KAAK,CAACrB,IAAI,KAAKwB,SAAS,IAAIH,KAAK,CAACd,IAAI,KAAKiB,SAAS,EAAET,QAAQ,CAACG,IAAI,CAAC,sGAAsG,CAAC;EAC/K,MAAMhB,MAAM,GAAGL,MAAM,CAACwB,KAAK,CAACd,IAAI,CAAC,CAACN,YAAY,IAAIoB,KAAK,CAACpB,YAAY;EACpE,OAAO;IAAEe,KAAK,EAAEF,MAAM,CAACe,MAAM,KAAK,CAAC;IAAEZ,KAAK;IAAEH,MAAM;IAAEC,QAAQ;IAAEb,MAAM,EAAE,OAAOA,MAAM,KAAK,QAAQ,GAAGA,MAAM,GAAG;EAAK,CAAC;AACpH","ignoreList":[]}
|
|
@@ -0,0 +1,50 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","useSyncExternalStore","createToolFactory","defineToolPreset","JsModal","NotificationsIcon","NotificationToolView","notificationSyncAdapter","jsx","_jsx","NotificationsModal","props","snapshot","subscribe","getSnapshot","renderShell","header","body","persistenceKey","variant","showToggleButton","customContent","enablePersistence","initialMode","disableScrollWrapper","children","onAction","action","params","fn","actions","Error","notificationToolPreset","id","name","description","slot","icon","size","color","component","createNotificationTool"],"sourceRoot":"../../src","sources":["preset.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,oBAAoB,QAAQ,OAAO;AACnD,SACEC,iBAAiB,EACjBC,gBAAgB,EAChBC,OAAO,EACPC,iBAAiB,QACZ,oBAAoB;AAE3B,SAASC,oBAAoB,QAAQ,mCAAmC;AACxE,SAASC,uBAAuB,QAAQ,WAAW;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAEpD,OAAO,SAASC,kBAAkBA,CAACC,KAKlC,EAAE;EACD,MAAMC,QAAQ,GAAGX,oBAAoB,CACnCM,uBAAuB,CAACM,SAAS,EACjCN,uBAAuB,CAACO,WAC1B,CAAC;EACD,oBACEL,IAAA,CAACH,oBAAoB;IACnBM,QAAQ,EAAEA,QAAS;IACnBG,WAAW,EAAEA,CAAC;MAAEC,MAAM;MAAEC;IAAK,CAAC,kBAC5BR,IAAA,CAACL,OAAO;MAAA,GACFO,KAAK;MACTO,cAAc,EAAEP,KAAK,CAACO,cAAc,IAAI,oBAAqB;MAC7DC,OAAO,EAAC,OAAO;MACfH,MAAM,EAAE;QAAEI,gBAAgB,EAAE,IAAI;QAAEC,aAAa,EAAEL;MAAO,CAAE;MAC1DM,iBAAiB;MACjBC,WAAW,EAAC,aAAa;MACzBC,oBAAoB;MAAAC,QAAA,EAEnBR;IAAI,CACE,CACT;IACFS,QAAQ,EAAE,MAAAA,CAAOC,MAAM,EAAEC,MAAM,KAAK;MAClC,MAAMC,EAAE,GACNtB,uBAAuB,CAACuB,OAAO,CAI/BH,MAAM,CAAC;MACT,IAAI,CAACE,EAAE,EAAE,MAAM,IAAIE,KAAK,CAAC,0CAA0C,CAAC;MACpE,OAAOF,EAAE,CAACD,MAAM,CAAC;IACnB;EAAE,CACH,CAAC;AAEN;AACA,OAAO,MAAMI,sBAAsB,GAAG7B,gBAAgB,CAAC;EACrD8B,EAAE,EAAE,oBAAoB;EACxBC,IAAI,EAAE,eAAe;EACrBC,WAAW,EAAE,2DAA2D;EACxEC,IAAI,EAAE,MAAe;EACrBC,IAAI,EAAEA,CAAC;IAAEC,IAAI;IAAEC;EAAwC,CAAC,kBACtD9B,IAAA,CAACJ,iBAAiB;IAACiC,IAAI,EAAEA,IAAK;IAACC,KAAK,EAAEA;EAAM,CAAE,CAC/C;EACDC,SAAS,EAAE9B;AACb,CAAC,CAAC;AACF,OAAO,MAAM+B,sBAAsB,GAAGvC,iBAAiB,CAAC8B,sBAAsB,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,14 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["normalizePreviewAppearance","value","undefined","result","appName","trim","slice","iconUri","length","test","key","Object","keys"],"sourceRoot":"../../src","sources":["preview.ts"],"mappings":";;AAEA;AACA,OAAO,SAASA,0BAA0BA,CACxCC,KAAqC,EACM;EAC3C,IAAI,CAACA,KAAK,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE,OAAOC,SAAS;EACzD,MAAMC,MAAqC,GAAG,CAAC,CAAC;EAChD,IAAI,OAAOF,KAAK,CAACG,OAAO,KAAK,QAAQ,EACnCD,MAAM,CAACC,OAAO,GAAGH,KAAK,CAACG,OAAO,CAACC,IAAI,CAAC,CAAC,CAACC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;EACpD,IACE,OAAOL,KAAK,CAACM,OAAO,KAAK,QAAQ,IACjCN,KAAK,CAACM,OAAO,CAACC,MAAM,IAAI,KAAK,IAC7B,2DAA2D,CAACC,IAAI,CAC9DR,KAAK,CAACM,OACR,CAAC,EAEDJ,MAAM,CAACI,OAAO,GAAGN,KAAK,CAACM,OAAO;EAChC,KAAK,MAAMG,GAAG,IAAI,CAAC,iBAAiB,EAAE,WAAW,CAAC,EAAW;IAC3D,IAAI,OAAOT,KAAK,CAACS,GAAG,CAAC,KAAK,QAAQ,IAAI,iBAAiB,CAACD,IAAI,CAACR,KAAK,CAACS,GAAG,CAAE,CAAC,EACvEP,MAAM,CAACO,GAAG,CAAC,GAAGT,KAAK,CAACS,GAAG,CAAC;EAC5B;EACA,OAAOC,MAAM,CAACC,IAAI,CAACT,MAAM,CAAC,CAACK,MAAM,GAAGL,MAAM,GAAGD,SAAS;AACxD","ignoreList":[]}
|
|
@@ -0,0 +1,332 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["byteLength","json","object","string","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","removeItem","record","id","kind","capturedAt","push","a","b","localeCompare","prune","autoStart","startedAt","setItem","stringify","setCaptureSession","durationMs","trim","length","metadata","observedAppState","appState","clean","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","expoMetadata","notification","request","content","payload","trigger","data","body","identifier","__buoyTestId","responseKey","date","userText"],"sourceRoot":"../../src","sources":["recorder.ts"],"mappings":"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","ignoreList":[]}
|