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

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 (323) 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 +1513 -3
  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/model.d.ts +153 -0
  15. package/dist/component/model.d.ts.map +1 -0
  16. package/dist/component/model.js +327 -0
  17. package/dist/component/model.js.map +1 -0
  18. package/dist/component/providers/sso.d.ts +1 -1
  19. package/dist/component/public/enterprise.d.ts +49 -0
  20. package/dist/component/public/enterprise.d.ts.map +1 -0
  21. package/dist/component/public/enterprise.js +450 -0
  22. package/dist/component/public/enterprise.js.map +1 -0
  23. package/dist/component/public/factors.d.ts +52 -0
  24. package/dist/component/public/factors.d.ts.map +1 -0
  25. package/dist/component/public/factors.js +285 -0
  26. package/dist/component/public/factors.js.map +1 -0
  27. package/dist/component/public/groups.d.ts +118 -0
  28. package/dist/component/public/groups.d.ts.map +1 -0
  29. package/dist/component/public/groups.js +599 -0
  30. package/dist/component/public/groups.js.map +1 -0
  31. package/dist/component/public/identity.d.ts +93 -0
  32. package/dist/component/public/identity.d.ts.map +1 -0
  33. package/dist/component/public/identity.js +426 -0
  34. package/dist/component/public/identity.js.map +1 -0
  35. package/dist/component/public/keys.d.ts +41 -0
  36. package/dist/component/public/keys.d.ts.map +1 -0
  37. package/dist/component/public/keys.js +157 -0
  38. package/dist/component/public/keys.js.map +1 -0
  39. package/dist/component/public/shared.d.ts +26 -0
  40. package/dist/component/public/shared.d.ts.map +1 -0
  41. package/dist/component/public/shared.js +32 -0
  42. package/dist/component/public/shared.js.map +1 -0
  43. package/dist/component/public.d.ts +9 -321
  44. package/dist/component/public.d.ts.map +1 -1
  45. package/dist/component/public.js +6 -2145
  46. package/dist/component/schema.d.ts +368 -258
  47. package/dist/component/schema.js +23 -27
  48. package/dist/component/schema.js.map +1 -1
  49. package/dist/component/server/auth.d.ts +42 -7
  50. package/dist/component/server/auth.d.ts.map +1 -1
  51. package/dist/component/server/auth.js +70 -6
  52. package/dist/component/server/auth.js.map +1 -1
  53. package/dist/component/server/cookies.js +3 -0
  54. package/dist/component/server/cookies.js.map +1 -1
  55. package/dist/component/server/db.js +1 -0
  56. package/dist/component/server/db.js.map +1 -1
  57. package/dist/component/server/device.js +3 -1
  58. package/dist/component/server/device.js.map +1 -1
  59. package/dist/component/server/domains/core.js +466 -0
  60. package/dist/component/server/domains/core.js.map +1 -0
  61. package/dist/component/server/domains/sso.js +689 -0
  62. package/dist/component/server/domains/sso.js.map +1 -0
  63. package/dist/component/server/factory.d.ts +136 -0
  64. package/dist/component/server/factory.d.ts.map +1 -0
  65. package/dist/component/server/factory.js +1128 -0
  66. package/dist/component/server/factory.js.map +1 -0
  67. package/dist/component/server/fx.js +2 -1
  68. package/dist/component/server/fx.js.map +1 -1
  69. package/dist/component/server/http.js +287 -0
  70. package/dist/component/server/http.js.map +1 -0
  71. package/dist/component/server/identity.js +13 -0
  72. package/dist/component/server/identity.js.map +1 -0
  73. package/dist/component/server/keys.js +4 -0
  74. package/dist/component/server/keys.js.map +1 -1
  75. package/dist/component/server/mutations/account.js +1 -1
  76. package/dist/component/server/mutations/index.js +2 -2
  77. package/dist/component/server/mutations/index.js.map +1 -1
  78. package/dist/component/server/mutations/invalidate.js +1 -1
  79. package/dist/component/server/mutations/oauth.js +10 -7
  80. package/dist/component/server/mutations/oauth.js.map +1 -1
  81. package/dist/component/server/mutations/refresh.js +1 -1
  82. package/dist/component/server/mutations/register.js +1 -1
  83. package/dist/component/server/mutations/retrieve.js +1 -1
  84. package/dist/component/server/mutations/signature.js +1 -1
  85. package/dist/component/server/mutations/store.js +6 -3
  86. package/dist/component/server/mutations/store.js.map +1 -1
  87. package/dist/component/server/mutations/verify.js +1 -1
  88. package/dist/component/server/oauth.js +3 -0
  89. package/dist/component/server/oauth.js.map +1 -1
  90. package/dist/component/server/passkey.js +3 -2
  91. package/dist/component/server/passkey.js.map +1 -1
  92. package/dist/component/server/provider.js +2 -0
  93. package/dist/component/server/provider.js.map +1 -1
  94. package/dist/component/server/providers.js +3 -0
  95. package/dist/component/server/providers.js.map +1 -1
  96. package/dist/component/server/ratelimit.js +3 -0
  97. package/dist/component/server/ratelimit.js.map +1 -1
  98. package/dist/component/server/redirects.js +2 -0
  99. package/dist/component/server/redirects.js.map +1 -1
  100. package/dist/component/server/refresh.js +5 -0
  101. package/dist/component/server/refresh.js.map +1 -1
  102. package/dist/component/server/sessions.js +5 -0
  103. package/dist/component/server/sessions.js.map +1 -1
  104. package/dist/component/server/signin.js +2 -1
  105. package/dist/component/server/signin.js.map +1 -1
  106. package/dist/component/server/sso.js +166 -19
  107. package/dist/component/server/sso.js.map +1 -1
  108. package/dist/component/server/tokens.js +1 -0
  109. package/dist/component/server/tokens.js.map +1 -1
  110. package/dist/component/server/totp.js +4 -2
  111. package/dist/component/server/totp.js.map +1 -1
  112. package/dist/component/server/types.d.ts +50 -35
  113. package/dist/component/server/types.d.ts.map +1 -1
  114. package/dist/component/server/types.js.map +1 -1
  115. package/dist/component/server/users.js +1 -0
  116. package/dist/component/server/users.js.map +1 -1
  117. package/dist/component/server/utils.js +44 -2
  118. package/dist/component/server/utils.js.map +1 -1
  119. package/dist/providers/anonymous.d.ts +1 -1
  120. package/dist/providers/credentials.d.ts +1 -1
  121. package/dist/providers/password.d.ts +1 -1
  122. package/dist/providers/sso.d.ts +1 -1
  123. package/dist/providers/sso.js.map +1 -1
  124. package/dist/server/auth.d.ts +44 -9
  125. package/dist/server/auth.d.ts.map +1 -1
  126. package/dist/server/auth.js +70 -6
  127. package/dist/server/auth.js.map +1 -1
  128. package/dist/server/cookies.d.ts +1 -38
  129. package/dist/server/cookies.js +3 -0
  130. package/dist/server/cookies.js.map +1 -1
  131. package/dist/server/db.d.ts +1 -125
  132. package/dist/server/db.js +1 -0
  133. package/dist/server/db.js.map +1 -1
  134. package/dist/server/device.d.ts +1 -24
  135. package/dist/server/device.js +3 -1
  136. package/dist/server/device.js.map +1 -1
  137. package/dist/server/domains/core.d.ts +320 -0
  138. package/dist/server/domains/core.d.ts.map +1 -0
  139. package/dist/server/domains/core.js +466 -0
  140. package/dist/server/domains/core.js.map +1 -0
  141. package/dist/server/domains/sso.d.ts +340 -0
  142. package/dist/server/domains/sso.d.ts.map +1 -0
  143. package/dist/server/domains/sso.js +689 -0
  144. package/dist/server/domains/sso.js.map +1 -0
  145. package/dist/server/enterpriseValidators.d.ts +1 -0
  146. package/dist/server/enterpriseValidators.js +56 -0
  147. package/dist/server/enterpriseValidators.js.map +1 -0
  148. package/dist/server/factory.d.ts +136 -0
  149. package/dist/server/factory.d.ts.map +1 -0
  150. package/dist/server/factory.js +1128 -0
  151. package/dist/server/factory.js.map +1 -0
  152. package/dist/server/fx.d.ts +1 -16
  153. package/dist/server/fx.d.ts.map +1 -1
  154. package/dist/server/fx.js +1 -0
  155. package/dist/server/fx.js.map +1 -1
  156. package/dist/server/http.d.ts +59 -0
  157. package/dist/server/http.d.ts.map +1 -0
  158. package/dist/server/http.js +287 -0
  159. package/dist/server/http.js.map +1 -0
  160. package/dist/server/identity.d.ts +1 -0
  161. package/dist/server/identity.js +13 -0
  162. package/dist/server/identity.js.map +1 -0
  163. package/dist/server/index.d.ts +432 -1
  164. package/dist/server/index.d.ts.map +1 -1
  165. package/dist/server/index.js +486 -36
  166. package/dist/server/index.js.map +1 -1
  167. package/dist/server/keys.d.ts +1 -57
  168. package/dist/server/keys.js +4 -0
  169. package/dist/server/keys.js.map +1 -1
  170. package/dist/server/mutations/account.d.ts +7 -7
  171. package/dist/server/mutations/account.d.ts.map +1 -1
  172. package/dist/server/mutations/code.d.ts +13 -13
  173. package/dist/server/mutations/index.d.ts +107 -107
  174. package/dist/server/mutations/index.d.ts.map +1 -1
  175. package/dist/server/mutations/index.js +1 -1
  176. package/dist/server/mutations/index.js.map +1 -1
  177. package/dist/server/mutations/invalidate.d.ts +5 -5
  178. package/dist/server/mutations/oauth.d.ts +10 -10
  179. package/dist/server/mutations/oauth.d.ts.map +1 -1
  180. package/dist/server/mutations/oauth.js +9 -6
  181. package/dist/server/mutations/oauth.js.map +1 -1
  182. package/dist/server/mutations/refresh.d.ts +4 -4
  183. package/dist/server/mutations/register.d.ts +12 -12
  184. package/dist/server/mutations/register.d.ts.map +1 -1
  185. package/dist/server/mutations/retrieve.d.ts +1 -1
  186. package/dist/server/mutations/signature.d.ts +5 -5
  187. package/dist/server/mutations/signature.d.ts.map +1 -1
  188. package/dist/server/mutations/signin.d.ts +1 -1
  189. package/dist/server/mutations/signout.d.ts +1 -1
  190. package/dist/server/mutations/store.d.ts +3 -2
  191. package/dist/server/mutations/store.d.ts.map +1 -1
  192. package/dist/server/mutations/store.js +6 -3
  193. package/dist/server/mutations/store.js.map +1 -1
  194. package/dist/server/mutations/verifier.d.ts +1 -1
  195. package/dist/server/mutations/verify.d.ts +4 -4
  196. package/dist/server/oauth.d.ts +1 -59
  197. package/dist/server/oauth.js +3 -0
  198. package/dist/server/oauth.js.map +1 -1
  199. package/dist/server/passkey.d.ts.map +1 -1
  200. package/dist/server/passkey.js +3 -2
  201. package/dist/server/passkey.js.map +1 -1
  202. package/dist/server/provider.d.ts +1 -14
  203. package/dist/server/provider.d.ts.map +1 -1
  204. package/dist/server/provider.js +2 -0
  205. package/dist/server/provider.js.map +1 -1
  206. package/dist/server/providers.js +3 -0
  207. package/dist/server/providers.js.map +1 -1
  208. package/dist/server/ratelimit.d.ts +1 -22
  209. package/dist/server/ratelimit.js +3 -0
  210. package/dist/server/ratelimit.js.map +1 -1
  211. package/dist/server/redirects.d.ts +1 -10
  212. package/dist/server/redirects.js +2 -0
  213. package/dist/server/redirects.js.map +1 -1
  214. package/dist/server/refresh.d.ts +1 -37
  215. package/dist/server/refresh.js +5 -0
  216. package/dist/server/refresh.js.map +1 -1
  217. package/dist/server/sessions.d.ts +1 -28
  218. package/dist/server/sessions.js +5 -0
  219. package/dist/server/sessions.js.map +1 -1
  220. package/dist/server/signin.d.ts +1 -55
  221. package/dist/server/signin.js +2 -1
  222. package/dist/server/signin.js.map +1 -1
  223. package/dist/server/sso.d.ts +1 -348
  224. package/dist/server/sso.js +165 -18
  225. package/dist/server/sso.js.map +1 -1
  226. package/dist/server/templates.d.ts +1 -21
  227. package/dist/server/templates.js +1 -0
  228. package/dist/server/templates.js.map +1 -1
  229. package/dist/server/tokens.d.ts +1 -11
  230. package/dist/server/tokens.js +1 -0
  231. package/dist/server/tokens.js.map +1 -1
  232. package/dist/server/totp.d.ts +1 -23
  233. package/dist/server/totp.js +4 -2
  234. package/dist/server/totp.js.map +1 -1
  235. package/dist/server/types.d.ts +55 -71
  236. package/dist/server/types.d.ts.map +1 -1
  237. package/dist/server/types.js.map +1 -1
  238. package/dist/server/users.d.ts +1 -31
  239. package/dist/server/users.js +1 -0
  240. package/dist/server/users.js.map +1 -1
  241. package/dist/server/utils.d.ts +1 -27
  242. package/dist/server/utils.js +44 -2
  243. package/dist/server/utils.js.map +1 -1
  244. package/dist/server/version.d.ts +1 -1
  245. package/dist/server/version.js +1 -1
  246. package/dist/server/version.js.map +1 -1
  247. package/package.json +4 -5
  248. package/src/cli/bin.ts +5 -0
  249. package/src/cli/index.ts +22 -9
  250. package/src/cli/keys.ts +3 -0
  251. package/src/client/index.ts +36 -37
  252. package/src/component/_generated/api.ts +14 -0
  253. package/src/component/_generated/component.ts +1920 -3
  254. package/src/component/index.ts +2 -0
  255. package/src/component/model.ts +424 -0
  256. package/src/component/public/enterprise.ts +654 -0
  257. package/src/component/public/factors.ts +332 -0
  258. package/src/component/public/groups.ts +951 -0
  259. package/src/component/public/identity.ts +566 -0
  260. package/src/component/public/keys.ts +209 -0
  261. package/src/component/public/shared.ts +117 -0
  262. package/src/component/public.ts +5 -2965
  263. package/src/component/schema.ts +47 -57
  264. package/src/providers/sso.ts +1 -1
  265. package/src/server/auth.ts +192 -9
  266. package/src/server/cookies.ts +3 -0
  267. package/src/server/db.ts +3 -0
  268. package/src/server/device.ts +3 -1
  269. package/src/server/domains/core.ts +916 -0
  270. package/src/server/domains/sso.ts +1462 -0
  271. package/src/server/enterpriseValidators.ts +88 -0
  272. package/src/server/factory.ts +2168 -0
  273. package/src/server/fx.ts +1 -0
  274. package/src/server/http.ts +529 -0
  275. package/src/server/identity.ts +18 -0
  276. package/src/server/index.ts +712 -40
  277. package/src/server/keys.ts +4 -0
  278. package/src/server/mutations/index.ts +1 -1
  279. package/src/server/mutations/oauth.ts +36 -8
  280. package/src/server/mutations/store.ts +6 -3
  281. package/src/server/oauth.ts +6 -0
  282. package/src/server/passkey.ts +3 -2
  283. package/src/server/provider.ts +2 -0
  284. package/src/server/providers.ts +3 -0
  285. package/src/server/ratelimit.ts +3 -0
  286. package/src/server/redirects.ts +2 -0
  287. package/src/server/refresh.ts +5 -0
  288. package/src/server/sessions.ts +5 -0
  289. package/src/server/signin.ts +1 -0
  290. package/src/server/sso.ts +251 -17
  291. package/src/server/templates.ts +1 -0
  292. package/src/server/tokens.ts +1 -0
  293. package/src/server/totp.ts +4 -2
  294. package/src/server/types.ts +85 -77
  295. package/src/server/users.ts +1 -0
  296. package/src/server/utils.ts +71 -1
  297. package/src/server/version.ts +1 -1
  298. package/dist/component/public.js.map +0 -1
  299. package/dist/component/server/implementation.d.ts +0 -1264
  300. package/dist/component/server/implementation.d.ts.map +0 -1
  301. package/dist/component/server/implementation.js +0 -2365
  302. package/dist/component/server/implementation.js.map +0 -1
  303. package/dist/server/cookies.d.ts.map +0 -1
  304. package/dist/server/db.d.ts.map +0 -1
  305. package/dist/server/device.d.ts.map +0 -1
  306. package/dist/server/implementation.d.ts +0 -1264
  307. package/dist/server/implementation.d.ts.map +0 -1
  308. package/dist/server/implementation.js +0 -2365
  309. package/dist/server/implementation.js.map +0 -1
  310. package/dist/server/keys.d.ts.map +0 -1
  311. package/dist/server/oauth.d.ts.map +0 -1
  312. package/dist/server/ratelimit.d.ts.map +0 -1
  313. package/dist/server/redirects.d.ts.map +0 -1
  314. package/dist/server/refresh.d.ts.map +0 -1
  315. package/dist/server/sessions.d.ts.map +0 -1
  316. package/dist/server/signin.d.ts.map +0 -1
  317. package/dist/server/sso.d.ts.map +0 -1
  318. package/dist/server/templates.d.ts.map +0 -1
  319. package/dist/server/tokens.d.ts.map +0 -1
  320. package/dist/server/totp.d.ts.map +0 -1
  321. package/dist/server/users.d.ts.map +0 -1
  322. package/dist/server/utils.d.ts.map +0 -1
  323. package/src/server/implementation.ts +0 -5336
