summaryrefslogtreecommitdiffhomepage
path: root/packages/console/core/src
diff options
context:
space:
mode:
authorFrank <[email protected]>2025-10-08 13:31:12 -0400
committerFrank <[email protected]>2025-10-08 13:31:15 -0400
commitb168bfe40df1ac9c3185766cdcaed688572c1a8a (patch)
treeec736534cc5fc3ab8e43207a6ddc6d62b1a7a927 /packages/console/core/src
parent1d621260ff83751e70859c3f4c6a834bb481ed81 (diff)
downloadopencode-b168bfe40df1ac9c3185766cdcaed688572c1a8a.tar.gz
opencode-b168bfe40df1ac9c3185766cdcaed688572c1a8a.zip
wip: zen
Diffstat (limited to 'packages/console/core/src')
-rw-r--r--packages/console/core/src/identifier.ts1
-rw-r--r--packages/console/core/src/provider.ts49
-rw-r--r--packages/console/core/src/schema/provider.sql.ts14
3 files changed, 64 insertions, 0 deletions
diff --git a/packages/console/core/src/identifier.ts b/packages/console/core/src/identifier.ts
index 98c12a6c6..502ad6ac2 100644
--- a/packages/console/core/src/identifier.ts
+++ b/packages/console/core/src/identifier.ts
@@ -8,6 +8,7 @@ export namespace Identifier {
key: "key",
model: "mod",
payment: "pay",
+ provider: "prv",
usage: "usg",
user: "usr",
workspace: "wrk",
diff --git a/packages/console/core/src/provider.ts b/packages/console/core/src/provider.ts
new file mode 100644
index 000000000..1f8c07b9f
--- /dev/null
+++ b/packages/console/core/src/provider.ts
@@ -0,0 +1,49 @@
+import { z } from "zod"
+import { fn } from "./util/fn"
+import { Actor } from "./actor"
+import { and, Database, eq, isNull } from "./drizzle"
+import { Identifier } from "./identifier"
+import { ProviderTable } from "./schema/provider.sql"
+
+export namespace Provider {
+ export const list = fn(z.void(), () =>
+ Database.use((tx) =>
+ tx
+ .select()
+ .from(ProviderTable)
+ .where(and(eq(ProviderTable.workspaceID, Actor.workspace()), isNull(ProviderTable.timeDeleted))),
+ ),
+ )
+
+ export const create = fn(
+ z.object({
+ provider: z.string().min(1).max(64),
+ credentials: z.string(),
+ }),
+ ({ provider, credentials }) =>
+ Database.use((tx) =>
+ tx
+ .insert(ProviderTable)
+ .values({
+ id: Identifier.create("provider"),
+ workspaceID: Actor.workspace(),
+ provider,
+ credentials,
+ })
+ .onDuplicateKeyUpdate({
+ set: {
+ credentials,
+ timeDeleted: null,
+ },
+ }),
+ ),
+ )
+
+ export const remove = fn(z.object({ provider: z.string() }), ({ provider }) =>
+ Database.transaction((tx) =>
+ tx
+ .delete(ProviderTable)
+ .where(and(eq(ProviderTable.provider, provider), eq(ProviderTable.workspaceID, Actor.workspace()))),
+ ),
+ )
+}
diff --git a/packages/console/core/src/schema/provider.sql.ts b/packages/console/core/src/schema/provider.sql.ts
new file mode 100644
index 000000000..11be5b4d7
--- /dev/null
+++ b/packages/console/core/src/schema/provider.sql.ts
@@ -0,0 +1,14 @@
+import { mysqlTable, text, uniqueIndex, varchar } from "drizzle-orm/mysql-core"
+import { timestamps, workspaceColumns } from "../drizzle/types"
+import { workspaceIndexes } from "./workspace.sql"
+
+export const ProviderTable = mysqlTable(
+ "provider",
+ {
+ ...workspaceColumns,
+ ...timestamps,
+ provider: varchar("provider", { length: 64 }).notNull(),
+ credentials: text("credentials").notNull(),
+ },
+ (table) => [...workspaceIndexes(table), uniqueIndex("workspace_provider").on(table.workspaceID, table.provider)],
+)