@geenius/adapters 0.1.0 → 0.3.0

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 (185) hide show
  1. package/README.md +79 -42
  2. package/package.json +23 -4
  3. package/packages/convex/README.md +1 -1
  4. package/packages/convex/dist/index.cjs +300 -0
  5. package/packages/convex/dist/index.cjs.map +1 -0
  6. package/packages/convex/dist/index.d.cts +231 -0
  7. package/packages/convex/dist/index.d.ts +231 -0
  8. package/packages/convex/dist/index.js +263 -0
  9. package/packages/convex/dist/index.js.map +1 -0
  10. package/packages/react/README.md +1 -1
  11. package/packages/react/dist/index.d.mts +106 -0
  12. package/packages/react/dist/index.d.ts +106 -0
  13. package/packages/react/dist/index.js +611 -0
  14. package/packages/react/dist/index.js.map +1 -0
  15. package/packages/react/dist/index.mjs +570 -0
  16. package/packages/react/dist/index.mjs.map +1 -0
  17. package/packages/react-css/README.md +1 -1
  18. package/packages/react-css/dist/index.cjs +515 -0
  19. package/packages/react-css/dist/index.cjs.map +1 -0
  20. package/packages/react-css/dist/index.d.cts +105 -0
  21. package/packages/react-css/dist/index.d.ts +105 -0
  22. package/packages/react-css/dist/index.js +467 -0
  23. package/packages/react-css/dist/index.js.map +1 -0
  24. package/packages/shared/README.md +1 -1
  25. package/packages/shared/dist/index.d.mts +625 -0
  26. package/packages/shared/dist/index.d.ts +625 -0
  27. package/packages/shared/dist/index.js +1567 -0
  28. package/packages/shared/dist/index.js.map +1 -0
  29. package/packages/shared/dist/index.mjs +1489 -0
  30. package/packages/shared/dist/index.mjs.map +1 -0
  31. package/packages/solidjs/README.md +1 -1
  32. package/packages/solidjs/dist/index.d.mts +97 -0
  33. package/packages/solidjs/dist/index.d.ts +97 -0
  34. package/packages/solidjs/dist/index.js +250 -0
  35. package/packages/solidjs/dist/index.js.map +1 -0
  36. package/packages/solidjs/dist/index.mjs +202 -0
  37. package/packages/solidjs/dist/index.mjs.map +1 -0
  38. package/packages/solidjs-css/README.md +1 -1
  39. package/packages/solidjs-css/dist/index.cjs +343 -0
  40. package/packages/solidjs-css/dist/index.cjs.map +1 -0
  41. package/packages/solidjs-css/dist/index.d.cts +67 -0
  42. package/packages/solidjs-css/dist/index.d.ts +67 -0
  43. package/packages/solidjs-css/dist/index.js +326 -0
  44. package/packages/solidjs-css/dist/index.js.map +1 -0
  45. package/.changeset/config.json +0 -11
  46. package/.github/CODEOWNERS +0 -1
  47. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -16
  48. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -11
  49. package/.github/PULL_REQUEST_TEMPLATE.md +0 -10
  50. package/.github/dependabot.yml +0 -11
  51. package/.github/workflows/ci.yml +0 -23
  52. package/.github/workflows/release.yml +0 -29
  53. package/.nvmrc +0 -1
  54. package/.project/ACCOUNT.yaml +0 -4
  55. package/.project/IDEAS.yaml +0 -7
  56. package/.project/PROJECT.yaml +0 -11
  57. package/.project/ROADMAP.yaml +0 -15
  58. package/CODE_OF_CONDUCT.md +0 -16
  59. package/CONTRIBUTING.md +0 -26
  60. package/SECURITY.md +0 -15
  61. package/SUPPORT.md +0 -8
  62. package/packages/convex/package.json +0 -42
  63. package/packages/convex/src/adapter.ts +0 -39
  64. package/packages/convex/src/index.ts +0 -19
  65. package/packages/convex/src/mutations.ts +0 -142
  66. package/packages/convex/src/queries.ts +0 -106
  67. package/packages/convex/src/schema.ts +0 -54
  68. package/packages/convex/src/types.ts +0 -20
  69. package/packages/convex/tsconfig.json +0 -11
  70. package/packages/convex/tsup.config.ts +0 -10
  71. package/packages/react/package.json +0 -45
  72. package/packages/react/src/components/AdapterCard.tsx +0 -49
  73. package/packages/react/src/components/AdapterConfigForm.tsx +0 -118
  74. package/packages/react/src/components/AdapterList.tsx +0 -84
  75. package/packages/react/src/components/AdapterStatusBadge.tsx +0 -30
  76. package/packages/react/src/components/index.ts +0 -4
  77. package/packages/react/src/hooks/index.ts +0 -75
  78. package/packages/react/src/index.tsx +0 -44
  79. package/packages/react/src/pages/AdapterDetailPage.tsx +0 -133
  80. package/packages/react/src/pages/AdaptersPage.tsx +0 -111
  81. package/packages/react/src/pages/index.ts +0 -2
  82. package/packages/react/src/provider/AdapterProvider.tsx +0 -115
  83. package/packages/react/src/provider/index.ts +0 -2
  84. package/packages/react/tsconfig.json +0 -18
  85. package/packages/react/tsup.config.ts +0 -10
  86. package/packages/react-css/package.json +0 -44
  87. package/packages/react-css/src/adapters.css +0 -1576
  88. package/packages/react-css/src/components/AdapterCard.tsx +0 -34
  89. package/packages/react-css/src/components/AdapterConfigForm.tsx +0 -63
  90. package/packages/react-css/src/components/AdapterList.tsx +0 -40
  91. package/packages/react-css/src/components/AdapterStatusBadge.tsx +0 -21
  92. package/packages/react-css/src/components/index.ts +0 -4
  93. package/packages/react-css/src/hooks/index.ts +0 -75
  94. package/packages/react-css/src/index.tsx +0 -25
  95. package/packages/react-css/src/pages/AdapterDetailPage.tsx +0 -133
  96. package/packages/react-css/src/pages/AdaptersPage.tsx +0 -111
  97. package/packages/react-css/src/pages/index.ts +0 -2
  98. package/packages/react-css/src/provider/AdapterProvider.tsx +0 -115
  99. package/packages/react-css/src/provider/index.ts +0 -2
  100. package/packages/react-css/src/styles.css +0 -494
  101. package/packages/react-css/tsconfig.json +0 -19
  102. package/packages/react-css/tsup.config.ts +0 -2
  103. package/packages/shared/package.json +0 -39
  104. package/packages/shared/src/__tests__/adapters.test.ts +0 -545
  105. package/packages/shared/src/admin/index.ts +0 -2
  106. package/packages/shared/src/admin/interface.ts +0 -34
  107. package/packages/shared/src/admin/localStorage.ts +0 -109
  108. package/packages/shared/src/ai/anthropic.ts +0 -123
  109. package/packages/shared/src/ai/cloudflare-gateway.ts +0 -130
  110. package/packages/shared/src/ai/gemini.ts +0 -181
  111. package/packages/shared/src/ai/index.ts +0 -14
  112. package/packages/shared/src/ai/interface.ts +0 -11
  113. package/packages/shared/src/ai/localStorage.ts +0 -78
  114. package/packages/shared/src/ai/ollama.ts +0 -143
  115. package/packages/shared/src/ai/openai.ts +0 -120
  116. package/packages/shared/src/ai/vercel-ai.ts +0 -101
  117. package/packages/shared/src/auth/better-auth.ts +0 -118
  118. package/packages/shared/src/auth/clerk.ts +0 -151
  119. package/packages/shared/src/auth/convex-auth.ts +0 -125
  120. package/packages/shared/src/auth/index.ts +0 -10
  121. package/packages/shared/src/auth/interface.ts +0 -17
  122. package/packages/shared/src/auth/localStorage.ts +0 -125
  123. package/packages/shared/src/auth/supabase-auth.ts +0 -136
  124. package/packages/shared/src/config.ts +0 -57
  125. package/packages/shared/src/constants.ts +0 -122
  126. package/packages/shared/src/db/convex.ts +0 -146
  127. package/packages/shared/src/db/index.ts +0 -10
  128. package/packages/shared/src/db/interface.ts +0 -13
  129. package/packages/shared/src/db/localStorage.ts +0 -91
  130. package/packages/shared/src/db/mongodb.ts +0 -125
  131. package/packages/shared/src/db/neon.ts +0 -171
  132. package/packages/shared/src/db/supabase.ts +0 -158
  133. package/packages/shared/src/index.ts +0 -117
  134. package/packages/shared/src/payments/index.ts +0 -4
  135. package/packages/shared/src/payments/interface.ts +0 -11
  136. package/packages/shared/src/payments/localStorage.ts +0 -81
  137. package/packages/shared/src/payments/stripe.ts +0 -177
  138. package/packages/shared/src/storage/convex.ts +0 -113
  139. package/packages/shared/src/storage/index.ts +0 -14
  140. package/packages/shared/src/storage/interface.ts +0 -11
  141. package/packages/shared/src/storage/localStorage.ts +0 -95
  142. package/packages/shared/src/storage/minio.ts +0 -47
  143. package/packages/shared/src/storage/r2.ts +0 -123
  144. package/packages/shared/src/storage/s3.ts +0 -128
  145. package/packages/shared/src/storage/supabase-storage.ts +0 -116
  146. package/packages/shared/src/storage/uploadthing.ts +0 -126
  147. package/packages/shared/src/styles/adapters.css +0 -494
  148. package/packages/shared/src/tier-gate.ts +0 -119
  149. package/packages/shared/src/types.ts +0 -162
  150. package/packages/shared/tsconfig.json +0 -18
  151. package/packages/shared/tsup.config.ts +0 -9
  152. package/packages/shared/vitest.config.ts +0 -14
  153. package/packages/solidjs/package.json +0 -44
  154. package/packages/solidjs/src/components/AdapterCard.tsx +0 -24
  155. package/packages/solidjs/src/components/AdapterConfigForm.tsx +0 -54
  156. package/packages/solidjs/src/components/AdapterList.tsx +0 -28
  157. package/packages/solidjs/src/components/AdapterStatusBadge.tsx +0 -20
  158. package/packages/solidjs/src/components/index.ts +0 -4
  159. package/packages/solidjs/src/index.tsx +0 -17
  160. package/packages/solidjs/src/pages/AdapterDetailPage.tsx +0 -38
  161. package/packages/solidjs/src/pages/AdaptersPage.tsx +0 -39
  162. package/packages/solidjs/src/pages/index.ts +0 -2
  163. package/packages/solidjs/src/primitives/index.ts +0 -78
  164. package/packages/solidjs/src/provider/AdapterProvider.tsx +0 -62
  165. package/packages/solidjs/src/provider/index.ts +0 -2
  166. package/packages/solidjs/tsconfig.json +0 -20
  167. package/packages/solidjs/tsup.config.ts +0 -10
  168. package/packages/solidjs-css/package.json +0 -43
  169. package/packages/solidjs-css/src/adapters.css +0 -1576
  170. package/packages/solidjs-css/src/components/AdapterCard.tsx +0 -43
  171. package/packages/solidjs-css/src/components/AdapterConfigForm.tsx +0 -119
  172. package/packages/solidjs-css/src/components/AdapterList.tsx +0 -68
  173. package/packages/solidjs-css/src/components/AdapterStatusBadge.tsx +0 -24
  174. package/packages/solidjs-css/src/components/index.ts +0 -8
  175. package/packages/solidjs-css/src/index.tsx +0 -30
  176. package/packages/solidjs-css/src/pages/AdapterDetailPage.tsx +0 -107
  177. package/packages/solidjs-css/src/pages/AdaptersPage.tsx +0 -94
  178. package/packages/solidjs-css/src/pages/index.ts +0 -4
  179. package/packages/solidjs-css/src/primitives/index.ts +0 -1
  180. package/packages/solidjs-css/src/provider/AdapterProvider.tsx +0 -61
  181. package/packages/solidjs-css/src/provider/index.ts +0 -2
  182. package/packages/solidjs-css/tsconfig.json +0 -20
  183. package/packages/solidjs-css/tsup.config.ts +0 -2
  184. package/pnpm-workspace.yaml +0 -2
  185. package/tsconfig.json +0 -17
