@robelest/convex-auth 0.0.4-preview.13 → 0.0.4-preview.16

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 (328) hide show
  1. package/README.md +140 -9
  2. package/dist/bin.cjs +5957 -5478
  3. package/dist/client/index.d.ts +3 -7
  4. package/dist/client/index.d.ts.map +1 -1
  5. package/dist/client/index.js +27 -26
  6. package/dist/client/index.js.map +1 -1
  7. package/dist/component/_generated/api.d.ts +14 -0
  8. package/dist/component/_generated/api.d.ts.map +1 -1
  9. package/dist/component/_generated/api.js.map +1 -1
  10. package/dist/component/_generated/component.d.ts +1672 -24
  11. package/dist/component/_generated/component.d.ts.map +1 -1
  12. package/dist/component/convex.config.d.ts +2 -2
  13. package/dist/component/convex.config.d.ts.map +1 -1
  14. package/dist/component/index.d.ts +1 -1
  15. package/dist/component/index.js +2 -2
  16. package/dist/component/model.d.ts +153 -0
  17. package/dist/component/model.d.ts.map +1 -0
  18. package/dist/component/model.js +343 -0
  19. package/dist/component/model.js.map +1 -0
  20. package/dist/component/providers/sso.d.ts +1 -1
  21. package/dist/component/public/enterprise.d.ts +54 -0
  22. package/dist/component/public/enterprise.d.ts.map +1 -0
  23. package/dist/component/public/enterprise.js +515 -0
  24. package/dist/component/public/enterprise.js.map +1 -0
  25. package/dist/component/public/factors.d.ts +52 -0
  26. package/dist/component/public/factors.d.ts.map +1 -0
  27. package/dist/component/public/factors.js +285 -0
  28. package/dist/component/public/factors.js.map +1 -0
  29. package/dist/component/public/groups.d.ts +116 -0
  30. package/dist/component/public/groups.d.ts.map +1 -0
  31. package/dist/component/public/groups.js +596 -0
  32. package/dist/component/public/groups.js.map +1 -0
  33. package/dist/component/public/identity.d.ts +93 -0
  34. package/dist/component/public/identity.d.ts.map +1 -0
  35. package/dist/component/public/identity.js +426 -0
  36. package/dist/component/public/identity.js.map +1 -0
  37. package/dist/component/public/keys.d.ts +41 -0
  38. package/dist/component/public/keys.d.ts.map +1 -0
  39. package/dist/component/public/keys.js +157 -0
  40. package/dist/component/public/keys.js.map +1 -0
  41. package/dist/component/public/shared.d.ts +26 -0
  42. package/dist/component/public/shared.d.ts.map +1 -0
  43. package/dist/component/public/shared.js +32 -0
  44. package/dist/component/public/shared.js.map +1 -0
  45. package/dist/component/public.d.ts +9 -321
  46. package/dist/component/public.d.ts.map +1 -1
  47. package/dist/component/public.js +6 -2145
  48. package/dist/component/schema.d.ts +406 -260
  49. package/dist/component/schema.js +37 -32
  50. package/dist/component/schema.js.map +1 -1
  51. package/dist/component/server/auth.d.ts +161 -15
  52. package/dist/component/server/auth.d.ts.map +1 -1
  53. package/dist/component/server/auth.js +100 -7
  54. package/dist/component/server/auth.js.map +1 -1
  55. package/dist/component/server/cookies.js +3 -0
  56. package/dist/component/server/cookies.js.map +1 -1
  57. package/dist/component/server/db.js +1 -0
  58. package/dist/component/server/db.js.map +1 -1
  59. package/dist/component/server/device.js +3 -1
  60. package/dist/component/server/device.js.map +1 -1
  61. package/dist/component/server/domains/core.js +629 -0
  62. package/dist/component/server/domains/core.js.map +1 -0
  63. package/dist/component/server/domains/sso.js +884 -0
  64. package/dist/component/server/domains/sso.js.map +1 -0
  65. package/dist/component/server/factory.d.ts +136 -0
  66. package/dist/component/server/factory.d.ts.map +1 -0
  67. package/dist/component/server/factory.js +1134 -0
  68. package/dist/component/server/factory.js.map +1 -0
  69. package/dist/component/server/fx.js +2 -1
  70. package/dist/component/server/fx.js.map +1 -1
  71. package/dist/component/server/http.js +287 -0
  72. package/dist/component/server/http.js.map +1 -0
  73. package/dist/component/server/identity.js +13 -0
  74. package/dist/component/server/identity.js.map +1 -0
  75. package/dist/component/server/keys.js +4 -0
  76. package/dist/component/server/keys.js.map +1 -1
  77. package/dist/component/server/mutations/account.js +1 -1
  78. package/dist/component/server/mutations/index.js +2 -2
  79. package/dist/component/server/mutations/index.js.map +1 -1
  80. package/dist/component/server/mutations/invalidate.js +1 -1
  81. package/dist/component/server/mutations/oauth.js +10 -7
  82. package/dist/component/server/mutations/oauth.js.map +1 -1
  83. package/dist/component/server/mutations/refresh.js +1 -1
  84. package/dist/component/server/mutations/register.js +1 -1
  85. package/dist/component/server/mutations/retrieve.js +1 -1
  86. package/dist/component/server/mutations/signature.js +1 -1
  87. package/dist/component/server/mutations/store.js +6 -3
  88. package/dist/component/server/mutations/store.js.map +1 -1
  89. package/dist/component/server/mutations/verify.js +1 -1
  90. package/dist/component/server/oauth.js +3 -0
  91. package/dist/component/server/oauth.js.map +1 -1
  92. package/dist/component/server/passkey.js +3 -2
  93. package/dist/component/server/passkey.js.map +1 -1
  94. package/dist/component/server/provider.js +2 -0
  95. package/dist/component/server/provider.js.map +1 -1
  96. package/dist/component/server/providers.js +10 -0
  97. package/dist/component/server/providers.js.map +1 -1
  98. package/dist/component/server/ratelimit.js +3 -0
  99. package/dist/component/server/ratelimit.js.map +1 -1
  100. package/dist/component/server/redirects.js +2 -0
  101. package/dist/component/server/redirects.js.map +1 -1
  102. package/dist/component/server/refresh.js +5 -0
  103. package/dist/component/server/refresh.js.map +1 -1
  104. package/dist/component/server/sessions.js +5 -0
  105. package/dist/component/server/sessions.js.map +1 -1
  106. package/dist/component/server/signin.js +2 -1
  107. package/dist/component/server/signin.js.map +1 -1
  108. package/dist/component/server/sso.js +166 -19
  109. package/dist/component/server/sso.js.map +1 -1
  110. package/dist/component/server/tokens.js +1 -0
  111. package/dist/component/server/tokens.js.map +1 -1
  112. package/dist/component/server/totp.js +4 -2
  113. package/dist/component/server/totp.js.map +1 -1
  114. package/dist/component/server/types.d.ts +106 -38
  115. package/dist/component/server/types.d.ts.map +1 -1
  116. package/dist/component/server/types.js.map +1 -1
  117. package/dist/component/server/users.js +1 -0
  118. package/dist/component/server/users.js.map +1 -1
  119. package/dist/component/server/utils.js +44 -2
  120. package/dist/component/server/utils.js.map +1 -1
  121. package/dist/providers/anonymous.d.ts +1 -1
  122. package/dist/providers/credentials.d.ts +1 -1
  123. package/dist/providers/password.d.ts +1 -1
  124. package/dist/providers/sso.d.ts +1 -1
  125. package/dist/providers/sso.js.map +1 -1
  126. package/dist/server/auth.d.ts +163 -17
  127. package/dist/server/auth.d.ts.map +1 -1
  128. package/dist/server/auth.js +100 -7
  129. package/dist/server/auth.js.map +1 -1
  130. package/dist/server/cookies.d.ts +1 -38
  131. package/dist/server/cookies.js +3 -0
  132. package/dist/server/cookies.js.map +1 -1
  133. package/dist/server/db.d.ts +1 -125
  134. package/dist/server/db.js +1 -0
  135. package/dist/server/db.js.map +1 -1
  136. package/dist/server/device.d.ts +1 -24
  137. package/dist/server/device.js +3 -1
  138. package/dist/server/device.js.map +1 -1
  139. package/dist/server/domains/core.d.ts +434 -0
  140. package/dist/server/domains/core.d.ts.map +1 -0
  141. package/dist/server/domains/core.js +629 -0
  142. package/dist/server/domains/core.js.map +1 -0
  143. package/dist/server/domains/sso.d.ts +409 -0
  144. package/dist/server/domains/sso.d.ts.map +1 -0
  145. package/dist/server/domains/sso.js +884 -0
  146. package/dist/server/domains/sso.js.map +1 -0
  147. package/dist/server/enterpriseValidators.d.ts +1 -0
  148. package/dist/server/enterpriseValidators.js +60 -0
  149. package/dist/server/enterpriseValidators.js.map +1 -0
  150. package/dist/server/factory.d.ts +136 -0
  151. package/dist/server/factory.d.ts.map +1 -0
  152. package/dist/server/factory.js +1134 -0
  153. package/dist/server/factory.js.map +1 -0
  154. package/dist/server/fx.d.ts +1 -16
  155. package/dist/server/fx.d.ts.map +1 -1
  156. package/dist/server/fx.js +1 -0
  157. package/dist/server/fx.js.map +1 -1
  158. package/dist/server/http.d.ts +59 -0
  159. package/dist/server/http.d.ts.map +1 -0
  160. package/dist/server/http.js +287 -0
  161. package/dist/server/http.js.map +1 -0
  162. package/dist/server/identity.d.ts +1 -0
  163. package/dist/server/identity.js +13 -0
  164. package/dist/server/identity.js.map +1 -0
  165. package/dist/server/index.d.ts +468 -1
  166. package/dist/server/index.d.ts.map +1 -1
  167. package/dist/server/index.js +530 -36
  168. package/dist/server/index.js.map +1 -1
  169. package/dist/server/keys.d.ts +1 -57
  170. package/dist/server/keys.js +4 -0
  171. package/dist/server/keys.js.map +1 -1
  172. package/dist/server/mutations/account.d.ts +7 -7
  173. package/dist/server/mutations/account.d.ts.map +1 -1
  174. package/dist/server/mutations/code.d.ts +13 -13
  175. package/dist/server/mutations/code.d.ts.map +1 -1
  176. package/dist/server/mutations/index.d.ts +107 -107
  177. package/dist/server/mutations/index.d.ts.map +1 -1
  178. package/dist/server/mutations/index.js +1 -1
  179. package/dist/server/mutations/index.js.map +1 -1
  180. package/dist/server/mutations/invalidate.d.ts +5 -5
  181. package/dist/server/mutations/invalidate.d.ts.map +1 -1
  182. package/dist/server/mutations/oauth.d.ts +10 -10
  183. package/dist/server/mutations/oauth.d.ts.map +1 -1
  184. package/dist/server/mutations/oauth.js +9 -6
  185. package/dist/server/mutations/oauth.js.map +1 -1
  186. package/dist/server/mutations/refresh.d.ts +4 -4
  187. package/dist/server/mutations/register.d.ts +12 -12
  188. package/dist/server/mutations/register.d.ts.map +1 -1
  189. package/dist/server/mutations/retrieve.d.ts +7 -7
  190. package/dist/server/mutations/signature.d.ts +5 -5
  191. package/dist/server/mutations/signin.d.ts +6 -6
  192. package/dist/server/mutations/signin.d.ts.map +1 -1
  193. package/dist/server/mutations/signout.d.ts +1 -1
  194. package/dist/server/mutations/store.d.ts +3 -2
  195. package/dist/server/mutations/store.d.ts.map +1 -1
  196. package/dist/server/mutations/store.js +6 -3
  197. package/dist/server/mutations/store.js.map +1 -1
  198. package/dist/server/mutations/verifier.d.ts +1 -1
  199. package/dist/server/mutations/verify.d.ts +11 -11
  200. package/dist/server/mutations/verify.d.ts.map +1 -1
  201. package/dist/server/oauth.d.ts +1 -59
  202. package/dist/server/oauth.js +3 -0
  203. package/dist/server/oauth.js.map +1 -1
  204. package/dist/server/passkey.d.ts.map +1 -1
  205. package/dist/server/passkey.js +3 -2
  206. package/dist/server/passkey.js.map +1 -1
  207. package/dist/server/provider.d.ts +1 -14
  208. package/dist/server/provider.d.ts.map +1 -1
  209. package/dist/server/provider.js +2 -0
  210. package/dist/server/provider.js.map +1 -1
  211. package/dist/server/providers.js +10 -0
  212. package/dist/server/providers.js.map +1 -1
  213. package/dist/server/ratelimit.d.ts +1 -22
  214. package/dist/server/ratelimit.js +3 -0
  215. package/dist/server/ratelimit.js.map +1 -1
  216. package/dist/server/redirects.d.ts +1 -10
  217. package/dist/server/redirects.js +2 -0
  218. package/dist/server/redirects.js.map +1 -1
  219. package/dist/server/refresh.d.ts +1 -37
  220. package/dist/server/refresh.js +5 -0
  221. package/dist/server/refresh.js.map +1 -1
  222. package/dist/server/sessions.d.ts +1 -28
  223. package/dist/server/sessions.js +5 -0
  224. package/dist/server/sessions.js.map +1 -1
  225. package/dist/server/signin.d.ts +1 -55
  226. package/dist/server/signin.js +2 -1
  227. package/dist/server/signin.js.map +1 -1
  228. package/dist/server/sso.d.ts +1 -348
  229. package/dist/server/sso.js +165 -18
  230. package/dist/server/sso.js.map +1 -1
  231. package/dist/server/templates.d.ts +1 -21
  232. package/dist/server/templates.js +1 -0
  233. package/dist/server/templates.js.map +1 -1
  234. package/dist/server/tokens.d.ts +1 -11
  235. package/dist/server/tokens.js +1 -0
  236. package/dist/server/tokens.js.map +1 -1
  237. package/dist/server/totp.d.ts +1 -23
  238. package/dist/server/totp.js +4 -2
  239. package/dist/server/totp.js.map +1 -1
  240. package/dist/server/types.d.ts +114 -77
  241. package/dist/server/types.d.ts.map +1 -1
  242. package/dist/server/types.js.map +1 -1
  243. package/dist/server/users.d.ts +1 -31
  244. package/dist/server/users.js +1 -0
  245. package/dist/server/users.js.map +1 -1
  246. package/dist/server/utils.d.ts +1 -27
  247. package/dist/server/utils.js +44 -2
  248. package/dist/server/utils.js.map +1 -1
  249. package/dist/server/version.d.ts +1 -1
  250. package/dist/server/version.js +1 -1
  251. package/dist/server/version.js.map +1 -1
  252. package/package.json +4 -5
  253. package/src/cli/bin.ts +5 -0
  254. package/src/cli/index.ts +22 -9
  255. package/src/cli/keys.ts +3 -0
  256. package/src/client/index.ts +36 -37
  257. package/src/component/_generated/api.ts +14 -0
  258. package/src/component/_generated/component.ts +2106 -9
  259. package/src/component/index.ts +3 -1
  260. package/src/component/model.ts +441 -0
  261. package/src/component/public/enterprise.ts +753 -0
  262. package/src/component/public/factors.ts +332 -0
  263. package/src/component/public/groups.ts +932 -0
  264. package/src/component/public/identity.ts +566 -0
  265. package/src/component/public/keys.ts +209 -0
  266. package/src/component/public/shared.ts +119 -0
  267. package/src/component/public.ts +5 -2965
  268. package/src/component/schema.ts +68 -63
  269. package/src/providers/sso.ts +1 -1
  270. package/src/server/auth.ts +413 -18
  271. package/src/server/cookies.ts +3 -0
  272. package/src/server/db.ts +3 -0
  273. package/src/server/device.ts +3 -1
  274. package/src/server/domains/core.ts +1071 -0
  275. package/src/server/domains/sso.ts +1749 -0
  276. package/src/server/enterpriseValidators.ts +93 -0
  277. package/src/server/factory.ts +2181 -0
  278. package/src/server/fx.ts +1 -0
  279. package/src/server/http.ts +529 -0
  280. package/src/server/identity.ts +18 -0
  281. package/src/server/index.ts +806 -40
  282. package/src/server/keys.ts +4 -0
  283. package/src/server/mutations/index.ts +1 -1
  284. package/src/server/mutations/oauth.ts +36 -8
  285. package/src/server/mutations/store.ts +6 -3
  286. package/src/server/oauth.ts +6 -0
  287. package/src/server/passkey.ts +3 -2
  288. package/src/server/provider.ts +2 -0
  289. package/src/server/providers.ts +20 -0
  290. package/src/server/ratelimit.ts +3 -0
  291. package/src/server/redirects.ts +2 -0
  292. package/src/server/refresh.ts +5 -0
  293. package/src/server/sessions.ts +5 -0
  294. package/src/server/signin.ts +1 -0
  295. package/src/server/sso.ts +259 -17
  296. package/src/server/templates.ts +1 -0
  297. package/src/server/tokens.ts +1 -0
  298. package/src/server/totp.ts +4 -2
  299. package/src/server/types.ts +178 -83
  300. package/src/server/users.ts +1 -0
  301. package/src/server/utils.ts +71 -1
  302. package/src/server/version.ts +1 -1
  303. package/dist/component/public.js.map +0 -1
  304. package/dist/component/server/implementation.d.ts +0 -1264
  305. package/dist/component/server/implementation.d.ts.map +0 -1
  306. package/dist/component/server/implementation.js +0 -2365
  307. package/dist/component/server/implementation.js.map +0 -1
  308. package/dist/server/cookies.d.ts.map +0 -1
  309. package/dist/server/db.d.ts.map +0 -1
  310. package/dist/server/device.d.ts.map +0 -1
  311. package/dist/server/implementation.d.ts +0 -1264
  312. package/dist/server/implementation.d.ts.map +0 -1
  313. package/dist/server/implementation.js +0 -2365
  314. package/dist/server/implementation.js.map +0 -1
  315. package/dist/server/keys.d.ts.map +0 -1
  316. package/dist/server/oauth.d.ts.map +0 -1
  317. package/dist/server/ratelimit.d.ts.map +0 -1
  318. package/dist/server/redirects.d.ts.map +0 -1
  319. package/dist/server/refresh.d.ts.map +0 -1
  320. package/dist/server/sessions.d.ts.map +0 -1
  321. package/dist/server/signin.d.ts.map +0 -1
  322. package/dist/server/sso.d.ts.map +0 -1
  323. package/dist/server/templates.d.ts.map +0 -1
  324. package/dist/server/tokens.d.ts.map +0 -1
  325. package/dist/server/totp.d.ts.map +0 -1
  326. package/dist/server/users.d.ts.map +0 -1
  327. package/dist/server/utils.d.ts.map +0 -1
  328. package/src/server/implementation.ts +0 -5336
