provider.ts 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import { z } from "zod"
  2. import { fn } from "./util/fn"
  3. import { Actor } from "./actor"
  4. import { and, Database, eq, isNull } from "./drizzle"
  5. import { Identifier } from "./identifier"
  6. import { ProviderTable } from "./schema/provider.sql"
  7. export namespace Provider {
  8. export const list = fn(z.void(), () =>
  9. Database.use((tx) =>
  10. tx
  11. .select()
  12. .from(ProviderTable)
  13. .where(and(eq(ProviderTable.workspaceID, Actor.workspace()), isNull(ProviderTable.timeDeleted))),
  14. ),
  15. )
  16. export const create = fn(
  17. z.object({
  18. provider: z.string().min(1).max(64),
  19. credentials: z.string(),
  20. }),
  21. async ({ provider, credentials }) => {
  22. Actor.assertAdmin()
  23. return Database.use((tx) =>
  24. tx
  25. .insert(ProviderTable)
  26. .values({
  27. id: Identifier.create("provider"),
  28. workspaceID: Actor.workspace(),
  29. provider,
  30. credentials,
  31. })
  32. .onDuplicateKeyUpdate({
  33. set: {
  34. credentials,
  35. timeDeleted: null,
  36. },
  37. }),
  38. )
  39. },
  40. )
  41. export const remove = fn(
  42. z.object({
  43. provider: z.string(),
  44. }),
  45. async ({ provider }) => {
  46. Actor.assertAdmin()
  47. return Database.use((tx) =>
  48. tx
  49. .delete(ProviderTable)
  50. .where(and(eq(ProviderTable.provider, provider), eq(ProviderTable.workspaceID, Actor.workspace()))),
  51. )
  52. },
  53. )
  54. }