appos 0.3.2-0 → 0.3.4-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 (158) hide show
  1. package/dist/bin/auth-schema-CcqAJY9P.mjs +2 -0
  2. package/dist/bin/better-sqlite3-CuQ3hsWl.mjs +2 -0
  3. package/dist/bin/bun-sql-DGeo-s_M.mjs +2 -0
  4. package/dist/bin/cache-3oO07miM.mjs +2 -0
  5. package/dist/bin/chunk-l9p7A9gZ.mjs +2 -0
  6. package/dist/bin/cockroach-BaICwY7N.mjs +2 -0
  7. package/dist/bin/database-CaysWPpa.mjs +2 -0
  8. package/dist/bin/esm-BvsccvmM.mjs +2 -0
  9. package/dist/bin/esm-CGKzJ7Am.mjs +3 -0
  10. package/dist/bin/event-DnSe3eh0.mjs +8 -0
  11. package/dist/bin/extract-blob-metadata-iqwTl2ft.mjs +170 -0
  12. package/dist/bin/generate-image-variant-Lyx0vhM6.mjs +2 -0
  13. package/dist/bin/generate-preview-0MrKxslA.mjs +2 -0
  14. package/dist/bin/libsql-DQJrZsU9.mjs +2 -0
  15. package/dist/bin/logger-BAGZLUzj.mjs +2 -0
  16. package/dist/bin/main.mjs +1201 -190
  17. package/dist/bin/migrator-B7iNKM8N.mjs +2 -0
  18. package/dist/bin/migrator-BKE1cSQQ.mjs +2 -0
  19. package/dist/bin/migrator-BXcbc9zs.mjs +2 -0
  20. package/dist/bin/migrator-B_XhRWZC.mjs +8 -0
  21. package/dist/bin/migrator-Bz52Gtr8.mjs +2 -0
  22. package/dist/bin/migrator-C7W-cZHB.mjs +2 -0
  23. package/dist/bin/migrator-CEnKyGSW.mjs +2 -0
  24. package/dist/bin/migrator-CHzIIl5X.mjs +2 -0
  25. package/dist/bin/migrator-CR-rjZdM.mjs +2 -0
  26. package/dist/bin/migrator-CjIr1ZCx.mjs +8 -0
  27. package/dist/bin/migrator-Cuubh2dg.mjs +2 -0
  28. package/dist/bin/migrator-D8m-ORbr.mjs +8 -0
  29. package/dist/bin/migrator-DBFwrhZH.mjs +2 -0
  30. package/dist/bin/migrator-DLmhW9u_.mjs +2 -0
  31. package/dist/bin/migrator-DLoHx807.mjs +4 -0
  32. package/dist/bin/migrator-DtN_iS87.mjs +2 -0
  33. package/dist/bin/migrator-Yc57lb3w.mjs +2 -0
  34. package/dist/bin/migrator-cEVXH3xC.mjs +2 -0
  35. package/dist/bin/migrator-hWi-sYIq.mjs +2 -0
  36. package/dist/bin/mysql2-DufFWkj4.mjs +2 -0
  37. package/dist/bin/neon-serverless-5a4h2VFz.mjs +2 -0
  38. package/dist/bin/node-CiOp4xrR.mjs +22 -0
  39. package/dist/bin/node-mssql-DvZGaUkB.mjs +322 -0
  40. package/dist/bin/node-postgres-BqbJVBQY.mjs +2 -0
  41. package/dist/bin/node-postgres-DnhRTTO8.mjs +2 -0
  42. package/dist/bin/open-0ksnL0S8.mjs +2 -0
  43. package/dist/bin/pdf-sUYeFPr4.mjs +14 -0
  44. package/dist/bin/pg-CaH8ptj-.mjs +2 -0
  45. package/dist/bin/pg-core-BLTZt9AH.mjs +8 -0
  46. package/dist/bin/pg-core-CGzidKaA.mjs +2 -0
  47. package/dist/bin/pglite-BJB9z7Ju.mjs +2 -0
  48. package/dist/bin/planetscale-serverless-H3RfLlMK.mjs +13 -0
  49. package/dist/bin/postgres-js-DuOf1eWm.mjs +2 -0
  50. package/dist/bin/purge-attachment-DQXpTtTx.mjs +2 -0
  51. package/dist/bin/purge-audit-logs-BEt2J2gD.mjs +2 -0
  52. package/dist/bin/{purge-unattached-blobs-Duvv8Izd.mjs → purge-unattached-blobs-DOmk4ddJ.mjs} +1 -1
  53. package/dist/bin/query-builder-DSRrR6X_.mjs +8 -0
  54. package/dist/bin/query-builder-V8-LDhvA.mjs +3 -0
  55. package/dist/bin/session-CdB1A-LB.mjs +14 -0
  56. package/dist/bin/session-Cl2e-_i8.mjs +8 -0
  57. package/dist/bin/singlestore-COft6TlR.mjs +8 -0
  58. package/dist/bin/sql-D-eKV1Dn.mjs +2 -0
  59. package/dist/bin/sqlite-cloud-Co9jOn5G.mjs +2 -0
  60. package/dist/bin/sqlite-proxy-Cpu78gJF.mjs +2 -0
  61. package/dist/bin/src-C-oXmCzx.mjs +6 -0
  62. package/dist/bin/table-3zUpWkMg.mjs +2 -0
  63. package/dist/bin/track-db-changes-DWyY5jXm.mjs +2 -0
  64. package/dist/bin/utils-CyoeCJlf.mjs +2 -0
  65. package/dist/bin/utils-EoqYQKy1.mjs +2 -0
  66. package/dist/bin/utils-bsypyqPl.mjs +2 -0
  67. package/dist/bin/vercel-postgres-HWL6xtqi.mjs +2 -0
  68. package/dist/bin/workflow-zxHDyfLq.mjs +2 -0
  69. package/dist/bin/youch-handler-DrYdbUhe.mjs +2 -0
  70. package/dist/bin/zod-MJjkEkRY.mjs +24 -0
  71. package/dist/exports/api/_virtual/rolldown_runtime.mjs +36 -1
  72. package/dist/exports/api/app-context.mjs +24 -1
  73. package/dist/exports/api/auth-schema.mjs +373 -1
  74. package/dist/exports/api/auth.d.mts +4 -0
  75. package/dist/exports/api/auth.mjs +188 -1
  76. package/dist/exports/api/cache.d.mts +2 -2
  77. package/dist/exports/api/cache.mjs +28 -1
  78. package/dist/exports/api/config.mjs +72 -1
  79. package/dist/exports/api/constants.mjs +92 -1
  80. package/dist/exports/api/container.mjs +49 -1
  81. package/dist/exports/api/database.mjs +218 -1
  82. package/dist/exports/api/event.mjs +236 -1
  83. package/dist/exports/api/i18n.mjs +45 -1
  84. package/dist/exports/api/index.mjs +20 -1
  85. package/dist/exports/api/instrumentation.mjs +40 -1
  86. package/dist/exports/api/logger.mjs +26 -1
  87. package/dist/exports/api/mailer.mjs +37 -1
  88. package/dist/exports/api/middleware.mjs +73 -1
  89. package/dist/exports/api/openapi.mjs +507 -1
  90. package/dist/exports/api/orm.mjs +43 -1
  91. package/dist/exports/api/otel.mjs +56 -1
  92. package/dist/exports/api/redis.mjs +41 -1
  93. package/dist/exports/api/storage-schema.mjs +72 -1
  94. package/dist/exports/api/storage.mjs +833 -1
  95. package/dist/exports/api/web/auth.mjs +17 -1
  96. package/dist/exports/api/workflow.mjs +196 -1
  97. package/dist/exports/api/workflows/_virtual/rolldown_runtime.mjs +36 -1
  98. package/dist/exports/api/workflows/api/auth-schema.mjs +373 -1
  99. package/dist/exports/api/workflows/api/auth.d.mts +4 -0
  100. package/dist/exports/api/workflows/api/cache.d.mts +2 -2
  101. package/dist/exports/api/workflows/api/event.mjs +126 -1
  102. package/dist/exports/api/workflows/api/redis.mjs +3 -1
  103. package/dist/exports/api/workflows/api/workflow.mjs +135 -1
  104. package/dist/exports/api/workflows/constants.mjs +23 -1
  105. package/dist/exports/api/workflows/extract-blob-metadata.mjs +132 -1
  106. package/dist/exports/api/workflows/generate-image-variant.d.mts +2 -2
  107. package/dist/exports/api/workflows/generate-image-variant.mjs +118 -1
  108. package/dist/exports/api/workflows/generate-preview.mjs +160 -1
  109. package/dist/exports/api/workflows/index.mjs +3 -1
  110. package/dist/exports/api/workflows/purge-attachment.mjs +34 -1
  111. package/dist/exports/api/workflows/purge-audit-logs.mjs +47 -1
  112. package/dist/exports/api/workflows/purge-unattached-blobs.mjs +46 -1
  113. package/dist/exports/api/workflows/track-db-changes.mjs +110 -1
  114. package/dist/exports/cli/_virtual/rolldown_runtime.mjs +36 -1
  115. package/dist/exports/cli/api/auth-schema.mjs +373 -1
  116. package/dist/exports/cli/api/auth.d.mts +4 -0
  117. package/dist/exports/cli/api/cache.d.mts +2 -2
  118. package/dist/exports/cli/api/event.mjs +126 -1
  119. package/dist/exports/cli/api/redis.mjs +3 -1
  120. package/dist/exports/cli/api/workflow.mjs +135 -1
  121. package/dist/exports/cli/api/workflows/extract-blob-metadata.mjs +132 -1
  122. package/dist/exports/cli/api/workflows/generate-image-variant.mjs +118 -1
  123. package/dist/exports/cli/api/workflows/generate-preview.mjs +160 -1
  124. package/dist/exports/cli/api/workflows/purge-attachment.mjs +34 -1
  125. package/dist/exports/cli/api/workflows/purge-audit-logs.mjs +47 -1
  126. package/dist/exports/cli/api/workflows/purge-unattached-blobs.mjs +46 -1
  127. package/dist/exports/cli/api/workflows/track-db-changes.mjs +110 -1
  128. package/dist/exports/cli/command.d.mts +2 -0
  129. package/dist/exports/cli/command.mjs +43 -1
  130. package/dist/exports/cli/constants.mjs +23 -1
  131. package/dist/exports/cli/index.mjs +3 -1
  132. package/dist/exports/devtools/index.js +4 -1
  133. package/dist/exports/tests/api/auth.d.mts +4 -0
  134. package/dist/exports/tests/api/cache.d.mts +2 -2
  135. package/dist/exports/tests/api/middleware/i18n.mjs +1 -1
  136. package/dist/exports/tests/api/middleware/youch-handler.mjs +1 -1
  137. package/dist/exports/tests/api/openapi.mjs +1 -1
  138. package/dist/exports/tests/api/server.mjs +1 -1
  139. package/dist/exports/tests/api/storage.d.mts +4 -4
  140. package/dist/exports/tests/constants.mjs +1 -1
  141. package/dist/exports/vendors/date.js +1 -1
  142. package/dist/exports/vendors/toolkit.js +1 -1
  143. package/dist/exports/vendors/zod.js +1 -1
  144. package/dist/exports/vitest/globals.mjs +1 -1
  145. package/dist/exports/web/auth.js +75 -1
  146. package/dist/exports/web/i18n.js +45 -1
  147. package/dist/exports/web/index.js +8 -1
  148. package/package.json +19 -18
  149. package/dist/bin/auth-schema-Va0CYicu.mjs +0 -2
  150. package/dist/bin/event-8JibGFH_.mjs +0 -2
  151. package/dist/bin/extract-blob-metadata-DjPfHtQ2.mjs +0 -2
  152. package/dist/bin/generate-image-variant-D5VDFyWj.mjs +0 -2
  153. package/dist/bin/generate-preview-Dssw7w5U.mjs +0 -2
  154. package/dist/bin/purge-attachment-BBPzIxwt.mjs +0 -2
  155. package/dist/bin/purge-audit-logs-BeZy3IFM.mjs +0 -2
  156. package/dist/bin/track-db-changes-CFykw_YO.mjs +0 -2
  157. package/dist/bin/workflow-BNUZrj4F.mjs +0 -2
  158. package/dist/bin/youch-handler-BadUgHb0.mjs +0 -2
