2025-01-30 08:24:34 +00:00
|
|
|
import { clientsClaim, skipWaiting } from "workbox-core";
|
2022-11-18 09:33:23 +00:00
|
|
|
import { registerRoute, Route } from "workbox-routing";
|
2025-01-30 08:24:34 +00:00
|
|
|
import { NetworkOnly } from "workbox-strategies";
|
2024-05-16 12:33:28 +00:00
|
|
|
import {
|
2024-06-14 11:00:23 +00:00
|
|
|
cachedApiUrlRegex,
|
|
|
|
|
getApplicationParamsFromUrl,
|
|
|
|
|
getPrefetchRequests,
|
|
|
|
|
PrefetchApiService,
|
2024-08-06 14:52:22 +00:00
|
|
|
} from "ee/utils/serviceWorkerUtils";
|
2024-06-14 11:00:23 +00:00
|
|
|
import type { RouteHandlerCallback } from "workbox-core/types";
|
2020-05-05 12:16:51 +00:00
|
|
|
|
2025-01-30 08:24:34 +00:00
|
|
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any
|
|
|
|
|
const wbManifest = (self as any).__WB_MANIFEST;
|
2024-06-14 11:00:23 +00:00
|
|
|
|
2025-01-30 08:24:34 +00:00
|
|
|
// Delete the old pre-fetch cache. All static files are now cached by cache control headers.
|
|
|
|
|
caches.delete("appsmith-precache-v1");
|
2022-09-05 03:24:44 +00:00
|
|
|
|
2024-08-18 09:18:08 +00:00
|
|
|
self.__WB_DISABLE_DEV_LOGS = true;
|
2020-05-05 12:16:51 +00:00
|
|
|
skipWaiting();
|
|
|
|
|
clientsClaim();
|
|
|
|
|
|
2024-06-14 11:00:23 +00:00
|
|
|
const prefetchApiService = new PrefetchApiService();
|
2024-05-16 12:33:28 +00:00
|
|
|
|
|
|
|
|
/**
|
2024-06-14 11:00:23 +00:00
|
|
|
* Route handler callback for HTML pages.
|
|
|
|
|
* This callback is responsible for prefetching the API requests for the application page.
|
2024-05-16 12:33:28 +00:00
|
|
|
*/
|
2024-06-14 11:00:23 +00:00
|
|
|
const htmlRouteHandlerCallback: RouteHandlerCallback = async ({
|
|
|
|
|
event,
|
|
|
|
|
request,
|
|
|
|
|
url,
|
|
|
|
|
}) => {
|
|
|
|
|
// Extract application params from the URL
|
|
|
|
|
const applicationParams = getApplicationParamsFromUrl(url);
|
|
|
|
|
|
|
|
|
|
// If application params are present, prefetch the API requests for the application
|
|
|
|
|
if (applicationParams) {
|
|
|
|
|
const prefetchRequests = getPrefetchRequests(applicationParams);
|
|
|
|
|
|
|
|
|
|
prefetchRequests.forEach((prefetchRequest) => {
|
|
|
|
|
prefetchApiService.cacheApi(prefetchRequest).catch(() => {
|
2024-05-16 12:33:28 +00:00
|
|
|
// Silently fail
|
|
|
|
|
});
|
2024-06-14 11:00:23 +00:00
|
|
|
});
|
2024-05-16 12:33:28 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const networkHandler = new NetworkOnly();
|
2024-09-18 16:35:28 +00:00
|
|
|
|
2024-05-16 12:33:28 +00:00
|
|
|
return networkHandler.handle({ event, request });
|
|
|
|
|
};
|
|
|
|
|
|
2022-11-18 09:33:23 +00:00
|
|
|
registerRoute(
|
2024-06-14 11:00:23 +00:00
|
|
|
new Route(({ request, sameOrigin }) => {
|
|
|
|
|
return sameOrigin && request.destination === "document";
|
|
|
|
|
}, htmlRouteHandlerCallback),
|
2024-05-16 12:33:28 +00:00
|
|
|
);
|
|
|
|
|
|
|
|
|
|
// Route for fetching the API directly
|
|
|
|
|
registerRoute(
|
2024-06-14 11:00:23 +00:00
|
|
|
// Intercept requests to the consolidated API and module instances API
|
|
|
|
|
cachedApiUrlRegex,
|
2024-05-16 12:33:28 +00:00
|
|
|
async ({ event, request }) => {
|
|
|
|
|
// Check for cached response
|
2024-06-14 11:00:23 +00:00
|
|
|
const cachedResponse = await prefetchApiService.getCachedResponse(request);
|
2024-05-16 12:33:28 +00:00
|
|
|
|
|
|
|
|
// If the response is cached, return the response
|
|
|
|
|
if (cachedResponse) {
|
|
|
|
|
return cachedResponse;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// If the response is not cached, fetch the response
|
|
|
|
|
const networkHandler = new NetworkOnly();
|
2024-09-18 16:35:28 +00:00
|
|
|
|
2024-05-16 12:33:28 +00:00
|
|
|
return networkHandler.handle({ event, request });
|
|
|
|
|
},
|
|
|
|
|
"GET",
|
2022-11-18 09:33:23 +00:00
|
|
|
);
|