diff options
| author | Frank <[email protected]> | 2025-10-08 13:31:12 -0400 |
|---|---|---|
| committer | Frank <[email protected]> | 2025-10-08 13:31:15 -0400 |
| commit | b168bfe40df1ac9c3185766cdcaed688572c1a8a (patch) | |
| tree | ec736534cc5fc3ab8e43207a6ddc6d62b1a7a927 /packages/console/core/src | |
| parent | 1d621260ff83751e70859c3f4c6a834bb481ed81 (diff) | |
| download | opencode-b168bfe40df1ac9c3185766cdcaed688572c1a8a.tar.gz opencode-b168bfe40df1ac9c3185766cdcaed688572c1a8a.zip | |
wip: zen
Diffstat (limited to 'packages/console/core/src')
| -rw-r--r-- | packages/console/core/src/identifier.ts | 1 | ||||
| -rw-r--r-- | packages/console/core/src/provider.ts | 49 | ||||
| -rw-r--r-- | packages/console/core/src/schema/provider.sql.ts | 14 |
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)], +) |
