ugly-app 0.1.606 → 0.1.607

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.
@@ -1,2 +1,2 @@
1
- export declare const CLI_VERSION = "0.1.606";
1
+ export declare const CLI_VERSION = "0.1.607";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -1,3 +1,3 @@
1
1
  // Auto-generated by prebuild — do not edit manually
2
- export const CLI_VERSION = "0.1.606";
2
+ export const CLI_VERSION = "0.1.607";
3
3
  //# sourceMappingURL=version.js.map
@@ -45,8 +45,8 @@ export type { UglyBotSocket } from './uglyBotSocket.js';
45
45
  export { initAppApi } from './AppApi.js';
46
46
  export { bootstrapApp } from './bootstrapApp.js';
47
47
  export { captureClientError } from './ErrorLog.js';
48
- export { webPushSubscribe, getWebPushPermission } from './webPush.js';
49
- export type { WebPushResult, WebPushPermission } from './webPush.js';
48
+ export { registerFirebaseWebPush, getWebPushPermission } from './webPush.js';
49
+ export type { WebPushResult, WebPushPermission, FirebaseWebConfig, RegisterFirebaseWebPushOptions } from './webPush.js';
50
50
  export { clearFeedbackContext, getFeedbackContext, setFeedbackContext, } from './FeedbackContext.js';
51
51
  export { getConsoleBuffer, initClientLogger } from './Logger.js';
52
52
  export { LoginPopup } from './LoginPopup.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,WAAW,EACX,mBAAmB,EACnB,aAAa,EACb,YAAY,EACZ,OAAO,EACP,kBAAkB,EAClB,YAAY,GACb,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,UAAU,EACV,aAAa,EACb,SAAS,EACT,OAAO,EACP,UAAU,EACV,YAAY,EACZ,SAAS,EACT,cAAc,EACd,WAAW,EACX,cAAc,EACd,cAAc,GACf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,YAAY,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,8BAA8B,CAAC;AACtC,YAAY,EACV,gBAAgB,EAChB,cAAc,EACd,gBAAgB,GACjB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AACzH,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAC9G,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAC5F,YAAY,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAC1H,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrF,YAAY,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,OAAO,EACP,UAAU,GACX,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,YAAY,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,0BAA0B,EAC1B,WAAW,EACX,QAAQ,GACT,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,UAAU,EACV,eAAe,EACf,kBAAkB,EAClB,WAAW,EACX,SAAS,EACT,aAAa,GACd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,YAAY,EACV,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,aAAa,EACb,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAC1E,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,cAAc,uBAAuB,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,YAAY,EACV,aAAa,EACb,uBAAuB,GACxB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACzG,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACtE,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7F,YAAY,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC3E,YAAY,EACV,WAAW,EACX,eAAe,EACf,YAAY,EACZ,kBAAkB,GACnB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACvE,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,YAAY,EACV,cAAc,EACd,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,aAAa,EACb,YAAY,EACZ,UAAU,EACV,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"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"}
@@ -28,7 +28,7 @@ export { createUglyBotSocket } from './uglyBotSocket.js';
28
28
  export { initAppApi } from './AppApi.js';
29
29
  export { bootstrapApp } from './bootstrapApp.js';
30
30
  export { captureClientError } from './ErrorLog.js';
31
- export { webPushSubscribe, getWebPushPermission } from './webPush.js';
31
+ export { registerFirebaseWebPush, getWebPushPermission } from './webPush.js';
32
32
  export { clearFeedbackContext, getFeedbackContext, setFeedbackContext, } from './FeedbackContext.js';
33
33
  export { getConsoleBuffer, initClientLogger } from './Logger.js';
34
34
  export { LoginPopup } from './LoginPopup.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"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"}
@@ -1,32 +1,47 @@
1
1
  /**
2
- * Web Push (RFC 8291) registrationsame-origin, no Firebase.
2
+ * FCM web push registration (the single push mechanism matches native FCM).
3
3
  *
4
- * Registers the framework service worker (served at `/ugly-push-sw.js` by
5
- * `wrapWithAssets`), prompts for notification permission, and subscribes the
6
- * browser to push with the app's VAPID public key. Returns the PushSubscription
7
- * serialized to the JSON shape ugly.bot's `register-device` (deviceType:'web')
8
- * + `deliverWebPush` expect: `{ endpoint, keys: { p256dh, auth } }`.
4
+ * Loads the Firebase compat SDK from the CDN on demand (no npm dependency / no
5
+ * bundle bloat only fetched when a user actually registers), registers the
6
+ * framework's Firebase service worker (`/ugly-push-sw.js`, served by
7
+ * `wrapWithAssets`), and returns an FCM web token via `getToken`. The caller
8
+ * stores that token server-side (e.g. ugly.bot `userPrivateAddSubscription`
9
+ * `userPrivate.gcmTokens`) so `deliverPushToUserDevices` can reach this browser.
9
10
  *
10
- * The caller (app) then sends that string to its server, which stores it via
11
- * `registerDevice(userId, subscriptionJson, 'web')`. This keeps registration a
12
- * single concern (e.g. ugly.bot registers once at login); other apps just proxy
13
- * `pushSend` and never register.
11
+ * Behaviors ported from the monolith:
12
+ * Foreground `onMessage` SUPPRESSES the notification when you're already on
13
+ * the target page (the chat you're looking at) otherwise shows it with an
14
+ * in-place-navigate click handler.
15
+ * • The SW's `notificationclick` reuses an already-open page (see wrapWithAssets).
14
16
  *
15
- * SSR-safe: every function no-ops (returns null/'unsupported') off the main
16
- * thread or where the APIs are missing.
17
+ * SSR-safe: no-ops off the main thread / where the APIs are missing.
17
18
  */
