@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 @@
1
+ {"version":3,"file":"repoConfig.d.ts","sourceRoot":"","sources":["../../../../../../../packages/npm/droid/src/lib/agents/github/repoConfig.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAE5E,wBAAgB,cAAc,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS;4BAGzB,OAAO,CACzC,MAAM,CAAC;QAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAC/C;8BAesC,MAAM,EAAE,KAAG,OAAO,CAAC,MAAM,CAAC;yCAYrB,MAAM,SAAS,MAAM,EAAE,KAAG,IAAI;uCAWhC,MAAM,SAAS,MAAM,EAAE,KAAG,IAAI;uCAO9B,MAAM,KAAG,IAAI;yCAU7C,MAAM,sBAEb,OAAO,CAAC,MAAM,CAAC;sCAoB6B,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC;wBAwBxC,OAAO,CACrC,MAAM,CAAC;QAAE,MAAM,EAAE,eAAe,CAAA;KAAE,CAAC,CACnC;2BAYmC,eAAe,KAAG,OAAO,CAAC,MAAM,CAAC;qCAa3D,MAAM,OACV,eAAe,KAClB,IAAI;mCAYG,MAAM,SACR,OAAO,CAAC,kBAAkB,CAAC,KAChC,IAAI;mCAS+B,MAAM,KAAG,IAAI;qCAUzC,MAAM,sBAEb,OAAO,CAAC,MAAM,CAAC;kCAoByB,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC;EAwCnE"}
@@ -0,0 +1,22 @@
1
+ import { AgentsCtx } from '../ctx';
2
+ import { AgentsApi } from '../api-types';
3
+ import { TokenServiceValue } from '../generated/agents-schema';
4
+ import { AgentTokenRow, Result } from '../types';
5
+ export declare function makeTokens(ctx: AgentsCtx, api: AgentsApi): {
6
+ loadTokens: (guildId: string, force?: boolean) => Promise<void>;
7
+ addToken: (input: {
8
+ tokenName: string;
9
+ service: TokenServiceValue;
10
+ tokenValue: string;
11
+ description?: string | null;
12
+ }) => Promise<Result<{
13
+ tokenId: string;
14
+ }>>;
15
+ deleteToken: (tokenId: string) => Promise<Result>;
16
+ peekToken: (service: TokenServiceValue) => Promise<Result<{
17
+ value: string | null;
18
+ }>>;
19
+ toggleToken: (tokenId: string, isActive: boolean) => Promise<Result>;
20
+ hasService: (service: TokenServiceValue) => AgentTokenRow | null;
21
+ };
22
+ //# sourceMappingURL=tokens.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../../../../../../packages/npm/droid/src/lib/agents/github/tokens.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAEN,KAAK,iBAAiB,EACtB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEtD,wBAAgB,UAAU,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS;0BAGrB,MAAM,sBAAkB,OAAO,CAAC,IAAI,CAAC;sBA4FzC;QAC9B,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,iBAAiB,CAAC;QAC3B,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAC5B,KAAG,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;2BA2BJ,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC;yBAwBlD,iBAAiB,KACxB,OAAO,CAAC,MAAM,CAAC;QAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;2BAuBlC,MAAM,YACL,OAAO,KACf,OAAO,CAAC,MAAM,CAAC;0BAkBW,iBAAiB,KAAG,aAAa,GAAG,IAAI;EAiBrE"}
@@ -0,0 +1,37 @@
1
+ import { AgentsCtx } from '../ctx';
2
+ import { AgentsApi } from '../api-types';
3
+ import { GithubRepoHook, Result, WebhookInstallResult } from '../types';
4
+ export declare function makeWebhook(ctx: AgentsCtx, api: AgentsApi): {
5
+ setWebhookDraft: (guildId: string, secret: string | null) => void;
6
+ clearWebhookError: (guildId: string) => void;
7
+ saveWebhookDraft: (guildId: string, tokenName: string, description: string) => Promise<Result<{
8
+ tokenId: string;
9
+ }>>;
10
+ installRepoWebhook: (guildId: string, owner: string, repo: string) => Promise<WebhookInstallResult | {
11
+ ok: false;
12
+ error: string;
13
+ }>;
14
+ pingRepoWebhook: (guildId: string, owner: string, repo: string) => Promise<{
15
+ ok: true;
16
+ hookId: number;
17
+ url: string;
18
+ } | {
19
+ ok: false;
20
+ error: string;
21
+ retryAfterMs?: number;
22
+ }>;
23
+ listRepoWebhooks: (guildId: string, owner: string, repo: string) => Promise<Result<{
24
+ expectedUrl: string;
25
+ hooks: GithubRepoHook[];
26
+ }>>;
27
+ setWebhookInstallSelected: (guildId: string, repo: string) => void;
28
+ clearWebhookInstallResult: (guildId: string) => void;
29
+ installWebhookForGuild: (guildId: string) => Promise<void>;
30
+ pingWebhookForGuild: (guildId: string) => Promise<void>;
31
+ verifyWebhookInstall: (guildId: string, repoFull: string) => Promise<void>;
32
+ rotateWebhookForGuild: (guildId: string, owner: string, repo: string) => Promise<void>;
33
+ deleteWebhookForGuild: (guildId: string, owner: string, repo: string) => Promise<Result>;
34
+ loadWebhookDeliveries: (guildId: string, owner: string, repo: string, limit?: number) => Promise<void>;
35
+ webhookUrlFor: (guildId: string) => string;
36
+ };
37
+ //# sourceMappingURL=webhook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook.d.ts","sourceRoot":"","sources":["../../../../../../../packages/npm/droid/src/lib/agents/github/webhook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAK9C,OAAO,KAAK,EACX,cAAc,EACd,MAAM,EAEN,oBAAoB,EACpB,MAAM,UAAU,CAAC;AAElB,wBAAgB,WAAW,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS;+BAGvB,MAAM,UAAU,MAAM,GAAG,IAAI,KAAG,IAAI;iCAOlC,MAAM,KAAG,IAAI;gCAOvC,MAAM,aACJ,MAAM,eACJ,MAAM,KACjB,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;kCAgC7B,MAAM,SACR,MAAM,QACP,MAAM,KACV,OAAO,CAAC,oBAAoB,GAAG;QAAE,EAAE,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;+BAqBrD,MAAM,SACR,MAAM,QACP,MAAM,KACV,OAAO,CACP;QAAE,EAAE,EAAE,IAAI,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GACzC;QAAE,EAAE,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CACrD;gCAgBS,MAAM,SACR,MAAM,QACP,MAAM,KACV,OAAO,CAAC,MAAM,CAAC;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,cAAc,EAAE,CAAA;KAAE,CAAC,CAAC;yCA2BxB,MAAM,QAAQ,MAAM,KAAG,IAAI;yCAO3B,MAAM,KAAG,IAAI;sCAMV,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;mCAqBzB,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;oCAsBxD,MAAM,YACL,MAAM,KACd,OAAO,CAAC,IAAI,CAAC;qCAqBN,MAAM,SACR,MAAM,QACP,MAAM,KACV,OAAO,CAAC,IAAI,CAAC;qCAyBN,MAAM,SACR,MAAM,QACP,MAAM,KACV,OAAO,CAAC,MAAM,CAAC;qCA0BR,MAAM,SACR,MAAM,QACP,MAAM,qBAEV,OAAO,CAAC,IAAI,CAAC;6BA8CgB,MAAM,KAAG,MAAM;EAqB/C"}
@@ -0,0 +1,8 @@
1
+ export { createAgents } from './createAgents';
2
+ export type { AgentsApi, AgentsMethods } from './api-types';
3
+ export type { AgentsStore } from './state/atoms';
4
+ export type { AgentsConfig, AgentsNotice, AgentsSession, ResolvedAgentsConfig, } from './config';
5
+ export { emptyBotConfigFormDraft, botConfigToFormDraft, botConfigFromFormDraft, } from './formDrafts';
6
+ export { parseJwtPayload, extractJwtOwnedGuildIds } from './cache';
7
+ export type { AgentTokenRow, AuthState as AgentsAuthState, BackfillResult, BotConfigFormDraft, DiscordChannel, DiscordForumChannel, DiscordGuild, DiscordshConfig, EventQueueStats, FailedEvent, GithubRepoHook, GuildChannels, PatValidation, PendingEvent, Result as AgentsResult, WebhookDelivery, WebhookInstallResult, WebhookOpResult, } from './types';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/npm/droid/src/lib/agents/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5D,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,YAAY,EACX,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,oBAAoB,GACpB,MAAM,UAAU,CAAC;AAClB,OAAO,EACN,uBAAuB,EACvB,oBAAoB,EACpB,sBAAsB,GACtB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AACnE,YAAY,EACX,aAAa,EACb,SAAS,IAAI,eAAe,EAC5B,cAAc,EACd,kBAAkB,EAClB,cAAc,EACd,mBAAmB,EACnB,YAAY,EACZ,eAAe,EACf,eAAe,EACf,WAAW,EACX,cAAc,EACd,aAAa,EACb,aAAa,EACb,YAAY,EACZ,MAAM,IAAI,YAAY,EACtB,eAAe,EACf,oBAAoB,EACpB,eAAe,GACf,MAAM,SAAS,CAAC"}
@@ -0,0 +1,122 @@
1
+ import { WritableAtom } from 'nanostores';
2
+ import { AuthState, BackfillResult, BotConfigFormDraft, DiscordGuild, GuildChannels, PatValidation, WebhookInstallResult, WebhookOpResult } from '../types';
3
+ type Fail = {
4
+ ok: false;
5
+ error: string;
6
+ };
7
+ export declare function createAgentsStore(): {
8
+ $authState: import('nanostores').PreinitializedWritableAtom<AuthState> & object;
9
+ $accessToken: import('nanostores').PreinitializedWritableAtom<string | null> & object;
10
+ $providerToken: import('nanostores').PreinitializedWritableAtom<string | null> & object;
11
+ $userId: import('nanostores').PreinitializedWritableAtom<string | null> & object;
12
+ $guilds: import('nanostores').PreinitializedWritableAtom<DiscordGuild[]> & object;
13
+ $guildsLoading: import('nanostores').PreinitializedWritableAtom<boolean> & object;
14
+ $guildsError: import('nanostores').PreinitializedWritableAtom<string | null> & object;
15
+ $guildsStale: import('nanostores').PreinitializedWritableAtom<boolean> & object;
16
+ $selectedGuildId: import('nanostores').PreinitializedWritableAtom<string | null> & object;
17
+ $tokens: import('nanostores').PreinitializedWritableAtom<{
18
+ token_id: string;
19
+ token_name: string;
20
+ service: string;
21
+ is_active: boolean;
22
+ created_at: string;
23
+ description?: string | null | undefined;
24
+ updated_at?: string | null | undefined;
25
+ }[]> & object;
26
+ $tokensLoading: import('nanostores').PreinitializedWritableAtom<boolean> & object;
27
+ $tokensError: import('nanostores').PreinitializedWritableAtom<string | null> & object;
28
+ $botConfigDrafts: import('nanostores').PreinitializedWritableAtom<Record<string, BotConfigFormDraft>> & object;
29
+ $botConfigSavingFor: import('nanostores').PreinitializedWritableAtom<Record<string, boolean>> & object;
30
+ $botConfigErrors: import('nanostores').PreinitializedWritableAtom<Record<string, string | null>> & object;
31
+ $botConfigLoadedFor: import('nanostores').PreinitializedWritableAtom<Record<string, boolean>> & object;
32
+ $repoAllowlistDrafts: import('nanostores').PreinitializedWritableAtom<Record<string, string[]>> & object;
33
+ $repoAllowlistSavingFor: import('nanostores').PreinitializedWritableAtom<Record<string, boolean>> & object;
34
+ $repoAllowlistErrors: import('nanostores').PreinitializedWritableAtom<Record<string, string | null>> & object;
35
+ $repoAllowlistLoadedFor: import('nanostores').PreinitializedWritableAtom<Record<string, boolean>> & object;
36
+ $webhookDrafts: import('nanostores').PreinitializedWritableAtom<Record<string, string | null>> & object;
37
+ $webhookSavingFor: import('nanostores').PreinitializedWritableAtom<Record<string, boolean>> & object;
38
+ $webhookErrors: import('nanostores').PreinitializedWritableAtom<Record<string, string | null>> & object;
39
+ $patDrafts: import('nanostores').PreinitializedWritableAtom<Record<string, string>> & object;
40
+ $patValidatedFor: import('nanostores').PreinitializedWritableAtom<Record<string, PatValidation | null>> & object;
41
+ $patValidatingFor: import('nanostores').PreinitializedWritableAtom<Record<string, boolean>> & object;
42
+ $patSavingFor: import('nanostores').PreinitializedWritableAtom<Record<string, boolean>> & object;
43
+ $patErrors: import('nanostores').PreinitializedWritableAtom<Record<string, string | null>> & object;
44
+ $backfillDrafts: import('nanostores').PreinitializedWritableAtom<Record<string, {
45
+ owner: string;
46
+ repo: string;
47
+ }>> & object;
48
+ $backfillBusyFor: import('nanostores').PreinitializedWritableAtom<Record<string, boolean>> & object;
49
+ $backfillResults: import('nanostores').PreinitializedWritableAtom<Record<string, BackfillResult | Fail | null>> & object;
50
+ $webhookInstallSelected: import('nanostores').PreinitializedWritableAtom<Record<string, string>> & object;
51
+ $webhookInstallBusyFor: import('nanostores').PreinitializedWritableAtom<Record<string, boolean>> & object;
52
+ $webhookInstallResults: import('nanostores').PreinitializedWritableAtom<Record<string, WebhookInstallResult | Fail | null>> & object;
53
+ $webhookPingBusyFor: import('nanostores').PreinitializedWritableAtom<Record<string, boolean>> & object;
54
+ $webhookPingResults: import('nanostores').PreinitializedWritableAtom<Record<string, WebhookOpResult | Fail | null>> & object;
55
+ $guildChannels: WritableAtom<Record<string, GuildChannels & {
56
+ cached_at: number;
57
+ }>>;
58
+ $guildChannelsLoading: import('nanostores').PreinitializedWritableAtom<Record<string, boolean>> & object;
59
+ $guildChannelsError: import('nanostores').PreinitializedWritableAtom<Record<string, string | null>> & object;
60
+ $botMembership: WritableAtom<Record<string, {
61
+ isMember: boolean;
62
+ cached_at: number;
63
+ }>>;
64
+ $botMembershipLoading: import('nanostores').PreinitializedWritableAtom<Record<string, boolean>> & object;
65
+ $botMembershipError: import('nanostores').PreinitializedWritableAtom<Record<string, string | null>> & object;
66
+ $webhookDeliveries: import('nanostores').PreinitializedWritableAtom<Record<string, {
67
+ id: number;
68
+ guid: string;
69
+ delivered_at: string;
70
+ redelivery: boolean;
71
+ duration: number;
72
+ status: string;
73
+ status_code: number;
74
+ event: string;
75
+ action?: string | null | undefined;
76
+ }[]>> & object;
77
+ $webhookDeliveriesLoading: import('nanostores').PreinitializedWritableAtom<Record<string, boolean>> & object;
78
+ $webhookDeliveriesError: import('nanostores').PreinitializedWritableAtom<Record<string, string | null>> & object;
79
+ $webhookRotateBusyFor: import('nanostores').PreinitializedWritableAtom<Record<string, boolean>> & object;
80
+ $webhookRotateResults: import('nanostores').PreinitializedWritableAtom<Record<string, WebhookOpResult | Fail | null>> & object;
81
+ $webhookDeleteBusyFor: import('nanostores').PreinitializedWritableAtom<Record<string, boolean>> & object;
82
+ $eventStats: import('nanostores').PreinitializedWritableAtom<Record<string, {
83
+ pending_count: number;
84
+ in_flight_count: number;
85
+ delivered_count: number;
86
+ failed_count: number;
87
+ last_delivered_at?: string | null | undefined;
88
+ last_recorded_at?: string | null | undefined;
89
+ oldest_pending_at?: string | null | undefined;
90
+ }>> & object;
91
+ $eventStatsLoading: import('nanostores').PreinitializedWritableAtom<Record<string, boolean>> & object;
92
+ $failedEvents: import('nanostores').PreinitializedWritableAtom<Record<string, {
93
+ id: number;
94
+ owner: string;
95
+ repo: string;
96
+ number: number;
97
+ event_type: string;
98
+ delivery_attempts: number;
99
+ created_at: string;
100
+ updated_at: string;
101
+ actor?: string | null | undefined;
102
+ last_error?: string | null | undefined;
103
+ }[]>> & object;
104
+ $failedEventsLoading: import('nanostores').PreinitializedWritableAtom<Record<string, boolean>> & object;
105
+ $pendingEvents: import('nanostores').PreinitializedWritableAtom<Record<string, {
106
+ id: number;
107
+ owner: string;
108
+ repo: string;
109
+ number: number;
110
+ event_type: string;
111
+ delivery_state: number;
112
+ delivery_attempts: number;
113
+ created_at: string;
114
+ actor?: string | null | undefined;
115
+ claimed_at?: string | null | undefined;
116
+ }[]>> & object;
117
+ $pendingEventsLoading: import('nanostores').PreinitializedWritableAtom<Record<string, boolean>> & object;
118
+ $eventRequeueBusyFor: import('nanostores').PreinitializedWritableAtom<Record<string, boolean>> & object;
119
+ };
120
+ export type AgentsStore = ReturnType<typeof createAgentsStore>;
121
+ export {};
122
+ //# sourceMappingURL=atoms.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"atoms.d.ts","sourceRoot":"","sources":["../../../../../../../packages/npm/droid/src/lib/agents/state/atoms.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAErD,OAAO,KAAK,EAEX,SAAS,EACT,cAAc,EACd,kBAAkB,EAClB,YAAY,EAGZ,aAAa,EACb,aAAa,EAGb,oBAAoB,EACpB,eAAe,EACf,MAAM,UAAU,CAAC;AAElB,KAAK,IAAI,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAezC,wBAAgB,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;eAsCe,MAAM;cAAQ,MAAM;;;;;;;;;;mBAmBrB,MAAM;;;;;kBAMvB,OAAO;mBAAa,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuBvD;AAED,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC"}
@@ -0,0 +1,65 @@
1
+ export type AuthState = 'loading' | 'authenticated' | 'unauthenticated' | 'discord_reauth_required';
2
+ export interface DiscordGuild {
3
+ id: string;
4
+ name: string;
5
+ icon: string | null;
6
+ owner: boolean;
7
+ permissions: string;
8
+ }
9
+ export interface BotConfigFormDraft {
10
+ default_repo: string;
11
+ claim_channel_id: string;
12
+ forum_channel_id: string;
13
+ noticeboard_channel_id: string;
14
+ taskboard_channel_id: string;
15
+ max_assignees: string;
16
+ mirror_pr_events: boolean;
17
+ active: boolean;
18
+ }
19
+ export type { AgentTokenRow, AgentError } from './generated/agents-schema';
20
+ export type { DiscordshConfig, GithubRepoHook, WebhookDelivery, EventQueueStats, FailedEvent, PendingEvent, } from './generated/discordsh-agents-schema';
21
+ export interface DiscordForumChannel {
22
+ id: string;
23
+ name: string;
24
+ parent_id: string | null;
25
+ position: number;
26
+ }
27
+ export interface DiscordChannel {
28
+ id: string;
29
+ name: string;
30
+ parent_id: string | null;
31
+ position: number;
32
+ }
33
+ export interface GuildChannels {
34
+ forums: DiscordChannel[];
35
+ texts: DiscordChannel[];
36
+ }
37
+ export interface PatValidation {
38
+ login: string;
39
+ scopes: string[];
40
+ tokenType: string;
41
+ }
42
+ export interface BackfillResult {
43
+ ok: true;
44
+ upserted: number;
45
+ pages: number;
46
+ rateLimitRemaining: number | null;
47
+ }
48
+ export interface WebhookInstallResult {
49
+ ok: true;
50
+ installed: boolean;
51
+ alreadyPresent: boolean;
52
+ hookId: number | null;
53
+ }
54
+ export interface WebhookOpResult {
55
+ ok: true;
56
+ hookId: number;
57
+ at: number;
58
+ }
59
+ export type Result<T = unknown> = ({
60
+ ok: true;
61
+ } & T) | {
62
+ ok: false;
63
+ error: string;
64
+ };
65
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../packages/npm/droid/src/lib/agents/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAClB,SAAS,GACT,eAAe,GACf,iBAAiB,GACjB,yBAAyB,CAAC;AAE7B,MAAM,WAAW,YAAY;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,KAAK,EAAE,OAAO,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,MAAM,EAAE,OAAO,CAAC;CAChB;AAED,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAC3E,YAAY,EACX,eAAe,EACf,cAAc,EACd,eAAe,EACf,eAAe,EACf,WAAW,EACX,YAAY,GACZ,MAAM,qCAAqC,CAAC;AAE7C,MAAM,WAAW,mBAAmB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC7B,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,KAAK,EAAE,cAAc,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC9B,EAAE,EAAE,IAAI,CAAC;IACT,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAED,MAAM,WAAW,oBAAoB;IACpC,EAAE,EAAE,IAAI,CAAC;IACT,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,OAAO,CAAC;IACxB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC/B,EAAE,EAAE,IAAI,CAAC;IACT,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;CACX;AAED,MAAM,MAAM,MAAM,CAAC,CAAC,GAAG,OAAO,IAC3B,CAAC;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG,CAAC,CAAC,GAClB;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC"}
@@ -0,0 +1,38 @@
1
+ import { ISupabaseStrategy, SelectOptions, SessionResponse, WebSocketStatus, StrategyType, GatewayConfig } from './types';
2
+ /**
3
+ * SupabaseGateway: Unified interface for all Supabase operations
4
+ *
5
+ * Automatically selects the best strategy based on browser capabilities:
6
+ * 1. SharedWorker + DB Worker Pool (desktop: Chrome, Firefox, Edge)
7
+ * 2. WebSocket Worker + DB Worker Pool (Android, Safari)
8
+ * 3. Direct/Main thread (fallback)
9
+ *
10
+ * All strategies implement the same interface, so application code is unchanged.
11
+ */
12
+ export declare class SupabaseGateway implements ISupabaseStrategy {
13
+ private strategy;
14
+ private strategyType;
15
+ constructor(config?: GatewayConfig);
16
+ getStrategyType(): StrategyType;
17
+ getStrategyDescription(): string;
18
+ init(url: string, anonKey: string, options?: Record<string, unknown>): Promise<SessionResponse>;
19
+ on(event: string, callback: (payload: unknown) => void): () => void;
20
+ getSession(): Promise<SessionResponse>;
21
+ signInWithPassword(email: string, password: string): Promise<SessionResponse>;
22
+ signOut(): Promise<void>;
23
+ select(table: string, opts?: SelectOptions): Promise<unknown[]>;
24
+ insert(table: string, data: Record<string, unknown> | Record<string, unknown>[]): Promise<unknown[]>;
25
+ update(table: string, data: Record<string, unknown>, match: Record<string, unknown>): Promise<unknown[]>;
26
+ upsert(table: string, data: Record<string, unknown> | Record<string, unknown>[]): Promise<unknown[]>;
27
+ delete(table: string, match: Record<string, unknown>): Promise<unknown[]>;
28
+ rpc(fn: string, args?: Record<string, unknown>): Promise<unknown>;
29
+ subscribePostgres(key: string, params: Record<string, unknown>, callback: (payload: unknown) => void): () => void;
30
+ connectWebSocket(wsUrl?: string): Promise<WebSocketStatus>;
31
+ disconnectWebSocket(): Promise<void>;
32
+ sendWebSocketMessage(data: unknown): Promise<void>;
33
+ getWebSocketStatus(): Promise<WebSocketStatus>;
34
+ onWebSocketMessage(callback: (message: unknown) => void): () => void;
35
+ onWebSocketStatus(callback: (status: WebSocketStatus) => void): () => void;
36
+ terminate(): void;
37
+ }
38
+ //# sourceMappingURL=SupabaseGateway.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SupabaseGateway.d.ts","sourceRoot":"","sources":["../../../../../../packages/npm/droid/src/lib/gateway/SupabaseGateway.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACX,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,eAAe,EACf,YAAY,EACZ,aAAa,EACb,MAAM,SAAS,CAAC;AAiBjB;;;;;;;;;GASG;AACH,qBAAa,eAAgB,YAAW,iBAAiB;IACxD,OAAO,CAAC,QAAQ,CAAoB;IACpC,OAAO,CAAC,YAAY,CAAe;gBAEvB,MAAM,GAAE,aAAkB;IAsDtC,eAAe,IAAI,YAAY;IAI/B,sBAAsB,IAAI,MAAM;IAM1B,IAAI,CACT,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,OAAO,CAAC,eAAe,CAAC;IAuC3B,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI;IAInE,UAAU,IAAI,OAAO,CAAC,eAAe,CAAC;IAItC,kBAAkB,CACjB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,GACd,OAAO,CAAC,eAAe,CAAC;IAI3B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAIxB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAI/D,MAAM,CACL,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GACvD,OAAO,CAAC,OAAO,EAAE,CAAC;IAIrB,MAAM,CACL,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,OAAO,EAAE,CAAC;IAIrB,MAAM,CACL,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GACvD,OAAO,CAAC,OAAO,EAAE,CAAC;IAIrB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAIzE,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAIjE,iBAAiB,CAChB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAClC,MAAM,IAAI;IAIb,gBAAgB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAI1D,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIpC,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlD,kBAAkB,IAAI,OAAO,CAAC,eAAe,CAAC;IAI9C,kBAAkB,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI;IAIpE,iBAAiB,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,GAAG,MAAM,IAAI;IAI1E,SAAS;CAGT"}
@@ -0,0 +1,39 @@
1
+ import { BroadcastEvent } from './types';
2
+ /**
3
+ * WorkerCommunication: Unified communication layer for workers
4
+ *
5
+ * Features:
6
+ * - BroadcastChannel for real-time events
7
+ * - Works in SharedWorker, WebWorker, and main thread
8
+ *
9
+ * Note: This layer does NOT open IndexedDB. The SharedWorker is the single
10
+ * writer to the auth database (sb-auth-v2). All other contexts receive
11
+ * auth state via BroadcastChannel or postMessage.
12
+ */
13
+ export declare class WorkerCommunication {
14
+ private bc;
15
+ private listeners;
16
+ private channelName;
17
+ constructor(channelName?: string);
18
+ private initBroadcastChannel;
19
+ /**
20
+ * Broadcast an event to all workers and tabs
21
+ */
22
+ broadcast(event: BroadcastEvent): void;
23
+ private handleBroadcast;
24
+ /**
25
+ * Subscribe to events (local and broadcast)
26
+ */
27
+ on(event: string, callback: (payload: unknown) => void): () => void;
28
+ private emit;
29
+ /**
30
+ * Check if BroadcastChannel is available
31
+ */
32
+ hasBroadcastChannel(): boolean;
33
+ /**
34
+ * Close connections
35
+ */
36
+ close(): void;
37
+ }
38
+ export declare function getWorkerCommunication(channelName?: string): WorkerCommunication;
39
+ //# sourceMappingURL=WorkerCommunication.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkerCommunication.d.ts","sourceRoot":"","sources":["../../../../../../packages/npm/droid/src/lib/gateway/WorkerCommunication.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C;;;;;;;;;;GAUG;AACH,qBAAa,mBAAmB;IAC/B,OAAO,CAAC,EAAE,CAAiC;IAC3C,OAAO,CAAC,SAAS,CAAsD;IACvE,OAAO,CAAC,WAAW,CAAS;gBAEhB,WAAW,SAAoB;IAK3C,OAAO,CAAC,oBAAoB;IAe5B;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,cAAc;IAU/B,OAAO,CAAC,eAAe;IAUvB;;OAEG;IACH,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI;IAiBnE,OAAO,CAAC,IAAI;IAgBZ;;OAEG;IACH,mBAAmB,IAAI,OAAO;IAI9B;;OAEG;IACH,KAAK;CAOL;AAOD,wBAAgB,sBAAsB,CACrC,WAAW,CAAC,EAAE,MAAM,GAClB,mBAAmB,CAKrB"}
@@ -0,0 +1,55 @@
1
+ export interface WorkerPoolConfig {
2
+ size: number;
3
+ workerUrl: string | URL;
4
+ }
5
+ /**
6
+ * WorkerPool: Manages a pool of workers with round-robin load balancing
7
+ *
8
+ * Features:
9
+ * - Fixed-size pool (default: 3 workers)
10
+ * - Round-robin routing for database operations
11
+ * - Request/response tracking with UUIDs
12
+ * - Automatic error handling with exponential backoff retries
13
+ */
14
+ export declare class WorkerPool {
15
+ private workers;
16
+ private poolSize;
17
+ private roundRobinIndex;
18
+ private pending;
19
+ private workerUrl;
20
+ private workerRetryCount;
21
+ private workerRetryTimers;
22
+ private readonly MAX_RETRY_ATTEMPTS;
23
+ private readonly BASE_RETRY_DELAY_MS;
24
+ private readonly MAX_RETRY_DELAY_MS;
25
+ private readonly REQUEST_TIMEOUT_MS;
26
+ constructor(config: WorkerPoolConfig);
27
+ /**
28
+ * Initialize the worker pool
29
+ */
30
+ init(): Promise<void>;
31
+ private getNextWorker;
32
+ private sendToWorker;
33
+ /**
34
+ * Send message to next available worker (round-robin)
35
+ */
36
+ send<T>(type: string, payload?: unknown): Promise<T>;
37
+ private handleMessage;
38
+ private handleError;
39
+ private scheduleWorkerRecreation;
40
+ private recreateWorker;
41
+ /**
42
+ * Terminate all workers
43
+ */
44
+ terminate(): void;
45
+ /**
46
+ * Get pool statistics
47
+ */
48
+ getStats(): {
49
+ size: number;
50
+ activeWorkers: number;
51
+ pendingRequests: number;
52
+ nextWorker: number;
53
+ };
54
+ }
55
+ //# sourceMappingURL=WorkerPool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkerPool.d.ts","sourceRoot":"","sources":["../../../../../../packages/npm/droid/src/lib/gateway/WorkerPool.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,gBAAgB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,GAAG,GAAG,CAAC;CACxB;AAED;;;;;;;;GAQG;AACH,qBAAa,UAAU;IACtB,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,OAAO,CAOX;IACJ,OAAO,CAAC,SAAS,CAAe;IAChC,OAAO,CAAC,gBAAgB,CAA6B;IACrD,OAAO,CAAC,iBAAiB,CAGrB;IAEJ,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAK;IACxC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAQ;IAC5C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAQ;IAC3C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;gBAEhC,MAAM,EAAE,gBAAgB;IAKpC;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAyC3B,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,YAAY;IA2CpB;;OAEG;IACH,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAQpD,OAAO,CAAC,aAAa;IA4BrB,OAAO,CAAC,WAAW;IAkBnB,OAAO,CAAC,wBAAwB;YAkClB,cAAc;IAoC5B;;OAEG;IACH,SAAS;IAsBT;;OAEG;IACH,QAAQ;;;;;;CAQR"}
@@ -0,0 +1,23 @@
1
+ import { BrowserCapabilities, StrategyType } from './types';
2
+ /**
3
+ * Detect browser capabilities for worker and communication support
4
+ */
5
+ export declare function detectCapabilities(): BrowserCapabilities;
6
+ /**
7
+ * Select the best strategy based on browser capabilities
8
+ *
9
+ * Priority:
10
+ * 1. SharedWorker + Worker Pool (desktop Chrome, Firefox, Edge)
11
+ * 2. WebWorker Pool only (Android, Safari, or no SharedWorker)
12
+ * 3. Direct/Main thread (emergency fallback)
13
+ */
14
+ export declare function selectStrategy(capabilities?: BrowserCapabilities): StrategyType;
15
+ /**
16
+ * Log detected capabilities for debugging
17
+ */
18
+ export declare function logCapabilities(capabilities: BrowserCapabilities): void;
19
+ /**
20
+ * Get a human-readable description of the selected strategy
21
+ */
22
+ export declare function getStrategyDescription(strategy: StrategyType): string;
23
+ //# sourceMappingURL=capabilities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../../../../../packages/npm/droid/src/lib/gateway/capabilities.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEjE;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,mBAAmB,CAqBxD;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,YAAY,CAAC,EAAE,mBAAmB,GAAG,YAAY,CAe/E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,YAAY,EAAE,mBAAmB,QAOhE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,CASrE"}
@@ -0,0 +1,9 @@
1
+ export { SupabaseGateway } from './SupabaseGateway';
2
+ export { WorkerPool } from './WorkerPool';
3
+ export { getWorkerCommunication, WorkerCommunication } from './WorkerCommunication';
4
+ export { detectCapabilities, selectStrategy, logCapabilities, getStrategyDescription } from './capabilities';
5
+ export * from './types';
6
+ export { SharedWorkerStrategy } from './strategies/SharedWorkerStrategy';
7
+ export { WebWorkerStrategy } from './strategies/WebWorkerStrategy';
8
+ export { DirectStrategy } from './strategies/DirectStrategy';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/npm/droid/src/lib/gateway/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACpF,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,sBAAsB,EACvB,MAAM,gBAAgB,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC"}
@@ -0,0 +1,52 @@
1
+ import { ISupabaseStrategy, SelectOptions, SessionResponse, WebSocketStatus } from '../types';
2
+ /**
3
+ * DirectStrategy: Everything runs in main thread
4
+ *
5
+ * Architecture:
6
+ * - No workers, all operations on main thread
7
+ * - Uses Supabase client directly
8
+ * - Implements same interface as worker strategies
9
+ *
10
+ * Best for: Browsers without Worker/BroadcastChannel support, or emergency fallback
11
+ *
12
+ * Note: Requires `@supabase/supabase-js` to be available at runtime.
13
+ * This strategy dynamically imports it to avoid bundling Supabase in the main droid build.
14
+ */
15
+ export declare class DirectStrategy implements ISupabaseStrategy {
16
+ private client;
17
+ private ws;
18
+ private wsReconnectTimer;
19
+ private wsReconnectAttempts;
20
+ private wsHeartbeatTimer;
21
+ private wsLastPongTime;
22
+ private subscriptions;
23
+ private listeners;
24
+ private readonly WS_MAX_RECONNECT_ATTEMPTS;
25
+ private readonly WS_RECONNECT_DELAY_MS;
26
+ private readonly WS_HEARTBEAT_INTERVAL_MS;
27
+ private readonly WS_HEARTBEAT_TIMEOUT_MS;
28
+ init(url: string, anonKey: string, options?: Record<string, unknown>): Promise<SessionResponse>;
29
+ on(event: string, callback: (payload: unknown) => void): () => void;
30
+ private emit;
31
+ getSession(): Promise<SessionResponse>;
32
+ signInWithPassword(email: string, password: string): Promise<SessionResponse>;
33
+ signOut(): Promise<void>;
34
+ select(table: string, opts?: SelectOptions): Promise<unknown[]>;
35
+ insert(table: string, data: Record<string, unknown> | Record<string, unknown>[]): Promise<unknown[]>;
36
+ update(table: string, data: Record<string, unknown>, match: Record<string, unknown>): Promise<unknown[]>;
37
+ upsert(table: string, data: Record<string, unknown> | Record<string, unknown>[]): Promise<unknown[]>;
38
+ delete(table: string, match: Record<string, unknown>): Promise<unknown[]>;
39
+ rpc(fn: string, args?: Record<string, unknown>): Promise<unknown>;
40
+ subscribePostgres(key: string, params: Record<string, unknown>, callback: (payload: unknown) => void): () => void;
41
+ connectWebSocket(wsUrl?: string): Promise<WebSocketStatus>;
42
+ disconnectWebSocket(): Promise<void>;
43
+ sendWebSocketMessage(data: unknown): Promise<void>;
44
+ getWebSocketStatus(): Promise<WebSocketStatus>;
45
+ onWebSocketMessage(callback: (message: unknown) => void): () => void;
46
+ onWebSocketStatus(callback: (status: WebSocketStatus) => void): () => void;
47
+ private getDefaultWebSocketUrl;
48
+ private startHeartbeat;
49
+ private stopHeartbeat;
50
+ terminate(): void;
51
+ }
52
+ //# sourceMappingURL=DirectStrategy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DirectStrategy.d.ts","sourceRoot":"","sources":["../../../../../../../packages/npm/droid/src/lib/gateway/strategies/DirectStrategy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import { ISupabaseStrategy, SelectOptions, SessionResponse, WebSocketStatus } from '../types';
2
+ /**
3
+ * SharedWorkerStrategy: Uses SharedWorker for WebSocket + DB Worker Pool
4
+ *
5
+ * Architecture:
6
+ * - SharedWorker handles WebSocket, auth, and realtime (cross-tab sharing)
7
+ * - Worker pool (3 workers) handles database operations (parallel execution)
8
+ * - BroadcastChannel connects SharedWorker to worker pool
9
+ *
10
+ * Best for: Desktop Chrome, Firefox, Edge
11
+ */
12
+ export declare class SharedWorkerStrategy implements ISupabaseStrategy {
13
+ private worker?;
14
+ private port?;
15
+ private workerPool?;
16
+ private pending;
17
+ private listeners;
18
+ private comm;
19
+ private sharedWorkerUrl;
20
+ private dbWorkerUrl;
21
+ private poolSize;
22
+ constructor(sharedWorkerUrl: string | URL, dbWorkerUrl: string | URL, poolSize?: number);
23
+ init(url: string, anonKey: string, options?: Record<string, unknown>): Promise<SessionResponse>;
24
+ private onMessage;
25
+ private send;
26
+ on(event: string, callback: (payload: unknown) => void): () => void;
27
+ private emit;
28
+ getSession(): Promise<SessionResponse>;
29
+ signInWithPassword(email: string, password: string): Promise<SessionResponse>;
30
+ signOut(): Promise<void>;
31
+ select(table: string, opts?: SelectOptions): Promise<unknown[]>;
32
+ insert(table: string, data: Record<string, unknown> | Record<string, unknown>[]): Promise<unknown[]>;
33
+ update(table: string, data: Record<string, unknown>, match: Record<string, unknown>): Promise<unknown[]>;
34
+ upsert(table: string, data: Record<string, unknown> | Record<string, unknown>[]): Promise<unknown[]>;
35
+ delete(table: string, match: Record<string, unknown>): Promise<unknown[]>;
36
+ rpc(fn: string, args?: Record<string, unknown>): Promise<unknown>;
37
+ subscribePostgres(key: string, params: Record<string, unknown>, callback: (payload: unknown) => void): () => void;
38
+ connectWebSocket(wsUrl?: string): Promise<WebSocketStatus>;
39
+ disconnectWebSocket(): Promise<void>;
40
+ sendWebSocketMessage(data: unknown): Promise<void>;
41
+ getWebSocketStatus(): Promise<WebSocketStatus>;
42
+ onWebSocketMessage(callback: (message: unknown) => void): () => void;
43
+ onWebSocketStatus(callback: (status: WebSocketStatus) => void): () => void;
44
+ terminate(): void;
45
+ }
46
+ //# sourceMappingURL=SharedWorkerStrategy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SharedWorkerStrategy.d.ts","sourceRoot":"","sources":["../../../../../../../packages/npm/droid/src/lib/gateway/strategies/SharedWorkerStrategy.ts"],"names":[],"mappings":"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"}