@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
@@ -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"
@@ -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,11 +0,0 @@
1
- {
2
- "extends": "../../tsconfig.json",
3
- "compilerOptions": {
4
- "rootDir": "./src",
5
- "outDir": "./dist",
6
- "declaration": true,
7
- "declarationMap": true,
8
- "sourceMap": true
9
- },
10
- "include": ["src"]
11
- }
@@ -1,10 +0,0 @@
1
- import { defineConfig } from 'tsup'
2
-
3
- export default defineConfig({
4
- entry: ['src/index.ts'],
5
- format: ['cjs', 'esm'],
6
- dts: true,
7
- clean: true,
8
- sourcemap: true,
9
- external: ['convex'],
10
- })
@@ -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
- }