@kbve/droid 0.1.1 → 0.1.2
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/droid.mjs +2311 -203
- package/index.d.ts +3 -0
- package/lib/agents/api-types.d.ts +121 -0
- package/lib/agents/api-types.d.ts.map +1 -0
- package/lib/agents/auth/init.d.ts +8 -0
- package/lib/agents/auth/init.d.ts.map +1 -0
- package/lib/agents/cache.d.ts +9 -0
- package/lib/agents/cache.d.ts.map +1 -0
- package/lib/agents/client/callGuildVault.d.ts +3 -0
- package/lib/agents/client/callGuildVault.d.ts.map +1 -0
- package/lib/agents/client/callJson.d.ts +3 -0
- package/lib/agents/client/callJson.d.ts.map +1 -0
- package/lib/agents/config.d.ts +36 -0
- package/lib/agents/config.d.ts.map +1 -0
- package/lib/agents/constants.d.ts +11 -0
- package/lib/agents/constants.d.ts.map +1 -0
- package/lib/agents/createAgents.d.ts +4 -0
- package/lib/agents/createAgents.d.ts.map +1 -0
- package/lib/agents/ctx.d.ts +46 -0
- package/lib/agents/ctx.d.ts.map +1 -0
- package/lib/agents/discord/bot.d.ts +21 -0
- package/lib/agents/discord/bot.d.ts.map +1 -0
- package/lib/agents/discord/guilds.d.ts +8 -0
- package/lib/agents/discord/guilds.d.ts.map +1 -0
- package/lib/agents/formDrafts.d.ts +5 -0
- package/lib/agents/formDrafts.d.ts.map +1 -0
- package/lib/agents/generated/agents-schema.d.ts +73 -0
- package/lib/agents/generated/agents-schema.d.ts.map +1 -0
- package/lib/agents/generated/discordsh-agents-schema.d.ts +71 -0
- package/lib/agents/generated/discordsh-agents-schema.d.ts.map +1 -0
- package/lib/agents/github/backfill.d.ts +23 -0
- package/lib/agents/github/backfill.d.ts.map +1 -0
- package/lib/agents/github/events.d.ts +10 -0
- package/lib/agents/github/events.d.ts.map +1 -0
- package/lib/agents/github/pat.d.ts +13 -0
- package/lib/agents/github/pat.d.ts.map +1 -0
- package/lib/agents/github/repoConfig.d.ts +25 -0
- package/lib/agents/github/repoConfig.d.ts.map +1 -0
- package/lib/agents/github/tokens.d.ts +22 -0
- package/lib/agents/github/tokens.d.ts.map +1 -0
- package/lib/agents/github/webhook.d.ts +37 -0
- package/lib/agents/github/webhook.d.ts.map +1 -0
- package/lib/agents/index.d.ts +8 -0
- package/lib/agents/index.d.ts.map +1 -0
- package/lib/agents/state/atoms.d.ts +122 -0
- package/lib/agents/state/atoms.d.ts.map +1 -0
- package/lib/agents/types.d.ts +65 -0
- package/lib/agents/types.d.ts.map +1 -0
- package/lib/gateway/SupabaseGateway.d.ts.map +1 -1
- package/lib/gateway/types.d.ts +1 -1
- package/lib/gateway/types.d.ts.map +1 -1
- package/lib/workers/canvas-worker.js +6 -449
- package/lib/workers/data.d.ts.map +1 -1
- package/lib/workers/db-worker.d.ts +2 -2
- package/lib/workers/db-worker.d.ts.map +1 -1
- package/lib/workers/db-worker.js +14 -4170
- package/lib/workers/main.d.ts +0 -2
- package/lib/workers/main.d.ts.map +1 -1
- package/lib/workers/supabase-db-worker.js +11 -9325
- package/lib/workers/supabase-shared-worker.js +13 -12623
- package/lib/workers/ws-worker.d.ts +1 -2
- package/lib/workers/ws-worker.d.ts.map +1 -1
- package/lib/workers/ws-worker.js +6 -333
- package/main.js +5622 -4786
- package/package.json +2 -1
- package/src/index.ts +3 -0
- package/src/lib/agents/api-types.ts +170 -0
- package/src/lib/agents/auth/init.ts +200 -0
- package/src/lib/agents/cache.ts +127 -0
- package/src/lib/agents/client/callGuildVault.ts +71 -0
- package/src/lib/agents/client/callJson.ts +64 -0
- package/src/lib/agents/config.ts +83 -0
- package/src/lib/agents/constants.ts +11 -0
- package/src/lib/agents/createAgents.ts +62 -0
- package/src/lib/agents/ctx.ts +63 -0
- package/src/lib/agents/discord/bot.ts +169 -0
- package/src/lib/agents/discord/guilds.ts +106 -0
- package/src/lib/agents/formDrafts.ts +55 -0
- package/src/lib/agents/generated/agents-schema.ts +155 -0
- package/src/lib/agents/generated/discordsh-agents-schema.ts +96 -0
- package/src/lib/agents/github/backfill.ts +126 -0
- package/src/lib/agents/github/events.ts +131 -0
- package/src/lib/agents/github/pat.ts +150 -0
- package/src/lib/agents/github/repoConfig.ts +240 -0
- package/src/lib/agents/github/tokens.ts +222 -0
- package/src/lib/agents/github/webhook.ts +349 -0
- package/src/lib/agents/index.ts +35 -0
- package/src/lib/agents/state/atoms.ts +122 -0
- package/src/lib/agents/types.ts +83 -0
- package/src/lib/api.ts +71 -0
- package/src/lib/gateway/SupabaseGateway.ts +55 -2
- package/src/lib/gateway/WorkerCommunication.ts +1 -1
- package/src/lib/gateway/capabilities.spec.ts +144 -0
- package/src/lib/gateway/types.ts +97 -70
- package/src/lib/mod/module/supabase/mod-supabase.ts +10 -5
- package/src/lib/state/auth.ts +121 -3
- package/src/lib/state/bento.spec.ts +76 -0
- package/src/lib/state/bento.ts +51 -0
- package/src/lib/state/index.ts +64 -0
- package/src/lib/state/profile-sync.ts +214 -0
- package/src/lib/state/profile.ts +155 -0
- package/src/lib/state/staff.ts +128 -0
- package/src/lib/state/sync-bus.ts +109 -0
- package/src/lib/state/welcome-toast.spec.ts +101 -0
- package/src/lib/sw-recovery.spec.ts +165 -0
- package/src/lib/sw-recovery.ts +141 -0
- package/src/lib/types/event-schemas.spec.ts +120 -0
- package/src/lib/types/event-types.spec.ts +5 -2
- package/src/lib/types/event-types.ts +74 -0
- package/src/lib/workers/data.ts +5 -1
- package/src/lib/workers/db-worker.ts +34 -8
- package/src/lib/workers/main.ts +3 -18
- package/src/lib/workers/supabase-db-worker.ts +25 -3
- package/src/lib/workers/supabase-shared-worker.ts +43 -8
- package/src/lib/workers/ws-worker.spec.ts +41 -0
- package/src/lib/workers/ws-worker.ts +121 -28
- package/workers/main.js +2 -12
- package/comlink.js +0 -247
- package/index.js +0 -9263
- package/reference.js +0 -719
|
@@ -1,9 +1,8 @@
|
|
|
1
|
+
export declare function reconnectDelayMs(attempt: number): number;
|
|
1
2
|
declare const wsInstanceAPI: {
|
|
2
3
|
connect(url: string): Promise<void>;
|
|
3
4
|
send(payload: Uint8Array): Promise<void>;
|
|
4
5
|
close(): Promise<void>;
|
|
5
|
-
onMessage(callback: (data: string | ArrayBuffer) => void): void;
|
|
6
|
-
onStatus(callback: (status: string) => void): void;
|
|
7
6
|
getStatus(): Promise<string>;
|
|
8
7
|
};
|
|
9
8
|
export type WSInstance = typeof wsInstanceAPI;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws-worker.d.ts","sourceRoot":"","sources":["../../../../../../packages/npm/droid/src/lib/workers/ws-worker.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ws-worker.d.ts","sourceRoot":"","sources":["../../../../../../packages/npm/droid/src/lib/workers/ws-worker.ts"],"names":[],"mappings":"AAyDA,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAOxD;AAuED,QAAA,MAAM,aAAa;iBACC,MAAM;kBA2GL,UAAU;;iBA2BX,OAAO,CAAC,MAAM,CAAC;CAUlC,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,OAAO,aAAa,CAAC"}
|
package/lib/workers/ws-worker.js
CHANGED
|
@@ -1,333 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
deserialize(e) {
|
|
8
|
-
return e.start(), v(e);
|
|
9
|
-
}
|
|
10
|
-
}, q = {
|
|
11
|
-
canHandle: (e) => z(e) && k in e,
|
|
12
|
-
serialize({ value: e }) {
|
|
13
|
-
let t;
|
|
14
|
-
return e instanceof Error ? t = {
|
|
15
|
-
isError: !0,
|
|
16
|
-
value: {
|
|
17
|
-
message: e.message,
|
|
18
|
-
name: e.name,
|
|
19
|
-
stack: e.stack
|
|
20
|
-
}
|
|
21
|
-
} : t = { isError: !1, value: e }, [t, []];
|
|
22
|
-
},
|
|
23
|
-
deserialize(e) {
|
|
24
|
-
throw e.isError ? Object.assign(new Error(e.value.message), e.value) : e.value;
|
|
25
|
-
}
|
|
26
|
-
}, D = /* @__PURE__ */ new Map([
|
|
27
|
-
["proxy", Y],
|
|
28
|
-
["throw", q]
|
|
29
|
-
]);
|
|
30
|
-
function J(e, t) {
|
|
31
|
-
for (const n of e)
|
|
32
|
-
if (t === n || n === "*" || n instanceof RegExp && n.test(t))
|
|
33
|
-
return !0;
|
|
34
|
-
return !1;
|
|
35
|
-
}
|
|
36
|
-
function H(e, t = globalThis, n = ["*"]) {
|
|
37
|
-
t.addEventListener("message", function d(o) {
|
|
38
|
-
if (!o || !o.data)
|
|
39
|
-
return;
|
|
40
|
-
if (!J(n, o.origin)) {
|
|
41
|
-
console.warn(`Invalid origin '${o.origin}' for comlink proxy`);
|
|
42
|
-
return;
|
|
43
|
-
}
|
|
44
|
-
const { id: a, type: g, path: l } = Object.assign({ path: [] }, o.data), u = (o.data.argumentList || []).map(y);
|
|
45
|
-
let s;
|
|
46
|
-
try {
|
|
47
|
-
const c = l.slice(0, -1).reduce((i, b) => i[b], e), f = l.reduce((i, b) => i[b], e);
|
|
48
|
-
switch (g) {
|
|
49
|
-
case "GET":
|
|
50
|
-
s = f;
|
|
51
|
-
break;
|
|
52
|
-
case "SET":
|
|
53
|
-
c[l.slice(-1)[0]] = y(o.data.value), s = !0;
|
|
54
|
-
break;
|
|
55
|
-
case "APPLY":
|
|
56
|
-
s = f.apply(c, u);
|
|
57
|
-
break;
|
|
58
|
-
case "CONSTRUCT":
|
|
59
|
-
{
|
|
60
|
-
const i = new f(...u);
|
|
61
|
-
s = te(i);
|
|
62
|
-
}
|
|
63
|
-
break;
|
|
64
|
-
case "ENDPOINT":
|
|
65
|
-
{
|
|
66
|
-
const { port1: i, port2: b } = new MessageChannel();
|
|
67
|
-
H(e, b), s = ee(i, [i]);
|
|
68
|
-
}
|
|
69
|
-
break;
|
|
70
|
-
case "RELEASE":
|
|
71
|
-
s = void 0;
|
|
72
|
-
break;
|
|
73
|
-
default:
|
|
74
|
-
return;
|
|
75
|
-
}
|
|
76
|
-
} catch (c) {
|
|
77
|
-
s = { value: c, [k]: 0 };
|
|
78
|
-
}
|
|
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({
|
|
84
|
-
value: new TypeError("Unserializable return value"),
|
|
85
|
-
[k]: 0
|
|
86
|
-
});
|
|
87
|
-
t.postMessage(Object.assign(Object.assign({}, f), { id: a }), i);
|
|
88
|
-
});
|
|
89
|
-
}), t.start && t.start();
|
|
90
|
-
}
|
|
91
|
-
function X(e) {
|
|
92
|
-
return e.constructor.name === "MessagePort";
|
|
93
|
-
}
|
|
94
|
-
function F(e) {
|
|
95
|
-
X(e) && e.close();
|
|
96
|
-
}
|
|
97
|
-
function v(e, t) {
|
|
98
|
-
const n = /* @__PURE__ */ new Map();
|
|
99
|
-
return e.addEventListener("message", function(o) {
|
|
100
|
-
const { data: a } = o;
|
|
101
|
-
if (!a || !a.id)
|
|
102
|
-
return;
|
|
103
|
-
const g = n.get(a.id);
|
|
104
|
-
if (g)
|
|
105
|
-
try {
|
|
106
|
-
g(a);
|
|
107
|
-
} finally {
|
|
108
|
-
n.delete(a.id);
|
|
109
|
-
}
|
|
110
|
-
}), _(e, n, [], t);
|
|
111
|
-
}
|
|
112
|
-
function h(e) {
|
|
113
|
-
if (e)
|
|
114
|
-
throw new Error("Proxy has been released and is not useable");
|
|
115
|
-
}
|
|
116
|
-
function V(e) {
|
|
117
|
-
return m(e, /* @__PURE__ */ new Map(), {
|
|
118
|
-
type: "RELEASE"
|
|
119
|
-
}).then(() => {
|
|
120
|
-
F(e);
|
|
121
|
-
});
|
|
122
|
-
}
|
|
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);
|
|
126
|
-
});
|
|
127
|
-
function K(e, t) {
|
|
128
|
-
const n = (C.get(t) || 0) + 1;
|
|
129
|
-
C.set(t, n), O && O.register(e, t, e);
|
|
130
|
-
}
|
|
131
|
-
function Q(e) {
|
|
132
|
-
O && O.unregister(e);
|
|
133
|
-
}
|
|
134
|
-
function _(e, t, n = [], d = function() {
|
|
135
|
-
}) {
|
|
136
|
-
let o = !1;
|
|
137
|
-
const a = new Proxy(d, {
|
|
138
|
-
get(g, l) {
|
|
139
|
-
if (h(o), l === B)
|
|
140
|
-
return () => {
|
|
141
|
-
Q(a), V(e), t.clear(), o = !0;
|
|
142
|
-
};
|
|
143
|
-
if (l === "then") {
|
|
144
|
-
if (n.length === 0)
|
|
145
|
-
return { then: () => a };
|
|
146
|
-
const u = m(e, t, {
|
|
147
|
-
type: "GET",
|
|
148
|
-
path: n.map((s) => s.toString())
|
|
149
|
-
}).then(y);
|
|
150
|
-
return u.then.bind(u);
|
|
151
|
-
}
|
|
152
|
-
return _(e, t, [...n, l]);
|
|
153
|
-
},
|
|
154
|
-
set(g, l, u) {
|
|
155
|
-
h(o);
|
|
156
|
-
const [s, c] = P(u);
|
|
157
|
-
return m(e, t, {
|
|
158
|
-
type: "SET",
|
|
159
|
-
path: [...n, l].map((f) => f.toString()),
|
|
160
|
-
value: s
|
|
161
|
-
}, c).then(y);
|
|
162
|
-
},
|
|
163
|
-
apply(g, l, u) {
|
|
164
|
-
h(o);
|
|
165
|
-
const s = n[n.length - 1];
|
|
166
|
-
if (s === $)
|
|
167
|
-
return m(e, t, {
|
|
168
|
-
type: "ENDPOINT"
|
|
169
|
-
}).then(y);
|
|
170
|
-
if (s === "bind")
|
|
171
|
-
return _(e, t, n.slice(0, -1));
|
|
172
|
-
const [c, f] = I(u);
|
|
173
|
-
return m(e, t, {
|
|
174
|
-
type: "APPLY",
|
|
175
|
-
path: n.map((i) => i.toString()),
|
|
176
|
-
argumentList: c
|
|
177
|
-
}, f).then(y);
|
|
178
|
-
},
|
|
179
|
-
construct(g, l) {
|
|
180
|
-
h(o);
|
|
181
|
-
const [u, s] = I(l);
|
|
182
|
-
return m(e, t, {
|
|
183
|
-
type: "CONSTRUCT",
|
|
184
|
-
path: n.map((c) => c.toString()),
|
|
185
|
-
argumentList: u
|
|
186
|
-
}, s).then(y);
|
|
187
|
-
}
|
|
188
|
-
});
|
|
189
|
-
return K(a, e), a;
|
|
190
|
-
}
|
|
191
|
-
function Z(e) {
|
|
192
|
-
return Array.prototype.concat.apply([], e);
|
|
193
|
-
}
|
|
194
|
-
function I(e) {
|
|
195
|
-
const t = e.map(P);
|
|
196
|
-
return [t.map((n) => n[0]), Z(t.map((n) => n[1]))];
|
|
197
|
-
}
|
|
198
|
-
const U = /* @__PURE__ */ new WeakMap();
|
|
199
|
-
function ee(e, t) {
|
|
200
|
-
return U.set(e, t), e;
|
|
201
|
-
}
|
|
202
|
-
function te(e) {
|
|
203
|
-
return Object.assign(e, { [L]: !0 });
|
|
204
|
-
}
|
|
205
|
-
function P(e) {
|
|
206
|
-
for (const [t, n] of D)
|
|
207
|
-
if (n.canHandle(e)) {
|
|
208
|
-
const [d, o] = n.serialize(e);
|
|
209
|
-
return [
|
|
210
|
-
{
|
|
211
|
-
type: "HANDLER",
|
|
212
|
-
name: t,
|
|
213
|
-
value: d
|
|
214
|
-
},
|
|
215
|
-
o
|
|
216
|
-
];
|
|
217
|
-
}
|
|
218
|
-
return [
|
|
219
|
-
{
|
|
220
|
-
type: "RAW",
|
|
221
|
-
value: e
|
|
222
|
-
},
|
|
223
|
-
U.get(e) || []
|
|
224
|
-
];
|
|
225
|
-
}
|
|
226
|
-
function y(e) {
|
|
227
|
-
switch (e.type) {
|
|
228
|
-
case "HANDLER":
|
|
229
|
-
return D.get(e.name).deserialize(e.value);
|
|
230
|
-
case "RAW":
|
|
231
|
-
return e.value;
|
|
232
|
-
}
|
|
233
|
-
}
|
|
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);
|
|
238
|
-
});
|
|
239
|
-
}
|
|
240
|
-
function ne() {
|
|
241
|
-
return new Array(4).fill(0).map(() => Math.floor(Math.random() * Number.MAX_SAFE_INTEGER).toString(16)).join("-");
|
|
242
|
-
}
|
|
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 = {
|
|
284
|
-
async connect(e) {
|
|
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) => {
|
|
288
|
-
try {
|
|
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);
|
|
298
|
-
} catch (n) {
|
|
299
|
-
console.error("[WS] Failed to forward message", n);
|
|
300
|
-
}
|
|
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();
|
|
305
|
-
});
|
|
306
|
-
},
|
|
307
|
-
async send(e) {
|
|
308
|
-
r?.readyState === WebSocket.OPEN ? r.send(e) : console.warn("[WS] Tried to send while disconnected");
|
|
309
|
-
},
|
|
310
|
-
async close() {
|
|
311
|
-
A && (clearTimeout(A), A = null), w(), E = 0, p = null, r?.close(1e3, "Client request"), r = null, S("disconnected");
|
|
312
|
-
},
|
|
313
|
-
onMessage(e) {
|
|
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";
|
|
326
|
-
}
|
|
327
|
-
}, x = /* @__PURE__ */ new Set();
|
|
328
|
-
self.onconnect = (e) => {
|
|
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);
|
|
333
|
-
};
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2019 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
const e=Symbol(`Comlink.proxy`),t=Symbol(`Comlink.endpoint`),n=Symbol(`Comlink.releaseProxy`),r=Symbol(`Comlink.finalizer`),i=Symbol(`Comlink.thrown`),a=e=>typeof e==`object`&&!!e||typeof e==`function`,o=new Map([[`proxy`,{canHandle:t=>a(t)&&t[e],serialize(e){let{port1:t,port2:n}=new MessageChannel;return c(e,t),[n,[n]]},deserialize(e){return e.start(),d(e)}}],[`throw`,{canHandle:e=>a(e)&&i in e,serialize({value:e}){let t;return t=e instanceof Error?{isError:!0,value:{message:e.message,name:e.name,stack:e.stack}}:{isError:!1,value:e},[t,[]]},deserialize(e){throw e.isError?Object.assign(Error(e.value.message),e.value):e.value}}]]);function s(e,t){for(let n of e)if(t===n||n===`*`||n instanceof RegExp&&n.test(t))return!0;return!1}function c(e,t=globalThis,n=[`*`]){t.addEventListener(`message`,function a(o){if(!o||!o.data)return;if(!s(n,o.origin)){console.warn(`Invalid origin '${o.origin}' for comlink proxy`);return}let{id:l,type:d,path:f}=Object.assign({path:[]},o.data),p=(o.data.argumentList||[]).map(T),m;try{let t=f.slice(0,-1).reduce((e,t)=>e[t],e),n=f.reduce((e,t)=>e[t],e);switch(d){case`GET`:m=n;break;case`SET`:t[f.slice(-1)[0]]=T(o.data.value),m=!0;break;case`APPLY`:m=n.apply(t,p);break;case`CONSTRUCT`:m=C(new n(...p));break;case`ENDPOINT`:{let{port1:t,port2:n}=new MessageChannel;c(e,n),m=S(t,[t])}break;case`RELEASE`:m=void 0;break;default:return}}catch(e){m={value:e,[i]:0}}Promise.resolve(m).catch(e=>({value:e,[i]:0})).then(n=>{let[i,o]=w(n);t.postMessage(Object.assign(Object.assign({},i),{id:l}),o),d===`RELEASE`&&(t.removeEventListener(`message`,a),u(t),r in e&&typeof e[r]==`function`&&e[r]())}).catch(e=>{let[n,r]=w({value:TypeError(`Unserializable return value`),[i]:0});t.postMessage(Object.assign(Object.assign({},n),{id:l}),r)})}),t.start&&t.start()}function l(e){return e.constructor.name===`MessagePort`}function u(e){l(e)&&e.close()}function d(e,t){let n=new Map;return e.addEventListener(`message`,function(e){let{data:t}=e;if(!t||!t.id)return;let r=n.get(t.id);if(r)try{r(t)}finally{n.delete(t.id)}}),v(e,n,[],t)}function f(e){if(e)throw Error(`Proxy has been released and is not useable`)}function p(e){return E(e,new Map,{type:`RELEASE`}).then(()=>{u(e)})}const m=new WeakMap,h=`FinalizationRegistry`in globalThis&&new FinalizationRegistry(e=>{let t=(m.get(e)||0)-1;m.set(e,t),t===0&&p(e)});function g(e,t){let n=(m.get(t)||0)+1;m.set(t,n),h&&h.register(e,t,e)}function _(e){h&&h.unregister(e)}function v(e,r,i=[],a=function(){}){let o=!1,s=new Proxy(a,{get(t,a){if(f(o),a===n)return()=>{_(s),p(e),r.clear(),o=!0};if(a===`then`){if(i.length===0)return{then:()=>s};let t=E(e,r,{type:`GET`,path:i.map(e=>e.toString())}).then(T);return t.then.bind(t)}return v(e,r,[...i,a])},set(t,n,a){f(o);let[s,c]=w(a);return E(e,r,{type:`SET`,path:[...i,n].map(e=>e.toString()),value:s},c).then(T)},apply(n,a,s){f(o);let c=i[i.length-1];if(c===t)return E(e,r,{type:`ENDPOINT`}).then(T);if(c===`bind`)return v(e,r,i.slice(0,-1));let[l,u]=b(s);return E(e,r,{type:`APPLY`,path:i.map(e=>e.toString()),argumentList:l},u).then(T)},construct(t,n){f(o);let[a,s]=b(n);return E(e,r,{type:`CONSTRUCT`,path:i.map(e=>e.toString()),argumentList:a},s).then(T)}});return g(s,e),s}function y(e){return Array.prototype.concat.apply([],e)}function b(e){let t=e.map(w);return[t.map(e=>e[0]),y(t.map(e=>e[1]))]}const x=new WeakMap;function S(e,t){return x.set(e,t),e}function C(t){return Object.assign(t,{[e]:!0})}function w(e){for(let[t,n]of o)if(n.canHandle(e)){let[r,i]=n.serialize(e);return[{type:`HANDLER`,name:t,value:r},i]}return[{type:`RAW`,value:e},x.get(e)||[]]}function T(e){switch(e.type){case`HANDLER`:return o.get(e.name).deserialize(e.value);case`RAW`:return e.value}}function E(e,t,n,r){return new Promise(i=>{let a=D();t.set(a,i),e.start&&e.start(),e.postMessage(Object.assign({id:a},n),r)})}function D(){return[,,,,].fill(0).map(()=>Math.floor(Math.random()*(2**53-1)).toString(16)).join(`-`)}let O=null;const k=typeof BroadcastChannel<`u`?new BroadcastChannel(`kbve_ws_data`):null,A=typeof BroadcastChannel<`u`?new BroadcastChannel(`kbve_ws_events`):null;let j=null,M=0,N=null,P=0,F=null;function I(e){return Math.min(3e4,1e3*2**Math.max(0,e-1))+Math.floor(Math.random()*500)}function L(){R(),j=setInterval(()=>{if(!O||O.readyState!==WebSocket.OPEN){R();return}if(M>0&&Date.now()-M>6e4){console.warn(`[WS] Heartbeat timeout — closing connection`),R(),O.close(1001,`Heartbeat timeout`);return}try{O.send(JSON.stringify({type:`ping`}))}catch(e){console.error(`[WS] Failed to send heartbeat:`,e)}},3e4)}function R(){j&&=(clearInterval(j),null)}function z(e,t){A?.postMessage({type:`status`,status:e,...t})}function B(){if(!F||P>=5){P>=5&&(console.error(`[WS] Max reconnect attempts (5) reached`),z(`failed`));return}P++;let e=I(P);console.log(`[WS] Reconnecting (${P}/5) in ${e}ms...`),z(`reconnecting`),N=setTimeout(()=>{F&&V.connect(F)},e)}const V={async connect(e){if(O&&O.readyState===WebSocket.OPEN)return;O&&=(O.onclose=null,O.close(),null),F=e;let t=e.replace(/(token=)[^&]+/i,`$1<redacted>`);console.log(`[WS] Connecting to`,t),O=new WebSocket(e),O.binaryType=`arraybuffer`,O.onopen=()=>{console.log(`[WS] Connected:`,t),P=0,M=Date.now(),L(),z(`connected`)},O.onmessage=e=>{try{if(typeof e.data==`string`)try{if(JSON.parse(e.data).type===`pong`){M=Date.now();return}}catch{}k&&(typeof e.data==`string`?k.postMessage({type:`ws.store`,format:`text`,data:e.data,ts:Date.now()}):e.data instanceof ArrayBuffer&&k.postMessage({type:`ws.store`,format:`binary`,data:new Uint8Array(e.data),ts:Date.now()})),A&&(typeof e.data==`string`?A.postMessage({type:`message`,format:`text`,data:e.data}):e.data instanceof ArrayBuffer&&A.postMessage({type:`message`,format:`binary`,data:new Uint8Array(e.data)}))}catch(e){console.error(`[WS] Failed to forward message`,e)}},O.onerror=e=>{console.error(`[WS] Error event:`,e),z(`error`,{reason:`WebSocket error event (no detail in browser API)`})},O.onclose=e=>{console.log(`[WS] Disconnected code=${e.code} reason="${e.reason}" wasClean=${e.wasClean}`),O=null,R(),z(`disconnected`,{code:e.code,reason:e.reason,wasClean:e.wasClean}),e.code!==1e3&&B()}},async send(e){O?.readyState===WebSocket.OPEN?O.send(e):console.warn(`[WS] Tried to send while disconnected`)},async close(){N&&=(clearTimeout(N),null),R(),P=0,F=null,O?.close(1e3,`Client request`),O=null,z(`disconnected`)},async getStatus(){return O?{[WebSocket.CONNECTING]:`connecting`,[WebSocket.OPEN]:`connected`,[WebSocket.CLOSING]:`closing`,[WebSocket.CLOSED]:`disconnected`}[O.readyState]||`unknown`:`disconnected`}},H=new Set;self.onconnect=e=>{let t=e.ports[0],n=H.size===0;H.add(t),t.start(),t.postMessage({type:n?`first-connect`:`reconnect`}),t.addEventListener(`message`,e=>{e.data?.type===`close`&&H.delete(t)}),c(V,t)};
|