provider.ts 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  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(
  14. and(eq(ProviderTable.workspaceID, Actor.workspace()), isNull(ProviderTable.timeDeleted)),
  15. ),
  16. ),
  17. )
  18. export const create = fn(
  19. z.object({
  20. provider: z.string().min(1).max(64),
  21. credentials: z.string(),
  22. }),
  23. async ({ provider, credentials }) => {
  24. Actor.assertAdmin()
  25. return Database.use((tx) =>
  26. tx
  27. .insert(ProviderTable)
  28. .values({
  29. id: Identifier.create("provider"),
  30. workspaceID: Actor.workspace(),
  31. provider,
  32. credentials,
  33. })
  34. .onDuplicateKeyUpdate({
  35. set: {
  36. credentials,
  37. timeDeleted: null,
  38. },
  39. }),
  40. )
  41. },
  42. )
  43. export const remove = fn(
  44. z.object({
  45. provider: z.string(),
  46. }),
  47. async ({ provider }) => {
  48. Actor.assertAdmin()
  49. return Database.transaction((tx) =>
  50. tx
  51. .delete(ProviderTable)
  52. .where(
  53. and(
  54. eq(ProviderTable.provider, provider),
  55. eq(ProviderTable.workspaceID, Actor.workspace()),
  56. ),
  57. ),
  58. )
  59. },
  60. )
  61. }