@burdenoff/fe-libs 2026.823.1 → 2026.825.1
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/dist/chrome/index.d.ts +1 -0
- package/dist/chrome/index.d.ts.map +1 -1
- package/dist/chrome/nativeTopBarTitle.d.ts +15 -0
- package/dist/chrome/nativeTopBarTitle.d.ts.map +1 -0
- package/dist/chrome/nativeTopBarTitle.js +22 -0
- package/dist/chrome.js +2 -1
- package/dist/shared/hooks/index.d.ts +4 -0
- package/dist/shared/hooks/index.d.ts.map +1 -1
- package/dist/shared/hooks/usePushDeviceRegistration.d.ts +10 -0
- package/dist/shared/hooks/usePushDeviceRegistration.d.ts.map +1 -0
- package/dist/shared/hooks/usePushDeviceRegistration.js +54 -0
- package/dist/shared/native/push-registration.d.ts +124 -0
- package/dist/shared/native/push-registration.d.ts.map +1 -0
- package/dist/shared/native/push-registration.js +120 -0
- package/dist/shared/native/types.d.ts +11 -1
- package/dist/shared/native/types.d.ts.map +1 -1
- package/dist/shared-hooks.js +10 -8
- package/dist/shared.js +23 -21
- package/dist/shell-native/capacitor-config.d.ts.map +1 -1
- package/dist/shell-native/capacitor-config.js +0 -1
- package/dist/shell-native/index.d.ts +3 -2
- package/dist/shell-native/index.d.ts.map +1 -1
- package/dist/shell-native/push.d.ts +10 -0
- package/dist/shell-native/push.d.ts.map +1 -1
- package/dist/shell-native/push.js +27 -22
- package/dist/shell-native/service-worker.d.ts +9 -1
- package/dist/shell-native/service-worker.d.ts.map +1 -1
- package/dist/shell-native/service-worker.js +102 -1
- package/dist/shell-native/types.d.ts +21 -9
- package/dist/shell-native/types.d.ts.map +1 -1
- package/dist/shell-native/web-manifest.d.ts +21 -0
- package/dist/shell-native/web-manifest.d.ts.map +1 -1
- package/dist/shell-native/web-manifest.js +4 -1
- package/dist/shell-native/web-push.d.ts +74 -0
- package/dist/shell-native/web-push.d.ts.map +1 -0
- package/dist/shell-native/web-push.js +106 -0
- package/dist/shell-native.js +10 -9
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capacitor-config.d.ts","sourceRoot":"","sources":["../../src/shell-native/capacitor-config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,oEAAoE;AACpE,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE;QACP,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;QAC3B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;IACF,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAClD,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAuBD,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,YAAY,EACjB,SAAS,GAAE,OAAO,CAAC,mBAAmB,CAAM,GAC3C,mBAAmB,
|
|
1
|
+
{"version":3,"file":"capacitor-config.d.ts","sourceRoot":"","sources":["../../src/shell-native/capacitor-config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,oEAAoE;AACpE,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE;QACP,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;QAC3B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;IACF,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAClD,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAuBD,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,YAAY,EACjB,SAAS,GAAE,OAAO,CAAC,mBAAmB,CAAM,GAC3C,mBAAmB,CAiHrB"}
|
|
@@ -44,11 +44,12 @@ export { configureKeyboard, keyboardHandlers, KEYBOARD_HEIGHT_CSS_VAR, KEYBOARD_
|
|
|
44
44
|
export { getLastNetworkStatus, installNetworkListener, NETWORK_STATUS_EVENT } from './network';
|
|
45
45
|
export { applyStatusBarTheme, DARK_FAMILY_THEMES, installStatusBarThemeListener, isDarkThemeName, resolveDocumentIsDark, statusBarDetailIsDark, type StatusBarThemeDetail, } from './system-bars';
|
|
46
46
|
export { notifyOtaReady } from './ota';
|
|
47
|
-
export { installPushNotifications, requestPushPermission, PUSH_TOKEN_EVENT } from './push';
|
|
47
|
+
export { emitPushToken, installPushNotifications, requestPushPermission, PUSH_TOKEN_EVENT, } from './push';
|
|
48
|
+
export { getWebPushManifestConfig, getWebPushSubscription, installWebPushMessageBridge, isWebPushSupported, requestWebPushPermission, resetWebPushForTests, resolveVapidPublicKey, serializeWebPushSubscription, subscribeWebPush, unsubscribeWebPush, urlBase64ToUint8Array, SW_NOTIFICATION_CLICK_MESSAGE, SW_PUSH_SUBSCRIPTION_CHANGE_MESSAGE, WEB_PUSH_MANIFEST_KEY, type WebPushManifestConfig, type WebPushSubscribeOptions, } from './web-push';
|
|
48
49
|
export { installPwa, installPwaPrompt, isPwaEligibleHost, resetPwaForTests, PWA_INSTALLED_EVENT, PWA_INSTALL_AVAILABLE_EVENT, PWA_UPDATE_READY_EVENT, } from './pwa';
|
|
49
50
|
export { configureElectronGlobalKey, getDesktopBridge, getElectronGlobalKey, getLegacyElectronBridge, isDesktopShell, } from './desktop-bridge';
|
|
50
51
|
export { defineCapacitorConfig, type CapacitorConfigLike } from './capacitor-config';
|
|
51
|
-
export { defineWebManifest, type WebManifestIcon, type WebManifestLike, type WebManifestShortcut, } from './web-manifest';
|
|
52
|
+
export { defineWebManifest, type WebManifestIcon, type WebManifestLike, type WebManifestPushConfig, type WebManifestShortcut, } from './web-manifest';
|
|
52
53
|
export { renderServiceWorker, SERVICE_WORKER_TEMPLATE } from './service-worker';
|
|
53
54
|
export type { AuthInterceptOptions, BackButtonHandlers, BeforeInstallPromptEventLike, BootNativeShellOptions, CapacitorListenerHandleLike, CapacitorUpdaterLike, DeepLinkDetail, LegacyElectronBridge, MobileRuntimeHooks, NativeConfig, NativePreviewMode, NativeShellHandle, NativeShellPlatform, NetworkHooks, NetworkStatusDetail, OptionalPluginLoaders, PushActionPerformedLike, PushNotificationSchemaLike, PushNotificationsLike, PushNotificationsLoader, PushOptions, PushPermissionStateLike, PushTokenLike, PwaOptions, SplashOptions, UpdaterLoader, } from './types';
|
|
54
55
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/shell-native/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAGH,OAAO,EAAE,eAAe,EAAE,4BAA4B,EAAE,MAAM,QAAQ,CAAC;AAGvE,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,UAAU,EACV,YAAY,EACZ,qBAAqB,GACtB,MAAM,UAAU,CAAC;AAGlB,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,sBAAsB,EACtB,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EACL,wBAAwB,EACxB,iBAAiB,EACjB,gBAAgB,EAChB,uBAAuB,EACvB,eAAe,EACf,oBAAoB,GACrB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EACpB,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,WAAW,CAAC;AAGnB,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,wBAAwB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACrF,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAG9C,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EACL,+BAA+B,EAC/B,oCAAoC,GACrC,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,+BAA+B,EAC/B,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAC/F,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,6BAA6B,EAC7B,eAAe,EACf,qBAAqB,EACrB,qBAAqB,EACrB,KAAK,oBAAoB,GAC1B,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/shell-native/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,15 @@
|
|
|
1
|
+
import { PushTokenEventDetail } from '../shared/native/types';
|
|
1
2
|
import { PushNotificationsLoader, PushOptions } from './types';
|
|
2
3
|
export declare const PUSH_TOKEN_EVENT = "burdenoff:pushToken";
|
|
4
|
+
/**
|
|
5
|
+
* Publish a push token to the rest of the app: `window.__burdenoffPushToken`
|
|
6
|
+
* (so a consumer mounting later can replay it — the OS `registration` callback
|
|
7
|
+
* fires during boot, before React exists) plus the `burdenoff:pushToken` event.
|
|
8
|
+
*
|
|
9
|
+
* Shared with `web-push.ts` so a browser subscription and a native token reach
|
|
10
|
+
* `installPushDeviceRegistration()` through exactly one code path.
|
|
11
|
+
*/
|
|
12
|
+
export declare function emitPushToken(value: string, platform: PushTokenEventDetail['platform']): void;
|
|
3
13
|
/**
|
|
4
14
|
* Install push listeners (registration → dispatch `burdenoff:pushToken` + set
|
|
5
15
|
* `window.__burdenoffPushToken`; notification tap → deep-link navigator).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../src/shell-native/push.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAGV,uBAAuB,EACvB,WAAW,EACZ,MAAM,SAAS,CAAC;AAEjB,eAAO,MAAM,gBAAgB,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../src/shell-native/push.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,KAAK,EAGV,uBAAuB,EACvB,WAAW,EACZ,MAAM,SAAS,CAAC;AAEjB,eAAO,MAAM,gBAAgB,wBAAwB,CAAC;AAEtD;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,oBAAoB,CAAC,UAAU,CAAC,GAAG,IAAI,CAK7F;AAkCD;;;;GAIG;AACH,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,uBAAuB,EAC/B,OAAO,GAAE,IAAI,CAAC,WAAW,EAAE,SAAS,GAAG,sBAAsB,GAAG,wBAAwB,CAAM,GAC7F,OAAO,CAAC,IAAI,CAAC,CAoCf;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,OAAO,CAAC,CAc9D"}
|
|
@@ -1,18 +1,27 @@
|
|
|
1
1
|
import { getNativePlatform as e, isRealNativePlatform as t } from "./platform.js";
|
|
2
2
|
import { navigateDeepLinkPath as n } from "./deep-link.js";
|
|
3
3
|
//#region src/shell-native/push.ts
|
|
4
|
-
var r = "burdenoff:pushToken"
|
|
5
|
-
|
|
6
|
-
if (
|
|
7
|
-
|
|
4
|
+
var r = "burdenoff:pushToken";
|
|
5
|
+
function i(e, t) {
|
|
6
|
+
if (typeof window > "u") return;
|
|
7
|
+
let n = {
|
|
8
|
+
value: e,
|
|
9
|
+
platform: t
|
|
10
|
+
};
|
|
11
|
+
window.__burdenoffPushToken = n, window.dispatchEvent(new CustomEvent(r, { detail: n }));
|
|
12
|
+
}
|
|
13
|
+
var a = null, o = null;
|
|
14
|
+
async function s() {
|
|
15
|
+
if (a) return a;
|
|
16
|
+
if (!o || !t()) return null;
|
|
8
17
|
try {
|
|
9
|
-
|
|
18
|
+
a = (await o()).PushNotifications ?? null;
|
|
10
19
|
} catch {
|
|
11
|
-
|
|
20
|
+
a = null;
|
|
12
21
|
}
|
|
13
|
-
return
|
|
22
|
+
return a;
|
|
14
23
|
}
|
|
15
|
-
function
|
|
24
|
+
function c(e) {
|
|
16
25
|
let t = e.notification.data;
|
|
17
26
|
if (!t || typeof t != "object") return null;
|
|
18
27
|
let n = t.route;
|
|
@@ -26,30 +35,26 @@ function s(e) {
|
|
|
26
35
|
}
|
|
27
36
|
return null;
|
|
28
37
|
}
|
|
29
|
-
async function
|
|
30
|
-
|
|
31
|
-
let l = await
|
|
38
|
+
async function l(t, r = {}) {
|
|
39
|
+
o !== t && (a = null, o = t);
|
|
40
|
+
let l = await s();
|
|
32
41
|
if (!l) return;
|
|
33
42
|
let u = e();
|
|
34
43
|
if (u !== "web") try {
|
|
35
44
|
await l.addListener("registration", (e) => {
|
|
36
|
-
|
|
37
|
-
value: e.value,
|
|
38
|
-
platform: u
|
|
39
|
-
};
|
|
40
|
-
window.__burdenoffPushToken = t, window.dispatchEvent(new CustomEvent(r, { detail: t })), c.onToken?.(e.value, u);
|
|
45
|
+
i(e.value, u), r.onToken?.(e.value, u);
|
|
41
46
|
}), await l.addListener("registrationError", (e) => {
|
|
42
47
|
console.debug("[shell-native] Push registration error:", e.error);
|
|
43
48
|
}), await l.addListener("pushNotificationReceived", (e) => {
|
|
44
|
-
|
|
49
|
+
r.onNotificationReceived?.(e);
|
|
45
50
|
}), await l.addListener("pushNotificationActionPerformed", (e) => {
|
|
46
|
-
let t =
|
|
47
|
-
t && n(t),
|
|
51
|
+
let t = c(e);
|
|
52
|
+
t && n(t), r.onNotificationAction?.(e);
|
|
48
53
|
}), (await l.checkPermissions()).receive === "granted" && await l.register();
|
|
49
54
|
} catch {}
|
|
50
55
|
}
|
|
51
|
-
async function
|
|
52
|
-
let e = await
|
|
56
|
+
async function u() {
|
|
57
|
+
let e = await s();
|
|
53
58
|
if (!e) return !1;
|
|
54
59
|
try {
|
|
55
60
|
let t = await e.checkPermissions();
|
|
@@ -59,4 +64,4 @@ async function l() {
|
|
|
59
64
|
}
|
|
60
65
|
}
|
|
61
66
|
//#endregion
|
|
62
|
-
export { r as PUSH_TOKEN_EVENT,
|
|
67
|
+
export { r as PUSH_TOKEN_EVENT, i as emitPushToken, l as installPushNotifications, u as requestPushPermission };
|
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
import { NativeConfig } from './types';
|
|
2
2
|
export declare const SERVICE_WORKER_TEMPLATE: string;
|
|
3
|
-
/**
|
|
3
|
+
/**
|
|
4
|
+
* Render the canonical sw.js for a product (`version` defaults to `v1`).
|
|
5
|
+
*
|
|
6
|
+
* NOTE ON `version`: bumping it invalidates every cache on activate, and it is
|
|
7
|
+
* also what forces an already-installed service worker to be replaced promptly.
|
|
8
|
+
* A push/notificationclick change only reaches installed clients through the
|
|
9
|
+
* hourly `registration.update()` poll unless the version is bumped
|
|
10
|
+
* deliberately, so bump it in the release that enables push.
|
|
11
|
+
*/
|
|
4
12
|
export declare function renderServiceWorker(cfg: NativeConfig, version?: string): string;
|
|
5
13
|
//# sourceMappingURL=service-worker.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-worker.d.ts","sourceRoot":"","sources":["../../src/shell-native/service-worker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,eAAO,MAAM,uBAAuB,
|
|
1
|
+
{"version":3,"file":"service-worker.d.ts","sourceRoot":"","sources":["../../src/shell-native/service-worker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,eAAO,MAAM,uBAAuB,QA8OnC,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,YAAY,EAAE,OAAO,SAAO,GAAG,MAAM,CAI7E"}
|
|
@@ -136,9 +136,110 @@ self.addEventListener('message', (event) => {
|
|
|
136
136
|
self.skipWaiting();
|
|
137
137
|
}
|
|
138
138
|
});
|
|
139
|
+
|
|
140
|
+
// ---------------------------------------------------------------------------
|
|
141
|
+
// Push notifications.
|
|
142
|
+
//
|
|
143
|
+
// The deep-link contract is shared with the native path (fe-libs
|
|
144
|
+
// shell-native/push.ts): an app-relative "data.route" wins, "data.url" is
|
|
145
|
+
// reduced to pathname + search + hash, and anything else just opens the app.
|
|
146
|
+
// A push MUST show a notification -- "userVisibleOnly" is mandatory when
|
|
147
|
+
// subscribing and browsers revoke the subscription of an origin that pushes
|
|
148
|
+
// silently.
|
|
149
|
+
// ---------------------------------------------------------------------------
|
|
150
|
+
|
|
151
|
+
function pushNotificationRoute(data) {
|
|
152
|
+
if (!data || typeof data !== 'object') return null;
|
|
153
|
+
if (typeof data.route === 'string' && data.route.startsWith('/')) return data.route;
|
|
154
|
+
if (typeof data.url === 'string') {
|
|
155
|
+
try {
|
|
156
|
+
const parsed = new URL(data.url, self.location.origin);
|
|
157
|
+
return (parsed.pathname || '/') + parsed.search + parsed.hash;
|
|
158
|
+
} catch (_err) {
|
|
159
|
+
if (data.url.startsWith('/')) return data.url;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return null;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
function readPushPayload(event) {
|
|
166
|
+
if (!event.data) return {};
|
|
167
|
+
try {
|
|
168
|
+
return event.data.json() || {};
|
|
169
|
+
} catch (_err) {
|
|
170
|
+
try {
|
|
171
|
+
return { notification: { body: event.data.text() } };
|
|
172
|
+
} catch (_textErr) {
|
|
173
|
+
return {};
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
self.addEventListener('push', (event) => {
|
|
179
|
+
const payload = readPushPayload(event);
|
|
180
|
+
const notification = payload.notification || {};
|
|
181
|
+
const data = payload.data || notification.data || {};
|
|
182
|
+
const title = notification.title || payload.title || '{{DISPLAY_NAME}}';
|
|
183
|
+
const options = {
|
|
184
|
+
body: notification.body || payload.body || '',
|
|
185
|
+
icon: notification.icon || '/icons/icon-192x192.png',
|
|
186
|
+
badge: '/icons/icon-96x96.png',
|
|
187
|
+
data: {
|
|
188
|
+
route: pushNotificationRoute(data),
|
|
189
|
+
notificationId: data.notificationId || null,
|
|
190
|
+
payload: data,
|
|
191
|
+
},
|
|
192
|
+
};
|
|
193
|
+
const tag = notification.tag || data.notificationId;
|
|
194
|
+
if (tag) options.tag = tag;
|
|
195
|
+
event.waitUntil(self.registration.showNotification(title, options));
|
|
196
|
+
});
|
|
197
|
+
|
|
198
|
+
self.addEventListener('notificationclick', (event) => {
|
|
199
|
+
event.notification.close();
|
|
200
|
+
const data = event.notification.data || {};
|
|
201
|
+
const route = typeof data.route === 'string' && data.route.startsWith('/') ? data.route : '/';
|
|
202
|
+
event.waitUntil(
|
|
203
|
+
self.clients.matchAll({ type: 'window', includeUncontrolled: true }).then((clients) => {
|
|
204
|
+
for (const client of clients) {
|
|
205
|
+
if (typeof client.focus !== 'function') continue;
|
|
206
|
+
// The app is already open: hand the route to the running router instead
|
|
207
|
+
// of reloading the SPA (openWindow would boot a second instance).
|
|
208
|
+
client.postMessage({ type: 'BURDENOFF_NOTIFICATION_CLICK', route: route, data: data });
|
|
209
|
+
return client.focus();
|
|
210
|
+
}
|
|
211
|
+
return self.clients.openWindow(route);
|
|
212
|
+
})
|
|
213
|
+
);
|
|
214
|
+
});
|
|
215
|
+
|
|
216
|
+
self.addEventListener('pushsubscriptionchange', (event) => {
|
|
217
|
+
const previous = event.oldSubscription || null;
|
|
218
|
+
const applicationServerKey =
|
|
219
|
+
previous && previous.options ? previous.options.applicationServerKey : null;
|
|
220
|
+
if (!applicationServerKey) return;
|
|
221
|
+
// Re-subscribe with the SAME application server key (a different key would
|
|
222
|
+
// produce a subscription the sender's project cannot push to), then tell the
|
|
223
|
+
// page: only it holds the access token "registerDeviceToken" needs.
|
|
224
|
+
event.waitUntil(
|
|
225
|
+
self.registration.pushManager
|
|
226
|
+
.subscribe({ userVisibleOnly: true, applicationServerKey: applicationServerKey })
|
|
227
|
+
.then((subscription) =>
|
|
228
|
+
self.clients.matchAll({ type: 'window', includeUncontrolled: true }).then((clients) => {
|
|
229
|
+
for (const client of clients) {
|
|
230
|
+
client.postMessage({
|
|
231
|
+
type: 'BURDENOFF_PUSH_SUBSCRIPTION_CHANGE',
|
|
232
|
+
subscription: subscription.toJSON(),
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
})
|
|
236
|
+
)
|
|
237
|
+
.catch(() => undefined)
|
|
238
|
+
);
|
|
239
|
+
});
|
|
139
240
|
`;
|
|
140
241
|
function t(t, n = "v1") {
|
|
141
|
-
return e.replaceAll("{{SLUG}}", t.slug).replaceAll("{{CACHE_VERSION}}", n);
|
|
242
|
+
return e.replaceAll("{{SLUG}}", t.slug).replaceAll("{{DISPLAY_NAME}}", t.displayName).replaceAll("{{CACHE_VERSION}}", n);
|
|
142
243
|
}
|
|
143
244
|
//#endregion
|
|
144
245
|
export { e as SERVICE_WORKER_TEMPLATE, t as renderServiceWorker };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { NativePreviewMode } from '../shared/native/types';
|
|
2
2
|
export type { NativePreviewMode } from '../shared/native/types';
|
|
3
3
|
/** Capacitor platform string, possibly overridden by a presentation preview. */
|
|
4
|
-
export type NativeShellPlatform =
|
|
4
|
+
export type NativeShellPlatform = 'ios' | 'android' | 'web';
|
|
5
5
|
/**
|
|
6
6
|
* Per-shell native configuration — the shape of each product's `native.config.json`.
|
|
7
7
|
*
|
|
@@ -65,12 +65,24 @@ export interface NativeConfig {
|
|
|
65
65
|
status?: string;
|
|
66
66
|
};
|
|
67
67
|
push?: boolean;
|
|
68
|
+
/**
|
|
69
|
+
* Browser Web Push configuration for this product. Supplied by the fleet
|
|
70
|
+
* generator from the confidential product -> Firebase project map; stamped
|
|
71
|
+
* into `public/manifest.json` (see `defineWebManifest`) because the service
|
|
72
|
+
* worker cannot read build variables. Public key only — never a private one.
|
|
73
|
+
*/
|
|
74
|
+
webPush?: {
|
|
75
|
+
/** VAPID application-server PUBLIC key, base64url. Client-safe. */
|
|
76
|
+
vapidPublicKey: string;
|
|
77
|
+
/** Firebase project this product routes through, e.g. `burdenoff-push-4`. */
|
|
78
|
+
fcmProject?: string;
|
|
79
|
+
};
|
|
68
80
|
ota?: {
|
|
69
81
|
/** CapGo mobile app id (usually the Capacitor appId). */
|
|
70
82
|
mobileAppId?: string;
|
|
71
83
|
channel?: string;
|
|
72
84
|
};
|
|
73
|
-
orientation?:
|
|
85
|
+
orientation?: 'portrait' | 'any';
|
|
74
86
|
devServerPort?: number;
|
|
75
87
|
/** Manifest `background_color` (splash + PWA). Falls back to `brandColor`. */
|
|
76
88
|
backgroundColor?: string;
|
|
@@ -161,7 +173,7 @@ export interface PushActionPerformedLike {
|
|
|
161
173
|
actionId?: string;
|
|
162
174
|
notification: PushNotificationSchemaLike;
|
|
163
175
|
}
|
|
164
|
-
export type PushPermissionStateLike =
|
|
176
|
+
export type PushPermissionStateLike = 'prompt' | 'prompt-with-rationale' | 'granted' | 'denied';
|
|
165
177
|
/** Structural subset of `@capacitor/push-notifications`' `PushNotifications`. */
|
|
166
178
|
export interface PushNotificationsLike {
|
|
167
179
|
checkPermissions(): Promise<{
|
|
@@ -171,12 +183,12 @@ export interface PushNotificationsLike {
|
|
|
171
183
|
receive: PushPermissionStateLike;
|
|
172
184
|
}>;
|
|
173
185
|
register(): Promise<void>;
|
|
174
|
-
addListener(eventName:
|
|
175
|
-
addListener(eventName:
|
|
186
|
+
addListener(eventName: 'registration', listener: (token: PushTokenLike) => void): Promise<CapacitorListenerHandleLike>;
|
|
187
|
+
addListener(eventName: 'registrationError', listener: (error: {
|
|
176
188
|
error: string;
|
|
177
189
|
}) => void): Promise<CapacitorListenerHandleLike>;
|
|
178
|
-
addListener(eventName:
|
|
179
|
-
addListener(eventName:
|
|
190
|
+
addListener(eventName: 'pushNotificationReceived', listener: (notification: PushNotificationSchemaLike) => void): Promise<CapacitorListenerHandleLike>;
|
|
191
|
+
addListener(eventName: 'pushNotificationActionPerformed', listener: (action: PushActionPerformedLike) => void): Promise<CapacitorListenerHandleLike>;
|
|
180
192
|
}
|
|
181
193
|
export type UpdaterLoader = () => Promise<{
|
|
182
194
|
CapacitorUpdater: CapacitorUpdaterLike;
|
|
@@ -193,7 +205,7 @@ export interface OptionalPluginLoaders {
|
|
|
193
205
|
export interface PushOptions {
|
|
194
206
|
enabled: boolean;
|
|
195
207
|
/** Called with the APNs/FCM token once registration succeeds. */
|
|
196
|
-
onToken?(token: string, platform:
|
|
208
|
+
onToken?(token: string, platform: 'ios' | 'android'): void;
|
|
197
209
|
/** Called when the user taps a notification (after the deep-link navigator ran). */
|
|
198
210
|
onNotificationAction?(action: PushActionPerformedLike): void;
|
|
199
211
|
/** Called when a notification is received in the foreground. */
|
|
@@ -278,7 +290,7 @@ export interface NetworkStatusDetail {
|
|
|
278
290
|
export interface BeforeInstallPromptEventLike extends Event {
|
|
279
291
|
readonly platforms?: string[];
|
|
280
292
|
readonly userChoice?: Promise<{
|
|
281
|
-
outcome:
|
|
293
|
+
outcome: 'accepted' | 'dismissed';
|
|
282
294
|
platform: string;
|
|
283
295
|
}>;
|
|
284
296
|
prompt(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/shell-native/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/shell-native/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,26 @@ export interface WebManifestShortcut {
|
|
|
10
10
|
url: string;
|
|
11
11
|
description?: string;
|
|
12
12
|
}
|
|
13
|
+
/**
|
|
14
|
+
* Non-standard manifest member carrying this product's Web Push configuration.
|
|
15
|
+
*
|
|
16
|
+
* WHY THE MANIFEST: the VAPID application-server key is per Firebase PROJECT
|
|
17
|
+
* (the fleet is split across five) and the service worker cannot read
|
|
18
|
+
* `import.meta.env` — it is a static `public/` file, not a Vite entry. The
|
|
19
|
+
* manifest is the per-product artefact the fleet generator ALREADY stamps from
|
|
20
|
+
* `native.config.json`, so the key rides an existing mechanism instead of a new
|
|
21
|
+
* build variable that has to be added to both environment blocks of 38
|
|
22
|
+
* `static-site-deploy.yml` files (miss one and that environment ships
|
|
23
|
+
* `undefined` with no build error).
|
|
24
|
+
*
|
|
25
|
+
* The public half of a VAPID pair is client-safe: it is handed to the push
|
|
26
|
+
* service on every subscribe. The private half stays in `confidential/`.
|
|
27
|
+
* Unknown manifest members are ignored by the spec and by every browser.
|
|
28
|
+
*/
|
|
29
|
+
export interface WebManifestPushConfig {
|
|
30
|
+
vapid_public_key: string;
|
|
31
|
+
fcm_project?: string;
|
|
32
|
+
}
|
|
13
33
|
export interface WebManifestLike {
|
|
14
34
|
id: string;
|
|
15
35
|
name: string;
|
|
@@ -28,6 +48,7 @@ export interface WebManifestLike {
|
|
|
28
48
|
lang: string;
|
|
29
49
|
related_applications: unknown[];
|
|
30
50
|
prefer_related_applications: boolean;
|
|
51
|
+
burdenoff_push?: WebManifestPushConfig;
|
|
31
52
|
}
|
|
32
53
|
export declare function defineWebManifest(cfg: NativeConfig, extra?: {
|
|
33
54
|
shortcuts?: WebManifestShortcut[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-manifest.d.ts","sourceRoot":"","sources":["../../src/shell-native/web-manifest.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,SAAS,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAClC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,oBAAoB,EAAE,OAAO,EAAE,CAAC;IAChC,2BAA2B,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"web-manifest.d.ts","sourceRoot":"","sources":["../../src/shell-native/web-manifest.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,qBAAqB;IACpC,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,SAAS,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAClC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,oBAAoB,EAAE,OAAO,EAAE,CAAC;IAChC,2BAA2B,EAAE,OAAO,CAAC;IACrC,cAAc,CAAC,EAAE,qBAAqB,CAAC;CACxC;AAED,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,YAAY,EACjB,KAAK,GAAE;IAAE,SAAS,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;CAAO,GACvE,eAAe,CA+DjB"}
|
|
@@ -49,7 +49,10 @@ function e(e, t = {}) {
|
|
|
49
49
|
related_applications: [],
|
|
50
50
|
prefer_related_applications: !1
|
|
51
51
|
};
|
|
52
|
-
return t.shortcuts?.length && (n.shortcuts = t.shortcuts), n
|
|
52
|
+
return t.shortcuts?.length && (n.shortcuts = t.shortcuts), e.webPush?.vapidPublicKey && (n.burdenoff_push = {
|
|
53
|
+
vapid_public_key: e.webPush.vapidPublicKey,
|
|
54
|
+
...e.webPush.fcmProject ? { fcm_project: e.webPush.fcmProject } : {}
|
|
55
|
+
}), n;
|
|
53
56
|
}
|
|
54
57
|
//#endregion
|
|
55
58
|
export { e as defineWebManifest };
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/** Manifest member the fleet generator stamps with the per-project push config. */
|
|
2
|
+
export declare const WEB_PUSH_MANIFEST_KEY = "burdenoff_push";
|
|
3
|
+
export interface WebPushManifestConfig {
|
|
4
|
+
/** VAPID application-server public key, base64url, client-safe. */
|
|
5
|
+
vapid_public_key?: string;
|
|
6
|
+
/** Firebase project the product routes through, e.g. `burdenoff-push-4`. */
|
|
7
|
+
fcm_project?: string;
|
|
8
|
+
}
|
|
9
|
+
/** True when this browser can subscribe to Web Push at all. */
|
|
10
|
+
export declare function isWebPushSupported(): boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Read the generated manifest's push block. Cached for the page: the manifest
|
|
13
|
+
* is a static asset and one fetch per session is plenty.
|
|
14
|
+
*/
|
|
15
|
+
export declare function getWebPushManifestConfig(): Promise<WebPushManifestConfig | null>;
|
|
16
|
+
/** Resolve the VAPID public key for this shell, or null when push is unconfigured. */
|
|
17
|
+
export declare function resolveVapidPublicKey(explicit?: string): Promise<string | null>;
|
|
18
|
+
/**
|
|
19
|
+
* base64url (what the routing table stores) → the `BufferSource`
|
|
20
|
+
* `pushManager.subscribe()` wants.
|
|
21
|
+
*
|
|
22
|
+
* Backed by an explicit `ArrayBuffer` rather than `new Uint8Array(length)`:
|
|
23
|
+
* the latter is typed `Uint8Array<ArrayBufferLike>`, which could be a
|
|
24
|
+
* `SharedArrayBuffer` and so is not a `BufferSource`.
|
|
25
|
+
*/
|
|
26
|
+
export declare function urlBase64ToUint8Array(base64Url: string): Uint8Array<ArrayBuffer>;
|
|
27
|
+
/**
|
|
28
|
+
* The device identity we register for a browser: the endpoint plus the two
|
|
29
|
+
* client keys a sender needs to encrypt a payload (RFC 8291). Stable for the
|
|
30
|
+
* life of the subscription and re-issued by the service worker's
|
|
31
|
+
* `pushsubscriptionchange` handler when the browser rotates it.
|
|
32
|
+
*/
|
|
33
|
+
export declare function serializeWebPushSubscription(subscription: PushSubscription): string;
|
|
34
|
+
/** The current subscription, if this browser already has one. */
|
|
35
|
+
export declare function getWebPushSubscription(): Promise<PushSubscription | null>;
|
|
36
|
+
export interface WebPushSubscribeOptions {
|
|
37
|
+
/** Overrides the manifest-resolved key. */
|
|
38
|
+
vapidPublicKey?: string;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Subscribe (or reuse an existing subscription) and publish it as a push token.
|
|
42
|
+
* Assumes permission is ALREADY granted — it never prompts, so it is safe to
|
|
43
|
+
* call on a returning session to refresh the registration.
|
|
44
|
+
*/
|
|
45
|
+
export declare function subscribeWebPush(options?: WebPushSubscribeOptions): Promise<PushSubscription | null>;
|
|
46
|
+
/**
|
|
47
|
+
* Ask for notification permission and subscribe on grant.
|
|
48
|
+
*
|
|
49
|
+
* CALL THIS FROM A USER GESTURE, IN CONTEXT — never at boot. See the module
|
|
50
|
+
* docblock: the prompt is one-shot on iOS and sticky everywhere.
|
|
51
|
+
*
|
|
52
|
+
* ```ts
|
|
53
|
+
* <Switch onCheckedChange={async (on) => {
|
|
54
|
+
* if (on) await requestWebPushPermission();
|
|
55
|
+
* else await unsubscribeWebPush();
|
|
56
|
+
* }} />
|
|
57
|
+
* ```
|
|
58
|
+
*/
|
|
59
|
+
export declare function requestWebPushPermission(options?: WebPushSubscribeOptions): Promise<boolean>;
|
|
60
|
+
/** Sent by the generated `sw.js` when a notification is tapped. */
|
|
61
|
+
export declare const SW_NOTIFICATION_CLICK_MESSAGE = "BURDENOFF_NOTIFICATION_CLICK";
|
|
62
|
+
/** Sent by the generated `sw.js` after the browser rotated the subscription. */
|
|
63
|
+
export declare const SW_PUSH_SUBSCRIPTION_CHANGE_MESSAGE = "BURDENOFF_PUSH_SUBSCRIPTION_CHANGE";
|
|
64
|
+
/**
|
|
65
|
+
* Listen for the messages the generated service worker posts. Idempotent, and
|
|
66
|
+
* installed automatically by `subscribeWebPush()`; call it directly from a
|
|
67
|
+
* shell that wants notification taps routed before any subscribe happens.
|
|
68
|
+
*/
|
|
69
|
+
export declare function installWebPushMessageBridge(): void;
|
|
70
|
+
/** Drop the browser subscription (push opt-out). Does not revoke permission. */
|
|
71
|
+
export declare function unsubscribeWebPush(): Promise<boolean>;
|
|
72
|
+
/** Test seam — clears the cached manifest lookup and the bridge guard. */
|
|
73
|
+
export declare function resetWebPushForTests(): void;
|
|
74
|
+
//# sourceMappingURL=web-push.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-push.d.ts","sourceRoot":"","sources":["../../src/shell-native/web-push.ts"],"names":[],"mappings":"AA8CA,mFAAmF;AACnF,eAAO,MAAM,qBAAqB,mBAAmB,CAAC;AAEtD,MAAM,WAAW,qBAAqB;IACpC,mEAAmE;IACnE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,4EAA4E;IAC5E,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,+DAA+D;AAC/D,wBAAgB,kBAAkB,IAAI,OAAO,CAQ5C;AAqBD;;;GAGG;AACH,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAOtF;AAED,sFAAsF;AACtF,wBAAsB,qBAAqB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAIrF;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,CAOhF;AAID;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,YAAY,EAAE,gBAAgB,GAAG,MAAM,CAEnF;AAWD,iEAAiE;AACjE,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAQ/E;AAED,MAAM,WAAW,uBAAuB;IACtC,2CAA2C;IAC3C,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CA+BlC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,wBAAwB,CAC5C,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,OAAO,CAAC,CAclB;AAID,mEAAmE;AACnE,eAAO,MAAM,6BAA6B,iCAAiC,CAAC;AAC5E,gFAAgF;AAChF,eAAO,MAAM,mCAAmC,uCAAuC,CAAC;AAyBxF;;;;GAIG;AACH,wBAAgB,2BAA2B,IAAI,IAAI,CAKlD;AAED,gFAAgF;AAChF,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC,CAQ3D;AAED,0EAA0E;AAC1E,wBAAgB,oBAAoB,IAAI,IAAI,CAG3C"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { navigateDeepLinkPath as e } from "./deep-link.js";
|
|
2
|
+
import { emitPushToken as t } from "./push.js";
|
|
3
|
+
//#region src/shell-native/web-push.ts
|
|
4
|
+
var n = "burdenoff_push";
|
|
5
|
+
function r() {
|
|
6
|
+
return typeof window < "u" && typeof navigator < "u" && "serviceWorker" in navigator && "PushManager" in window && typeof Notification < "u";
|
|
7
|
+
}
|
|
8
|
+
var i = null;
|
|
9
|
+
function a() {
|
|
10
|
+
if (typeof document > "u") return "/manifest.json";
|
|
11
|
+
let e = document.querySelector("link[rel=\"manifest\"]")?.getAttribute("href");
|
|
12
|
+
return e && e.length > 0 ? e : "/manifest.json";
|
|
13
|
+
}
|
|
14
|
+
function o(e) {
|
|
15
|
+
if (!e || typeof e != "object") return null;
|
|
16
|
+
let t = e[n];
|
|
17
|
+
if (!t || typeof t != "object") return null;
|
|
18
|
+
let r = t;
|
|
19
|
+
return typeof r.vapid_public_key == "string" ? r : null;
|
|
20
|
+
}
|
|
21
|
+
async function s() {
|
|
22
|
+
return typeof fetch > "u" ? null : (i ??= fetch(a(), { credentials: "same-origin" }).then((e) => e.ok ? e.json() : null).then((e) => o(e)).catch(() => null), i);
|
|
23
|
+
}
|
|
24
|
+
async function c(e) {
|
|
25
|
+
return e && e.length > 0 ? e : (await s())?.vapid_public_key ?? null;
|
|
26
|
+
}
|
|
27
|
+
function l(e) {
|
|
28
|
+
let t = (e + "=".repeat((4 - e.length % 4) % 4)).replace(/-/g, "+").replace(/_/g, "/"), n = atob(t), r = new Uint8Array(new ArrayBuffer(n.length));
|
|
29
|
+
for (let e = 0; e < n.length; e += 1) r[e] = n.charCodeAt(e);
|
|
30
|
+
return r;
|
|
31
|
+
}
|
|
32
|
+
function u(e) {
|
|
33
|
+
return JSON.stringify(e.toJSON());
|
|
34
|
+
}
|
|
35
|
+
async function d() {
|
|
36
|
+
if (!r()) return null;
|
|
37
|
+
try {
|
|
38
|
+
return await navigator.serviceWorker.ready;
|
|
39
|
+
} catch {
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
async function f() {
|
|
44
|
+
let e = await d();
|
|
45
|
+
if (!e) return null;
|
|
46
|
+
try {
|
|
47
|
+
return await e.pushManager.getSubscription();
|
|
48
|
+
} catch {
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
async function p(e = {}) {
|
|
53
|
+
if (!r() || Notification.permission !== "granted") return null;
|
|
54
|
+
let n = await d();
|
|
55
|
+
if (!n) return null;
|
|
56
|
+
y();
|
|
57
|
+
try {
|
|
58
|
+
let r = await n.pushManager.getSubscription();
|
|
59
|
+
if (r) return t(u(r), "web"), r;
|
|
60
|
+
let i = await c(e.vapidPublicKey);
|
|
61
|
+
if (!i) return null;
|
|
62
|
+
let a = await n.pushManager.subscribe({
|
|
63
|
+
userVisibleOnly: !0,
|
|
64
|
+
applicationServerKey: l(i)
|
|
65
|
+
});
|
|
66
|
+
return t(u(a), "web"), a;
|
|
67
|
+
} catch {
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
async function m(e = {}) {
|
|
72
|
+
if (!r()) return !1;
|
|
73
|
+
try {
|
|
74
|
+
return Notification.permission === "denied" || Notification.permission !== "granted" && await Notification.requestPermission() !== "granted" ? !1 : await p(e) !== null;
|
|
75
|
+
} catch {
|
|
76
|
+
return !1;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
var h = "BURDENOFF_NOTIFICATION_CLICK", g = "BURDENOFF_PUSH_SUBSCRIPTION_CHANGE", _ = !1;
|
|
80
|
+
function v(n) {
|
|
81
|
+
let r = n.data;
|
|
82
|
+
if (!r || typeof r != "object") return;
|
|
83
|
+
let i = r;
|
|
84
|
+
if (i.type === "BURDENOFF_NOTIFICATION_CLICK") {
|
|
85
|
+
typeof i.route == "string" && i.route.startsWith("/") && e(i.route);
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
i.type === "BURDENOFF_PUSH_SUBSCRIPTION_CHANGE" && i.subscription && t(JSON.stringify(i.subscription), "web");
|
|
89
|
+
}
|
|
90
|
+
function y() {
|
|
91
|
+
_ || typeof navigator > "u" || !("serviceWorker" in navigator) || (navigator.serviceWorker.addEventListener("message", v), _ = !0);
|
|
92
|
+
}
|
|
93
|
+
async function b() {
|
|
94
|
+
let e = await f();
|
|
95
|
+
if (!e) return !1;
|
|
96
|
+
try {
|
|
97
|
+
return await e.unsubscribe();
|
|
98
|
+
} catch {
|
|
99
|
+
return !1;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
function x() {
|
|
103
|
+
i = null, _ = !1;
|
|
104
|
+
}
|
|
105
|
+
//#endregion
|
|
106
|
+
export { h as SW_NOTIFICATION_CLICK_MESSAGE, g as SW_PUSH_SUBSCRIPTION_CHANGE_MESSAGE, n as WEB_PUSH_MANIFEST_KEY, s as getWebPushManifestConfig, f as getWebPushSubscription, y as installWebPushMessageBridge, r as isWebPushSupported, m as requestWebPushPermission, x as resetWebPushForTests, c as resolveVapidPublicKey, u as serializeWebPushSubscription, p as subscribeWebPush, b as unsubscribeWebPush, l as urlBase64ToUint8Array };
|