18
19
  export type WebPushPermission = 'granted' | 'denied' | 'default' | 'unsupported';
19
- export declare function getWebPushPermission(): WebPushPermission;
20
+ export interface FirebaseWebConfig {
21
+ apiKey: string;
22
+ authDomain?: string;
23
+ projectId: string;
24
+ messagingSenderId: string;
25
+ appId: string;
26
+ storageBucket?: string;
27
+ }
28
+ export interface RegisterFirebaseWebPushOptions {
29
+ config: FirebaseWebConfig;
30
+ /** Firebase "Web Push certificate" key (the VAPID public key from the console). */
31
+ vapidKey: string;
32
+ /** Optional: navigate in-place when a foreground notification is clicked. */
33
+ onNavigate?: (url: string) => void;
34
+ }
20
35
  export interface WebPushResult {
21
- /** JSON string `{endpoint, keys:{p256dh, auth}}` for register-device, or null. */
22
- subscription: string | null;
36
+ /** FCM web token to store server-side (gcmTokens), or null. */
37
+ token: string | null;
23
38
  permission: WebPushPermission;
24
39
  error?: string;
25
40
  }
41
+ export declare function getWebPushPermission(): WebPushPermission;
26
42
  /**
27
- * Register the SW, request permission, and subscribe. Idempotent: reuses an
28
- * existing subscription if present. Must be called from a user gesture for the
29
- * permission prompt to show on most browsers.
43
+ * Register for FCM web push. Must be called from a user gesture for the
44
+ * permission prompt to show. Returns the FCM web token (store it in gcmTokens).
30
45
  */
31
- export declare function webPushSubscribe(vapidPublicKey: string): Promise<WebPushResult>;
46
+ export declare function registerFirebaseWebPush(opts: RegisterFirebaseWebPushOptions): Promise<WebPushResult>;
32
47
  //# sourceMappingURL=webPush.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"webPush.d.ts","sourceRoot":"","sources":["../../src/client/webPush.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,aAAa,CAAC;AAWjF,wBAAgB,oBAAoB,IAAI,iBAAiB,CAGxD;AAoBD,MAAM,WAAW,aAAa;IAC5B,kFAAkF;IAClF,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,iBAAiB,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAkCrF"}
