@lat-murmeldjur/weeb_3 0.0.350001 → 0.0.352001

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/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@lat-murmeldjur/weeb_3",
3
3
  "type": "module",
4
4
  "description": "A Swarm client for browsers",
5
- "version": "0.0.350001",
5
+ "version": "0.0.352001",
6
6
  "license": "MIT",
7
7
  "repository": {
8
8
  "type": "git",
package/service.js CHANGED
@@ -19,13 +19,9 @@ const FETCH_TIMEOUT_MS = 240000;
19
19
  const SERVICE_WORKER_MARKER = "forwarder-default29";
20
20
  const SERVICE_WORKER_PROTOCOL = 10;
21
21
  const MIB_BYTES = 1024 * 1024;
22
- const STREAM_STORAGE_WINDOW_BYTES = MIB_BYTES / 2;
22
+ const STREAM_WINDOW_BYTES = MIB_BYTES / 2;
23
23
  const STREAM_LOOKAHEAD_CHUNKS = 8;
24
- const HLS_STREAM_WINDOW_BYTES = MIB_BYTES / 2;
25
- const HLS_STREAM_INITIAL_LOOKAHEAD_CHUNKS = 1;
26
24
  const HLS_STREAM_LOOKAHEAD_CHUNKS = 4;
27
- const HLS_LIVE_STREAM_WINDOW_BYTES = MIB_BYTES / 2;
28
- const HLS_LIVE_STREAM_LOOKAHEAD_CHUNKS = 4;
29
25
  const RANGE_REQUEST_FLIGHTS = new Map();
30
26
  const SHARED_WORKER_PROTOCOL = 5;
31
27
  const WINDOW_RELAY_TIMEOUT_MS = 1_500;
@@ -92,78 +88,32 @@ function isBzzUploadPath(pathname) {
92
88
  return NETWORK_ROUTE_PREFIXES.some((prefix) => pathname === `${SCOPE_PATH}${prefix}bzz`);
93
89
  }
94
90
 
95
- function canonicalBzzResource(url) {
96
- for (const marker of BZZ_ROUTE_MARKERS) {
97
- if (!url.pathname.startsWith(marker)) {
98
- continue;
99
- }
100
-
101
- const resource = url.pathname.substring(marker.length);
102
- if (!resource) {
103
- return null;
104
- }
105
-
106
- const reference = resource.split("/", 1)[0];
107
- if (!isSwarmReference(reference)) {
108
- return null;
109
- }
110
-
111
- try {
112
- return decodeURIComponent(resource);
113
- } catch (_) {
114
- return resource;
115
- }
91
+ function decodeResource(resource) {
92
+ try {
93
+ return decodeURIComponent(resource);
94
+ } catch (_) {
95
+ return resource;
116
96
  }
97
+ }
117
98
 
118
- return null;
99
+ function canonicalBzzResource(url) {
100
+ const marker = BZZ_ROUTE_MARKERS.find((marker) => url.pathname.startsWith(marker));
101
+ const resource = marker && url.pathname.substring(marker.length);
102
+ return resource && isSwarmReference(resource.split("/", 1)[0])
103
+ ? decodeResource(resource) : null;
119
104
  }
120
105
 
121
106
  function canonicalRawResource(url) {
122
- for (const [marker, rawType] of RAW_ROUTE_MARKERS) {
123
- if (!url.pathname.startsWith(marker)) {
124
- continue;
125
- }
126
-
127
- const encodedResource = url.pathname.substring(marker.length);
128
- if (!encodedResource) {
129
- return null;
130
- }
131
-
132
- let resource;
133
- try {
134
- resource = decodeURIComponent(encodedResource);
135
- } catch (_) {
136
- resource = encodedResource;
137
- }
138
- if (rawType === "hls-bytes" && !isSwarmReference(resource)) {
139
- return null;
140
- }
141
- return resource;
142
- }
143
-
144
- return null;
107
+ const route = RAW_ROUTE_MARKERS.find(([marker]) => url.pathname.startsWith(marker));
108
+ if (!route) return null;
109
+ const resource = decodeResource(url.pathname.substring(route[0].length));
110
+ return resource && (route[1] !== "hls-bytes" || isSwarmReference(resource)) ? resource : null;
145
111
  }
146
112
 
147
113
  function canonicalFeedResource(url) {
148
- for (const marker of FEED_ROUTE_MARKERS) {
149
- if (!url.pathname.startsWith(marker)) {
150
- continue;
151
- }
152
-
153
- const resource = url.pathname.substring(marker.length);
154
- const parts = resource.split("/");
155
- if (
156
- parts.length !== 2 ||
157
- !/^[a-fA-F0-9]{40}$/.test(parts[0]) ||
158
- !/^[a-fA-F0-9]{64}$/.test(parts[1])
159
- ) {
160
- return null;
161
- }
162
-
163
- return `${parts[0]}/${parts[1]}`;
164
- }
165
-
166
- return null;
114
+ const marker = FEED_ROUTE_MARKERS.find((marker) => url.pathname.startsWith(marker));
115
+ const resource = marker && url.pathname.substring(marker.length);
116
+ return resource && /^[a-fA-F0-9]{40}\/[a-fA-F0-9]{64}$/.test(resource) ? resource : null;
167
117
  }
168
118
 
169
119
  function isHlsResource(url) {
@@ -210,41 +160,31 @@ self.addEventListener("activate", (event) => {
210
160
  });
211
161
 
212
162
  self.addEventListener("message", (event) => {
163
+ const type = event.data?.type;
213
164
  if (
214
- (event.data?.type === "WEEB3_CLAIM" || event.data?.type === "WEEB3_PING") &&
165
+ (type !== "WEEB3_CLAIM" && type !== "WEEB3_PING") ||
215
166
  event.data?.protocol !== SERVICE_WORKER_PROTOCOL
216
167
  ) {
217
168
  return;
218
169
  }
219
- if (event.data?.type === "WEEB3_CLAIM") {
220
- const port = event.ports?.[0];
170
+ const port = event.ports?.[0];
171
+ const reply = () => {
172
+ port?.postMessage({
173
+ type: type === "WEEB3_CLAIM" ? "WEEB3_CLAIMED" : "WEEB3_PONG",
174
+ protocol: SERVICE_WORKER_PROTOCOL,
175
+ scope: SCOPE_PATH,
176
+ marker: SERVICE_WORKER_MARKER
177
+ });
178
+ closeMessagePort(port);
179
+ };
180
+ if (type === "WEEB3_CLAIM") {
221
181
  event.waitUntil((async () => {
222
182
  await self.clients.claim();
223
- port?.postMessage({
224
- type: "WEEB3_CLAIMED",
225
- protocol: SERVICE_WORKER_PROTOCOL,
226
- scope: SCOPE_PATH,
227
- marker: SERVICE_WORKER_MARKER
228
- });
229
- closeMessagePort(port);
183
+ reply();
230
184
  })());
231
- return;
185
+ } else if (port) {
186
+ reply();
232
187
  }
233
-
234
- if (event.data?.type !== "WEEB3_PING") {
235
- return;
236
- }
237
- const port = event.ports?.[0];
238
- if (!port) {
239
- return;
240
- }
241
- port.postMessage({
242
- type: "WEEB3_PONG",
243
- protocol: SERVICE_WORKER_PROTOCOL,
244
- scope: SCOPE_PATH,
245
- marker: SERVICE_WORKER_MARKER
246
- });
247
- closeMessagePort(port);
248
188
  });
249
189
 
250
190
  self.addEventListener("fetch", (event) => {
@@ -269,27 +209,16 @@ self.addEventListener("fetch", (event) => {
269
209
  }
270
210
 
271
211
  const bzzResource = canonicalBzzResource(url);
272
- if (bzzResource && (request.method === "GET" || request.method === "HEAD")) {
273
- if (isAppShellNavigation(request)) {
212
+ if (
213
+ (request.method === "GET" || request.method === "HEAD") &&
214
+ (bzzResource || canonicalRawResource(url) || canonicalFeedResource(url))
215
+ ) {
216
+ if (bzzResource && isAppShellNavigation(request)) {
274
217
  event.respondWith(fetchOrError(appShellRequest(request)));
275
218
  } else {
276
219
  event.respondWith(forwardRequestToRust(request, event.clientId, event.resultingClientId));
277
220
  }
278
- return;
279
- }
280
-
281
- const rawResource = canonicalRawResource(url);
282
- if (rawResource && (request.method === "GET" || request.method === "HEAD")) {
283
- event.respondWith(forwardRequestToRust(request, event.clientId, event.resultingClientId));
284
- return;
285
221
  }
286
-
287
- const feedResource = canonicalFeedResource(url);
288
- if (feedResource && (request.method === "GET" || request.method === "HEAD")) {
289
- event.respondWith(forwardRequestToRust(request, event.clientId, event.resultingClientId));
290
- return;
291
- }
292
-
293
222
  });
294
223
 
295
224
  function isStableWindowClient(client) {
@@ -634,16 +563,6 @@ function responseBodyStream(body) {
634
563
  });
635
564
  }
636
565
 
637
- function responseHeaders(headerRows) {
638
- const headers = new Headers();
639
- for (const row of headerRows || []) {
640
- if (row && row.length >= 2) {
641
- headers.set(String(row[0]), String(row[1]));
642
- }
643
- }
644
- return headers;
645
- }
646
-
647
566
  function requestRustRange(client, url, start, end, networkId) {
648
567
  const key = `${client?.id || ""}|${networkId}|${url}|${start}|${end}`;
649
568
  const existing = RANGE_REQUEST_FLIGHTS.get(key);
@@ -675,11 +594,7 @@ function requestRustRange(client, url, start, end, networkId) {
675
594
  return { ok: true, body };
676
595
  });
677
596
  RANGE_REQUEST_FLIGHTS.set(key, request);
678
- request.finally(() => {
679
- if (RANGE_REQUEST_FLIGHTS.get(key) === request) {
680
- RANGE_REQUEST_FLIGHTS.delete(key);
681
- }
682
- }).catch(() => {});
597
+ request.finally(() => RANGE_REQUEST_FLIGHTS.delete(key)).catch(() => {});
683
598
  return request;
684
599
  }
685
600
 
@@ -689,7 +604,6 @@ function createRustRangeStream(
689
604
  size,
690
605
  networkId,
691
606
  windowBytes,
692
- initialLookahead,
693
607
  lookahead
694
608
  ) {
695
609
  let position = 0;
@@ -697,34 +611,12 @@ function createRustRangeStream(
697
611
  let admissionOpen = true;
698
612
  const scheduled = new Map();
699
613
 
700
- const nextRangeBounds = () => {
701
- if (!admissionOpen || schedulePosition >= size) {
702
- return null;
703
- }
704
-
705
- const start = schedulePosition;
706
- const end = Math.min(start + windowBytes - 1, size - 1);
707
- schedulePosition = end + 1;
708
- return { start, end };
709
- };
710
-
711
- const admitRange = () => {
712
- const range = nextRangeBounds();
713
- if (!range) {
714
- return null;
715
- }
716
- const { start, end } = range;
717
- const request = requestRustRange(client, url, start, end, networkId);
718
- scheduled.set(start, request);
719
- return { start, request };
720
- };
721
-
722
614
  const scheduleMore = () => {
723
- const limit = position < initialLookahead * windowBytes ? initialLookahead : lookahead;
724
- while (admissionOpen && schedulePosition < size && scheduled.size < limit) {
725
- if (!admitRange()) {
726
- break;
727
- }
615
+ while (admissionOpen && schedulePosition < size && scheduled.size < lookahead) {
616
+ const start = schedulePosition;
617
+ const end = Math.min(start + windowBytes - 1, size - 1);
618
+ schedulePosition = end + 1;
619
+ scheduled.set(start, requestRustRange(client, url, start, end, networkId));
728
620
  }
729
621
  };
730
622
 
@@ -734,15 +626,11 @@ function createRustRangeStream(
734
626
  });
735
627
  };
736
628
 
737
- const closeAdmission = () => {
738
- admissionOpen = false;
739
- };
740
-
741
629
  const failStream = async (controller, error) => {
742
630
  if (!admissionOpen) {
743
631
  return;
744
632
  }
745
- closeAdmission();
633
+ admissionOpen = false;
746
634
  controller.error(error);
747
635
  await drainScheduledRanges();
748
636
  };
@@ -751,27 +639,15 @@ function createRustRangeStream(
751
639
  async pull(controller) {
752
640
  try {
753
641
  if (position >= size) {
754
- closeAdmission();
642
+ admissionOpen = false;
755
643
  controller.close();
756
644
  await drainScheduledRanges();
757
645
  return;
758
646
  }
759
647
 
760
648
  scheduleMore();
761
- const start = Math.floor(position / windowBytes) * windowBytes;
762
- let pending = scheduled.get(start);
763
- if (!pending) {
764
- const foreground = admitRange();
765
- if (!foreground || foreground.start !== start) {
766
- await failStream(
767
- controller,
768
- new Error("weeb-3 foreground stream window was not admitted")
769
- );
770
- return;
771
- }
772
- pending = foreground.request;
773
- }
774
- const response = await pending;
649
+ const start = position;
650
+ const response = await scheduled.get(start);
775
651
  scheduled.delete(start);
776
652
 
777
653
  if (!admissionOpen) {
@@ -785,7 +661,7 @@ function createRustRangeStream(
785
661
  return;
786
662
  }
787
663
 
788
- const body = toUint8Array(response.body);
664
+ const body = response.body;
789
665
  position = start + body.byteLength;
790
666
  controller.enqueue(body);
791
667
  scheduleMore();
@@ -796,7 +672,7 @@ function createRustRangeStream(
796
672
  }
797
673
  },
798
674
  cancel() {
799
- closeAdmission();
675
+ admissionOpen = false;
800
676
  return drainScheduledRanges();
801
677
  }
802
678
  });
@@ -822,7 +698,7 @@ async function forwardRequestToRust(request, clientId, resultingClientId) {
822
698
  );
823
699
 
824
700
  const status = Number(response.status || (response.ok ? 200 : 404));
825
- const headers = responseHeaders(response.headers);
701
+ const headers = new Headers(response.headers);
826
702
 
827
703
  if (!response.ok) {
828
704
  return new Response(response.error || "weeb-3 request failed", {
@@ -831,44 +707,27 @@ async function forwardRequestToRust(request, clientId, resultingClientId) {
831
707
  });
832
708
  }
833
709
 
710
+ let body;
834
711
  if (response.stream && request.method !== "HEAD") {
835
712
  const size = Number(headers.get("Content-Length") || "0");
836
713
  if (!Number.isSafeInteger(size) || size <= 0) {
837
714
  return new Response("weeb-3 stream response has an invalid length", { status: 502 });
838
715
  }
839
- const liveHlsResource = hlsResource && url.searchParams.get("start") === "live";
840
- const windowBytes = liveHlsResource
841
- ? HLS_LIVE_STREAM_WINDOW_BYTES
842
- : hlsResource ? HLS_STREAM_WINDOW_BYTES : STREAM_STORAGE_WINDOW_BYTES;
843
- const lookahead = liveHlsResource
844
- ? HLS_LIVE_STREAM_LOOKAHEAD_CHUNKS
845
- : hlsResource ? HLS_STREAM_LOOKAHEAD_CHUNKS : STREAM_LOOKAHEAD_CHUNKS;
846
- const initialLookahead = hlsResource
847
- ? HLS_STREAM_INITIAL_LOOKAHEAD_CHUNKS
848
- : lookahead;
849
- return new Response(createRustRangeStream(
716
+ const lookahead = hlsResource ? HLS_STREAM_LOOKAHEAD_CHUNKS : STREAM_LOOKAHEAD_CHUNKS;
717
+ body = createRustRangeStream(
850
718
  client,
851
719
  request.url,
852
720
  size,
853
721
  networkId,
854
- windowBytes,
855
- initialLookahead,
722
+ STREAM_WINDOW_BYTES,
856
723
  lookahead
857
- ), {
858
- status,
859
- headers
860
- });
861
- }
862
-
863
- return new Response(
864
- request.method === "HEAD" || status === 304
724
+ );
725
+ } else {
726
+ body = request.method === "HEAD" || status === 304
865
727
  ? null
866
- : responseBodyStream(response.body),
867
- {
868
- status,
869
- headers
870
- }
871
- );
728
+ : responseBodyStream(response.body);
729
+ }
730
+ return new Response(body, { status, headers });
872
731
  } catch (error) {
873
732
  return new Response(error && error.message ? error.message : "weeb-3 forwarder error", {
874
733
  status: 502
@@ -1,4 +1,23 @@
1
1
  export async function loadHls() {
2
2
  const module = await import("hls.js");
3
- return module.default ?? module.Hls;
3
+ const Hls = module.default ?? module.Hls;
4
+ class BufferController extends Hls.DefaultConfig.bufferController {
5
+ constructor(hls, tracker) {
6
+ super(hls, tracker);
7
+ hls.on(Hls.Events.LEVEL_LOADED, (_, { details, levelInfo }) => {
8
+ const previous = levelInfo?.details ?? (details.live && hls.latestLevelDetails);
9
+ const offset = hls.config.timelineOffset;
10
+ if (offset > 0 && previous && previous !== details &&
11
+ (previous.live || details.live) && previous.appliedTimelineOffset === offset) {
12
+ // Merging inherits the origin.
13
+ details.appliedTimelineOffset = offset;
14
+ }
15
+ });
16
+ }
17
+ }
18
+ return class extends Hls {
19
+ constructor(config) {
20
+ super({ ...config, bufferController: BufferController });
21
+ }
22
+ };
4
23
  }
package/weeb_3.d.ts CHANGED
@@ -70,50 +70,56 @@ export interface InitOutput {
70
70
  readonly memory: WebAssembly.Memory;
71
71
  readonly __wbg_weeb3no103_free: (a: number, b: number) => void;
72
72
  readonly __wbg_weeb3workerruntime_free: (a: number, b: number) => void;
73
- readonly interweeb: (a: number, b: number) => number;
74
- readonly weeb3no103_acquireFeedBytes: (a: number, b: number, c: number, d: number, e: number) => number;
75
- readonly weeb3no103_attachStream: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => number;
76
- readonly weeb3no103_batchState: (a: number, b: number, c: number) => number;
77
- readonly weeb3no103_buyBatch: (a: number, b: number, c: number) => number;
78
- readonly weeb3no103_deployChequebook: (a: number) => number;
79
- readonly weeb3no103_depositChequebook: (a: number, b: number, c: number) => number;
80
- readonly weeb3no103_logs: (a: number) => number;
81
- readonly weeb3no103_networkState: (a: number) => number;
73
+ readonly interweeb: (a: number, b: number) => any;
74
+ readonly weeb3no103_acquireFeedBytes: (a: number, b: number, c: number, d: number, e: number) => any;
75
+ readonly weeb3no103_attachStream: (a: number, b: any, c: number, d: number, e: number, f: number, g: number, h: number) => any;
76
+ readonly weeb3no103_batchState: (a: number, b: number, c: number) => any;
77
+ readonly weeb3no103_buyBatch: (a: number, b: number, c: number) => any;
78
+ readonly weeb3no103_deployChequebook: (a: number) => any;
79
+ readonly weeb3no103_depositChequebook: (a: number, b: number, c: number) => any;
80
+ readonly weeb3no103_logs: (a: number) => any;
81
+ readonly weeb3no103_networkState: (a: number) => any;
82
82
  readonly weeb3no103_new: (a: number, b: number) => number;
83
- readonly weeb3no103_openSecureVault: (a: number) => number;
84
- readonly weeb3no103_postFeedBytes: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number) => number;
85
- readonly weeb3no103_postPushChunk: (a: number, b: number, c: number, d: number, e: number) => number;
86
- readonly weeb3no103_postUploadBytes: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number) => number;
87
- readonly weeb3no103_postUploadBytesWithRedundancy: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number) => number;
88
- readonly weeb3no103_progressSnapshot: (a: number, b: number) => number;
89
- readonly weeb3no103_ready: (a: number, b: number, c: number) => number;
90
- readonly weeb3no103_renderInterface: (a: number, b: number) => number;
91
- readonly weeb3no103_resetStamp: (a: number) => number;
92
- readonly weeb3no103_retrieve: (a: number, b: number, c: number) => number;
93
- readonly weeb3no103_retrieveBytes: (a: number, b: number, c: number) => number;
94
- readonly weeb3no103_retrieveChunk: (a: number, b: number, c: number) => number;
83
+ readonly weeb3no103_openSecureVault: (a: number) => any;
84
+ readonly weeb3no103_postFeedBytes: (a: number, b: number, c: number, d: any, e: number, f: number, g: number, h: number, i: number, j: number, k: number) => any;
85
+ readonly weeb3no103_postPushChunk: (a: number, b: any, c: number, d: any, e: any) => any;
86
+ readonly weeb3no103_postUploadBytes: (a: number, b: any, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number) => any;
87
+ readonly weeb3no103_postUploadBytesWithRedundancy: (a: number, b: any, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number) => any;
88
+ readonly weeb3no103_progressSnapshot: (a: number, b: number) => any;
89
+ readonly weeb3no103_ready: (a: number, b: number, c: number) => any;
90
+ readonly weeb3no103_renderInterface: (a: number, b: any) => any;
91
+ readonly weeb3no103_resetStamp: (a: number) => any;
92
+ readonly weeb3no103_retrieve: (a: number, b: number, c: number) => any;
93
+ readonly weeb3no103_retrieveBytes: (a: number, b: number, c: number) => any;
94
+ readonly weeb3no103_retrieveChunk: (a: number, b: number, c: number) => any;
95
95
  readonly weeb3no103_start: (a: number, b: number) => void;
96
- readonly weeb3no103_switchNetwork: (a: number, b: number, c: number) => number;
97
- readonly weeb3no103_upload: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => number;
98
- readonly weeb3no103_uploadWithRedundancy: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number) => number;
99
- readonly weeb3workerruntime_handleMessage: (a: number, b: number) => number;
96
+ readonly weeb3no103_switchNetwork: (a: number, b: number, c: number) => any;
97
+ readonly weeb3no103_upload: (a: number, b: any, c: number, d: number, e: number, f: number, g: number, h: number) => any;
98
+ readonly weeb3no103_uploadWithRedundancy: (a: number, b: any, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number) => any;
99
+ readonly weeb3workerruntime_handleMessage: (a: number, b: any) => any;
100
100
  readonly weeb3workerruntime_new: () => number;
101
- readonly weeb3workerruntime_start: (a: number, b: number) => number;
101
+ readonly weeb3workerruntime_start: (a: number, b: any) => any;
102
102
  readonly __wbg_requestarguments_free: (a: number, b: number) => void;
103
- readonly requestarguments_method: (a: number, b: number) => void;
104
- readonly requestarguments_params: (a: number) => number;
105
- readonly __wasm_bindgen_func_elem_562: (a: number, b: number) => void;
106
- readonly __wasm_bindgen_func_elem_1331: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
107
- readonly __wasm_bindgen_func_elem_1329: (a: number, b: number, c: number, d: number) => void;
108
- readonly __wasm_bindgen_func_elem_1333: (a: number, b: number, c: number, d: number) => void;
109
- readonly __wasm_bindgen_func_elem_3252: (a: number, b: number, c: number, d: number) => void;
110
- readonly __wasm_bindgen_func_elem_3022: (a: number, b: number, c: number) => void;
111
- readonly __wasm_bindgen_func_elem_3015: (a: number, b: number) => void;
112
- readonly __wbindgen_export: (a: number, b: number) => number;
113
- readonly __wbindgen_export2: (a: number, b: number, c: number, d: number) => number;
114
- readonly __wbindgen_export3: (a: number) => void;
115
- readonly __wbindgen_add_to_stack_pointer: (a: number) => number;
116
- readonly __wbindgen_export4: (a: number, b: number, c: number) => void;
103
+ readonly requestarguments_method: (a: number) => [number, number];
104
+ readonly requestarguments_params: (a: number) => any;
105
+ readonly wasm_bindgen_2fc1ddd1063c2c6b___closure__destroy___dyn_core_ed718c3d60ebd546___ops__function__Fn__wasm_bindgen_2fc1ddd1063c2c6b___JsValue__wasm_bindgen_2fc1ddd1063c2c6b___JsValue___Output_______: (a: number, b: number) => void;
106
+ readonly wasm_bindgen_2fc1ddd1063c2c6b___closure__destroy___dyn_core_ed718c3d60ebd546___ops__function__FnMut__wasm_bindgen_2fc1ddd1063c2c6b___JsValue____Output_______: (a: number, b: number) => void;
107
+ readonly wasm_bindgen_2fc1ddd1063c2c6b___closure__destroy___dyn_core_ed718c3d60ebd546___ops__function__FnMut_____Output_______: (a: number, b: number) => void;
108
+ readonly wasm_bindgen_2fc1ddd1063c2c6b___convert__closures_____invoke___wasm_bindgen_2fc1ddd1063c2c6b___JsValue__alloc_508e33bd5656020b___string__String__core_ed718c3d60ebd546___result__Result_____wasm_bindgen_2fc1ddd1063c2c6b___JsValue__: (a: number, b: number, c: any, d: number, e: number) => [number, number];
109
+ readonly wasm_bindgen_2fc1ddd1063c2c6b___convert__closures_____invoke___wasm_bindgen_2fc1ddd1063c2c6b___JsValue__wasm_bindgen_2fc1ddd1063c2c6b___JsValue_____: (a: number, b: number, c: any, d: any) => void;
110
+ readonly wasm_bindgen_2fc1ddd1063c2c6b___convert__closures_____invoke___web_sys_672975c58fd3dbc7___features__gen_IdbVersionChangeEvent__IdbVersionChangeEvent__core_ed718c3d60ebd546___result__Result_____wasm_bindgen_2fc1ddd1063c2c6b___JsValue__: (a: number, b: number, c: any) => [number, number];
111
+ readonly wasm_bindgen_2fc1ddd1063c2c6b___convert__closures_____invoke___wasm_bindgen_2fc1ddd1063c2c6b___JsValue__wasm_bindgen_2fc1ddd1063c2c6b___JsValue______1_: (a: number, b: number, c: any, d: any) => void;
112
+ readonly wasm_bindgen_2fc1ddd1063c2c6b___convert__closures_____invoke___web_sys_672975c58fd3dbc7___features__gen_MessageEvent__MessageEvent_____: (a: number, b: number, c: any) => void;
113
+ readonly wasm_bindgen_2fc1ddd1063c2c6b___convert__closures_____invoke___wasm_bindgen_2fc1ddd1063c2c6b___JsValue_____: (a: number, b: number, c: any) => void;
114
+ readonly wasm_bindgen_2fc1ddd1063c2c6b___convert__closures_____invoke______: (a: number, b: number) => void;
115
+ readonly __wbindgen_malloc: (a: number, b: number) => number;
116
+ readonly __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number;
117
+ readonly __wbindgen_exn_store: (a: number) => void;
118
+ readonly __externref_table_alloc: () => number;
119
+ readonly __wbindgen_externrefs: WebAssembly.Table;
120
+ readonly __wbindgen_free: (a: number, b: number, c: number) => void;
121
+ readonly __externref_table_dealloc: (a: number) => void;
122
+ readonly __wbindgen_start: () => void;
117
123
  }
118
124
 
119
125
  export type SyncInitInput = BufferSource | WebAssembly.Module;