@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.
- package/droid.mjs +2312 -74
- package/index.d.ts +32 -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 +38 -0
- package/lib/gateway/SupabaseGateway.d.ts.map +1 -0
- package/lib/gateway/WorkerCommunication.d.ts +39 -0
- package/lib/gateway/WorkerCommunication.d.ts.map +1 -0
- package/lib/gateway/WorkerPool.d.ts +55 -0
- package/lib/gateway/WorkerPool.d.ts.map +1 -0
- package/lib/gateway/capabilities.d.ts +23 -0
- package/lib/gateway/capabilities.d.ts.map +1 -0
- package/lib/gateway/index.d.ts +9 -0
- package/lib/gateway/index.d.ts.map +1 -0
- package/lib/gateway/strategies/DirectStrategy.d.ts +52 -0
- package/lib/gateway/strategies/DirectStrategy.d.ts.map +1 -0
- package/lib/gateway/strategies/SharedWorkerStrategy.d.ts +46 -0
- package/lib/gateway/strategies/SharedWorkerStrategy.d.ts.map +1 -0
- package/lib/gateway/strategies/WebWorkerStrategy.d.ts +45 -0
- package/lib/gateway/strategies/WebWorkerStrategy.d.ts.map +1 -0
- package/lib/gateway/types.d.ts +81 -0
- package/lib/gateway/types.d.ts.map +1 -0
- package/lib/workers/canvas-ui-renderer.d.ts +25 -0
- package/lib/workers/canvas-ui-renderer.d.ts.map +1 -0
- package/lib/workers/canvas-worker.d.ts +14 -0
- package/lib/workers/canvas-worker.d.ts.map +1 -0
- package/lib/workers/canvas-worker.js +5 -302
- package/lib/workers/data.d.ts +40 -0
- package/lib/workers/data.d.ts.map +1 -0
- package/lib/workers/db-worker.d.ts +69 -0
- package/lib/workers/db-worker.d.ts.map +1 -0
- package/lib/workers/db-worker.js +13 -3636
- package/lib/workers/events.d.ts +11 -0
- package/lib/workers/events.d.ts.map +1 -0
- package/lib/workers/flexbuilder.d.ts +4 -0
- package/lib/workers/flexbuilder.d.ts.map +1 -0
- package/lib/workers/init.d.ts +11 -0
- package/lib/workers/init.d.ts.map +1 -0
- package/lib/workers/main.d.ts +105 -0
- package/lib/workers/main.d.ts.map +1 -0
- package/lib/workers/supabase-db-worker.d.ts +2 -0
- package/lib/workers/supabase-db-worker.d.ts.map +1 -0
- package/lib/workers/supabase-db-worker.js +23 -0
- package/lib/workers/supabase-shared-worker.d.ts +2 -0
- package/lib/workers/supabase-shared-worker.d.ts.map +1 -0
- package/lib/workers/supabase-shared-worker.js +25 -0
- package/lib/workers/tools.d.ts +4 -0
- package/lib/workers/tools.d.ts.map +1 -0
- package/lib/workers/validate.d.ts +15 -0
- package/lib/workers/validate.d.ts.map +1 -0
- package/lib/workers/ws-worker.d.ts +10 -0
- package/lib/workers/ws-worker.d.ts.map +1 -0
- package/lib/workers/ws-worker.js +5 -273
- package/main.js +5711 -0
- package/package.json +18 -6
- package/src/index.ts +41 -13
- 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/droid.spec.ts +14 -19
- package/src/lib/droid.ts +48 -4
- package/src/lib/gateway/SupabaseGateway.ts +236 -0
- package/src/lib/gateway/WorkerCommunication.ts +132 -0
- package/src/lib/gateway/WorkerPool.ts +304 -0
- package/src/lib/gateway/capabilities.spec.ts +144 -0
- package/src/lib/gateway/capabilities.ts +80 -0
- package/src/lib/gateway/index.ts +15 -0
- package/src/lib/gateway/strategies/DirectStrategy.ts +443 -0
- package/src/lib/gateway/strategies/SharedWorkerStrategy.ts +278 -0
- package/src/lib/gateway/strategies/WebWorkerStrategy.ts +278 -0
- package/src/lib/gateway/types.ts +139 -0
- package/src/lib/mod/mod-manager.ts +13 -8
- package/src/lib/mod/module/bento/mod-bento.worker.ts +1 -1
- package/src/lib/mod/module/supabase/mod-supabase.spec.ts +21 -25
- package/src/lib/mod/module/supabase/mod-supabase.ts +73 -0
- package/src/lib/mod/module/supabase/mod-supabase.worker.ts +1 -56
- package/src/lib/state/auth.spec.ts +58 -0
- package/src/lib/state/auth.ts +148 -0
- package/src/lib/state/bento.spec.ts +76 -0
- package/src/lib/state/bento.ts +51 -0
- package/src/lib/state/index.ts +98 -0
- package/src/lib/state/overlay-manager.ts +125 -0
- package/src/lib/state/profile-sync.ts +214 -0
- package/src/lib/state/profile.ts +155 -0
- package/src/lib/state/router.ts +24 -0
- package/src/lib/state/staff.ts +128 -0
- package/src/lib/state/sync-bus.ts +109 -0
- package/src/lib/state/theme-sync.ts +75 -0
- package/src/lib/state/toasts.spec.ts +106 -0
- package/src/lib/state/toasts.ts +34 -0
- package/src/lib/state/ui.spec.ts +148 -0
- package/src/lib/state/ui.ts +45 -0
- package/src/lib/state/welcome-toast.spec.ts +101 -0
- package/src/lib/state/welcome-toast.ts +76 -0
- package/src/lib/sw-recovery.spec.ts +165 -0
- package/src/lib/sw-recovery.ts +141 -0
- package/src/lib/types/bento.spec.ts +116 -0
- package/src/lib/types/bento.ts +94 -55
- package/src/lib/types/event-schemas.spec.ts +120 -0
- package/src/lib/types/event-types.spec.ts +96 -0
- package/src/lib/types/event-types.ts +113 -3
- package/src/lib/types/modules.ts +12 -5
- package/src/lib/types/ui-event-types.ts +66 -0
- package/src/lib/workers/canvas-ui-renderer.ts +266 -0
- package/src/lib/workers/canvas-worker.ts +94 -9
- package/src/lib/workers/data.ts +64 -37
- package/src/lib/workers/db-worker.ts +105 -32
- package/src/lib/workers/events.spec.ts +208 -0
- package/src/lib/workers/events.ts +27 -14
- package/src/lib/workers/flexbuilder.ts +2 -2
- package/src/lib/workers/init.ts +25 -17
- package/src/lib/workers/main.ts +506 -327
- package/src/lib/workers/supabase-db-worker.ts +243 -0
- package/src/lib/workers/supabase-shared-worker.ts +607 -0
- package/src/lib/workers/validate.ts +64 -0
- package/src/lib/workers/ws-worker.spec.ts +41 -0
- package/src/lib/workers/ws-worker.ts +255 -31
- package/src/setup-vitest.ts +4 -2
- package/src/types.ts +30 -0
- package/src/vite-env.d.ts +1 -0
- package/workers/main.js +2 -1125
- package/comlink.js +0 -253
- package/index.js +0 -2972
- package/reference.js +0 -259
- package/src/types.d.ts +0 -31
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
/// <reference lib="webworker" />
|
|
2
|
+
// Database worker for Supabase operations (used in worker pool)
|
|
3
|
+
// Uses in-memory storage — the SharedWorker is the single auth writer to IndexedDB.
|
|
4
|
+
|
|
5
|
+
import { createClient, type SupabaseClient } from '@supabase/supabase-js';
|
|
6
|
+
|
|
7
|
+
type WorkerMessage =
|
|
8
|
+
| { id: string; type: 'ping'; payload?: unknown }
|
|
9
|
+
| {
|
|
10
|
+
id: string;
|
|
11
|
+
type: 'init';
|
|
12
|
+
payload: {
|
|
13
|
+
url: string;
|
|
14
|
+
anonKey: string;
|
|
15
|
+
options?: Record<string, unknown>;
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
| {
|
|
19
|
+
id: string;
|
|
20
|
+
type: 'from.select';
|
|
21
|
+
payload: {
|
|
22
|
+
table: string;
|
|
23
|
+
columns?: string;
|
|
24
|
+
match?: Record<string, unknown>;
|
|
25
|
+
limit?: number;
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
| {
|
|
29
|
+
id: string;
|
|
30
|
+
type: 'from.insert';
|
|
31
|
+
payload: {
|
|
32
|
+
table: string;
|
|
33
|
+
data: Record<string, unknown> | Record<string, unknown>[];
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
| {
|
|
37
|
+
id: string;
|
|
38
|
+
type: 'from.update';
|
|
39
|
+
payload: {
|
|
40
|
+
table: string;
|
|
41
|
+
data: Record<string, unknown>;
|
|
42
|
+
match: Record<string, unknown>;
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
| {
|
|
46
|
+
id: string;
|
|
47
|
+
type: 'from.upsert';
|
|
48
|
+
payload: {
|
|
49
|
+
table: string;
|
|
50
|
+
data: Record<string, unknown> | Record<string, unknown>[];
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
| {
|
|
54
|
+
id: string;
|
|
55
|
+
type: 'from.delete';
|
|
56
|
+
payload: { table: string; match: Record<string, unknown> };
|
|
57
|
+
}
|
|
58
|
+
| {
|
|
59
|
+
id: string;
|
|
60
|
+
type: 'rpc';
|
|
61
|
+
payload: { fn: string; args?: Record<string, unknown> };
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
declare const self: DedicatedWorkerGlobalScope;
|
|
65
|
+
|
|
66
|
+
let client: SupabaseClient | null = null;
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* In-memory storage for DB workers.
|
|
70
|
+
* DB workers only need the access token to make authenticated API calls.
|
|
71
|
+
* The SharedWorker is the single writer to IndexedDB (sb-auth-v2).
|
|
72
|
+
*/
|
|
73
|
+
const memoryStore = new Map<string, string>();
|
|
74
|
+
const memoryStorage = {
|
|
75
|
+
async getItem(key: string): Promise<string | null> {
|
|
76
|
+
return memoryStore.get(key) ?? null;
|
|
77
|
+
},
|
|
78
|
+
async setItem(key: string, value: string): Promise<void> {
|
|
79
|
+
memoryStore.set(key, value);
|
|
80
|
+
},
|
|
81
|
+
async removeItem(key: string): Promise<void> {
|
|
82
|
+
memoryStore.delete(key);
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
console.log('[DB Worker] Initializing...');
|
|
87
|
+
|
|
88
|
+
// Dedicated workers receive `event.origin === ''` from their owning page;
|
|
89
|
+
// reject anything else to satisfy CodeQL js/missing-origin-check.
|
|
90
|
+
function isAllowedOrigin(event: MessageEvent): boolean {
|
|
91
|
+
return event.origin === '' || event.origin === self.location.origin;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
self.onmessage = async (e: MessageEvent<WorkerMessage>) => {
|
|
95
|
+
if (!isAllowedOrigin(e)) {
|
|
96
|
+
console.warn('[DB Worker] Rejected message from origin:', e.origin);
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
const msg = e.data;
|
|
100
|
+
const { id, type, payload } = msg;
|
|
101
|
+
|
|
102
|
+
try {
|
|
103
|
+
switch (type) {
|
|
104
|
+
case 'ping': {
|
|
105
|
+
respond(id, { ok: true, data: 'pong' });
|
|
106
|
+
break;
|
|
107
|
+
}
|
|
108
|
+
case 'init': {
|
|
109
|
+
const { url, anonKey, options } = payload;
|
|
110
|
+
|
|
111
|
+
const authOverrides =
|
|
112
|
+
options?.['auth'] && typeof options['auth'] === 'object'
|
|
113
|
+
? (options['auth'] as Record<string, unknown>)
|
|
114
|
+
: {};
|
|
115
|
+
|
|
116
|
+
client = createClient(url, anonKey, {
|
|
117
|
+
...options,
|
|
118
|
+
auth: {
|
|
119
|
+
...authOverrides,
|
|
120
|
+
storage: memoryStorage,
|
|
121
|
+
storageKey: 'sb-auth-token',
|
|
122
|
+
// DB pool workers are stateless (memoryStorage) — token
|
|
123
|
+
// refresh is handled by the SharedWorker which owns the
|
|
124
|
+
// IDB-backed session. Disabling here avoids SDK-internal
|
|
125
|
+
// callbacks that produce non-cloneable objects.
|
|
126
|
+
autoRefreshToken: false,
|
|
127
|
+
persistSession: false,
|
|
128
|
+
detectSessionInUrl: false,
|
|
129
|
+
},
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
const {
|
|
133
|
+
data: { session },
|
|
134
|
+
error,
|
|
135
|
+
} = await client.auth.getSession();
|
|
136
|
+
if (error) console.error('[DB Worker] Session error:', error);
|
|
137
|
+
|
|
138
|
+
respond(id, {
|
|
139
|
+
ok: true,
|
|
140
|
+
data: { session, user: session?.user || null },
|
|
141
|
+
});
|
|
142
|
+
break;
|
|
143
|
+
}
|
|
144
|
+
case 'from.select': {
|
|
145
|
+
if (!client) throw new Error('Client not initialized');
|
|
146
|
+
const { table, columns, match, limit } = payload;
|
|
147
|
+
let query = client.from(table).select(columns || '*');
|
|
148
|
+
if (match) {
|
|
149
|
+
for (const [key, value] of Object.entries(match)) {
|
|
150
|
+
query = query.eq(key, value);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
if (limit) query = query.limit(limit);
|
|
154
|
+
const { data, error } = await query;
|
|
155
|
+
if (error) throw error;
|
|
156
|
+
respond(id, { ok: true, data });
|
|
157
|
+
break;
|
|
158
|
+
}
|
|
159
|
+
case 'from.insert': {
|
|
160
|
+
if (!client) throw new Error('Client not initialized');
|
|
161
|
+
const { table, data } = payload;
|
|
162
|
+
const { data: result, error } = await client
|
|
163
|
+
.from(table)
|
|
164
|
+
.insert(data)
|
|
165
|
+
.select();
|
|
166
|
+
if (error) throw error;
|
|
167
|
+
respond(id, { ok: true, data: result });
|
|
168
|
+
break;
|
|
169
|
+
}
|
|
170
|
+
case 'from.update': {
|
|
171
|
+
if (!client) throw new Error('Client not initialized');
|
|
172
|
+
const { table, data, match } = payload;
|
|
173
|
+
let query = client.from(table).update(data);
|
|
174
|
+
for (const [key, value] of Object.entries(match)) {
|
|
175
|
+
query = query.eq(key, value);
|
|
176
|
+
}
|
|
177
|
+
const { data: result, error } = await query.select();
|
|
178
|
+
if (error) throw error;
|
|
179
|
+
respond(id, { ok: true, data: result });
|
|
180
|
+
break;
|
|
181
|
+
}
|
|
182
|
+
case 'from.upsert': {
|
|
183
|
+
if (!client) throw new Error('Client not initialized');
|
|
184
|
+
const { table, data } = payload;
|
|
185
|
+
const { data: result, error } = await client
|
|
186
|
+
.from(table)
|
|
187
|
+
.upsert(data)
|
|
188
|
+
.select();
|
|
189
|
+
if (error) throw error;
|
|
190
|
+
respond(id, { ok: true, data: result });
|
|
191
|
+
break;
|
|
192
|
+
}
|
|
193
|
+
case 'from.delete': {
|
|
194
|
+
if (!client) throw new Error('Client not initialized');
|
|
195
|
+
const { table, match } = payload;
|
|
196
|
+
let query = client.from(table).delete();
|
|
197
|
+
for (const [key, value] of Object.entries(match)) {
|
|
198
|
+
query = query.eq(key, value);
|
|
199
|
+
}
|
|
200
|
+
const { data: result, error } = await query.select();
|
|
201
|
+
if (error) throw error;
|
|
202
|
+
respond(id, { ok: true, data: result });
|
|
203
|
+
break;
|
|
204
|
+
}
|
|
205
|
+
case 'rpc': {
|
|
206
|
+
if (!client) throw new Error('Client not initialized');
|
|
207
|
+
const { fn, args } = payload;
|
|
208
|
+
const { data, error } = await client.rpc(fn, args || {});
|
|
209
|
+
if (error) throw error;
|
|
210
|
+
respond(id, { ok: true, data });
|
|
211
|
+
break;
|
|
212
|
+
}
|
|
213
|
+
default:
|
|
214
|
+
respond(id, {
|
|
215
|
+
ok: false,
|
|
216
|
+
error: `Unknown message type: ${type}`,
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
} catch (err: unknown) {
|
|
220
|
+
console.error('[DB Worker] Error handling %s:', String(type), err);
|
|
221
|
+
respond(id, {
|
|
222
|
+
ok: false,
|
|
223
|
+
error: err instanceof Error ? err.message : String(err),
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
};
|
|
227
|
+
|
|
228
|
+
function respond(
|
|
229
|
+
id: string,
|
|
230
|
+
response: { ok: true; data?: unknown } | { ok: false; error: string },
|
|
231
|
+
) {
|
|
232
|
+
// JSON round-trip strips non-cloneable SDK internals (functions, circular
|
|
233
|
+
// refs) that would cause DataCloneError in postMessage.
|
|
234
|
+
let safe: typeof response;
|
|
235
|
+
try {
|
|
236
|
+
safe = JSON.parse(JSON.stringify(response));
|
|
237
|
+
} catch {
|
|
238
|
+
safe = { ok: false, error: 'Response contained non-serializable data' };
|
|
239
|
+
}
|
|
240
|
+
self.postMessage({ id, ...safe });
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
console.log('[DB Worker] Ready');
|