@mercuryworkshop/proxy-bootstrap 0.0.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.
Files changed (102) hide show
  1. package/dist/.downloads/controller/package/dist/controller.api.js +44 -0
  2. package/dist/.downloads/controller/package/dist/controller.api.js.map +1 -0
  3. package/dist/.downloads/controller/package/dist/controller.inject.js +2 -0
  4. package/dist/.downloads/controller/package/dist/controller.inject.js.map +1 -0
  5. package/dist/.downloads/controller/package/dist/controller.sw.js +2 -0
  6. package/dist/.downloads/controller/package/dist/controller.sw.js.map +1 -0
  7. package/dist/.downloads/controller/package/dist/types/cache.d.ts +39 -0
  8. package/dist/.downloads/controller/package/dist/types/index.d.ts +74 -0
  9. package/dist/.downloads/controller/package/dist/types/inject.d.ts +16 -0
  10. package/dist/.downloads/controller/package/dist/types/sw.d.ts +2 -0
  11. package/dist/.downloads/controller/package/dist/types/symbols.d.ts +1 -0
  12. package/dist/.downloads/controller/package/dist/types/typesEntry.d.ts +5 -0
  13. package/dist/.downloads/controller/package/package.json +16 -0
  14. package/dist/.downloads/controller/package/src/cache.ts +473 -0
  15. package/dist/.downloads/controller/package/src/index.ts +809 -0
  16. package/dist/.downloads/controller/package/src/inject.ts +370 -0
  17. package/dist/.downloads/controller/package/src/sw.ts +231 -0
  18. package/dist/.downloads/controller/package/src/symbols.ts +1 -0
  19. package/dist/.downloads/controller/package/src/types.d.ts +139 -0
  20. package/dist/.downloads/controller/package/src/typesEntry.ts +6 -0
  21. package/dist/.downloads/controller/package/tsconfig.json +24 -0
  22. package/dist/.downloads/controller/package/tsconfig.types.json +16 -0
  23. package/dist/.downloads/libcurl-transport/package/LICENSE +661 -0
  24. package/dist/.downloads/libcurl-transport/package/README.md +52 -0
  25. package/dist/.downloads/libcurl-transport/package/dist/index.d.ts +25 -0
  26. package/dist/.downloads/libcurl-transport/package/dist/index.js +6500 -0
  27. package/dist/.downloads/libcurl-transport/package/dist/index.mjs +6481 -0
  28. package/dist/.downloads/libcurl-transport/package/package.json +37 -0
  29. package/dist/.downloads/scramjet/package/dist/167400cb144aab22.wasm +0 -0
  30. package/dist/.downloads/scramjet/package/dist/2919e49b986edf8c.wasm +0 -0
  31. package/dist/.downloads/scramjet/package/dist/5aed1d5e48aab205.wasm +0 -0
  32. package/dist/.downloads/scramjet/package/dist/882d77912a3c8e3a.wasm +0 -0
  33. package/dist/.downloads/scramjet/package/dist/ac6aa30297a80464.wasm +0 -0
  34. package/dist/.downloads/scramjet/package/dist/c10a57758af882c8.wasm +0 -0
  35. package/dist/.downloads/scramjet/package/dist/cfd04aaae6955b67.wasm +0 -0
  36. package/dist/.downloads/scramjet/package/dist/d06a90fd413b36cf.wasm +0 -0
  37. package/dist/.downloads/scramjet/package/dist/dda06914899a6c28.wasm +0 -0
  38. package/dist/.downloads/scramjet/package/dist/scramjet.js +34 -0
  39. package/dist/.downloads/scramjet/package/dist/scramjet.js.map +1 -0
  40. package/dist/.downloads/scramjet/package/dist/scramjet.mjs +34 -0
  41. package/dist/.downloads/scramjet/package/dist/scramjet.mjs.map +1 -0
  42. package/dist/.downloads/scramjet/package/dist/scramjet.wasm +0 -0
  43. package/dist/.downloads/scramjet/package/dist/scramjet_bundled.js +34 -0
  44. package/dist/.downloads/scramjet/package/dist/scramjet_bundled.js.map +1 -0
  45. package/dist/.downloads/scramjet/package/dist/scramjet_bundled.mjs +34 -0
  46. package/dist/.downloads/scramjet/package/dist/scramjet_bundled.mjs.map +1 -0
  47. package/dist/.downloads/scramjet/package/dist/types/Tap.d.ts +32 -0
  48. package/dist/.downloads/scramjet/package/dist/types/client/client.d.ts +115 -0
  49. package/dist/.downloads/scramjet/package/dist/types/client/entry.d.ts +5 -0
  50. package/dist/.downloads/scramjet/package/dist/types/client/events.d.ts +10 -0
  51. package/dist/.downloads/scramjet/package/dist/types/client/global.d.ts +4 -0
  52. package/dist/.downloads/scramjet/package/dist/types/client/helpers.d.ts +1 -0
  53. package/dist/.downloads/scramjet/package/dist/types/client/index.d.ts +7 -0
  54. package/dist/.downloads/scramjet/package/dist/types/client/location.d.ts +2 -0
  55. package/dist/.downloads/scramjet/package/dist/types/client/shared/eval.d.ts +3 -0
  56. package/dist/.downloads/scramjet/package/dist/types/client/shared/sourcemaps.d.ts +19 -0
  57. package/dist/.downloads/scramjet/package/dist/types/client/shared/unproxy.d.ts +19 -0
  58. package/dist/.downloads/scramjet/package/dist/types/client/shared/wrap.d.ts +4 -0
  59. package/dist/.downloads/scramjet/package/dist/types/client/singletonbox.d.ts +16 -0
  60. package/dist/.downloads/scramjet/package/dist/types/client/unproxy.generated.d.ts +50 -0
  61. package/dist/.downloads/scramjet/package/dist/types/fetch/body.d.ts +3 -0
  62. package/dist/.downloads/scramjet/package/dist/types/fetch/fetch.d.ts +7 -0
  63. package/dist/.downloads/scramjet/package/dist/types/fetch/headers.d.ts +19 -0
  64. package/dist/.downloads/scramjet/package/dist/types/fetch/index.d.ts +128 -0
  65. package/dist/.downloads/scramjet/package/dist/types/fetch/parse.d.ts +22 -0
  66. package/dist/.downloads/scramjet/package/dist/types/fetch/util.d.ts +7 -0
  67. package/dist/.downloads/scramjet/package/dist/types/index.d.ts +11 -0
  68. package/dist/.downloads/scramjet/package/dist/types/shared/cookie.d.ts +26 -0
  69. package/dist/.downloads/scramjet/package/dist/types/shared/headers.d.ts +13 -0
  70. package/dist/.downloads/scramjet/package/dist/types/shared/htmlRules.d.ts +6 -0
  71. package/dist/.downloads/scramjet/package/dist/types/shared/index.d.ts +51 -0
  72. package/dist/.downloads/scramjet/package/dist/types/shared/mime.d.ts +39 -0
  73. package/dist/.downloads/scramjet/package/dist/types/shared/refresh.d.ts +7 -0
  74. package/dist/.downloads/scramjet/package/dist/types/shared/rewriters/css.d.ts +4 -0
  75. package/dist/.downloads/scramjet/package/dist/types/shared/rewriters/html.d.ts +33 -0
  76. package/dist/.downloads/scramjet/package/dist/types/shared/rewriters/index.d.ts +6 -0
  77. package/dist/.downloads/scramjet/package/dist/types/shared/rewriters/js.d.ts +11 -0
  78. package/dist/.downloads/scramjet/package/dist/types/shared/rewriters/url.d.ts +25 -0
  79. package/dist/.downloads/scramjet/package/dist/types/shared/rewriters/wasm.d.ts +7 -0
  80. package/dist/.downloads/scramjet/package/dist/types/shared/rewriters/worker.d.ts +3 -0
  81. package/dist/.downloads/scramjet/package/dist/types/shared/set-cookie-parser.d.ts +20 -0
  82. package/dist/.downloads/scramjet/package/dist/types/shared/snapshot.d.ts +236 -0
  83. package/dist/.downloads/scramjet/package/dist/types/shared/sniffEncoding.d.ts +65 -0
  84. package/dist/.downloads/scramjet/package/dist/types/shared/util.d.ts +2 -0
  85. package/dist/.downloads/scramjet/package/dist/types/symbols.d.ts +6 -0
  86. package/dist/.downloads/scramjet/package/dist/types/types.d.ts +68 -0
  87. package/dist/.downloads/scramjet/package/lib/index.cjs +7 -0
  88. package/dist/.downloads/scramjet/package/lib/index.d.ts +8 -0
  89. package/dist/.downloads/scramjet/package/lib/types.d.ts +20 -0
  90. package/dist/.downloads/scramjet/package/package.json +93 -0
  91. package/dist/bootstrap-client.js +169 -0
  92. package/dist/bootstrap-client.js.map +1 -0
  93. package/dist/bootstrap-server.js +406 -0
  94. package/dist/bootstrap-server.js.map +1 -0
  95. package/dist/bootstrap-static.js +476 -0
  96. package/dist/bootstrap-static.js.map +1 -0
  97. package/dist/types/client.d.ts +4 -0
  98. package/dist/types/clientcommon.d.ts +2 -0
  99. package/dist/types/common.d.ts +30 -0
  100. package/dist/types/server.d.ts +24 -0
  101. package/dist/types/static.d.ts +1 -0
  102. package/package.json +30 -0