@@ -1,6 +1,24 @@
1
1
  import { defineSchema, defineTable } from "convex/server";
2
2
  import { v } from "convex/values";
3
3
 
4
+ import {
5
+ vApiKeyRateLimit,
6
+ vApiKeyRateLimitState,
7
+ vApiKeyScope,
8
+ vAuditActorType,
9
+ vAuditStatus,
10
+ vDeviceStatus,
11
+ vEnterprisePolicy,
12
+ vEnterpriseSecretKind,
13
+ vEnterpriseStatus,
14
+ vInviteStatus,
15
+ vScimResourceType,
16
+ vScimStatus,
17
+ vTag,
18
+ vWebhookDeliveryStatus,
19
+ vWebhookEndpointStatus,
20
+ } from "./model";
21
+
4
22
  /**
5
23
  * Schema for the auth component.
6
24
  *
@@ -166,11 +184,7 @@ export default defineSchema({
166
184
  /** Minimum polling interval in seconds. */
167
185
  interval: v.number(),
168
186
  /** Current status of this device authorization session. */
169
- status: v.union(
170
- v.literal("pending"),
171
- v.literal("authorized"),
172
- v.literal("denied"),
173
- ),
187
+ status: vDeviceStatus,
174
188
  /** Set when the user authorizes — links to the authorizing user. */
