@kbve/droid 0.0.6 → 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.
Files changed (190) hide show
  1. package/droid.mjs +2312 -74
  2. package/index.d.ts +32 -0
  3. package/lib/agents/api-types.d.ts +121 -0
  4. package/lib/agents/api-types.d.ts.map +1 -0
  5. package/lib/agents/auth/init.d.ts +8 -0
  6. package/lib/agents/auth/init.d.ts.map +1 -0
  7. package/lib/agents/cache.d.ts +9 -0
  8. package/lib/agents/cache.d.ts.map +1 -0
  9. package/lib/agents/client/callGuildVault.d.ts +3 -0
  10. package/lib/agents/client/callGuildVault.d.ts.map +1 -0
  11. package/lib/agents/client/callJson.d.ts +3 -0
  12. package/lib/agents/client/callJson.d.ts.map +1 -0
  13. package/lib/agents/config.d.ts +36 -0
  14. package/lib/agents/config.d.ts.map +1 -0
  15. package/lib/agents/constants.d.ts +11 -0
  16. package/lib/agents/constants.d.ts.map +1 -0
  17. package/lib/agents/createAgents.d.ts +4 -0
  18. package/lib/agents/createAgents.d.ts.map +1 -0
  19. package/lib/agents/ctx.d.ts +46 -0
  20. package/lib/agents/ctx.d.ts.map +1 -0
  21. package/lib/agents/discord/bot.d.ts +21 -0
  22. package/lib/agents/discord/bot.d.ts.map +1 -0
  23. package/lib/agents/discord/guilds.d.ts +8 -0
  24. package/lib/agents/discord/guilds.d.ts.map +1 -0
  25. package/lib/agents/formDrafts.d.ts +5 -0
  26. package/lib/agents/formDrafts.d.ts.map +1 -0
  27. package/lib/agents/generated/agents-schema.d.ts +73 -0
  28. package/lib/agents/generated/agents-schema.d.ts.map +1 -0
  29. package/lib/agents/generated/discordsh-agents-schema.d.ts +71 -0
  30. package/lib/agents/generated/discordsh-agents-schema.d.ts.map +1 -0
  31. package/lib/agents/github/backfill.d.ts +23 -0
  32. package/lib/agents/github/backfill.d.ts.map +1 -0
  33. package/lib/agents/github/events.d.ts +10 -0
  34. package/lib/agents/github/events.d.ts.map +1 -0
  35. package/lib/agents/github/pat.d.ts +13 -0
  36. package/lib/agents/github/pat.d.ts.map +1 -0
  37. package/lib/agents/github/repoConfig.d.ts +25 -0
  38. package/lib/agents/github/repoConfig.d.ts.map +1 -0
  39. package/lib/agents/github/tokens.d.ts +22 -0
  40. package/lib/agents/github/tokens.d.ts.map +1 -0
  41. package/lib/agents/github/webhook.d.ts +37 -0
  42. package/lib/agents/github/webhook.d.ts.map +1 -0
  43. package/lib/agents/index.d.ts +8 -0
  44. package/lib/agents/index.d.ts.map +1 -0
  45. package/lib/agents/state/atoms.d.ts +122 -0
  46. package/lib/agents/state/atoms.d.ts.map +1 -0
  47. package/lib/agents/types.d.ts +65 -0
  48. package/lib/agents/types.d.ts.map +1 -0
  49. package/lib/gateway/SupabaseGateway.d.ts +38 -0
  50. package/lib/gateway/SupabaseGateway.d.ts.map +1 -0
  51. package/lib/gateway/WorkerCommunication.d.ts +39 -0
  52. package/lib/gateway/WorkerCommunication.d.ts.map +1 -0
  53. package/lib/gateway/WorkerPool.d.ts +55 -0
  54. package/lib/gateway/WorkerPool.d.ts.map +1 -0
  55. package/lib/gateway/capabilities.d.ts +23 -0
  56. package/lib/gateway/capabilities.d.ts.map +1 -0
  57. package/lib/gateway/index.d.ts +9 -0
  58. package/lib/gateway/index.d.ts.map +1 -0
  59. package/lib/gateway/strategies/DirectStrategy.d.ts +52 -0
  60. package/lib/gateway/strategies/DirectStrategy.d.ts.map +1 -0
  61. package/lib/gateway/strategies/SharedWorkerStrategy.d.ts +46 -0
  62. package/lib/gateway/strategies/SharedWorkerStrategy.d.ts.map +1 -0
  63. package/lib/gateway/strategies/WebWorkerStrategy.d.ts +45 -0
  64. package/lib/gateway/strategies/WebWorkerStrategy.d.ts.map +1 -0
  65. package/lib/gateway/types.d.ts +81 -0
  66. package/lib/gateway/types.d.ts.map +1 -0
  67. package/lib/workers/canvas-ui-renderer.d.ts +25 -0
  68. package/lib/workers/canvas-ui-renderer.d.ts.map +1 -0
  69. package/lib/workers/canvas-worker.d.ts +14 -0
  70. package/lib/workers/canvas-worker.d.ts.map +1 -0
  71. package/lib/workers/canvas-worker.js +5 -302
  72. package/lib/workers/data.d.ts +40 -0
  73. package/lib/workers/data.d.ts.map +1 -0
  74. package/lib/workers/db-worker.d.ts +69 -0
  75. package/lib/workers/db-worker.d.ts.map +1 -0
  76. package/lib/workers/db-worker.js +13 -3636
  77. package/lib/workers/events.d.ts +11 -0
  78. package/lib/workers/events.d.ts.map +1 -0
  79. package/lib/workers/flexbuilder.d.ts +4 -0
  80. package/lib/workers/flexbuilder.d.ts.map +1 -0
  81. package/lib/workers/init.d.ts +11 -0
  82. package/lib/workers/init.d.ts.map +1 -0
  83. package/lib/workers/main.d.ts +105 -0
  84. package/lib/workers/main.d.ts.map +1 -0
  85. package/lib/workers/supabase-db-worker.d.ts +2 -0
  86. package/lib/workers/supabase-db-worker.d.ts.map +1 -0
  87. package/lib/workers/supabase-db-worker.js +23 -0
  88. package/lib/workers/supabase-shared-worker.d.ts +2 -0
  89. package/lib/workers/supabase-shared-worker.d.ts.map +1 -0
  90. package/lib/workers/supabase-shared-worker.js +25 -0
  91. package/lib/workers/tools.d.ts +4 -0
  92. package/lib/workers/tools.d.ts.map +1 -0
  93. package/lib/workers/validate.d.ts +15 -0
  94. package/lib/workers/validate.d.ts.map +1 -0
  95. package/lib/workers/ws-worker.d.ts +10 -0
  96. package/lib/workers/ws-worker.d.ts.map +1 -0
  97. package/lib/workers/ws-worker.js +5 -273
  98. package/main.js +5711 -0
  99. package/package.json +18 -6
  100. package/src/index.ts +41 -13
  101. package/src/lib/agents/api-types.ts +170 -0
  102. package/src/lib/agents/auth/init.ts +200 -0
  103. package/src/lib/agents/cache.ts +127 -0
  104. package/src/lib/agents/client/callGuildVault.ts +71 -0
  105. package/src/lib/agents/client/callJson.ts +64 -0
  106. package/src/lib/agents/config.ts +83 -0
  107. package/src/lib/agents/constants.ts +11 -0
  108. package/src/lib/agents/createAgents.ts +62 -0
  109. package/src/lib/agents/ctx.ts +63 -0
  110. package/src/lib/agents/discord/bot.ts +169 -0
  111. package/src/lib/agents/discord/guilds.ts +106 -0
  112. package/src/lib/agents/formDrafts.ts +55 -0
  113. package/src/lib/agents/generated/agents-schema.ts +155 -0
  114. package/src/lib/agents/generated/discordsh-agents-schema.ts +96 -0
  115. package/src/lib/agents/github/backfill.ts +126 -0
  116. package/src/lib/agents/github/events.ts +131 -0
  117. package/src/lib/agents/github/pat.ts +150 -0
  118. package/src/lib/agents/github/repoConfig.ts +240 -0
  119. package/src/lib/agents/github/tokens.ts +222 -0
  120. package/src/lib/agents/github/webhook.ts +349 -0
  121. package/src/lib/agents/index.ts +35 -0
  122. package/src/lib/agents/state/atoms.ts +122 -0
  123. package/src/lib/agents/types.ts +83 -0
  124. package/src/lib/api.ts +71 -0
  125. package/src/lib/droid.spec.ts +14 -19
  126. package/src/lib/droid.ts +48 -4
  127. package/src/lib/gateway/SupabaseGateway.ts +236 -0
  128. package/src/lib/gateway/WorkerCommunication.ts +132 -0
  129. package/src/lib/gateway/WorkerPool.ts +304 -0
  130. package/src/lib/gateway/capabilities.spec.ts +144 -0
  131. package/src/lib/gateway/capabilities.ts +80 -0
  132. package/src/lib/gateway/index.ts +15 -0
  133. package/src/lib/gateway/strategies/DirectStrategy.ts +443 -0
  134. package/src/lib/gateway/strategies/SharedWorkerStrategy.ts +278 -0
  135. package/src/lib/gateway/strategies/WebWorkerStrategy.ts +278 -0
  136. package/src/lib/gateway/types.ts +139 -0
  137. package/src/lib/mod/mod-manager.ts +13 -8
  138. package/src/lib/mod/module/bento/mod-bento.worker.ts +1 -1
  139. package/src/lib/mod/module/supabase/mod-supabase.spec.ts +21 -25
  140. package/src/lib/mod/module/supabase/mod-supabase.ts +73 -0
  141. package/src/lib/mod/module/supabase/mod-supabase.worker.ts +1 -56
  142. package/src/lib/state/auth.spec.ts +58 -0
  143. package/src/lib/state/auth.ts +148 -0
  144. package/src/lib/state/bento.spec.ts +76 -0
  145. package/src/lib/state/bento.ts +51 -0
  146. package/src/lib/state/index.ts +98 -0
  147. package/src/lib/state/overlay-manager.ts +125 -0
  148. package/src/lib/state/profile-sync.ts +214 -0
  149. package/src/lib/state/profile.ts +155 -0
  150. package/src/lib/state/router.ts +24 -0
  151. package/src/lib/state/staff.ts +128 -0
  152. package/src/lib/state/sync-bus.ts +109 -0
  153. package/src/lib/state/theme-sync.ts +75 -0
  154. package/src/lib/state/toasts.spec.ts +106 -0
  155. package/src/lib/state/toasts.ts +34 -0
  156. package/src/lib/state/ui.spec.ts +148 -0
  157. package/src/lib/state/ui.ts +45 -0
  158. package/src/lib/state/welcome-toast.spec.ts +101 -0
  159. package/src/lib/state/welcome-toast.ts +76 -0
  160. package/src/lib/sw-recovery.spec.ts +165 -0
  161. package/src/lib/sw-recovery.ts +141 -0
  162. package/src/lib/types/bento.spec.ts +116 -0
  163. package/src/lib/types/bento.ts +94 -55
  164. package/src/lib/types/event-schemas.spec.ts +120 -0
  165. package/src/lib/types/event-types.spec.ts +96 -0
  166. package/src/lib/types/event-types.ts +113 -3
  167. package/src/lib/types/modules.ts +12 -5
  168. package/src/lib/types/ui-event-types.ts +66 -0
  169. package/src/lib/workers/canvas-ui-renderer.ts +266 -0
  170. package/src/lib/workers/canvas-worker.ts +94 -9
  171. package/src/lib/workers/data.ts +64 -37
  172. package/src/lib/workers/db-worker.ts +105 -32
  173. package/src/lib/workers/events.spec.ts +208 -0
  174. package/src/lib/workers/events.ts +27 -14
  175. package/src/lib/workers/flexbuilder.ts +2 -2
  176. package/src/lib/workers/init.ts +25 -17
  177. package/src/lib/workers/main.ts +506 -327
  178. package/src/lib/workers/supabase-db-worker.ts +243 -0
  179. package/src/lib/workers/supabase-shared-worker.ts +607 -0
  180. package/src/lib/workers/validate.ts +64 -0
  181. package/src/lib/workers/ws-worker.spec.ts +41 -0
  182. package/src/lib/workers/ws-worker.ts +255 -31
  183. package/src/setup-vitest.ts +4 -2
  184. package/src/types.ts +30 -0
  185. package/src/vite-env.d.ts +1 -0
  186. package/workers/main.js +2 -1125
  187. package/comlink.js +0 -253
  188. package/index.js +0 -2972
  189. package/reference.js +0 -259
  190. package/src/types.d.ts +0 -31
