@rpcbase/client 0.471.0 → 0.473.0
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/browserNotifications.d.ts +1 -2
- package/dist/browserNotifications.d.ts.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +91 -33
- package/dist/index.js.map +1 -1
- package/dist/initWithRoutes.d.ts.map +1 -1
- package/dist/instrument.js +1 -1
- package/dist/instrument.js.map +1 -1
- package/dist/notificationsRealtime.d.ts.map +1 -1
- package/dist/serviceWorker.d.ts +13 -0
- package/dist/serviceWorker.d.ts.map +1 -0
- package/package.json +1 -1
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
export type BrowserNotificationInput = {
|
|
2
2
|
title: string;
|
|
3
3
|
options?: NotificationOptions;
|
|
4
|
-
onClick?: () => void;
|
|
5
4
|
};
|
|
6
5
|
export declare const canShowBrowserNotification: () => boolean;
|
|
7
|
-
export declare const showBrowserNotification: ({ title, options,
|
|
6
|
+
export declare const showBrowserNotification: ({ title, options, }: BrowserNotificationInput) => Promise<boolean>;
|
|
8
7
|
//# sourceMappingURL=browserNotifications.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browserNotifications.d.ts","sourceRoot":"","sources":["../src/browserNotifications.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"browserNotifications.d.ts","sourceRoot":"","sources":["../src/browserNotifications.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,wBAAwB,GAAG;IACrC,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,mBAAmB,CAAA;CAC9B,CAAA;AAED,eAAO,MAAM,0BAA0B,QAAO,OAI7C,CAAA;AAED,eAAO,MAAM,uBAAuB,GAAU,qBAG3C,wBAAwB,KAAG,OAAO,CAAC,OAAO,CAY5C,CAAA"}
|
package/dist/index.d.ts
CHANGED
|
@@ -10,6 +10,7 @@ export * from './components/SsrErrorFallback';
|
|
|
10
10
|
export * from './components/RouteErrorBoundary';
|
|
11
11
|
export * from './notifications';
|
|
12
12
|
export * from './notificationsRealtime';
|
|
13
|
+
export * from './serviceWorker';
|
|
13
14
|
export * from './errorReporting';
|
|
14
15
|
export { STATIC_RPCBASE_RTS_HYDRATION_DATA_KEY, RtsSsrRuntimeProvider, clearHydratedRtsQueryData, consumeHydratedRtsCount, hydrateRtsFromWindow, peekHydratedRtsCount, peekHydratedRtsQueryData, peekHydratedRtsQueryPageInfo, peekHydratedRtsQueryTotalCount, type RtsSsrCountRegistration, type RtsSsrHydrationCountData, type RtsSsrHydrationQueryData, type RtsSsrQueryRegistration, type RtsSsrRuntime, type StaticRpcbaseRtsHydrationData, } from './rts/ssrHydration';
|
|
15
16
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAE/B,cAAc,aAAa,CAAA;AAC3B,cAAc,kBAAkB,CAAA;AAChC,cAAc,SAAS,CAAA;AACvB,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,SAAS,CAAA;AACvB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,+BAA+B,CAAA;AAC7C,cAAc,iCAAiC,CAAA;AAC/C,cAAc,iBAAiB,CAAA;AAC/B,cAAc,yBAAyB,CAAA;AACvC,cAAc,kBAAkB,CAAA;AAChC,OAAO,EACL,qCAAqC,EACrC,qBAAqB,EACrB,yBAAyB,EACzB,uBAAuB,EACvB,oBAAoB,EACpB,oBAAoB,EACpB,wBAAwB,EACxB,4BAA4B,EAC5B,8BAA8B,EAC9B,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAC5B,KAAK,aAAa,EAClB,KAAK,6BAA6B,GACnC,MAAM,oBAAoB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAE/B,cAAc,aAAa,CAAA;AAC3B,cAAc,kBAAkB,CAAA;AAChC,cAAc,SAAS,CAAA;AACvB,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,SAAS,CAAA;AACvB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,+BAA+B,CAAA;AAC7C,cAAc,iCAAiC,CAAA;AAC/C,cAAc,iBAAiB,CAAA;AAC/B,cAAc,yBAAyB,CAAA;AACvC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,kBAAkB,CAAA;AAChC,OAAO,EACL,qCAAqC,EACrC,qBAAqB,EACrB,yBAAyB,EACzB,uBAAuB,EACvB,oBAAoB,EACpB,oBAAoB,EACpB,wBAAwB,EACxB,4BAA4B,EAC5B,8BAA8B,EAC9B,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAC5B,KAAK,aAAa,EAClB,KAAK,6BAA6B,GACnC,MAAM,oBAAoB,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -589,6 +589,88 @@ var installGlobalNavigationGuard = (router) => {
|
|
|
589
589
|
}
|
|
590
590
|
};
|
|
591
591
|
//#endregion
|
|
592
|
+
//#region src/serviceWorker.ts
|
|
593
|
+
var RPCBASE_SERVICE_WORKER_PATH = "/rpcbase-service-worker.js";
|
|
594
|
+
var RPCBASE_SERVICE_WORKER_SCOPE = "/";
|
|
595
|
+
var RPCBASE_SERVICE_WORKER_MESSAGE_SOURCE = "@rpcbase/service-worker";
|
|
596
|
+
var SERVICE_WORKER_ACTIVATION_TIMEOUT_MS = 5e3;
|
|
597
|
+
var registrationPromise;
|
|
598
|
+
var registrationScheduled = false;
|
|
599
|
+
var waitForActiveRegistration = (registration) => {
|
|
600
|
+
const worker = registration.installing ?? registration.waiting;
|
|
601
|
+
if (!worker) return Promise.resolve(registration.active ? registration : null);
|
|
602
|
+
if (worker.state === "activated") return Promise.resolve(registration);
|
|
603
|
+
return new Promise((resolve) => {
|
|
604
|
+
let settled = false;
|
|
605
|
+
let timeoutId = 0;
|
|
606
|
+
const finish = (result) => {
|
|
607
|
+
if (settled) return;
|
|
608
|
+
settled = true;
|
|
609
|
+
window.clearTimeout(timeoutId);
|
|
610
|
+
worker.removeEventListener("statechange", handleStateChange);
|
|
611
|
+
resolve(result);
|
|
612
|
+
};
|
|
613
|
+
const handleStateChange = () => {
|
|
614
|
+
if (worker.state === "activated" || registration.active === worker) {
|
|
615
|
+
finish(registration);
|
|
616
|
+
return;
|
|
617
|
+
}
|
|
618
|
+
if (worker.state === "redundant") finish(null);
|
|
619
|
+
};
|
|
620
|
+
timeoutId = window.setTimeout(() => finish(null), SERVICE_WORKER_ACTIVATION_TIMEOUT_MS);
|
|
621
|
+
worker.addEventListener("statechange", handleStateChange);
|
|
622
|
+
handleStateChange();
|
|
623
|
+
});
|
|
624
|
+
};
|
|
625
|
+
var hasServiceWorkerSupport = () => typeof window !== "undefined" && typeof navigator !== "undefined" && typeof navigator.serviceWorker?.register === "function";
|
|
626
|
+
var registerRpcbaseServiceWorker = () => {
|
|
627
|
+
if (!hasServiceWorkerSupport()) return Promise.resolve(null);
|
|
628
|
+
if (registrationPromise) return registrationPromise;
|
|
629
|
+
registrationPromise = navigator.serviceWorker.register(RPCBASE_SERVICE_WORKER_PATH, { scope: "/" }).then(waitForActiveRegistration).catch(() => null).then((registration) => {
|
|
630
|
+
if (!registration) registrationPromise = void 0;
|
|
631
|
+
return registration;
|
|
632
|
+
});
|
|
633
|
+
return registrationPromise;
|
|
634
|
+
};
|
|
635
|
+
var scheduleRpcbaseServiceWorkerRegistration = () => {
|
|
636
|
+
if (!hasServiceWorkerSupport() || registrationScheduled) return;
|
|
637
|
+
registrationScheduled = true;
|
|
638
|
+
const register = () => {
|
|
639
|
+
registerRpcbaseServiceWorker();
|
|
640
|
+
};
|
|
641
|
+
if (document.readyState === "complete") {
|
|
642
|
+
window.setTimeout(register, 0);
|
|
643
|
+
return;
|
|
644
|
+
}
|
|
645
|
+
window.addEventListener("load", register, { once: true });
|
|
646
|
+
};
|
|
647
|
+
var sendRpcbaseServiceWorkerMessage = async (type, payload) => {
|
|
648
|
+
const normalizedType = type.trim();
|
|
649
|
+
if (!normalizedType) return false;
|
|
650
|
+
const registration = await registerRpcbaseServiceWorker();
|
|
651
|
+
const worker = registration?.active ?? registration?.waiting ?? registration?.installing;
|
|
652
|
+
if (!worker) return false;
|
|
653
|
+
const message = {
|
|
654
|
+
source: RPCBASE_SERVICE_WORKER_MESSAGE_SOURCE,
|
|
655
|
+
type: normalizedType,
|
|
656
|
+
...payload === void 0 ? {} : { payload }
|
|
657
|
+
};
|
|
658
|
+
worker.postMessage(message);
|
|
659
|
+
return true;
|
|
660
|
+
};
|
|
661
|
+
var subscribeRpcbaseServiceWorkerMessages = (type, listener) => {
|
|
662
|
+
const serviceWorker = typeof navigator === "undefined" ? void 0 : navigator.serviceWorker;
|
|
663
|
+
if (!serviceWorker || typeof serviceWorker.addEventListener !== "function") return () => void 0;
|
|
664
|
+
const handleMessage = (event) => {
|
|
665
|
+
if (!event.data || typeof event.data !== "object") return;
|
|
666
|
+
const message = event.data;
|
|
667
|
+
if (message.source !== "@rpcbase/service-worker" || message.type !== type) return;
|
|
668
|
+
listener(message.payload, message);
|
|
669
|
+
};
|
|
670
|
+
serviceWorker.addEventListener("message", handleMessage);
|
|
671
|
+
return () => serviceWorker.removeEventListener("message", handleMessage);
|
|
672
|
+
};
|
|
673
|
+
//#endregion
|
|
592
674
|
//#region src/ssrErrorState.ts
|
|
593
675
|
var SSR_ERROR_STATE_GLOBAL_KEY = "__RPCBASE_SSR_ERROR__";
|
|
594
676
|
var ESCAPED_LT = /</g;
|
|
@@ -839,6 +921,7 @@ var ClientOnly = (t0) => {
|
|
|
839
921
|
};
|
|
840
922
|
var initWithRoutes = async (routesElement, opts) => {
|
|
841
923
|
const rootElement = getRootElement();
|
|
924
|
+
scheduleRpcbaseServiceWorkerRegistration();
|
|
842
925
|
if (hydrateSsrFallbackIfPresent(rootElement, opts?.renderErrorExtra)) return;
|
|
843
926
|
await initApiClient();
|
|
844
927
|
cleanupURL();
|
|
@@ -2231,38 +2314,20 @@ var runNotificationDigest = async ({ force = false } = {}) => {
|
|
|
2231
2314
|
};
|
|
2232
2315
|
//#endregion
|
|
2233
2316
|
//#region src/browserNotifications.ts
|
|
2234
|
-
var getActiveServiceWorkerRegistration = async () => {
|
|
2235
|
-
if (typeof navigator === "undefined") return null;
|
|
2236
|
-
const serviceWorker = navigator.serviceWorker;
|
|
2237
|
-
if (!serviceWorker || typeof serviceWorker.getRegistration !== "function") return null;
|
|
2238
|
-
try {
|
|
2239
|
-
const registration = await serviceWorker.getRegistration();
|
|
2240
|
-
if (!registration?.active) return null;
|
|
2241
|
-
return typeof registration.showNotification === "function" ? registration : null;
|
|
2242
|
-
} catch {
|
|
2243
|
-
return null;
|
|
2244
|
-
}
|
|
2245
|
-
};
|
|
2246
2317
|
var canShowBrowserNotification = () => {
|
|
2247
2318
|
if (typeof window === "undefined") return false;
|
|
2248
2319
|
if (!("Notification" in window)) return false;
|
|
2249
2320
|
return window.Notification.permission === "granted";
|
|
2250
2321
|
};
|
|
2251
|
-
var showBrowserNotification = async ({ title, options
|
|
2322
|
+
var showBrowserNotification = async ({ title, options }) => {
|
|
2252
2323
|
if (!canShowBrowserNotification()) return false;
|
|
2324
|
+
const registration = await registerRpcbaseServiceWorker();
|
|
2325
|
+
if (typeof registration?.showNotification !== "function") return false;
|
|
2253
2326
|
try {
|
|
2254
|
-
|
|
2255
|
-
if (onClick) browserNotification.onclick = onClick;
|
|
2327
|
+
await registration.showNotification(title, options);
|
|
2256
2328
|
return true;
|
|
2257
2329
|
} catch {
|
|
2258
|
-
|
|
2259
|
-
if (!registration) return false;
|
|
2260
|
-
try {
|
|
2261
|
-
await registration.showNotification(title, options);
|
|
2262
|
-
return true;
|
|
2263
|
-
} catch {
|
|
2264
|
-
return false;
|
|
2265
|
-
}
|
|
2330
|
+
return false;
|
|
2266
2331
|
}
|
|
2267
2332
|
};
|
|
2268
2333
|
//#endregion
|
|
@@ -2784,10 +2849,6 @@ var sortNotificationsByCreatedAt = (items) => [...items].sort((a, b) => {
|
|
|
2784
2849
|
const bMs = Date.parse(b.createdAt);
|
|
2785
2850
|
return (Number.isFinite(aMs) ? aMs : 0) - (Number.isFinite(bMs) ? bMs : 0);
|
|
2786
2851
|
});
|
|
2787
|
-
var focusNotificationAction = (action) => {
|
|
2788
|
-
window.focus();
|
|
2789
|
-
if (action) applyNotificationAction(action);
|
|
2790
|
-
};
|
|
2791
2852
|
var getNativeNotificationOptions = (item) => {
|
|
2792
2853
|
const action = getNotificationAction(item);
|
|
2793
2854
|
return {
|
|
@@ -2803,11 +2864,9 @@ var getNativeNotificationOptions = (item) => {
|
|
|
2803
2864
|
};
|
|
2804
2865
|
};
|
|
2805
2866
|
var showNativeNotification = async (item) => {
|
|
2806
|
-
const action = getNotificationAction(item);
|
|
2807
2867
|
return showBrowserNotification({
|
|
2808
2868
|
title: item.title,
|
|
2809
|
-
options: getNativeNotificationOptions(item)
|
|
2810
|
-
onClick: () => focusNotificationAction(action)
|
|
2869
|
+
options: getNativeNotificationOptions(item)
|
|
2811
2870
|
});
|
|
2812
2871
|
};
|
|
2813
2872
|
var showNativeNotifications = async (items) => {
|
|
@@ -2817,8 +2876,7 @@ var showNativeNotifications = async (items) => {
|
|
|
2817
2876
|
options: {
|
|
2818
2877
|
body: "Open the notifications drawer to view them.",
|
|
2819
2878
|
tag: `${NATIVE_NOTIFICATION_TAG_PREFIX}:summary`
|
|
2820
|
-
}
|
|
2821
|
-
onClick: () => focusNotificationAction(null)
|
|
2879
|
+
}
|
|
2822
2880
|
}) ? items : [];
|
|
2823
2881
|
const shownItems = [];
|
|
2824
2882
|
for (const item of items) if (await showNativeNotification(item)) shownItems.push(item);
|
|
@@ -3285,6 +3343,6 @@ var useNotificationsRealtime = () => {
|
|
|
3285
3343
|
return useContext(NotificationsRealtimeContext);
|
|
3286
3344
|
};
|
|
3287
3345
|
//#endregion
|
|
3288
|
-
export { NotificationsRealtimeContext, NotificationsRealtimeProvider, RootProvider, RouteErrorBoundary, RtsSsrRuntimeProvider, SSR_ERROR_STATE_GLOBAL_KEY, STATIC_RPCBASE_RTS_HYDRATION_DATA_KEY, SsrErrorFallback, apiClient, archiveNotification, clearHydratedRtsQueryData, consumeClientSsrErrorState, consumeHydratedRtsCount, getFeatureFlag, getNotificationSettings, hydrateRtsFromWindow, initApiClient, initWithRoutes, listNotifications, markAllNotificationsRead, markNotificationRead, markNotificationsReadByUrl, peekClientSsrErrorState, peekHydratedRtsCount, peekHydratedRtsQueryData, peekHydratedRtsQueryPageInfo, peekHydratedRtsQueryTotalCount, reportClientException, runNotificationDigest, serializeSsrErrorState, setClientExceptionReporter, toast, updateNotificationSettings, useMediaQuery, useNotificationsRealtime, useThrottledMeasure };
|
|
3346
|
+
export { NotificationsRealtimeContext, NotificationsRealtimeProvider, RPCBASE_SERVICE_WORKER_MESSAGE_SOURCE, RPCBASE_SERVICE_WORKER_PATH, RPCBASE_SERVICE_WORKER_SCOPE, RootProvider, RouteErrorBoundary, RtsSsrRuntimeProvider, SSR_ERROR_STATE_GLOBAL_KEY, STATIC_RPCBASE_RTS_HYDRATION_DATA_KEY, SsrErrorFallback, apiClient, archiveNotification, clearHydratedRtsQueryData, consumeClientSsrErrorState, consumeHydratedRtsCount, getFeatureFlag, getNotificationSettings, hydrateRtsFromWindow, initApiClient, initWithRoutes, listNotifications, markAllNotificationsRead, markNotificationRead, markNotificationsReadByUrl, peekClientSsrErrorState, peekHydratedRtsCount, peekHydratedRtsQueryData, peekHydratedRtsQueryPageInfo, peekHydratedRtsQueryTotalCount, registerRpcbaseServiceWorker, reportClientException, runNotificationDigest, scheduleRpcbaseServiceWorkerRegistration, sendRpcbaseServiceWorkerMessage, serializeSsrErrorState, setClientExceptionReporter, subscribeRpcbaseServiceWorkerMessages, toast, updateNotificationSettings, useMediaQuery, useNotificationsRealtime, useThrottledMeasure };
|
|
3289
3347
|
|
|
3290
3348
|
//# sourceMappingURL=index.js.map
|