1
+ {"version":3,"file":"webPush.d.ts","sourceRoot":"","sources":["../../src/client/webPush.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,aAAa,CAAC;AAEjF,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,8BAA8B;IAC7C,MAAM,EAAE,iBAAiB,CAAC;IAC1B,mFAAmF;IACnF,QAAQ,EAAE,MAAM,CAAC;IACjB,6EAA6E;IAC7E,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC;AAED,MAAM,WAAW,aAAa;IAC5B,+DAA+D;IAC/D,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,UAAU,EAAE,iBAAiB,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAaD,wBAAgB,oBAAoB,IAAI,iBAAiB,CAGxD;AAiCD;;;GAGG;AACH,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,8BAA8B,GAAG,OAAO,CAAC,aAAa,CAAC,CAyC1G"}
@@ -1,20 +1,22 @@
1
1
  /**
2
- * Web Push (RFC 8291) registrationsame-origin, no Firebase.
2
+ * FCM web push registration (the single push mechanism matches native FCM).
3
3
  *
4
- * Registers the framework service worker (served at `/ugly-push-sw.js` by
5
- * `wrapWithAssets`), prompts for notification permission, and subscribes the
6
- * browser to push with the app's VAPID public key. Returns the PushSubscription
7
- * serialized to the JSON shape ugly.bot's `register-device` (deviceType:'web')
8
- * + `deliverWebPush` expect: `{ endpoint, keys: { p256dh, auth } }`.
4
+ * Loads the Firebase compat SDK from the CDN on demand (no npm dependency / no
5
+ * bundle bloat only fetched when a user actually registers), registers the
6
+ * framework's Firebase service worker (`/ugly-push-sw.js`, served by
7
+ * `wrapWithAssets`), and returns an FCM web token via `getToken`. The caller
8
+ * stores that token server-side (e.g. ugly.bot `userPrivateAddSubscription`
9
+ * `userPrivate.gcmTokens`) so `deliverPushToUserDevices` can reach this browser.
9
10
  *
10
- * The caller (app) then sends that string to its server, which stores it via
11
- * `registerDevice(userId, subscriptionJson, 'web')`. This keeps registration a
12
- * single concern (e.g. ugly.bot registers once at login); other apps just proxy
13
- * `pushSend` and never register.
11
+ * Behaviors ported from the monolith:
12
+ * Foreground `onMessage` SUPPRESSES the notification when you're already on
13
+ * the target page (the chat you're looking at) otherwise shows it with an
14
+ * in-place-navigate click handler.
15
+ * • The SW's `notificationclick` reuses an already-open page (see wrapWithAssets).
14
16
  *
15
- * SSR-safe: every function no-ops (returns null/'unsupported') off the main
16
- * thread or where the APIs are missing.
17
+ * SSR-safe: no-ops off the main thread / where the APIs are missing.
17
18
  */
19
+ const FIREBASE_VERSION = '12.2.1';
18
20
  function supported() {
19
21
  return (typeof window !== 'undefined' &&
20
22
  'serviceWorker' in navigator &&
@@ -26,36 +28,41 @@ export function getWebPushPermission() {
26
28
  return 'unsupported';
27
29
  return Notification.permission;
28
30
  }
29
- // VAPID public key (base64url) → Uint8Array applicationServerKey.
30
- function urlBase64ToUint8Array(base64) {
31
- const padding = '='.repeat((4 - (base64.length % 4)) % 4);
32
- const b64 = (base64 + padding).replace(/-/g, '+').replace(/_/g, '/');
33
- const raw = atob(b64);
34
- const out = new Uint8Array(raw.length);
35
- for (let i = 0; i < raw.length; i++)
36
- out[i] = raw.charCodeAt(i);
37
- return out;
31
+ function loadScript(src) {
32
+ return new Promise((resolve, reject) => {
33
+ if (document.querySelector(`script[src="${src}"]`))
34
+ return resolve();
35
+ const s = document.createElement('script');
36
+ s.src = src;
37
+ s.onload = () => resolve();
38
+ s.onerror = () => reject(new Error('failed to load ' + src));
39
+ document.head.appendChild(s);
40
+ });
38
41
  }
39
- function bufToB64Url(buf) {
40
- if (!buf)
41
- return '';
42
- const bytes = new Uint8Array(buf);
43
- let bin = '';
44
- for (const b of bytes)
45
- bin += String.fromCharCode(b);
46
- return btoa(bin).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
42
+ async function loadFirebase() {
43
+ const w = window;
44
+ if (w.firebase?.messaging)
45
+ return w.firebase;
46
+ await loadScript(`https://www.gstatic.com/firebasejs/${FIREBASE_VERSION}/firebase-app-compat.js`);
47
+ await loadScript(`https://www.gstatic.com/firebasejs/${FIREBASE_VERSION}/firebase-messaging-compat.js`);
48
+ if (!w.firebase)
49
+ throw new Error('firebase SDK failed to load');
50
+ return w.firebase;
47
51
  }
48
52
  /**
49
- * Register the SW, request permission, and subscribe. Idempotent: reuses an
50
- * existing subscription if present. Must be called from a user gesture for the
51
- * permission prompt to show on most browsers.
53
+ * Register for FCM web push. Must be called from a user gesture for the
54
+ * permission prompt to show. Returns the FCM web token (store it in gcmTokens).
52
55
  */
53
- export async function webPushSubscribe(vapidPublicKey) {
56
+ export async function registerFirebaseWebPush(opts) {
54
57
  if (!supported())
55
- return { subscription: null, permission: 'unsupported', error: 'unsupported' };
56
- if (!vapidPublicKey)
57
- return { subscription: null, permission: getWebPushPermission(), error: 'missing VAPID public key' };
58
+ return { token: null, permission: 'unsupported', error: 'unsupported' };
59
+ if (!opts.config?.apiKey || !opts.vapidKey) {
60
+ return { token: null, permission: getWebPushPermission(), error: 'missing Firebase config / VAPID key' };
61
+ }
58
62
  try {
63
+ const firebase = await loadFirebase();
64
+ if (!firebase.apps.length)
65
+ firebase.initializeApp(opts.config);
59
66
  const reg = (await navigator.serviceWorker.getRegistration('/')) ??
60
67
  (await navigator.serviceWorker.register('/ugly-push-sw.js', { scope: '/' }));
61
68
  await navigator.serviceWorker.ready;
@@ -63,25 +70,31 @@ export async function webPushSubscribe(vapidPublicKey) {
63
70
  if (permission === 'default')
64
71
  permission = (await Notification.requestPermission());
65
72
  if (permission !== 'granted')
66
- return { subscription: null, permission, error: 'permission ' + permission };
67
- const existing = await reg.pushManager.getSubscription();
68
- const sub = existing ??
69
- (await reg.pushManager.subscribe({
70
- userVisibleOnly: true,
71
- applicationServerKey: urlBase64ToUint8Array(vapidPublicKey),
72
- }));
73
- const json = sub.toJSON();
74
- const serialized = JSON.stringify({
75
- endpoint: json.endpoint ?? sub.endpoint,
76
- keys: {
77
- p256dh: json.keys?.p256dh ?? bufToB64Url(sub.getKey('p256dh')),
78
- auth: json.keys?.auth ?? bufToB64Url(sub.getKey('auth')),
79
- },
73
+ return { token: null, permission, error: 'permission ' + permission };
74
+ const messaging = firebase.messaging();
75
+ // Foreground: SUPPRESS for the page you're already on; else show + navigate.
76
+ messaging.onMessage((payload) => {
77
+ const data = payload.data ?? {};
78
+ const url = data['path'] || data['uri'] || data['url'] || '';
79
+ if (url && window.location.href === url)
80
+ return; // already viewing — skip
81
+ if (typeof Notification !== 'undefined' && payload.notification?.title) {
82
+ const n = new Notification(payload.notification.title, {
83
+ body: payload.notification.body ?? '',
84
+ data,
85
+ });
86
+ n.onclick = () => {
87
+ n.close();
88
+ if (url)
89
+ (opts.onNavigate ?? ((u) => { window.location.href = u; }))(url);
90
+ };
91
+ }
80
92
  });
81
- return { subscription: serialized, permission: 'granted' };
93
+ const token = await messaging.getToken({ vapidKey: opts.vapidKey, serviceWorkerRegistration: reg });
94
+ return { token: token || null, permission: 'granted' };
82
95
  }
83
96
  catch (err) {
84
- return { subscription: null, permission: getWebPushPermission(), error: err?.message ?? 'subscribe failed' };
97
+ return { token: null, permission: getWebPushPermission(), error: err?.message ?? 'register failed' };
85
98
  }
86
99
  }
87
100
  //# sourceMappingURL=webPush.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"webPush.js","sourceRoot":"","sources":["../../src/client/webPush.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"webPush.js","sourceRoot":"","sources":["../../src/client/webPush.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"wrapWithAssets.d.ts","sourceRoot":"","sources":["../../../../src/server/adapter/workers/wrapWithAssets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAMH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGxD,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,OAAO,EAAE,MAAM,CAAC;CACjB;AA8JD,wBAAgB,cAAc,CAC5B,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,YAAY,GACnB,UAAU,CAiJZ"}
1
+ {"version":3,"file":"wrapWithAssets.d.ts","sourceRoot":"","sources":["../../../../src/server/adapter/workers/wrapWithAssets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAMH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGxD,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,OAAO,EAAE,MAAM,CAAC;CACjB;AAsLD,wBAAgB,cAAc,CAC5B,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,YAAY,GACnB,UAAU,CAiJZ"}
@@ -32,31 +32,55 @@ import { getAppContext } from './createWorkersApp.js';
32
32
  const ASSET_CACHE_CONTROL = 'public, max-age=31536000, immutable';
33
33
  const HTML_CACHE_CONTROL = 'no-cache, no-store, must-revalidate';
34
34
  // Web-push service worker, served same-origin at `/ugly-push-sw.js` with
35
- // `Service-Worker-Allowed: /` so it can claim the whole origin. Raw Web Push
36
- // (RFC 8291) NOT Firebase: `push` shows the notification, `notificationclick`
37
- // opens the deep-link the sender put in `data` (path/uri/url; e.g. an absolute
38
- // child-app URL). The client registers it via `webPushSubscribe()`.
39
- const PUSH_SERVICE_WORKER_JS = `
35
+ // `Service-Worker-Allowed: /`. FCM web push (Firebase) the single push
36
+ // mechanism (matches native FCM): the page registers it via `getToken`. The SW
37
+ // owns BACKGROUND behavior; the foreground page suppresses notifications for the
38
+ // chat you're already viewing (see the client `onMessage` handler).
39
+ //
40
+ // Two behaviors ported from the monolith service worker:
41
+ // • `notificationclick` REUSES an already-open page — focus the tab whose URL
42
+ // matches the deep link; else focus any open tab + postMessage so the SPA
43
+ // navigates in-place (no reload); else open a new window.
44
+ // • background messages show the notification (foreground suppression is the
45
+ // page's job — it knows which chat is on screen).
46
+ //
47
+ // Firebase web config (public) is injected from the worker's FIREBASE_* env.
48
+ function buildPushServiceWorker(env) {
49
+ const cfg = {
50
+ apiKey: env['FIREBASE_API_KEY'] ?? '',
51
+ authDomain: env['FIREBASE_AUTH_DOMAIN'] ?? '',
52
+ projectId: env['FIREBASE_PROJECT_ID'] ?? '',
53
+ storageBucket: env['FIREBASE_STORAGE_BUCKET'] ?? '',
54
+ messagingSenderId: env['FIREBASE_MESSAGING_SENDER_ID'] ?? '',
55
+ appId: env['FIREBASE_APP_ID'] ?? '',
56
+ };
57
+ return `importScripts('https://www.gstatic.com/firebasejs/12.2.1/firebase-app-compat.js');
58
+ importScripts('https://www.gstatic.com/firebasejs/12.2.1/firebase-messaging-compat.js');
40
59
  self.addEventListener('install', function(){ self.skipWaiting(); });
41
60
  self.addEventListener('activate', function(e){ e.waitUntil(self.clients.claim()); });
42
- self.addEventListener('push', function(event){
43
- var p = {};
44
- try { p = event.data ? event.data.json() : {}; } catch (e) { try { p = { body: event.data && event.data.text() }; } catch (e2) {} }
45
- var title = p.title || 'Notification';
46
- var opts = { body: p.body || '', data: p.data || {}, requireInteraction: true };
47
- if (p.icon) opts.icon = p.icon;
48
- event.waitUntil(self.registration.showNotification(title, opts));
49
- });
61
+
62
+ // notificationclick reuse an already-open page (monolith parity).
50
63
  self.addEventListener('notificationclick', function(event){
51
- var d = event.notification.data || {};
52
- var url = d.path || d.uri || d.url || '/';
64
+ var nd = event.notification.data || {};
65
+ var data = (nd.FCM_MSG && nd.FCM_MSG.data) ? nd.FCM_MSG.data : nd;
66
+ var url = data.path || data.uri || data.url || '/';
53
67
  event.notification.close();
54
- event.waitUntil(self.clients.matchAll({ type: 'window', includeUncontrolled: true }).then(function(list){
68
+ event.waitUntil(self.clients.matchAll({ includeUncontrolled: true, type: 'window' }).then(function(list){
55
69
  for (var i = 0; i < list.length; i++) { if (list[i].url === url && 'focus' in list[i]) return list[i].focus(); }
70
+ var c = list[0];
71
+ if (c) { c.focus(); try { c.postMessage({ func: 'appNotificationClick', data: data }); } catch (e) {} return; }
56
72
  if (self.clients.openWindow) return self.clients.openWindow(url);
57
73
  }));
58
74
  });
75
+
76
+ firebase.initializeApp(${JSON.stringify(cfg)});
77
+ firebase.messaging().onBackgroundMessage(function(payload){
78
+ var n = payload.notification || {};
79
+ var data = payload.data || {};
80
+ self.registration.showNotification(n.title || 'Notification', { body: n.body || '', data: data, requireInteraction: true });
81
+ });
59
82
  `;
83
+ }
60
84
  function guessContentType(path) {
61
85
  const lower = path.toLowerCase();
62
86
  if (lower.endsWith('.js') || lower.endsWith('.mjs')) {
@@ -192,7 +216,7 @@ export function wrapWithAssets(base, config) {
192
216
  // ── 0. Web-push service worker (same-origin, root scope) ──────
193
217
  // Served before the SPA fallback so it isn't shadowed by the HTML shell.
194
218
  if (path === '/ugly-push-sw.js' && (method === 'GET' || method === 'HEAD')) {
195
- return new Response(PUSH_SERVICE_WORKER_JS, {
219
+ return new Response(buildPushServiceWorker(env), {
196
220
  status: 200,
197
221
  headers: {
198
222
  'content-type': 'application/javascript; charset=utf-8',
@@ -1 +1 @@
1
- {"version":3,"file":"wrapWithAssets.js","sourceRoot":"","sources":["../../../../src/server/adapter/workers/wrapWithAssets.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wrapWithAssets.js","sourceRoot":"","sources":["../../../../src/server/adapter/workers/wrapWithAssets.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ugly-app",
3
- "version": "0.1.606",
3
+ "version": "0.1.607",
4
4
  "type": "module",
5
5
  "comment:files": "Allowlist what ships to npm. dist = runtime; src = sourcemap targets (dist/*.js.map reference ../../src/); templates = CLI scaffold. Everything else at repo root (.pgdata local Postgres, coverage, assets/icons sources, test/, test-results/) is excluded by omission. The !negations strip the scaffold's installed deps + cruft (templates/node_modules is 200MB+ and must never ship). package.json/README/LICENSE ship automatically.",
6
6
  "files": [
@@ -1,2 +1,2 @@
1
1
  // Auto-generated by prebuild — do not edit manually
2
- export const CLI_VERSION = "0.1.606";
2
+ export const CLI_VERSION = "0.1.607";
@@ -106,8 +106,8 @@ export type { UglyBotSocket } from './uglyBotSocket.js';
106
106
  export { initAppApi } from './AppApi.js';
107
107
  export { bootstrapApp } from './bootstrapApp.js';
108
108
  export { captureClientError } from './ErrorLog.js';
109
- export { webPushSubscribe, getWebPushPermission } from './webPush.js';
110
- export type { WebPushResult, WebPushPermission } from './webPush.js';
109
+ export { registerFirebaseWebPush, getWebPushPermission } from './webPush.js';
110
+ export type { WebPushResult, WebPushPermission, FirebaseWebConfig, RegisterFirebaseWebPushOptions } from './webPush.js';
111
111
  export {
112
112
  clearFeedbackContext,
113
113
  getFeedbackContext,
@@ -1,23 +1,50 @@
1
1
  /**
2
- * Web Push (RFC 8291) registrationsame-origin, no Firebase.
2
+ * FCM web push registration (the single push mechanism matches native FCM).
3
3
  *
4
- * Registers the framework service worker (served at `/ugly-push-sw.js` by
5
- * `wrapWithAssets`), prompts for notification permission, and subscribes the
6
- * browser to push with the app's VAPID public key. Returns the PushSubscription
7
- * serialized to the JSON shape ugly.bot's `register-device` (deviceType:'web')
8
- * + `deliverWebPush` expect: `{ endpoint, keys: { p256dh, auth } }`.
4
+ * Loads the Firebase compat SDK from the CDN on demand (no npm dependency / no
5
+ * bundle bloat only fetched when a user actually registers), registers the
6
+ * framework's Firebase service worker (`/ugly-push-sw.js`, served by
7
+ * `wrapWithAssets`), and returns an FCM web token via `getToken`. The caller
8
+ * stores that token server-side (e.g. ugly.bot `userPrivateAddSubscription`
9
+ * `userPrivate.gcmTokens`) so `deliverPushToUserDevices` can reach this browser.
9
10
  *
10
- * The caller (app) then sends that string to its server, which stores it via
11
- * `registerDevice(userId, subscriptionJson, 'web')`. This keeps registration a
12
- * single concern (e.g. ugly.bot registers once at login); other apps just proxy
13
- * `pushSend` and never register.
11
+ * Behaviors ported from the monolith:
12
+ * Foreground `onMessage` SUPPRESSES the notification when you're already on
13
+ * the target page (the chat you're looking at) otherwise shows it with an
14
+ * in-place-navigate click handler.
15
+ * • The SW's `notificationclick` reuses an already-open page (see wrapWithAssets).
14
16
  *
15
- * SSR-safe: every function no-ops (returns null/'unsupported') off the main
16
- * thread or where the APIs are missing.
17
+ * SSR-safe: no-ops off the main thread / where the APIs are missing.
17
18
  */
18
19
 
19
20
  export type WebPushPermission = 'granted' | 'denied' | 'default' | 'unsupported';
20
21
 
22
+ export interface FirebaseWebConfig {
23
+ apiKey: string;
24
+ authDomain?: string;
25
+ projectId: string;
26
+ messagingSenderId: string;
27
+ appId: string;
28
+ storageBucket?: string;
29
+ }
30
+
31
+ export interface RegisterFirebaseWebPushOptions {
32
+ config: FirebaseWebConfig;
33
+ /** Firebase "Web Push certificate" key (the VAPID public key from the console). */
34
+ vapidKey: string;
35
+ /** Optional: navigate in-place when a foreground notification is clicked. */
36
+ onNavigate?: (url: string) => void;
37
+ }
38
+
39
+ export interface WebPushResult {
40
+ /** FCM web token to store server-side (gcmTokens), or null. */
41
+ token: string | null;
42
+ permission: WebPushPermission;
43
+ error?: string;
44
+ }
45
+
46
+ const FIREBASE_VERSION = '12.2.1';
47
+
21
48
  function supported(): boolean {
22
49
  return (
23
50
  typeof window !== 'undefined' &&
@@ -32,41 +59,50 @@ export function getWebPushPermission(): WebPushPermission {
32
59
  return Notification.permission as WebPushPermission;
33
60
  }
34
61
 
35
- // VAPID public key (base64url) Uint8Array applicationServerKey.
36
- function urlBase64ToUint8Array(base64: string): Uint8Array {
37
- const padding = '='.repeat((4 - (base64.length % 4)) % 4);
38
- const b64 = (base64 + padding).replace(/-/g, '+').replace(/_/g, '/');
39
- const raw = atob(b64);
40
- const out = new Uint8Array(raw.length);
41
- for (let i = 0; i < raw.length; i++) out[i] = raw.charCodeAt(i);
42
- return out;
62
+ function loadScript(src: string): Promise<void> {
63
+ return new Promise((resolve, reject) => {
64
+ if (document.querySelector(`script[src="${src}"]`)) return resolve();
65
+ const s = document.createElement('script');
66
+ s.src = src;
67
+ s.onload = () => resolve();
68
+ s.onerror = () => reject(new Error('failed to load ' + src));
69
+ document.head.appendChild(s);
70
+ });
43
71
  }
44
72
 
45
- function bufToB64Url(buf: ArrayBuffer | null): string {
46
- if (!buf) return '';
47
- const bytes = new Uint8Array(buf);
48
- let bin = '';
49
- for (const b of bytes) bin += String.fromCharCode(b);
50
- return btoa(bin).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
73
+ // Firebase compat global (loaded from CDN). Loose typing — we only touch a small
74
+ // surface (initializeApp / messaging / getToken / onMessage).
75
+ interface FirebaseGlobal {
76
+ apps: unknown[];
77
+ initializeApp: (cfg: FirebaseWebConfig) => void;
78
+ messaging: () => {
79
+ getToken: (opts: { vapidKey: string; serviceWorkerRegistration: ServiceWorkerRegistration }) => Promise<string>;
80
+ onMessage: (cb: (payload: { notification?: { title?: string; body?: string }; data?: Record<string, string> }) => void) => void;
81
+ };
51
82
  }
52
83
 
53
- export interface WebPushResult {
54
- /** JSON string `{endpoint, keys:{p256dh, auth}}` for register-device, or null. */
55
- subscription: string | null;
56
- permission: WebPushPermission;
57
- error?: string;
84
+ async function loadFirebase(): Promise<FirebaseGlobal> {
85
+ const w = window as unknown as { firebase?: FirebaseGlobal };
86
+ if (w.firebase?.messaging) return w.firebase;
87
+ await loadScript(`https://www.gstatic.com/firebasejs/${FIREBASE_VERSION}/firebase-app-compat.js`);
88
+ await loadScript(`https://www.gstatic.com/firebasejs/${FIREBASE_VERSION}/firebase-messaging-compat.js`);
89
+ if (!w.firebase) throw new Error('firebase SDK failed to load');
90
+ return w.firebase;
58
91
  }
59
92
 
60
93
  /**
61
- * Register the SW, request permission, and subscribe. Idempotent: reuses an
62
- * existing subscription if present. Must be called from a user gesture for the
63
- * permission prompt to show on most browsers.
94
+ * Register for FCM web push. Must be called from a user gesture for the
95
+ * permission prompt to show. Returns the FCM web token (store it in gcmTokens).
64
96
  */
65
- export async function webPushSubscribe(vapidPublicKey: string): Promise<WebPushResult> {
66
- if (!supported()) return { subscription: null, permission: 'unsupported', error: 'unsupported' };
67
- if (!vapidPublicKey) return { subscription: null, permission: getWebPushPermission(), error: 'missing VAPID public key' };
68
-
97
+ export async function registerFirebaseWebPush(opts: RegisterFirebaseWebPushOptions): Promise<WebPushResult> {
98
+ if (!supported()) return { token: null, permission: 'unsupported', error: 'unsupported' };
99
+ if (!opts.config?.apiKey || !opts.vapidKey) {
100
+ return { token: null, permission: getWebPushPermission(), error: 'missing Firebase config / VAPID key' };
101
+ }
69
102
  try {
103
+ const firebase = await loadFirebase();
104
+ if (!firebase.apps.length) firebase.initializeApp(opts.config);
105
+
70
106
  const reg =
71
107
  (await navigator.serviceWorker.getRegistration('/')) ??
72
108
  (await navigator.serviceWorker.register('/ugly-push-sw.js', { scope: '/' }));
@@ -74,26 +110,29 @@ export async function webPushSubscribe(vapidPublicKey: string): Promise<WebPushR
74
110
 
75
111
  let permission = Notification.permission as WebPushPermission;
76
112
  if (permission === 'default') permission = (await Notification.requestPermission()) as WebPushPermission;
77
- if (permission !== 'granted') return { subscription: null, permission, error: 'permission ' + permission };
113
+ if (permission !== 'granted') return { token: null, permission, error: 'permission ' + permission };
78
114
 
79
- const existing = await reg.pushManager.getSubscription();
80
- const sub =
81
- existing ??
82
- (await reg.pushManager.subscribe({
83
- userVisibleOnly: true,
84
- applicationServerKey: urlBase64ToUint8Array(vapidPublicKey) as unknown as BufferSource,
85
- }));
86
-
87
- const json = sub.toJSON() as { endpoint?: string; keys?: { p256dh?: string; auth?: string } };
88
- const serialized = JSON.stringify({
89
- endpoint: json.endpoint ?? sub.endpoint,
90
- keys: {
91
- p256dh: json.keys?.p256dh ?? bufToB64Url(sub.getKey('p256dh')),
92
- auth: json.keys?.auth ?? bufToB64Url(sub.getKey('auth')),
93
- },
115
+ const messaging = firebase.messaging();
116
+ // Foreground: SUPPRESS for the page you're already on; else show + navigate.
117
+ messaging.onMessage((payload) => {
118
+ const data = payload.data ?? {};
119
+ const url = data['path'] || data['uri'] || data['url'] || '';
120
+ if (url && window.location.href === url) return; // already viewing — skip
121
+ if (typeof Notification !== 'undefined' && payload.notification?.title) {
122
+ const n = new Notification(payload.notification.title, {
123
+ body: payload.notification.body ?? '',
124
+ data,
125
+ });
126
+ n.onclick = () => {
127
+ n.close();
128
+ if (url) (opts.onNavigate ?? ((u: string) => { window.location.href = u; }))(url);
129
+ };
130
+ }
94
131
  });
95
- return { subscription: serialized, permission: 'granted' };
132
+
133
+ const token = await messaging.getToken({ vapidKey: opts.vapidKey, serviceWorkerRegistration: reg });
134
+ return { token: token || null, permission: 'granted' };
96
135
  } catch (err) {
97
- return { subscription: null, permission: getWebPushPermission(), error: (err as Error)?.message ?? 'subscribe failed' };
136
+ return { token: null, permission: getWebPushPermission(), error: (err as Error)?.message ?? 'register failed' };
98
137
  }
99
138
  }
@@ -53,31 +53,55 @@ const ASSET_CACHE_CONTROL = 'public, max-age=31536000, immutable';
53
53
  const HTML_CACHE_CONTROL = 'no-cache, no-store, must-revalidate';
54
54
 
55
55
  // Web-push service worker, served same-origin at `/ugly-push-sw.js` with
56
- // `Service-Worker-Allowed: /` so it can claim the whole origin. Raw Web Push
57
- // (RFC 8291) NOT Firebase: `push` shows the notification, `notificationclick`
58
- // opens the deep-link the sender put in `data` (path/uri/url; e.g. an absolute
59
- // child-app URL). The client registers it via `webPushSubscribe()`.
60
- const PUSH_SERVICE_WORKER_JS = `
56
+ // `Service-Worker-Allowed: /`. FCM web push (Firebase) the single push
57
+ // mechanism (matches native FCM): the page registers it via `getToken`. The SW
58
+ // owns BACKGROUND behavior; the foreground page suppresses notifications for the
59
+ // chat you're already viewing (see the client `onMessage` handler).
60
+ //
61
+ // Two behaviors ported from the monolith service worker:
62
+ // • `notificationclick` REUSES an already-open page — focus the tab whose URL
63
+ // matches the deep link; else focus any open tab + postMessage so the SPA
64
+ // navigates in-place (no reload); else open a new window.
65
+ // • background messages show the notification (foreground suppression is the
66
+ // page's job — it knows which chat is on screen).
67
+ //
68
+ // Firebase web config (public) is injected from the worker's FIREBASE_* env.
69
+ function buildPushServiceWorker(env: Record<string, string | undefined>): string {
70
+ const cfg = {
71
+ apiKey: env['FIREBASE_API_KEY'] ?? '',
72
+ authDomain: env['FIREBASE_AUTH_DOMAIN'] ?? '',
73
+ projectId: env['FIREBASE_PROJECT_ID'] ?? '',
74
+ storageBucket: env['FIREBASE_STORAGE_BUCKET'] ?? '',
75
+ messagingSenderId: env['FIREBASE_MESSAGING_SENDER_ID'] ?? '',
76
+ appId: env['FIREBASE_APP_ID'] ?? '',
77
+ };
78
+ return `importScripts('https://www.gstatic.com/firebasejs/12.2.1/firebase-app-compat.js');
79
+ importScripts('https://www.gstatic.com/firebasejs/12.2.1/firebase-messaging-compat.js');
61
80
  self.addEventListener('install', function(){ self.skipWaiting(); });
62
81
  self.addEventListener('activate', function(e){ e.waitUntil(self.clients.claim()); });
63
- self.addEventListener('push', function(event){
64
- var p = {};
65
- try { p = event.data ? event.data.json() : {}; } catch (e) { try { p = { body: event.data && event.data.text() }; } catch (e2) {} }
66
- var title = p.title || 'Notification';
67
- var opts = { body: p.body || '', data: p.data || {}, requireInteraction: true };
68
- if (p.icon) opts.icon = p.icon;
69
- event.waitUntil(self.registration.showNotification(title, opts));
70
- });
82
+
83
+ // notificationclick reuse an already-open page (monolith parity).
71
84
  self.addEventListener('notificationclick', function(event){
72
- var d = event.notification.data || {};
73
- var url = d.path || d.uri || d.url || '/';
85
+ var nd = event.notification.data || {};
86
+ var data = (nd.FCM_MSG && nd.FCM_MSG.data) ? nd.FCM_MSG.data : nd;
87
+ var url = data.path || data.uri || data.url || '/';
74
88
  event.notification.close();
75
- event.waitUntil(self.clients.matchAll({ type: 'window', includeUncontrolled: true }).then(function(list){
89
+ event.waitUntil(self.clients.matchAll({ includeUncontrolled: true, type: 'window' }).then(function(list){
76
90
  for (var i = 0; i < list.length; i++) { if (list[i].url === url && 'focus' in list[i]) return list[i].focus(); }
91
+ var c = list[0];
92
+ if (c) { c.focus(); try { c.postMessage({ func: 'appNotificationClick', data: data }); } catch (e) {} return; }
77
93
  if (self.clients.openWindow) return self.clients.openWindow(url);
78
94
  }));
79
95
  });
96
+
97
+ firebase.initializeApp(${JSON.stringify(cfg)});
98
+ firebase.messaging().onBackgroundMessage(function(payload){
99
+ var n = payload.notification || {};
100
+ var data = payload.data || {};
101
+ self.registration.showNotification(n.title || 'Notification', { body: n.body || '', data: data, requireInteraction: true });
102
+ });
80
103
  `;
104
+ }
81
105
 
82
106
  function guessContentType(path: string): string {
83
107
  const lower = path.toLowerCase();
@@ -225,7 +249,7 @@ export function wrapWithAssets(
225
249
  // ── 0. Web-push service worker (same-origin, root scope) ──────
226
250
  // Served before the SPA fallback so it isn't shadowed by the HTML shell.
227
251
  if (path === '/ugly-push-sw.js' && (method === 'GET' || method === 'HEAD')) {
228
- return new Response(PUSH_SERVICE_WORKER_JS, {
252
+ return new Response(buildPushServiceWorker(env as unknown as Record<string, string | undefined>), {
229
253
  status: 200,
230
254
  headers: {
231
255
  'content-type': 'application/javascript; charset=utf-8',