package/README.md CHANGED
@@ -1,25 +1,29 @@
1
1
  # `@geenius/adapters`
2
2
 
3
- > The architectural lynchpin of the Geenius ecosystem — a unified adapter layer that makes backend services interchangeable with a one-file swap.
3
+ > The architectural lynchpin of the Geenius ecosystem — standardized adapter **contracts** that make backend services interchangeable with a one-file swap.
4
4
 
5
5
  ---
6
6
 
7
7
  ## Overview
8
8
 
9
- `@geenius/adapters` defines **standard interfaces** for six infrastructure domains and provides concrete implementations for each. Any frontend component talks exclusively to an adapter interface — never to a database or service directly.
9
+ `@geenius/adapters` defines **standard interfaces** for six infrastructure domains and provides **localStorage mock implementations** for zero-config prototyping. Any frontend component talks exclusively to an adapter interface — never to a database or service directly.
10
10
 
11
11
  This is what makes "swap Convex for Supabase" a single-file change instead of a months-long rewrite.
12
12
 
13
- ### Adapter Domains
13
+ ### Architecture: Thin Contracts + Domain Packages
14
14
 
15
- | Domain | Interface | Providers |
16
- |--------|-----------|-----------|
17
- | **DB** | `DbAdapter` | `localStorage`, Convex, Supabase, Neon, MongoDB |
18
- | **Auth** | `AuthAdapter` | `localStorage`, Better Auth, Convex Auth, Clerk, Supabase Auth |
19
- | **Payments** | `PaymentsAdapter` | `localStorage`, Stripe, noop |
20
- | **AI** | `AiAdapter` | `localStorage`, OpenAI, Anthropic, Gemini, Ollama, CF AI Gateway, Vercel AI SDK |
21
- | **File Storage** | `FileStorageAdapter` | `localStorage`, R2, S3, Uploadthing, Supabase Storage, Convex Storage, Minio |
22
- | **Admin** | `AdminAdapter` | `localStorage` |
15
+ `@geenius/adapters` is the **contract layer** it only defines *what* each service must do (the interfaces) and provides localStorage mocks for fast prototyping. Real provider implementations live in the dedicated domain packages:
16
+
17
+ | Domain | Interface | Mock (here) | Real Providers (domain package) |
18
+ |--------|-----------|-------------|-------------------------------|
19
+ | **DB** | `DbAdapter` | `localStorage`, memory, CloudflareKV | Convex, Supabase, Neon, MongoDB *(still in adapters)* |
20
+ | **Auth** | `AuthAdapter` | `localStorage` | `@geenius/auth` Better Auth, Convex Auth, Clerk, Supabase Auth |
21
+ | **Payments** | `PaymentsAdapter` | `localStorage`, noop | `@geenius/payments` Stripe, LemonSqueezy, Polar |
22
+ | **AI** | `AiAdapter` | `localStorage` | `@geenius/ai` → OpenAI, Anthropic, Gemini, Ollama, CF AI Gateway, Vercel AI SDK |
23
+ | **File Storage** | `FileStorageAdapter` | `localStorage` | R2, S3, Uploadthing, Supabase Storage, Convex Storage, Minio *(still in adapters)* |
24
+ | **Admin** | `AdminAdapter` | `localStorage` | *(localStorage only for now)* |
25
+
26
+ > **Note:** DB and Storage provider implementations remain in this package until dedicated `@geenius/db` and `@geenius/storage` packages are created.
23
27
 