@@ -0,0 +1,476 @@
1
+ (() => { // webpackBootstrap
2
+ var __webpack_modules__ = ({
3
+ "./packages/scramjet/packages/bootstrap/src/client.ts":
4
+ /*!************************************************************!*\
5
+ !*** ./packages/scramjet/packages/bootstrap/src/client.ts ***!
6
+ \************************************************************/
7
+ (function (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
8
+ __webpack_require__.r(__webpack_exports__);
9
+ __webpack_require__.d(__webpack_exports__, {
10
+ init: () => (init),
11
+ loadRest: () => (loadRest)
12
+ });
13
+ /* ESM import */var _clientcommon__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./clientcommon */ "./packages/scramjet/packages/bootstrap/src/clientcommon.ts");
14
+
15
+ async function init(cfg) {
16
+ const sw = await (0,_clientcommon__WEBPACK_IMPORTED_MODULE_0__.registerSw)(cfg.swPath);
17
+ return await loadRest(sw, cfg);
18
+ }
19
+ async function loadRest(sw, cfg) {
20
+ await (0,_clientcommon__WEBPACK_IMPORTED_MODULE_0__.loadScript)(cfg.scramjetBundlePath);
21
+ await (0,_clientcommon__WEBPACK_IMPORTED_MODULE_0__.loadScript)(cfg.scramjetControllerApiPath);
22
+ const resolvedWispPath = `${location.protocol === "https:" ? "wss:" : "ws:"}//${location.host}${cfg.wispPath}`;
23
+ let transport;
24
+ if (cfg.transport === "epoxy") {
25
+ await (0,_clientcommon__WEBPACK_IMPORTED_MODULE_0__.loadScript)(cfg.epoxyClientPath);
26
+ const EpoxyCtor = window.EpoxyTransport.EpoxyClient;
27
+ transport = new EpoxyCtor({
28
+ wisp: resolvedWispPath
29
+ });
30
+ } else if (cfg.transport === "libcurl") {
31
+ await (0,_clientcommon__WEBPACK_IMPORTED_MODULE_0__.loadScript)(cfg.libcurlClientPath);
32
+ const LibcurlCtor = window.LibcurlTransport.LibcurlClient;
33
+ transport = new LibcurlCtor({
34
+ wisp: resolvedWispPath
35
+ });
36
+ } else if (cfg.transport === "bare") {
37
+ throw new Error("Bare transport not implemented yet");
38
+ //...
39
+ }
40
+ const { Controller, config } = window.$scramjetController;
41
+ config.injectPath = cfg.scramjetControllerInjectPath;
42
+ config.wasmPath = cfg.scramjetWasmPath;
43
+ config.scramjetPath = cfg.scramjetBundlePath;
44
+ const controller = new Controller({
45
+ serviceworker: sw,
46
+ transport
47
+ });
48
+ return controller;
49
+ }
50
+
51
+
52
+ }),
53
+ "./packages/scramjet/packages/bootstrap/src/clientcommon.ts":
54
+ /*!******************************************************************!*\
55
+ !*** ./packages/scramjet/packages/bootstrap/src/clientcommon.ts ***!
56
+ \******************************************************************/
57
+ (function (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
58
+ __webpack_require__.r(__webpack_exports__);
59
+ __webpack_require__.d(__webpack_exports__, {
60
+ loadScript: () => (loadScript),
61
+ registerSw: () => (registerSw)
62
+ });
63
+ async function registerSw(path) {
64
+ const registration = await navigator.serviceWorker.register(path, {
65
+ type: "classic",
66
+ updateViaCache: "none"
67
+ });
68
+ await navigator.serviceWorker.ready;
69
+ if (registration.active) {
70
+ return registration.active;
71
+ }
72
+ if (registration.installing) {
73
+ await new Promise((resolve)=>{
74
+ const sw = registration.installing;
75
+ if (sw.state === "activated") {
76
+ resolve();
77
+ } else {
78
+ sw.addEventListener("statechange", function onChange() {
79
+ if (sw.state === "activated") {
80
+ sw.removeEventListener("statechange", onChange);
81
+ resolve();
82
+ }
83
+ });
84
+ }
85
+ });
86
+ return registration.active;
87
+ }
88
+ if (registration.waiting) {
89
+ await new Promise((resolve)=>{
90
+ navigator.serviceWorker.addEventListener("controllerchange", ()=>{
91
+ resolve();
92
+ }, {
93
+ once: true
94
+ });
95
+ });
96
+ return navigator.serviceWorker.controller;
97
+ }
98
+ throw new Error("No service worker found in registration");
99
+ }
100
+ function loadScript(url) {
101
+ return new Promise((resolve, reject)=>{
102
+ const script = document.createElement("script");
103
+ script.src = url;
104
+ script.onload = ()=>resolve();
105
+ script.onerror = ()=>reject(new Error("Failed to load script " + url));
106
+ document.head.appendChild(script);
107
+ });
108
+ }
109
+
110
+
111
+ }),
112
+ "./packages/scramjet/packages/bootstrap/src/common.ts":
113
+ /*!************************************************************!*\
114
+ !*** ./packages/scramjet/packages/bootstrap/src/common.ts ***!
115
+ \************************************************************/
116
+ (function (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
117
+ __webpack_require__.r(__webpack_exports__);
118
+ __webpack_require__.d(__webpack_exports__, {
119
+ EPOXY_TRANSPORT_PACKAGE_NAME: () => (EPOXY_TRANSPORT_PACKAGE_NAME),
120
+ EPOXY_TRANSPORT_PINNED_MAJOR_VERSION: () => (EPOXY_TRANSPORT_PINNED_MAJOR_VERSION),
121
+ LIBCURL_TRANSPORT_PACKAGE_NAME: () => (LIBCURL_TRANSPORT_PACKAGE_NAME),
122
+ LIBCURL_TRANSPORT_PINNED_MAJOR_VERSION: () => (LIBCURL_TRANSPORT_PINNED_MAJOR_VERSION),
123
+ REGISTRY_URL: () => (REGISTRY_URL),
124
+ SCRAMJET_CONTROLLER_PACKAGE_NAME: () => (SCRAMJET_CONTROLLER_PACKAGE_NAME),
125
+ SCRAMJET_CONTROLLER_PINNED_MAJOR_VERSION: () => (SCRAMJET_CONTROLLER_PINNED_MAJOR_VERSION),
126
+ SCRAMJET_PACKAGE_NAME: () => (SCRAMJET_PACKAGE_NAME),
127
+ defaultConfig: () => (defaultConfig)
128
+ });
129
+ const REGISTRY_URL = "https://registry.npmjs.org/";
130
+ const SCRAMJET_PACKAGE_NAME = "@mercuryworkshop/scramjet";
131
+ const SCRAMJET_CONTROLLER_PACKAGE_NAME = "@mercuryworkshop/scramjet-controller";
132
+ const SCRAMJET_CONTROLLER_PINNED_MAJOR_VERSION = "0";
133
+ const EPOXY_TRANSPORT_PACKAGE_NAME = "@mercuryworkshop/epoxy-transport";
134
+ const EPOXY_TRANSPORT_PINNED_MAJOR_VERSION = "3";
135
+ const LIBCURL_TRANSPORT_PACKAGE_NAME = "@mercuryworkshop/libcurl-transport";
136
+ const LIBCURL_TRANSPORT_PINNED_MAJOR_VERSION = "2";
137
+ const defaultConfig = {
138
+ transport: "libcurl",
139
+ swPath: "/sw.js",
140
+ wispPath: "/wisp/",
141
+ epoxyClientPath: "/clients/epoxy-client.js",
142
+ libcurlClientPath: "/clients/libcurl-client.js",
143
+ bareClientPath: "/clients/bare-client.js",
144
+ bootstrapInitPath: "/bootstrap-init.js",
145
+ scramjetControllerApiPath: "/controller/controller.api.js",
146
+ scramjetControllerInjectPath: "/controller/controller.inject.js",
147
+ scramjetControllerSwPath: "/controller/controller.sw.js",
148
+ scramjetBundlePath: "/scram/scramjet.js",
149
+ scramjetWasmPath: "/scram/scramjet.wasm"
150
+ };
151
+
152
+
153
+ }),
154
+
155
+ });
156
+ /************************************************************************/
157
+ // The module cache
158
+ var __webpack_module_cache__ = {};
159
+
160
+ // The require function
161
+ function __webpack_require__(moduleId) {
162
+
163
+ // Check if module is in cache
164
+ var cachedModule = __webpack_module_cache__[moduleId];
165
+ if (cachedModule !== undefined) {
166
+ return cachedModule.exports;
167
+ }
168
+ // Create a new module (and put it into the cache)
169
+ var module = (__webpack_module_cache__[moduleId] = {
170
+ exports: {}
171
+ });
172
+ // Execute the module function
173
+ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
174
+
175
+ // Return the exports of the module
176
+ return module.exports;
177
+
178
+ }
179
+
180
+ /************************************************************************/
181
+ // webpack/runtime/define_property_getters
182
+ (() => {
183
+ __webpack_require__.d = (exports, definition) => {
184
+ for(var key in definition) {
185
+ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
186
+ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
187
+ }
188
+ }
189
+ };
190
+ })();
191
+ // webpack/runtime/has_own_property
192
+ (() => {
193
+ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
194
+ })();
195
+ // webpack/runtime/make_namespace_object
196
+ (() => {
197
+ // define __esModule on exports
198
+ __webpack_require__.r = (exports) => {
199
+ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
200
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
201
+ }
202
+ Object.defineProperty(exports, '__esModule', { value: true });
203
+ };
204
+ })();
205
+ // webpack/runtime/rspack_version
206
+ (() => {
207
+ __webpack_require__.rv = () => ("1.5.8")
208
+ })();
209
+ // webpack/runtime/rspack_unique_id
210
+ (() => {
211
+ __webpack_require__.ruid = "bundler=rspack@1.5.8";
212
+
213
+ })();
214
+ /************************************************************************/
215
+ var __webpack_exports__ = {};
216
+ // This entry needs to be wrapped in an IIFE because it needs to be isolated against other modules in the chunk.
217
+ (() => {
218
+
219
+ /*!************************************************************!*\
220
+ !*** ./packages/scramjet/packages/bootstrap/src/static.ts ***!
221
+ \************************************************************/
222
+ __webpack_require__.r(__webpack_exports__);
223
+ /* ESM import */var _client__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./client */ "./packages/scramjet/packages/bootstrap/src/client.ts");
224
+ /* ESM import */var _clientcommon__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./clientcommon */ "./packages/scramjet/packages/bootstrap/src/clientcommon.ts");
225
+ /* ESM import */var _common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./common */ "./packages/scramjet/packages/bootstrap/src/common.ts");
226
+ // this file is both a service worker and client library, to minimize the number of files
227
+
228
+
229
+
230
+ const isSw = "ServiceWorkerGlobalScope" in globalThis;
231
+ const CDN_URL = "https://cdn.jsdelivr.net/npm/";
232
+ const DB_NAME = "scramjet-bootstrap";
233
+ const DB_VERSION = 1;
234
+ const STORE_NAME = "files";
235
+ // IndexedDB helper functions
236
+ async function openDB() {
237
+ return new Promise((resolve, reject)=>{
238
+ const request = indexedDB.open(DB_NAME, DB_VERSION);
239
+ request.onerror = ()=>reject(request.error);
240
+ request.onsuccess = ()=>resolve(request.result);
241
+ request.onupgradeneeded = (event)=>{
242
+ const db = event.target.result;
243
+ if (!db.objectStoreNames.contains(STORE_NAME)) {
244
+ const store = db.createObjectStore(STORE_NAME, {
245
+ keyPath: "path"
246
+ });
247
+ store.createIndex("version", "version", {
248
+ unique: false
249
+ });
250
+ store.createIndex("timestamp", "timestamp", {
251
+ unique: false
252
+ });
253
+ }
254
+ };
255
+ });
256
+ }
257
+ async function getFile(path) {
258
+ if (!path) {
259
+ throw new Error("Path is required for getFile");
260
+ }
261
+ const db = await openDB();
262
+ return new Promise((resolve, reject)=>{
263
+ const tx = db.transaction(STORE_NAME, "readonly");
264
+ const store = tx.objectStore(STORE_NAME);
265
+ const request = store.get(path);
266
+ request.onerror = ()=>reject(request.error);
267
+ request.onsuccess = ()=>resolve(request.result || null);
268
+ tx.onerror = ()=>reject(tx.error);
269
+ });
270
+ }
271
+ async function saveFile(entry) {
272
+ const db = await openDB();
273
+ return new Promise((resolve, reject)=>{
274
+ const tx = db.transaction(STORE_NAME, "readwrite");
275
+ const store = tx.objectStore(STORE_NAME);
276
+ const request = store.put(entry);
277
+ request.onerror = ()=>reject(request.error);
278
+ request.onsuccess = ()=>resolve();
279
+ tx.onerror = ()=>reject(tx.error);
280
+ });
281
+ }
282
+ async function findLatestVersion(packageName, majorVersion) {
283
+ // Use jsdelivr API to find latest version
284
+ const response = await fetch(`https://data.jsdelivr.com/v1/packages/npm/${packageName}?a`);
285
+ if (!response.ok) {
286
+ throw new Error(`Failed to fetch package info: ${response.statusText}`);
287
+ }
288
+ const data = await response.json();
289
+ const versions = data.versions.filter((v)=>v.version.startsWith(`${majorVersion}.`));
290
+ if (versions.length === 0) {
291
+ throw new Error(`No versions found for ${packageName} with major version ${majorVersion}`);
292
+ }
293
+ // Versions are already sorted by jsdelivr
294
+ return versions[0].version;
295
+ }
296
+ async function downloadFile(packageName, version, filePath) {
297
+ const url = `${CDN_URL}${packageName}@${version}${filePath}`;
298
+ const response = await fetch(url);
299
+ if (!response.ok) {
300
+ throw new Error(`Failed to download ${url}: ${response.statusText}`);
301
+ }
302
+ return await response.arrayBuffer();
303
+ }
304
+ async function ensureFile(packageName, version, filePath, contentType, routePath) {
305
+ const cached = await getFile(routePath);
306
+ if (cached && cached.version === version) {
307
+ console.log(`Using cached ${routePath} (${version})`);
308
+ return;
309
+ }
310
+ console.log(`Downloading ${routePath} from ${packageName}@${version}...`);
311
+ const content = await downloadFile(packageName, version, filePath);
312
+ await saveFile({
313
+ path: routePath,
314
+ content,
315
+ contentType,
316
+ version,
317
+ timestamp: Date.now()
318
+ });
319
+ console.log(`Cached ${routePath} (${version})`);
320
+ }
321
+ if (isSw) {
322
+ let config;
323
+ let scramjetControllerLoaded = false;
324
+ // Set up message listener immediately on initial evaluation
325
+ addEventListener("message", (event)=>{
326
+ if (typeof event.data !== "object" || event.data === null) return;
327
+ if (event.data.type === "init-bootstrap") {
328
+ initBootstrapSw(event.data.message);
329
+ }
330
+ if (event.data.type === "SKIP_WAITING") {
331
+ self.skipWaiting();
332
+ }
333
+ });
334
+ // Set up fetch listener immediately on initial evaluation
335
+ addEventListener("fetch", (event)=>{
336
+ const url = new URL(event.request.url);
337
+ const path = url.pathname;
338
+ // Only intercept requests if we have a config
339
+ if (!config || !path) {
340
+ return; // Fall through to normal fetch
341
+ }
342
+ event.respondWith((async ()=>{
343
+ // If scramjet controller is loaded, check if it should handle this request
344
+ if (scramjetControllerLoaded && self.$scramjetController) {
345
+ const controller = self.$scramjetController;
346
+ if (controller.shouldRoute(event)) {
347
+ return controller.route(event);
348
+ }
349
+ }
350
+ // Try to serve bootstrap files from cache
351
+ const cached = await getFile(path);
352
+ if (cached) {
353
+ return new Response(cached.content, {
354
+ headers: {
355
+ "Content-Type": cached.contentType,
356
+ "Cache-Control": "public, max-age=31536000"
357
+ }
358
+ });
359
+ }
360
+ // Fall through to network
361
+ return fetch(event.request);
362
+ })());
363
+ });
364
+ async function initBootstrapSw(opts) {
365
+ // Merge with defaults
366
+ config = {
367
+ ..._common__WEBPACK_IMPORTED_MODULE_2__.defaultConfig,
368
+ ...opts.config
369
+ };
370
+ try {
371
+ // Find latest versions
372
+ const controllerVersion = await findLatestVersion(_common__WEBPACK_IMPORTED_MODULE_2__.SCRAMJET_CONTROLLER_PACKAGE_NAME, config.scramjetControllerVersionPin || _common__WEBPACK_IMPORTED_MODULE_2__.SCRAMJET_CONTROLLER_PINNED_MAJOR_VERSION);
373
+ console.log(controllerVersion);
374
+ // Fetch controller to get scramjet dependency version
375
+ const controllerPkgUrl = `${CDN_URL}${_common__WEBPACK_IMPORTED_MODULE_2__.SCRAMJET_CONTROLLER_PACKAGE_NAME}@${controllerVersion}/package.json`;
376
+ const controllerPkgResponse = await fetch(controllerPkgUrl);
377
+ const controllerPkg = await controllerPkgResponse.json();
378
+ console.log(controllerPkg);
379
+ const scramjetVersion = controllerPkg.dependencies[_common__WEBPACK_IMPORTED_MODULE_2__.SCRAMJET_PACKAGE_NAME].replace(/^[\^~]/, "");
380
+ // Download scramjet files
381
+ await ensureFile(_common__WEBPACK_IMPORTED_MODULE_2__.SCRAMJET_PACKAGE_NAME, scramjetVersion, "/dist/scramjet.js", "application/javascript", config.scramjetBundlePath);
382
+ await ensureFile(_common__WEBPACK_IMPORTED_MODULE_2__.SCRAMJET_PACKAGE_NAME, scramjetVersion, "/dist/scramjet.wasm", "application/wasm", config.scramjetWasmPath);
383
+ // Download controller files
384
+ await ensureFile(_common__WEBPACK_IMPORTED_MODULE_2__.SCRAMJET_CONTROLLER_PACKAGE_NAME, controllerVersion, "/dist/controller.api.js", "application/javascript", config.scramjetControllerApiPath);
385
+ await ensureFile(_common__WEBPACK_IMPORTED_MODULE_2__.SCRAMJET_CONTROLLER_PACKAGE_NAME, controllerVersion, "/dist/controller.inject.js", "application/javascript", config.scramjetControllerInjectPath);
386
+ await ensureFile(_common__WEBPACK_IMPORTED_MODULE_2__.SCRAMJET_CONTROLLER_PACKAGE_NAME, controllerVersion, "/dist/controller.sw.js", "application/javascript", config.scramjetControllerSwPath);
387
+ // Download transport files
388
+ if (config.transport === "libcurl") {
389
+ const libcurlVersion = await findLatestVersion(_common__WEBPACK_IMPORTED_MODULE_2__.LIBCURL_TRANSPORT_PACKAGE_NAME, config.libcurlTransportVersionPin || _common__WEBPACK_IMPORTED_MODULE_2__.LIBCURL_TRANSPORT_PINNED_MAJOR_VERSION);
390
+ await ensureFile(_common__WEBPACK_IMPORTED_MODULE_2__.LIBCURL_TRANSPORT_PACKAGE_NAME, libcurlVersion, "/dist/index.js", "application/javascript", config.libcurlClientPath);
391
+ } else if (config.transport === "epoxy") {
392
+ const epoxyVersion = await findLatestVersion(_common__WEBPACK_IMPORTED_MODULE_2__.EPOXY_TRANSPORT_PACKAGE_NAME, config.epoxyTransportVersionPin || _common__WEBPACK_IMPORTED_MODULE_2__.EPOXY_TRANSPORT_PINNED_MAJOR_VERSION);
393
+ await ensureFile(_common__WEBPACK_IMPORTED_MODULE_2__.EPOXY_TRANSPORT_PACKAGE_NAME, epoxyVersion, "/dist/index.js", "application/javascript", config.epoxyClientPath);
394
+ }
395
+ console.log("Bootstrap initialization complete");
396
+ // Import scramjet controller SW script
397
+ try {
398
+ // Fetch the controller script from IndexedDB cache
399
+ const cachedController = await getFile(config.scramjetControllerSwPath);
400
+ if (cachedController) {
401
+ // Convert ArrayBuffer to string
402
+ const decoder = new TextDecoder();
403
+ const scriptContent = decoder.decode(cachedController.content);
404
+ // Directly evaluate the script instead of using importScripts
405
+ // This avoids the issue with adding event listeners after initial evaluation
406
+ (0, eval)(scriptContent);
407
+ scramjetControllerLoaded = true;
408
+ console.log("Scramjet controller loaded");
409
+ } else {
410
+ console.error("Scramjet controller not found in cache");
411
+ }
412
+ } catch (error) {
413
+ console.error("Failed to load scramjet controller:", error);
414
+ }
415
+ // Send init done message
416
+ self.clients.matchAll().then((clients)=>{
417
+ clients.forEach((client)=>{
418
+ client.postMessage({
419
+ type: "init-bootstrap-done",
420
+ message: {
421
+ ready: true
422
+ }
423
+ });
424
+ });
425
+ });
426
+ } catch (error) {
427
+ console.error("Bootstrap initialization failed:", error);
428
+ throw error;
429
+ }
430
+ }
431
+ } else {
432
+ const currentScript = document.currentScript;
433
+ async function initBootstrap(opts) {
434
+ let filePath = opts.filePath;
435
+ if (!filePath) {
436
+ if (currentScript && currentScript.src) {
437
+ filePath = currentScript.src;
438
+ }
439
+ if (!filePath) {
440
+ throw new Error("Could not determine bootstrap file path and none was provided!");
441
+ }
442
+ }
443
+ const sw = await (0,_clientcommon__WEBPACK_IMPORTED_MODULE_1__.registerSw)(filePath);
444
+ // Merge with defaults before sending to SW and using in loadRest
445
+ const fullConfig = {
446
+ ..._common__WEBPACK_IMPORTED_MODULE_2__.defaultConfig,
447
+ ...opts
448
+ };
449
+ const message = {
450
+ config: fullConfig
451
+ };
452
+ sw.postMessage({
453
+ type: "init-bootstrap",
454
+ message
455
+ });
456
+ const initDone = await new Promise((resolve)=>{
457
+ const onMessage = (event)=>{
458
+ if (typeof event.data !== "object" || event.data === null) return;
459
+ if (event.data.type === "init-bootstrap-done") {
460
+ navigator.serviceWorker.removeEventListener("message", onMessage);
461
+ resolve(event.data.message);
462
+ }
463
+ };
464
+ navigator.serviceWorker.addEventListener("message", onMessage);
465
+ });
466
+ console.log(initDone);
467
+ return await (0,_client__WEBPACK_IMPORTED_MODULE_0__.loadRest)(sw, fullConfig);
468
+ }
469
+ window.initBootstrap = initBootstrap;
470
+ }
471
+
472
+ })();
473
+
474
+ })()
475
+ ;
476
+ //# sourceMappingURL=bootstrap-static.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap-static.js","sources":["webpack://browser.js/./packages/scramjet/packages/bootstrap/src/client.ts","webpack://browser.js/./packages/scramjet/packages/bootstrap/src/clientcommon.ts","webpack://browser.js/./packages/scramjet/packages/bootstrap/src/common.ts","webpack://browser.js/webpack/runtime/define_property_getters","webpack://browser.js/webpack/runtime/has_own_property","webpack://browser.js/webpack/runtime/make_namespace_object","webpack://browser.js/webpack/runtime/rspack_version","webpack://browser.js/webpack/runtime/rspack_unique_id","webpack://browser.js/./packages/scramjet/packages/bootstrap/src/static.ts"],"sourcesContent":["import { loadScript, registerSw } from \"./clientcommon\";\nimport { BootstrapOptions } from \"./common\";\nimport type { ProxyTransport } from \"@mercuryworkshop/proxy-transports\";\nimport type EpoxyClient from \"@mercuryworkshop/epoxy-transport\";\nimport type LibcurlClient from \"@mercuryworkshop/libcurl-transport\";\nimport * as ControllerApi from \"@mercuryworkshop/scramjet-controller\";\n\nexport async function init(cfg: BootstrapOptions) {\n\tconst sw = await registerSw(cfg.swPath);\n\treturn await loadRest(sw, cfg);\n}\n\nexport async function loadRest(sw: ServiceWorker, cfg: BootstrapOptions) {\n\tawait loadScript(cfg.scramjetBundlePath);\n\tawait loadScript(cfg.scramjetControllerApiPath);\n\n\tconst resolvedWispPath = `${location.protocol === \"https:\" ? \"wss:\" : \"ws:\"}//${location.host}${cfg.wispPath}`;\n\n\tlet transport!: ProxyTransport;\n\tif (cfg.transport === \"epoxy\") {\n\t\tawait loadScript(cfg.epoxyClientPath);\n\t\tconst EpoxyCtor: typeof EpoxyClient = (window as any).EpoxyTransport\n\t\t\t.EpoxyClient;\n\t\ttransport = new EpoxyCtor({ wisp: resolvedWispPath });\n\t} else if (cfg.transport === \"libcurl\") {\n\t\tawait loadScript(cfg.libcurlClientPath);\n\t\tconst LibcurlCtor: typeof LibcurlClient = (window as any).LibcurlTransport\n\t\t\t.LibcurlClient;\n\t\ttransport = new LibcurlCtor({ wisp: resolvedWispPath });\n\t} else if (cfg.transport === \"bare\") {\n\t\tthrow new Error(\"Bare transport not implemented yet\");\n\t\t//...\n\t}\n\tconst { Controller, config } = (window as any)\n\t\t.$scramjetController as typeof ControllerApi;\n\tconfig.injectPath = cfg.scramjetControllerInjectPath;\n\tconfig.wasmPath = cfg.scramjetWasmPath;\n\tconfig.scramjetPath = cfg.scramjetBundlePath;\n\n\tconst controller = new Controller({\n\t\tserviceworker: sw,\n\t\ttransport,\n\t});\n\n\treturn controller;\n}\n","export async function registerSw(path: string): Promise<ServiceWorker> {\n\tconst registration = await navigator.serviceWorker.register(path, {\n\t\ttype: \"classic\",\n\t\tupdateViaCache: \"none\",\n\t});\n\n\tawait navigator.serviceWorker.ready;\n\n\tif (registration.active) {\n\t\treturn registration.active;\n\t}\n\n\tif (registration.installing) {\n\t\tawait new Promise<void>((resolve) => {\n\t\t\tconst sw = registration.installing!;\n\t\t\tif (sw.state === \"activated\") {\n\t\t\t\tresolve();\n\t\t\t} else {\n\t\t\t\tsw.addEventListener(\"statechange\", function onChange() {\n\t\t\t\t\tif (sw.state === \"activated\") {\n\t\t\t\t\t\tsw.removeEventListener(\"statechange\", onChange);\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\treturn registration.active!;\n\t}\n\n\tif (registration.waiting) {\n\t\tawait new Promise<void>((resolve) => {\n\t\t\tnavigator.serviceWorker.addEventListener(\n\t\t\t\t\"controllerchange\",\n\t\t\t\t() => {\n\t\t\t\t\tresolve();\n\t\t\t\t},\n\t\t\t\t{ once: true }\n\t\t\t);\n\t\t});\n\n\t\treturn navigator.serviceWorker.controller!;\n\t}\n\n\tthrow new Error(\"No service worker found in registration\");\n}\n\nexport function loadScript(url: string): Promise<void> {\n\treturn new Promise((resolve, reject) => {\n\t\tconst script = document.createElement(\"script\");\n\t\tscript.src = url;\n\t\tscript.onload = () => resolve();\n\t\tscript.onerror = () => reject(new Error(\"Failed to load script \" + url));\n\t\tdocument.head.appendChild(script);\n\t});\n}\n","export const REGISTRY_URL = \"https://registry.npmjs.org/\";\nexport const SCRAMJET_PACKAGE_NAME = \"@mercuryworkshop/scramjet\";\n\nexport const SCRAMJET_CONTROLLER_PACKAGE_NAME =\n\t\"@mercuryworkshop/scramjet-controller\";\nexport const SCRAMJET_CONTROLLER_PINNED_MAJOR_VERSION = \"0\";\n\nexport const EPOXY_TRANSPORT_PACKAGE_NAME = \"@mercuryworkshop/epoxy-transport\";\nexport const EPOXY_TRANSPORT_PINNED_MAJOR_VERSION = \"3\";\n\nexport const LIBCURL_TRANSPORT_PACKAGE_NAME =\n\t\"@mercuryworkshop/libcurl-transport\";\nexport const LIBCURL_TRANSPORT_PINNED_MAJOR_VERSION = \"2\";\n\nexport type TransportOptions = \"epoxy\" | \"libcurl\" | \"bare\";\n\nexport type BootstrapOptions = {\n\ttransport: TransportOptions;\n\tswPath: string;\n\n\twispPath: string;\n\n\tscramjetBundlePath: string;\n\tscramjetWasmPath: string;\n\n\tepoxyClientPath: string;\n\tlibcurlClientPath: string;\n\tbareClientPath: string;\n\tscramjetControllerApiPath: string;\n\tscramjetControllerInjectPath: string;\n\tscramjetControllerSwPath: string;\n\n\tbootstrapApiPath: string;\n\tbootstrapInitPath: string;\n\n\tscramjetVersionPin?: string;\n\tscramjetControllerVersionPin?: string;\n\tepoxyTransportVersionPin?: string;\n\tlibcurlTransportVersionPin?: string;\n\tbareTransportVersionPin?: string;\n};\n\nexport const defaultConfig: Partial<BootstrapOptions> = {\n\ttransport: \"libcurl\",\n\tswPath: \"/sw.js\",\n\twispPath: \"/wisp/\",\n\n\tepoxyClientPath: \"/clients/epoxy-client.js\",\n\tlibcurlClientPath: \"/clients/libcurl-client.js\",\n\tbareClientPath: \"/clients/bare-client.js\",\n\tbootstrapInitPath: \"/bootstrap-init.js\",\n\n\tscramjetControllerApiPath: \"/controller/controller.api.js\",\n\tscramjetControllerInjectPath: \"/controller/controller.inject.js\",\n\tscramjetControllerSwPath: \"/controller/controller.sw.js\",\n\tscramjetBundlePath: \"/scram/scramjet.js\",\n\tscramjetWasmPath: \"/scram/scramjet.wasm\",\n};\n","__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.rv = () => (\"1.5.8\")","__webpack_require__.ruid = \"bundler=rspack@1.5.8\";\n","// this file is both a service worker and client library, to minimize the number of files\n\nimport { init, loadRest } from \"./client\";\nimport { loadScript, registerSw } from \"./clientcommon\";\nimport {\n\tBootstrapOptions,\n\tdefaultConfig,\n\tSCRAMJET_CONTROLLER_PACKAGE_NAME,\n\tSCRAMJET_CONTROLLER_PINNED_MAJOR_VERSION,\n\tSCRAMJET_PACKAGE_NAME,\n\tLIBCURL_TRANSPORT_PACKAGE_NAME,\n\tLIBCURL_TRANSPORT_PINNED_MAJOR_VERSION,\n\tEPOXY_TRANSPORT_PACKAGE_NAME,\n\tEPOXY_TRANSPORT_PINNED_MAJOR_VERSION,\n} from \"./common\";\n\nconst isSw = \"ServiceWorkerGlobalScope\" in globalThis;\n\nconst CDN_URL = \"https://cdn.jsdelivr.net/npm/\";\nconst DB_NAME = \"scramjet-bootstrap\";\nconst DB_VERSION = 1;\nconst STORE_NAME = \"files\";\n\ntype StaticBootstrapOptions = BootstrapOptions & {\n\tfilePath?: string;\n};\n\ntype FileEntry = {\n\tpath: string;\n\tcontent: ArrayBuffer;\n\tcontentType: string;\n\tversion: string;\n\ttimestamp: number;\n};\n\ntype InitMessage = {\n\tconfig: BootstrapOptions;\n};\n\ntype InitDoneMessage = {\n\tready: boolean;\n};\n\n// IndexedDB helper functions\nasync function openDB(): Promise<IDBDatabase> {\n\treturn new Promise((resolve, reject) => {\n\t\tconst request = indexedDB.open(DB_NAME, DB_VERSION);\n\n\t\trequest.onerror = () => reject(request.error);\n\t\trequest.onsuccess = () => resolve(request.result);\n\n\t\trequest.onupgradeneeded = (event) => {\n\t\t\tconst db = (event.target as IDBOpenDBRequest).result;\n\t\t\tif (!db.objectStoreNames.contains(STORE_NAME)) {\n\t\t\t\tconst store = db.createObjectStore(STORE_NAME, { keyPath: \"path\" });\n\t\t\t\tstore.createIndex(\"version\", \"version\", { unique: false });\n\t\t\t\tstore.createIndex(\"timestamp\", \"timestamp\", { unique: false });\n\t\t\t}\n\t\t};\n\t});\n}\n\nasync function getFile(path: string): Promise<FileEntry | null> {\n\tif (!path) {\n\t\tthrow new Error(\"Path is required for getFile\");\n\t}\n\tconst db = await openDB();\n\treturn new Promise((resolve, reject) => {\n\t\tconst tx = db.transaction(STORE_NAME, \"readonly\");\n\t\tconst store = tx.objectStore(STORE_NAME);\n\t\tconst request = store.get(path);\n\n\t\trequest.onerror = () => reject(request.error);\n\t\trequest.onsuccess = () => resolve(request.result || null);\n\n\t\ttx.onerror = () => reject(tx.error);\n\t});\n}\n\nasync function saveFile(entry: FileEntry): Promise<void> {\n\tconst db = await openDB();\n\treturn new Promise((resolve, reject) => {\n\t\tconst tx = db.transaction(STORE_NAME, \"readwrite\");\n\t\tconst store = tx.objectStore(STORE_NAME);\n\t\tconst request = store.put(entry);\n\n\t\trequest.onerror = () => reject(request.error);\n\t\trequest.onsuccess = () => resolve();\n\n\t\ttx.onerror = () => reject(tx.error);\n\t});\n}\n\nasync function findLatestVersion(\n\tpackageName: string,\n\tmajorVersion: string\n): Promise<string> {\n\t// Use jsdelivr API to find latest version\n\tconst response = await fetch(\n\t\t`https://data.jsdelivr.com/v1/packages/npm/${packageName}?a`\n\t);\n\tif (!response.ok) {\n\t\tthrow new Error(`Failed to fetch package info: ${response.statusText}`);\n\t}\n\n\tconst data = await response.json();\n\tconst versions = data.versions.filter((v: any) =>\n\t\tv.version.startsWith(`${majorVersion}.`)\n\t);\n\n\tif (versions.length === 0) {\n\t\tthrow new Error(\n\t\t\t`No versions found for ${packageName} with major version ${majorVersion}`\n\t\t);\n\t}\n\n\t// Versions are already sorted by jsdelivr\n\treturn versions[0].version;\n}\n\nasync function downloadFile(\n\tpackageName: string,\n\tversion: string,\n\tfilePath: string\n): Promise<ArrayBuffer> {\n\tconst url = `${CDN_URL}${packageName}@${version}${filePath}`;\n\tconst response = await fetch(url);\n\n\tif (!response.ok) {\n\t\tthrow new Error(`Failed to download ${url}: ${response.statusText}`);\n\t}\n\n\treturn await response.arrayBuffer();\n}\n\nasync function ensureFile(\n\tpackageName: string,\n\tversion: string,\n\tfilePath: string,\n\tcontentType: string,\n\troutePath: string\n): Promise<void> {\n\tconst cached = await getFile(routePath);\n\n\tif (cached && cached.version === version) {\n\t\tconsole.log(`Using cached ${routePath} (${version})`);\n\t\treturn;\n\t}\n\n\tconsole.log(`Downloading ${routePath} from ${packageName}@${version}...`);\n\tconst content = await downloadFile(packageName, version, filePath);\n\n\tawait saveFile({\n\t\tpath: routePath,\n\t\tcontent,\n\t\tcontentType,\n\t\tversion,\n\t\ttimestamp: Date.now(),\n\t});\n\n\tconsole.log(`Cached ${routePath} (${version})`);\n}\n\nif (isSw) {\n\tlet config: BootstrapOptions;\n\tlet scramjetControllerLoaded = false;\n\n\t// Set up message listener immediately on initial evaluation\n\taddEventListener(\"message\", (event) => {\n\t\tif (typeof event.data !== \"object\" || event.data === null) return;\n\n\t\tif (event.data.type === \"init-bootstrap\") {\n\t\t\tinitBootstrapSw(event.data.message);\n\t\t}\n\n\t\tif (event.data.type === \"SKIP_WAITING\") {\n\t\t\t(self as any).skipWaiting();\n\t\t}\n\t});\n\n\t// Set up fetch listener immediately on initial evaluation\n\taddEventListener(\"fetch\", (event: any) => {\n\t\tconst url = new URL(event.request.url);\n\t\tconst path = url.pathname;\n\n\t\t// Only intercept requests if we have a config\n\t\tif (!config || !path) {\n\t\t\treturn; // Fall through to normal fetch\n\t\t}\n\n\t\tevent.respondWith(\n\t\t\t(async () => {\n\t\t\t\t// If scramjet controller is loaded, check if it should handle this request\n\t\t\t\tif (scramjetControllerLoaded && (self as any).$scramjetController) {\n\t\t\t\t\tconst controller = (self as any).$scramjetController;\n\t\t\t\t\tif (controller.shouldRoute(event)) {\n\t\t\t\t\t\treturn controller.route(event);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Try to serve bootstrap files from cache\n\t\t\t\tconst cached = await getFile(path);\n\t\t\t\tif (cached) {\n\t\t\t\t\treturn new Response(cached.content, {\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\"Content-Type\": cached.contentType,\n\t\t\t\t\t\t\t\"Cache-Control\": \"public, max-age=31536000\",\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// Fall through to network\n\t\t\t\treturn fetch(event.request);\n\t\t\t})()\n\t\t);\n\t});\n\n\tasync function initBootstrapSw(opts: InitMessage) {\n\t\t// Merge with defaults\n\t\tconfig = { ...defaultConfig, ...opts.config } as BootstrapOptions;\n\n\t\ttry {\n\t\t\t// Find latest versions\n\t\t\tconst controllerVersion = await findLatestVersion(\n\t\t\t\tSCRAMJET_CONTROLLER_PACKAGE_NAME,\n\t\t\t\tconfig.scramjetControllerVersionPin ||\n\t\t\t\t\tSCRAMJET_CONTROLLER_PINNED_MAJOR_VERSION\n\t\t\t);\n\n\t\t\tconsole.log(controllerVersion);\n\t\t\t// Fetch controller to get scramjet dependency version\n\t\t\tconst controllerPkgUrl = `${CDN_URL}${SCRAMJET_CONTROLLER_PACKAGE_NAME}@${controllerVersion}/package.json`;\n\t\t\tconst controllerPkgResponse = await fetch(controllerPkgUrl);\n\t\t\tconst controllerPkg = await controllerPkgResponse.json();\n\n\t\t\tconsole.log(controllerPkg);\n\t\t\tconst scramjetVersion = controllerPkg.dependencies[\n\t\t\t\tSCRAMJET_PACKAGE_NAME\n\t\t\t].replace(/^[\\^~]/, \"\");\n\n\t\t\t// Download scramjet files\n\t\t\tawait ensureFile(\n\t\t\t\tSCRAMJET_PACKAGE_NAME,\n\t\t\t\tscramjetVersion,\n\t\t\t\t\"/dist/scramjet.js\",\n\t\t\t\t\"application/javascript\",\n\t\t\t\tconfig.scramjetBundlePath\n\t\t\t);\n\n\t\t\tawait ensureFile(\n\t\t\t\tSCRAMJET_PACKAGE_NAME,\n\t\t\t\tscramjetVersion,\n\t\t\t\t\"/dist/scramjet.wasm\",\n\t\t\t\t\"application/wasm\",\n\t\t\t\tconfig.scramjetWasmPath\n\t\t\t);\n\n\t\t\t// Download controller files\n\t\t\tawait ensureFile(\n\t\t\t\tSCRAMJET_CONTROLLER_PACKAGE_NAME,\n\t\t\t\tcontrollerVersion,\n\t\t\t\t\"/dist/controller.api.js\",\n\t\t\t\t\"application/javascript\",\n\t\t\t\tconfig.scramjetControllerApiPath\n\t\t\t);\n\n\t\t\tawait ensureFile(\n\t\t\t\tSCRAMJET_CONTROLLER_PACKAGE_NAME,\n\t\t\t\tcontrollerVersion,\n\t\t\t\t\"/dist/controller.inject.js\",\n\t\t\t\t\"application/javascript\",\n\t\t\t\tconfig.scramjetControllerInjectPath\n\t\t\t);\n\n\t\t\tawait ensureFile(\n\t\t\t\tSCRAMJET_CONTROLLER_PACKAGE_NAME,\n\t\t\t\tcontrollerVersion,\n\t\t\t\t\"/dist/controller.sw.js\",\n\t\t\t\t\"application/javascript\",\n\t\t\t\tconfig.scramjetControllerSwPath\n\t\t\t);\n\n\t\t\t// Download transport files\n\t\t\tif (config.transport === \"libcurl\") {\n\t\t\t\tconst libcurlVersion = await findLatestVersion(\n\t\t\t\t\tLIBCURL_TRANSPORT_PACKAGE_NAME,\n\t\t\t\t\tconfig.libcurlTransportVersionPin ||\n\t\t\t\t\t\tLIBCURL_TRANSPORT_PINNED_MAJOR_VERSION\n\t\t\t\t);\n\n\t\t\t\tawait ensureFile(\n\t\t\t\t\tLIBCURL_TRANSPORT_PACKAGE_NAME,\n\t\t\t\t\tlibcurlVersion,\n\t\t\t\t\t\"/dist/index.js\",\n\t\t\t\t\t\"application/javascript\",\n\t\t\t\t\tconfig.libcurlClientPath\n\t\t\t\t);\n\t\t\t} else if (config.transport === \"epoxy\") {\n\t\t\t\tconst epoxyVersion = await findLatestVersion(\n\t\t\t\t\tEPOXY_TRANSPORT_PACKAGE_NAME,\n\t\t\t\t\tconfig.epoxyTransportVersionPin ||\n\t\t\t\t\t\tEPOXY_TRANSPORT_PINNED_MAJOR_VERSION\n\t\t\t\t);\n\n\t\t\t\tawait ensureFile(\n\t\t\t\t\tEPOXY_TRANSPORT_PACKAGE_NAME,\n\t\t\t\t\tepoxyVersion,\n\t\t\t\t\t\"/dist/index.js\",\n\t\t\t\t\t\"application/javascript\",\n\t\t\t\t\tconfig.epoxyClientPath\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconsole.log(\"Bootstrap initialization complete\");\n\n\t\t\t// Import scramjet controller SW script\n\t\t\ttry {\n\t\t\t\t// Fetch the controller script from IndexedDB cache\n\t\t\t\tconst cachedController = await getFile(config.scramjetControllerSwPath);\n\t\t\t\tif (cachedController) {\n\t\t\t\t\t// Convert ArrayBuffer to string\n\t\t\t\t\tconst decoder = new TextDecoder();\n\t\t\t\t\tconst scriptContent = decoder.decode(cachedController.content);\n\n\t\t\t\t\t// Directly evaluate the script instead of using importScripts\n\t\t\t\t\t// This avoids the issue with adding event listeners after initial evaluation\n\t\t\t\t\t(0, eval)(scriptContent);\n\n\t\t\t\t\tscramjetControllerLoaded = true;\n\t\t\t\t\tconsole.log(\"Scramjet controller loaded\");\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error(\"Scramjet controller not found in cache\");\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(\"Failed to load scramjet controller:\", error);\n\t\t\t}\n\n\t\t\t// Send init done message\n\t\t\t(self as any).clients.matchAll().then((clients: any[]) => {\n\t\t\t\tclients.forEach((client: any) => {\n\t\t\t\t\tclient.postMessage({\n\t\t\t\t\t\ttype: \"init-bootstrap-done\",\n\t\t\t\t\t\tmessage: { ready: true } as InitDoneMessage,\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tconsole.error(\"Bootstrap initialization failed:\", error);\n\t\t\tthrow error;\n\t\t}\n\t}\n} else {\n\tconst currentScript = document.currentScript as HTMLScriptElement | null;\n\tasync function initBootstrap(opts: StaticBootstrapOptions) {\n\t\tlet filePath = opts.filePath;\n\t\tif (!filePath) {\n\t\t\tif (currentScript && currentScript.src) {\n\t\t\t\tfilePath = currentScript.src;\n\t\t\t}\n\t\t\tif (!filePath) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"Could not determine bootstrap file path and none was provided!\"\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tconst sw = await registerSw(filePath);\n\n\t\t// Merge with defaults before sending to SW and using in loadRest\n\t\tconst fullConfig = { ...defaultConfig, ...opts } as BootstrapOptions;\n\n\t\tconst message: InitMessage = {\n\t\t\tconfig: fullConfig,\n\t\t};\n\t\tsw.postMessage({\n\t\t\ttype: \"init-bootstrap\",\n\t\t\tmessage,\n\t\t});\n\n\t\tconst initDone = await new Promise<InitDoneMessage>((resolve) => {\n\t\t\tconst onMessage = (event: MessageEvent) => {\n\t\t\t\tif (typeof event.data !== \"object\" || event.data === null) return;\n\t\t\t\tif (event.data.type === \"init-bootstrap-done\") {\n\t\t\t\t\tnavigator.serviceWorker.removeEventListener(\"message\", onMessage);\n\t\t\t\t\tresolve(event.data.message);\n\t\t\t\t}\n\t\t\t};\n\t\t\tnavigator.serviceWorker.addEventListener(\"message\", onMessage);\n\t\t});\n\t\tconsole.log(initDone);\n\n\t\treturn await loadRest(sw, fullConfig);\n\t}\n\n\t(window as any).initBootstrap = initBootstrap;\n}\n"],"names":["loadScript","registerSw","init","cfg","sw","loadRest","resolvedWispPath","location","transport","EpoxyCtor","window","LibcurlCtor","Error","Controller","config","controller","path","registration","navigator","Promise","resolve","onChange","url","reject","script","document","REGISTRY_URL","SCRAMJET_PACKAGE_NAME","SCRAMJET_CONTROLLER_PACKAGE_NAME","SCRAMJET_CONTROLLER_PINNED_MAJOR_VERSION","EPOXY_TRANSPORT_PACKAGE_NAME","EPOXY_TRANSPORT_PINNED_MAJOR_VERSION","LIBCURL_TRANSPORT_PACKAGE_NAME","LIBCURL_TRANSPORT_PINNED_MAJOR_VERSION","defaultConfig","isSw","globalThis","CDN_URL","DB_NAME","DB_VERSION","STORE_NAME","openDB","request","indexedDB","event","db","store","getFile","tx","saveFile","entry","findLatestVersion","packageName","majorVersion","response","fetch","data","versions","v","downloadFile","version","filePath","ensureFile","contentType","routePath","cached","console","content","Date","scramjetControllerLoaded","addEventListener","initBootstrapSw","self","URL","Response","opts","controllerVersion","controllerPkgUrl","controllerPkgResponse","controllerPkg","scramjetVersion","libcurlVersion","epoxyVersion","cachedController","decoder","TextDecoder","scriptContent","eval","error","clients","client","currentScript","initBootstrap","fullConfig","message","initDone","onMessage"],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { BootstrapOptions } from "./common";
2
+ import * as ControllerApi from "@mercuryworkshop/scramjet-controller";
3
+ export declare function init(cfg: BootstrapOptions): Promise<ControllerApi.Controller>;
4
+ export declare function loadRest(sw: ServiceWorker, cfg: BootstrapOptions): Promise<ControllerApi.Controller>;
@@ -0,0 +1,2 @@
1
+ export declare function registerSw(path: string): Promise<ServiceWorker>;
2
+ export declare function loadScript(url: string): Promise<void>;
@@ -0,0 +1,30 @@
1
+ export declare const REGISTRY_URL = "https://registry.npmjs.org/";
2
+ export declare const SCRAMJET_PACKAGE_NAME = "@mercuryworkshop/scramjet";
3
+ export declare const SCRAMJET_CONTROLLER_PACKAGE_NAME = "@mercuryworkshop/scramjet-controller";
4
+ export declare const SCRAMJET_CONTROLLER_PINNED_MAJOR_VERSION = "0";
5
+ export declare const EPOXY_TRANSPORT_PACKAGE_NAME = "@mercuryworkshop/epoxy-transport";
6
+ export declare const EPOXY_TRANSPORT_PINNED_MAJOR_VERSION = "3";
7
+ export declare const LIBCURL_TRANSPORT_PACKAGE_NAME = "@mercuryworkshop/libcurl-transport";
8
+ export declare const LIBCURL_TRANSPORT_PINNED_MAJOR_VERSION = "2";
9
+ export type TransportOptions = "epoxy" | "libcurl" | "bare";
10
+ export type BootstrapOptions = {
11
+ transport: TransportOptions;
12
+ swPath: string;
13
+ wispPath: string;
14
+ scramjetBundlePath: string;
15
+ scramjetWasmPath: string;
16
+ epoxyClientPath: string;
17
+ libcurlClientPath: string;
18
+ bareClientPath: string;
19
+ scramjetControllerApiPath: string;
20
+ scramjetControllerInjectPath: string;
21
+ scramjetControllerSwPath: string;
22
+ bootstrapApiPath: string;
23
+ bootstrapInitPath: string;
24
+ scramjetVersionPin?: string;
25
+ scramjetControllerVersionPin?: string;
26
+ epoxyTransportVersionPin?: string;
27
+ libcurlTransportVersionPin?: string;
28
+ bareTransportVersionPin?: string;
29
+ };
30
+ export declare const defaultConfig: Partial<BootstrapOptions>;
@@ -0,0 +1,24 @@
1
+ import http from "http";
2
+ import { BootstrapOptions } from "./common";
3
+ type ServerBootstrapOptions = BootstrapOptions & {
4
+ downloadedFilesDir: string;
5
+ };
6
+ declare function routeRequest(req: http.IncomingMessage, res: http.ServerResponse): boolean;
7
+ declare function routeUpgrade(req: http.IncomingMessage, socket: any, head: Buffer): boolean;
8
+ export declare function unpack(tarball: string, name: string): Promise<void>;
9
+ export declare function findLatestVersionOfPackage(packageName: string, majorVersion: string): Promise<NodePackageMeta>;
10
+ type NodePackageMeta = {
11
+ name: string;
12
+ version: string;
13
+ dist: {
14
+ tarball: string;
15
+ };
16
+ dependencies: {
17
+ [key: string]: string;
18
+ };
19
+ };
20
+ export declare function bootstrap(cfg?: Partial<ServerBootstrapOptions>): Promise<{
21
+ routeRequest: typeof routeRequest;
22
+ routeUpgrade: typeof routeUpgrade;
23
+ }>;
24
+ export {};
@@ -0,0 +1 @@
1
+ export {};
package/package.json ADDED
@@ -0,0 +1,30 @@
1
+ {
2
+ "name": "@mercuryworkshop/proxy-bootstrap",
3
+ "version": "0.0.1",
4
+ "type": "module",
5
+ "main": "./dist/bootstrap-server.js",
6
+ "types": "./dist/types/server.d.ts",
7
+ "license": "AGPL-3.0-only",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "https://github.com/MercuryWorkshop/scramjet.git",
11
+ "directory": "packages/bootstrap"
12
+ },
13
+ "dependencies": {
14
+ "@mercuryworkshop/wisp-js": "0.4.1",
15
+ "tar": "^7.5.1"
16
+ },
17
+ "devDependencies": {
18
+ "@mercuryworkshop/epoxy-transport": "3.0.1",
19
+ "@mercuryworkshop/libcurl-transport": "2.0.5",
20
+ "@mercuryworkshop/proxy-transports": "1.0.2",
21
+ "@mercuryworkshop/scramjet-controller": "0.0.11"
22
+ },
23
+ "files": [
24
+ "dist"
25
+ ],
26
+ "scripts": {
27
+ "build": "pnpm -C ../../../../ run build",
28
+ "pub": "pnpm publish --no-git-checks --access public"
29
+ }
30
+ }