@@ -1 +1,17 @@
1
- import"@better-auth/passkey/client";import"@better-auth/sso/client";import"better-auth/client/plugins";import"better-auth/react";const e=`/auth`,t=``;export{e as AUTH_BASE_PATH,t as AUTH_BASE_URL};
1
+ import "@better-auth/passkey/client";
2
+ import "@better-auth/sso/client";
3
+ import "better-auth/client/plugins";
4
+ import "better-auth/react";
5
+
6
+ //#region src/web/auth.ts
7
+ /**
8
+ * Default base path for auth routes.
9
+ */
10
+ const AUTH_BASE_PATH = "/auth";
11
+ /**
12
+ * Default base URL (empty - same origin).
13
+ */
14
+ const AUTH_BASE_URL = "";
15
+
16
+ //#endregion
17
+ export { AUTH_BASE_PATH, AUTH_BASE_URL };
@@ -1 +1,196 @@
1
- import{APPOS_DIR as e,FILE_EXT as t,WORKFLOWS_DIR as n}from"./constants.mjs";import{basename as r,join as i}from"node:path";import{glob as a}from"node:fs/promises";import{camelCase as o}from"es-toolkit";function s(e){let t=null,n=null,r=null,i=null,a=async i=>{if(!t||!r)throw Error(`Workflow "${n}" not registered`);let a=r,o=a.workflowID;if(!o)throw Error(`DBOS.workflowID is not available in this context`);let s={container:t,workflowId:o,input:i,step:(e,t)=>a.runStep(t,{name:e})};return e.run(s)};return{inputSchema:e.input,get name(){return n},register(o,s,c){t=o,n=s,r=c,i=c.registerWorkflow(a,{name:s,...e.config})},async start(t){if(!i||!n||!r)throw Error(`Workflow not registered. Ensure the worker is started before triggering workflows.`);let a=e.input.parse(t),o=await r.startWorkflow(i)(a);return{workflowId:o.workflowID,getStatus:()=>o.getStatus(),getResult:()=>o.getResult()}}}}function c(e){let t=null,n=null,r=null,i=async(i,a)=>{if(!t||!r)throw Error(`Workflow "${n}" not registered`);let o=r,s=o.workflowID;if(!s)throw Error(`DBOS.workflowID is not available in this context`);let c={container:t,workflowId:s,scheduledTime:i,step:(e,t)=>o.runStep(t,{name:e})};return e.run(c)};return{crontab:e.crontab,get name(){return n},register(a,o,s){t=a,n=o,r=s,s.registerScheduled(s.registerWorkflow(i,{name:o}),{crontab:e.crontab})}}}function l(e){return o(r(e,`.ts`))}async function u(r){let{container:o,dbos:s}=r,c=r.workflowsDir??i(process.cwd(),e,n),u=(e,t)=>{try{e.register(o,t,s)}catch(e){if(!(e instanceof Error)||!e.message.includes(`already registered`))throw e}},{extractBlobMetadata:d}=await import(`./workflows/extract-blob-metadata.mjs`),{generateImageVariant:f}=await import(`./workflows/generate-image-variant.mjs`),{generatePreview:p}=await import(`./workflows/generate-preview.mjs`),{purgeAttachment:m}=await import(`./workflows/purge-attachment.mjs`),{trackDbChanges:h}=await import(`./workflows/track-db-changes.mjs`),{definePurgeAuditLogs:g}=await import(`./workflows/purge-audit-logs.mjs`),{definePurgeUnattachedBlobs:_}=await import(`./workflows/purge-unattached-blobs.mjs`);u(d,`extractBlobMetadata`),u(f,`generateImageVariant`),u(p,`generatePreview`),u(m,`purgeAttachment`),u(h,`trackDbChanges`),u(g(o.auth.auditLog?.purgeCron),`purgeAuditLogs`),u(_(o.storage.primary.purgeCron),`purgeUnattachedBlobs`);let v=await Array.fromAsync(a(`${c}/**/*.${t}`,{exclude:[`**/*.test.ts`,`**/*.spec.ts`,`**/*.test.js`,`**/*.spec.js`]}));for(let e of v){let t=await import(e);if(t.default&&typeof t.default==`object`&&`register`in t.default){let n=l(e);u(t.default,n)}}}export{c as defineScheduledWorkflow,s as defineWorkflow,u as loadWorkflows};
1
+ import { APPOS_DIR, FILE_EXT, WORKFLOWS_DIR } from "./constants.mjs";
2
+ import { basename, join } from "node:path";
3
+ import { glob } from "node:fs/promises";
4
+ import { camelCase } from "es-toolkit";
5
+
6
+ //#region src/api/workflow.ts
7
+ /**
8
+ * Defines a durable workflow that can be triggered with type-safe input.
9
+ *
10
+ * Workflows are:
11
+ * - Durable: Automatically resume after crashes or restarts
12
+ * - Type-safe: Input and output types are inferred from the schema
13
+ * - Container-aware: Access to db, mailer, logger via ctx.container
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * // api/workflows/send-welcome-email.ts
18
+ * export default defineWorkflow({
19
+ * input: z.object({
20
+ * userId: z.string(),
21
+ * email: z.string().email(),
22
+ * }),
23
+ * async run(ctx) {
24
+ * const user = await ctx.container.db.primary.query.users.findFirst({
25
+ * where: eq(users.id, ctx.input.userId),
26
+ * });
27
+ *
28
+ * await ctx.container.mailer.send({
29
+ * to: ctx.input.email,
30
+ * subject: "Welcome!",
31
+ * });
32
+ *
33
+ * return { sent: true };
34
+ * },
35
+ * });
36
+ *
37
+ * // Triggering from a route:
38
+ * import sendWelcomeEmail from "#api/workflows/send-welcome-email.ts";
39
+ * const handle = await sendWelcomeEmail.start({ userId: "123", email: "..." });
40
+ * ```
41
+ */
42
+ function defineWorkflow(options) {
43
+ let container = null;
44
+ let workflowName = null;
45
+ let dbosInstance = null;
46
+ let registeredFn = null;
47
+ const workflowFn = async (input) => {
48
+ if (!container || !dbosInstance) throw new Error(`Workflow "${workflowName}" not registered`);
49
+ const dbos = dbosInstance;
50
+ const workflowId = dbos.workflowID;
51
+ if (!workflowId) throw new Error("DBOS.workflowID is not available in this context");
52
+ const ctx = {
53
+ container,
54
+ workflowId,
55
+ input,
56
+ step: (name, fn) => dbos.runStep(fn, { name })
57
+ };
58
+ return options.run(ctx);
59
+ };
60
+ return {
61
+ inputSchema: options.input,
62
+ get name() {
63
+ return workflowName;
64
+ },
65
+ register(c, name, dbos) {
66
+ container = c;
67
+ workflowName = name;
68
+ dbosInstance = dbos;
69
+ registeredFn = dbos.registerWorkflow(workflowFn, {
70
+ name,
71
+ ...options.config
72
+ });
73
+ },
74
+ async start(input) {
75
+ if (!registeredFn || !workflowName || !dbosInstance) throw new Error("Workflow not registered. Ensure the worker is started before triggering workflows.");
76
+ const validated = options.input.parse(input);
77
+ const handle = await dbosInstance.startWorkflow(registeredFn)(validated);
78
+ return {
79
+ workflowId: handle.workflowID,
80
+ getStatus: () => handle.getStatus(),
81
+ getResult: () => handle.getResult()
82
+ };
83
+ }
84
+ };
85
+ }
86
+ /**
87
+ * Defines a scheduled workflow that runs on a cron schedule.
88
+ *
89
+ * @example
90
+ * ```typescript
91
+ * // api/workflows/daily-report.ts
92
+ * export default defineScheduledWorkflow({
93
+ * crontab: "0 9 * * *", // 9am daily
94
+ * async run(ctx) {
95
+ * const stats = await ctx.container.db.primary.query.stats.findMany();
96
+ * await ctx.container.mailer.send({
97
+ * to: "team@company.com",
98
+ * subject: `Daily Report - ${ctx.scheduledTime.toDateString()}`,
99
+ * });
100
+ * },
101
+ * });
102
+ * ```
103
+ */
104
+ function defineScheduledWorkflow(options) {
105
+ let container = null;
106
+ let workflowName = null;
107
+ let dbosInstance = null;
108
+ const workflowFn = async (scheduledTime, _startTime) => {
109
+ if (!container || !dbosInstance) throw new Error(`Workflow "${workflowName}" not registered`);
110
+ const dbos = dbosInstance;
111
+ const workflowId = dbos.workflowID;
112
+ if (!workflowId) throw new Error("DBOS.workflowID is not available in this context");
113
+ const ctx = {
114
+ container,
115
+ workflowId,
116
+ scheduledTime,
117
+ step: (name, fn) => dbos.runStep(fn, { name })
118
+ };
119
+ return options.run(ctx);
120
+ };
121
+ return {
122
+ crontab: options.crontab,
123
+ get name() {
124
+ return workflowName;
125
+ },
126
+ register(c, name, dbos) {
127
+ container = c;
128
+ workflowName = name;
129
+ dbosInstance = dbos;
130
+ dbos.registerScheduled(dbos.registerWorkflow(workflowFn, { name }), { crontab: options.crontab });
131
+ }
132
+ };
133
+ }
134
+ /**
135
+ * Extracts workflow name from filepath as camelCase.
136
+ */
137
+ function getWorkflowName(filepath) {
138
+ return camelCase(basename(filepath, ".ts"));
139
+ }
140
+ /**
141
+ * Auto-discovers and registers all workflows.
142
+ *
143
+ * Algorithm:
144
+ * 1. Register built-in workflows (extractBlobMetadata, generateImageVariant, etc.)
145
+ * 2. Register scheduled workflows (purgeAuditLogs, purgeUnattachedBlobs)
146
+ * 3. Glob all .ts files in the directory (excluding test files)
147
+ * 4. Import each module's default export
148
+ * 5. If it has a register method, call register(container, name, dbos)
149
+ *
150
+ * @param opts - Load workflows options
151
+ */
152
+ async function loadWorkflows(opts) {
153
+ const { container, dbos } = opts;
154
+ const workflowsDir = opts.workflowsDir ?? join(process.cwd(), APPOS_DIR, WORKFLOWS_DIR);
155
+ /**
156
+ * Helper to safely register a workflow, ignoring "already registered" errors.
157
+ * This allows tests to call defineCli() multiple times without errors.
158
+ */
159
+ const safeRegister = (workflow, name) => {
160
+ try {
161
+ workflow.register(container, name, dbos);
162
+ } catch (error) {
163
+ if (!(error instanceof Error) || !error.message.includes("already registered")) throw error;
164
+ }
165
+ };
166
+ const { extractBlobMetadata } = await import("./workflows/extract-blob-metadata.mjs");
167
+ const { generateImageVariant } = await import("./workflows/generate-image-variant.mjs");
168
+ const { generatePreview } = await import("./workflows/generate-preview.mjs");
169
+ const { purgeAttachment } = await import("./workflows/purge-attachment.mjs");
170
+ const { trackDbChanges } = await import("./workflows/track-db-changes.mjs");
171
+ const { definePurgeAuditLogs } = await import("./workflows/purge-audit-logs.mjs");
172
+ const { definePurgeUnattachedBlobs } = await import("./workflows/purge-unattached-blobs.mjs");
173
+ safeRegister(extractBlobMetadata, "extractBlobMetadata");
174
+ safeRegister(generateImageVariant, "generateImageVariant");
175
+ safeRegister(generatePreview, "generatePreview");
176
+ safeRegister(purgeAttachment, "purgeAttachment");
177
+ safeRegister(trackDbChanges, "trackDbChanges");
178
+ safeRegister(definePurgeAuditLogs(container.auth.auditLog?.purgeCron), "purgeAuditLogs");
179
+ safeRegister(definePurgeUnattachedBlobs(container.storage.primary.purgeCron), "purgeUnattachedBlobs");
180
+ const files = await Array.fromAsync(glob(`${workflowsDir}/**/*.${FILE_EXT}`, { exclude: [
181
+ "**/*.test.ts",
182
+ "**/*.spec.ts",
183
+ "**/*.test.js",
184
+ "**/*.spec.js"
185
+ ] }));
186
+ for (const file of files) {
187
+ const mod = await import(file);
188
+ if (mod.default && typeof mod.default === "object" && "register" in mod.default) {
189
+ const name = getWorkflowName(file);
190
+ safeRegister(mod.default, name);
191
+ }
192
+ }
193
+ }
194
+
195
+ //#endregion
196
+ export { defineScheduledWorkflow, defineWorkflow, loadWorkflows };
@@ -1 +1,36 @@
1
- var e=Object.defineProperty,t=Object.getOwnPropertyDescriptor,n=Object.getOwnPropertyNames,r=Object.prototype.hasOwnProperty,i=(t,n)=>{let r={};for(var i in t)e(r,i,{get:t[i],enumerable:!0});return n&&e(r,Symbol.toStringTag,{value:`Module`}),r},a=(i,a,o,s)=>{if(a&&typeof a==`object`||typeof a==`function`)for(var c=n(a),l=0,u=c.length,d;l<u;l++)d=c[l],!r.call(i,d)&&d!==o&&e(i,d,{get:(e=>a[e]).bind(null,d),enumerable:!(s=t(a,d))||s.enumerable});return i},o=(e,t,n)=>(a(e,t,`default`),n&&a(n,t,`default`));export{i as __export,o as __reExport};
1
+ //#region rolldown:runtime
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (all, symbols) => {
7
+ let target = {};
8
+ for (var name in all) {
9
+ __defProp(target, name, {
10
+ get: all[name],
11
+ enumerable: true
12
+ });
13
+ }
14
+ if (symbols) {
15
+ __defProp(target, Symbol.toStringTag, { value: "Module" });
16
+ }
17
+ return target;
18
+ };
19
+ var __copyProps = (to, from, except, desc) => {
20
+ if (from && typeof from === "object" || typeof from === "function") {
21
+ for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
22
+ key = keys[i];
23
+ if (!__hasOwnProp.call(to, key) && key !== except) {
24
+ __defProp(to, key, {
25
+ get: ((k) => from[k]).bind(null, key),
26
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
27
+ });
28
+ }
29
+ }
30
+ }
31
+ return to;
32
+ };
33
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
34
+
35
+ //#endregion
36
+ export { __export, __reExport };
@@ -1 +1,373 @@
1
- import{sql as e}from"drizzle-orm";import{pgTable as t}from"drizzle-orm/pg-core";function n(){let n=t(`accounts`,t=>({id:t.text(`id`).primaryKey().default(e`uuidv7()`),accessToken:t.text(`access_token`),accessTokenExpiresAt:t.timestamp(`access_token_expires_at`,{mode:`string`,withTimezone:!0}),accountId:t.text(`account_id`).notNull(),createdAt:t.timestamp(`created_at`,{mode:`string`,withTimezone:!0}).default(e`NOW()`).notNull(),idToken:t.text(`id_token`),providerId:t.text(`provider_id`).notNull(),password:t.text(`password`),userId:t.text(`user_id`).notNull().references(()=>l.id,{onDelete:`cascade`}),refreshToken:t.text(`refresh_token`),refreshTokenExpiresAt:t.timestamp(`refresh_token_expires_at`,{mode:`string`,withTimezone:!0}),scope:t.text(`scope`),updatedAt:t.timestamp(`updated_at`,{mode:`string`,withTimezone:!0}).default(e`NOW()`).notNull()}),e=>[]),r=t(`api_keys`,t=>({id:t.text(`id`).primaryKey().default(e`uuidv7()`),name:t.text(`name`),enabled:t.boolean(`enabled`).default(!0),expiresAt:t.timestamp(`expires_at`,{mode:`string`,withTimezone:!0}),key:t.text(`key`).notNull(),lastRefillAt:t.timestamp(`last_refill_at`,{mode:`string`,withTimezone:!0}),lastRequest:t.timestamp(`last_request`,{mode:`string`,withTimezone:!0}),lastUsedAt:t.timestamp(`last_used_at`,{mode:`string`,withTimezone:!0}),metadata:t.text(`metadata`),permissions:t.text(`permissions`),prefix:t.text(`prefix`),rateLimitEnabled:t.boolean(`rate_limit_enabled`).default(!0),rateLimitTimeWindow:t.integer(`rate_limit_time_window`).default(864e5),rateLimitMax:t.integer(`rate_limit_max`).default(10),refillInterval:t.integer(`refill_interval`),refillAmount:t.integer(`refill_amount`),requestCount:t.integer(`request_count`),remaining:t.integer(`remaining`),start:t.text(`start`),userId:t.text(`user_id`).notNull().references(()=>l.id,{onDelete:`cascade`}),createdAt:t.timestamp(`created_at`,{mode:`string`,withTimezone:!0}).default(e`NOW()`).notNull(),updatedAt:t.timestamp(`updated_at`,{mode:`string`,withTimezone:!0}).default(e`NOW()`).notNull()}),e=>[]),i=t(`invitations`,t=>({id:t.text(`id`).primaryKey().default(e`uuidv7()`),email:t.text(`email`).notNull(),expiresAt:t.timestamp(`expires_at`,{mode:`string`,withTimezone:!0}).notNull(),inviterId:t.text(`inviter_id`).notNull().references(()=>l.id,{onDelete:`cascade`}),organizationId:t.text(`organization_id`).notNull().references(()=>o.id,{onDelete:`cascade`}),role:t.text(`role`),status:t.text(`status`).default(`pending`).notNull(),teamId:t.text(`team_id`),createdAt:t.timestamp(`created_at`,{mode:`string`,withTimezone:!0}).default(e`NOW()`).notNull(),updatedAt:t.timestamp(`updated_at`,{mode:`string`,withTimezone:!0}).default(e`NOW()`).notNull()}),e=>[]),a=t(`members`,t=>({id:t.text(`id`).primaryKey().default(e`uuidv7()`),organizationId:t.text(`organization_id`).notNull().references(()=>o.id,{onDelete:`cascade`}),role:t.text(`role`).default(`member`).notNull(),userId:t.text(`user_id`).notNull().references(()=>l.id,{onDelete:`cascade`}),createdAt:t.timestamp(`created_at`,{mode:`string`,withTimezone:!0}).default(e`NOW()`).notNull()}),e=>[]),o=t(`organizations`,t=>({id:t.text(`id`).primaryKey().default(e`uuidv7()`),name:t.text(`name`).notNull(),slug:t.text(`slug`).unique(),logo:t.text(`logo`),createdAt:t.timestamp(`created_at`,{mode:`string`,withTimezone:!0}).default(e`NOW()`).notNull(),updatedAt:t.timestamp(`updated_at`,{mode:`string`,withTimezone:!0}).default(e`NOW()`).notNull(),metadata:t.text(`metadata`)}),e=>[]),s=t(`sessions`,t=>({id:t.text(`id`).primaryKey().default(e`uuidv7()`),activeOrganizationId:t.text(`active_organization_id`).references(()=>o.id,{onDelete:`set null`}),activeTeamId:t.text(`active_team_id`),createdAt:t.timestamp(`created_at`,{mode:`string`,withTimezone:!0}).default(e`NOW()`).notNull(),expiresAt:t.timestamp(`expires_at`,{mode:`string`,withTimezone:!0}).notNull(),impersonatedBy:t.text(`impersonated_by`).references(()=>l.id,{onDelete:`set null`}),ipAddress:t.text(`ip_address`),token:t.text(`token`).notNull().unique(),updatedAt:t.timestamp(`updated_at`,{mode:`string`,withTimezone:!0}).default(e`NOW()`).notNull(),userAgent:t.text(`user_agent`),userId:t.text(`user_id`).notNull().references(()=>l.id,{onDelete:`cascade`})}),e=>[]),c=t(`sso_providers`,t=>({id:t.text(`id`).primaryKey().default(e`uuidv7()`),domain:t.text(`domain`).notNull(),issuer:t.text(`issuer`).notNull(),oidcConfig:t.text(`oidc_config`),organizationId:t.text(`organization_id`).references(()=>o.id,{onDelete:`cascade`}),providerId:t.text(`provider_id`).notNull().unique(),samlConfig:t.text(`saml_config`),userId:t.text(`user_id`).references(()=>l.id,{onDelete:`cascade`})}),e=>[]),l=t(`users`,t=>({id:t.text(`id`).primaryKey().default(e`uuidv7()`),banExpires:t.timestamp(`ban_expires`,{mode:`string`,withTimezone:!0}),banReason:t.text(`ban_reason`),banned:t.boolean(`banned`).default(!1),createdAt:t.timestamp(`created_at`,{mode:`string`,withTimezone:!0}).default(e`NOW()`).notNull(),displayUsername:t.text(`display_username`),email:t.text(`email`).notNull().unique(),emailVerified:t.boolean(`email_verified`).default(!1).notNull(),image:t.text(`image`),isAnonymous:t.boolean(`is_anonymous`),lastLoginMethod:t.text(`last_login_method`),name:t.text(`name`).notNull(),phoneNumber:t.text(`phone_number`).unique(),phoneNumberVerified:t.boolean(`phone_number_verified`),role:t.text(`role`),twoFactorEnabled:t.boolean(`two_factor_enabled`).default(!1),updatedAt:t.timestamp(`updated_at`,{mode:`string`,withTimezone:!0}).default(e`NOW()`).notNull(),username:t.text(`username`).unique()}),e=>[]),u=t(`teams`,t=>({id:t.text(`id`).primaryKey().default(e`uuidv7()`),name:t.text(`name`).notNull(),organizationId:t.text(`organization_id`).notNull().references(()=>o.id,{onDelete:`cascade`}),createdAt:t.timestamp(`created_at`,{mode:`string`,withTimezone:!0}).default(e`NOW()`).notNull(),updatedAt:t.timestamp(`updated_at`,{mode:`string`,withTimezone:!0}).default(e`NOW()`).notNull()}),e=>[]),d=t(`team_members`,t=>({id:t.text(`id`).primaryKey().default(e`uuidv7()`),teamId:t.text(`team_id`).notNull().references(()=>u.id,{onDelete:`cascade`}),userId:t.text(`user_id`).notNull().references(()=>l.id,{onDelete:`cascade`}),createdAt:t.timestamp(`created_at`,{mode:`string`,withTimezone:!0}).default(e`NOW()`).notNull()}),e=>[]),f=t(`two_factors`,t=>({id:t.text(`id`).primaryKey().default(e`uuidv7()`),secret:t.text(`secret`).notNull(),backupCodes:t.text(`backup_codes`).notNull(),userId:t.text(`user_id`).notNull().references(()=>l.id,{onDelete:`cascade`})}),e=>[]),p=t(`verifications`,t=>({id:t.text(`id`).primaryKey().default(e`uuidv7()`),createdAt:t.timestamp(`created_at`,{mode:`string`,withTimezone:!0}).default(e`NOW()`).notNull(),expiresAt:t.timestamp(`expires_at`,{mode:`string`,withTimezone:!0}).notNull(),identifier:t.text(`identifier`).notNull(),updatedAt:t.timestamp(`updated_at`,{mode:`string`,withTimezone:!0}).default(e`NOW()`).notNull(),value:t.text(`value`).notNull()}),e=>[]);return{tables:{accounts:n,apiKeys:r,auditLogs:t(`audit_logs`,t=>({id:t.text(`id`).primaryKey().default(e`uuidv7()`),tableName:t.text(`table_name`),action:t.text(`action`).notNull(),customAction:t.text(`custom_action`),oldData:t.jsonb(`old_data`),newData:t.jsonb(`new_data`),metadata:t.jsonb(`metadata`),organizationId:t.text(`organization_id`).references(()=>o.id,{onDelete:`set null`}),userId:t.text(`user_id`).references(()=>l.id,{onDelete:`set null`}),sessionId:t.text(`session_id`).references(()=>s.id,{onDelete:`set null`}),requestId:t.text(`request_id`),createdAt:t.timestamp(`created_at`,{mode:`string`,withTimezone:!0}).default(e`NOW()`).notNull()}),e=>[]),invitations:i,members:a,organizations:o,sessions:s,ssoProviders:c,teams:u,teamMembers:d,twoFactors:f,users:l,verifications:p},relations:e=>({users:{sessions:e.many.sessions({from:e.users.id,to:e.sessions.userId}),accounts:e.many.accounts({from:e.users.id,to:e.accounts.userId}),apiKeys:e.many.apiKeys({from:e.users.id,to:e.apiKeys.userId}),memberships:e.many.members({from:e.users.id,to:e.members.userId}),invitations:e.many.invitations({from:e.users.id,to:e.invitations.inviterId}),ssoProvider:e.one.ssoProviders({from:e.users.id,to:e.ssoProviders.userId}),twoFactor:e.one.twoFactors({from:e.users.id,to:e.twoFactors.userId})},sessions:{user:e.one.users({from:e.sessions.userId,to:e.users.id})},accounts:{user:e.one.users({from:e.accounts.userId,to:e.users.id})},apiKeys:{user:e.one.users({from:e.apiKeys.userId,to:e.users.id})},organizations:{members:e.many.members({from:e.organizations.id,to:e.members.organizationId}),invitations:e.many.invitations({from:e.organizations.id,to:e.invitations.organizationId}),teams:e.many.teams({from:e.organizations.id,to:e.teams.organizationId})},members:{organization:e.one.organizations({from:e.members.organizationId,to:e.organizations.id}),user:e.one.users({from:e.members.userId,to:e.users.id})},invitations:{organization:e.one.organizations({from:e.invitations.organizationId,to:e.organizations.id}),inviter:e.one.users({from:e.invitations.inviterId,to:e.users.id})},teams:{organization:e.one.organizations({from:e.teams.organizationId,to:e.organizations.id})},ssoProviders:{user:e.one.users({from:e.ssoProviders.userId,to:e.users.id})},verifications:{},twoFactors:{user:e.one.users({from:e.twoFactors.userId,to:e.users.id})},auditLogs:{organization:e.one.organizations({from:e.auditLogs.organizationId,to:e.organizations.id}),user:e.one.users({from:e.auditLogs.userId,to:e.users.id}),session:e.one.sessions({from:e.auditLogs.sessionId,to:e.sessions.id})}})}}export{n as defineAuthSchema};
1
+ import { sql } from "drizzle-orm";
2
+ import { pgTable } from "drizzle-orm/pg-core";
3
+
4
+ //#region src/api/auth-schema.ts
5
+ /**
6
+ * Defines the authentication schema for the application.
7
+ *
8
+ * @returns An object containing the schema and relations for the authentication tables.
9
+ */
10
+ function defineAuthSchema() {
11
+ const accounts = pgTable("accounts", (t) => ({
12
+ id: t.text("id").primaryKey().default(sql`uuidv7()`),
13
+ accessToken: t.text("access_token"),
14
+ accessTokenExpiresAt: t.timestamp("access_token_expires_at", {
15
+ mode: "string",
16
+ withTimezone: true
17
+ }),
18
+ accountId: t.text("account_id").notNull(),
19
+ createdAt: t.timestamp("created_at", {
20
+ mode: "string",
21
+ withTimezone: true
22
+ }).default(sql`NOW()`).notNull(),
23
+ idToken: t.text("id_token"),
24
+ providerId: t.text("provider_id").notNull(),
25
+ password: t.text("password"),
26
+ userId: t.text("user_id").notNull().references(() => users.id, { onDelete: "cascade" }),
27
+ refreshToken: t.text("refresh_token"),
28
+ refreshTokenExpiresAt: t.timestamp("refresh_token_expires_at", {
29
+ mode: "string",
30
+ withTimezone: true
31
+ }),
32
+ scope: t.text("scope"),
33
+ updatedAt: t.timestamp("updated_at", {
34
+ mode: "string",
35
+ withTimezone: true
36
+ }).default(sql`NOW()`).notNull()
37
+ }), (t) => []);
38
+ const apiKeys = pgTable("api_keys", (t) => ({
39
+ id: t.text("id").primaryKey().default(sql`uuidv7()`),
40
+ name: t.text("name"),
41
+ enabled: t.boolean("enabled").default(true),
42
+ expiresAt: t.timestamp("expires_at", {
43
+ mode: "string",
44
+ withTimezone: true
45
+ }),
46
+ key: t.text("key").notNull(),
47
+ lastRefillAt: t.timestamp("last_refill_at", {
48
+ mode: "string",
49
+ withTimezone: true
50
+ }),
51
+ lastRequest: t.timestamp("last_request", {
52
+ mode: "string",
53
+ withTimezone: true
54
+ }),
55
+ lastUsedAt: t.timestamp("last_used_at", {
56
+ mode: "string",
57
+ withTimezone: true
58
+ }),
59
+ metadata: t.text("metadata"),
60
+ permissions: t.text("permissions"),
61
+ prefix: t.text("prefix"),
62
+ rateLimitEnabled: t.boolean("rate_limit_enabled").default(true),
63
+ rateLimitTimeWindow: t.integer("rate_limit_time_window").default(864e5),
64
+ rateLimitMax: t.integer("rate_limit_max").default(10),
65
+ refillInterval: t.integer("refill_interval"),
66
+ refillAmount: t.integer("refill_amount"),
67
+ requestCount: t.integer("request_count"),
68
+ remaining: t.integer("remaining"),
69
+ start: t.text("start"),
70
+ userId: t.text("user_id").notNull().references(() => users.id, { onDelete: "cascade" }),
71
+ createdAt: t.timestamp("created_at", {
72
+ mode: "string",
73
+ withTimezone: true
74
+ }).default(sql`NOW()`).notNull(),
75
+ updatedAt: t.timestamp("updated_at", {
76
+ mode: "string",
77
+ withTimezone: true
78
+ }).default(sql`NOW()`).notNull()
79
+ }), (t) => []);
80
+ const invitations = pgTable("invitations", (t) => ({
81
+ id: t.text("id").primaryKey().default(sql`uuidv7()`),
82
+ email: t.text("email").notNull(),
83
+ expiresAt: t.timestamp("expires_at", {
84
+ mode: "string",
85
+ withTimezone: true
86
+ }).notNull(),
87
+ inviterId: t.text("inviter_id").notNull().references(() => users.id, { onDelete: "cascade" }),
88
+ organizationId: t.text("organization_id").notNull().references(() => organizations.id, { onDelete: "cascade" }),
89
+ role: t.text("role"),
90
+ status: t.text("status").default("pending").notNull(),
91
+ teamId: t.text("team_id"),
92
+ createdAt: t.timestamp("created_at", {
93
+ mode: "string",
94
+ withTimezone: true
95
+ }).default(sql`NOW()`).notNull(),
96
+ updatedAt: t.timestamp("updated_at", {
97
+ mode: "string",
98
+ withTimezone: true
99
+ }).default(sql`NOW()`).notNull()
100
+ }), (t) => []);
101
+ const members = pgTable("members", (t) => ({
102
+ id: t.text("id").primaryKey().default(sql`uuidv7()`),
103
+ organizationId: t.text("organization_id").notNull().references(() => organizations.id, { onDelete: "cascade" }),
104
+ role: t.text("role").default("member").notNull(),
105
+ userId: t.text("user_id").notNull().references(() => users.id, { onDelete: "cascade" }),
106
+ createdAt: t.timestamp("created_at", {
107
+ mode: "string",
108
+ withTimezone: true
109
+ }).default(sql`NOW()`).notNull()
110
+ }), (t) => []);
111
+ const organizations = pgTable("organizations", (t) => ({
112
+ id: t.text("id").primaryKey().default(sql`uuidv7()`),
113
+ name: t.text("name").notNull(),
114
+ slug: t.text("slug").unique(),
115
+ logo: t.text("logo"),
116
+ createdAt: t.timestamp("created_at", {
117
+ mode: "string",
118
+ withTimezone: true
119
+ }).default(sql`NOW()`).notNull(),
120
+ updatedAt: t.timestamp("updated_at", {
121
+ mode: "string",
122
+ withTimezone: true
123
+ }).default(sql`NOW()`).notNull(),
124
+ metadata: t.text("metadata")
125
+ }), (t) => []);
126
+ const sessions = pgTable("sessions", (t) => ({
127
+ id: t.text("id").primaryKey().default(sql`uuidv7()`),
128
+ activeOrganizationId: t.text("active_organization_id").references(() => organizations.id, { onDelete: "set null" }),
129
+ activeTeamId: t.text("active_team_id"),
130
+ createdAt: t.timestamp("created_at", {
131
+ mode: "string",
132
+ withTimezone: true
133
+ }).default(sql`NOW()`).notNull(),
134
+ expiresAt: t.timestamp("expires_at", {
135
+ mode: "string",
136
+ withTimezone: true
137
+ }).notNull(),
138
+ impersonatedBy: t.text("impersonated_by").references(() => users.id, { onDelete: "set null" }),
139
+ ipAddress: t.text("ip_address"),
140
+ token: t.text("token").notNull().unique(),
141
+ updatedAt: t.timestamp("updated_at", {
142
+ mode: "string",
143
+ withTimezone: true
144
+ }).default(sql`NOW()`).notNull(),
145
+ userAgent: t.text("user_agent"),
146
+ userId: t.text("user_id").notNull().references(() => users.id, { onDelete: "cascade" })
147
+ }), (t) => []);
148
+ const ssoProviders = pgTable("sso_providers", (t) => ({
149
+ id: t.text("id").primaryKey().default(sql`uuidv7()`),
150
+ domain: t.text("domain").notNull(),
151
+ issuer: t.text("issuer").notNull(),
152
+ oidcConfig: t.text("oidc_config"),
153
+ organizationId: t.text("organization_id").references(() => organizations.id, { onDelete: "cascade" }),
154
+ providerId: t.text("provider_id").notNull().unique(),
155
+ samlConfig: t.text("saml_config"),
156
+ userId: t.text("user_id").references(() => users.id, { onDelete: "cascade" })
157
+ }), (t) => []);
158
+ const users = pgTable("users", (t) => ({
159
+ id: t.text("id").primaryKey().default(sql`uuidv7()`),
160
+ banExpires: t.timestamp("ban_expires", {
161
+ mode: "string",
162
+ withTimezone: true
163
+ }),
164
+ banReason: t.text("ban_reason"),
165
+ banned: t.boolean("banned").default(false),
166
+ createdAt: t.timestamp("created_at", {
167
+ mode: "string",
168
+ withTimezone: true
169
+ }).default(sql`NOW()`).notNull(),
170
+ displayUsername: t.text("display_username"),
171
+ email: t.text("email").notNull().unique(),
172
+ emailVerified: t.boolean("email_verified").default(false).notNull(),
173
+ image: t.text("image"),
174
+ isAnonymous: t.boolean("is_anonymous"),
175
+ lastLoginMethod: t.text("last_login_method"),
176
+ name: t.text("name").notNull(),
177
+ phoneNumber: t.text("phone_number").unique(),
178
+ phoneNumberVerified: t.boolean("phone_number_verified"),
179
+ role: t.text("role"),
180
+ twoFactorEnabled: t.boolean("two_factor_enabled").default(false),
181
+ updatedAt: t.timestamp("updated_at", {
182
+ mode: "string",
183
+ withTimezone: true
184
+ }).default(sql`NOW()`).notNull(),
185
+ username: t.text("username").unique()
186
+ }), (t) => []);
187
+ const teams = pgTable("teams", (t) => ({
188
+ id: t.text("id").primaryKey().default(sql`uuidv7()`),
189
+ name: t.text("name").notNull(),
190
+ organizationId: t.text("organization_id").notNull().references(() => organizations.id, { onDelete: "cascade" }),
191
+ createdAt: t.timestamp("created_at", {
192
+ mode: "string",
193
+ withTimezone: true
194
+ }).default(sql`NOW()`).notNull(),
195
+ updatedAt: t.timestamp("updated_at", {
196
+ mode: "string",
197
+ withTimezone: true
198
+ }).default(sql`NOW()`).notNull()
199
+ }), (t) => []);
200
+ const teamMembers = pgTable("team_members", (t) => ({
201
+ id: t.text("id").primaryKey().default(sql`uuidv7()`),
202
+ teamId: t.text("team_id").notNull().references(() => teams.id, { onDelete: "cascade" }),
203
+ userId: t.text("user_id").notNull().references(() => users.id, { onDelete: "cascade" }),
204
+ createdAt: t.timestamp("created_at", {
205
+ mode: "string",
206
+ withTimezone: true
207
+ }).default(sql`NOW()`).notNull()
208
+ }), (t) => []);
209
+ const twoFactors = pgTable("two_factors", (t) => ({
210
+ id: t.text("id").primaryKey().default(sql`uuidv7()`),
211
+ secret: t.text("secret").notNull(),
212
+ backupCodes: t.text("backup_codes").notNull(),
213
+ userId: t.text("user_id").notNull().references(() => users.id, { onDelete: "cascade" })
214
+ }), (t) => []);
215
+ const verifications = pgTable("verifications", (t) => ({
216
+ id: t.text("id").primaryKey().default(sql`uuidv7()`),
217
+ createdAt: t.timestamp("created_at", {
218
+ mode: "string",
219
+ withTimezone: true
220
+ }).default(sql`NOW()`).notNull(),
221
+ expiresAt: t.timestamp("expires_at", {
222
+ mode: "string",
223
+ withTimezone: true
224
+ }).notNull(),
225
+ identifier: t.text("identifier").notNull(),
226
+ updatedAt: t.timestamp("updated_at", {
227
+ mode: "string",
228
+ withTimezone: true
229
+ }).default(sql`NOW()`).notNull(),
230
+ value: t.text("value").notNull()
231
+ }), (t) => []);
232
+ return {
233
+ tables: {
234
+ accounts,
235
+ apiKeys,
236
+ auditLogs: pgTable("audit_logs", (t) => ({
237
+ id: t.text("id").primaryKey().default(sql`uuidv7()`),
238
+ tableName: t.text("table_name"),
239
+ action: t.text("action").notNull(),
240
+ customAction: t.text("custom_action"),
241
+ oldData: t.jsonb("old_data"),
242
+ newData: t.jsonb("new_data"),
243
+ metadata: t.jsonb("metadata"),
244
+ organizationId: t.text("organization_id").references(() => organizations.id, { onDelete: "set null" }),
245
+ userId: t.text("user_id").references(() => users.id, { onDelete: "set null" }),
246
+ sessionId: t.text("session_id").references(() => sessions.id, { onDelete: "set null" }),
247
+ requestId: t.text("request_id"),
248
+ createdAt: t.timestamp("created_at", {
249
+ mode: "string",
250
+ withTimezone: true
251
+ }).default(sql`NOW()`).notNull()
252
+ }), (t) => []),
253
+ invitations,
254
+ members,
255
+ organizations,
256
+ sessions,
257
+ ssoProviders,
258
+ teams,
259
+ teamMembers,
260
+ twoFactors,
261
+ users,
262
+ verifications
263
+ },
264
+ relations: (r) => ({
265
+ users: {
266
+ sessions: r.many.sessions({
267
+ from: r.users.id,
268
+ to: r.sessions.userId
269
+ }),
270
+ accounts: r.many.accounts({
271
+ from: r.users.id,
272
+ to: r.accounts.userId
273
+ }),
274
+ apiKeys: r.many.apiKeys({
275
+ from: r.users.id,
276
+ to: r.apiKeys.userId
277
+ }),
278
+ memberships: r.many.members({
279
+ from: r.users.id,
280
+ to: r.members.userId
281
+ }),
282
+ invitations: r.many.invitations({
283
+ from: r.users.id,
284
+ to: r.invitations.inviterId
285
+ }),
286
+ ssoProvider: r.one.ssoProviders({
287
+ from: r.users.id,
288
+ to: r.ssoProviders.userId
289
+ }),
290
+ twoFactor: r.one.twoFactors({
291
+ from: r.users.id,
292
+ to: r.twoFactors.userId
293
+ })
294
+ },
295
+ sessions: { user: r.one.users({
296
+ from: r.sessions.userId,
297
+ to: r.users.id
298
+ }) },
299
+ accounts: { user: r.one.users({
300
+ from: r.accounts.userId,
301
+ to: r.users.id
302
+ }) },
303
+ apiKeys: { user: r.one.users({
304
+ from: r.apiKeys.userId,
305
+ to: r.users.id
306
+ }) },
307
+ organizations: {
308
+ members: r.many.members({
309
+ from: r.organizations.id,
310
+ to: r.members.organizationId
311
+ }),
312
+ invitations: r.many.invitations({
313
+ from: r.organizations.id,
314
+ to: r.invitations.organizationId
315
+ }),
316
+ teams: r.many.teams({
317
+ from: r.organizations.id,
318
+ to: r.teams.organizationId
319
+ })
320
+ },
321
+ members: {
322
+ organization: r.one.organizations({
323
+ from: r.members.organizationId,
324
+ to: r.organizations.id
325
+ }),
326
+ user: r.one.users({
327
+ from: r.members.userId,
328
+ to: r.users.id
329
+ })
330
+ },
331
+ invitations: {
332
+ organization: r.one.organizations({
333
+ from: r.invitations.organizationId,
334
+ to: r.organizations.id
335
+ }),
336
+ inviter: r.one.users({
337
+ from: r.invitations.inviterId,
338
+ to: r.users.id
339
+ })
340
+ },
341
+ teams: { organization: r.one.organizations({
342
+ from: r.teams.organizationId,
343
+ to: r.organizations.id
344
+ }) },
345
+ ssoProviders: { user: r.one.users({
346
+ from: r.ssoProviders.userId,
347
+ to: r.users.id
348
+ }) },
349
+ verifications: {},
350
+ twoFactors: { user: r.one.users({
351
+ from: r.twoFactors.userId,
352
+ to: r.users.id
353
+ }) },
354
+ auditLogs: {
355
+ organization: r.one.organizations({
356
+ from: r.auditLogs.organizationId,
357
+ to: r.organizations.id
358
+ }),
359
+ user: r.one.users({
360
+ from: r.auditLogs.userId,
361
+ to: r.users.id
362
+ }),
363
+ session: r.one.sessions({
364
+ from: r.auditLogs.sessionId,
365
+ to: r.sessions.id
366
+ })
367
+ }
368
+ })
369
+ };
370
+ }
371
+
372
+ //#endregion
373
+ export { defineAuthSchema };
@@ -347,6 +347,10 @@ type DefineAuthOptions<T extends AuthConfig, TDb = unknown> = {
347
347
  * Hooks for email sending and OTP delivery.
348
348
  */
349
349
  hooks: RequiredHooks<T>;
350
+ /**
351
+ * Secret key for signing tokens and cookies.
352
+ */
353
+ secret: string;
350
354
  /**
351
355
  * Session configuration.
352
356
  */
@@ -1,5 +1,5 @@
1
1
  import { Logger } from "./logger.mjs";
2
- import * as keyv0 from "keyv";
2
+ import * as _keyv_redis0 from "@keyv/redis";
3
3
  import { KeyvRedisOptions } from "@keyv/redis";
4
4
 
5
5
  //#region src/api/cache.d.ts
@@ -39,6 +39,6 @@ declare function defineCache({
39
39
  url,
40
40
  logger,
41
41
  options
42
- }: DefineCacheOptions): keyv0.Keyv<any>;
42
+ }: DefineCacheOptions): _keyv_redis0.Keyv<any>;
43
43
  //#endregion
44
44
  export { Cache };