24
28
  ---
25
29
 
@@ -32,12 +36,12 @@ pnpm add @geenius/adapters
32
36
  ## Sub-package Exports
33
37
 
34
38
  ```typescript
35
- import { configureAdapters, createConvexDbAdapter } from '@geenius/adapters' // shared (default)
36
- import { AdapterProvider, useDb, useAuth, useAi } from '@geenius/adapters/react' // React hooks
37
- import { AdapterProvider, createDb, createAuth } from '@geenius/adapters/solidjs' // SolidJS primitives
38
- import { adapterTables } from '@geenius/adapters/convex' // Convex schema
39
- import { AdaptersPage, AdapterCard } from '@geenius/adapters/react-css' // Styled React components
40
- import { AdaptersPage, AdapterCard } from '@geenius/adapters/solidjs-css' // Styled SolidJS components
39
+ import { configureAdapters, createLocalStorageDbAdapter } from '@geenius/adapters' // shared (default)
40
+ import { AdapterProvider, useDb, useAuth, useAi } from '@geenius/adapters/react' // React hooks
41
+ import { AdapterProvider, createDb, createAuth } from '@geenius/adapters/solidjs' // SolidJS primitives
42
+ import { adapterTables } from '@geenius/adapters/convex' // Convex schema
43
+ import { AdaptersPage, AdapterCard } from '@geenius/adapters/react-css' // Styled React components
44
+ import { AdaptersPage, AdapterCard } from '@geenius/adapters/solidjs-css' // Styled SolidJS components
41
45
  ```
42
46
 
43
47
  ---
@@ -48,7 +52,6 @@ import { AdaptersPage, AdapterCard } from '@geenius/adapte
48
52
 
49
53
  ```typescript
50
54
  import { configureAdapters } from '@geenius/adapters'
51
- import { createConvexDbAdapter } from '@geenius/adapters'
52
55
 
53
56
  // Call once before rendering
54
57
  configureAdapters({
@@ -64,16 +67,39 @@ configureAdapters({
64
67
 
65
68
  ```tsx
66
69
  import { AdapterProvider } from '@geenius/adapters/react'
