@robelest/convex-auth 0.0.4-preview.18 → 0.0.4-preview.19

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 (541) hide show
  1. package/README.md +6 -3
  2. package/dist/authorization/index.d.ts +46 -0
  3. package/dist/authorization/index.d.ts.map +1 -1
  4. package/dist/authorization/index.js +46 -0
  5. package/dist/authorization/index.js.map +1 -1
  6. package/dist/bin.cjs +21 -13
  7. package/dist/client/core/types.d.ts +20 -0
  8. package/dist/client/core/types.d.ts.map +1 -0
  9. package/dist/client/index.d.ts +2 -16
  10. package/dist/client/index.d.ts.map +1 -1
  11. package/dist/client/index.js +67 -565
  12. package/dist/client/index.js.map +1 -1
  13. package/dist/component/_generated/api.d.ts +40 -12
  14. package/dist/component/_generated/api.d.ts.map +1 -1
  15. package/dist/component/_generated/api.js.map +1 -1
  16. package/dist/component/_generated/component.d.ts +1306 -1344
  17. package/dist/component/_generated/component.d.ts.map +1 -1
  18. package/dist/component/client/core/types.d.ts +2 -0
  19. package/dist/component/client/index.d.ts +2 -2
  20. package/dist/component/model.d.ts +80 -80
  21. package/dist/component/model.d.ts.map +1 -1
  22. package/dist/component/model.js +5 -1
  23. package/dist/component/model.js.map +1 -1
  24. package/dist/component/providers/credentials.d.ts +3 -2
  25. package/dist/component/providers/credentials.d.ts.map +1 -1
  26. package/dist/component/providers/email.d.ts +30 -0
  27. package/dist/component/providers/email.d.ts.map +1 -1
  28. package/dist/component/providers/phone.d.ts +28 -0
  29. package/dist/component/providers/phone.d.ts.map +1 -1
  30. package/dist/component/public/enterprise/audit.d.ts +73 -0
  31. package/dist/component/public/enterprise/audit.d.ts.map +1 -0
  32. package/dist/component/public/enterprise/audit.js +108 -0
  33. package/dist/component/public/enterprise/audit.js.map +1 -0
  34. package/dist/component/public/enterprise/core.d.ts +176 -0
  35. package/dist/component/public/enterprise/core.d.ts.map +1 -0
  36. package/dist/component/public/enterprise/core.js +292 -0
  37. package/dist/component/public/enterprise/core.js.map +1 -0
  38. package/dist/component/public/enterprise/domains.d.ts +174 -0
  39. package/dist/component/public/enterprise/domains.d.ts.map +1 -0
  40. package/dist/component/public/enterprise/domains.js +271 -0
  41. package/dist/component/public/enterprise/domains.js.map +1 -0
  42. package/dist/component/public/enterprise/scim.d.ts +245 -0
  43. package/dist/component/public/enterprise/scim.d.ts.map +1 -0
  44. package/dist/component/public/enterprise/scim.js +344 -0
  45. package/dist/component/public/enterprise/scim.js.map +1 -0
  46. package/dist/component/public/enterprise/secrets.d.ts +78 -0
  47. package/dist/component/public/enterprise/secrets.d.ts.map +1 -0
  48. package/dist/component/public/enterprise/secrets.js +118 -0
  49. package/dist/component/public/enterprise/secrets.js.map +1 -0
  50. package/dist/component/public/enterprise/webhooks.d.ts +211 -0
  51. package/dist/component/public/enterprise/webhooks.d.ts.map +1 -0
  52. package/dist/component/public/enterprise/webhooks.js +300 -0
  53. package/dist/component/public/enterprise/webhooks.js.map +1 -0
  54. package/dist/component/public/factors/devices.d.ts +157 -0
  55. package/dist/component/public/factors/devices.d.ts.map +1 -0
  56. package/dist/component/public/factors/devices.js +216 -0
  57. package/dist/component/public/factors/devices.js.map +1 -0
  58. package/dist/component/public/factors/passkeys.d.ts +175 -0
  59. package/dist/component/public/factors/passkeys.d.ts.map +1 -0
  60. package/dist/component/public/factors/passkeys.js +238 -0
  61. package/dist/component/public/factors/passkeys.js.map +1 -0
  62. package/dist/component/public/factors/totp.d.ts +189 -0
  63. package/dist/component/public/factors/totp.d.ts.map +1 -0
  64. package/dist/component/public/factors/totp.js +254 -0
  65. package/dist/component/public/factors/totp.js.map +1 -0
  66. package/dist/component/public/groups/core.d.ts +137 -0
  67. package/dist/component/public/groups/core.d.ts.map +1 -0
  68. package/dist/component/public/groups/core.js +321 -0
  69. package/dist/component/public/groups/core.js.map +1 -0
  70. package/dist/component/public/groups/invites.d.ts +217 -0
  71. package/dist/component/public/groups/invites.d.ts.map +1 -0
  72. package/dist/component/public/groups/invites.js +457 -0
  73. package/dist/component/public/groups/invites.js.map +1 -0
  74. package/dist/component/public/groups/members.d.ts +204 -0
  75. package/dist/component/public/groups/members.d.ts.map +1 -0
  76. package/dist/component/public/groups/members.js +355 -0
  77. package/dist/component/public/groups/members.js.map +1 -0
  78. package/dist/component/public/identity/accounts.d.ts +147 -0
  79. package/dist/component/public/identity/accounts.d.ts.map +1 -0
  80. package/dist/component/public/identity/accounts.js +200 -0
  81. package/dist/component/public/identity/accounts.js.map +1 -0
  82. package/dist/component/public/identity/codes.d.ts +104 -0
  83. package/dist/component/public/identity/codes.d.ts.map +1 -0
  84. package/dist/component/public/identity/codes.js +140 -0
  85. package/dist/component/public/identity/codes.js.map +1 -0
  86. package/dist/component/public/identity/sessions.d.ts +128 -0
  87. package/dist/component/public/identity/sessions.d.ts.map +1 -0
  88. package/dist/component/public/identity/sessions.js +192 -0
  89. package/dist/component/public/identity/sessions.js.map +1 -0
  90. package/dist/component/public/identity/tokens.d.ts +169 -0
  91. package/dist/component/public/identity/tokens.d.ts.map +1 -0
  92. package/dist/component/public/identity/tokens.js +227 -0
  93. package/dist/component/public/identity/tokens.js.map +1 -0
  94. package/dist/component/public/identity/users.d.ts +212 -0
  95. package/dist/component/public/identity/users.d.ts.map +1 -0
  96. package/dist/component/public/identity/users.js +311 -0
  97. package/dist/component/public/identity/users.js.map +1 -0
  98. package/dist/component/public/identity/verifiers.d.ts +116 -0
  99. package/dist/component/public/identity/verifiers.d.ts.map +1 -0
  100. package/dist/component/public/identity/verifiers.js +154 -0
  101. package/dist/component/public/identity/verifiers.js.map +1 -0
  102. package/dist/component/public/security/keys.d.ts +209 -0
  103. package/dist/component/public/security/keys.d.ts.map +1 -0
  104. package/dist/component/public/security/keys.js +319 -0
  105. package/dist/component/public/security/keys.js.map +1 -0
  106. package/dist/component/public/security/limits.d.ts +114 -0
  107. package/dist/component/public/security/limits.d.ts.map +1 -0
  108. package/dist/component/public/security/limits.js +169 -0
  109. package/dist/component/public/security/limits.js.map +1 -0
  110. package/dist/component/public.d.ts +22 -7
  111. package/dist/component/public.js +21 -6
  112. package/dist/component/schema.d.ts +288 -288
  113. package/dist/component/server/auth.d.ts +212 -25
  114. package/dist/component/server/auth.d.ts.map +1 -1
  115. package/dist/component/server/auth.js +68 -4
  116. package/dist/component/server/auth.js.map +1 -1
  117. package/dist/component/server/authError.js +34 -0
  118. package/dist/component/server/authError.js.map +1 -0
  119. package/dist/component/server/{providers.js → config.js} +2 -2
  120. package/dist/component/server/config.js.map +1 -0
  121. package/dist/component/server/{domains/core.js → core.js} +107 -88
  122. package/dist/component/server/core.js.map +1 -0
  123. package/dist/component/server/{provider.js → crypto.js} +3 -3
  124. package/dist/component/server/crypto.js.map +1 -0
  125. package/dist/component/server/device.js +1 -1
  126. package/dist/component/server/device.js.map +1 -1
  127. package/dist/component/server/enterprise/config.js +46 -0
  128. package/dist/component/server/enterprise/config.js.map +1 -0
  129. package/dist/component/server/{domains/sso.js → enterprise/domain.js} +6 -5
  130. package/dist/component/server/enterprise/domain.js.map +1 -0
  131. package/dist/component/server/enterprise/http.js +766 -0
  132. package/dist/component/server/enterprise/http.js.map +1 -0
  133. package/dist/component/server/enterprise/oidc.js +248 -0
  134. package/dist/component/server/enterprise/oidc.js.map +1 -0
  135. package/dist/component/server/enterprise/policy.js +85 -0
  136. package/dist/component/server/enterprise/policy.js.map +1 -0
  137. package/dist/component/server/enterprise/saml.js +338 -0
  138. package/dist/component/server/enterprise/saml.js.map +1 -0
  139. package/dist/component/server/enterprise/scim.js +97 -0
  140. package/dist/component/server/enterprise/scim.js.map +1 -0
  141. package/dist/component/server/enterprise/shared.js +51 -0
  142. package/dist/component/server/enterprise/shared.js.map +1 -0
  143. package/dist/component/server/errors.js.map +1 -1
  144. package/dist/component/server/http.js +2 -1
  145. package/dist/component/server/http.js.map +1 -1
  146. package/dist/component/server/identity.js +1 -1
  147. package/dist/component/server/identity.js.map +1 -1
  148. package/dist/component/server/{ratelimit.js → limits.js} +3 -3
  149. package/dist/component/server/limits.js.map +1 -0
  150. package/dist/component/server/mutations/account.js +3 -3
  151. package/dist/component/server/mutations/account.js.map +1 -1
  152. package/dist/component/server/mutations/code.js +2 -2
  153. package/dist/component/server/mutations/code.js.map +1 -1
  154. package/dist/component/server/mutations/invalidate.js +1 -1
  155. package/dist/component/server/mutations/invalidate.js.map +1 -1
  156. package/dist/component/server/mutations/oauth.js +5 -3
  157. package/dist/component/server/mutations/oauth.js.map +1 -1
  158. package/dist/component/server/mutations/refresh.js +1 -1
  159. package/dist/component/server/mutations/refresh.js.map +1 -1
  160. package/dist/component/server/mutations/register.js +3 -3
  161. package/dist/component/server/mutations/register.js.map +1 -1
  162. package/dist/component/server/mutations/retrieve.js +4 -4
  163. package/dist/component/server/mutations/retrieve.js.map +1 -1
  164. package/dist/component/server/mutations/signature.js +2 -2
  165. package/dist/component/server/mutations/signature.js.map +1 -1
  166. package/dist/component/server/mutations/signin.js +1 -1
  167. package/dist/component/server/mutations/signin.js.map +1 -1
  168. package/dist/component/server/mutations/signout.js +1 -1
  169. package/dist/component/server/mutations/signout.js.map +1 -1
  170. package/dist/component/server/mutations/store/refs.js +15 -0
  171. package/dist/component/server/mutations/store/refs.js.map +1 -0
  172. package/dist/component/server/mutations/store.js +80 -10
  173. package/dist/component/server/mutations/store.js.map +1 -1
  174. package/dist/component/server/mutations/verifier.js +1 -1
  175. package/dist/component/server/mutations/verifier.js.map +1 -1
  176. package/dist/component/server/mutations/verify.js +4 -3
  177. package/dist/component/server/mutations/verify.js.map +1 -1
  178. package/dist/component/server/oauth.js +1 -1
  179. package/dist/component/server/oauth.js.map +1 -1
  180. package/dist/component/server/passkey.js +2 -1
  181. package/dist/component/server/passkey.js.map +1 -1
  182. package/dist/component/server/redirects.js +1 -1
  183. package/dist/component/server/redirects.js.map +1 -1
  184. package/dist/component/server/refresh.js +1 -1
  185. package/dist/component/server/refresh.js.map +1 -1
  186. package/dist/component/server/{factory.d.ts → runtime.d.ts} +2 -2
  187. package/dist/component/server/runtime.d.ts.map +1 -0
  188. package/dist/component/server/runtime.js +413 -0
  189. package/dist/component/server/runtime.js.map +1 -0
  190. package/dist/component/server/signin.js +2 -1
  191. package/dist/component/server/signin.js.map +1 -1
  192. package/dist/component/server/totp.js +2 -1
  193. package/dist/component/server/totp.js.map +1 -1
  194. package/dist/component/server/types.d.ts +225 -41
  195. package/dist/component/server/types.d.ts.map +1 -1
  196. package/dist/component/server/types.js.map +1 -1
  197. package/dist/component/server/users.js +1 -1
  198. package/dist/component/server/users.js.map +1 -1
  199. package/dist/component/server/utils.js +1 -1
  200. package/dist/component/server/utils.js.map +1 -1
  201. package/dist/core/types.d.ts +369 -0
  202. package/dist/core/types.d.ts.map +1 -0
  203. package/dist/factors/device.js +105 -0
  204. package/dist/factors/device.js.map +1 -0
  205. package/dist/factors/passkey.js +181 -0
  206. package/dist/factors/passkey.js.map +1 -0
  207. package/dist/factors/totp.js +122 -0
  208. package/dist/factors/totp.js.map +1 -0
  209. package/dist/providers/credentials.d.ts +5 -2
  210. package/dist/providers/credentials.d.ts.map +1 -1
  211. package/dist/providers/credentials.js +2 -0
  212. package/dist/providers/credentials.js.map +1 -1
  213. package/dist/providers/email.d.ts +30 -0
  214. package/dist/providers/email.d.ts.map +1 -1
  215. package/dist/providers/email.js +24 -0
  216. package/dist/providers/email.js.map +1 -1
  217. package/dist/providers/phone.d.ts +28 -0
  218. package/dist/providers/phone.d.ts.map +1 -1
  219. package/dist/providers/phone.js +22 -0
  220. package/dist/providers/phone.js.map +1 -1
  221. package/dist/runtime/browser.js +68 -0
  222. package/dist/runtime/browser.js.map +1 -0
  223. package/dist/runtime/invite.js +51 -0
  224. package/dist/runtime/invite.js.map +1 -0
  225. package/dist/runtime/proxy.js +70 -0
  226. package/dist/runtime/proxy.js.map +1 -0
  227. package/dist/runtime/storage.js +37 -0
  228. package/dist/runtime/storage.js.map +1 -0
  229. package/dist/server/auth.d.ts +218 -28
  230. package/dist/server/auth.d.ts.map +1 -1
  231. package/dist/server/auth.js +68 -4
  232. package/dist/server/auth.js.map +1 -1
  233. package/dist/server/{fx.d.ts → authError.d.ts} +25 -15
  234. package/dist/server/authError.d.ts.map +1 -0
  235. package/dist/server/authError.js +34 -0
  236. package/dist/server/authError.js.map +1 -0
  237. package/dist/server/{providers.js → config.js} +2 -2
  238. package/dist/server/config.js.map +1 -0
  239. package/dist/server/core.d.ts +1436 -0
  240. package/dist/server/core.d.ts.map +1 -0
  241. package/dist/server/{domains/core.js → core.js} +107 -88
  242. package/dist/server/core.js.map +1 -0
  243. package/dist/server/{provider.d.ts → crypto.d.ts} +2 -2
  244. package/dist/server/crypto.d.ts.map +1 -0
  245. package/dist/server/{provider.js → crypto.js} +3 -3
  246. package/dist/{component/server/provider.js.map → server/crypto.js.map} +1 -1
  247. package/dist/server/device.js +1 -1
  248. package/dist/server/device.js.map +1 -1
  249. package/dist/server/enterprise/config.js +46 -0
  250. package/dist/server/enterprise/config.js.map +1 -0
  251. package/dist/server/{domains/sso.d.ts → enterprise/domain.d.ts} +4 -4
  252. package/dist/server/enterprise/domain.d.ts.map +1 -0
  253. package/dist/server/{domains/sso.js → enterprise/domain.js} +6 -5
  254. package/dist/server/enterprise/domain.js.map +1 -0
  255. package/dist/server/enterprise/http.d.ts +26 -0
  256. package/dist/server/enterprise/http.d.ts.map +1 -0
  257. package/dist/server/enterprise/http.js +766 -0
  258. package/dist/server/enterprise/http.js.map +1 -0
  259. package/dist/server/enterprise/oidc.js +248 -0
  260. package/dist/server/enterprise/oidc.js.map +1 -0
  261. package/dist/server/enterprise/policy.js +85 -0
  262. package/dist/server/enterprise/policy.js.map +1 -0
  263. package/dist/server/enterprise/saml.d.ts +1 -0
  264. package/dist/server/enterprise/saml.js +338 -0
  265. package/dist/server/enterprise/saml.js.map +1 -0
  266. package/dist/server/enterprise/scim.d.ts +1 -0
  267. package/dist/server/enterprise/scim.js +97 -0
  268. package/dist/server/enterprise/scim.js.map +1 -0
  269. package/dist/server/enterprise/shared.d.ts +5 -0
  270. package/dist/server/enterprise/shared.d.ts.map +1 -0
  271. package/dist/server/enterprise/shared.js +51 -0
  272. package/dist/server/enterprise/shared.js.map +1 -0
  273. package/dist/server/enterprise/validators.d.ts +1 -0
  274. package/dist/server/{enterpriseValidators.js → enterprise/validators.js} +2 -2
  275. package/dist/server/enterprise/validators.js.map +1 -0
  276. package/dist/server/errors.d.ts +2 -0
  277. package/dist/server/errors.d.ts.map +1 -1
  278. package/dist/server/errors.js +2 -0
  279. package/dist/server/errors.js.map +1 -1
  280. package/dist/server/http.d.ts +2 -2
  281. package/dist/server/http.d.ts.map +1 -1
  282. package/dist/server/http.js +2 -1
  283. package/dist/server/http.js.map +1 -1
  284. package/dist/server/identity.js +1 -1
  285. package/dist/server/identity.js.map +1 -1
  286. package/dist/server/index.d.ts +4 -705
  287. package/dist/server/index.js +4 -1367
  288. package/dist/server/limits.d.ts +1 -0
  289. package/dist/server/{ratelimit.js → limits.js} +3 -3
  290. package/dist/server/limits.js.map +1 -0
  291. package/dist/server/mounts.d.ts +647 -0
  292. package/dist/server/mounts.d.ts.map +1 -0
  293. package/dist/server/mounts.js +643 -0
  294. package/dist/server/mounts.js.map +1 -0
  295. package/dist/server/mutations/account.d.ts +8 -8
  296. package/dist/server/mutations/account.js +3 -3
  297. package/dist/server/mutations/account.js.map +1 -1
  298. package/dist/server/mutations/code.d.ts +13 -13
  299. package/dist/server/mutations/code.js +2 -2
  300. package/dist/server/mutations/code.js.map +1 -1
  301. package/dist/server/mutations/index.d.ts +8 -312
  302. package/dist/server/mutations/index.js +14 -84
  303. package/dist/server/mutations/invalidate.d.ts +5 -5
  304. package/dist/server/mutations/invalidate.d.ts.map +1 -1
  305. package/dist/server/mutations/invalidate.js +1 -1
  306. package/dist/server/mutations/invalidate.js.map +1 -1
  307. package/dist/server/mutations/oauth.d.ts +9 -9
  308. package/dist/server/mutations/oauth.d.ts.map +1 -1
  309. package/dist/server/mutations/oauth.js +5 -3
  310. package/dist/server/mutations/oauth.js.map +1 -1
  311. package/dist/server/mutations/refresh.d.ts +4 -4
  312. package/dist/server/mutations/refresh.js +1 -1
  313. package/dist/server/mutations/refresh.js.map +1 -1
  314. package/dist/server/mutations/register.d.ts +10 -10
  315. package/dist/server/mutations/register.d.ts.map +1 -1
  316. package/dist/server/mutations/register.js +3 -3
  317. package/dist/server/mutations/register.js.map +1 -1
  318. package/dist/server/mutations/retrieve.d.ts +8 -10
  319. package/dist/server/mutations/retrieve.d.ts.map +1 -1
  320. package/dist/server/mutations/retrieve.js +5 -7
  321. package/dist/server/mutations/retrieve.js.map +1 -1
  322. package/dist/server/mutations/signature.d.ts +6 -6
  323. package/dist/server/mutations/signature.d.ts.map +1 -1
  324. package/dist/server/mutations/signature.js +2 -2
  325. package/dist/server/mutations/signature.js.map +1 -1
  326. package/dist/server/mutations/signin.d.ts +1 -1
  327. package/dist/server/mutations/signin.js +1 -1
  328. package/dist/server/mutations/signin.js.map +1 -1
  329. package/dist/server/mutations/signout.d.ts +1 -1
  330. package/dist/server/mutations/signout.js +1 -1
  331. package/dist/server/mutations/signout.js.map +1 -1
  332. package/dist/server/mutations/store/refs.d.ts +12 -0
  333. package/dist/server/mutations/store/refs.d.ts.map +1 -0
  334. package/dist/server/mutations/store/refs.js +15 -0
  335. package/dist/server/mutations/store/refs.js.map +1 -0
  336. package/dist/server/mutations/store.d.ts +303 -9
  337. package/dist/server/mutations/store.d.ts.map +1 -1
  338. package/dist/server/mutations/store.js +80 -10
  339. package/dist/server/mutations/store.js.map +1 -1
  340. package/dist/server/mutations/verifier.d.ts +1 -1
  341. package/dist/server/mutations/verifier.js +1 -1
  342. package/dist/server/mutations/verifier.js.map +1 -1
  343. package/dist/server/mutations/verify.d.ts +8 -8
  344. package/dist/server/mutations/verify.d.ts.map +1 -1
  345. package/dist/server/mutations/verify.js +4 -3
  346. package/dist/server/mutations/verify.js.map +1 -1
  347. package/dist/server/oauth.js +1 -1
  348. package/dist/server/oauth.js.map +1 -1
  349. package/dist/server/passkey.d.ts +2 -2
  350. package/dist/server/passkey.d.ts.map +1 -1
  351. package/dist/server/passkey.js +3 -2
  352. package/dist/server/passkey.js.map +1 -1
  353. package/dist/server/redirects.js +1 -1
  354. package/dist/server/redirects.js.map +1 -1
  355. package/dist/server/refresh.js +1 -1
  356. package/dist/server/refresh.js.map +1 -1
  357. package/dist/server/{factory.d.ts → runtime.d.ts} +16 -16
  358. package/dist/server/runtime.d.ts.map +1 -0
  359. package/dist/server/runtime.js +413 -0
  360. package/dist/server/runtime.js.map +1 -0
  361. package/dist/server/signin.js +3 -2
  362. package/dist/server/signin.js.map +1 -1
  363. package/dist/server/ssr.d.ts +226 -0
  364. package/dist/server/ssr.d.ts.map +1 -0
  365. package/dist/server/ssr.js +786 -0
  366. package/dist/server/ssr.js.map +1 -0
  367. package/dist/server/totp.js +2 -1
  368. package/dist/server/totp.js.map +1 -1
  369. package/dist/server/types.d.ts +242 -42
  370. package/dist/server/types.d.ts.map +1 -1
  371. package/dist/server/types.js +12 -1
  372. package/dist/server/types.js.map +1 -1
  373. package/dist/server/users.js +1 -1
  374. package/dist/server/users.js.map +1 -1
  375. package/dist/server/utils.js +1 -1
  376. package/dist/server/utils.js.map +1 -1
  377. package/package.json +3 -4
  378. package/src/authorization/index.ts +46 -0
  379. package/src/cli/index.ts +38 -20
  380. package/src/client/core/types.ts +437 -0
  381. package/src/client/factors/device.ts +160 -0
  382. package/src/client/factors/passkey.ts +282 -0
  383. package/src/client/factors/totp.ts +150 -0
  384. package/src/client/index.ts +133 -1267
  385. package/src/client/runtime/browser.ts +112 -0
  386. package/src/client/runtime/invite.ts +65 -0
  387. package/src/client/runtime/proxy.ts +111 -0
  388. package/src/client/runtime/storage.ts +79 -0
  389. package/src/component/_generated/api.ts +40 -12
  390. package/src/component/_generated/component.ts +1772 -1798
  391. package/src/component/model.ts +6 -0
  392. package/src/component/public/enterprise/audit.ts +120 -0
  393. package/src/component/public/enterprise/core.ts +354 -0
  394. package/src/component/public/enterprise/domains.ts +323 -0
  395. package/src/component/public/enterprise/scim.ts +396 -0
  396. package/src/component/public/enterprise/secrets.ts +132 -0
  397. package/src/component/public/enterprise/webhooks.ts +306 -0
  398. package/src/component/public/factors/devices.ts +223 -0
  399. package/src/component/public/factors/passkeys.ts +242 -0
  400. package/src/component/public/factors/totp.ts +258 -0
  401. package/src/component/public/groups/core.ts +481 -0
  402. package/src/component/public/groups/invites.ts +602 -0
  403. package/src/component/public/groups/members.ts +409 -0
  404. package/src/component/public/identity/accounts.ts +206 -0
  405. package/src/component/public/identity/codes.ts +148 -0
  406. package/src/component/public/identity/sessions.ts +209 -0
  407. package/src/component/public/identity/tokens.ts +250 -0
  408. package/src/component/public/identity/users.ts +354 -0
  409. package/src/component/public/identity/verifiers.ts +157 -0
  410. package/src/component/public/security/keys.ts +365 -0
  411. package/src/component/public/security/limits.ts +173 -0
  412. package/src/component/public.ts +27 -5
  413. package/src/providers/credentials.ts +4 -5
  414. package/src/providers/email.ts +30 -0
  415. package/src/providers/phone.ts +28 -0
  416. package/src/server/auth.ts +282 -28
  417. package/src/server/authError.ts +44 -0
  418. package/src/server/core.ts +2095 -0
  419. package/src/server/{provider.ts → crypto.ts} +1 -1
  420. package/src/server/device.ts +1 -1
  421. package/src/server/enterprise/config.ts +51 -0
  422. package/src/server/{domains/sso.ts → enterprise/domain.ts} +4 -2
  423. package/src/server/enterprise/http.ts +1324 -0
  424. package/src/server/enterprise/oidc.ts +500 -0
  425. package/src/server/enterprise/policy.ts +128 -0
  426. package/src/server/enterprise/saml.ts +578 -0
  427. package/src/server/enterprise/scim.ts +135 -0
  428. package/src/server/enterprise/shared.ts +134 -0
  429. package/src/server/errors.ts +2 -0
  430. package/src/server/http.ts +3 -1
  431. package/src/server/identity.ts +1 -1
  432. package/src/server/index.ts +32 -2605
  433. package/src/server/{ratelimit.ts → limits.ts} +1 -1
  434. package/src/server/mounts.ts +948 -0
  435. package/src/server/mutations/account.ts +4 -4
  436. package/src/server/mutations/code.ts +3 -3
  437. package/src/server/mutations/index.ts +8 -148
  438. package/src/server/mutations/invalidate.ts +2 -2
  439. package/src/server/mutations/oauth.ts +8 -6
  440. package/src/server/mutations/refresh.ts +3 -3
  441. package/src/server/mutations/register.ts +3 -3
  442. package/src/server/mutations/retrieve.ts +4 -8
  443. package/src/server/mutations/signature.ts +3 -3
  444. package/src/server/mutations/signin.ts +2 -2
  445. package/src/server/mutations/signout.ts +2 -2
  446. package/src/server/mutations/store/refs.ts +10 -0
  447. package/src/server/mutations/store.ts +137 -9
  448. package/src/server/mutations/verifier.ts +2 -2
  449. package/src/server/mutations/verify.ts +5 -5
  450. package/src/server/oauth.ts +1 -1
  451. package/src/server/passkey.ts +3 -4
  452. package/src/server/redirects.ts +1 -1
  453. package/src/server/refresh.ts +1 -1
  454. package/src/server/runtime.ts +880 -0
  455. package/src/server/signin.ts +3 -1
  456. package/src/server/ssr.ts +1764 -0
  457. package/src/server/totp.ts +3 -1
  458. package/src/server/types.ts +254 -43
  459. package/src/server/users.ts +1 -1
  460. package/src/server/utils.ts +1 -1
  461. package/src/test.ts +25 -0
  462. package/dist/component/public/enterprise.d.ts +0 -54
  463. package/dist/component/public/enterprise.d.ts.map +0 -1
  464. package/dist/component/public/enterprise.js +0 -515
  465. package/dist/component/public/enterprise.js.map +0 -1
  466. package/dist/component/public/factors.d.ts +0 -52
  467. package/dist/component/public/factors.d.ts.map +0 -1
  468. package/dist/component/public/factors.js +0 -285
  469. package/dist/component/public/factors.js.map +0 -1
  470. package/dist/component/public/groups.d.ts +0 -124
  471. package/dist/component/public/groups.d.ts.map +0 -1
  472. package/dist/component/public/groups.js +0 -680
  473. package/dist/component/public/groups.js.map +0 -1
  474. package/dist/component/public/identity.d.ts +0 -93
  475. package/dist/component/public/identity.d.ts.map +0 -1
  476. package/dist/component/public/identity.js +0 -426
  477. package/dist/component/public/identity.js.map +0 -1
  478. package/dist/component/public/keys.d.ts +0 -41
  479. package/dist/component/public/keys.d.ts.map +0 -1
  480. package/dist/component/public/keys.js +0 -157
  481. package/dist/component/public/keys.js.map +0 -1
  482. package/dist/component/public/shared.d.ts +0 -26
  483. package/dist/component/public/shared.d.ts.map +0 -1
  484. package/dist/component/public/shared.js +0 -32
  485. package/dist/component/public/shared.js.map +0 -1
  486. package/dist/component/server/domains/core.js.map +0 -1
  487. package/dist/component/server/domains/sso.js.map +0 -1
  488. package/dist/component/server/factory.d.ts.map +0 -1
  489. package/dist/component/server/factory.js +0 -1134
  490. package/dist/component/server/factory.js.map +0 -1
  491. package/dist/component/server/fx.js +0 -66
  492. package/dist/component/server/fx.js.map +0 -1
  493. package/dist/component/server/mutations/index.js +0 -85
  494. package/dist/component/server/mutations/index.js.map +0 -1
  495. package/dist/component/server/providers.js.map +0 -1
  496. package/dist/component/server/ratelimit.js.map +0 -1
  497. package/dist/component/server/sso.js +0 -830
  498. package/dist/component/server/sso.js.map +0 -1
  499. package/dist/server/domains/core.d.ts +0 -449
  500. package/dist/server/domains/core.d.ts.map +0 -1
  501. package/dist/server/domains/core.js.map +0 -1
  502. package/dist/server/domains/sso.d.ts.map +0 -1
  503. package/dist/server/domains/sso.js.map +0 -1
  504. package/dist/server/enterpriseValidators.js.map +0 -1
  505. package/dist/server/factory.d.ts.map +0 -1
  506. package/dist/server/factory.js +0 -1134
  507. package/dist/server/factory.js.map +0 -1
  508. package/dist/server/fx.d.ts.map +0 -1
  509. package/dist/server/fx.js +0 -66
  510. package/dist/server/fx.js.map +0 -1
  511. package/dist/server/index.d.ts.map +0 -1
  512. package/dist/server/index.js.map +0 -1
  513. package/dist/server/mutations/index.d.ts.map +0 -1
  514. package/dist/server/mutations/index.js.map +0 -1
  515. package/dist/server/provider.d.ts.map +0 -1
  516. package/dist/server/provider.js.map +0 -1
  517. package/dist/server/providers.js.map +0 -1
  518. package/dist/server/ratelimit.js.map +0 -1
  519. package/dist/server/sso.js +0 -830
  520. package/dist/server/sso.js.map +0 -1
  521. package/dist/server/version.d.ts +0 -5
  522. package/dist/server/version.d.ts.map +0 -1
  523. package/dist/server/version.js +0 -6
  524. package/dist/server/version.js.map +0 -1
  525. package/src/component/public/enterprise.ts +0 -753
  526. package/src/component/public/factors.ts +0 -333
  527. package/src/component/public/groups.ts +0 -1066
  528. package/src/component/public/identity.ts +0 -569
  529. package/src/component/public/keys.ts +0 -209
  530. package/src/component/public/shared.ts +0 -119
  531. package/src/server/domains/core.ts +0 -1096
  532. package/src/server/factory.ts +0 -2181
  533. package/src/server/fx.ts +0 -152
  534. package/src/server/sso.ts +0 -1516
  535. package/src/server/version.ts +0 -2
  536. /package/dist/server/{enterpriseValidators.d.ts → config.d.ts} +0 -0
  537. /package/dist/server/{providers.d.ts → enterprise/config.d.ts} +0 -0
  538. /package/dist/server/{ratelimit.d.ts → enterprise/oidc.d.ts} +0 -0
  539. /package/dist/server/{sso.d.ts → enterprise/policy.d.ts} +0 -0
  540. /package/src/server/{providers.ts → config.ts} +0 -0
  541. /package/src/server/{enterpriseValidators.ts → enterprise/validators.ts} +0 -0