@@ -26,6 +26,8 @@ export type {
26
26
  KeyScope,
27
27
  ScopeChecker,
28
28
  KeyRecord,
29
+ EnterprisePolicy,
30
+ EnterprisePolicyPatch,
29
31
  HttpKeyContext,
30
32
  CorsConfig,
31
33
  DeviceProviderConfig,
@@ -0,0 +1,424 @@
1
+ import { v } from "convex/values";
2
+
3
+ export const TABLES = {
4
+ User: "User",
5
+ Session: "Session",
6
+ Account: "Account",
7
+ AuthVerifier: "AuthVerifier",
8
+ VerificationCode: "VerificationCode",
9
+ RefreshToken: "RefreshToken",
10
+ Passkey: "Passkey",
11
+ TotpFactor: "TotpFactor",
12
+ RateLimit: "RateLimit",
13
+ Group: "Group",
14
+ GroupTag: "GroupTag",
15
+ GroupMember: "GroupMember",
16
+ GroupInvite: "GroupInvite",
17
+ Enterprise: "Enterprise",
18
+ EnterpriseDomain: "EnterpriseDomain",
19
+ EnterpriseSecret: "EnterpriseSecret",
20
+ EnterpriseScimConfig: "EnterpriseScimConfig",
21
+ EnterpriseScimIdentity: "EnterpriseScimIdentity",
22
+ EnterpriseAuditEvent: "EnterpriseAuditEvent",
23
+ EnterpriseWebhookEndpoint: "EnterpriseWebhookEndpoint",
24
+ EnterpriseWebhookDelivery: "EnterpriseWebhookDelivery",
25
+ ApiKey: "ApiKey",
26
+ DeviceCode: "DeviceCode",
27
+ } as const;
28
+
29
+ export const vTag = v.object({ key: v.string(), value: v.string() });
30
+
31
+ export const vInviteStatus = v.union(
32
+ v.literal("pending"),
33
+ v.literal("accepted"),
34
+ v.literal("revoked"),
35
+ v.literal("expired"),
36
+ );
37
+
38
+ export const vDeviceStatus = v.union(
39
+ v.literal("pending"),
40
+ v.literal("authorized"),
41
+ v.literal("denied"),
42
+ );
43
+
44
+ export const vEnterpriseAccountLinkingPolicy = v.union(
45
+ v.literal("verifiedEmail"),
46
+ v.literal("none"),
47
+ );
48
+
49
+ export const vEnterpriseScimReuseUserPolicy = v.union(
50
+ v.literal("externalId"),
51
+ v.literal("none"),
52
+ );
53
+
54
+ export const vEnterpriseJitProvisioningMode = v.union(
55
+ v.literal("off"),
56
+ v.literal("createUser"),
57
+ v.literal("createUserAndMembership"),
58
+ );
59
+
60
+ export const vEnterpriseDeprovisionMode = v.union(
61
+ v.literal("soft"),
62
+ v.literal("hard"),
63
+ );
64
+
65
+ export const vEnterpriseStatus = v.union(
66
+ v.literal("draft"),
67
+ v.literal("active"),
68
+ v.literal("disabled"),
69
+ );
70
+
71
+ export const vEnterprisePolicy = v.object({
72
+ version: v.literal(1),
73
+ identity: v.object({
74
+ accountLinking: v.object({
75
+ oidc: vEnterpriseAccountLinkingPolicy,
76
+ saml: vEnterpriseAccountLinkingPolicy,
77
+ }),
78
+ }),
79
+ provisioning: v.object({
80
+ scimReuse: v.object({
81
+ user: vEnterpriseScimReuseUserPolicy,
82
+ }),
83
+ jit: v.object({
84
+ mode: vEnterpriseJitProvisioningMode,
85
+ defaultRole: v.string(),
86
+ }),
87
+ deprovision: v.object({
88
+ mode: vEnterpriseDeprovisionMode,
89
+ }),
90
+ }),
91
+ extend: v.optional(v.any()),
92
+ });
93
+
94
+ export const vScimStatus = v.union(
95
+ v.literal("draft"),
96
+ v.literal("active"),
97
+ v.literal("disabled"),
98
+ );
99
+
100
+ export const vScimResourceType = v.union(v.literal("user"), v.literal("group"));
101
+
102
+ export const vAuditActorType = v.union(
103
+ v.literal("user"),
104
+ v.literal("system"),
105
+ v.literal("scim"),
106
+ v.literal("api_key"),
107
+ v.literal("webhook"),
108
+ );
109
+
110
+ export const vAuditStatus = v.union(v.literal("success"), v.literal("failure"));
111
+
112
+ export const vWebhookEndpointStatus = v.union(
113
+ v.literal("active"),
114
+ v.literal("disabled"),
115
+ );
116
+
117
+ export const vWebhookDeliveryStatus = v.union(
118
+ v.literal("pending"),
119
+ v.literal("processing"),
120
+ v.literal("delivered"),
121
+ v.literal("failed"),
122
+ );
123
+
124
+ export const vInviteTokenAcceptStatus = v.union(
125
+ v.literal("accepted"),
126
+ v.literal("already_accepted"),
127
+ );
128
+
129
+ export const vMembershipStatus = v.union(
130
+ v.literal("joined"),
131
+ v.literal("already_joined"),
132
+ v.literal("not_applicable"),
133
+ );
134
+
135
+ export const vApiKeyScope = v.object({
136
+ resource: v.string(),
137
+ actions: v.array(v.string()),
138
+ });
139
+
140
+ export const vApiKeyRateLimit = v.object({
141
+ maxRequests: v.number(),
142
+ windowMs: v.number(),
143
+ });
144
+
145
+ export const vApiKeyRateLimitState = v.object({
146
+ attemptsLeft: v.number(),
147
+ lastAttemptTime: v.number(),
148
+ });
149
+
150
+ export const vEnterpriseSecretKind = v.union(v.literal("oidc_client_secret"));
151
+
152
+ function vDocMeta<T extends (typeof TABLES)[keyof typeof TABLES]>(
153
+ tableName: T,
154
+ ) {
155
+ return {
156
+ _id: v.id(tableName),
157
+ _creationTime: v.number(),
158
+ };
159
+ }
160
+
161
+ export const vUserDoc = v.object({
162
+ ...vDocMeta(TABLES.User),
163
+ name: v.optional(v.string()),
164
+ image: v.optional(v.string()),
165
+ email: v.optional(v.string()),
166
+ emailVerificationTime: v.optional(v.number()),
167
+ phone: v.optional(v.string()),
168
+ phoneVerificationTime: v.optional(v.number()),
169
+ isAnonymous: v.optional(v.boolean()),
170
+ extend: v.optional(v.any()),
171
+ });
172
+
173
+ export const vSessionDoc = v.object({
174
+ ...vDocMeta(TABLES.Session),
175
+ userId: v.id(TABLES.User),
176
+ expirationTime: v.number(),
177
+ });
178
+
179
+ export const vAccountDoc = v.object({
180
+ ...vDocMeta(TABLES.Account),
181
+ userId: v.id(TABLES.User),
182
+ provider: v.string(),
183
+ providerAccountId: v.string(),
184
+ secret: v.optional(v.string()),
185
+ emailVerified: v.optional(v.string()),
186
+ phoneVerified: v.optional(v.string()),
187
+ extend: v.optional(v.any()),
188
+ });
189
+
190
+ export const vAuthVerifierDoc = v.object({
191
+ ...vDocMeta(TABLES.AuthVerifier),
192
+ sessionId: v.optional(v.id(TABLES.Session)),
193
+ signature: v.optional(v.string()),
194
+ });
195
+
196
+ export const vVerificationCodeDoc = v.object({
197
+ ...vDocMeta(TABLES.VerificationCode),
198
+ accountId: v.id(TABLES.Account),
199
+ provider: v.string(),
200
+ code: v.string(),
201
+ expirationTime: v.number(),
202
+ verifier: v.optional(v.string()),
203
+ emailVerified: v.optional(v.string()),
204
+ phoneVerified: v.optional(v.string()),
205
+ });
206
+
207
+ export const vRefreshTokenDoc = v.object({
208
+ ...vDocMeta(TABLES.RefreshToken),
209
+ sessionId: v.id(TABLES.Session),
210
+ expirationTime: v.number(),
211
+ firstUsedTime: v.optional(v.number()),
212
+ parentRefreshTokenId: v.optional(v.id(TABLES.RefreshToken)),
213
+ });
214
+
215
+ export const vPasskeyDoc = v.object({
216
+ ...vDocMeta(TABLES.Passkey),
217
+ userId: v.id(TABLES.User),
218
+ credentialId: v.string(),
219
+ publicKey: v.bytes(),
220
+ algorithm: v.number(),
221
+ counter: v.number(),
222
+ transports: v.optional(v.array(v.string())),
223
+ deviceType: v.string(),
224
+ backedUp: v.boolean(),
225
+ name: v.optional(v.string()),
226
+ createdAt: v.number(),
227
+ lastUsedAt: v.optional(v.number()),
228
+ });
229
+
230
+ export const vTotpFactorDoc = v.object({
231
+ ...vDocMeta(TABLES.TotpFactor),
232
+ userId: v.id(TABLES.User),
233
+ secret: v.bytes(),
234
+ digits: v.number(),
235
+ period: v.number(),
236
+ verified: v.boolean(),
237
+ name: v.optional(v.string()),
238
+ createdAt: v.number(),
239
+ lastUsedAt: v.optional(v.number()),
240
+ });
241
+
242
+ export const vRateLimitDoc = v.object({
243
+ ...vDocMeta(TABLES.RateLimit),
244
+ identifier: v.string(),
245
+ last_attempt_time: v.number(),
246
+ attempts_left: v.number(),
247
+ });
248
+
249
+ export const vGroupDoc = v.object({
250
+ ...vDocMeta(TABLES.Group),
251
+ name: v.string(),
252
+ slug: v.optional(v.string()),
253
+ type: v.optional(v.string()),
254
+ parentGroupId: v.optional(v.id(TABLES.Group)),
255
+ tags: v.optional(v.array(vTag)),
256
+ extend: v.optional(v.any()),
257
+ });
258
+
259
+ export const vGroupMemberDoc = v.object({
260
+ ...vDocMeta(TABLES.GroupMember),
261
+ groupId: v.id(TABLES.Group),
262
+ userId: v.id(TABLES.User),
263
+ role: v.optional(v.string()),
264
+ status: v.optional(v.string()),
265
+ extend: v.optional(v.any()),
266
+ });
267
+
268
+ export const vGroupInviteDoc = v.object({
269
+ ...vDocMeta(TABLES.GroupInvite),
270
+ groupId: v.optional(v.id(TABLES.Group)),
271
+ invitedByUserId: v.optional(v.id(TABLES.User)),
272
+ email: v.optional(v.string()),
273
+ tokenHash: v.string(),
274
+ role: v.optional(v.string()),
275
+ status: vInviteStatus,
276
+ expiresTime: v.optional(v.number()),
277
+ acceptedByUserId: v.optional(v.id(TABLES.User)),
278
+ acceptedTime: v.optional(v.number()),
279
+ extend: v.optional(v.any()),
280
+ });
281
+
282
+ export const vApiKeyDoc = v.object({
283
+ ...vDocMeta(TABLES.ApiKey),
284
+ userId: v.id(TABLES.User),
285
+ prefix: v.string(),
286
+ hashedKey: v.string(),
287
+ name: v.string(),
288
+ scopes: v.array(vApiKeyScope),
289
+ rateLimit: v.optional(vApiKeyRateLimit),
290
+ rateLimitState: v.optional(vApiKeyRateLimitState),
291
+ expiresAt: v.optional(v.number()),
292
+ lastUsedAt: v.optional(v.number()),
293
+ createdAt: v.number(),
294
+ revoked: v.boolean(),
295
+ metadata: v.optional(v.any()),
296
+ });
297
+
298
+ export const vDeviceCodeDoc = v.object({
299
+ ...vDocMeta(TABLES.DeviceCode),
300
+ deviceCodeHash: v.string(),
301
+ userCode: v.string(),
302
+ expiresAt: v.number(),
303
+ interval: v.number(),
304
+ status: vDeviceStatus,
305
+ userId: v.optional(v.id(TABLES.User)),
306
+ sessionId: v.optional(v.id(TABLES.Session)),
307
+ lastPolledAt: v.optional(v.number()),
308
+ });
309
+
310
+ export const vEnterpriseDoc = v.object({
311
+ ...vDocMeta(TABLES.Enterprise),
312
+ groupId: v.id(TABLES.Group),
313
+ slug: v.optional(v.string()),
314
+ name: v.optional(v.string()),
315
+ status: vEnterpriseStatus,
316
+ policy: v.optional(vEnterprisePolicy),
317
+ config: v.optional(v.any()),
318
+ extend: v.optional(v.any()),
319
+ });
320
+
321
+ export const vEnterpriseDomainDoc = v.object({
322
+ ...vDocMeta(TABLES.EnterpriseDomain),
323
+ enterpriseId: v.id(TABLES.Enterprise),
324
+ groupId: v.id(TABLES.Group),
325
+ domain: v.string(),
326
+ isPrimary: v.boolean(),
327
+ verifiedAt: v.optional(v.number()),
328
+ });
329
+
330
+ export const vEnterpriseSecretDoc = v.object({
331
+ ...vDocMeta(TABLES.EnterpriseSecret),
332
+ enterpriseId: v.id(TABLES.Enterprise),
333
+ groupId: v.id(TABLES.Group),
334
+ kind: vEnterpriseSecretKind,
335
+ ciphertext: v.string(),
336
+ updatedAt: v.number(),
337
+ });
338
+
339
+ export const vEnterpriseScimConfigDoc = v.object({
340
+ ...vDocMeta(TABLES.EnterpriseScimConfig),
341
+ enterpriseId: v.id(TABLES.Enterprise),
342
+ groupId: v.id(TABLES.Group),
343
+ status: vScimStatus,
344
+ basePath: v.string(),
345
+ tokenHash: v.string(),
346
+ lastRotatedAt: v.optional(v.number()),
347
+ extend: v.optional(v.any()),
348
+ });
349
+
350
+ export const vEnterpriseScimIdentityDoc = v.object({
351
+ ...vDocMeta(TABLES.EnterpriseScimIdentity),
352
+ enterpriseId: v.id(TABLES.Enterprise),
353
+ groupId: v.id(TABLES.Group),
354
+ resourceType: vScimResourceType,
355
+ externalId: v.string(),
356
+ userId: v.optional(v.id(TABLES.User)),
357
+ mappedGroupId: v.optional(v.id(TABLES.Group)),
358
+ lastProvisionedAt: v.optional(v.number()),
359
+ active: v.optional(v.boolean()),
360
+ raw: v.optional(v.any()),
361
+ });
362
+
363
+ export const vEnterpriseAuditEventDoc = v.object({
364
+ ...vDocMeta(TABLES.EnterpriseAuditEvent),
365
+ enterpriseId: v.id(TABLES.Enterprise),
366
+ groupId: v.id(TABLES.Group),
367
+ eventType: v.string(),
368
+ actorType: vAuditActorType,
369
+ actorId: v.optional(v.string()),
370
+ subjectType: v.string(),
371
+ subjectId: v.optional(v.string()),
372
+ status: vAuditStatus,
373
+ occurredAt: v.number(),
374
+ requestId: v.optional(v.string()),
375
+ ip: v.optional(v.string()),
376
+ metadata: v.optional(v.any()),
377
+ });
378
+
379
+ export const vEnterpriseWebhookEndpointDoc = v.object({
380
+ ...vDocMeta(TABLES.EnterpriseWebhookEndpoint),
381
+ enterpriseId: v.id(TABLES.Enterprise),
382
+ groupId: v.id(TABLES.Group),
383
+ url: v.string(),
384
+ status: vWebhookEndpointStatus,
385
+ secretHash: v.string(),
386
+ subscriptions: v.array(v.string()),
387
+ createdByUserId: v.optional(v.id(TABLES.User)),
388
+ lastSuccessAt: v.optional(v.number()),
389
+ lastFailureAt: v.optional(v.number()),
390
+ failureCount: v.number(),
391
+ extend: v.optional(v.any()),
392
+ });
393
+
394
+ export const vEnterpriseWebhookDeliveryDoc = v.object({
395
+ ...vDocMeta(TABLES.EnterpriseWebhookDelivery),
396
+ enterpriseId: v.id(TABLES.Enterprise),
397
+ endpointId: v.id(TABLES.EnterpriseWebhookEndpoint),
398
+ auditEventId: v.optional(v.id(TABLES.EnterpriseAuditEvent)),
399
+ eventType: v.string(),
400
+ status: vWebhookDeliveryStatus,
401
+ attemptCount: v.number(),
402
+ nextAttemptAt: v.number(),
403
+ lastAttemptAt: v.optional(v.number()),
404
+ lastResponseStatus: v.optional(v.number()),
405
+ lastError: v.optional(v.string()),
406
+ payload: v.any(),
407
+ });
408
+
409
+ export const vRateLimitResult = v.object({
410
+ ...vDocMeta(TABLES.RateLimit),
411
+ identifier: v.string(),
412
+ last_attempt_time: v.number(),
413
+ attempts_left: v.number(),
414
+ attemptsLeft: v.number(),
415
+ lastAttemptTime: v.number(),
416
+ });
417
+
418
+ export const vInviteAcceptByTokenResult = v.object({
419
+ inviteId: v.id(TABLES.GroupInvite),
420
+ groupId: v.union(v.id(TABLES.Group), v.null()),
421
+ memberId: v.optional(v.id(TABLES.GroupMember)),
422
+ inviteStatus: vInviteTokenAcceptStatus,
423
+ membershipStatus: vMembershipStatus,
424
+ });