@kbve/droid 0.0.6 → 0.1.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.
- package/comlink.js +1 -7
- package/droid.mjs +191 -61
- package/index.d.ts +29 -0
- package/index.js +9054 -2763
- package/lib/gateway/SupabaseGateway.d.ts +38 -0
- package/lib/gateway/SupabaseGateway.d.ts.map +1 -0
- package/lib/gateway/WorkerCommunication.d.ts +39 -0
- package/lib/gateway/WorkerCommunication.d.ts.map +1 -0
- package/lib/gateway/WorkerPool.d.ts +55 -0
- package/lib/gateway/WorkerPool.d.ts.map +1 -0
- package/lib/gateway/capabilities.d.ts +23 -0
- package/lib/gateway/capabilities.d.ts.map +1 -0
- package/lib/gateway/index.d.ts +9 -0
- package/lib/gateway/index.d.ts.map +1 -0
- package/lib/gateway/strategies/DirectStrategy.d.ts +52 -0
- package/lib/gateway/strategies/DirectStrategy.d.ts.map +1 -0
- package/lib/gateway/strategies/SharedWorkerStrategy.d.ts +46 -0
- package/lib/gateway/strategies/SharedWorkerStrategy.d.ts.map +1 -0
- package/lib/gateway/strategies/WebWorkerStrategy.d.ts +45 -0
- package/lib/gateway/strategies/WebWorkerStrategy.d.ts.map +1 -0
- package/lib/gateway/types.d.ts +81 -0
- package/lib/gateway/types.d.ts.map +1 -0
- package/lib/workers/canvas-ui-renderer.d.ts +25 -0
- package/lib/workers/canvas-ui-renderer.d.ts.map +1 -0
- package/lib/workers/canvas-worker.d.ts +14 -0
- package/lib/workers/canvas-worker.d.ts.map +1 -0
- package/lib/workers/canvas-worker.js +291 -145
- package/lib/workers/data.d.ts +40 -0
- package/lib/workers/data.d.ts.map +1 -0
- package/lib/workers/db-worker.d.ts +69 -0
- package/lib/workers/db-worker.d.ts.map +1 -0
- package/lib/workers/db-worker.js +2680 -2147
- package/lib/workers/events.d.ts +11 -0
- package/lib/workers/events.d.ts.map +1 -0
- package/lib/workers/flexbuilder.d.ts +4 -0
- package/lib/workers/flexbuilder.d.ts.map +1 -0
- package/lib/workers/init.d.ts +11 -0
- package/lib/workers/init.d.ts.map +1 -0
- package/lib/workers/main.d.ts +107 -0
- package/lib/workers/main.d.ts.map +1 -0
- package/lib/workers/supabase-db-worker.d.ts +2 -0
- package/lib/workers/supabase-db-worker.d.ts.map +1 -0
- package/lib/workers/supabase-db-worker.js +9337 -0
- package/lib/workers/supabase-shared-worker.d.ts +2 -0
- package/lib/workers/supabase-shared-worker.d.ts.map +1 -0
- package/lib/workers/supabase-shared-worker.js +12635 -0
- package/lib/workers/tools.d.ts +4 -0
- package/lib/workers/tools.d.ts.map +1 -0
- package/lib/workers/validate.d.ts +15 -0
- package/lib/workers/validate.d.ts.map +1 -0
- package/lib/workers/ws-worker.d.ts +11 -0
- package/lib/workers/ws-worker.d.ts.map +1 -0
- package/lib/workers/ws-worker.js +174 -115
- package/main.js +4875 -0
- package/package.json +17 -6
- package/reference.js +688 -228
- package/src/index.ts +38 -13
- package/src/lib/droid.spec.ts +14 -19
- package/src/lib/droid.ts +48 -4
- package/src/lib/gateway/SupabaseGateway.ts +183 -0
- package/src/lib/gateway/WorkerCommunication.ts +132 -0
- package/src/lib/gateway/WorkerPool.ts +304 -0
- package/src/lib/gateway/capabilities.ts +80 -0
- package/src/lib/gateway/index.ts +15 -0
- package/src/lib/gateway/strategies/DirectStrategy.ts +443 -0
- package/src/lib/gateway/strategies/SharedWorkerStrategy.ts +278 -0
- package/src/lib/gateway/strategies/WebWorkerStrategy.ts +278 -0
- package/src/lib/gateway/types.ts +112 -0
- package/src/lib/mod/mod-manager.ts +13 -8
- package/src/lib/mod/module/bento/mod-bento.worker.ts +1 -1
- package/src/lib/mod/module/supabase/mod-supabase.spec.ts +21 -25
- package/src/lib/mod/module/supabase/mod-supabase.ts +68 -0
- package/src/lib/mod/module/supabase/mod-supabase.worker.ts +1 -56
- package/src/lib/state/auth.spec.ts +58 -0
- package/src/lib/state/auth.ts +30 -0
- package/src/lib/state/index.ts +34 -0
- package/src/lib/state/overlay-manager.ts +125 -0
- package/src/lib/state/router.ts +24 -0
- package/src/lib/state/theme-sync.ts +75 -0
- package/src/lib/state/toasts.spec.ts +106 -0
- package/src/lib/state/toasts.ts +34 -0
- package/src/lib/state/ui.spec.ts +148 -0
- package/src/lib/state/ui.ts +45 -0
- package/src/lib/state/welcome-toast.ts +76 -0
- package/src/lib/types/bento.spec.ts +116 -0
- package/src/lib/types/bento.ts +94 -55
- package/src/lib/types/event-types.spec.ts +93 -0
- package/src/lib/types/event-types.ts +39 -3
- package/src/lib/types/modules.ts +12 -5
- package/src/lib/types/ui-event-types.ts +66 -0
- package/src/lib/workers/canvas-ui-renderer.ts +266 -0
- package/src/lib/workers/canvas-worker.ts +94 -9
- package/src/lib/workers/data.ts +59 -36
- package/src/lib/workers/db-worker.ts +79 -32
- package/src/lib/workers/events.spec.ts +208 -0
- package/src/lib/workers/events.ts +27 -14
- package/src/lib/workers/flexbuilder.ts +2 -2
- package/src/lib/workers/init.ts +25 -17
- package/src/lib/workers/main.ts +510 -316
- package/src/lib/workers/supabase-db-worker.ts +221 -0
- package/src/lib/workers/supabase-shared-worker.ts +572 -0
- package/src/lib/workers/validate.ts +64 -0
- package/src/lib/workers/ws-worker.ts +156 -25
- package/src/setup-vitest.ts +4 -2
- package/src/types.ts +30 -0
- package/src/vite-env.d.ts +1 -0
- package/workers/main.js +10 -1123
- package/src/types.d.ts +0 -31
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../../../../packages/npm/droid/src/lib/workers/tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,IAAI,QAM3C;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW,CAiD3D"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export type UIMessageType = 'toast' | 'toast-remove' | 'tooltip-open' | 'tooltip-close' | 'modal-open' | 'modal-close';
|
|
2
|
+
export interface ValidatedWorkerMessage {
|
|
3
|
+
type: UIMessageType;
|
|
4
|
+
payload: unknown;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Validate a UI message payload BEFORE postMessage to main thread.
|
|
8
|
+
* Returns the validated message or throws with a descriptive error.
|
|
9
|
+
*
|
|
10
|
+
* Usage (inside worker):
|
|
11
|
+
* const msg = validateUIMessage('toast', rawPayload);
|
|
12
|
+
* emitFromWorker(msg); // guaranteed valid
|
|
13
|
+
*/
|
|
14
|
+
export declare function validateUIMessage(type: UIMessageType, payload: unknown): ValidatedWorkerMessage;
|
|
15
|
+
//# sourceMappingURL=validate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../../../../packages/npm/droid/src/lib/workers/validate.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,aAAa,GACtB,OAAO,GACP,cAAc,GACd,cAAc,GACd,eAAe,GACf,YAAY,GACZ,aAAa,CAAC;AAQjB,MAAM,WAAW,sBAAsB;IACtC,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAChC,IAAI,EAAE,aAAa,EACnB,OAAO,EAAE,OAAO,GACd,sBAAsB,CA0BxB"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
declare const wsInstanceAPI: {
|
|
2
|
+
connect(url: string): Promise<void>;
|
|
3
|
+
send(payload: Uint8Array): Promise<void>;
|
|
4
|
+
close(): Promise<void>;
|
|
5
|
+
onMessage(callback: (data: string | ArrayBuffer) => void): void;
|
|
6
|
+
onStatus(callback: (status: string) => void): void;
|
|
7
|
+
getStatus(): Promise<string>;
|
|
8
|
+
};
|
|
9
|
+
export type WSInstance = typeof wsInstanceAPI;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=ws-worker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ws-worker.d.ts","sourceRoot":"","sources":["../../../../../../packages/npm/droid/src/lib/workers/ws-worker.ts"],"names":[],"mappings":"AAkFA,QAAA,MAAM,aAAa;iBACC,MAAM;kBAiEL,UAAU;;wBAqBV,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,KAAK,IAAI;uBAIrC,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI;iBAIxB,OAAO,CAAC,MAAM,CAAC;CAUlC,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,OAAO,aAAa,CAAC"}
|
package/lib/workers/ws-worker.js
CHANGED
|
@@ -1,19 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
* Copyright 2019 Google LLC
|
|
4
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
-
*/
|
|
6
|
-
const T = Symbol("Comlink.proxy"), N = Symbol("Comlink.endpoint"), H = Symbol("Comlink.releaseProxy"), k = Symbol("Comlink.finalizer"), h = Symbol("Comlink.thrown"), C = (e) => typeof e == "object" && e !== null || typeof e == "function", I = {
|
|
7
|
-
canHandle: (e) => C(e) && e[T],
|
|
1
|
+
const L = /* @__PURE__ */ Symbol("Comlink.proxy"), $ = /* @__PURE__ */ Symbol("Comlink.endpoint"), B = /* @__PURE__ */ Symbol("Comlink.releaseProxy"), R = /* @__PURE__ */ Symbol("Comlink.finalizer"), k = /* @__PURE__ */ Symbol("Comlink.thrown"), z = (e) => typeof e == "object" && e !== null || typeof e == "function", Y = {
|
|
2
|
+
canHandle: (e) => z(e) && e[L],
|
|
8
3
|
serialize(e) {
|
|
9
4
|
const { port1: t, port2: n } = new MessageChannel();
|
|
10
|
-
return
|
|
5
|
+
return H(e, t), [n, [n]];
|
|
11
6
|
},
|
|
12
7
|
deserialize(e) {
|
|
13
|
-
return e.start(),
|
|
8
|
+
return e.start(), v(e);
|
|
14
9
|
}
|
|
15
|
-
},
|
|
16
|
-
canHandle: (e) =>
|
|
10
|
+
}, q = {
|
|
11
|
+
canHandle: (e) => z(e) && k in e,
|
|
17
12
|
serialize({ value: e }) {
|
|
18
13
|
let t;
|
|
19
14
|
return e instanceof Error ? t = {
|
|
@@ -28,48 +23,48 @@ const T = Symbol("Comlink.proxy"), N = Symbol("Comlink.endpoint"), H = Symbol("C
|
|
|
28
23
|
deserialize(e) {
|
|
29
24
|
throw e.isError ? Object.assign(new Error(e.value.message), e.value) : e.value;
|
|
30
25
|
}
|
|
31
|
-
},
|
|
32
|
-
["proxy",
|
|
33
|
-
["throw",
|
|
26
|
+
}, D = /* @__PURE__ */ new Map([
|
|
27
|
+
["proxy", Y],
|
|
28
|
+
["throw", q]
|
|
34
29
|
]);
|
|
35
|
-
function
|
|
30
|
+
function J(e, t) {
|
|
36
31
|
for (const n of e)
|
|
37
32
|
if (t === n || n === "*" || n instanceof RegExp && n.test(t))
|
|
38
33
|
return !0;
|
|
39
34
|
return !1;
|
|
40
35
|
}
|
|
41
|
-
function
|
|
42
|
-
t.addEventListener("message", function
|
|
43
|
-
if (!
|
|
36
|
+
function H(e, t = globalThis, n = ["*"]) {
|
|
37
|
+
t.addEventListener("message", function d(o) {
|
|
38
|
+
if (!o || !o.data)
|
|
44
39
|
return;
|
|
45
|
-
if (!
|
|
46
|
-
console.warn(`Invalid origin '${
|
|
40
|
+
if (!J(n, o.origin)) {
|
|
41
|
+
console.warn(`Invalid origin '${o.origin}' for comlink proxy`);
|
|
47
42
|
return;
|
|
48
43
|
}
|
|
49
|
-
const { id: a, type: g, path:
|
|
44
|
+
const { id: a, type: g, path: l } = Object.assign({ path: [] }, o.data), u = (o.data.argumentList || []).map(y);
|
|
50
45
|
let s;
|
|
51
46
|
try {
|
|
52
|
-
const
|
|
47
|
+
const c = l.slice(0, -1).reduce((i, b) => i[b], e), f = l.reduce((i, b) => i[b], e);
|
|
53
48
|
switch (g) {
|
|
54
49
|
case "GET":
|
|
55
50
|
s = f;
|
|
56
51
|
break;
|
|
57
52
|
case "SET":
|
|
58
|
-
|
|
53
|
+
c[l.slice(-1)[0]] = y(o.data.value), s = !0;
|
|
59
54
|
break;
|
|
60
55
|
case "APPLY":
|
|
61
|
-
s = f.apply(
|
|
56
|
+
s = f.apply(c, u);
|
|
62
57
|
break;
|
|
63
58
|
case "CONSTRUCT":
|
|
64
59
|
{
|
|
65
60
|
const i = new f(...u);
|
|
66
|
-
s =
|
|
61
|
+
s = te(i);
|
|
67
62
|
}
|
|
68
63
|
break;
|
|
69
64
|
case "ENDPOINT":
|
|
70
65
|
{
|
|
71
|
-
const { port1: i, port2:
|
|
72
|
-
|
|
66
|
+
const { port1: i, port2: b } = new MessageChannel();
|
|
67
|
+
H(e, b), s = ee(i, [i]);
|
|
73
68
|
}
|
|
74
69
|
break;
|
|
75
70
|
case "RELEASE":
|
|
@@ -78,31 +73,31 @@ function M(e, t = globalThis, n = ["*"]) {
|
|
|
78
73
|
default:
|
|
79
74
|
return;
|
|
80
75
|
}
|
|
81
|
-
} catch (
|
|
82
|
-
s = { value:
|
|
76
|
+
} catch (c) {
|
|
77
|
+
s = { value: c, [k]: 0 };
|
|
83
78
|
}
|
|
84
|
-
Promise.resolve(s).catch((
|
|
85
|
-
const [f, i] =
|
|
86
|
-
t.postMessage(Object.assign(Object.assign({}, f), { id: a }), i), g === "RELEASE" && (t.removeEventListener("message",
|
|
87
|
-
}).catch((
|
|
88
|
-
const [f, i] =
|
|
79
|
+
Promise.resolve(s).catch((c) => ({ value: c, [k]: 0 })).then((c) => {
|
|
80
|
+
const [f, i] = P(c);
|
|
81
|
+
t.postMessage(Object.assign(Object.assign({}, f), { id: a }), i), g === "RELEASE" && (t.removeEventListener("message", d), F(t), R in e && typeof e[R] == "function" && e[R]());
|
|
82
|
+
}).catch((c) => {
|
|
83
|
+
const [f, i] = P({
|
|
89
84
|
value: new TypeError("Unserializable return value"),
|
|
90
|
-
[
|
|
85
|
+
[k]: 0
|
|
91
86
|
});
|
|
92
87
|
t.postMessage(Object.assign(Object.assign({}, f), { id: a }), i);
|
|
93
88
|
});
|
|
94
89
|
}), t.start && t.start();
|
|
95
90
|
}
|
|
96
|
-
function
|
|
91
|
+
function X(e) {
|
|
97
92
|
return e.constructor.name === "MessagePort";
|
|
98
93
|
}
|
|
99
|
-
function
|
|
100
|
-
|
|
94
|
+
function F(e) {
|
|
95
|
+
X(e) && e.close();
|
|
101
96
|
}
|
|
102
|
-
function
|
|
97
|
+
function v(e, t) {
|
|
103
98
|
const n = /* @__PURE__ */ new Map();
|
|
104
|
-
return e.addEventListener("message", function(
|
|
105
|
-
const { data: a } =
|
|
99
|
+
return e.addEventListener("message", function(o) {
|
|
100
|
+
const { data: a } = o;
|
|
106
101
|
if (!a || !a.id)
|
|
107
102
|
return;
|
|
108
103
|
const g = n.get(a.id);
|
|
@@ -112,112 +107,112 @@ function D(e, t) {
|
|
|
112
107
|
} finally {
|
|
113
108
|
n.delete(a.id);
|
|
114
109
|
}
|
|
115
|
-
}),
|
|
110
|
+
}), _(e, n, [], t);
|
|
116
111
|
}
|
|
117
|
-
function
|
|
112
|
+
function h(e) {
|
|
118
113
|
if (e)
|
|
119
114
|
throw new Error("Proxy has been released and is not useable");
|
|
120
115
|
}
|
|
121
|
-
function
|
|
116
|
+
function V(e) {
|
|
122
117
|
return m(e, /* @__PURE__ */ new Map(), {
|
|
123
118
|
type: "RELEASE"
|
|
124
119
|
}).then(() => {
|
|
125
|
-
|
|
120
|
+
F(e);
|
|
126
121
|
});
|
|
127
122
|
}
|
|
128
|
-
const
|
|
129
|
-
const t = (
|
|
130
|
-
|
|
123
|
+
const C = /* @__PURE__ */ new WeakMap(), O = "FinalizationRegistry" in globalThis && new FinalizationRegistry((e) => {
|
|
124
|
+
const t = (C.get(e) || 0) - 1;
|
|
125
|
+
C.set(e, t), t === 0 && V(e);
|
|
131
126
|
});
|
|
132
|
-
function
|
|
133
|
-
const n = (
|
|
134
|
-
|
|
127
|
+
function K(e, t) {
|
|
128
|
+
const n = (C.get(t) || 0) + 1;
|
|
129
|
+
C.set(t, n), O && O.register(e, t, e);
|
|
135
130
|
}
|
|
136
|
-
function
|
|
137
|
-
|
|
131
|
+
function Q(e) {
|
|
132
|
+
O && O.unregister(e);
|
|
138
133
|
}
|
|
139
|
-
function
|
|
134
|
+
function _(e, t, n = [], d = function() {
|
|
140
135
|
}) {
|
|
141
|
-
let
|
|
142
|
-
const a = new Proxy(
|
|
143
|
-
get(g,
|
|
144
|
-
if (
|
|
136
|
+
let o = !1;
|
|
137
|
+
const a = new Proxy(d, {
|
|
138
|
+
get(g, l) {
|
|
139
|
+
if (h(o), l === B)
|
|
145
140
|
return () => {
|
|
146
|
-
|
|
141
|
+
Q(a), V(e), t.clear(), o = !0;
|
|
147
142
|
};
|
|
148
|
-
if (
|
|
143
|
+
if (l === "then") {
|
|
149
144
|
if (n.length === 0)
|
|
150
145
|
return { then: () => a };
|
|
151
146
|
const u = m(e, t, {
|
|
152
147
|
type: "GET",
|
|
153
148
|
path: n.map((s) => s.toString())
|
|
154
|
-
}).then(
|
|
149
|
+
}).then(y);
|
|
155
150
|
return u.then.bind(u);
|
|
156
151
|
}
|
|
157
|
-
return
|
|
152
|
+
return _(e, t, [...n, l]);
|
|
158
153
|
},
|
|
159
|
-
set(g,
|
|
160
|
-
|
|
161
|
-
const [s,
|
|
154
|
+
set(g, l, u) {
|
|
155
|
+
h(o);
|
|
156
|
+
const [s, c] = P(u);
|
|
162
157
|
return m(e, t, {
|
|
163
158
|
type: "SET",
|
|
164
|
-
path: [...n,
|
|
159
|
+
path: [...n, l].map((f) => f.toString()),
|
|
165
160
|
value: s
|
|
166
|
-
},
|
|
161
|
+
}, c).then(y);
|
|
167
162
|
},
|
|
168
|
-
apply(g,
|
|
169
|
-
|
|
163
|
+
apply(g, l, u) {
|
|
164
|
+
h(o);
|
|
170
165
|
const s = n[n.length - 1];
|
|
171
|
-
if (s ===
|
|
166
|
+
if (s === $)
|
|
172
167
|
return m(e, t, {
|
|
173
168
|
type: "ENDPOINT"
|
|
174
|
-
}).then(
|
|
169
|
+
}).then(y);
|
|
175
170
|
if (s === "bind")
|
|
176
|
-
return
|
|
177
|
-
const [
|
|
171
|
+
return _(e, t, n.slice(0, -1));
|
|
172
|
+
const [c, f] = I(u);
|
|
178
173
|
return m(e, t, {
|
|
179
174
|
type: "APPLY",
|
|
180
175
|
path: n.map((i) => i.toString()),
|
|
181
|
-
argumentList:
|
|
182
|
-
}, f).then(
|
|
176
|
+
argumentList: c
|
|
177
|
+
}, f).then(y);
|
|
183
178
|
},
|
|
184
|
-
construct(g,
|
|
185
|
-
|
|
186
|
-
const [u, s] =
|
|
179
|
+
construct(g, l) {
|
|
180
|
+
h(o);
|
|
181
|
+
const [u, s] = I(l);
|
|
187
182
|
return m(e, t, {
|
|
188
183
|
type: "CONSTRUCT",
|
|
189
|
-
path: n.map((
|
|
184
|
+
path: n.map((c) => c.toString()),
|
|
190
185
|
argumentList: u
|
|
191
|
-
}, s).then(
|
|
186
|
+
}, s).then(y);
|
|
192
187
|
}
|
|
193
188
|
});
|
|
194
|
-
return
|
|
189
|
+
return K(a, e), a;
|
|
195
190
|
}
|
|
196
|
-
function
|
|
191
|
+
function Z(e) {
|
|
197
192
|
return Array.prototype.concat.apply([], e);
|
|
198
193
|
}
|
|
199
|
-
function
|
|
200
|
-
const t = e.map(
|
|
201
|
-
return [t.map((n) => n[0]),
|
|
194
|
+
function I(e) {
|
|
195
|
+
const t = e.map(P);
|
|
196
|
+
return [t.map((n) => n[0]), Z(t.map((n) => n[1]))];
|
|
202
197
|
}
|
|
203
|
-
const
|
|
204
|
-
function
|
|
205
|
-
return
|
|
198
|
+
const U = /* @__PURE__ */ new WeakMap();
|
|
199
|
+
function ee(e, t) {
|
|
200
|
+
return U.set(e, t), e;
|
|
206
201
|
}
|
|
207
|
-
function
|
|
208
|
-
return Object.assign(e, { [
|
|
202
|
+
function te(e) {
|
|
203
|
+
return Object.assign(e, { [L]: !0 });
|
|
209
204
|
}
|
|
210
|
-
function
|
|
211
|
-
for (const [t, n] of
|
|
205
|
+
function P(e) {
|
|
206
|
+
for (const [t, n] of D)
|
|
212
207
|
if (n.canHandle(e)) {
|
|
213
|
-
const [
|
|
208
|
+
const [d, o] = n.serialize(e);
|
|
214
209
|
return [
|
|
215
210
|
{
|
|
216
211
|
type: "HANDLER",
|
|
217
212
|
name: t,
|
|
218
|
-
value:
|
|
213
|
+
value: d
|
|
219
214
|
},
|
|
220
|
-
|
|
215
|
+
o
|
|
221
216
|
];
|
|
222
217
|
}
|
|
223
218
|
return [
|
|
@@ -225,50 +220,114 @@ function S(e) {
|
|
|
225
220
|
type: "RAW",
|
|
226
221
|
value: e
|
|
227
222
|
},
|
|
228
|
-
|
|
223
|
+
U.get(e) || []
|
|
229
224
|
];
|
|
230
225
|
}
|
|
231
|
-
function
|
|
226
|
+
function y(e) {
|
|
232
227
|
switch (e.type) {
|
|
233
228
|
case "HANDLER":
|
|
234
|
-
return
|
|
229
|
+
return D.get(e.name).deserialize(e.value);
|
|
235
230
|
case "RAW":
|
|
236
231
|
return e.value;
|
|
237
232
|
}
|
|
238
233
|
}
|
|
239
|
-
function m(e, t, n,
|
|
240
|
-
return new Promise((
|
|
241
|
-
const a =
|
|
242
|
-
t.set(a,
|
|
234
|
+
function m(e, t, n, d) {
|
|
235
|
+
return new Promise((o) => {
|
|
236
|
+
const a = ne();
|
|
237
|
+
t.set(a, o), e.start && e.start(), e.postMessage(Object.assign({ id: a }, n), d);
|
|
243
238
|
});
|
|
244
239
|
}
|
|
245
|
-
function
|
|
240
|
+
function ne() {
|
|
246
241
|
return new Array(4).fill(0).map(() => Math.floor(Math.random() * Number.MAX_SAFE_INTEGER).toString(16)).join("-");
|
|
247
242
|
}
|
|
248
|
-
let
|
|
249
|
-
const
|
|
243
|
+
let r = null, W = null, j = null, M = null, N = 0;
|
|
244
|
+
const re = 3e4, oe = 6e4;
|
|
245
|
+
let A = null, E = 0, p = null;
|
|
246
|
+
const T = 5, se = 3e3;
|
|
247
|
+
function ae() {
|
|
248
|
+
w(), M = setInterval(() => {
|
|
249
|
+
if (!r || r.readyState !== WebSocket.OPEN) {
|
|
250
|
+
w();
|
|
251
|
+
return;
|
|
252
|
+
}
|
|
253
|
+
if (N > 0 && Date.now() - N > oe) {
|
|
254
|
+
console.warn("[WS] Heartbeat timeout — closing connection"), w(), r.close(1001, "Heartbeat timeout");
|
|
255
|
+
return;
|
|
256
|
+
}
|
|
257
|
+
try {
|
|
258
|
+
r.send(JSON.stringify({ type: "ping" }));
|
|
259
|
+
} catch (e) {
|
|
260
|
+
console.error("[WS] Failed to send heartbeat:", e);
|
|
261
|
+
}
|
|
262
|
+
}, re);
|
|
263
|
+
}
|
|
264
|
+
function w() {
|
|
265
|
+
M && (clearInterval(M), M = null);
|
|
266
|
+
}
|
|
267
|
+
function S(e) {
|
|
268
|
+
j?.(e);
|
|
269
|
+
}
|
|
270
|
+
function ce() {
|
|
271
|
+
if (!p || E >= T) {
|
|
272
|
+
E >= T && (console.error(
|
|
273
|
+
`[WS] Max reconnect attempts (${T}) reached`
|
|
274
|
+
), S("failed"));
|
|
275
|
+
return;
|
|
276
|
+
}
|
|
277
|
+
E++, console.log(
|
|
278
|
+
`[WS] Reconnecting (${E}/${T})...`
|
|
279
|
+
), S("reconnecting"), A = setTimeout(() => {
|
|
280
|
+
p && G.connect(p);
|
|
281
|
+
}, se);
|
|
282
|
+
}
|
|
283
|
+
const G = {
|
|
250
284
|
async connect(e) {
|
|
251
|
-
|
|
285
|
+
r && r.readyState === WebSocket.OPEN || (r && (r.onclose = null, r.close(), r = null), p = e, r = new WebSocket(e), r.binaryType = "arraybuffer", r.onopen = () => {
|
|
286
|
+
console.log("[WS] Connected:", e), E = 0, N = Date.now(), ae(), S("connected");
|
|
287
|
+
}, r.onmessage = (t) => {
|
|
252
288
|
try {
|
|
253
|
-
|
|
289
|
+
if (typeof t.data == "string")
|
|
290
|
+
try {
|
|
291
|
+
if (JSON.parse(t.data).type === "pong") {
|
|
292
|
+
N = Date.now();
|
|
293
|
+
return;
|
|
294
|
+
}
|
|
295
|
+
} catch {
|
|
296
|
+
}
|
|
297
|
+
t.data instanceof ArrayBuffer, W?.(t.data);
|
|
254
298
|
} catch (n) {
|
|
255
299
|
console.error("[WS] Failed to forward message", n);
|
|
256
300
|
}
|
|
257
|
-
},
|
|
258
|
-
console.
|
|
301
|
+
}, r.onerror = (t) => {
|
|
302
|
+
console.error("[WS] Error:", t), S("error");
|
|
303
|
+
}, r.onclose = (t) => {
|
|
304
|
+
console.log("[WS] Disconnected:", t.code, t.reason), r = null, w(), S("disconnected"), t.code !== 1e3 && ce();
|
|
259
305
|
});
|
|
260
306
|
},
|
|
261
307
|
async send(e) {
|
|
262
|
-
|
|
308
|
+
r?.readyState === WebSocket.OPEN ? r.send(e) : console.warn("[WS] Tried to send while disconnected");
|
|
263
309
|
},
|
|
264
310
|
async close() {
|
|
265
|
-
|
|
311
|
+
A && (clearTimeout(A), A = null), w(), E = 0, p = null, r?.close(1e3, "Client request"), r = null, S("disconnected");
|
|
266
312
|
},
|
|
267
313
|
onMessage(e) {
|
|
268
|
-
|
|
314
|
+
W = e;
|
|
315
|
+
},
|
|
316
|
+
onStatus(e) {
|
|
317
|
+
j = e;
|
|
318
|
+
},
|
|
319
|
+
async getStatus() {
|
|
320
|
+
return r ? {
|
|
321
|
+
[WebSocket.CONNECTING]: "connecting",
|
|
322
|
+
[WebSocket.OPEN]: "connected",
|
|
323
|
+
[WebSocket.CLOSING]: "closing",
|
|
324
|
+
[WebSocket.CLOSED]: "disconnected"
|
|
325
|
+
}[r.readyState] || "unknown" : "disconnected";
|
|
269
326
|
}
|
|
270
|
-
};
|
|
327
|
+
}, x = /* @__PURE__ */ new Set();
|
|
271
328
|
self.onconnect = (e) => {
|
|
272
|
-
const t = e.ports[0];
|
|
273
|
-
t.start(),
|
|
329
|
+
const t = e.ports[0], n = x.size === 0;
|
|
330
|
+
x.add(t), t.start(), t.postMessage({ type: n ? "first-connect" : "reconnect" }), t.addEventListener("message", (d) => {
|
|
331
|
+
d.data?.type === "close" && x.delete(t);
|
|
332
|
+
}), H(G, t);
|
|
274
333
|
};
|