@@ -0,0 +1,211 @@
1
+ declare namespace webhooks_d_exports {
2
+ export { enterpriseWebhookDeliveryEnqueue, enterpriseWebhookDeliveryList, enterpriseWebhookDeliveryListReady, enterpriseWebhookDeliveryPatch, enterpriseWebhookEndpointCreate, enterpriseWebhookEndpointGet, enterpriseWebhookEndpointList, enterpriseWebhookEndpointUpdate };
3
+ }
4
+ /**
5
+ * Register a new webhook endpoint for an enterprise.
6
+ *
7
+ * Creates an `EnterpriseWebhookEndpoint` document with an initial failure
8
+ * count of `0`. The endpoint status defaults to `"active"` when not
9
+ * explicitly provided. Each endpoint subscribes to a set of event types
10
+ * that determine which deliveries are sent to it.
11
+ *
12
+ * @param args.enterpriseId - The ID of the enterprise this endpoint belongs to.
13
+ * @param args.groupId - The ID of the root group that owns the enterprise.
14
+ * @param args.url - The HTTPS URL where webhook payloads will be delivered.
15
+ * @param args.status - An optional lifecycle status (`"active"`, `"paused"`, or `"disabled"`). Defaults to `"active"`.
16
+ * @param args.secretHash - A hash of the signing secret used to verify delivery payloads.
17
+ * @param args.subscriptions - An array of event type strings this endpoint subscribes to (e.g. `["user.login", "scim.provision"]`).
18
+ * @param args.createdByUserId - An optional ID of the user who created this endpoint.
19
+ * @param args.extend - An optional arbitrary extension object for custom endpoint metadata.
20
+ * @returns The ID of the newly created `EnterpriseWebhookEndpoint` document.
21
+ *
22
+ * @example
23
+ * ```ts
24
+ * const endpointId = await ctx.runMutation(
25
+ * components.auth.enterprise.enterpriseWebhookEndpointCreate,
26
+ * {
27
+ * enterpriseId,
28
+ * groupId: orgGroupId,
29
+ * url: "https://acme.com/webhooks/auth",
30
+ * secretHash: "sha256:whsec_...",
31
+ * subscriptions: ["user.login", "user.created", "scim.provision"],
32
+ * },
33
+ * );
34
+ * ```
35
+ */
36
+ declare const enterpriseWebhookEndpointCreate: any;
37
+ /**
38
+ * List all webhook endpoints registered for an enterprise.
39
+ *
40
+ * Returns all `EnterpriseWebhookEndpoint` documents associated with the
41
+ * given enterprise, regardless of status.
42
+ *
43
+ * @param args.enterpriseId - The ID of the enterprise whose webhook endpoints to list.
44
+ * @returns An array of webhook endpoint documents.
45
+ *
46
+ * @example
47
+ * ```ts
48
+ * const endpoints = await ctx.runQuery(
49
+ * components.auth.enterprise.enterpriseWebhookEndpointList,
50
+ * { enterpriseId },
51
+ * );
52
+ * for (const ep of endpoints) {
53
+ * console.log(ep.url, ep.status, ep.subscriptions);
54
+ * }
55
+ * ```
56
+ */
57
+ declare const enterpriseWebhookEndpointList: any;
58
+ /**
59
+ * Retrieve a single webhook endpoint by its document ID.
60
+ *
61
+ * Returns the full endpoint document if it exists, or `null` if no
62
+ * endpoint is found with the given ID.
63
+ *
64
+ * @param args.endpointId - The document ID of the webhook endpoint to retrieve.
65
+ * @returns The webhook endpoint document, or `null` if not found.
66
+ *
67
+ * @example
68
+ * ```ts
69
+ * const endpoint = await ctx.runQuery(
70
+ * components.auth.enterprise.enterpriseWebhookEndpointGet,
71
+ * { endpointId },
72
+ * );
73
+ * if (endpoint) {
74
+ * console.log(endpoint.url, endpoint.failureCount);
75
+ * }
76
+ * ```
77
+ */
78
+ declare const enterpriseWebhookEndpointGet: any;
79
+ /**
80
+ * Partially update (patch) an existing webhook endpoint.
81
+ *
82
+ * Merges the provided `data` fields into the endpoint document. Only the
83
+ * fields present in `data` are changed; all other fields are preserved.
84
+ * Common updates include changing the URL, rotating the secret, updating
85
+ * subscriptions, or changing the status.
86
+ *
87
+ * @param args.endpointId - The document ID of the webhook endpoint to update.
88
+ * @param args.data - An object containing the fields to update (e.g. `{ url, status, subscriptions }`).
89
+ * @returns `null` on success.
90
+ *
91
+ * @example
92
+ * ```ts
93
+ * await ctx.runMutation(
94
+ * components.auth.enterprise.enterpriseWebhookEndpointUpdate,
95
+ * {
96
+ * endpointId,
97
+ * data: {
98
+ * status: "paused",
99
+ * subscriptions: ["user.login"],
100
+ * },
101
+ * },
102
+ * );
103
+ * ```
104
+ */
105
+ declare const enterpriseWebhookEndpointUpdate: any;
106
+ /**
107
+ * Enqueue a webhook delivery for a specific endpoint.
108
+ *
109
+ * Creates a new `EnterpriseWebhookDelivery` document with an initial status
110
+ * of `"pending"` and an attempt count of `0`. The delivery will be picked up
111
+ * by the delivery worker once `nextAttemptAt` is reached.
112
+ *
113
+ * @param args.enterpriseId - The ID of the enterprise the delivery belongs to.
114
+ * @param args.endpointId - The ID of the webhook endpoint this delivery targets.
115
+ * @param args.auditEventId - An optional ID of the audit event that triggered this delivery.
116
+ * @param args.eventType - The event type string describing the payload (e.g. `"user.created"`).
117
+ * @param args.payload - The arbitrary JSON payload to deliver to the endpoint.
118
+ * @param args.nextAttemptAt - Epoch timestamp (ms) when the delivery should first be attempted.
119
+ * @returns The ID of the newly created `EnterpriseWebhookDelivery` document.
120
+ *
121
+ * @example
122
+ * ```ts
123
+ * const deliveryId = await ctx.runMutation(
124
+ * components.auth.enterprise.enterpriseWebhookDeliveryEnqueue,
125
+ * {
126
+ * enterpriseId,
127
+ * endpointId,
128
+ * auditEventId,
129
+ * eventType: "user.created",
130
+ * payload: { userId, email: "jane@acme.com" },
131
+ * nextAttemptAt: Date.now(),
132
+ * },
133
+ * );
134
+ * ```
135
+ */
136
+ declare const enterpriseWebhookDeliveryEnqueue: any;
137
+ /**
138
+ * List pending webhook deliveries that are ready to be attempted.
139
+ *
140
+ * Queries the `status_next_attempt_at` index for deliveries with status
141
+ * `"pending"` whose `nextAttemptAt` is at or before the provided timestamp.
142
+ * This is used by the delivery worker to find deliveries due for processing.
143
+ *
144
+ * @param args.now - The current epoch timestamp (ms) used as the cutoff for `nextAttemptAt`.
145
+ * @param args.limit - Maximum number of deliveries to return (clamped between 1 and 100, defaults to 50).
146
+ * @returns An array of webhook delivery documents ready for dispatch.
147
+ *
148
+ * @example
149
+ * ```ts
150
+ * const ready = await ctx.runQuery(
151
+ * components.auth.enterprise.enterpriseWebhookDeliveryListReady,
152
+ * { now: Date.now(), limit: 10 },
153
+ * );
154
+ * for (const delivery of ready) {
155
+ * await dispatchWebhook(delivery);
156
+ * }
157
+ * ```
158
+ */
159
+ declare const enterpriseWebhookDeliveryListReady: any;
160
+ /**
161
+ * List webhook deliveries for a specific enterprise, ordered by most recent first.
162
+ *
163
+ * Returns deliveries in reverse chronological order, useful for displaying
164
+ * delivery history in an admin dashboard. Includes deliveries of all statuses.
165
+ *
166
+ * @param args.enterpriseId - The ID of the enterprise whose deliveries to list.
167
+ * @param args.limit - Maximum number of deliveries to return (clamped between 1 and 100, defaults to 50).
168
+ * @returns An array of webhook delivery documents, most recent first.
169
+ *
170
+ * @example
171
+ * ```ts
172
+ * const deliveries = await ctx.runQuery(
173
+ * components.auth.enterprise.enterpriseWebhookDeliveryList,
174
+ * { enterpriseId, limit: 25 },
175
+ * );
176
+ * for (const d of deliveries) {
177
+ * console.log(d.eventType, d.status, d.attemptCount);
178
+ * }
179
+ * ```
180
+ */
181
+ declare const enterpriseWebhookDeliveryList: any;
182
+ /**
183
+ * Partially update (patch) an existing webhook delivery record.
184
+ *
185
+ * Merges the provided `data` fields into the delivery document. This is
186
+ * typically used by the delivery worker to update the delivery status,
187
+ * increment the attempt count, record response codes, or schedule retry
188
+ * timestamps after a delivery attempt.
189
+ *
190
+ * @param args.deliveryId - The document ID of the webhook delivery to update.
191
+ * @param args.data - An object containing the fields to update (e.g. `{ status, attemptCount, nextAttemptAt }`).
192
+ * @returns `null` on success.
193
+ *
194
+ * @example
195
+ * ```ts
196
+ * await ctx.runMutation(
197
+ * components.auth.enterprise.enterpriseWebhookDeliveryPatch,
198
+ * {
199
+ * deliveryId,
200
+ * data: {
201
+ * status: "delivered",
202
+ * attemptCount: 1,
203
+ * },
204
+ * },
205
+ * );
206
+ * ```
207
+ */
208
+ declare const enterpriseWebhookDeliveryPatch: any;
209
+ //#endregion
210
+ export { enterpriseWebhookDeliveryEnqueue, enterpriseWebhookDeliveryList, enterpriseWebhookDeliveryListReady, enterpriseWebhookDeliveryPatch, enterpriseWebhookEndpointCreate, enterpriseWebhookEndpointGet, enterpriseWebhookEndpointList, enterpriseWebhookEndpointUpdate, webhooks_d_exports };
211
+ //# sourceMappingURL=webhooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhooks.d.ts","names":[],"sources":["../../../../src/component/public/enterprise/webhooks.ts"],"mappings":";;;;;;;;;;;;;;;;AAwCA;;;;;AAyCA;;;;;AA+BA;;;;;AAkCA;;;;cA1Ga,+BAAA;AAiJb;;;;;AAyCA;;;;;AAkCA;;;;;AAsCA;;;;;AAjHA,cAxGa,6BAAA;;;;;;;;;;;;;;;;;;;;;cA+BA,4BAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;cAkCA,+BAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAuCA,gCAAA;;;;;;;;;;;;;;;;;;;;;;;cAyCA,kCAAA;;;;;;;;;;;;;;;;;;;;;;cAkCA,6BAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;cAsCA,8BAAA"}
@@ -0,0 +1,300 @@
1
+ import { mutation, query } from "../../functions.js";
2
+ import { vEnterpriseWebhookDeliveryDoc, vEnterpriseWebhookEndpointDoc, vWebhookEndpointStatus } from "../../model.js";
3
+ import { v } from "convex/values";
4
+
5
+ //#region src/component/public/enterprise/webhooks.ts
6
+ /**
7
+ * Register a new webhook endpoint for an enterprise.
8
+ *
9
+ * Creates an `EnterpriseWebhookEndpoint` document with an initial failure
10
+ * count of `0`. The endpoint status defaults to `"active"` when not
11
+ * explicitly provided. Each endpoint subscribes to a set of event types
12
+ * that determine which deliveries are sent to it.
13
+ *
14
+ * @param args.enterpriseId - The ID of the enterprise this endpoint belongs to.
15
+ * @param args.groupId - The ID of the root group that owns the enterprise.
16
+ * @param args.url - The HTTPS URL where webhook payloads will be delivered.
17
+ * @param args.status - An optional lifecycle status (`"active"`, `"paused"`, or `"disabled"`). Defaults to `"active"`.
18
+ * @param args.secretHash - A hash of the signing secret used to verify delivery payloads.
19
+ * @param args.subscriptions - An array of event type strings this endpoint subscribes to (e.g. `["user.login", "scim.provision"]`).
20
+ * @param args.createdByUserId - An optional ID of the user who created this endpoint.
21
+ * @param args.extend - An optional arbitrary extension object for custom endpoint metadata.
22
+ * @returns The ID of the newly created `EnterpriseWebhookEndpoint` document.
23
+ *
24
+ * @example
25
+ * ```ts
26
+ * const endpointId = await ctx.runMutation(
27
+ * components.auth.enterprise.enterpriseWebhookEndpointCreate,
28
+ * {
29
+ * enterpriseId,
30
+ * groupId: orgGroupId,
31
+ * url: "https://acme.com/webhooks/auth",
32
+ * secretHash: "sha256:whsec_...",
33
+ * subscriptions: ["user.login", "user.created", "scim.provision"],
34
+ * },
35
+ * );
36
+ * ```
37
+ */
38
+ const enterpriseWebhookEndpointCreate = mutation({
39
+ args: {
40
+ enterpriseId: v.id("Enterprise"),
41
+ groupId: v.id("Group"),
42
+ url: v.string(),
43
+ status: v.optional(vWebhookEndpointStatus),
44
+ secretHash: v.string(),
45
+ subscriptions: v.array(v.string()),
46
+ createdByUserId: v.optional(v.id("User")),
47
+ extend: v.optional(v.any())
48
+ },
49
+ returns: v.id("EnterpriseWebhookEndpoint"),
50
+ handler: async (ctx, args) => {
51
+ return await ctx.db.insert("EnterpriseWebhookEndpoint", {
52
+ ...args,
53
+ status: args.status ?? "active",
54
+ failureCount: 0
55
+ });
56
+ }
57
+ });
58
+ /**
59
+ * List all webhook endpoints registered for an enterprise.
60
+ *
61
+ * Returns all `EnterpriseWebhookEndpoint` documents associated with the
62
+ * given enterprise, regardless of status.
63
+ *
64
+ * @param args.enterpriseId - The ID of the enterprise whose webhook endpoints to list.
65
+ * @returns An array of webhook endpoint documents.
66
+ *
67
+ * @example
68
+ * ```ts
69
+ * const endpoints = await ctx.runQuery(
70
+ * components.auth.enterprise.enterpriseWebhookEndpointList,
71
+ * { enterpriseId },
72
+ * );
73
+ * for (const ep of endpoints) {
74
+ * console.log(ep.url, ep.status, ep.subscriptions);
75
+ * }
76
+ * ```
77
+ */
78
+ const enterpriseWebhookEndpointList = query({
79
+ args: { enterpriseId: v.id("Enterprise") },
80
+ returns: v.array(vEnterpriseWebhookEndpointDoc),
81
+ handler: async (ctx, { enterpriseId }) => {
82
+ return await ctx.db.query("EnterpriseWebhookEndpoint").withIndex("enterprise_id", (idx) => idx.eq("enterpriseId", enterpriseId)).collect();
83
+ }
84
+ });
85
+ /**
86
+ * Retrieve a single webhook endpoint by its document ID.
87
+ *
88
+ * Returns the full endpoint document if it exists, or `null` if no
89
+ * endpoint is found with the given ID.
90
+ *
91
+ * @param args.endpointId - The document ID of the webhook endpoint to retrieve.
92
+ * @returns The webhook endpoint document, or `null` if not found.
93
+ *
94
+ * @example
95
+ * ```ts
96
+ * const endpoint = await ctx.runQuery(
97
+ * components.auth.enterprise.enterpriseWebhookEndpointGet,
98
+ * { endpointId },
99
+ * );
100
+ * if (endpoint) {
101
+ * console.log(endpoint.url, endpoint.failureCount);
102
+ * }
103
+ * ```
104
+ */
105
+ const enterpriseWebhookEndpointGet = query({
106
+ args: { endpointId: v.id("EnterpriseWebhookEndpoint") },
107
+ returns: v.union(vEnterpriseWebhookEndpointDoc, v.null()),
108
+ handler: async (ctx, { endpointId }) => {
109
+ return await ctx.db.get(endpointId);
110
+ }
111
+ });
112
+ /**
113
+ * Partially update (patch) an existing webhook endpoint.
114
+ *
115
+ * Merges the provided `data` fields into the endpoint document. Only the
116
+ * fields present in `data` are changed; all other fields are preserved.
117
+ * Common updates include changing the URL, rotating the secret, updating
118
+ * subscriptions, or changing the status.
119
+ *
120
+ * @param args.endpointId - The document ID of the webhook endpoint to update.
121
+ * @param args.data - An object containing the fields to update (e.g. `{ url, status, subscriptions }`).
122
+ * @returns `null` on success.
123
+ *
124
+ * @example
125
+ * ```ts
126
+ * await ctx.runMutation(
127
+ * components.auth.enterprise.enterpriseWebhookEndpointUpdate,
128
+ * {
129
+ * endpointId,
130
+ * data: {
131
+ * status: "paused",
132
+ * subscriptions: ["user.login"],
133
+ * },
134
+ * },
135
+ * );
136
+ * ```
137
+ */
138
+ const enterpriseWebhookEndpointUpdate = mutation({
139
+ args: {
140
+ endpointId: v.id("EnterpriseWebhookEndpoint"),
141
+ data: v.any()
142
+ },
143
+ returns: v.null(),
144
+ handler: async (ctx, { endpointId, data }) => {
145
+ await ctx.db.patch(endpointId, data);
146
+ return null;
147
+ }
148
+ });
149
+ /**
150
+ * Enqueue a webhook delivery for a specific endpoint.
151
+ *
152
+ * Creates a new `EnterpriseWebhookDelivery` document with an initial status
153
+ * of `"pending"` and an attempt count of `0`. The delivery will be picked up
154
+ * by the delivery worker once `nextAttemptAt` is reached.
155
+ *
156
+ * @param args.enterpriseId - The ID of the enterprise the delivery belongs to.
157
+ * @param args.endpointId - The ID of the webhook endpoint this delivery targets.
158
+ * @param args.auditEventId - An optional ID of the audit event that triggered this delivery.
159
+ * @param args.eventType - The event type string describing the payload (e.g. `"user.created"`).
160
+ * @param args.payload - The arbitrary JSON payload to deliver to the endpoint.
161
+ * @param args.nextAttemptAt - Epoch timestamp (ms) when the delivery should first be attempted.
162
+ * @returns The ID of the newly created `EnterpriseWebhookDelivery` document.
163
+ *
164
+ * @example
165
+ * ```ts
166
+ * const deliveryId = await ctx.runMutation(
167
+ * components.auth.enterprise.enterpriseWebhookDeliveryEnqueue,
168
+ * {
169
+ * enterpriseId,
170
+ * endpointId,
171
+ * auditEventId,
172
+ * eventType: "user.created",
173
+ * payload: { userId, email: "jane@acme.com" },
174
+ * nextAttemptAt: Date.now(),
175
+ * },
176
+ * );
177
+ * ```
178
+ */
179
+ const enterpriseWebhookDeliveryEnqueue = mutation({
180
+ args: {
181
+ enterpriseId: v.id("Enterprise"),
182
+ endpointId: v.id("EnterpriseWebhookEndpoint"),
183
+ auditEventId: v.optional(v.id("EnterpriseAuditEvent")),
184
+ eventType: v.string(),
185
+ payload: v.any(),
186
+ nextAttemptAt: v.number()
187
+ },
188
+ returns: v.id("EnterpriseWebhookDelivery"),
189
+ handler: async (ctx, args) => {
190
+ return await ctx.db.insert("EnterpriseWebhookDelivery", {
191
+ ...args,
192
+ status: "pending",
193
+ attemptCount: 0
194
+ });
195
+ }
196
+ });
197
+ /**
198
+ * List pending webhook deliveries that are ready to be attempted.
199
+ *
200
+ * Queries the `status_next_attempt_at` index for deliveries with status
201
+ * `"pending"` whose `nextAttemptAt` is at or before the provided timestamp.
202
+ * This is used by the delivery worker to find deliveries due for processing.
203
+ *
204
+ * @param args.now - The current epoch timestamp (ms) used as the cutoff for `nextAttemptAt`.
205
+ * @param args.limit - Maximum number of deliveries to return (clamped between 1 and 100, defaults to 50).
206
+ * @returns An array of webhook delivery documents ready for dispatch.
207
+ *
208
+ * @example
209
+ * ```ts
210
+ * const ready = await ctx.runQuery(
211
+ * components.auth.enterprise.enterpriseWebhookDeliveryListReady,
212
+ * { now: Date.now(), limit: 10 },
213
+ * );
214
+ * for (const delivery of ready) {
215
+ * await dispatchWebhook(delivery);
216
+ * }
217
+ * ```
218
+ */
219
+ const enterpriseWebhookDeliveryListReady = query({
220
+ args: {
221
+ now: v.number(),
222
+ limit: v.optional(v.number())
223
+ },
224
+ returns: v.array(vEnterpriseWebhookDeliveryDoc),
225
+ handler: async (ctx, { now, limit }) => {
226
+ return await ctx.db.query("EnterpriseWebhookDelivery").withIndex("status_next_attempt_at", (idx) => idx.eq("status", "pending").lte("nextAttemptAt", now)).take(Math.min(Math.max(limit ?? 50, 1), 100));
227
+ }
228
+ });
229
+ /**
230
+ * List webhook deliveries for a specific enterprise, ordered by most recent first.
231
+ *
232
+ * Returns deliveries in reverse chronological order, useful for displaying
233
+ * delivery history in an admin dashboard. Includes deliveries of all statuses.
234
+ *
235
+ * @param args.enterpriseId - The ID of the enterprise whose deliveries to list.
236
+ * @param args.limit - Maximum number of deliveries to return (clamped between 1 and 100, defaults to 50).
237
+ * @returns An array of webhook delivery documents, most recent first.
238
+ *
239
+ * @example
240
+ * ```ts
241
+ * const deliveries = await ctx.runQuery(
242
+ * components.auth.enterprise.enterpriseWebhookDeliveryList,
243
+ * { enterpriseId, limit: 25 },
244
+ * );
245
+ * for (const d of deliveries) {
246
+ * console.log(d.eventType, d.status, d.attemptCount);
247
+ * }
248
+ * ```
249
+ */
250
+ const enterpriseWebhookDeliveryList = query({
251
+ args: {
252
+ enterpriseId: v.id("Enterprise"),
253
+ limit: v.optional(v.number())
254
+ },
255
+ returns: v.array(vEnterpriseWebhookDeliveryDoc),
256
+ handler: async (ctx, { enterpriseId, limit }) => {
257
+ return await ctx.db.query("EnterpriseWebhookDelivery").withIndex("enterprise_id", (idx) => idx.eq("enterpriseId", enterpriseId)).order("desc").take(Math.min(Math.max(limit ?? 50, 1), 100));
258
+ }
259
+ });
260
+ /**
261
+ * Partially update (patch) an existing webhook delivery record.
262
+ *
263
+ * Merges the provided `data` fields into the delivery document. This is
264
+ * typically used by the delivery worker to update the delivery status,
265
+ * increment the attempt count, record response codes, or schedule retry
266
+ * timestamps after a delivery attempt.
267
+ *
268
+ * @param args.deliveryId - The document ID of the webhook delivery to update.
269
+ * @param args.data - An object containing the fields to update (e.g. `{ status, attemptCount, nextAttemptAt }`).
270
+ * @returns `null` on success.
271
+ *
272
+ * @example
273
+ * ```ts
274
+ * await ctx.runMutation(
275
+ * components.auth.enterprise.enterpriseWebhookDeliveryPatch,
276
+ * {
277
+ * deliveryId,
278
+ * data: {
279
+ * status: "delivered",
280
+ * attemptCount: 1,
281
+ * },
282
+ * },
283
+ * );
284
+ * ```
285
+ */
286
+ const enterpriseWebhookDeliveryPatch = mutation({
287
+ args: {
288
+ deliveryId: v.id("EnterpriseWebhookDelivery"),
289
+ data: v.any()
290
+ },
291
+ returns: v.null(),
292
+ handler: async (ctx, { deliveryId, data }) => {
293
+ await ctx.db.patch(deliveryId, data);
294
+ return null;
295
+ }
296
+ });
297
+
298
+ //#endregion
299
+ export { enterpriseWebhookDeliveryEnqueue, enterpriseWebhookDeliveryList, enterpriseWebhookDeliveryListReady, enterpriseWebhookDeliveryPatch, enterpriseWebhookEndpointCreate, enterpriseWebhookEndpointGet, enterpriseWebhookEndpointList, enterpriseWebhookEndpointUpdate };
300
+ //# sourceMappingURL=webhooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhooks.js","names":[],"sources":["../../../../src/component/public/enterprise/webhooks.ts"],"sourcesContent":["import { v } from \"convex/values\";\nimport { mutation, query } from \"../../functions\";\nimport {\n vEnterpriseWebhookDeliveryDoc,\n vEnterpriseWebhookEndpointDoc,\n vWebhookEndpointStatus,\n} from \"../../model\";\n\n/**\n * Register a new webhook endpoint for an enterprise.\n *\n * Creates an `EnterpriseWebhookEndpoint` document with an initial failure\n * count of `0`. The endpoint status defaults to `\"active\"` when not\n * explicitly provided. Each endpoint subscribes to a set of event types\n * that determine which deliveries are sent to it.\n *\n * @param args.enterpriseId - The ID of the enterprise this endpoint belongs to.\n * @param args.groupId - The ID of the root group that owns the enterprise.\n * @param args.url - The HTTPS URL where webhook payloads will be delivered.\n * @param args.status - An optional lifecycle status (`\"active\"`, `\"paused\"`, or `\"disabled\"`). Defaults to `\"active\"`.\n * @param args.secretHash - A hash of the signing secret used to verify delivery payloads.\n * @param args.subscriptions - An array of event type strings this endpoint subscribes to (e.g. `[\"user.login\", \"scim.provision\"]`).\n * @param args.createdByUserId - An optional ID of the user who created this endpoint.\n * @param args.extend - An optional arbitrary extension object for custom endpoint metadata.\n * @returns The ID of the newly created `EnterpriseWebhookEndpoint` document.\n *\n * @example\n * ```ts\n * const endpointId = await ctx.runMutation(\n * components.auth.enterprise.enterpriseWebhookEndpointCreate,\n * {\n * enterpriseId,\n * groupId: orgGroupId,\n * url: \"https://acme.com/webhooks/auth\",\n * secretHash: \"sha256:whsec_...\",\n * subscriptions: [\"user.login\", \"user.created\", \"scim.provision\"],\n * },\n * );\n * ```\n */\nexport const enterpriseWebhookEndpointCreate = mutation({\n args: {\n enterpriseId: v.id(\"Enterprise\"),\n groupId: v.id(\"Group\"),\n url: v.string(),\n status: v.optional(vWebhookEndpointStatus),\n secretHash: v.string(),\n subscriptions: v.array(v.string()),\n createdByUserId: v.optional(v.id(\"User\")),\n extend: v.optional(v.any()),\n },\n returns: v.id(\"EnterpriseWebhookEndpoint\"),\n handler: async (ctx, args) => {\n return await ctx.db.insert(\"EnterpriseWebhookEndpoint\", {\n ...args,\n status: args.status ?? \"active\",\n failureCount: 0,\n });\n },\n});\n\n/**\n * List all webhook endpoints registered for an enterprise.\n *\n * Returns all `EnterpriseWebhookEndpoint` documents associated with the\n * given enterprise, regardless of status.\n *\n * @param args.enterpriseId - The ID of the enterprise whose webhook endpoints to list.\n * @returns An array of webhook endpoint documents.\n *\n * @example\n * ```ts\n * const endpoints = await ctx.runQuery(\n * components.auth.enterprise.enterpriseWebhookEndpointList,\n * { enterpriseId },\n * );\n * for (const ep of endpoints) {\n * console.log(ep.url, ep.status, ep.subscriptions);\n * }\n * ```\n */\nexport const enterpriseWebhookEndpointList = query({\n args: { enterpriseId: v.id(\"Enterprise\") },\n returns: v.array(vEnterpriseWebhookEndpointDoc),\n handler: async (ctx, { enterpriseId }) => {\n return await ctx.db\n .query(\"EnterpriseWebhookEndpoint\")\n .withIndex(\"enterprise_id\", (idx) => idx.eq(\"enterpriseId\", enterpriseId))\n .collect();\n },\n});\n\n/**\n * Retrieve a single webhook endpoint by its document ID.\n *\n * Returns the full endpoint document if it exists, or `null` if no\n * endpoint is found with the given ID.\n *\n * @param args.endpointId - The document ID of the webhook endpoint to retrieve.\n * @returns The webhook endpoint document, or `null` if not found.\n *\n * @example\n * ```ts\n * const endpoint = await ctx.runQuery(\n * components.auth.enterprise.enterpriseWebhookEndpointGet,\n * { endpointId },\n * );\n * if (endpoint) {\n * console.log(endpoint.url, endpoint.failureCount);\n * }\n * ```\n */\nexport const enterpriseWebhookEndpointGet = query({\n args: { endpointId: v.id(\"EnterpriseWebhookEndpoint\") },\n returns: v.union(vEnterpriseWebhookEndpointDoc, v.null()),\n handler: async (ctx, { endpointId }) => {\n return await ctx.db.get(endpointId);\n },\n});\n\n/**\n * Partially update (patch) an existing webhook endpoint.\n *\n * Merges the provided `data` fields into the endpoint document. Only the\n * fields present in `data` are changed; all other fields are preserved.\n * Common updates include changing the URL, rotating the secret, updating\n * subscriptions, or changing the status.\n *\n * @param args.endpointId - The document ID of the webhook endpoint to update.\n * @param args.data - An object containing the fields to update (e.g. `{ url, status, subscriptions }`).\n * @returns `null` on success.\n *\n * @example\n * ```ts\n * await ctx.runMutation(\n * components.auth.enterprise.enterpriseWebhookEndpointUpdate,\n * {\n * endpointId,\n * data: {\n * status: \"paused\",\n * subscriptions: [\"user.login\"],\n * },\n * },\n * );\n * ```\n */\nexport const enterpriseWebhookEndpointUpdate = mutation({\n args: { endpointId: v.id(\"EnterpriseWebhookEndpoint\"), data: v.any() },\n returns: v.null(),\n handler: async (ctx, { endpointId, data }) => {\n await ctx.db.patch(endpointId, data);\n return null;\n },\n});\n\n/**\n * Enqueue a webhook delivery for a specific endpoint.\n *\n * Creates a new `EnterpriseWebhookDelivery` document with an initial status\n * of `\"pending\"` and an attempt count of `0`. The delivery will be picked up\n * by the delivery worker once `nextAttemptAt` is reached.\n *\n * @param args.enterpriseId - The ID of the enterprise the delivery belongs to.\n * @param args.endpointId - The ID of the webhook endpoint this delivery targets.\n * @param args.auditEventId - An optional ID of the audit event that triggered this delivery.\n * @param args.eventType - The event type string describing the payload (e.g. `\"user.created\"`).\n * @param args.payload - The arbitrary JSON payload to deliver to the endpoint.\n * @param args.nextAttemptAt - Epoch timestamp (ms) when the delivery should first be attempted.\n * @returns The ID of the newly created `EnterpriseWebhookDelivery` document.\n *\n * @example\n * ```ts\n * const deliveryId = await ctx.runMutation(\n * components.auth.enterprise.enterpriseWebhookDeliveryEnqueue,\n * {\n * enterpriseId,\n * endpointId,\n * auditEventId,\n * eventType: \"user.created\",\n * payload: { userId, email: \"jane@acme.com\" },\n * nextAttemptAt: Date.now(),\n * },\n * );\n * ```\n */\nexport const enterpriseWebhookDeliveryEnqueue = mutation({\n args: {\n enterpriseId: v.id(\"Enterprise\"),\n endpointId: v.id(\"EnterpriseWebhookEndpoint\"),\n auditEventId: v.optional(v.id(\"EnterpriseAuditEvent\")),\n eventType: v.string(),\n payload: v.any(),\n nextAttemptAt: v.number(),\n },\n returns: v.id(\"EnterpriseWebhookDelivery\"),\n handler: async (ctx, args) => {\n return await ctx.db.insert(\"EnterpriseWebhookDelivery\", {\n ...args,\n status: \"pending\",\n attemptCount: 0,\n });\n },\n});\n\n/**\n * List pending webhook deliveries that are ready to be attempted.\n *\n * Queries the `status_next_attempt_at` index for deliveries with status\n * `\"pending\"` whose `nextAttemptAt` is at or before the provided timestamp.\n * This is used by the delivery worker to find deliveries due for processing.\n *\n * @param args.now - The current epoch timestamp (ms) used as the cutoff for `nextAttemptAt`.\n * @param args.limit - Maximum number of deliveries to return (clamped between 1 and 100, defaults to 50).\n * @returns An array of webhook delivery documents ready for dispatch.\n *\n * @example\n * ```ts\n * const ready = await ctx.runQuery(\n * components.auth.enterprise.enterpriseWebhookDeliveryListReady,\n * { now: Date.now(), limit: 10 },\n * );\n * for (const delivery of ready) {\n * await dispatchWebhook(delivery);\n * }\n * ```\n */\nexport const enterpriseWebhookDeliveryListReady = query({\n args: { now: v.number(), limit: v.optional(v.number()) },\n returns: v.array(vEnterpriseWebhookDeliveryDoc),\n handler: async (ctx, { now, limit }) => {\n return await ctx.db\n .query(\"EnterpriseWebhookDelivery\")\n .withIndex(\"status_next_attempt_at\", (idx) =>\n idx.eq(\"status\", \"pending\").lte(\"nextAttemptAt\", now),\n )\n .take(Math.min(Math.max(limit ?? 50, 1), 100));\n },\n});\n\n/**\n * List webhook deliveries for a specific enterprise, ordered by most recent first.\n *\n * Returns deliveries in reverse chronological order, useful for displaying\n * delivery history in an admin dashboard. Includes deliveries of all statuses.\n *\n * @param args.enterpriseId - The ID of the enterprise whose deliveries to list.\n * @param args.limit - Maximum number of deliveries to return (clamped between 1 and 100, defaults to 50).\n * @returns An array of webhook delivery documents, most recent first.\n *\n * @example\n * ```ts\n * const deliveries = await ctx.runQuery(\n * components.auth.enterprise.enterpriseWebhookDeliveryList,\n * { enterpriseId, limit: 25 },\n * );\n * for (const d of deliveries) {\n * console.log(d.eventType, d.status, d.attemptCount);\n * }\n * ```\n */\nexport const enterpriseWebhookDeliveryList = query({\n args: { enterpriseId: v.id(\"Enterprise\"), limit: v.optional(v.number()) },\n returns: v.array(vEnterpriseWebhookDeliveryDoc),\n handler: async (ctx, { enterpriseId, limit }) => {\n return await ctx.db\n .query(\"EnterpriseWebhookDelivery\")\n .withIndex(\"enterprise_id\", (idx) => idx.eq(\"enterpriseId\", enterpriseId))\n .order(\"desc\")\n .take(Math.min(Math.max(limit ?? 50, 1), 100));\n },\n});\n\n/**\n * Partially update (patch) an existing webhook delivery record.\n *\n * Merges the provided `data` fields into the delivery document. This is\n * typically used by the delivery worker to update the delivery status,\n * increment the attempt count, record response codes, or schedule retry\n * timestamps after a delivery attempt.\n *\n * @param args.deliveryId - The document ID of the webhook delivery to update.\n * @param args.data - An object containing the fields to update (e.g. `{ status, attemptCount, nextAttemptAt }`).\n * @returns `null` on success.\n *\n * @example\n * ```ts\n * await ctx.runMutation(\n * components.auth.enterprise.enterpriseWebhookDeliveryPatch,\n * {\n * deliveryId,\n * data: {\n * status: \"delivered\",\n * attemptCount: 1,\n * },\n * },\n * );\n * ```\n */\nexport const enterpriseWebhookDeliveryPatch = mutation({\n args: { deliveryId: v.id(\"EnterpriseWebhookDelivery\"), data: v.any() },\n returns: v.null(),\n handler: async (ctx, { deliveryId, data }) => {\n await ctx.db.patch(deliveryId, data);\n return null;\n },\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwCA,MAAa,kCAAkC,SAAS;CACtD,MAAM;EACJ,cAAc,EAAE,GAAG,aAAa;EAChC,SAAS,EAAE,GAAG,QAAQ;EACtB,KAAK,EAAE,QAAQ;EACf,QAAQ,EAAE,SAAS,uBAAuB;EAC1C,YAAY,EAAE,QAAQ;EACtB,eAAe,EAAE,MAAM,EAAE,QAAQ,CAAC;EAClC,iBAAiB,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;EACzC,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC;EAC5B;CACD,SAAS,EAAE,GAAG,4BAA4B;CAC1C,SAAS,OAAO,KAAK,SAAS;AAC5B,SAAO,MAAM,IAAI,GAAG,OAAO,6BAA6B;GACtD,GAAG;GACH,QAAQ,KAAK,UAAU;GACvB,cAAc;GACf,CAAC;;CAEL,CAAC;;;;;;;;;;;;;;;;;;;;;AAsBF,MAAa,gCAAgC,MAAM;CACjD,MAAM,EAAE,cAAc,EAAE,GAAG,aAAa,EAAE;CAC1C,SAAS,EAAE,MAAM,8BAA8B;CAC/C,SAAS,OAAO,KAAK,EAAE,mBAAmB;AACxC,SAAO,MAAM,IAAI,GACd,MAAM,4BAA4B,CAClC,UAAU,kBAAkB,QAAQ,IAAI,GAAG,gBAAgB,aAAa,CAAC,CACzE,SAAS;;CAEf,CAAC;;;;;;;;;;;;;;;;;;;;;AAsBF,MAAa,+BAA+B,MAAM;CAChD,MAAM,EAAE,YAAY,EAAE,GAAG,4BAA4B,EAAE;CACvD,SAAS,EAAE,MAAM,+BAA+B,EAAE,MAAM,CAAC;CACzD,SAAS,OAAO,KAAK,EAAE,iBAAiB;AACtC,SAAO,MAAM,IAAI,GAAG,IAAI,WAAW;;CAEtC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BF,MAAa,kCAAkC,SAAS;CACtD,MAAM;EAAE,YAAY,EAAE,GAAG,4BAA4B;EAAE,MAAM,EAAE,KAAK;EAAE;CACtE,SAAS,EAAE,MAAM;CACjB,SAAS,OAAO,KAAK,EAAE,YAAY,WAAW;AAC5C,QAAM,IAAI,GAAG,MAAM,YAAY,KAAK;AACpC,SAAO;;CAEV,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgCF,MAAa,mCAAmC,SAAS;CACvD,MAAM;EACJ,cAAc,EAAE,GAAG,aAAa;EAChC,YAAY,EAAE,GAAG,4BAA4B;EAC7C,cAAc,EAAE,SAAS,EAAE,GAAG,uBAAuB,CAAC;EACtD,WAAW,EAAE,QAAQ;EACrB,SAAS,EAAE,KAAK;EAChB,eAAe,EAAE,QAAQ;EAC1B;CACD,SAAS,EAAE,GAAG,4BAA4B;CAC1C,SAAS,OAAO,KAAK,SAAS;AAC5B,SAAO,MAAM,IAAI,GAAG,OAAO,6BAA6B;GACtD,GAAG;GACH,QAAQ;GACR,cAAc;GACf,CAAC;;CAEL,CAAC;;;;;;;;;;;;;;;;;;;;;;;AAwBF,MAAa,qCAAqC,MAAM;CACtD,MAAM;EAAE,KAAK,EAAE,QAAQ;EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC;EAAE;CACxD,SAAS,EAAE,MAAM,8BAA8B;CAC/C,SAAS,OAAO,KAAK,EAAE,KAAK,YAAY;AACtC,SAAO,MAAM,IAAI,GACd,MAAM,4BAA4B,CAClC,UAAU,2BAA2B,QACpC,IAAI,GAAG,UAAU,UAAU,CAAC,IAAI,iBAAiB,IAAI,CACtD,CACA,KAAK,KAAK,IAAI,KAAK,IAAI,SAAS,IAAI,EAAE,EAAE,IAAI,CAAC;;CAEnD,CAAC;;;;;;;;;;;;;;;;;;;;;;AAuBF,MAAa,gCAAgC,MAAM;CACjD,MAAM;EAAE,cAAc,EAAE,GAAG,aAAa;EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC;EAAE;CACzE,SAAS,EAAE,MAAM,8BAA8B;CAC/C,SAAS,OAAO,KAAK,EAAE,cAAc,YAAY;AAC/C,SAAO,MAAM,IAAI,GACd,MAAM,4BAA4B,CAClC,UAAU,kBAAkB,QAAQ,IAAI,GAAG,gBAAgB,aAAa,CAAC,CACzE,MAAM,OAAO,CACb,KAAK,KAAK,IAAI,KAAK,IAAI,SAAS,IAAI,EAAE,EAAE,IAAI,CAAC;;CAEnD,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BF,MAAa,iCAAiC,SAAS;CACrD,MAAM;EAAE,YAAY,EAAE,GAAG,4BAA4B;EAAE,MAAM,EAAE,KAAK;EAAE;CACtE,SAAS,EAAE,MAAM;CACjB,SAAS,OAAO,KAAK,EAAE,YAAY,WAAW;AAC5C,QAAM,IAAI,GAAG,MAAM,YAAY,KAAK;AACpC,SAAO;;CAEV,CAAC"}