@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,45 @@
1
+ import { ISupabaseStrategy, SelectOptions, SessionResponse, WebSocketStatus } from '../types';
2
+ /**
3
+ * WebWorkerStrategy: Uses dedicated WebSocket worker + DB Worker Pool
4
+ *
5
+ * Architecture:
6
+ * - Dedicated WebSocket worker handles WebSocket, auth, and realtime (no cross-tab)
7
+ * - Worker pool (3 workers) handles database operations (parallel execution)
8
+ * - BroadcastChannel connects WebSocket worker to worker pool
9
+ *
10
+ * Best for: Android, Safari, browsers without SharedWorker
11
+ */
12
+ export declare class WebWorkerStrategy implements ISupabaseStrategy {
13
+ private wsWorker?;
14
+ private workerPool?;
15
+ private pending;
16
+ private listeners;
17
+ private comm;
18
+ private wsWorkerUrl;
19
+ private dbWorkerUrl;
20
+ private poolSize;
21
+ constructor(wsWorkerUrl: string | URL, dbWorkerUrl: string | URL, poolSize?: number);
22
+ init(url: string, anonKey: string, options?: Record<string, unknown>): Promise<SessionResponse>;
23
+ private onMessage;
24
+ private send;
25
+ on(event: string, callback: (payload: unknown) => void): () => void;
26
+ private emit;
27
+ getSession(): Promise<SessionResponse>;
28
+ signInWithPassword(email: string, password: string): Promise<SessionResponse>;
29
+ signOut(): Promise<void>;
30
+ select(table: string, opts?: SelectOptions): Promise<unknown[]>;
31
+ insert(table: string, data: Record<string, unknown> | Record<string, unknown>[]): Promise<unknown[]>;
32
+ update(table: string, data: Record<string, unknown>, match: Record<string, unknown>): Promise<unknown[]>;
33
+ upsert(table: string, data: Record<string, unknown> | Record<string, unknown>[]): Promise<unknown[]>;
34
+ delete(table: string, match: Record<string, unknown>): Promise<unknown[]>;
35
+ rpc(fn: string, args?: Record<string, unknown>): Promise<unknown>;
36
+ subscribePostgres(key: string, params: Record<string, unknown>, callback: (payload: unknown) => void): () => void;
37
+ connectWebSocket(wsUrl?: string): Promise<WebSocketStatus>;
38
+ disconnectWebSocket(): Promise<void>;
39
+ sendWebSocketMessage(data: unknown): Promise<void>;
40
+ getWebSocketStatus(): Promise<WebSocketStatus>;
41
+ onWebSocketMessage(callback: (message: unknown) => void): () => void;
42
+ onWebSocketStatus(callback: (status: WebSocketStatus) => void): () => void;
43
+ terminate(): void;
44
+ }
45
+ //# sourceMappingURL=WebWorkerStrategy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebWorkerStrategy.d.ts","sourceRoot":"","sources":["../../../../../../../packages/npm/droid/src/lib/gateway/strategies/WebWorkerStrategy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,81 @@
1
+ export interface SupabaseConfig {
2
+ url: string;
3
+ anonKey: string;
4
+ options?: Record<string, unknown>;
5
+ }
6
+ export interface Session {
7
+ access_token: string;
8
+ refresh_token: string;
9
+ user: Record<string, unknown>;
10
+ expires_at?: number;
11
+ }
12
+ export interface SessionResponse {
13
+ session: Session | null;
14
+ user?: Record<string, unknown>;
15
+ }
16
+ export interface WebSocketStatus {
17
+ status: 'connected' | 'disconnected' | 'connecting' | 'error';
18
+ readyState: number | null;
19
+ error?: string;
20
+ }
21
+ export interface ISupabaseStrategy {
22
+ init(url: string, anonKey: string, options?: Record<string, unknown>): Promise<SessionResponse>;
23
+ on(event: string, callback: (payload: unknown) => void): () => void;
24
+ getSession(): Promise<SessionResponse>;
25
+ signInWithPassword(email: string, password: string): Promise<SessionResponse>;
26
+ signOut(): Promise<void>;
27
+ select(table: string, opts?: SelectOptions): Promise<unknown[]>;
28
+ insert(table: string, data: Record<string, unknown> | Record<string, unknown>[]): Promise<unknown[]>;
29
+ update(table: string, data: Record<string, unknown>, match: Record<string, unknown>): Promise<unknown[]>;
30
+ upsert(table: string, data: Record<string, unknown> | Record<string, unknown>[]): Promise<unknown[]>;
31
+ delete(table: string, match: Record<string, unknown>): Promise<unknown[]>;
32
+ rpc(fn: string, args?: Record<string, unknown>): Promise<unknown>;
33
+ subscribePostgres(key: string, params: Record<string, unknown>, callback: (payload: unknown) => void): () => void;
34
+ connectWebSocket(wsUrl?: string): Promise<WebSocketStatus>;
35
+ disconnectWebSocket(): Promise<void>;
36
+ sendWebSocketMessage(data: unknown): Promise<void>;
37
+ getWebSocketStatus(): Promise<WebSocketStatus>;
38
+ onWebSocketMessage(callback: (message: unknown) => void): () => void;
39
+ onWebSocketStatus(callback: (status: WebSocketStatus) => void): () => void;
40
+ terminate(): void;
41
+ }
42
+ export interface SelectOptions {
43
+ columns?: string;
44
+ match?: Record<string, unknown>;
45
+ limit?: number;
46
+ }
47
+ export interface WorkerMessage {
48
+ id: string;
49
+ type: string;
50
+ payload?: unknown;
51
+ }
52
+ export interface WorkerResponse {
53
+ id: string;
54
+ ok: boolean;
55
+ data?: unknown;
56
+ error?: string;
57
+ }
58
+ export interface BroadcastEvent {
59
+ type: 'auth' | 'ws.message' | 'ws.status' | 'realtime' | 'ready' | 'worker-error';
60
+ data?: unknown;
61
+ key?: string;
62
+ payload?: unknown;
63
+ }
64
+ export type StrategyType = 'shared-worker' | 'web-worker' | 'direct';
65
+ export interface BrowserCapabilities {
66
+ hasSharedWorker: boolean;
67
+ hasWorker: boolean;
68
+ hasBroadcastChannel: boolean;
69
+ isAndroid: boolean;
70
+ isSafari: boolean;
71
+ }
72
+ export interface GatewayConfig {
73
+ workerUrls?: {
74
+ sharedWorker?: string | URL;
75
+ dbWorker?: string | URL;
76
+ webSocketWorker?: string | URL;
77
+ };
78
+ forceStrategy?: StrategyType;
79
+ poolSize?: number;
80
+ }
81
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../packages/npm/droid/src/lib/gateway/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { ToastPayload, TooltipPayload, ModalPayload } from '../types/ui-event-types';
2
+ export declare class CanvasUIRenderer {
3
+ private ctx;
4
+ private canvas;
5
+ private toasts;
6
+ private tooltip;
7
+ private modal;
8
+ private theme;
9
+ private animFrame;
10
+ private dbGet;
11
+ bind(canvas: OffscreenCanvas, dbGet: (key: string) => Promise<string | null>): Promise<void>;
12
+ refreshTheme(): Promise<void>;
13
+ addToast(payload: ToastPayload): void;
14
+ removeToast(id: string): void;
15
+ showTooltip(payload: TooltipPayload | null): void;
16
+ showModal(payload: ModalPayload | null): void;
17
+ private recalcPositions;
18
+ private startLoop;
19
+ private render;
20
+ private drawToast;
21
+ private drawModal;
22
+ private roundRect;
23
+ unbind(): void;
24
+ }
25
+ //# sourceMappingURL=canvas-ui-renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvas-ui-renderer.d.ts","sourceRoot":"","sources":["../../../../../../packages/npm/droid/src/lib/workers/canvas-ui-renderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,MAAM,yBAAyB,CAAC;AAiCjC,qBAAa,gBAAgB;IAC5B,OAAO,CAAC,GAAG,CAAkD;IAC7D,OAAO,CAAC,MAAM,CAAgC;IAC9C,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,OAAO,CAA+B;IAC9C,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,KAAK,CAYX;IACF,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,KAAK,CAA0D;IAEjE,IAAI,CACT,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,GAC5C,OAAO,CAAC,IAAI,CAAC;IAQV,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAmBnC,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IAWrC,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAM7B,WAAW,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,GAAG,IAAI;IAIjD,SAAS,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,GAAG,IAAI;IAI7C,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,SAAS;IAQjB,OAAO,CAAC,MAAM;IAiCd,OAAO,CAAC,SAAS;IAoCjB,OAAO,CAAC,SAAS;IAoCjB,OAAO,CAAC,SAAS;IAqBjB,MAAM,IAAI,IAAI;CAWd"}
@@ -0,0 +1,14 @@
1
+ import { ToastPayload, TooltipPayload, ModalPayload } from '../types/ui-event-types';
2
+ export interface CanvasWorkerAPI {
3
+ bindCanvas(panelId: string, canvas: OffscreenCanvas, mode?: CanvasDrawMode): Promise<void>;
4
+ unbindCanvas(panelId: string): Promise<void>;
5
+ bindUICanvas(canvas: OffscreenCanvas, dbGet: (key: string) => Promise<string | null>): Promise<void>;
6
+ unbindUICanvas(): void;
7
+ addCanvasToast(payload: ToastPayload): void;
8
+ removeCanvasToast(id: string): void;
9
+ showCanvasTooltip(payload: TooltipPayload | null): void;
10
+ showCanvasModal(payload: ModalPayload | null): void;
11
+ refreshUITheme(): Promise<void>;
12
+ }
13
+ export type CanvasDrawMode = 'static' | 'animated' | 'dynamic';
14
+ //# sourceMappingURL=canvas-worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvas-worker.d.ts","sourceRoot":"","sources":["../../../../../../packages/npm/droid/src/lib/workers/canvas-worker.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACX,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,MAAM,yBAAyB,CAAC;AAEjC,MAAM,WAAW,eAAe;IAC/B,UAAU,CACT,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,eAAe,EACvB,IAAI,CAAC,EAAE,cAAc,GACnB,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,YAAY,CACX,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,GAC5C,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,cAAc,IAAI,IAAI,CAAC;IACvB,cAAc,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,CAAC;IAC5C,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,iBAAiB,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,GAAG,IAAI,CAAC;IACxD,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,GAAG,IAAI,CAAC;IACpD,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAChC;AAUD,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC"}
@@ -1,303 +1,6 @@
1
1
  /**
2
- * @license
3
- * Copyright 2019 Google LLC
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
- const A = Symbol("Comlink.proxy"), F = Symbol("Comlink.endpoint"), O = Symbol("Comlink.releaseProxy"), k = Symbol("Comlink.finalizer"), d = Symbol("Comlink.thrown"), C = (t) => typeof t == "object" && t !== null || typeof t == "function", z = {
7
- canHandle: (t) => C(t) && t[A],
8
- serialize(t) {
9
- const { port1: e, port2: r } = new MessageChannel();
10
- return S(t, e), [r, [r]];
11
- },
12
- deserialize(t) {
13
- return t.start(), H(t);
14
- }
15
- }, N = {
16
- canHandle: (t) => C(t) && d in t,
17
- serialize({ value: t }) {
18
- let e;
19
- return t instanceof Error ? e = {
20
- isError: !0,
21
- value: {
22
- message: t.message,
23
- name: t.name,
24
- stack: t.stack
25
- }
26
- } : e = { isError: !1, value: t }, [e, []];
27
- },
28
- deserialize(t) {
29
- throw t.isError ? Object.assign(new Error(t.value.message), t.value) : t.value;
30
- }
31
- }, P = /* @__PURE__ */ new Map([
32
- ["proxy", z],
33
- ["throw", N]
34
- ]);
35
- function W(t, e) {
36
- for (const r of t)
37
- if (e === r || r === "*" || r instanceof RegExp && r.test(e))
38
- return !0;
39
- return !1;
40
- }
41
- function S(t, e = globalThis, r = ["*"]) {
42
- e.addEventListener("message", function l(n) {
43
- if (!n || !n.data)
44
- return;
45
- if (!W(r, n.origin)) {
46
- console.warn(`Invalid origin '${n.origin}' for comlink proxy`);
47
- return;
48
- }
49
- const { id: s, type: m, path: c } = Object.assign({ path: [] }, n.data), u = (n.data.argumentList || []).map(h);
50
- let a;
51
- try {
52
- const o = c.slice(0, -1).reduce((i, y) => i[y], t), f = c.reduce((i, y) => i[y], t);
53
- switch (m) {
54
- case "GET":
55
- a = f;
56
- break;
57
- case "SET":
58
- o[c.slice(-1)[0]] = h(n.data.value), a = !0;
59
- break;
60
- case "APPLY":
61
- a = f.apply(o, u);
62
- break;
63
- case "CONSTRUCT":
64
- {
65
- const i = new f(...u);
66
- a = $(i);
67
- }
68
- break;
69
- case "ENDPOINT":
70
- {
71
- const { port1: i, port2: y } = new MessageChannel();
72
- S(t, y), a = _(i, [i]);
73
- }
74
- break;
75
- case "RELEASE":
76
- a = void 0;
77
- break;
78
- default:
79
- return;
80
- }
81
- } catch (o) {
82
- a = { value: o, [d]: 0 };
83
- }
84
- Promise.resolve(a).catch((o) => ({ value: o, [d]: 0 })).then((o) => {
85
- const [f, i] = b(o);
86
- e.postMessage(Object.assign(Object.assign({}, f), { id: s }), i), m === "RELEASE" && (e.removeEventListener("message", l), R(e), k in t && typeof t[k] == "function" && t[k]());
87
- }).catch((o) => {
88
- const [f, i] = b({
89
- value: new TypeError("Unserializable return value"),
90
- [d]: 0
91
- });
92
- e.postMessage(Object.assign(Object.assign({}, f), { id: s }), i);
93
- });
94
- }), e.start && e.start();
95
- }
96
- function D(t) {
97
- return t.constructor.name === "MessagePort";
98
- }
99
- function R(t) {
100
- D(t) && t.close();
101
- }
102
- function H(t, e) {
103
- const r = /* @__PURE__ */ new Map();
104
- return t.addEventListener("message", function(n) {
105
- const { data: s } = n;
106
- if (!s || !s.id)
107
- return;
108
- const m = r.get(s.id);
109
- if (m)
110
- try {
111
- m(s);
112
- } finally {
113
- r.delete(s.id);
114
- }
115
- }), M(t, r, [], e);
116
- }
117
- function w(t) {
118
- if (t)
119
- throw new Error("Proxy has been released and is not useable");
120
- }
121
- function v(t) {
122
- return g(t, /* @__PURE__ */ new Map(), {
123
- type: "RELEASE"
124
- }).then(() => {
125
- R(t);
126
- });
127
- }
128
- const E = /* @__PURE__ */ new WeakMap(), x = "FinalizationRegistry" in globalThis && new FinalizationRegistry((t) => {
129
- const e = (E.get(t) || 0) - 1;
130
- E.set(t, e), e === 0 && v(t);
131
- });
132
- function L(t, e) {
133
- const r = (E.get(e) || 0) + 1;
134
- E.set(e, r), x && x.register(t, e, t);
135
- }
136
- function U(t) {
137
- x && x.unregister(t);
138
- }
139
- function M(t, e, r = [], l = function() {
140
- }) {
141
- let n = !1;
142
- const s = new Proxy(l, {
143
- get(m, c) {
144
- if (w(n), c === O)
145
- return () => {
146
- U(s), v(t), e.clear(), n = !0;
147
- };
148
- if (c === "then") {
149
- if (r.length === 0)
150
- return { then: () => s };
151
- const u = g(t, e, {
152
- type: "GET",
153
- path: r.map((a) => a.toString())
154
- }).then(h);
155
- return u.then.bind(u);
156
- }
157
- return M(t, e, [...r, c]);
158
- },
159
- set(m, c, u) {
160
- w(n);
161
- const [a, o] = b(u);
162
- return g(t, e, {
163
- type: "SET",
164
- path: [...r, c].map((f) => f.toString()),
165
- value: a
166
- }, o).then(h);
167
- },
168
- apply(m, c, u) {
169
- w(n);
170
- const a = r[r.length - 1];
171
- if (a === F)
172
- return g(t, e, {
173
- type: "ENDPOINT"
174
- }).then(h);
175
- if (a === "bind")
176
- return M(t, e, r.slice(0, -1));
177
- const [o, f] = p(u);
178
- return g(t, e, {
179
- type: "APPLY",
180
- path: r.map((i) => i.toString()),
181
- argumentList: o
182
- }, f).then(h);
183
- },
184
- construct(m, c) {
185
- w(n);
186
- const [u, a] = p(c);
187
- return g(t, e, {
188
- type: "CONSTRUCT",
189
- path: r.map((o) => o.toString()),
190
- argumentList: u
191
- }, a).then(h);
192
- }
193
- });
194
- return L(s, t), s;
195
- }
196
- function V(t) {
197
- return Array.prototype.concat.apply([], t);
198
- }
199
- function p(t) {
200
- const e = t.map(b);
201
- return [e.map((r) => r[0]), V(e.map((r) => r[1]))];
202
- }
203
- const T = /* @__PURE__ */ new WeakMap();
204
- function _(t, e) {
205
- return T.set(t, e), t;
206
- }
207
- function $(t) {
208
- return Object.assign(t, { [A]: !0 });
209
- }
210
- function b(t) {
211
- for (const [e, r] of P)
212
- if (r.canHandle(t)) {
213
- const [l, n] = r.serialize(t);
214
- return [
215
- {
216
- type: "HANDLER",
217
- name: e,
218
- value: l
219
- },
220
- n
221
- ];
222
- }
223
- return [
224
- {
225
- type: "RAW",
226
- value: t
227
- },
228
- T.get(t) || []
229
- ];
230
- }
231
- function h(t) {
232
- switch (t.type) {
233
- case "HANDLER":
234
- return P.get(t.name).deserialize(t.value);
235
- case "RAW":
236
- return t.value;
237
- }
238
- }
239
- function g(t, e, r, l) {
240
- return new Promise((n) => {
241
- const s = j();
242
- e.set(s, n), t.start && t.start(), t.postMessage(Object.assign({ id: s }, r), l);
243
- });
244
- }
245
- function j() {
246
- return new Array(4).fill(0).map(() => Math.floor(Math.random() * Number.MAX_SAFE_INTEGER).toString(16)).join("-");
247
- }
248
- const q = {
249
- bindings: /* @__PURE__ */ new Map(),
250
- async bindCanvas(t, e, r = "animated") {
251
- const l = e.getContext("2d");
252
- if (!l) {
253
- console.error(`[CanvasWorker] Failed to get 2D context for panel ${t}`);
254
- return;
255
- }
256
- console.log(`[CanvasWorker] Successfully bound canvas for panel ${t} with mode ${r}`), this.bindings.set(t, { ctx: l, canvas: e, panelId: t, mode: r }), this.startAnimation(t);
257
- },
258
- startAnimation(t) {
259
- const e = this.bindings.get(t);
260
- if (e)
261
- switch (e.mode) {
262
- case "static":
263
- this.drawStatic(e);
264
- break;
265
- case "animated":
266
- this.drawAnimated(e);
267
- break;
268
- case "dynamic":
269
- this.drawDynamic(e);
270
- break;
271
- default:
272
- console.warn(`[CanvasWorker] Unknown draw mode for panel ${t}`);
273
- }
274
- },
275
- drawStatic(t) {
276
- t.ctx.fillStyle = "gray", t.ctx.fillRect(0, 0, t.canvas.width, t.canvas.height);
277
- },
278
- drawAnimated(t) {
279
- let e = 0;
280
- const r = () => {
281
- e = (e + 1) % 360, t.ctx.fillStyle = `hsl(${e}, 100%, 50%)`, t.ctx.fillRect(0, 0, t.canvas.width, t.canvas.height), t.animationFrame = requestAnimationFrame(r);
282
- };
283
- r();
284
- },
285
- drawDynamic(t) {
286
- let e = 0;
287
- const r = () => {
288
- e += 0.05, t.ctx.clearRect(0, 0, t.canvas.width, t.canvas.height), t.ctx.beginPath(), t.ctx.arc(
289
- t.canvas.width / 2 + Math.sin(e) * 50,
290
- t.canvas.height / 2 + Math.cos(e) * 50,
291
- 30,
292
- 0,
293
- Math.PI * 2
294
- ), t.ctx.fillStyle = "orange", t.ctx.fill(), t.animationFrame = requestAnimationFrame(r);
295
- };
296
- r();
297
- },
298
- async unbindCanvas(t) {
299
- const e = this.bindings.get(t);
300
- e?.animationFrame && cancelAnimationFrame(e.animationFrame), this.bindings.delete(t), console.log(`[CanvasWorker] Unbound canvas for panel ${t}`);
301
- }
302
- };
303
- S(q);
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(`-`)}const O={success:{bg:`#065f46`,border:`#10b981`,text:`#d1fae5`},warning:{bg:`#78350f`,border:`#f59e0b`,text:`#fef3c7`},error:{bg:`#7f1d1d`,border:`#ef4444`,text:`#fee2e2`},info:{bg:`#1e3a5f`,border:`#3b82f6`,text:`#dbeafe`}},k=new class{ctx=null;canvas=null;toasts=[];tooltip=null;modal=null;theme={accent:`#8b5cf6`,accentLow:`#1e1033`,accentHigh:`#c4b5fd`,bg:`#0a0a0a`,bgAccent:`#3b1f6e`,text:`#e0e0e0`,textAccent:`#a78bfa`,border:`#4c1d95`,white:`#ffffff`,black:`#000000`,mode:`dark`};animFrame=null;dbGet=null;async bind(e,t){this.canvas=e,this.ctx=e.getContext(`2d`),this.dbGet=t,await this.refreshTheme(),this.startLoop()}async refreshTheme(){this.dbGet&&(this.theme={accent:await this.dbGet(`theme:accent`)??`#8b5cf6`,accentLow:await this.dbGet(`theme:accent-low`)??`#1e1033`,accentHigh:await this.dbGet(`theme:accent-high`)??`#c4b5fd`,bg:await this.dbGet(`theme:bg`)??`#0a0a0a`,bgAccent:await this.dbGet(`theme:bg-accent`)??`#3b1f6e`,text:await this.dbGet(`theme:text`)??`#e0e0e0`,textAccent:await this.dbGet(`theme:text-accent`)??`#a78bfa`,border:await this.dbGet(`theme:border`)??`#4c1d95`,white:await this.dbGet(`theme:white`)??`#ffffff`,black:await this.dbGet(`theme:black`)??`#000000`,mode:await this.dbGet(`theme:mode`)??`dark`})}addToast(e){let t=20+this.toasts.length*80;this.toasts.push({...e,createdAt:Date.now(),opacity:0,y:t-20,targetY:t})}removeToast(e){let t=this.toasts.findIndex(t=>t.id===e);t!==-1&&this.toasts.splice(t,1),this.recalcPositions()}showTooltip(e){this.tooltip=e}showModal(e){this.modal=e}recalcPositions(){this.toasts.forEach((e,t)=>{e.targetY=20+t*80})}startLoop(){let e=()=>{this.render(),this.animFrame=requestAnimationFrame(e)};e()}render(){if(!this.ctx||!this.canvas)return;let{width:e,height:t}=this.canvas;this.ctx.clearRect(0,0,e,t);let n=Date.now();this.toasts=this.toasts.filter(e=>!(e.duration&&e.duration>0&&n-e.createdAt>e.duration)),this.recalcPositions();for(let t of this.toasts)t.opacity<1&&(t.opacity=Math.min(1,t.opacity+.05)),t.y+=(t.targetY-t.y)*.15,this.drawToast(t,e);this.modal&&this.drawModal(e,t)}drawToast(e,t){if(!this.ctx)return;let n=this.ctx,r=t-320-20,i=e.y,a=O[e.severity]??O.info;n.globalAlpha=e.opacity,n.fillStyle=a.bg,this.roundRect(n,r,i,320,64,8),n.fill(),n.strokeStyle=a.border,n.lineWidth=1.5,this.roundRect(n,r,i,320,64,8),n.stroke(),n.fillStyle=a.text,n.font=`14px system-ui, -apple-system, sans-serif`,n.fillText(e.message,r+12,i+24,296),n.font=`bold 10px system-ui, sans-serif`,n.fillStyle=a.border,n.fillText(e.severity.toUpperCase(),r+12,i+48),n.globalAlpha=1}drawModal(e,t){if(!this.ctx||!this.modal)return;let n=this.ctx;n.fillStyle=`rgba(0, 0, 0, 0.5)`,n.fillRect(0,0,e,t);let r=Math.min(500,e-40),i=(e-r)/2,a=(t-300)/2;n.fillStyle=this.theme.bg,this.roundRect(n,i,a,r,300,12),n.fill(),n.strokeStyle=this.theme.border,n.lineWidth=1,this.roundRect(n,i,a,r,300,12),n.stroke(),this.modal.title&&(n.fillStyle=this.theme.text,n.font=`bold 18px system-ui, sans-serif`,n.fillText(this.modal.title,i+20,a+36,r-40)),n.fillStyle=this.theme.textAccent,n.font=`12px system-ui, sans-serif`,n.fillText(this.modal.id,i+20,a+60,r-40)}roundRect(e,t,n,r,i,a){e.beginPath(),e.moveTo(t+a,n),e.lineTo(t+r-a,n),e.quadraticCurveTo(t+r,n,t+r,n+a),e.lineTo(t+r,n+i-a),e.quadraticCurveTo(t+r,n+i,t+r-a,n+i),e.lineTo(t+a,n+i),e.quadraticCurveTo(t,n+i,t,n+i-a),e.lineTo(t,n+a),e.quadraticCurveTo(t,n,t+a,n),e.closePath()}unbind(){this.animFrame!==null&&(cancelAnimationFrame(this.animFrame),this.animFrame=null),this.ctx=null,this.canvas=null,this.toasts=[],this.tooltip=null,this.modal=null}};try{let e=new BroadcastChannel(`kbve_theme`);e.onmessage=()=>{k.refreshTheme()}}catch{}c({bindings:new Map,async bindCanvas(e,t,n=`animated`){let r=t.getContext(`2d`);if(!r){console.error(`[CanvasWorker] Failed to get 2D context for panel ${e}`);return}console.log(`[CanvasWorker] Successfully bound canvas for panel ${e} with mode ${n}`),this.bindings.set(e,{ctx:r,canvas:t,panelId:e,mode:n}),this.startAnimation(e)},startAnimation(e){let t=this.bindings.get(e);if(t)switch(t.mode){case`static`:this.drawStatic(t);break;case`animated`:this.drawAnimated(t);break;case`dynamic`:this.drawDynamic(t);break;default:console.warn(`[CanvasWorker] Unknown draw mode for panel ${e}`)}},drawStatic(e){e.ctx.fillStyle=`gray`,e.ctx.fillRect(0,0,e.canvas.width,e.canvas.height)},drawAnimated(e){let t=0,n=()=>{t=(t+1)%360,e.ctx.fillStyle=`hsl(${t}, 100%, 50%)`,e.ctx.fillRect(0,0,e.canvas.width,e.canvas.height),e.animationFrame=requestAnimationFrame(n)};n()},drawDynamic(e){let t=0,n=()=>{t+=.05,e.ctx.clearRect(0,0,e.canvas.width,e.canvas.height),e.ctx.beginPath(),e.ctx.arc(e.canvas.width/2+Math.sin(t)*50,e.canvas.height/2+Math.cos(t)*50,30,0,Math.PI*2),e.ctx.fillStyle=`orange`,e.ctx.fill(),e.animationFrame=requestAnimationFrame(n)};n()},async unbindCanvas(e){let t=this.bindings.get(e);t?.animationFrame&&cancelAnimationFrame(t.animationFrame),this.bindings.delete(e),console.log(`[CanvasWorker] Unbound canvas for panel ${e}`)},async bindUICanvas(e,t){await k.bind(e,t)},unbindUICanvas(){k.unbind()},addCanvasToast(e){k.addToast(e)},removeCanvasToast(e){k.removeToast(e)},showCanvasTooltip(e){k.showTooltip(e)},showCanvasModal(e){k.showModal(e)},refreshUITheme(){return k.refreshTheme()}});
@@ -0,0 +1,40 @@
1
+ import { PayloadFormat, JediEnvelopeFlex, MessageKind } from '../types/jedi';
2
+ export declare function wrapEnvelope<T extends Record<string, unknown>>(payload: T, kind: number, format: PayloadFormat, metadata?: Uint8Array, version?: number): Uint8Array;
3
+ export declare function unwrapEnvelope<T = unknown>(buffer: Uint8Array | ArrayBuffer): {
4
+ envelope: JediEnvelopeFlex;
5
+ payload: T;
6
+ };
7
+ export declare function unwrapFlexToJson(buffer: Uint8Array): unknown;
8
+ export declare function inspectFlex(buffer: Uint8Array | ArrayBuffer): void;
9
+ export declare function hasKind(kind: number, flag: number): boolean;
10
+ export declare function wrapRedisSet(key: string, value: string): Uint8Array;
11
+ export declare function wrapRedisGet(key: string): Uint8Array;
12
+ export declare function wrapRedisDel(key: string): Uint8Array;
13
+ export declare function parseRedisPayload<T = unknown>(envelopeBytes: Uint8Array): {
14
+ envelope: JediEnvelopeFlex;
15
+ payload: T;
16
+ };
17
+ export declare function wrapRedisXAdd(stream: string, fields: Record<string, string>, id?: string): Uint8Array;
18
+ export declare function wrapRedisXRead(streams: {
19
+ stream: string;
20
+ id: string;
21
+ }[], count?: number, block?: number): Uint8Array;
22
+ export declare const scopeData: {
23
+ wrapEnvelope: typeof wrapEnvelope;
24
+ unwrapEnvelope: typeof unwrapEnvelope;
25
+ MessageKind: typeof MessageKind;
26
+ PayloadFormat: typeof PayloadFormat;
27
+ unwrapFlexToJson: typeof unwrapFlexToJson;
28
+ inspectFlex: typeof inspectFlex;
29
+ hasKind: typeof hasKind;
30
+ redis: {
31
+ wrapRedisSet: typeof wrapRedisSet;
32
+ wrapRedisGet: typeof wrapRedisGet;
33
+ wrapRedisDel: typeof wrapRedisDel;
34
+ wrapRedisXAdd: typeof wrapRedisXAdd;
35
+ wrapRedisXRead: typeof wrapRedisXRead;
36
+ parseRedisPayload: typeof parseRedisPayload;
37
+ };
38
+ };
39
+ export type FlexDataAPI = typeof scopeData;
40
+ //# sourceMappingURL=data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../../../../../packages/npm/droid/src/lib/workers/data.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,aAAa,EACb,KAAK,gBAAgB,EACrB,WAAW,EACX,MAAM,eAAe,CAAC;AAkBvB,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7D,OAAO,EAAE,CAAC,EACV,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,aAAa,EACrB,QAAQ,CAAC,EAAE,UAAU,EACrB,OAAO,SAAI,GACT,UAAU,CA0BZ;AAED,wBAAgB,cAAc,CAAC,CAAC,GAAG,OAAO,EACzC,MAAM,EAAE,UAAU,GAAG,WAAW,GAC9B;IAAE,QAAQ,EAAE,gBAAgB,CAAC;IAAC,OAAO,EAAE,CAAC,CAAA;CAAE,CA4C5C;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,WAElD;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,UAAU,GAAG,WAAW,GAAG,IAAI,CASlE;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAE3D;AAID,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,CAMnE;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAMpD;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAMpD;AAED,wBAAgB,iBAAiB,CAAC,CAAC,GAAG,OAAO,EAC5C,aAAa,EAAE,UAAU,GACvB;IACF,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,OAAO,EAAE,CAAC,CAAC;CACX,CAMA;AAED,wBAAgB,aAAa,CAC5B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,EAAE,SAAM,GACN,UAAU,CAMZ;AAED,wBAAgB,cAAc,CAC7B,OAAO,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,EAAE,EACzC,KAAK,CAAC,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,MAAM,GACZ,UAAU,CA2CZ;AAED,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;CAgBrB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,OAAO,SAAS,CAAC"}
@@ -0,0 +1,69 @@
1
+ import { DiscordServer, DiscordTag, Profile } from '../types/discord';
2
+ declare const storageAPI: {
3
+ storeWsMessage(key: string, buffer: ArrayBuffer): Promise<void>;
4
+ getWsMessage(key: string): Promise<Record<string, unknown> | Uint8Array<ArrayBufferLike> | null>;
5
+ getAllWsMessages(): Promise<{
6
+ key: string;
7
+ message: Uint8Array | Record<string, unknown>;
8
+ }[]>;
9
+ clearWsMessages(): Promise<void>;
10
+ getTranslation(key: string): Promise<string | null>;
11
+ getTranslations(keys: string[]): Promise<Record<string, string>>;
12
+ putI18nBatch(data: Record<string, string>): Promise<void>;
13
+ loadI18nFromJSON(path: string): Promise<void>;
14
+ getAllI18nKeys(): Promise<string[]>;
15
+ loadServersFromJSON(path: string): Promise<void>;
16
+ syncHtmlFromServers(): Promise<void>;
17
+ dbSet(id: string, value: unknown): Promise<void>;
18
+ dbGet(id: string): Promise<{} | null>;
19
+ dbClear(): Promise<void>;
20
+ setVersion(version: string): Promise<void>;
21
+ getVersion(): Promise<{} | null>;
22
+ markSeeded(): Promise<void>;
23
+ checkSeeded(): Promise<boolean>;
24
+ putServers(servers: DiscordServer[]): Promise<void>;
25
+ getAllServers(): Promise<{
26
+ server_id: string;
27
+ owner_id: string;
28
+ lang: number;
29
+ status: number;
30
+ invite: string;
31
+ name: string;
32
+ summary: string;
33
+ categories: number;
34
+ updated_at: string;
35
+ description?: string | null | undefined;
36
+ website?: string | null | undefined;
37
+ logo?: string | null | undefined;
38
+ banner?: string | null | undefined;
39
+ video?: string | null | undefined;
40
+ }[]>;
41
+ putHtmlCards(data: {
42
+ key: string;
43
+ value: string;
44
+ }[]): Promise<void>;
45
+ getHtmlCard(key: string): Promise<string | null>;
46
+ putTags(tags: DiscordTag[]): Promise<void>;
47
+ getAllTags(): Promise<{
48
+ tag_id: string;
49
+ name: string;
50
+ status: number;
51
+ }[]>;
52
+ putProfiles(profiles: Profile[]): Promise<void>;
53
+ getAllProfiles(): Promise<{
54
+ profile_id: string;
55
+ user_id: string;
56
+ username: string;
57
+ joined_at: string;
58
+ status: number;
59
+ avatar?: string | undefined;
60
+ bio?: string | undefined;
61
+ }[]>;
62
+ setAuthToken(key: string, value: string, expiresAt?: number): Promise<void>;
63
+ getAuthToken(key: string): Promise<string | null>;
64
+ removeAuthToken(key: string): Promise<void>;
65
+ clearAuthTokens(): Promise<void>;
66
+ };
67
+ export type LocalStorageAPI = typeof storageAPI;
68
+ export {};
69
+ //# sourceMappingURL=db-worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db-worker.d.ts","sourceRoot":"","sources":["../../../../../../packages/npm/droid/src/lib/workers/db-worker.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAyE3E,QAAA,MAAM,UAAU;wBAGW,MAAM,UAAU,WAAW;sBAS7B,MAAM;wBAIJ,OAAO,CAChC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,EAAE,CAChE;;wBAcyB,MAAM;0BAGJ,MAAM,EAAE;uBAQX,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;2BAOlB,MAAM;sBAWX,OAAO,CAAC,MAAM,EAAE,CAAC;8BAIT,MAAM;;cA4CtB,MAAM,SAAS,OAAO;cAGtB,MAAM;;wBAQI,MAAM;;;;wBAcN,aAAa,EAAE;;;;;;;;;;;;;;;;;uBAQhB;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE;qBAGlC,MAAM;kBAKT,UAAU,EAAE;;;;;;0BAQJ,OAAO,EAAE;;;;;;;;;;sBAQb,MAAM,SAAS,MAAM,cAAc,MAAM;sBAGzC,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;yBAS5B,MAAM;;CAMjC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,OAAO,UAAU,CAAC"}