175
189
  userId: v.optional(v.id("User")),
176
190
  /** Set when the user authorizes — the session created for the device. */
@@ -201,7 +215,7 @@ export default defineSchema({
201
215
  type: v.optional(v.string()),
202
216
  parentGroupId: v.optional(v.id("Group")),
203
217
  /** Faceted classification tags. Normalized at write time (trimmed, lowercased). */
204
- tags: v.optional(v.array(v.object({ key: v.string(), value: v.string() }))),
218
+ tags: v.optional(v.array(vTag)),
205
219
  extend: v.optional(v.any()),
206
220
  })
207
221
  .index("slug", ["slug"])
@@ -232,6 +246,7 @@ export default defineSchema({
232
246
  groupId: v.id("Group"),
233
247
  userId: v.id("User"),
234
248
  role: v.optional(v.string()),
249
+ roleIds: v.optional(v.array(v.string())),
235
250
  status: v.optional(v.string()),
236
251
  extend: v.optional(v.any()),
237
252
  })
@@ -253,12 +268,8 @@ export default defineSchema({
253
268
  email: v.optional(v.string()),
254
269
  tokenHash: v.string(),
255
270
  role: v.optional(v.string()),
256
- status: v.union(
257
- v.literal("pending"),
258
- v.literal("accepted"),
259
- v.literal("revoked"),
260
- v.literal("expired"),
261
- ),
271
+ roleIds: v.optional(v.array(v.string())),
272
+ status: vInviteStatus,
262
273
  expiresTime: v.optional(v.number()),
263
274
  acceptedByUserId: v.optional(v.id("User")),
264
275
  acceptedTime: v.optional(v.number()),
@@ -269,12 +280,7 @@ export default defineSchema({
269
280
  .index("email_status", ["email", "status"])
270
281
  .index("invited_by_user_id_status", ["invitedByUserId", "status"])
271
282
  .index("group_id", ["groupId"])
272
- .index("group_id_status", ["groupId", "status"])
273
- .index("role_status_accepted_by_user_id", [
274
- "role",
275
- "status",
276
- "acceptedByUserId",
277
- ]),
283
+ .index("group_id_status", ["groupId", "status"]),
278
284
 
279
285
  /**
280
286
  * Enterprise configuration attached to a root group/organization.
@@ -287,11 +293,8 @@ export default defineSchema({
287
293
  groupId: v.id("Group"),
288
294
  slug: v.optional(v.string()),
289
295
  name: v.optional(v.string()),
290
- status: v.union(
291
- v.literal("draft"),
292
- v.literal("active"),
293
- v.literal("disabled"),
294
- ),
296
+ status: vEnterpriseStatus,
297
+ policy: v.optional(vEnterprisePolicy),
295
298
  config: v.optional(v.any()),
296
299
  extend: v.optional(v.any()),
297
300
  })
@@ -313,21 +316,48 @@ export default defineSchema({
313
316
  .index("group_id", ["groupId"])
314
317
  .index("domain", ["domain"]),
315
318
 
319
+ /**
320
+ * Pending DNS TXT verification challenges for enterprise domains.
321
+ */
322
+ EnterpriseDomainVerification: defineTable({
323
+ enterpriseId: v.id("Enterprise"),
324
+ groupId: v.id("Group"),
325
+ domainId: v.id("EnterpriseDomain"),
326
+ domain: v.string(),
327
+ recordName: v.string(),
328
+ token: v.string(),
329
+ tokenHash: v.string(),
330
+ requestedAt: v.number(),
331
+ expiresAt: v.number(),
332
+ })
333
+ .index("enterprise_id", ["enterpriseId"])
334
+ .index("domain_id", ["domainId"])
335
+ .index("token_hash", ["tokenHash"]),
336
+
337
+ /**
338
+ * Encrypted enterprise secrets stored separately from protocol config.
339
+ */
340
+ EnterpriseSecret: defineTable({
341
+ enterpriseId: v.id("Enterprise"),
342
+ groupId: v.id("Group"),
343
+ kind: vEnterpriseSecretKind,
344
+ ciphertext: v.string(),
345
+ updatedAt: v.number(),
346
+ })
347
+ .index("enterprise_id", ["enterpriseId"])
348
+ .index("enterprise_id_kind", ["enterpriseId", "kind"])
349
+ .index("group_id", ["groupId"]),
350
+
316
351
  /**
317
352
  * SCIM configuration for an enterprise tenant.
318
353
  */
319
354
  EnterpriseScimConfig: defineTable({
320
355
  enterpriseId: v.id("Enterprise"),
321
356
  groupId: v.id("Group"),
322
- status: v.union(
323
- v.literal("draft"),
324
- v.literal("active"),
325
- v.literal("disabled"),
326
- ),
357
+ status: vScimStatus,
327
358
  basePath: v.string(),
328
359
  tokenHash: v.string(),
329
360
  lastRotatedAt: v.optional(v.number()),
330
- deprovisionMode: v.optional(v.union(v.literal("soft"), v.literal("hard"))),
331
361
  extend: v.optional(v.any()),
332
362
  })
333
363
  .index("enterprise_id", ["enterpriseId"])
@@ -341,7 +371,7 @@ export default defineSchema({
341
371
  EnterpriseScimIdentity: defineTable({
342
372
  enterpriseId: v.id("Enterprise"),
343
373
  groupId: v.id("Group"),
344
- resourceType: v.union(v.literal("user"), v.literal("group")),
374
+ resourceType: vScimResourceType,
345
375
  externalId: v.string(),
346
376
  userId: v.optional(v.id("User")),
347
377
  mappedGroupId: v.optional(v.id("Group")),
@@ -356,6 +386,7 @@ export default defineSchema({
356
386
  "resourceType",
357
387
  "externalId",
358
388
  ])
389
+ .index("enterprise_id_user_id", ["enterpriseId", "userId"])
359
390
  .index("user_id", ["userId"])
360
391
  .index("mapped_group_id", ["mappedGroupId"]),
361
392
 
@@ -366,17 +397,11 @@ export default defineSchema({
366
397
  enterpriseId: v.id("Enterprise"),
367
398
  groupId: v.id("Group"),
368
399
  eventType: v.string(),
369
- actorType: v.union(
370
- v.literal("user"),
371
- v.literal("system"),
372
- v.literal("scim"),
373
- v.literal("api_key"),
374
- v.literal("webhook"),
375
- ),
400
+ actorType: vAuditActorType,
376
401
  actorId: v.optional(v.string()),
377
402
  subjectType: v.string(),
378
403
  subjectId: v.optional(v.string()),
379
- status: v.union(v.literal("success"), v.literal("failure")),
404
+ status: vAuditStatus,
380
405
  occurredAt: v.number(),
381
406
  requestId: v.optional(v.string()),
382
407
  ip: v.optional(v.string()),
@@ -393,7 +418,7 @@ export default defineSchema({
393
418
  enterpriseId: v.id("Enterprise"),
394
419
  groupId: v.id("Group"),
395
420
  url: v.string(),
396
- status: v.union(v.literal("active"), v.literal("disabled")),
421
+ status: vWebhookEndpointStatus,
397
422
  secretHash: v.string(),
398
423
  subscriptions: v.array(v.string()),
399
424
  createdByUserId: v.optional(v.id("User")),
@@ -414,12 +439,7 @@ export default defineSchema({
414
439
  endpointId: v.id("EnterpriseWebhookEndpoint"),
415
440
  auditEventId: v.optional(v.id("EnterpriseAuditEvent")),
416
441
  eventType: v.string(),
417
- status: v.union(
418
- v.literal("pending"),
419
- v.literal("processing"),
420
- v.literal("delivered"),
421
- v.literal("failed"),
422
- ),
442
+ status: vWebhookDeliveryStatus,
423
443
  attemptCount: v.number(),
424
444
  nextAttemptAt: v.number(),
425
445
  lastAttemptAt: v.optional(v.number()),
@@ -454,26 +474,11 @@ export default defineSchema({
454
474
  /** User-assigned name (e.g. "CI Pipeline", "Production API"). */
455
475
  name: v.string(),
456
476
  /** Scoped permissions: [{ resource: "users", actions: ["read", "list"] }]. */
457
- scopes: v.array(
458
- v.object({
459
- resource: v.string(),
460
- actions: v.array(v.string()),
461
- }),
462
- ),
477
+ scopes: v.array(vApiKeyScope),
463
478
  /** Optional per-key rate limit configuration. */
464
- rateLimit: v.optional(
465
- v.object({
466
- maxRequests: v.number(),
467
- windowMs: v.number(),
468
- }),
469
- ),
479
+ rateLimit: v.optional(vApiKeyRateLimit),
470
480
  /** Rate limit state tracking (token-bucket). */
471
- rateLimitState: v.optional(
472
- v.object({
473
- attemptsLeft: v.number(),
474
- lastAttemptTime: v.number(),
475
- }),
476
- ),
481
+ rateLimitState: v.optional(vApiKeyRateLimitState),
477
482
  /** Expiration timestamp. Null/undefined = never expires. */
478
483
  expiresAt: v.optional(v.number()),
479
484
  lastUsedAt: v.optional(v.number()),
@@ -14,7 +14,7 @@
14
14
  * });
15
15
  *
16
16
  * // auth.sso is now available
17
- * await auth.sso.oidc.configure(ctx, { enterpriseId, clientId, ... });
17
+ * await auth.sso.admin.oidc.configure(ctx, { enterpriseId, clientId, ... });
18
18
  * ```
19
19
  *
20
20
  * Without `new SSO()` in the providers list, `auth.sso` is not