67
- import { createBetterAuthAdapter } from '@geenius/adapters'
68
- import { createConvexDbAdapter } from '@geenius/adapters'
70
+ import { createLocalStorageDbAdapter, createLocalStorageAuthAdapter } from '@geenius/adapters'
71
+
72
+ // Pronto tier — zero external deps
73
+ export function App() {
74
+ return (
75
+ <AdapterProvider
76
+ adapters={{
77
+ db: createLocalStorageDbAdapter(),
78
+ auth: createLocalStorageAuthAdapter(),
79
+ }}
80
+ healthCheck
81
+ >
82
+ <Router />
83
+ </AdapterProvider>
84
+ )
85
+ }
86
+ ```
87
+
88
+ For production (Lancio/Studio), use real providers from the domain packages:
89
+
90
+ ```tsx
91
+ import { AdapterProvider } from '@geenius/adapters/react'
92
+ import { createConvexDbAdapter } from '@geenius/adapters' // DB still in adapters
93
+ import { createAuthProvider } from '@geenius/auth' // Real auth provider
94
+ import { createPaymentProvider } from '@geenius/payments' // Real payment provider
69
95
 
70
96
  export function App() {
71
97
  return (
72
98
  <AdapterProvider
73
99
  adapters={{
74
- db: createConvexDbAdapter({ client: convex, functions: myFns }),
75
- auth: createBetterAuthAdapter({ client: authClient }),
76
- ai: createOpenAiAdapter({ apiKey: process.env.OPENAI_API_KEY }),
100
+ db: createConvexDbAdapter({ client: convex, functions: myFns }),
101
+ auth: createAuthProvider({ provider: 'better-auth', baseUrl: '/api/auth' }),
102
+ payments: createPaymentProvider({ provider: 'stripe', apiKey: '...' }),
77
103
  }}
78
104
  healthCheck
79
105
  >
@@ -91,21 +117,9 @@ import { useAuth, useDb, useAi } from '@geenius/adapters/react'
91
117
  export function Dashboard() {
92
118
  const auth = useAuth()
93
119
  const db = useDb()
94
- const ai = useAi()
95
-
96
- async function handleSignIn() {
97
- await auth.signIn('user@example.com', 'password')
98
- }
99
-
100
- async function handleOAuth() {
101
- const { url } = await auth.signInWithOAuth('google', { redirectUrl: '/dashboard' })
102
- window.location.href = url
103
- }
104
120
 
105
- async function handleChat() {
106
- const response = await ai.chat([{ role: 'user', content: 'Hello!' }])
107
- console.log(response.content)
108
- }
121
+ const users = await db.list('users')
122
+ const session = await auth.getSession()
109
123
  }
110
124
  ```
111
125
 
@@ -127,7 +141,19 @@ import {
127
141
  } from '@geenius/adapters'
128
142
  ```
129
143
 
130
- These adapters persist data in the browser's localStorage with no external dependencies. Upgrade to real adapters by replacing a single file.
144
+ These adapters persist data in the browser's localStorage with no external dependencies. Upgrade to real adapters by swapping one factory call.
145
+
146
+ ---
147
+
148
+ ## Where are the real providers?
149
+
150
+ | Domain | Package | Example |
151
+ |--------|---------|---------|
152
+ | **AI** | `@geenius/ai` | `AIClient`, memory, skills, tool calling, content templates |
153
+ | **Auth** | `@geenius/auth` | `AuthProviderAdapter` with MFA, passkeys, API keys, RBAC, session management |
154
+ | **Payments** | `@geenius/payments` | `PaymentProviderAdapter` with webhooks, invoices, customer portal, plan sync |
155
+
156
+ These domain packages implement the contracts defined here and extend them with rich, production-grade features.
131
157
 
132
158
  ---
133
159
 
@@ -165,7 +191,18 @@ getProviderMeta('payments', 'stripe')
165
191
  All interfaces are **async (Promise-based)**, generic, and framework-agnostic. Swapping a provider only requires replacing the adapter factory call — no changes to consumers.
166
192
 
167
193
  ```typescript
168
- // AuthAdapterall providers
194
+ // DbAdaptergeneric, collection-based
195
+ interface DbAdapter {
196
+ create<T>(collection: string, data: Omit<T, 'id'>): Promise<T & { id: string }>
197
+ get<T>(collection: string, id: string): Promise<T | null>
198
+ update<T>(collection: string, id: string, data: Partial<T>): Promise<T | null>
199
+ delete(collection: string, id: string): Promise<boolean>
200
+ list<T>(collection: string, options?: ListOptions): Promise<T[]>
201
+ query<T>(collection: string, filter: QueryFilter): Promise<T[]>
202
+ count(collection: string, filter?: QueryFilter): Promise<number>
203
+ }
204
+
205
+ // AuthAdapter — minimal contract (see @geenius/auth for MFA, passkeys, etc.)
169
206
  interface AuthAdapter {
170
207
  signIn(email: string, password: string): Promise<AuthSession>
171
208
  signUp(email: string, password: string, name?: string): Promise<AuthSession>
@@ -176,12 +213,12 @@ interface AuthAdapter {
176
213
  updateUser(updates: Partial<Pick<AuthUser, 'name' | 'image'>>): Promise<AuthUser | null>
177
214
  }
178
215
 
179
- // AiAdapter — all providers (stream is optional, falls back to chat)
216
+ // AiAdapter — minimal contract (see @geenius/ai for memory, skills, tools)
180
217
  interface AiAdapter {
181
218
  chat(messages: ChatMessage[], options?: AiOptions): Promise<ChatResponse>
182
219
  complete(prompt: string, options?: AiOptions): Promise<string>
183
220
  embed(text: string | string[]): Promise<number[][]>
184
- stream?(messages: ChatMessage[], options?: AiOptions): AsyncIterable<string>
221
+ stream(messages: ChatMessage[], options?: AiOptions): AsyncIterable<string>
185
222
  }
186
223
  ```
187
224
 
@@ -192,7 +229,7 @@ interface AiAdapter {
192
229
  | Tier | Description |
193
230
  |------|-------------|
194
231
  | **Pronto** | Prototype-ready. localStorage only. Zero external deps. |
195
- | **Lancio** | Production-ready. Real backends: Convex, Stripe, Better Auth, R2. |
232
+ | **Lancio** | Production-ready. Real backends via domain packages. |
196
233
  | **Studio** | Full ecosystem. All Lancio providers + AI Magic, Analytics, Teams, and more. |
197
234
 
198
235
  ---
package/package.json CHANGED
@@ -1,12 +1,25 @@
1
1
  {
2
2
  "name": "@geenius/adapters",
3
- "version": "0.1.0",
3
+ "version": "0.3.0",
4
4
  "type": "module",
5
+ "files": [
6
+ "packages/shared/dist",
7
+ "packages/react/dist",
8
+ "packages/solidjs/dist",
9
+ "packages/convex/dist",
10
+ "packages/react-css/dist",
11
+ "packages/solidjs-css/dist",
12
+ "README.md",
13
+ "LICENSE",
14
+ "CHANGELOG.md"
15
+ ],
5
16
  "scripts": {
6
- "build": "pnpm -r build",
17
+ "build": "pnpm -r --no-bail build",
7
18
  "lint": "pnpm -r lint",
8
19
  "test": "pnpm -r test",
9
- "clean": "pnpm -r clean"
20
+ "clean": "pnpm -r clean",
21
+ "prepublishOnly": "pnpm build",
22
+ "publish:root": "npm publish --access public"
10
23
  },
11
24
  "devDependencies": {
12
25
  "typescript": "~6.0.2"
@@ -47,5 +60,11 @@
47
60
  }
48
61
  },
49
62
  "main": "./packages/shared/dist/index.js",
50
- "types": "./packages/shared/dist/index.d.ts"
63
+ "types": "./packages/shared/dist/index.d.ts",
64
+ "dependencies": {
65
+ "@aws-sdk/client-s3": "^3.1024.0",
66
+ "@aws-sdk/s3-request-presigner": "^3.1024.0",
67
+ "@supabase/supabase-js": "^2.101.1",
68
+ "ai": "^6.0.146"
69
+ }
51
70
  }
@@ -1,4 +1,4 @@
1
- # `@geenius-adapters/convex`
1
+ # `@geenius/adapters-convex`
2
2
 
3
3
  > Convex backend integration for `@geenius/adapters` — registry, health logs, and adapter lifecycle management.
4
4
 
@@ -0,0 +1,300 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/index.ts
21
+ var index_exports = {};
22
+ __export(index_exports, {
23
+ getActiveAdapter: () => getActiveAdapter,
24
+ getAdapter: () => getAdapter,
25
+ getAdapterHealthLogs: () => getAdapterHealthLogs,
26
+ getAdapterStatusSummary: () => getAdapterStatusSummary,
27
+ listAdapters: () => listAdapters,
28
+ listAdaptersByDomain: () => listAdaptersByDomain,
29
+ registerAdapter: () => registerAdapter,
30
+ removeAdapter: () => removeAdapter,
31
+ schema: () => schema_default,
32
+ updateAdapter: () => updateAdapter,
33
+ updateAdapterStatus: () => updateAdapterStatus
34
+ });
35
+ module.exports = __toCommonJS(index_exports);
36
+
37
+ // src/schema.ts
38
+ var import_server = require("convex/server");
39
+ var import_values = require("convex/values");
40
+ var schema_default = (0, import_server.defineSchema)({
41
+ // ─── Adapter Registry ──────────────────────────────────────
42
+ adapter_registry: (0, import_server.defineTable)({
43
+ domain: import_values.v.union(
44
+ import_values.v.literal("db"),
45
+ import_values.v.literal("auth"),
46
+ import_values.v.literal("payments"),
47
+ import_values.v.literal("ai"),
48
+ import_values.v.literal("storage"),
49
+ import_values.v.literal("admin")
50
+ ),
51
+ provider: import_values.v.string(),
52
+ status: import_values.v.union(
53
+ import_values.v.literal("connected"),
54
+ import_values.v.literal("disconnected"),
55
+ import_values.v.literal("error"),
56
+ import_values.v.literal("initializing")
57
+ ),
58
+ config: import_values.v.object({
59
+ provider: import_values.v.string(),
60
+ apiKey: import_values.v.optional(import_values.v.string()),
61
+ baseUrl: import_values.v.optional(import_values.v.string()),
62
+ options: import_values.v.optional(import_values.v.any())
63
+ }),
64
+ connectedAt: import_values.v.optional(import_values.v.number()),
65
+ lastHealthCheck: import_values.v.optional(import_values.v.number()),
66
+ errorMessage: import_values.v.optional(import_values.v.string()),
67
+ // Metadata
68
+ createdBy: import_values.v.optional(import_values.v.string()),
69
+ createdAt: import_values.v.number(),
70
+ updatedAt: import_values.v.number()
71
+ }).index("by_domain", ["domain"]).index("by_status", ["status"]).index("by_domain_provider", ["domain", "provider"]),
72
+ // ─── Adapter Health Logs ───────────────────────────────────
73
+ adapter_health_logs: (0, import_server.defineTable)({
74
+ adapterId: import_values.v.id("adapter_registry"),
75
+ domain: import_values.v.union(
76
+ import_values.v.literal("db"),
77
+ import_values.v.literal("auth"),
78
+ import_values.v.literal("payments"),
79
+ import_values.v.literal("ai"),
80
+ import_values.v.literal("storage"),
81
+ import_values.v.literal("admin")
82
+ ),
83
+ status: import_values.v.union(
84
+ import_values.v.literal("connected"),
85
+ import_values.v.literal("disconnected"),
86
+ import_values.v.literal("error"),
87
+ import_values.v.literal("initializing")
88
+ ),
89
+ latency: import_values.v.optional(import_values.v.number()),
90
+ errorMessage: import_values.v.optional(import_values.v.string()),
91
+ timestamp: import_values.v.number()
92
+ }).index("by_adapter", ["adapterId"]).index("by_domain", ["domain"]).index("by_timestamp", ["timestamp"])
93
+ });
94
+
95
+ // src/mutations.ts
96
+ var import_server2 = require("./_generated/server");
97
+ var import_values2 = require("convex/values");
98
+ var domainValidator = import_values2.v.union(
99
+ import_values2.v.literal("db"),
100
+ import_values2.v.literal("auth"),
101
+ import_values2.v.literal("payments"),
102
+ import_values2.v.literal("ai"),
103
+ import_values2.v.literal("storage"),
104
+ import_values2.v.literal("admin")
105
+ );
106
+ var statusValidator = import_values2.v.union(
107
+ import_values2.v.literal("connected"),
108
+ import_values2.v.literal("disconnected"),
109
+ import_values2.v.literal("error"),
110
+ import_values2.v.literal("initializing")
111
+ );
112
+ var registerAdapter = (0, import_server2.mutation)({
113
+ args: {
114
+ domain: domainValidator,
115
+ provider: import_values2.v.string(),
116
+ config: import_values2.v.object({
117
+ provider: import_values2.v.string(),
118
+ apiKey: import_values2.v.optional(import_values2.v.string()),
119
+ baseUrl: import_values2.v.optional(import_values2.v.string()),
120
+ options: import_values2.v.optional(import_values2.v.any())
121
+ }),
122
+ createdBy: import_values2.v.optional(import_values2.v.string())
123
+ },
124
+ handler: async (ctx, args) => {
125
+ const existing = await ctx.db.query("adapter_registry").withIndex("by_domain_provider", (q) => q.eq("domain", args.domain).eq("provider", args.provider)).first();
126
+ const now = Date.now();
127
+ if (existing) {
128
+ await ctx.db.patch(existing._id, {
129
+ config: args.config,
130
+ status: "initializing",
131
+ updatedAt: now
132
+ });
133
+ return existing._id;
134
+ }
135
+ return await ctx.db.insert("adapter_registry", {
136
+ domain: args.domain,
137
+ provider: args.provider,
138
+ status: "initializing",
139
+ config: args.config,
140
+ connectedAt: void 0,
141
+ lastHealthCheck: void 0,
142
+ errorMessage: void 0,
143
+ createdBy: args.createdBy,
144
+ createdAt: now,
145
+ updatedAt: now
146
+ });
147
+ }
148
+ });
149
+ var updateAdapterStatus = (0, import_server2.mutation)({
150
+ args: {
151
+ adapterId: import_values2.v.id("adapter_registry"),
152
+ status: statusValidator,
153
+ latency: import_values2.v.optional(import_values2.v.number()),
154
+ errorMessage: import_values2.v.optional(import_values2.v.string())
155
+ },
156
+ handler: async (ctx, args) => {
157
+ const now = Date.now();
158
+ const update = {
159
+ status: args.status,
160
+ lastHealthCheck: now,
161
+ updatedAt: now
162
+ };
163
+ if (args.status === "connected") {
164
+ update.connectedAt = now;
165
+ update.errorMessage = void 0;
166
+ }
167
+ if (args.status === "error" && args.errorMessage) {
168
+ update.errorMessage = args.errorMessage;
169
+ }
170
+ await ctx.db.patch(args.adapterId, update);
171
+ await ctx.db.insert("adapter_health_logs", {
172
+ adapterId: args.adapterId,
173
+ domain: (await ctx.db.get(args.adapterId)).domain,
174
+ status: args.status,
175
+ latency: args.latency,
176
+ errorMessage: args.errorMessage,
177
+ timestamp: now
178
+ });
179
+ }
180
+ });
181
+ var updateAdapter = (0, import_server2.mutation)({
182
+ args: {
183
+ adapterId: import_values2.v.id("adapter_registry"),
184
+ config: import_values2.v.object({
185
+ provider: import_values2.v.string(),
186
+ apiKey: import_values2.v.optional(import_values2.v.string()),
187
+ baseUrl: import_values2.v.optional(import_values2.v.string()),
188
+ options: import_values2.v.optional(import_values2.v.any())
189
+ })
190
+ },
191
+ handler: async (ctx, args) => {
192
+ await ctx.db.patch(args.adapterId, {
193
+ config: args.config,
194
+ status: "initializing",
195
+ updatedAt: Date.now()
196
+ });
197
+ }
198
+ });
199
+ var removeAdapter = (0, import_server2.mutation)({
200
+ args: { adapterId: import_values2.v.id("adapter_registry") },
201
+ handler: async (ctx, args) => {
202
+ const logs = await ctx.db.query("adapter_health_logs").withIndex("by_adapter", (q) => q.eq("adapterId", args.adapterId)).collect();
203
+ for (const log of logs) {
204
+ await ctx.db.delete(log._id);
205
+ }
206
+ await ctx.db.delete(args.adapterId);
207
+ }
208
+ });
209
+
210
+ // src/queries.ts
211
+ var import_server3 = require("./_generated/server");
212
+ var import_values3 = require("convex/values");
213
+ var listAdapters = (0, import_server3.query)({
214
+ args: {},
215
+ handler: async (ctx) => {
216
+ return await ctx.db.query("adapter_registry").collect();
217
+ }
218
+ });
219
+ var listAdaptersByDomain = (0, import_server3.query)({
220
+ args: {
221
+ domain: import_values3.v.union(
222
+ import_values3.v.literal("db"),
223
+ import_values3.v.literal("auth"),
224
+ import_values3.v.literal("payments"),
225
+ import_values3.v.literal("ai"),
226
+ import_values3.v.literal("storage"),
227
+ import_values3.v.literal("admin")
228
+ )
229
+ },
230
+ handler: async (ctx, args) => {
231
+ return await ctx.db.query("adapter_registry").withIndex("by_domain", (q) => q.eq("domain", args.domain)).collect();
232
+ }
233
+ });
234
+ var getAdapter = (0, import_server3.query)({
235
+ args: { adapterId: import_values3.v.id("adapter_registry") },
236
+ handler: async (ctx, args) => {
237
+ return await ctx.db.get(args.adapterId);
238
+ }
239
+ });
240
+ var getActiveAdapter = (0, import_server3.query)({
241
+ args: {
242
+ domain: import_values3.v.union(
243
+ import_values3.v.literal("db"),
244
+ import_values3.v.literal("auth"),
245
+ import_values3.v.literal("payments"),
246
+ import_values3.v.literal("ai"),
247
+ import_values3.v.literal("storage"),
248
+ import_values3.v.literal("admin")
249
+ )
250
+ },
251
+ handler: async (ctx, args) => {
252
+ const adapters = await ctx.db.query("adapter_registry").withIndex("by_domain", (q) => q.eq("domain", args.domain)).collect();
253
+ return adapters.find((a) => a.status === "connected") ?? adapters[0] ?? null;
254
+ }
255
+ });
256
+ var getAdapterStatusSummary = (0, import_server3.query)({
257
+ args: {},
258
+ handler: async (ctx) => {
259
+ const all = await ctx.db.query("adapter_registry").collect();
260
+ const domains = ["db", "auth", "payments", "ai", "storage", "admin"];
261
+ return domains.map((domain) => {
262
+ const domainAdapters = all.filter((a) => a.domain === domain);
263
+ const connected = domainAdapters.find((a) => a.status === "connected");
264
+ return {
265
+ domain,
266
+ provider: connected?.provider ?? domainAdapters[0]?.provider ?? null,
267
+ status: connected?.status ?? domainAdapters[0]?.status ?? "disconnected",
268
+ count: domainAdapters.length
269
+ };
270
+ });
271
+ }
272
+ });
273
+ var getAdapterHealthLogs = (0, import_server3.query)({
274
+ args: {
275
+ adapterId: import_values3.v.id("adapter_registry"),
276
+ limit: import_values3.v.optional(import_values3.v.number())
277
+ },
278
+ handler: async (ctx, args) => {
279
+ const q = ctx.db.query("adapter_health_logs").withIndex("by_adapter", (q2) => q2.eq("adapterId", args.adapterId)).order("desc");
280
+ if (args.limit) {
281
+ return await q.take(args.limit);
282
+ }
283
+ return await q.take(50);
284
+ }
285
+ });
286
+ // Annotate the CommonJS export names for ESM import in node:
287
+ 0 && (module.exports = {
288
+ getActiveAdapter,
289
+ getAdapter,
290
+ getAdapterHealthLogs,
291
+ getAdapterStatusSummary,
292
+ listAdapters,
293
+ listAdaptersByDomain,
294
+ registerAdapter,
295
+ removeAdapter,
296
+ schema,
297
+ updateAdapter,
298
+ updateAdapterStatus
299
+ });
300
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/schema.ts","../src/mutations.ts","../src/queries.ts"],"sourcesContent":["// @geenius/adapters-convex — Barrel\n\nexport { default as schema } from './schema'\n\nexport {\n registerAdapter,\n updateAdapterStatus,\n updateAdapter,\n removeAdapter,\n} from './mutations'\n\nexport {\n listAdapters,\n listAdaptersByDomain,\n getAdapter,\n getActiveAdapter,\n getAdapterStatusSummary,\n getAdapterHealthLogs,\n} from './queries'\n","// @geenius/adapters-convex — Schema\n\nimport { defineSchema, defineTable } from 'convex/server'\nimport { v } from 'convex/values'\n\nexport default defineSchema({\n // ─── Adapter Registry ──────────────────────────────────────\n adapter_registry: defineTable({\n domain: v.union(\n v.literal('db'), v.literal('auth'), v.literal('payments'),\n v.literal('ai'), v.literal('storage'), v.literal('admin'),\n ),\n provider: v.string(),\n status: v.union(\n v.literal('connected'), v.literal('disconnected'),\n v.literal('error'), v.literal('initializing'),\n ),\n config: v.object({\n provider: v.string(),\n apiKey: v.optional(v.string()),\n baseUrl: v.optional(v.string()),\n options: v.optional(v.any()),\n }),\n connectedAt: v.optional(v.number()),\n lastHealthCheck: v.optional(v.number()),\n errorMessage: v.optional(v.string()),\n // Metadata\n createdBy: v.optional(v.string()),\n createdAt: v.number(),\n updatedAt: v.number(),\n })\n .index('by_domain', ['domain'])\n .index('by_status', ['status'])\n .index('by_domain_provider', ['domain', 'provider']),\n\n // ─── Adapter Health Logs ───────────────────────────────────\n adapter_health_logs: defineTable({\n adapterId: v.id('adapter_registry'),\n domain: v.union(\n v.literal('db'), v.literal('auth'), v.literal('payments'),\n v.literal('ai'), v.literal('storage'), v.literal('admin'),\n ),\n status: v.union(\n v.literal('connected'), v.literal('disconnected'),\n v.literal('error'), v.literal('initializing'),\n ),\n latency: v.optional(v.number()),\n errorMessage: v.optional(v.string()),\n timestamp: v.number(),\n })\n .index('by_adapter', ['adapterId'])\n .index('by_domain', ['domain'])\n .index('by_timestamp', ['timestamp']),\n})\n","// @geenius/adapters-convex — Mutations\n\nimport { mutation } from './_generated/server'\nimport { v } from 'convex/values'\n\nconst domainValidator = v.union(\n v.literal('db'), v.literal('auth'), v.literal('payments'),\n v.literal('ai'), v.literal('storage'), v.literal('admin'),\n)\n\nconst statusValidator = v.union(\n v.literal('connected'), v.literal('disconnected'),\n v.literal('error'), v.literal('initializing'),\n)\n\n/**\n * Register or update an adapter for a given domain.\n */\nexport const registerAdapter = mutation({\n args: {\n domain: domainValidator,\n provider: v.string(),\n config: v.object({\n provider: v.string(),\n apiKey: v.optional(v.string()),\n baseUrl: v.optional(v.string()),\n options: v.optional(v.any()),\n }),\n createdBy: v.optional(v.string()),\n },\n handler: async (ctx, args) => {\n // Check if adapter already exists for this domain\n const existing = await ctx.db\n .query('adapter_registry')\n .withIndex('by_domain_provider', (q) => q.eq('domain', args.domain).eq('provider', args.provider))\n .first()\n\n const now = Date.now()\n\n if (existing) {\n await ctx.db.patch(existing._id, {\n config: args.config,\n status: 'initializing',\n updatedAt: now,\n })\n return existing._id\n }\n\n return await ctx.db.insert('adapter_registry', {\n domain: args.domain,\n provider: args.provider,\n status: 'initializing',\n config: args.config,\n connectedAt: undefined,\n lastHealthCheck: undefined,\n errorMessage: undefined,\n createdBy: args.createdBy,\n createdAt: now,\n updatedAt: now,\n })\n },\n})\n\n/**\n * Update an adapter's status.\n */\nexport const updateAdapterStatus = mutation({\n args: {\n adapterId: v.id('adapter_registry'),\n status: statusValidator,\n latency: v.optional(v.number()),\n errorMessage: v.optional(v.string()),\n },\n handler: async (ctx, args) => {\n const now = Date.now()\n const update: Record<string, unknown> = {\n status: args.status,\n lastHealthCheck: now,\n updatedAt: now,\n }\n\n if (args.status === 'connected') {\n update.connectedAt = now\n update.errorMessage = undefined\n }\n if (args.status === 'error' && args.errorMessage) {\n update.errorMessage = args.errorMessage\n }\n\n await ctx.db.patch(args.adapterId, update)\n\n // Log health check\n await ctx.db.insert('adapter_health_logs', {\n adapterId: args.adapterId,\n domain: (await ctx.db.get(args.adapterId))!.domain,\n status: args.status,\n latency: args.latency,\n errorMessage: args.errorMessage,\n timestamp: now,\n })\n },\n})\n\n/**\n * Update adapter configuration.\n */\nexport const updateAdapter = mutation({\n args: {\n adapterId: v.id('adapter_registry'),\n config: v.object({\n provider: v.string(),\n apiKey: v.optional(v.string()),\n baseUrl: v.optional(v.string()),\n options: v.optional(v.any()),\n }),\n },\n handler: async (ctx, args) => {\n await ctx.db.patch(args.adapterId, {\n config: args.config,\n status: 'initializing',\n updatedAt: Date.now(),\n })\n },\n})\n\n/**\n * Remove an adapter from the registry.\n */\nexport const removeAdapter = mutation({\n args: { adapterId: v.id('adapter_registry') },\n handler: async (ctx, args) => {\n // Remove health logs\n const logs = await ctx.db\n .query('adapter_health_logs')\n .withIndex('by_adapter', (q) => q.eq('adapterId', args.adapterId))\n .collect()\n for (const log of logs) {\n await ctx.db.delete(log._id)\n }\n await ctx.db.delete(args.adapterId)\n },\n})\n","// @geenius/adapters-convex — Queries\n\nimport { query } from './_generated/server'\nimport { v } from 'convex/values'\n\n/**\n * List all registered adapters.\n */\nexport const listAdapters = query({\n args: {},\n handler: async (ctx) => {\n return await ctx.db.query('adapter_registry').collect()\n },\n})\n\n/**\n * List adapters by domain.\n */\nexport const listAdaptersByDomain = query({\n args: {\n domain: v.union(\n v.literal('db'), v.literal('auth'), v.literal('payments'),\n v.literal('ai'), v.literal('storage'), v.literal('admin'),\n ),\n },\n handler: async (ctx, args) => {\n return await ctx.db\n .query('adapter_registry')\n .withIndex('by_domain', (q) => q.eq('domain', args.domain))\n .collect()\n },\n})\n\n/**\n * Get a single adapter by ID.\n */\nexport const getAdapter = query({\n args: { adapterId: v.id('adapter_registry') },\n handler: async (ctx, args) => {\n return await ctx.db.get(args.adapterId)\n },\n})\n\n/**\n * Get the active adapter for a specific domain.\n * Returns the first connected adapter, or the first adapter if none connected.\n */\nexport const getActiveAdapter = query({\n args: {\n domain: v.union(\n v.literal('db'), v.literal('auth'), v.literal('payments'),\n v.literal('ai'), v.literal('storage'), v.literal('admin'),\n ),\n },\n handler: async (ctx, args) => {\n const adapters = await ctx.db\n .query('adapter_registry')\n .withIndex('by_domain', (q) => q.eq('domain', args.domain))\n .collect()\n\n return adapters.find((a) => a.status === 'connected') ?? adapters[0] ?? null\n },\n})\n\n/**\n * Get adapter status summary — one entry per domain.\n */\nexport const getAdapterStatusSummary = query({\n args: {},\n handler: async (ctx) => {\n const all = await ctx.db.query('adapter_registry').collect()\n const domains = ['db', 'auth', 'payments', 'ai', 'storage', 'admin'] as const\n\n return domains.map((domain) => {\n const domainAdapters = all.filter((a) => a.domain === domain)\n const connected = domainAdapters.find((a) => a.status === 'connected')\n return {\n domain,\n provider: connected?.provider ?? domainAdapters[0]?.provider ?? null,\n status: connected?.status ?? domainAdapters[0]?.status ?? 'disconnected',\n count: domainAdapters.length,\n }\n })\n },\n})\n\n/**\n * Get health logs for a specific adapter.\n */\nexport const getAdapterHealthLogs = query({\n args: {\n adapterId: v.id('adapter_registry'),\n limit: v.optional(v.number()),\n },\n handler: async (ctx, args) => {\n const q = ctx.db\n .query('adapter_health_logs')\n .withIndex('by_adapter', (q) => q.eq('adapterId', args.adapterId))\n .order('desc')\n\n if (args.limit) {\n return await q.take(args.limit)\n }\n return await q.take(50)\n },\n})\n"],"mappings":"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","names":["import_server","import_values","import_server","import_values","q"]}