@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/.project/ROADMAP.yaml
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
version: "0.1"
|
|
2
|
-
milestones:
|
|
3
|
-
- name: "v0.1.0 — Initial Release"
|
|
4
|
-
status: in-progress
|
|
5
|
-
items:
|
|
6
|
-
- "Core shared types and logic"
|
|
7
|
-
- "React hooks and components"
|
|
8
|
-
- "SolidJS primitives"
|
|
9
|
-
- "npm publishing via Changesets"
|
|
10
|
-
- name: "v0.2.0 — Stability"
|
|
11
|
-
status: planned
|
|
12
|
-
items:
|
|
13
|
-
- "Test coverage ≥ 50%"
|
|
14
|
-
- "API documentation"
|
|
15
|
-
- "Convex adapter"
|
package/CODE_OF_CONDUCT.md
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
# Contributor Covenant Code of Conduct
|
|
2
|
-
|
|
3
|
-
## Our Pledge
|
|
4
|
-
|
|
5
|
-
We as members, contributors, and leaders pledge to make participation in our
|
|
6
|
-
community a harassment-free experience for everyone, regardless of age, body
|
|
7
|
-
size, disability, ethnicity, gender identity and expression, level of experience,
|
|
8
|
-
education, socio-economic status, nationality, personal appearance, race,
|
|
9
|
-
religion, or sexual identity and orientation.
|
|
10
|
-
|
|
11
|
-
## Enforcement
|
|
12
|
-
|
|
13
|
-
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
|
14
|
-
reported to the project team at conduct@geenius.app.
|
|
15
|
-
|
|
16
|
-
This Code of Conduct is adapted from the [Contributor Covenant](https://www.contributor-covenant.org), version 2.1.
|
package/CONTRIBUTING.md
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
# Contributing to @geenius-adapters
|
|
2
|
-
|
|
3
|
-
Thank you for your interest in contributing!
|
|
4
|
-
|
|
5
|
-
## Development Setup
|
|
6
|
-
|
|
7
|
-
```bash
|
|
8
|
-
git clone https://github.com/mxn2020/geenius-adapters.git
|
|
9
|
-
cd geenius-adapters
|
|
10
|
-
pnpm install
|
|
11
|
-
pnpm build
|
|
12
|
-
pnpm test
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
## Pull Request Process
|
|
16
|
-
|
|
17
|
-
1. Fork the repo and create a feature branch from `main`
|
|
18
|
-
2. Add or update tests as appropriate
|
|
19
|
-
3. Run `pnpm changeset` to describe your changes for the changelog
|
|
20
|
-
4. Open a PR against `main`
|
|
21
|
-
|
|
22
|
-
## Code Style
|
|
23
|
-
|
|
24
|
-
- TypeScript strict mode
|
|
25
|
-
- ESLint + Prettier formatting
|
|
26
|
-
- Conventional commits preferred
|
package/SECURITY.md
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
# Security Policy
|
|
2
|
-
|
|
3
|
-
## Supported Versions
|
|
4
|
-
|
|
5
|
-
| Version | Supported |
|
|
6
|
-
| ------- | --------- |
|
|
7
|
-
| 0.x.x | ✅ |
|
|
8
|
-
|
|
9
|
-
## Reporting a Vulnerability
|
|
10
|
-
|
|
11
|
-
Please report security vulnerabilities by emailing **security@geenius.app**.
|
|
12
|
-
|
|
13
|
-
Do **not** open a public GitHub issue for security vulnerabilities.
|
|
14
|
-
|
|
15
|
-
We will acknowledge receipt within 48 hours and provide a detailed response within 5 business days.
|
package/SUPPORT.md
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
# Support
|
|
2
|
-
|
|
3
|
-
## Getting Help
|
|
4
|
-
|
|
5
|
-
- 📖 [Documentation](https://docs.geenius.app)
|
|
6
|
-
- 🐛 [Bug Reports](https://github.com/mxn2020/geenius-adapters/issues/new?template=bug_report.md)
|
|
7
|
-
- 💡 [Feature Requests](https://github.com/mxn2020/geenius-adapters/issues/new?template=feature_request.md)
|
|
8
|
-
- 📧 Email: support@geenius.app
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@geenius-adapters/convex",
|
|
3
|
-
"version": "0.1.0",
|
|
4
|
-
"private": false,
|
|
5
|
-
"type": "module",
|
|
6
|
-
"description": "Convex adapter factory and configuration for database integration",
|
|
7
|
-
"author": "Antigravity HQ",
|
|
8
|
-
"license": "MIT",
|
|
9
|
-
"publishConfig": {
|
|
10
|
-
"access": "public"
|
|
11
|
-
},
|
|
12
|
-
"main": "./dist/index.js",
|
|
13
|
-
"module": "./dist/index.js",
|
|
14
|
-
"types": "./dist/index.d.ts",
|
|
15
|
-
"exports": {
|
|
16
|
-
".": {
|
|
17
|
-
"types": "./dist/index.d.ts",
|
|
18
|
-
"import": "./dist/index.js"
|
|
19
|
-
}
|
|
20
|
-
},
|
|
21
|
-
"files": [
|
|
22
|
-
"dist",
|
|
23
|
-
"src"
|
|
24
|
-
],
|
|
25
|
-
"scripts": {
|
|
26
|
-
"build": "tsup",
|
|
27
|
-
"clean": "rm -rf dist",
|
|
28
|
-
"type-check": "tsc --noEmit",
|
|
29
|
-
"prepublishOnly": "pnpm clean && pnpm build"
|
|
30
|
-
},
|
|
31
|
-
"peerDependencies": {
|
|
32
|
-
"convex": "^1.34.0"
|
|
33
|
-
},
|
|
34
|
-
"devDependencies": {
|
|
35
|
-
"convex": "^1.34.0",
|
|
36
|
-
"tsup": "^8.5.1",
|
|
37
|
-
"typescript": "~6.0.2"
|
|
38
|
-
},
|
|
39
|
-
"engines": {
|
|
40
|
-
"node": ">=20.0.0"
|
|
41
|
-
}
|
|
42
|
-
}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import type { ConvexAdapterConfig, ConvexDbAdapter } from './types'
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Factory function to create a Convex database adapter
|
|
5
|
-
*/
|
|
6
|
-
export function createConvexAdapter(
|
|
7
|
-
config: ConvexAdapterConfig,
|
|
8
|
-
): ConvexDbAdapter {
|
|
9
|
-
let isConnected = false
|
|
10
|
-
|
|
11
|
-
return {
|
|
12
|
-
query: async (queryFn: string, args?: Record<string, unknown>) => {
|
|
13
|
-
if (!isConnected) {
|
|
14
|
-
throw new Error('Convex adapter not initialized')
|
|
15
|
-
}
|
|
16
|
-
// Placeholder: would execute query through Convex client
|
|
17
|
-
return null
|
|
18
|
-
},
|
|
19
|
-
|
|
20
|
-
mutation: async (
|
|
21
|
-
mutationFn: string,
|
|
22
|
-
args?: Record<string, unknown>,
|
|
23
|
-
) => {
|
|
24
|
-
if (!isConnected) {
|
|
25
|
-
throw new Error('Convex adapter not initialized')
|
|
26
|
-
}
|
|
27
|
-
// Placeholder: would execute mutation through Convex client
|
|
28
|
-
return null
|
|
29
|
-
},
|
|
30
|
-
|
|
31
|
-
isReady: () => {
|
|
32
|
-
return isConnected
|
|
33
|
-
},
|
|
34
|
-
|
|
35
|
-
disconnect: async () => {
|
|
36
|
-
isConnected = false
|
|
37
|
-
},
|
|
38
|
-
}
|
|
39
|
-
}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
// @geenius-adapters/convex — Barrel
|
|
2
|
-
|
|
3
|
-
export { default as schema } from './schema'
|
|
4
|
-
|
|
5
|
-
export {
|
|
6
|
-
registerAdapter,
|
|
7
|
-
updateAdapterStatus,
|
|
8
|
-
updateAdapter,
|
|
9
|
-
removeAdapter,
|
|
10
|
-
} from './mutations'
|
|
11
|
-
|
|
12
|
-
export {
|
|
13
|
-
listAdapters,
|
|
14
|
-
listAdaptersByDomain,
|
|
15
|
-
getAdapter,
|
|
16
|
-
getActiveAdapter,
|
|
17
|
-
getAdapterStatusSummary,
|
|
18
|
-
getAdapterHealthLogs,
|
|
19
|
-
} from './queries'
|
|
@@ -1,142 +0,0 @@
|
|
|
1
|
-
// @geenius-adapters/convex — Mutations
|
|
2
|
-
|
|
3
|
-
import { mutation } from './_generated/server'
|
|
4
|
-
import { v } from 'convex/values'
|
|
5
|
-
|
|
6
|
-
const domainValidator = v.union(
|
|
7
|
-
v.literal('db'), v.literal('auth'), v.literal('payments'),
|
|
8
|
-
v.literal('ai'), v.literal('storage'), v.literal('admin'),
|
|
9
|
-
)
|
|
10
|
-
|
|
11
|
-
const statusValidator = v.union(
|
|
12
|
-
v.literal('connected'), v.literal('disconnected'),
|
|
13
|
-
v.literal('error'), v.literal('initializing'),
|
|
14
|
-
)
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* Register or update an adapter for a given domain.
|
|
18
|
-
*/
|
|
19
|
-
export const registerAdapter = mutation({
|
|
20
|
-
args: {
|
|
21
|
-
domain: domainValidator,
|
|
22
|
-
provider: v.string(),
|
|
23
|
-
config: v.object({
|
|
24
|
-
provider: v.string(),
|
|
25
|
-
apiKey: v.optional(v.string()),
|
|
26
|
-
baseUrl: v.optional(v.string()),
|
|
27
|
-
options: v.optional(v.any()),
|
|
28
|
-
}),
|
|
29
|
-
createdBy: v.optional(v.string()),
|
|
30
|
-
},
|
|
31
|
-
handler: async (ctx, args) => {
|
|
32
|
-
// Check if adapter already exists for this domain
|
|
33
|
-
const existing = await ctx.db
|
|
34
|
-
.query('adapter_registry')
|
|
35
|
-
.withIndex('by_domain_provider', (q) => q.eq('domain', args.domain).eq('provider', args.provider))
|
|
36
|
-
.first()
|
|
37
|
-
|
|
38
|
-
const now = Date.now()
|
|
39
|
-
|
|
40
|
-
if (existing) {
|
|
41
|
-
await ctx.db.patch(existing._id, {
|
|
42
|
-
config: args.config,
|
|
43
|
-
status: 'initializing',
|
|
44
|
-
updatedAt: now,
|
|
45
|
-
})
|
|
46
|
-
return existing._id
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
return await ctx.db.insert('adapter_registry', {
|
|
50
|
-
domain: args.domain,
|
|
51
|
-
provider: args.provider,
|
|
52
|
-
status: 'initializing',
|
|
53
|
-
config: args.config,
|
|
54
|
-
connectedAt: undefined,
|
|
55
|
-
lastHealthCheck: undefined,
|
|
56
|
-
errorMessage: undefined,
|
|
57
|
-
createdBy: args.createdBy,
|
|
58
|
-
createdAt: now,
|
|
59
|
-
updatedAt: now,
|
|
60
|
-
})
|
|
61
|
-
},
|
|
62
|
-
})
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
* Update an adapter's status.
|
|
66
|
-
*/
|
|
67
|
-
export const updateAdapterStatus = mutation({
|
|
68
|
-
args: {
|
|
69
|
-
adapterId: v.id('adapter_registry'),
|
|
70
|
-
status: statusValidator,
|
|
71
|
-
latency: v.optional(v.number()),
|
|
72
|
-
errorMessage: v.optional(v.string()),
|
|
73
|
-
},
|
|
74
|
-
handler: async (ctx, args) => {
|
|
75
|
-
const now = Date.now()
|
|
76
|
-
const update: Record<string, unknown> = {
|
|
77
|
-
status: args.status,
|
|
78
|
-
lastHealthCheck: now,
|
|
79
|
-
updatedAt: now,
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
if (args.status === 'connected') {
|
|
83
|
-
update.connectedAt = now
|
|
84
|
-
update.errorMessage = undefined
|
|
85
|
-
}
|
|
86
|
-
if (args.status === 'error' && args.errorMessage) {
|
|
87
|
-
update.errorMessage = args.errorMessage
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
await ctx.db.patch(args.adapterId, update)
|
|
91
|
-
|
|
92
|
-
// Log health check
|
|
93
|
-
await ctx.db.insert('adapter_health_logs', {
|
|
94
|
-
adapterId: args.adapterId,
|
|
95
|
-
domain: (await ctx.db.get(args.adapterId))!.domain,
|
|
96
|
-
status: args.status,
|
|
97
|
-
latency: args.latency,
|
|
98
|
-
errorMessage: args.errorMessage,
|
|
99
|
-
timestamp: now,
|
|
100
|
-
})
|
|
101
|
-
},
|
|
102
|
-
})
|
|
103
|
-
|
|
104
|
-
/**
|
|
105
|
-
* Update adapter configuration.
|
|
106
|
-
*/
|
|
107
|
-
export const updateAdapter = mutation({
|
|
108
|
-
args: {
|
|
109
|
-
adapterId: v.id('adapter_registry'),
|
|
110
|
-
config: v.object({
|
|
111
|
-
provider: v.string(),
|
|
112
|
-
apiKey: v.optional(v.string()),
|
|
113
|
-
baseUrl: v.optional(v.string()),
|
|
114
|
-
options: v.optional(v.any()),
|
|
115
|
-
}),
|
|
116
|
-
},
|
|
117
|
-
handler: async (ctx, args) => {
|
|
118
|
-
await ctx.db.patch(args.adapterId, {
|
|
119
|
-
config: args.config,
|
|
120
|
-
status: 'initializing',
|
|
121
|
-
updatedAt: Date.now(),
|
|
122
|
-
})
|
|
123
|
-
},
|
|
124
|
-
})
|
|
125
|
-
|
|
126
|
-
/**
|
|
127
|
-
* Remove an adapter from the registry.
|
|
128
|
-
*/
|
|
129
|
-
export const removeAdapter = mutation({
|
|
130
|
-
args: { adapterId: v.id('adapter_registry') },
|
|
131
|
-
handler: async (ctx, args) => {
|
|
132
|
-
// Remove health logs
|
|
133
|
-
const logs = await ctx.db
|
|
134
|
-
.query('adapter_health_logs')
|
|
135
|
-
.withIndex('by_adapter', (q) => q.eq('adapterId', args.adapterId))
|
|
136
|
-
.collect()
|
|
137
|
-
for (const log of logs) {
|
|
138
|
-
await ctx.db.delete(log._id)
|
|
139
|
-
}
|
|
140
|
-
await ctx.db.delete(args.adapterId)
|
|
141
|
-
},
|
|
142
|
-
})
|
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
// @geenius-adapters/convex — Queries
|
|
2
|
-
|
|
3
|
-
import { query } from './_generated/server'
|
|
4
|
-
import { v } from 'convex/values'
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* List all registered adapters.
|
|
8
|
-
*/
|
|
9
|
-
export const listAdapters = query({
|
|
10
|
-
args: {},
|
|
11
|
-
handler: async (ctx) => {
|
|
12
|
-
return await ctx.db.query('adapter_registry').collect()
|
|
13
|
-
},
|
|
14
|
-
})
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* List adapters by domain.
|
|
18
|
-
*/
|
|
19
|
-
export const listAdaptersByDomain = query({
|
|
20
|
-
args: {
|
|
21
|
-
domain: v.union(
|
|
22
|
-
v.literal('db'), v.literal('auth'), v.literal('payments'),
|
|
23
|
-
v.literal('ai'), v.literal('storage'), v.literal('admin'),
|
|
24
|
-
),
|
|
25
|
-
},
|
|
26
|
-
handler: async (ctx, args) => {
|
|
27
|
-
return await ctx.db
|
|
28
|
-
.query('adapter_registry')
|
|
29
|
-
.withIndex('by_domain', (q) => q.eq('domain', args.domain))
|
|
30
|
-
.collect()
|
|
31
|
-
},
|
|
32
|
-
})
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* Get a single adapter by ID.
|
|
36
|
-
*/
|
|
37
|
-
export const getAdapter = query({
|
|
38
|
-
args: { adapterId: v.id('adapter_registry') },
|
|
39
|
-
handler: async (ctx, args) => {
|
|
40
|
-
return await ctx.db.get(args.adapterId)
|
|
41
|
-
},
|
|
42
|
-
})
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* Get the active adapter for a specific domain.
|
|
46
|
-
* Returns the first connected adapter, or the first adapter if none connected.
|
|
47
|
-
*/
|
|
48
|
-
export const getActiveAdapter = query({
|
|
49
|
-
args: {
|
|
50
|
-
domain: v.union(
|
|
51
|
-
v.literal('db'), v.literal('auth'), v.literal('payments'),
|
|
52
|
-
v.literal('ai'), v.literal('storage'), v.literal('admin'),
|
|
53
|
-
),
|
|
54
|
-
},
|
|
55
|
-
handler: async (ctx, args) => {
|
|
56
|
-
const adapters = await ctx.db
|
|
57
|
-
.query('adapter_registry')
|
|
58
|
-
.withIndex('by_domain', (q) => q.eq('domain', args.domain))
|
|
59
|
-
.collect()
|
|
60
|
-
|
|
61
|
-
return adapters.find((a) => a.status === 'connected') ?? adapters[0] ?? null
|
|
62
|
-
},
|
|
63
|
-
})
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* Get adapter status summary — one entry per domain.
|
|
67
|
-
*/
|
|
68
|
-
export const getAdapterStatusSummary = query({
|
|
69
|
-
args: {},
|
|
70
|
-
handler: async (ctx) => {
|
|
71
|
-
const all = await ctx.db.query('adapter_registry').collect()
|
|
72
|
-
const domains = ['db', 'auth', 'payments', 'ai', 'storage', 'admin'] as const
|
|
73
|
-
|
|
74
|
-
return domains.map((domain) => {
|
|
75
|
-
const domainAdapters = all.filter((a) => a.domain === domain)
|
|
76
|
-
const connected = domainAdapters.find((a) => a.status === 'connected')
|
|
77
|
-
return {
|
|
78
|
-
domain,
|
|
79
|
-
provider: connected?.provider ?? domainAdapters[0]?.provider ?? null,
|
|
80
|
-
status: connected?.status ?? domainAdapters[0]?.status ?? 'disconnected',
|
|
81
|
-
count: domainAdapters.length,
|
|
82
|
-
}
|
|
83
|
-
})
|
|
84
|
-
},
|
|
85
|
-
})
|
|
86
|
-
|
|
87
|
-
/**
|
|
88
|
-
* Get health logs for a specific adapter.
|
|
89
|
-
*/
|
|
90
|
-
export const getAdapterHealthLogs = query({
|
|
91
|
-
args: {
|
|
92
|
-
adapterId: v.id('adapter_registry'),
|
|
93
|
-
limit: v.optional(v.number()),
|
|
94
|
-
},
|
|
95
|
-
handler: async (ctx, args) => {
|
|
96
|
-
const q = ctx.db
|
|
97
|
-
.query('adapter_health_logs')
|
|
98
|
-
.withIndex('by_adapter', (q) => q.eq('adapterId', args.adapterId))
|
|
99
|
-
.order('desc')
|
|
100
|
-
|
|
101
|
-
if (args.limit) {
|
|
102
|
-
return await q.take(args.limit)
|
|
103
|
-
}
|
|
104
|
-
return await q.take(50)
|
|
105
|
-
},
|
|
106
|
-
})
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
// @geenius-adapters/convex — Schema
|
|
2
|
-
|
|
3
|
-
import { defineSchema, defineTable } from 'convex/server'
|
|
4
|
-
import { v } from 'convex/values'
|
|
5
|
-
|
|
6
|
-
export default defineSchema({
|
|
7
|
-
// ─── Adapter Registry ──────────────────────────────────────
|
|
8
|
-
adapter_registry: defineTable({
|
|
9
|
-
domain: v.union(
|
|
10
|
-
v.literal('db'), v.literal('auth'), v.literal('payments'),
|
|
11
|
-
v.literal('ai'), v.literal('storage'), v.literal('admin'),
|
|
12
|
-
),
|
|
13
|
-
provider: v.string(),
|
|
14
|
-
status: v.union(
|
|
15
|
-
v.literal('connected'), v.literal('disconnected'),
|
|
16
|
-
v.literal('error'), v.literal('initializing'),
|
|
17
|
-
),
|
|
18
|
-
config: v.object({
|
|
19
|
-
provider: v.string(),
|
|
20
|
-
apiKey: v.optional(v.string()),
|
|
21
|
-
baseUrl: v.optional(v.string()),
|
|
22
|
-
options: v.optional(v.any()),
|
|
23
|
-
}),
|
|
24
|
-
connectedAt: v.optional(v.number()),
|
|
25
|
-
lastHealthCheck: v.optional(v.number()),
|
|
26
|
-
errorMessage: v.optional(v.string()),
|
|
27
|
-
// Metadata
|
|
28
|
-
createdBy: v.optional(v.string()),
|
|
29
|
-
createdAt: v.number(),
|
|
30
|
-
updatedAt: v.number(),
|
|
31
|
-
})
|
|
32
|
-
.index('by_domain', ['domain'])
|
|
33
|
-
.index('by_status', ['status'])
|
|
34
|
-
.index('by_domain_provider', ['domain', 'provider']),
|
|
35
|
-
|
|
36
|
-
// ─── Adapter Health Logs ───────────────────────────────────
|
|
37
|
-
adapter_health_logs: defineTable({
|
|
38
|
-
adapterId: v.id('adapter_registry'),
|
|
39
|
-
domain: v.union(
|
|
40
|
-
v.literal('db'), v.literal('auth'), v.literal('payments'),
|
|
41
|
-
v.literal('ai'), v.literal('storage'), v.literal('admin'),
|
|
42
|
-
),
|
|
43
|
-
status: v.union(
|
|
44
|
-
v.literal('connected'), v.literal('disconnected'),
|
|
45
|
-
v.literal('error'), v.literal('initializing'),
|
|
46
|
-
),
|
|
47
|
-
latency: v.optional(v.number()),
|
|
48
|
-
errorMessage: v.optional(v.string()),
|
|
49
|
-
timestamp: v.number(),
|
|
50
|
-
})
|
|
51
|
-
.index('by_adapter', ['adapterId'])
|
|
52
|
-
.index('by_domain', ['domain'])
|
|
53
|
-
.index('by_timestamp', ['timestamp']),
|
|
54
|
-
})
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Configuration for Convex adapter
|
|
3
|
-
*/
|
|
4
|
-
export interface ConvexAdapterConfig {
|
|
5
|
-
deploymentUrl?: string
|
|
6
|
-
apiKey?: string
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Interface for Convex database adapter
|
|
11
|
-
*/
|
|
12
|
-
export interface ConvexDbAdapter {
|
|
13
|
-
query: (queryFn: string, args?: Record<string, unknown>) => Promise<unknown>
|
|
14
|
-
mutation: (
|
|
15
|
-
mutationFn: string,
|
|
16
|
-
args?: Record<string, unknown>,
|
|
17
|
-
) => Promise<unknown>
|
|
18
|
-
isReady: () => boolean
|
|
19
|
-
disconnect: () => Promise<void>
|
|
20
|
-
}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@geenius-adapters/react",
|
|
3
|
-
"version": "0.1.0",
|
|
4
|
-
"description": "Geenius Adapters — React hooks and providers",
|
|
5
|
-
"main": "./dist/index.js",
|
|
6
|
-
"module": "./dist/index.mjs",
|
|
7
|
-
"types": "./dist/index.d.ts",
|
|
8
|
-
"exports": {
|
|
9
|
-
".": {
|
|
10
|
-
"import": "./dist/index.mjs",
|
|
11
|
-
"require": "./dist/index.js",
|
|
12
|
-
"types": "./dist/index.d.ts"
|
|
13
|
-
}
|
|
14
|
-
},
|
|
15
|
-
"scripts": {
|
|
16
|
-
"build": "tsup",
|
|
17
|
-
"lint": "tsc --noEmit",
|
|
18
|
-
"test": "vitest run",
|
|
19
|
-
"clean": "rm -rf dist"
|
|
20
|
-
},
|
|
21
|
-
"files": [
|
|
22
|
-
"dist"
|
|
23
|
-
],
|
|
24
|
-
"publishConfig": {
|
|
25
|
-
"access": "public"
|
|
26
|
-
},
|
|
27
|
-
"peerDependencies": {
|
|
28
|
-
"react": ">=18.0.0"
|
|
29
|
-
},
|
|
30
|
-
"dependencies": {
|
|
31
|
-
"@geenius-adapters/shared": "workspace:*"
|
|
32
|
-
},
|
|
33
|
-
"devDependencies": {
|
|
34
|
-
"@types/react": "^19.0.0",
|
|
35
|
-
"react": "^19.2.4",
|
|
36
|
-
"tsup": "^8.5.1",
|
|
37
|
-
"typescript": "~6.0.2",
|
|
38
|
-
"vitest": "^4.1.0"
|
|
39
|
-
},
|
|
40
|
-
"author": "Antigravity HQ",
|
|
41
|
-
"license": "MIT",
|
|
42
|
-
"engines": {
|
|
43
|
-
"node": ">=20.0.0"
|
|
44
|
-
}
|
|
45
|
-
}
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
// @geenius-adapters/react — AdapterCard
|
|
2
|
-
|
|
3
|
-
import type { AdapterDomain, AdapterStatusInfo } from '@geenius-adapters/shared'
|
|
4
|
-
import { DOMAIN_LABELS, DOMAIN_ICONS, DOMAIN_DESCRIPTIONS } from '@geenius-adapters/shared'
|
|
5
|
-
import { AdapterStatusBadge } from './AdapterStatusBadge'
|
|
6
|
-
|
|
7
|
-
export interface AdapterCardProps {
|
|
8
|
-
domain: AdapterDomain
|
|
9
|
-
status: AdapterStatusInfo
|
|
10
|
-
onClick?: () => void
|
|
11
|
-
className?: string
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export function AdapterCard({ domain, status, onClick, className = '' }: AdapterCardProps) {
|
|
15
|
-
const label = DOMAIN_LABELS[domain]
|
|
16
|
-
const icon = DOMAIN_ICONS[domain]
|
|
17
|
-
const desc = DOMAIN_DESCRIPTIONS[domain]
|
|
18
|
-
|
|
19
|
-
return (
|
|
20
|
-
<button
|
|
21
|
-
type="button"
|
|
22
|
-
onClick={onClick}
|
|
23
|
-
className={`group flex w-full items-start gap-4 rounded-2xl border border-white/10 bg-white/[0.03] p-5 text-left backdrop-blur-sm transition-all hover:border-white/15 hover:bg-white/[0.05] ${className}`}
|
|
24
|
-
aria-label={`${label} adapter — ${status.status}`}
|
|
25
|
-
>
|
|
26
|
-
<div className="flex h-12 w-12 flex-shrink-0 items-center justify-center rounded-xl bg-white/5 text-2xl transition-transform group-hover:scale-105">
|
|
27
|
-
{icon}
|
|
28
|
-
</div>
|
|
29
|
-
<div className="min-w-0 flex-1">
|
|
30
|
-
<div className="flex items-center justify-between gap-2">
|
|
31
|
-
<h3 className="truncate text-sm font-bold text-white/90">{label}</h3>
|
|
32
|
-
<AdapterStatusBadge status={status.status} />
|
|
33
|
-
</div>
|
|
34
|
-
<p className="mt-0.5 text-xs text-white/40 line-clamp-2">{desc}</p>
|
|
35
|
-
{status.provider && status.provider !== 'none' && (
|
|
36
|
-
<div className="mt-2 flex items-center gap-2">
|
|
37
|
-
<span className="rounded-md bg-white/5 px-2 py-0.5 text-[0.625rem] font-semibold text-white/50">{status.provider}</span>
|
|
38
|
-
{status.latency && (
|
|
39
|
-
<span className="text-[0.625rem] text-white/30">{status.latency}ms</span>
|
|
40
|
-
)}
|
|
41
|
-
</div>
|
|
42
|
-
)}
|
|
43
|
-
{status.error && (
|
|
44
|
-
<p className="mt-1.5 truncate text-[0.625rem] text-red-400/80">{status.error}</p>
|
|
45
|
-
)}
|
|
46
|
-
</div>
|
|
47
|
-
</button>
|
|
48
|
-
)
|
|
49
|
-
}
|