@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.
- package/README.md +79 -42
- package/package.json +23 -4
- package/packages/convex/README.md +1 -1
- package/packages/convex/dist/index.cjs +300 -0
- package/packages/convex/dist/index.cjs.map +1 -0
- package/packages/convex/dist/index.d.cts +231 -0
- package/packages/convex/dist/index.d.ts +231 -0
- package/packages/convex/dist/index.js +263 -0
- package/packages/convex/dist/index.js.map +1 -0
- package/packages/react/README.md +1 -1
- package/packages/react/dist/index.d.mts +106 -0
- package/packages/react/dist/index.d.ts +106 -0
- package/packages/react/dist/index.js +611 -0
- package/packages/react/dist/index.js.map +1 -0
- package/packages/react/dist/index.mjs +570 -0
- package/packages/react/dist/index.mjs.map +1 -0
- package/packages/react-css/README.md +1 -1
- package/packages/react-css/dist/index.cjs +515 -0
- package/packages/react-css/dist/index.cjs.map +1 -0
- package/packages/react-css/dist/index.d.cts +105 -0
- package/packages/react-css/dist/index.d.ts +105 -0
- package/packages/react-css/dist/index.js +467 -0
- package/packages/react-css/dist/index.js.map +1 -0
- package/packages/shared/README.md +1 -1
- package/packages/shared/dist/index.d.mts +625 -0
- package/packages/shared/dist/index.d.ts +625 -0
- package/packages/shared/dist/index.js +1567 -0
- package/packages/shared/dist/index.js.map +1 -0
- package/packages/shared/dist/index.mjs +1489 -0
- package/packages/shared/dist/index.mjs.map +1 -0
- package/packages/solidjs/README.md +1 -1
- package/packages/solidjs/dist/index.d.mts +97 -0
- package/packages/solidjs/dist/index.d.ts +97 -0
- package/packages/solidjs/dist/index.js +250 -0
- package/packages/solidjs/dist/index.js.map +1 -0
- package/packages/solidjs/dist/index.mjs +202 -0
- package/packages/solidjs/dist/index.mjs.map +1 -0
- package/packages/solidjs-css/README.md +1 -1
- package/packages/solidjs-css/dist/index.cjs +343 -0
- package/packages/solidjs-css/dist/index.cjs.map +1 -0
- package/packages/solidjs-css/dist/index.d.cts +67 -0
- package/packages/solidjs-css/dist/index.d.ts +67 -0
- package/packages/solidjs-css/dist/index.js +326 -0
- package/packages/solidjs-css/dist/index.js.map +1 -0
- package/.changeset/config.json +0 -11
- package/.github/CODEOWNERS +0 -1
- package/.github/ISSUE_TEMPLATE/bug_report.md +0 -16
- package/.github/ISSUE_TEMPLATE/feature_request.md +0 -11
- package/.github/PULL_REQUEST_TEMPLATE.md +0 -10
- package/.github/dependabot.yml +0 -11
- package/.github/workflows/ci.yml +0 -23
- package/.github/workflows/release.yml +0 -29
- package/.nvmrc +0 -1
- package/.project/ACCOUNT.yaml +0 -4
- package/.project/IDEAS.yaml +0 -7
- package/.project/PROJECT.yaml +0 -11
- package/.project/ROADMAP.yaml +0 -15
- package/CODE_OF_CONDUCT.md +0 -16
- package/CONTRIBUTING.md +0 -26
- package/SECURITY.md +0 -15
- package/SUPPORT.md +0 -8
- package/packages/convex/package.json +0 -42
- package/packages/convex/src/adapter.ts +0 -39
- package/packages/convex/src/index.ts +0 -19
- package/packages/convex/src/mutations.ts +0 -142
- package/packages/convex/src/queries.ts +0 -106
- package/packages/convex/src/schema.ts +0 -54
- package/packages/convex/src/types.ts +0 -20
- package/packages/convex/tsconfig.json +0 -11
- package/packages/convex/tsup.config.ts +0 -10
- package/packages/react/package.json +0 -45
- package/packages/react/src/components/AdapterCard.tsx +0 -49
- package/packages/react/src/components/AdapterConfigForm.tsx +0 -118
- package/packages/react/src/components/AdapterList.tsx +0 -84
- package/packages/react/src/components/AdapterStatusBadge.tsx +0 -30
- package/packages/react/src/components/index.ts +0 -4
- package/packages/react/src/hooks/index.ts +0 -75
- package/packages/react/src/index.tsx +0 -44
- package/packages/react/src/pages/AdapterDetailPage.tsx +0 -133
- package/packages/react/src/pages/AdaptersPage.tsx +0 -111
- package/packages/react/src/pages/index.ts +0 -2
- package/packages/react/src/provider/AdapterProvider.tsx +0 -115
- package/packages/react/src/provider/index.ts +0 -2
- package/packages/react/tsconfig.json +0 -18
- package/packages/react/tsup.config.ts +0 -10
- package/packages/react-css/package.json +0 -44
- package/packages/react-css/src/adapters.css +0 -1576
- package/packages/react-css/src/components/AdapterCard.tsx +0 -34
- package/packages/react-css/src/components/AdapterConfigForm.tsx +0 -63
- package/packages/react-css/src/components/AdapterList.tsx +0 -40
- package/packages/react-css/src/components/AdapterStatusBadge.tsx +0 -21
- package/packages/react-css/src/components/index.ts +0 -4
- package/packages/react-css/src/hooks/index.ts +0 -75
- package/packages/react-css/src/index.tsx +0 -25
- package/packages/react-css/src/pages/AdapterDetailPage.tsx +0 -133
- package/packages/react-css/src/pages/AdaptersPage.tsx +0 -111
- package/packages/react-css/src/pages/index.ts +0 -2
- package/packages/react-css/src/provider/AdapterProvider.tsx +0 -115
- package/packages/react-css/src/provider/index.ts +0 -2
- package/packages/react-css/src/styles.css +0 -494
- package/packages/react-css/tsconfig.json +0 -19
- package/packages/react-css/tsup.config.ts +0 -2
- package/packages/shared/package.json +0 -39
- package/packages/shared/src/__tests__/adapters.test.ts +0 -545
- package/packages/shared/src/admin/index.ts +0 -2
- package/packages/shared/src/admin/interface.ts +0 -34
- package/packages/shared/src/admin/localStorage.ts +0 -109
- package/packages/shared/src/ai/anthropic.ts +0 -123
- package/packages/shared/src/ai/cloudflare-gateway.ts +0 -130
- package/packages/shared/src/ai/gemini.ts +0 -181
- package/packages/shared/src/ai/index.ts +0 -14
- package/packages/shared/src/ai/interface.ts +0 -11
- package/packages/shared/src/ai/localStorage.ts +0 -78
- package/packages/shared/src/ai/ollama.ts +0 -143
- package/packages/shared/src/ai/openai.ts +0 -120
- package/packages/shared/src/ai/vercel-ai.ts +0 -101
- package/packages/shared/src/auth/better-auth.ts +0 -118
- package/packages/shared/src/auth/clerk.ts +0 -151
- package/packages/shared/src/auth/convex-auth.ts +0 -125
- package/packages/shared/src/auth/index.ts +0 -10
- package/packages/shared/src/auth/interface.ts +0 -17
- package/packages/shared/src/auth/localStorage.ts +0 -125
- package/packages/shared/src/auth/supabase-auth.ts +0 -136
- package/packages/shared/src/config.ts +0 -57
- package/packages/shared/src/constants.ts +0 -122
- package/packages/shared/src/db/convex.ts +0 -146
- package/packages/shared/src/db/index.ts +0 -10
- package/packages/shared/src/db/interface.ts +0 -13
- package/packages/shared/src/db/localStorage.ts +0 -91
- package/packages/shared/src/db/mongodb.ts +0 -125
- package/packages/shared/src/db/neon.ts +0 -171
- package/packages/shared/src/db/supabase.ts +0 -158
- package/packages/shared/src/index.ts +0 -117
- package/packages/shared/src/payments/index.ts +0 -4
- package/packages/shared/src/payments/interface.ts +0 -11
- package/packages/shared/src/payments/localStorage.ts +0 -81
- package/packages/shared/src/payments/stripe.ts +0 -177
- package/packages/shared/src/storage/convex.ts +0 -113
- package/packages/shared/src/storage/index.ts +0 -14
- package/packages/shared/src/storage/interface.ts +0 -11
- package/packages/shared/src/storage/localStorage.ts +0 -95
- package/packages/shared/src/storage/minio.ts +0 -47
- package/packages/shared/src/storage/r2.ts +0 -123
- package/packages/shared/src/storage/s3.ts +0 -128
- package/packages/shared/src/storage/supabase-storage.ts +0 -116
- package/packages/shared/src/storage/uploadthing.ts +0 -126
- package/packages/shared/src/styles/adapters.css +0 -494
- package/packages/shared/src/tier-gate.ts +0 -119
- package/packages/shared/src/types.ts +0 -162
- package/packages/shared/tsconfig.json +0 -18
- package/packages/shared/tsup.config.ts +0 -9
- package/packages/shared/vitest.config.ts +0 -14
- package/packages/solidjs/package.json +0 -44
- package/packages/solidjs/src/components/AdapterCard.tsx +0 -24
- package/packages/solidjs/src/components/AdapterConfigForm.tsx +0 -54
- package/packages/solidjs/src/components/AdapterList.tsx +0 -28
- package/packages/solidjs/src/components/AdapterStatusBadge.tsx +0 -20
- package/packages/solidjs/src/components/index.ts +0 -4
- package/packages/solidjs/src/index.tsx +0 -17
- package/packages/solidjs/src/pages/AdapterDetailPage.tsx +0 -38
- package/packages/solidjs/src/pages/AdaptersPage.tsx +0 -39
- package/packages/solidjs/src/pages/index.ts +0 -2
- package/packages/solidjs/src/primitives/index.ts +0 -78
- package/packages/solidjs/src/provider/AdapterProvider.tsx +0 -62
- package/packages/solidjs/src/provider/index.ts +0 -2
- package/packages/solidjs/tsconfig.json +0 -20
- package/packages/solidjs/tsup.config.ts +0 -10
- package/packages/solidjs-css/package.json +0 -43
- package/packages/solidjs-css/src/adapters.css +0 -1576
- package/packages/solidjs-css/src/components/AdapterCard.tsx +0 -43
- package/packages/solidjs-css/src/components/AdapterConfigForm.tsx +0 -119
- package/packages/solidjs-css/src/components/AdapterList.tsx +0 -68
- package/packages/solidjs-css/src/components/AdapterStatusBadge.tsx +0 -24
- package/packages/solidjs-css/src/components/index.ts +0 -8
- package/packages/solidjs-css/src/index.tsx +0 -30
- package/packages/solidjs-css/src/pages/AdapterDetailPage.tsx +0 -107
- package/packages/solidjs-css/src/pages/AdaptersPage.tsx +0 -94
- package/packages/solidjs-css/src/pages/index.ts +0 -4
- package/packages/solidjs-css/src/primitives/index.ts +0 -1
- package/packages/solidjs-css/src/provider/AdapterProvider.tsx +0 -61
- package/packages/solidjs-css/src/provider/index.ts +0 -2
- package/packages/solidjs-css/tsconfig.json +0 -20
- package/packages/solidjs-css/tsup.config.ts +0 -2
- package/pnpm-workspace.yaml +0 -2
- 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 —
|
|
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
|
|
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
|
-
###
|
|
13
|
+
### Architecture: Thin Contracts + Domain Packages
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
|
18
|
-
|
|
19
|
-
| **
|
|
20
|
-
| **
|
|
21
|
-
| **
|
|
22
|
-
| **
|
|
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,
|
|
36
|
-
import { AdapterProvider, useDb, useAuth, useAi }
|
|
37
|
-
import { AdapterProvider, createDb, createAuth }
|
|
38
|
-
import { adapterTables }
|
|
39
|
-
import { AdaptersPage, AdapterCard }
|
|
40
|
-
import { AdaptersPage, AdapterCard }
|
|
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 {
|
|
68
|
-
|
|
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:
|
|
75
|
-
auth:
|
|
76
|
-
|
|
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
|
-
|
|
106
|
-
|
|
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
|
|
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
|
-
//
|
|
194
|
+
// DbAdapter — generic, 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 —
|
|
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
|
|
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
|
|
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.
|
|
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
|
}
|
|
@@ -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"]}
|