@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
@@ -0,0 +1,67 @@
1
+ import { DbAdapter, AuthAdapter, PaymentsAdapter, AiAdapter, FileStorageAdapter, AdminAdapter, AdapterDomain, AdapterStatusInfo, AdapterStatusType, DomainAdapterConfig } from '@geenius/adapters-shared';
2
+ export { ADAPTER_DOMAINS, AdapterConfig, AdapterDomain, AdapterStatusInfo, AdapterStatusType, AdminAdapter, AiAdapter, AuthAdapter, DOMAIN_DESCRIPTIONS, DOMAIN_ICONS, DOMAIN_LABELS, DbAdapter, FileStorageAdapter, PaymentsAdapter, configureAdapters, getAdapterConfig } from '@geenius/adapters-shared';
3
+ import * as solid_js from 'solid-js';
4
+ import { JSX } from 'solid-js';
5
+ export { createAdapterStatus, createAdapterStatuses, createAdapters, createAdmin, createAi, createAuth, createDb, createIsAdapterReady, createPayments, createStorage } from '@geenius/adapters-solidjs';
6
+
7
+ interface AdapterSet {
8
+ db?: DbAdapter;
9
+ auth?: AuthAdapter;
10
+ payments?: PaymentsAdapter;
11
+ ai?: AiAdapter;
12
+ storage?: FileStorageAdapter;
13
+ admin?: AdminAdapter;
14
+ }
15
+ interface AdapterContextValue {
16
+ adapters: AdapterSet;
17
+ statuses: Record<AdapterDomain, AdapterStatusInfo>;
18
+ getAdapter: <K extends keyof AdapterSet>(domain: K) => NonNullable<AdapterSet[K]>;
19
+ isReady: (domain: AdapterDomain) => boolean;
20
+ isLoading: boolean;
21
+ }
22
+ interface AdapterProviderProps {
23
+ adapters: AdapterSet;
24
+ children: JSX.Element;
25
+ }
26
+ declare function AdapterProvider(props: AdapterProviderProps): JSX.Element;
27
+ declare function useAdapterContext(): AdapterContextValue;
28
+
29
+ interface AdapterStatusBadgeProps {
30
+ status: AdapterStatusType;
31
+ showLabel?: boolean;
32
+ }
33
+ declare function AdapterStatusBadge(props: AdapterStatusBadgeProps): solid_js.JSX.Element;
34
+
35
+ interface AdapterCardProps {
36
+ domain: AdapterDomain;
37
+ status: AdapterStatusInfo;
38
+ onClick?: () => void;
39
+ }
40
+ declare function AdapterCard(props: AdapterCardProps): solid_js.JSX.Element;
41
+
42
+ interface AdapterListProps {
43
+ onSelect?: (domain: AdapterDomain) => void;
44
+ filterStatus?: AdapterStatusType;
45
+ }
46
+ declare function AdapterList(props: AdapterListProps): solid_js.JSX.Element;
47
+
48
+ interface AdapterConfigFormProps {
49
+ domain: AdapterDomain;
50
+ initialConfig?: DomainAdapterConfig;
51
+ onSave: (config: DomainAdapterConfig) => Promise<void> | void;
52
+ onCancel?: () => void;
53
+ }
54
+ declare function AdapterConfigForm(props: AdapterConfigFormProps): solid_js.JSX.Element;
55
+
56
+ interface AdaptersPageProps {
57
+ onNavigateDetail?: (domain: AdapterDomain) => void;
58
+ }
59
+ declare function AdaptersPage(props: AdaptersPageProps): solid_js.JSX.Element;
60
+
61
+ interface AdapterDetailPageProps {
62
+ domain: AdapterDomain;
63
+ onBack?: () => void;
64
+ }
65
+ declare function AdapterDetailPage(props: AdapterDetailPageProps): solid_js.JSX.Element;
66
+
67
+ export { AdapterCard, type AdapterCardProps, AdapterConfigForm, type AdapterConfigFormProps, type AdapterContextValue, AdapterDetailPage, type AdapterDetailPageProps, AdapterList, type AdapterListProps, AdapterProvider, type AdapterProviderProps, type AdapterSet, AdapterStatusBadge, type AdapterStatusBadgeProps, AdaptersPage, type AdaptersPageProps, useAdapterContext };
@@ -0,0 +1,326 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __copyProps = (to, from, except, desc) => {
6
+ if (from && typeof from === "object" || typeof from === "function") {
7
+ for (let key of __getOwnPropNames(from))
8
+ if (!__hasOwnProp.call(to, key) && key !== except)
9
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
10
+ }
11
+ return to;
12
+ };
13
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
14
+
15
+ // src/index.tsx
16
+ import {
17
+ ADAPTER_DOMAINS as ADAPTER_DOMAINS4,
18
+ DOMAIN_LABELS as DOMAIN_LABELS6,
19
+ DOMAIN_ICONS as DOMAIN_ICONS3,
20
+ DOMAIN_DESCRIPTIONS as DOMAIN_DESCRIPTIONS3,
21
+ configureAdapters,
22
+ getAdapterConfig
23
+ } from "@geenius/adapters-shared";
24
+
25
+ // src/provider/AdapterProvider.tsx
26
+ import { createContext, useContext } from "solid-js";
27
+ import { createStore } from "solid-js/store";
28
+ import { ADAPTER_DOMAINS, DOMAIN_LABELS } from "@geenius/adapters-shared";
29
+ var AdapterContext = createContext();
30
+ function AdapterProvider(props) {
31
+ const init = {};
32
+ for (const d of ADAPTER_DOMAINS) {
33
+ const a = props.adapters[d];
34
+ init[d] = { domain: d, provider: a ? "configured" : "none", status: a ? "connected" : "disconnected", lastCheckedAt: Date.now() };
35
+ }
36
+ const [statuses] = createStore(init);
37
+ const getAdapter = (domain) => {
38
+ const adapter = props.adapters[domain];
39
+ if (!adapter) throw new Error(`${DOMAIN_LABELS[domain] ?? domain} adapter not configured`);
40
+ return adapter;
41
+ };
42
+ const isReady = (domain) => !!props.adapters[domain] && statuses[domain]?.status === "connected";
43
+ const value = { adapters: props.adapters, statuses, getAdapter, isReady, isLoading: false };
44
+ return /* @__PURE__ */ React.createElement(AdapterContext.Provider, { value }, props.children);
45
+ }
46
+ function useAdapterContext() {
47
+ const ctx = useContext(AdapterContext);
48
+ if (!ctx) throw new Error("useAdapterContext must be used within <AdapterProvider>");
49
+ return ctx;
50
+ }
51
+
52
+ // src/primitives/index.ts
53
+ var primitives_exports = {};
54
+ __reExport(primitives_exports, adapters_solidjs_star);
55
+ import * as adapters_solidjs_star from "@geenius/adapters-solidjs";
56
+
57
+ // src/components/AdapterStatusBadge.tsx
58
+ var LABELS = {
59
+ connected: "Connected",
60
+ disconnected: "Disconnected",
61
+ error: "Error",
62
+ initializing: "Initializing"
63
+ };
64
+ function AdapterStatusBadge(props) {
65
+ return /* @__PURE__ */ React.createElement("span", { class: `adapter-badge adapter-badge--${props.status}` }, /* @__PURE__ */ React.createElement("span", { class: "adapter-badge__dot" }), props.showLabel !== false && /* @__PURE__ */ React.createElement("span", null, LABELS[props.status]));
66
+ }
67
+
68
+ // src/components/AdapterCard.tsx
69
+ import { Show } from "solid-js";
70
+ import { DOMAIN_LABELS as DOMAIN_LABELS2, DOMAIN_ICONS, DOMAIN_DESCRIPTIONS } from "@geenius/adapters-shared";
71
+ function AdapterCard(props) {
72
+ return /* @__PURE__ */ React.createElement(
73
+ "button",
74
+ {
75
+ type: "button",
76
+ onClick: () => props.onClick?.(),
77
+ class: "adapter-card",
78
+ "aria-label": `${DOMAIN_LABELS2[props.domain]} adapter \u2014 ${props.status.status}`
79
+ },
80
+ /* @__PURE__ */ React.createElement("div", { class: "adapter-card__icon" }, DOMAIN_ICONS[props.domain]),
81
+ /* @__PURE__ */ React.createElement("div", { class: "adapter-card__body" }, /* @__PURE__ */ React.createElement("div", { class: "adapter-card__header" }, /* @__PURE__ */ React.createElement("h3", { class: "adapter-card__name" }, DOMAIN_LABELS2[props.domain]), /* @__PURE__ */ React.createElement(AdapterStatusBadge, { status: props.status.status })), /* @__PURE__ */ React.createElement("p", { class: "adapter-card__desc" }, DOMAIN_DESCRIPTIONS[props.domain]), /* @__PURE__ */ React.createElement(Show, { when: props.status.provider && props.status.provider !== "none" }, /* @__PURE__ */ React.createElement("div", { class: "adapter-card__meta" }, /* @__PURE__ */ React.createElement("span", { class: "adapter-card__provider" }, props.status.provider), /* @__PURE__ */ React.createElement(Show, { when: props.status.latency }, /* @__PURE__ */ React.createElement("span", { class: "adapter-card__latency" }, props.status.latency, "ms")))), /* @__PURE__ */ React.createElement(Show, { when: props.status.error }, /* @__PURE__ */ React.createElement("p", { class: "adapter-card__error" }, props.status.error)))
82
+ );
83
+ }
84
+
85
+ // src/components/AdapterList.tsx
86
+ import { createSignal, createMemo, Show as Show2, For } from "solid-js";
87
+ import { ADAPTER_DOMAINS as ADAPTER_DOMAINS2, DOMAIN_LABELS as DOMAIN_LABELS3 } from "@geenius/adapters-shared";
88
+ function AdapterList(props) {
89
+ const ctx = (0, primitives_exports.createAdapters)();
90
+ const [search, setSearch] = createSignal("");
91
+ const filtered = createMemo(() => {
92
+ let domains = [...ADAPTER_DOMAINS2];
93
+ const q = search().toLowerCase();
94
+ if (q) {
95
+ domains = domains.filter((d) => {
96
+ return DOMAIN_LABELS3[d].toLowerCase().includes(q) || d.includes(q) || (ctx.statuses[d]?.provider?.toLowerCase().includes(q) ?? false);
97
+ });
98
+ }
99
+ if (props.filterStatus) {
100
+ domains = domains.filter((d) => ctx.statuses[d]?.status === props.filterStatus);
101
+ }
102
+ return domains;
103
+ });
104
+ return /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement(
105
+ "input",
106
+ {
107
+ type: "text",
108
+ value: search(),
109
+ onInput: (e) => setSearch(e.currentTarget.value),
110
+ placeholder: "Search adapters...",
111
+ class: "adapter-search",
112
+ "aria-label": "Search adapters"
113
+ }
114
+ ), /* @__PURE__ */ React.createElement(
115
+ Show2,
116
+ {
117
+ when: filtered().length > 0,
118
+ fallback: /* @__PURE__ */ React.createElement("div", { class: "adapter-empty" }, /* @__PURE__ */ React.createElement("p", { class: "adapter-empty__text" }, search() ? "No adapters match your search" : "No adapters configured"))
119
+ },
120
+ /* @__PURE__ */ React.createElement("div", { class: "adapter-grid", role: "list", "aria-label": "Adapter list" }, /* @__PURE__ */ React.createElement(For, { each: filtered() }, (domain) => /* @__PURE__ */ React.createElement(
121
+ AdapterCard,
122
+ {
123
+ domain,
124
+ status: ctx.statuses[domain],
125
+ onClick: () => props.onSelect?.(domain)
126
+ }
127
+ )))
128
+ ));
129
+ }
130
+
131
+ // src/components/AdapterConfigForm.tsx
132
+ import { createSignal as createSignal2, Show as Show3, For as For2 } from "solid-js";
133
+ import { DOMAIN_LABELS as DOMAIN_LABELS4, getProvidersForDomain } from "@geenius/adapters-shared";
134
+ function AdapterConfigForm(props) {
135
+ const providers = getProvidersForDomain(props.domain);
136
+ const [provider, setProvider] = createSignal2(props.initialConfig?.provider ?? providers[0]?.id ?? "");
137
+ const [apiKey, setApiKey] = createSignal2(props.initialConfig?.apiKey ?? "");
138
+ const [baseUrl, setBaseUrl] = createSignal2(props.initialConfig?.baseUrl ?? "");
139
+ const [isSaving, setIsSaving] = createSignal2(false);
140
+ const [error, setError] = createSignal2(null);
141
+ const needsApiKey = () => !["localStorage", "noop"].includes(provider());
142
+ const needsBaseUrl = () => ["ollama", "minio", "neon", "supabase"].includes(provider());
143
+ const handleSubmit = async (e) => {
144
+ e.preventDefault();
145
+ setError(null);
146
+ if (!provider()) {
147
+ setError("Select a provider");
148
+ return;
149
+ }
150
+ if (needsApiKey() && !apiKey().trim()) {
151
+ setError("API key is required");
152
+ return;
153
+ }
154
+ setIsSaving(true);
155
+ try {
156
+ await props.onSave({
157
+ provider: provider(),
158
+ apiKey: apiKey() || void 0,
159
+ baseUrl: baseUrl() || void 0
160
+ });
161
+ } catch (err) {
162
+ setError(err instanceof Error ? err.message : "Failed to save");
163
+ } finally {
164
+ setIsSaving(false);
165
+ }
166
+ };
167
+ return /* @__PURE__ */ React.createElement("form", { onSubmit: handleSubmit, class: "adapter-form", noValidate: true }, /* @__PURE__ */ React.createElement("h3", { class: "adapter-form__title" }, "Configure ", DOMAIN_LABELS4[props.domain]), /* @__PURE__ */ React.createElement("p", { class: "adapter-form__subtitle" }, "Select and configure your preferred provider."), /* @__PURE__ */ React.createElement(Show3, { when: error() }, /* @__PURE__ */ React.createElement("div", { class: "adapter-alert adapter-alert--error", role: "alert", style: { "margin-top": "1rem" } }, error())), /* @__PURE__ */ React.createElement("div", { class: "adapter-field" }, /* @__PURE__ */ React.createElement("span", { class: "adapter-field__label" }, "Provider"), /* @__PURE__ */ React.createElement("div", { class: "adapter-provider-grid" }, /* @__PURE__ */ React.createElement(For2, { each: providers }, (p) => /* @__PURE__ */ React.createElement(
168
+ "button",
169
+ {
170
+ type: "button",
171
+ onClick: () => setProvider(p.id),
172
+ class: `adapter-provider-option ${provider() === p.id ? "adapter-provider-option--selected" : ""}`
173
+ },
174
+ /* @__PURE__ */ React.createElement("span", { class: "adapter-provider-option__name" }, p.name),
175
+ /* @__PURE__ */ React.createElement("span", { class: "adapter-provider-option__desc" }, p.description),
176
+ /* @__PURE__ */ React.createElement("span", { class: `adapter-tier-badge adapter-tier-badge--${p.tier}` }, p.tier)
177
+ )))), /* @__PURE__ */ React.createElement(Show3, { when: needsApiKey() }, /* @__PURE__ */ React.createElement("div", { class: "adapter-field" }, /* @__PURE__ */ React.createElement("label", { class: "adapter-field__label", for: `adapter-${props.domain}-apiKey` }, "API Key"), /* @__PURE__ */ React.createElement(
178
+ "input",
179
+ {
180
+ id: `adapter-${props.domain}-apiKey`,
181
+ type: "password",
182
+ value: apiKey(),
183
+ onInput: (e) => setApiKey(e.currentTarget.value),
184
+ placeholder: `Enter API key`,
185
+ class: "adapter-field__input",
186
+ autocomplete: "off"
187
+ }
188
+ ))), /* @__PURE__ */ React.createElement(Show3, { when: needsBaseUrl() }, /* @__PURE__ */ React.createElement("div", { class: "adapter-field" }, /* @__PURE__ */ React.createElement("label", { class: "adapter-field__label", for: `adapter-${props.domain}-url` }, "Base URL"), /* @__PURE__ */ React.createElement(
189
+ "input",
190
+ {
191
+ id: `adapter-${props.domain}-url`,
192
+ type: "url",
193
+ value: baseUrl(),
194
+ onInput: (e) => setBaseUrl(e.currentTarget.value),
195
+ placeholder: "https://...",
196
+ class: "adapter-field__input"
197
+ }
198
+ ))), /* @__PURE__ */ React.createElement("div", { style: { display: "flex", "justify-content": "flex-end", gap: "0.75rem", "margin-top": "1.5rem" } }, /* @__PURE__ */ React.createElement(Show3, { when: props.onCancel }, /* @__PURE__ */ React.createElement("button", { type: "button", onClick: () => props.onCancel?.(), class: "adapter-btn adapter-btn--ghost" }, "Cancel")), /* @__PURE__ */ React.createElement(
199
+ "button",
200
+ {
201
+ type: "submit",
202
+ disabled: isSaving() || !provider(),
203
+ class: "adapter-btn adapter-btn--primary"
204
+ },
205
+ isSaving() ? "Saving\u2026" : "Save Configuration"
206
+ )));
207
+ }
208
+
209
+ // src/pages/AdaptersPage.tsx
210
+ import { createSignal as createSignal3, Show as Show4, For as For3 } from "solid-js";
211
+ import { ADAPTER_DOMAINS as ADAPTER_DOMAINS3, ADAPTER_STATUSES } from "@geenius/adapters-shared";
212
+ function AdaptersPage(props) {
213
+ const ctx = (0, primitives_exports.createAdapters)();
214
+ const [selectedDomain, setSelectedDomain] = createSignal3(null);
215
+ const [filterStatus, setFilterStatus] = createSignal3();
216
+ const connected = () => ADAPTER_DOMAINS3.filter((d) => ctx.statuses[d]?.status === "connected").length;
217
+ const errors = () => ADAPTER_DOMAINS3.filter((d) => ctx.statuses[d]?.status === "error").length;
218
+ return /* @__PURE__ */ React.createElement("div", { class: "adapter-page" }, /* @__PURE__ */ React.createElement("div", { class: "adapter-page__header" }, /* @__PURE__ */ React.createElement("h1", { class: "adapter-page__title" }, "Adapters"), /* @__PURE__ */ React.createElement("p", { class: "adapter-page__subtitle" }, "Manage your infrastructure adapters \u2014 database, auth, AI, storage, payments, and admin.")), /* @__PURE__ */ React.createElement("div", { class: "adapter-summary" }, /* @__PURE__ */ React.createElement("div", { class: "adapter-summary__card" }, /* @__PURE__ */ React.createElement("p", { class: "adapter-summary__label" }, "Total"), /* @__PURE__ */ React.createElement("p", { class: "adapter-summary__value" }, ADAPTER_DOMAINS3.length), /* @__PURE__ */ React.createElement("p", { class: "adapter-summary__desc" }, "adapter domains")), /* @__PURE__ */ React.createElement("div", { class: "adapter-summary__card adapter-summary__card--success" }, /* @__PURE__ */ React.createElement("p", { class: "adapter-summary__label" }, "Connected"), /* @__PURE__ */ React.createElement("p", { class: "adapter-summary__value" }, connected()), /* @__PURE__ */ React.createElement("p", { class: "adapter-summary__desc" }, "active adapters")), /* @__PURE__ */ React.createElement(Show4, { when: errors() > 0 }, /* @__PURE__ */ React.createElement("div", { class: "adapter-summary__card adapter-summary__card--error" }, /* @__PURE__ */ React.createElement("p", { class: "adapter-summary__label" }, "Errors"), /* @__PURE__ */ React.createElement("p", { class: "adapter-summary__value" }, errors()), /* @__PURE__ */ React.createElement("p", { class: "adapter-summary__desc" }, "need attention")))), /* @__PURE__ */ React.createElement("div", { class: "adapter-filters" }, /* @__PURE__ */ React.createElement(
219
+ "button",
220
+ {
221
+ class: `adapter-filter-btn ${!filterStatus() ? "adapter-filter-btn--active" : ""}`,
222
+ onClick: () => setFilterStatus(void 0)
223
+ },
224
+ "All"
225
+ ), /* @__PURE__ */ React.createElement(For3, { each: [...ADAPTER_STATUSES] }, (s) => /* @__PURE__ */ React.createElement(
226
+ "button",
227
+ {
228
+ class: `adapter-filter-btn ${filterStatus() === s ? "adapter-filter-btn--active" : ""}`,
229
+ onClick: () => setFilterStatus(s)
230
+ },
231
+ /* @__PURE__ */ React.createElement(AdapterStatusBadge, { status: s, showLabel: false }),
232
+ " ",
233
+ s
234
+ ))), /* @__PURE__ */ React.createElement(
235
+ AdapterList,
236
+ {
237
+ onSelect: (domain) => {
238
+ if (props.onNavigateDetail) props.onNavigateDetail(domain);
239
+ else setSelectedDomain(domain);
240
+ },
241
+ filterStatus: filterStatus()
242
+ }
243
+ ), /* @__PURE__ */ React.createElement(Show4, { when: selectedDomain() }, /* @__PURE__ */ React.createElement("div", { class: "adapter-modal-overlay", onClick: () => setSelectedDomain(null) }, /* @__PURE__ */ React.createElement("div", { class: "adapter-modal", onClick: (e) => e.stopPropagation() }, /* @__PURE__ */ React.createElement(
244
+ AdapterConfigForm,
245
+ {
246
+ domain: selectedDomain(),
247
+ onSave: async () => {
248
+ setSelectedDomain(null);
249
+ },
250
+ onCancel: () => setSelectedDomain(null)
251
+ }
252
+ )))));
253
+ }
254
+
255
+ // src/pages/AdapterDetailPage.tsx
256
+ import { createSignal as createSignal4, Show as Show5, For as For4 } from "solid-js";
257
+ import { DOMAIN_LABELS as DOMAIN_LABELS5, DOMAIN_ICONS as DOMAIN_ICONS2, DOMAIN_DESCRIPTIONS as DOMAIN_DESCRIPTIONS2, getProvidersForDomain as getProvidersForDomain2 } from "@geenius/adapters-shared";
258
+ function AdapterDetailPage(props) {
259
+ const status = (0, primitives_exports.createAdapterStatus)(props.domain);
260
+ const providers = getProvidersForDomain2(props.domain);
261
+ const [isEditing, setIsEditing] = createSignal4(false);
262
+ return /* @__PURE__ */ React.createElement("div", { class: "adapter-page" }, /* @__PURE__ */ React.createElement(Show5, { when: props.onBack }, /* @__PURE__ */ React.createElement("button", { onClick: () => props.onBack?.(), class: "adapter-btn adapter-btn--ghost adapter-btn--sm", style: { "margin-bottom": "1rem" } }, "\u2190 Back to Adapters")), /* @__PURE__ */ React.createElement("div", { style: { display: "flex", "align-items": "flex-start", gap: "1.25rem", "margin-bottom": "2rem" } }, /* @__PURE__ */ React.createElement("div", { class: "adapter-detail__icon" }, DOMAIN_ICONS2[props.domain]), /* @__PURE__ */ React.createElement("div", { style: { flex: "1" } }, /* @__PURE__ */ React.createElement("div", { style: { display: "flex", "align-items": "center", gap: "0.75rem" } }, /* @__PURE__ */ React.createElement("h1", { class: "adapter-page__title" }, DOMAIN_LABELS5[props.domain]), /* @__PURE__ */ React.createElement(AdapterStatusBadge, { status: status().status })), /* @__PURE__ */ React.createElement("p", { class: "adapter-page__subtitle" }, DOMAIN_DESCRIPTIONS2[props.domain]))), /* @__PURE__ */ React.createElement("div", { class: "adapter-summary__card", style: { "margin-bottom": "2rem" } }, /* @__PURE__ */ React.createElement("h2", { class: "adapter-summary__label", style: { "margin-bottom": "1rem" } }, "Current Status"), /* @__PURE__ */ React.createElement("div", { class: "adapter-detail__status-grid" }, /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement("p", { class: "adapter-detail__label" }, "Provider"), /* @__PURE__ */ React.createElement("p", { class: "adapter-detail__value" }, status().provider !== "none" ? status().provider : "\u2014")), /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement("p", { class: "adapter-detail__label" }, "Status"), /* @__PURE__ */ React.createElement("div", { class: "adapter-detail__value" }, /* @__PURE__ */ React.createElement(AdapterStatusBadge, { status: status().status }))), /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement("p", { class: "adapter-detail__label" }, "Last Checked"), /* @__PURE__ */ React.createElement("p", { class: "adapter-detail__value" }, status().lastCheckedAt ? new Date(status().lastCheckedAt).toLocaleTimeString() : "\u2014"))), /* @__PURE__ */ React.createElement(Show5, { when: status().error }, /* @__PURE__ */ React.createElement("div", { class: "adapter-alert adapter-alert--error", style: { "margin-top": "1rem" } }, /* @__PURE__ */ React.createElement("strong", null, "Error:"), " ", status().error))), /* @__PURE__ */ React.createElement("div", { class: "adapter-summary__card", style: { "margin-bottom": "2rem" } }, /* @__PURE__ */ React.createElement("div", { style: { display: "flex", "justify-content": "space-between", "margin-bottom": "1rem" } }, /* @__PURE__ */ React.createElement("h2", { class: "adapter-summary__label" }, "Available Providers"), /* @__PURE__ */ React.createElement("span", { class: "adapter-summary__desc" }, providers.length, " providers")), /* @__PURE__ */ React.createElement("div", { class: "adapter-provider-list" }, /* @__PURE__ */ React.createElement(For4, { each: providers }, (p) => /* @__PURE__ */ React.createElement("div", { style: { display: "flex", "align-items": "center", "justify-content": "space-between" } }, /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement("p", { class: "adapter-detail__value", style: { "font-size": "0.875rem" } }, p.name), /* @__PURE__ */ React.createElement("p", { class: "adapter-detail__label" }, p.description)), /* @__PURE__ */ React.createElement("span", { class: `adapter-tier-badge adapter-tier-badge--${p.tier}` }, p.tier))))), /* @__PURE__ */ React.createElement(
263
+ Show5,
264
+ {
265
+ when: isEditing(),
266
+ fallback: /* @__PURE__ */ React.createElement(
267
+ "button",
268
+ {
269
+ onClick: () => setIsEditing(true),
270
+ class: "adapter-card",
271
+ style: { "justify-content": "center", "border-style": "dashed" }
272
+ },
273
+ "\u2699\uFE0F Configure ",
274
+ DOMAIN_LABELS5[props.domain],
275
+ " Adapter"
276
+ )
277
+ },
278
+ /* @__PURE__ */ React.createElement(
279
+ AdapterConfigForm,
280
+ {
281
+ domain: props.domain,
282
+ onSave: async () => {
283
+ setIsEditing(false);
284
+ },
285
+ onCancel: () => setIsEditing(false)
286
+ }
287
+ )
288
+ ));
289
+ }
290
+ var export_createAdapterStatus = primitives_exports.createAdapterStatus;
291
+ var export_createAdapterStatuses = primitives_exports.createAdapterStatuses;
292
+ var export_createAdapters = primitives_exports.createAdapters;
293
+ var export_createAdmin = primitives_exports.createAdmin;
294
+ var export_createAi = primitives_exports.createAi;
295
+ var export_createAuth = primitives_exports.createAuth;
296
+ var export_createDb = primitives_exports.createDb;
297
+ var export_createIsAdapterReady = primitives_exports.createIsAdapterReady;
298
+ var export_createPayments = primitives_exports.createPayments;
299
+ var export_createStorage = primitives_exports.createStorage;
300
+ export {
301
+ ADAPTER_DOMAINS4 as ADAPTER_DOMAINS,
302
+ AdapterCard,
303
+ AdapterConfigForm,
304
+ AdapterDetailPage,
305
+ AdapterList,
306
+ AdapterProvider,
307
+ AdapterStatusBadge,
308
+ AdaptersPage,
309
+ DOMAIN_DESCRIPTIONS3 as DOMAIN_DESCRIPTIONS,
310
+ DOMAIN_ICONS3 as DOMAIN_ICONS,
311
+ DOMAIN_LABELS6 as DOMAIN_LABELS,
312
+ configureAdapters,
313
+ export_createAdapterStatus as createAdapterStatus,
314
+ export_createAdapterStatuses as createAdapterStatuses,
315
+ export_createAdapters as createAdapters,
316
+ export_createAdmin as createAdmin,
317
+ export_createAi as createAi,
318
+ export_createAuth as createAuth,
319
+ export_createDb as createDb,
320
+ export_createIsAdapterReady as createIsAdapterReady,
321
+ export_createPayments as createPayments,
322
+ export_createStorage as createStorage,
323
+ getAdapterConfig,
324
+ useAdapterContext
325
+ };
326
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.tsx","../src/provider/AdapterProvider.tsx","../src/primitives/index.ts","../src/components/AdapterStatusBadge.tsx","../src/components/AdapterCard.tsx","../src/components/AdapterList.tsx","../src/components/AdapterConfigForm.tsx","../src/pages/AdaptersPage.tsx","../src/pages/AdapterDetailPage.tsx"],"sourcesContent":["// @geenius/adapters-solidjs-css — Barrel export\n// Vanilla CSS variant: import '@geenius/adapters-solidjs-css/styles.css'\n\nexport type {\n AuthAdapter, DbAdapter, PaymentsAdapter, AiAdapter, FileStorageAdapter,\n AdminAdapter, AdapterDomain, AdapterConfig, AdapterStatusType, AdapterStatusInfo,\n} from '@geenius/adapters-shared'\n\nexport {\n ADAPTER_DOMAINS, DOMAIN_LABELS, DOMAIN_ICONS, DOMAIN_DESCRIPTIONS,\n configureAdapters, getAdapterConfig,\n} from '@geenius/adapters-shared'\n\n// Provider\nexport { AdapterProvider, useAdapterContext } from './provider'\nexport type { AdapterProviderProps, AdapterSet, AdapterContextValue } from './provider'\n\n// Primitives\nexport {\n createDb, createAuth, createPayments, createAi, createStorage, createAdmin,\n createAdapters, createAdapterStatuses, createAdapterStatus, createIsAdapterReady,\n} from './primitives'\n\n// Components\nexport { AdapterStatusBadge, AdapterCard, AdapterList, AdapterConfigForm } from './components'\nexport type { AdapterStatusBadgeProps, AdapterCardProps, AdapterListProps, AdapterConfigFormProps } from './components'\n\n// Pages\nexport { AdaptersPage, AdapterDetailPage } from './pages'\nexport type { AdaptersPageProps, AdapterDetailPageProps } from './pages'\n","// @geenius/adapters-solidjs-css — AdapterProvider (SolidJS + vanilla CSS)\n\nimport { createContext, useContext } from 'solid-js'\nimport { createStore } from 'solid-js/store'\nimport type { JSX } from 'solid-js'\nimport type {\n AuthAdapter, DbAdapter, PaymentsAdapter, AiAdapter, FileStorageAdapter, AdminAdapter,\n AdapterDomain, AdapterStatusInfo,\n} from '@geenius/adapters-shared'\nimport { ADAPTER_DOMAINS, DOMAIN_LABELS } from '@geenius/adapters-shared'\n\nexport interface AdapterSet {\n db?: DbAdapter\n auth?: AuthAdapter\n payments?: PaymentsAdapter\n ai?: AiAdapter\n storage?: FileStorageAdapter\n admin?: AdminAdapter\n}\n\nexport interface AdapterContextValue {\n adapters: AdapterSet\n statuses: Record<AdapterDomain, AdapterStatusInfo>\n getAdapter: <K extends keyof AdapterSet>(domain: K) => NonNullable<AdapterSet[K]>\n isReady: (domain: AdapterDomain) => boolean\n isLoading: boolean\n}\n\nconst AdapterContext = createContext<AdapterContextValue>()\n\nexport interface AdapterProviderProps {\n adapters: AdapterSet\n children: JSX.Element\n}\n\nexport function AdapterProvider(props: AdapterProviderProps) {\n const init = {} as Record<AdapterDomain, AdapterStatusInfo>\n for (const d of ADAPTER_DOMAINS) {\n const a = props.adapters[d as keyof AdapterSet]\n init[d] = { domain: d, provider: a ? 'configured' : 'none', status: a ? 'connected' : 'disconnected', lastCheckedAt: Date.now() }\n }\n const [statuses] = createStore(init)\n\n const getAdapter = <K extends keyof AdapterSet>(domain: K): NonNullable<AdapterSet[K]> => {\n const adapter = props.adapters[domain]\n if (!adapter) throw new Error(`${DOMAIN_LABELS[domain as AdapterDomain] ?? domain} adapter not configured`)\n return adapter as NonNullable<AdapterSet[K]>\n }\n\n const isReady = (domain: AdapterDomain) =>\n !!props.adapters[domain as keyof AdapterSet] && statuses[domain]?.status === 'connected'\n\n const value: AdapterContextValue = { adapters: props.adapters, statuses, getAdapter, isReady, isLoading: false }\n return <AdapterContext.Provider value={value}>{props.children}</AdapterContext.Provider>\n}\n\nexport function useAdapterContext(): AdapterContextValue {\n const ctx = useContext(AdapterContext)\n if (!ctx) throw new Error('useAdapterContext must be used within <AdapterProvider>')\n return ctx\n}\n","export * from '@geenius/adapters-solidjs'\n","// @geenius/adapters-solidjs-css — AdapterStatusBadge (vanilla CSS)\n\nimport type { AdapterStatusType } from '@geenius/adapters-shared'\n\nconst LABELS: Record<AdapterStatusType, string> = {\n connected: 'Connected',\n disconnected: 'Disconnected',\n error: 'Error',\n initializing: 'Initializing',\n}\n\nexport interface AdapterStatusBadgeProps {\n status: AdapterStatusType\n showLabel?: boolean\n}\n\nexport function AdapterStatusBadge(props: AdapterStatusBadgeProps) {\n return (\n <span class={`adapter-badge adapter-badge--${props.status}`}>\n <span class=\"adapter-badge__dot\" />\n {props.showLabel !== false && <span>{LABELS[props.status]}</span>}\n </span>\n )\n}\n","// @geenius/adapters-solidjs-css — AdapterCard (vanilla CSS)\n\nimport { Show } from 'solid-js'\nimport type { AdapterDomain, AdapterStatusInfo } from '@geenius/adapters-shared'\nimport { DOMAIN_LABELS, DOMAIN_ICONS, DOMAIN_DESCRIPTIONS } from '@geenius/adapters-shared'\nimport { AdapterStatusBadge } from './AdapterStatusBadge'\n\nexport interface AdapterCardProps {\n domain: AdapterDomain\n status: AdapterStatusInfo\n onClick?: () => void\n}\n\nexport function AdapterCard(props: AdapterCardProps) {\n return (\n <button\n type=\"button\"\n onClick={() => props.onClick?.()}\n class=\"adapter-card\"\n aria-label={`${DOMAIN_LABELS[props.domain]} adapter — ${props.status.status}`}\n >\n <div class=\"adapter-card__icon\">{DOMAIN_ICONS[props.domain]}</div>\n <div class=\"adapter-card__body\">\n <div class=\"adapter-card__header\">\n <h3 class=\"adapter-card__name\">{DOMAIN_LABELS[props.domain]}</h3>\n <AdapterStatusBadge status={props.status.status} />\n </div>\n <p class=\"adapter-card__desc\">{DOMAIN_DESCRIPTIONS[props.domain]}</p>\n <Show when={props.status.provider && props.status.provider !== 'none'}>\n <div class=\"adapter-card__meta\">\n <span class=\"adapter-card__provider\">{props.status.provider}</span>\n <Show when={props.status.latency}>\n <span class=\"adapter-card__latency\">{props.status.latency}ms</span>\n </Show>\n </div>\n </Show>\n <Show when={props.status.error}>\n <p class=\"adapter-card__error\">{props.status.error}</p>\n </Show>\n </div>\n </button>\n )\n}\n","// @geenius/adapters-solidjs-css — AdapterList (vanilla CSS)\n\nimport { createSignal, createMemo, Show, For } from 'solid-js'\nimport { createAdapters } from '../primitives'\nimport { AdapterCard } from './AdapterCard'\nimport { ADAPTER_DOMAINS, DOMAIN_LABELS } from '@geenius/adapters-shared'\nimport type { AdapterDomain, AdapterStatusType } from '@geenius/adapters-shared'\n\nexport interface AdapterListProps {\n onSelect?: (domain: AdapterDomain) => void\n filterStatus?: AdapterStatusType\n}\n\nexport function AdapterList(props: AdapterListProps) {\n const ctx = createAdapters()\n const [search, setSearch] = createSignal('')\n\n const filtered = createMemo(() => {\n let domains = [...ADAPTER_DOMAINS]\n const q = search().toLowerCase()\n if (q) {\n domains = domains.filter((d) => {\n return DOMAIN_LABELS[d].toLowerCase().includes(q) || d.includes(q)\n || (ctx.statuses[d]?.provider?.toLowerCase().includes(q) ?? false)\n })\n }\n if (props.filterStatus) {\n domains = domains.filter((d) => ctx.statuses[d]?.status === props.filterStatus)\n }\n return domains\n })\n\n return (\n <div>\n <input\n type=\"text\"\n value={search()}\n onInput={(e) => setSearch(e.currentTarget.value)}\n placeholder=\"Search adapters...\"\n class=\"adapter-search\"\n aria-label=\"Search adapters\"\n />\n\n <Show\n when={filtered().length > 0}\n fallback={\n <div class=\"adapter-empty\">\n <p class=\"adapter-empty__text\">\n {search() ? 'No adapters match your search' : 'No adapters configured'}\n </p>\n </div>\n }\n >\n <div class=\"adapter-grid\" role=\"list\" aria-label=\"Adapter list\">\n <For each={filtered()}>\n {(domain) => (\n <AdapterCard\n domain={domain}\n status={ctx.statuses[domain]}\n onClick={() => props.onSelect?.(domain)}\n />\n )}\n </For>\n </div>\n </Show>\n </div>\n )\n}\n","// @geenius/adapters-solidjs-css — AdapterConfigForm (vanilla CSS)\n\nimport { createSignal, Show, For } from 'solid-js'\nimport type { AdapterDomain, DomainAdapterConfig } from '@geenius/adapters-shared'\nimport { DOMAIN_LABELS, getProvidersForDomain } from '@geenius/adapters-shared'\n\nexport interface AdapterConfigFormProps {\n domain: AdapterDomain\n initialConfig?: DomainAdapterConfig\n onSave: (config: DomainAdapterConfig) => Promise<void> | void\n onCancel?: () => void\n}\n\nexport function AdapterConfigForm(props: AdapterConfigFormProps) {\n const providers = getProvidersForDomain(props.domain)\n const [provider, setProvider] = createSignal(props.initialConfig?.provider ?? providers[0]?.id ?? '')\n const [apiKey, setApiKey] = createSignal(props.initialConfig?.apiKey ?? '')\n const [baseUrl, setBaseUrl] = createSignal(props.initialConfig?.baseUrl ?? '')\n const [isSaving, setIsSaving] = createSignal(false)\n const [error, setError] = createSignal<string | null>(null)\n\n const needsApiKey = () => !['localStorage', 'noop'].includes(provider())\n const needsBaseUrl = () => ['ollama', 'minio', 'neon', 'supabase'].includes(provider())\n\n const handleSubmit = async (e: Event) => {\n e.preventDefault()\n setError(null)\n if (!provider()) { setError('Select a provider'); return }\n if (needsApiKey() && !apiKey().trim()) { setError('API key is required'); return }\n setIsSaving(true)\n try {\n await props.onSave({\n provider: provider(),\n apiKey: apiKey() || undefined,\n baseUrl: baseUrl() || undefined,\n })\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to save')\n } finally {\n setIsSaving(false)\n }\n }\n\n return (\n <form onSubmit={handleSubmit} class=\"adapter-form\" noValidate>\n <h3 class=\"adapter-form__title\">Configure {DOMAIN_LABELS[props.domain]}</h3>\n <p class=\"adapter-form__subtitle\">Select and configure your preferred provider.</p>\n\n <Show when={error()}>\n <div class=\"adapter-alert adapter-alert--error\" role=\"alert\" style={{ 'margin-top': '1rem' }}>\n {error()}\n </div>\n </Show>\n\n <div class=\"adapter-field\">\n <span class=\"adapter-field__label\">Provider</span>\n <div class=\"adapter-provider-grid\">\n <For each={providers}>\n {(p) => (\n <button\n type=\"button\"\n onClick={() => setProvider(p.id)}\n class={`adapter-provider-option ${provider() === p.id ? 'adapter-provider-option--selected' : ''}`}\n >\n <span class=\"adapter-provider-option__name\">{p.name}</span>\n <span class=\"adapter-provider-option__desc\">{p.description}</span>\n <span class={`adapter-tier-badge adapter-tier-badge--${p.tier}`}>{p.tier}</span>\n </button>\n )}\n </For>\n </div>\n </div>\n\n <Show when={needsApiKey()}>\n <div class=\"adapter-field\">\n <label class=\"adapter-field__label\" for={`adapter-${props.domain}-apiKey`}>API Key</label>\n <input\n id={`adapter-${props.domain}-apiKey`}\n type=\"password\"\n value={apiKey()}\n onInput={(e) => setApiKey(e.currentTarget.value)}\n placeholder={`Enter API key`}\n class=\"adapter-field__input\"\n autocomplete=\"off\"\n />\n </div>\n </Show>\n\n <Show when={needsBaseUrl()}>\n <div class=\"adapter-field\">\n <label class=\"adapter-field__label\" for={`adapter-${props.domain}-url`}>Base URL</label>\n <input\n id={`adapter-${props.domain}-url`}\n type=\"url\"\n value={baseUrl()}\n onInput={(e) => setBaseUrl(e.currentTarget.value)}\n placeholder=\"https://...\"\n class=\"adapter-field__input\"\n />\n </div>\n </Show>\n\n <div style={{ display: 'flex', 'justify-content': 'flex-end', gap: '0.75rem', 'margin-top': '1.5rem' }}>\n <Show when={props.onCancel}>\n <button type=\"button\" onClick={() => props.onCancel?.()} class=\"adapter-btn adapter-btn--ghost\">\n Cancel\n </button>\n </Show>\n <button\n type=\"submit\"\n disabled={isSaving() || !provider()}\n class=\"adapter-btn adapter-btn--primary\"\n >\n {isSaving() ? 'Saving…' : 'Save Configuration'}\n </button>\n </div>\n </form>\n )\n}\n","// @geenius/adapters-solidjs-css — AdaptersPage (vanilla CSS)\n\nimport { createSignal, Show, For } from 'solid-js'\nimport { createAdapters } from '../primitives'\nimport { AdapterList } from '../components/AdapterList'\nimport { AdapterConfigForm } from '../components/AdapterConfigForm'\nimport { AdapterStatusBadge } from '../components/AdapterStatusBadge'\nimport { ADAPTER_DOMAINS, ADAPTER_STATUSES } from '@geenius/adapters-shared'\nimport type { AdapterDomain, AdapterStatusType } from '@geenius/adapters-shared'\n\nexport interface AdaptersPageProps {\n onNavigateDetail?: (domain: AdapterDomain) => void\n}\n\nexport function AdaptersPage(props: AdaptersPageProps) {\n const ctx = createAdapters()\n const [selectedDomain, setSelectedDomain] = createSignal<AdapterDomain | null>(null)\n const [filterStatus, setFilterStatus] = createSignal<AdapterStatusType | undefined>()\n\n const connected = () => ADAPTER_DOMAINS.filter((d) => ctx.statuses[d]?.status === 'connected').length\n const errors = () => ADAPTER_DOMAINS.filter((d) => ctx.statuses[d]?.status === 'error').length\n\n return (\n <div class=\"adapter-page\">\n {/* Header */}\n <div class=\"adapter-page__header\">\n <h1 class=\"adapter-page__title\">Adapters</h1>\n <p class=\"adapter-page__subtitle\">Manage your infrastructure adapters — database, auth, AI, storage, payments, and admin.</p>\n </div>\n\n {/* Status Summary */}\n <div class=\"adapter-summary\">\n <div class=\"adapter-summary__card\">\n <p class=\"adapter-summary__label\">Total</p>\n <p class=\"adapter-summary__value\">{ADAPTER_DOMAINS.length}</p>\n <p class=\"adapter-summary__desc\">adapter domains</p>\n </div>\n <div class=\"adapter-summary__card adapter-summary__card--success\">\n <p class=\"adapter-summary__label\">Connected</p>\n <p class=\"adapter-summary__value\">{connected()}</p>\n <p class=\"adapter-summary__desc\">active adapters</p>\n </div>\n <Show when={errors() > 0}>\n <div class=\"adapter-summary__card adapter-summary__card--error\">\n <p class=\"adapter-summary__label\">Errors</p>\n <p class=\"adapter-summary__value\">{errors()}</p>\n <p class=\"adapter-summary__desc\">need attention</p>\n </div>\n </Show>\n </div>\n\n {/* Filters */}\n <div class=\"adapter-filters\">\n <button\n class={`adapter-filter-btn ${!filterStatus() ? 'adapter-filter-btn--active' : ''}`}\n onClick={() => setFilterStatus(undefined)}\n >All</button>\n <For each={[...ADAPTER_STATUSES]}>\n {(s) => (\n <button\n class={`adapter-filter-btn ${filterStatus() === s ? 'adapter-filter-btn--active' : ''}`}\n onClick={() => setFilterStatus(s)}\n >\n <AdapterStatusBadge status={s} showLabel={false} />\n {' '}{s}\n </button>\n )}\n </For>\n </div>\n\n {/* Adapter Grid */}\n <AdapterList\n onSelect={(domain) => {\n if (props.onNavigateDetail) props.onNavigateDetail(domain)\n else setSelectedDomain(domain)\n }}\n filterStatus={filterStatus()}\n />\n\n {/* Config Modal */}\n <Show when={selectedDomain()}>\n <div class=\"adapter-modal-overlay\" onClick={() => setSelectedDomain(null)}>\n <div class=\"adapter-modal\" onClick={(e) => e.stopPropagation()}>\n <AdapterConfigForm\n domain={selectedDomain()!}\n onSave={async () => { setSelectedDomain(null) }}\n onCancel={() => setSelectedDomain(null)}\n />\n </div>\n </div>\n </Show>\n </div>\n )\n}\n","// @geenius/adapters-solidjs-css — AdapterDetailPage (vanilla CSS)\n\nimport { createSignal, Show, For } from 'solid-js'\nimport { createAdapterStatus } from '../primitives'\nimport { AdapterStatusBadge } from '../components/AdapterStatusBadge'\nimport { AdapterConfigForm } from '../components/AdapterConfigForm'\nimport type { AdapterDomain } from '@geenius/adapters-shared'\nimport { DOMAIN_LABELS, DOMAIN_ICONS, DOMAIN_DESCRIPTIONS, getProvidersForDomain } from '@geenius/adapters-shared'\n\nexport interface AdapterDetailPageProps {\n domain: AdapterDomain\n onBack?: () => void\n}\n\nexport function AdapterDetailPage(props: AdapterDetailPageProps) {\n const status = createAdapterStatus(props.domain)\n const providers = getProvidersForDomain(props.domain)\n const [isEditing, setIsEditing] = createSignal(false)\n\n return (\n <div class=\"adapter-page\">\n {/* Back */}\n <Show when={props.onBack}>\n <button onClick={() => props.onBack?.()} class=\"adapter-btn adapter-btn--ghost adapter-btn--sm\" style={{ 'margin-bottom': '1rem' }}>\n ← Back to Adapters\n </button>\n </Show>\n\n {/* Header */}\n <div style={{ display: 'flex', 'align-items': 'flex-start', gap: '1.25rem', 'margin-bottom': '2rem' }}>\n <div class=\"adapter-detail__icon\">{DOMAIN_ICONS[props.domain]}</div>\n <div style={{ flex: '1' }}>\n <div style={{ display: 'flex', 'align-items': 'center', gap: '0.75rem' }}>\n <h1 class=\"adapter-page__title\">{DOMAIN_LABELS[props.domain]}</h1>\n <AdapterStatusBadge status={status().status} />\n </div>\n <p class=\"adapter-page__subtitle\">{DOMAIN_DESCRIPTIONS[props.domain]}</p>\n </div>\n </div>\n\n {/* Status card */}\n <div class=\"adapter-summary__card\" style={{ 'margin-bottom': '2rem' }}>\n <h2 class=\"adapter-summary__label\" style={{ 'margin-bottom': '1rem' }}>Current Status</h2>\n <div class=\"adapter-detail__status-grid\">\n <div>\n <p class=\"adapter-detail__label\">Provider</p>\n <p class=\"adapter-detail__value\">{status().provider !== 'none' ? status().provider : '—'}</p>\n </div>\n <div>\n <p class=\"adapter-detail__label\">Status</p>\n <div class=\"adapter-detail__value\"><AdapterStatusBadge status={status().status} /></div>\n </div>\n <div>\n <p class=\"adapter-detail__label\">Last Checked</p>\n <p class=\"adapter-detail__value\">{status().lastCheckedAt ? new Date(status().lastCheckedAt!).toLocaleTimeString() : '—'}</p>\n </div>\n </div>\n <Show when={status().error}>\n <div class=\"adapter-alert adapter-alert--error\" style={{ 'margin-top': '1rem' }}>\n <strong>Error:</strong> {status().error}\n </div>\n </Show>\n </div>\n\n {/* Available providers */}\n <div class=\"adapter-summary__card\" style={{ 'margin-bottom': '2rem' }}>\n <div style={{ display: 'flex', 'justify-content': 'space-between', 'margin-bottom': '1rem' }}>\n <h2 class=\"adapter-summary__label\">Available Providers</h2>\n <span class=\"adapter-summary__desc\">{providers.length} providers</span>\n </div>\n <div class=\"adapter-provider-list\">\n <For each={providers}>\n {(p) => (\n <div style={{ display: 'flex', 'align-items': 'center', 'justify-content': 'space-between' }}>\n <div>\n <p class=\"adapter-detail__value\" style={{ 'font-size': '0.875rem' }}>{p.name}</p>\n <p class=\"adapter-detail__label\">{p.description}</p>\n </div>\n <span class={`adapter-tier-badge adapter-tier-badge--${p.tier}`}>{p.tier}</span>\n </div>\n )}\n </For>\n </div>\n </div>\n\n {/* Configuration */}\n <Show\n when={isEditing()}\n fallback={\n <button\n onClick={() => setIsEditing(true)}\n class=\"adapter-card\"\n style={{ 'justify-content': 'center', 'border-style': 'dashed' }}\n >\n ⚙️ Configure {DOMAIN_LABELS[props.domain]} Adapter\n </button>\n }\n >\n <AdapterConfigForm\n domain={props.domain}\n onSave={async () => { setIsEditing(false) }}\n onCancel={() => setIsEditing(false)}\n />\n </Show>\n </div>\n )\n}\n"],"mappings":"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","names":["ADAPTER_DOMAINS","DOMAIN_LABELS","DOMAIN_ICONS","DOMAIN_DESCRIPTIONS","DOMAIN_LABELS","DOMAIN_LABELS","Show","ADAPTER_DOMAINS","DOMAIN_LABELS","Show","createSignal","Show","For","DOMAIN_LABELS","createSignal","Show","For","ADAPTER_DOMAINS","createSignal","Show","For","createSignal","Show","For","DOMAIN_LABELS","DOMAIN_ICONS","DOMAIN_DESCRIPTIONS","getProvidersForDomain","createSignal","Show","For"]}
@@ -1,11 +0,0 @@
1
- {
2
- "$schema": "https://unpkg.com/@changesets/config@3.1.1/schema.json",
3
- "changelog": "@changesets/cli/changelog",
4
- "commit": false,
5
- "fixed": [],
6
- "linked": [],
7
- "access": "public",
8
- "baseBranch": "main",
9
- "updateInternalDependencies": "patch",
10
- "ignore": []
11
- }
@@ -1 +0,0 @@
1
- * @mxn2020
@@ -1,16 +0,0 @@
1
- ---
2
- name: Bug Report
3
- about: Report a bug
4
- labels: bug
5
- ---
6
-
7
- ## Describe the bug
8
-
9
- ## Steps to reproduce
10
-
11
- ## Expected behavior
12
-
13
- ## Environment
14
- - Package version:
15
- - Node version:
16
- - OS:
@@ -1,11 +0,0 @@
1
- ---
2
- name: Feature Request
3
- about: Suggest a new feature
4
- labels: enhancement
5
- ---
6
-
7
- ## Problem
8
-
9
- ## Proposed solution
10
-
11
- ## Alternatives considered
@@ -1,10 +0,0 @@
1
- ## What
2
-
3
- ## Why
4
-
5
- ## How
6
-
7
- ## Checklist
8
- - [ ] Tests added/updated
9
- - [ ] `pnpm changeset` run (if applicable)
10
- - [ ] Documentation updated
@@ -1,11 +0,0 @@
1
- version: 2
2
- updates:
3
- - package-ecosystem: "npm"
4
- directory: "/"
5
- schedule:
6
- interval: "weekly"
7
- open-pull-requests-limit: 10
8
- - package-ecosystem: "github-actions"
9
- directory: "/"
10
- schedule:
11
- interval: "weekly"
@@ -1,23 +0,0 @@
1
- name: CI
2
- on:
3
- pull_request:
4
- branches: [main]
5
- push:
6
- branches: [main]
7
-
8
- jobs:
9
- check:
10
- runs-on: ubuntu-latest
11
- steps:
12
- - uses: actions/checkout@v4
13
- - uses: pnpm/action-setup@v4
14
- with:
15
- version: 10
16
- - uses: actions/setup-node@v4
17
- with:
18
- node-version-file: '.nvmrc'
19
- cache: 'pnpm'
20
- - run: pnpm install --frozen-lockfile
21
- - run: pnpm build
22
- - run: pnpm lint
23
- - run: pnpm test
@@ -1,29 +0,0 @@
1
- name: Release
2
- on:
3
- push:
4
- branches: [main]
5
-
6
- concurrency: ${{ github.workflow }}-${{ github.ref }}
7
-
8
- jobs:
9
- release:
10
- runs-on: ubuntu-latest
11
- steps:
12
- - uses: actions/checkout@v4
13
- - uses: pnpm/action-setup@v4
14
- with:
15
- version: 10
16
- - uses: actions/setup-node@v4
17
- with:
18
- node-version-file: '.nvmrc'
19
- cache: 'pnpm'
20
- registry-url: 'https://registry.npmjs.org'
21
- - run: pnpm install --frozen-lockfile
22
- - run: pnpm build
23
- - uses: changesets/action@v1
24
- with:
25
- publish: pnpm changeset publish
26
- version: pnpm changeset version
27
- env:
28
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
29
- NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
package/.nvmrc DELETED
@@ -1 +0,0 @@
1
- 22
@@ -1,4 +0,0 @@
1
- owner: Mehdi Nabhani
2
- email: mehdi@geenius.app
3
- github: mxn2020
4
- organization: geenius
@@ -1,7 +0,0 @@
1
- ideas:
2
- - title: "CLI scaffolding"
3
- description: "Add a create command to geenius-cli for this package"
4
- priority: medium
5
- - title: "Vue adapter"
6
- description: "Add Vue 3 support alongside React and SolidJS"
7
- priority: low
@@ -1,11 +0,0 @@
1
- name: geenius-adapters
2
- description: "Geenius Adapters — Backend adapter abstraction layer for auth, db, payments, AI, and storage"
3
- category: library
4
- priority: high
5
- tags:
6
- - geenius
7
- - npm-package
8
- - react
9
- - solidjs
10
- deploy_url: null
11
- npm_scope: "@geenius-adapters"