@@ -0,0 +1,4 @@
1
+ import { VirtualNode } from '../types/modules';
2
+ export declare function dispatchAsync(fn: () => void): void;
3
+ export declare function renderVNode(vnode: VirtualNode): HTMLElement;
4
+ //# sourceMappingURL=tools.d.ts.map
@@ -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,10 @@
1
+ export declare function reconnectDelayMs(attempt: number): number;
2
+ declare const wsInstanceAPI: {
3
+ connect(url: string): Promise<void>;
4
+ send(payload: Uint8Array): Promise<void>;
5
+ close(): Promise<void>;
6
+ getStatus(): Promise<string>;
7
+ };
8
+ export type WSInstance = typeof wsInstanceAPI;
9
+ export {};
10
+ //# 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":"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"}
@@ -1,274 +1,6 @@
1
1
  /**
2
- * @license
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],
8
- serialize(e) {
9
- const { port1: t, port2: n } = new MessageChannel();
10
- return M(e, t), [n, [n]];
11
- },
12
- deserialize(e) {
13
- return e.start(), D(e);
14
- }
15
- }, L = {
16
- canHandle: (e) => C(e) && h in e,
17
- serialize({ value: e }) {
18
- let t;
19
- return e instanceof Error ? t = {
20
- isError: !0,
21
- value: {
22
- message: e.message,
23
- name: e.name,
24
- stack: e.stack
25
- }
26
- } : t = { isError: !1, value: e }, [t, []];
27
- },
28
- deserialize(e) {
29
- throw e.isError ? Object.assign(new Error(e.value.message), e.value) : e.value;
30
- }
31
- }, R = /* @__PURE__ */ new Map([
32
- ["proxy", I],
33
- ["throw", L]
34
- ]);
35
- function V(e, t) {
36
- for (const n of e)
37
- if (t === n || n === "*" || n instanceof RegExp && n.test(t))
38
- return !0;
39
- return !1;
40
- }
41
- function M(e, t = globalThis, n = ["*"]) {
42
- t.addEventListener("message", function y(r) {
43
- if (!r || !r.data)
44
- return;
45
- if (!V(n, r.origin)) {
46
- console.warn(`Invalid origin '${r.origin}' for comlink proxy`);
47
- return;
48
- }
49
- const { id: a, type: g, path: c } = Object.assign({ path: [] }, r.data), u = (r.data.argumentList || []).map(d);
50
- let s;
51
- try {
52
- const o = c.slice(0, -1).reduce((i, w) => i[w], e), f = c.reduce((i, w) => i[w], e);
53
- switch (g) {
54
- case "GET":
55
- s = f;
56
- break;
57
- case "SET":
58
- o[c.slice(-1)[0]] = d(r.data.value), s = !0;
59
- break;
60
- case "APPLY":
61
- s = f.apply(o, u);
62
- break;
63
- case "CONSTRUCT":
64
- {
65
- const i = new f(...u);
66
- s = Y(i);
67
- }
68
- break;
69
- case "ENDPOINT":
70
- {
71
- const { port1: i, port2: w } = new MessageChannel();
72
- M(e, w), s = G(i, [i]);
73
- }
74
- break;
75
- case "RELEASE":
76
- s = void 0;
77
- break;
78
- default:
79
- return;
80
- }
81
- } catch (o) {
82
- s = { value: o, [h]: 0 };
83
- }
84
- Promise.resolve(s).catch((o) => ({ value: o, [h]: 0 })).then((o) => {
85
- const [f, i] = S(o);
86
- t.postMessage(Object.assign(Object.assign({}, f), { id: a }), i), g === "RELEASE" && (t.removeEventListener("message", y), O(t), k in e && typeof e[k] == "function" && e[k]());
87
- }).catch((o) => {
88
- const [f, i] = S({
89
- value: new TypeError("Unserializable return value"),
90
- [h]: 0
91
- });
92
- t.postMessage(Object.assign(Object.assign({}, f), { id: a }), i);
93
- });
94
- }), t.start && t.start();
95
- }
96
- function _(e) {
97
- return e.constructor.name === "MessagePort";
98
- }
99
- function O(e) {
100
- _(e) && e.close();
101
- }
102
- function D(e, t) {
103
- const n = /* @__PURE__ */ new Map();
104
- return e.addEventListener("message", function(r) {
105
- const { data: a } = r;
106
- if (!a || !a.id)
107
- return;
108
- const g = n.get(a.id);
109
- if (g)
110
- try {
111
- g(a);
112
- } finally {
113
- n.delete(a.id);
114
- }
115
- }), P(e, n, [], t);
116
- }
117
- function b(e) {
118
- if (e)
119
- throw new Error("Proxy has been released and is not useable");
120
- }
121
- function W(e) {
122
- return m(e, /* @__PURE__ */ new Map(), {
123
- type: "RELEASE"
124
- }).then(() => {
125
- O(e);
126
- });
127
- }
128
- const E = /* @__PURE__ */ new WeakMap(), p = "FinalizationRegistry" in globalThis && new FinalizationRegistry((e) => {
129
- const t = (E.get(e) || 0) - 1;
130
- E.set(e, t), t === 0 && W(e);
131
- });
132
- function F(e, t) {
133
- const n = (E.get(t) || 0) + 1;
134
- E.set(t, n), p && p.register(e, t, e);
135
- }
136
- function j(e) {
137
- p && p.unregister(e);
138
- }
139
- function P(e, t, n = [], y = function() {
140
- }) {
141
- let r = !1;
142
- const a = new Proxy(y, {
143
- get(g, c) {
144
- if (b(r), c === H)
145
- return () => {
146
- j(a), W(e), t.clear(), r = !0;
147
- };
148
- if (c === "then") {
149
- if (n.length === 0)
150
- return { then: () => a };
151
- const u = m(e, t, {
152
- type: "GET",
153
- path: n.map((s) => s.toString())
154
- }).then(d);
155
- return u.then.bind(u);
156
- }
157
- return P(e, t, [...n, c]);
158
- },
159
- set(g, c, u) {
160
- b(r);
161
- const [s, o] = S(u);
162
- return m(e, t, {
163
- type: "SET",
164
- path: [...n, c].map((f) => f.toString()),
165
- value: s
166
- }, o).then(d);
167
- },
168
- apply(g, c, u) {
169
- b(r);
170
- const s = n[n.length - 1];
171
- if (s === N)
172
- return m(e, t, {
173
- type: "ENDPOINT"
174
- }).then(d);
175
- if (s === "bind")
176
- return P(e, t, n.slice(0, -1));
177
- const [o, f] = x(u);
178
- return m(e, t, {
179
- type: "APPLY",
180
- path: n.map((i) => i.toString()),
181
- argumentList: o
182
- }, f).then(d);
183
- },
184
- construct(g, c) {
185
- b(r);
186
- const [u, s] = x(c);
187
- return m(e, t, {
188
- type: "CONSTRUCT",
189
- path: n.map((o) => o.toString()),
190
- argumentList: u
191
- }, s).then(d);
192
- }
193
- });
194
- return F(a, e), a;
195
- }
196
- function U(e) {
197
- return Array.prototype.concat.apply([], e);
198
- }
199
- function x(e) {
200
- const t = e.map(S);
201
- return [t.map((n) => n[0]), U(t.map((n) => n[1]))];
202
- }
203
- const z = /* @__PURE__ */ new WeakMap();
204
- function G(e, t) {
205
- return z.set(e, t), e;
206
- }
207
- function Y(e) {
208
- return Object.assign(e, { [T]: !0 });
209
- }
210
- function S(e) {
211
- for (const [t, n] of R)
212
- if (n.canHandle(e)) {
213
- const [y, r] = n.serialize(e);
214
- return [
215
- {
216
- type: "HANDLER",
217
- name: t,
218
- value: y
219
- },
220
- r
221
- ];
222
- }
223
- return [
224
- {
225
- type: "RAW",
226
- value: e
227
- },
228
- z.get(e) || []
229
- ];
230
- }
231
- function d(e) {
232
- switch (e.type) {
233
- case "HANDLER":
234
- return R.get(e.name).deserialize(e.value);
235
- case "RAW":
236
- return e.value;
237
- }
238
- }
239
- function m(e, t, n, y) {
240
- return new Promise((r) => {
241
- const a = q();
242
- t.set(a, r), e.start && e.start(), e.postMessage(Object.assign({ id: a }, n), y);
243
- });
244
- }
245
- function q() {
246
- return new Array(4).fill(0).map(() => Math.floor(Math.random() * Number.MAX_SAFE_INTEGER).toString(16)).join("-");
247
- }
248
- let l = null, A = null;
249
- const v = {
250
- async connect(e) {
251
- l || (l = new WebSocket(e), l.binaryType = "arraybuffer", l.onopen = () => console.log("[WS] Connected:", e), l.onmessage = (t) => {
252
- try {
253
- console.log("[WS] Received binary message"), t.data instanceof ArrayBuffer && A?.(t.data);
254
- } catch (n) {
255
- console.error("[WS] Failed to forward message", n);
256
- }
257
- }, l.onerror = (t) => console.error("[WS] Error:", t), l.onclose = () => {
258
- console.log("[WS] Disconnected"), l = null;
259
- });
260
- },
261
- async send(e) {
262
- l?.readyState === WebSocket.OPEN ? l.send(e) : console.warn("[WS] Tried to send while disconnected");
263
- },
264
- async close() {
265
- l?.close(), l = null;
266
- },
267
- onMessage(e) {
268
- A = e;
269
- }
270
- };
271
- self.onconnect = (e) => {
272
- const t = e.ports[0];
273
- t.start(), M(v, t);
274
- };
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)};