@baseplate-dev/plugin-auth 0.6.18 → 0.6.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 (209) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/dist/better-auth/admin/generators/admin-crud-manage-roles-action/admin-crud-manage-roles-action.generator.d.ts +62 -0
  3. package/dist/better-auth/admin/generators/admin-crud-manage-roles-action/generated/index.d.ts +62 -0
  4. package/dist/better-auth/admin/generators/admin-crud-manage-roles-action/generated/template-renderers.d.ts +31 -0
  5. package/dist/better-auth/admin/generators/admin-crud-manage-roles-action/generated/typed-templates.d.ts +31 -0
  6. package/dist/better-auth/admin/generators/admin-crud-manage-roles-action/templates/routes/-components/role-manager-dialog.js +1 -2
  7. package/dist/better-auth/admin/generators/admin-crud-manage-roles-action/templates/routes/-components/role-manager-dialog.tsx +1 -1
  8. package/dist/better-auth/admin/generators/admin-crud-reset-password-action/admin-crud-reset-password-action.generator.d.ts +62 -0
  9. package/dist/better-auth/admin/generators/admin-crud-reset-password-action/generated/index.d.ts +62 -0
  10. package/dist/better-auth/admin/generators/admin-crud-reset-password-action/generated/template-renderers.d.ts +31 -0
  11. package/dist/better-auth/admin/generators/admin-crud-reset-password-action/generated/typed-templates.d.ts +62 -0
  12. package/dist/better-auth/admin/generators/admin-crud-reset-password-action/templates/routes/-components/password-reset-dialog.js +1 -2
  13. package/dist/better-auth/admin/generators/admin-crud-reset-password-action/templates/routes/-components/password-reset-dialog.tsx +1 -1
  14. package/dist/better-auth/admin/generators/admin-crud-roles-column/admin-crud-roles-column.generator.d.ts +31 -0
  15. package/dist/better-auth/core/node.js +7 -8
  16. package/dist/better-auth/generators/fastify/better-auth-admin-module/generated/index.d.ts +1 -0
  17. package/dist/better-auth/generators/fastify/better-auth-admin-module/generated/ts-import-providers.d.ts +1 -0
  18. package/dist/better-auth/generators/fastify/better-auth-admin-module/generated/ts-import-providers.js +1 -0
  19. package/dist/better-auth/generators/fastify/better-auth-module/better-auth-module.generator.d.ts +20 -3
  20. package/dist/better-auth/generators/fastify/better-auth-module/better-auth-module.generator.js +5 -24
  21. package/dist/better-auth/generators/fastify/better-auth-module/generated/index.d.ts +40 -2
  22. package/dist/better-auth/generators/fastify/better-auth-module/generated/template-renderers.d.ts +19 -1
  23. package/dist/better-auth/generators/fastify/better-auth-module/generated/template-renderers.js +6 -2
  24. package/dist/better-auth/generators/fastify/better-auth-module/generated/ts-import-providers.d.ts +1 -0
  25. package/dist/better-auth/generators/fastify/better-auth-module/generated/ts-import-providers.js +1 -0
  26. package/dist/better-auth/generators/fastify/better-auth-module/generated/typed-templates.d.ts +20 -1
  27. package/dist/better-auth/generators/fastify/better-auth-module/generated/typed-templates.js +4 -1
  28. package/dist/better-auth/generators/fastify/better-auth-module/templates/module/services/auth.ts +16 -8
  29. package/dist/better-auth/generators/react/better-auth-hooks/better-auth-hooks.generator.d.ts +1 -1
  30. package/dist/better-auth/generators/react/better-auth-hooks/generated/index.d.ts +5 -4
  31. package/dist/better-auth/generators/react/better-auth-hooks/generated/template-paths.d.ts +1 -1
  32. package/dist/better-auth/generators/react/better-auth-hooks/generated/template-paths.js +1 -1
  33. package/dist/better-auth/generators/react/better-auth-hooks/generated/ts-import-providers.d.ts +2 -1
  34. package/dist/better-auth/generators/react/better-auth-hooks/generated/ts-import-providers.js +2 -1
  35. package/dist/better-auth/generators/react/better-auth-hooks/generated/typed-templates.d.ts +6 -6
  36. package/dist/better-auth/generators/react/better-auth-hooks/generated/typed-templates.js +13 -13
  37. package/dist/better-auth/generators/react/better-auth-hooks/templates/src/hooks/{use-required-user-id.ts → use-user-id-or-throw.ts} +1 -1
  38. package/dist/better-auth/generators/react/better-auth-pages/better-auth-pages.generator.d.ts +31 -0
  39. package/dist/better-auth/generators/react/better-auth-pages/generated/index.d.ts +186 -0
  40. package/dist/better-auth/generators/react/better-auth-pages/generated/template-renderers.d.ts +31 -0
  41. package/dist/better-auth/generators/react/better-auth-pages/generated/typed-templates.d.ts +310 -0
  42. package/dist/better-auth/generators/react/better-auth-pages/templates/routes/forgot-password.tsx +1 -4
  43. package/dist/better-auth/generators/react/react-better-auth/generated/index.d.ts +65 -2
  44. package/dist/better-auth/generators/react/react-better-auth/generated/template-renderers.d.ts +32 -1
  45. package/dist/better-auth/generators/react/react-better-auth/generated/ts-import-providers.d.ts +1 -0
  46. package/dist/better-auth/generators/react/react-better-auth/generated/ts-import-providers.js +1 -0
  47. package/dist/better-auth/generators/react/react-better-auth/generated/typed-templates.d.ts +32 -1
  48. package/dist/better-auth/generators/react/react-better-auth/react-better-auth.generator.d.ts +32 -1
  49. package/dist/better-auth/generators/react/react-better-auth/templates/src/app/auth-loaded-gate.tsx +12 -3
  50. package/dist/local-auth/admin/generators/admin-crud-invite-user-action/admin-crud-invite-user-action.generator.d.ts +62 -0
  51. package/dist/local-auth/admin/generators/admin-crud-invite-user-action/generated/index.d.ts +62 -0
  52. package/dist/local-auth/admin/generators/admin-crud-invite-user-action/generated/template-renderers.d.ts +31 -0
  53. package/dist/local-auth/admin/generators/admin-crud-invite-user-action/generated/typed-templates.d.ts +31 -0
  54. package/dist/local-auth/admin/generators/admin-crud-invite-user-action/templates/routes/-components/invite-user-dialog.js +1 -2
  55. package/dist/local-auth/admin/generators/admin-crud-invite-user-action/templates/routes/-components/invite-user-dialog.tsx +1 -1
  56. package/dist/local-auth/admin/generators/admin-crud-manage-roles-action/admin-crud-manage-roles-action.generator.d.ts +62 -0
  57. package/dist/local-auth/admin/generators/admin-crud-manage-roles-action/generated/index.d.ts +62 -0
  58. package/dist/local-auth/admin/generators/admin-crud-manage-roles-action/generated/template-renderers.d.ts +31 -0
  59. package/dist/local-auth/admin/generators/admin-crud-manage-roles-action/generated/typed-templates.d.ts +31 -0
  60. package/dist/local-auth/admin/generators/admin-crud-manage-roles-action/templates/routes/-components/role-manager-dialog.js +1 -2
  61. package/dist/local-auth/admin/generators/admin-crud-manage-roles-action/templates/routes/-components/role-manager-dialog.tsx +1 -1
  62. package/dist/local-auth/admin/generators/admin-crud-reset-password-action/admin-crud-reset-password-action.generator.d.ts +62 -0
  63. package/dist/local-auth/admin/generators/admin-crud-reset-password-action/generated/index.d.ts +62 -0
  64. package/dist/local-auth/admin/generators/admin-crud-reset-password-action/generated/template-renderers.d.ts +31 -0
  65. package/dist/local-auth/admin/generators/admin-crud-reset-password-action/generated/typed-templates.d.ts +62 -0
  66. package/dist/local-auth/admin/generators/admin-crud-reset-password-action/templates/routes/-components/password-reset-dialog.js +1 -2
  67. package/dist/local-auth/admin/generators/admin-crud-reset-password-action/templates/routes/-components/password-reset-dialog.tsx +1 -1
  68. package/dist/local-auth/admin/generators/admin-crud-roles-column/admin-crud-roles-column.generator.d.ts +31 -0
  69. package/dist/local-auth/core/generators/auth-email-password/auth-email-password.generator.d.ts +10 -7
  70. package/dist/local-auth/core/generators/auth-email-password/auth-email-password.generator.js +8 -11
  71. package/dist/local-auth/core/generators/auth-email-password/generated/index.d.ts +40 -13
  72. package/dist/local-auth/core/generators/auth-email-password/generated/template-renderers.d.ts +9 -0
  73. package/dist/local-auth/core/generators/auth-email-password/generated/template-renderers.js +6 -5
  74. package/dist/local-auth/core/generators/auth-email-password/generated/ts-import-providers.d.ts +1 -3
  75. package/dist/local-auth/core/generators/auth-email-password/generated/ts-import-providers.js +1 -2
  76. package/dist/local-auth/core/generators/auth-email-password/generated/typed-templates.d.ts +40 -16
  77. package/dist/local-auth/core/generators/auth-email-password/generated/typed-templates.js +11 -8
  78. package/dist/local-auth/core/generators/auth-email-password/templates/module/services/email-verification.service.js +2 -3
  79. package/dist/local-auth/core/generators/auth-email-password/templates/module/services/email-verification.service.ts +5 -3
  80. package/dist/local-auth/core/generators/auth-email-password/templates/module/services/invite.service.js +17 -13
  81. package/dist/local-auth/core/generators/auth-email-password/templates/module/services/invite.service.ts +25 -13
  82. package/dist/local-auth/core/generators/auth-email-password/templates/module/services/password-reset.service.js +2 -3
  83. package/dist/local-auth/core/generators/auth-email-password/templates/module/services/password-reset.service.ts +5 -3
  84. package/dist/local-auth/core/generators/auth-hooks/auth-hooks.generator.d.ts +272 -1
  85. package/dist/local-auth/core/generators/auth-hooks/generated/index.d.ts +547 -4
  86. package/dist/local-auth/core/generators/auth-hooks/generated/template-paths.d.ts +1 -1
  87. package/dist/local-auth/core/generators/auth-hooks/generated/template-paths.js +1 -1
  88. package/dist/local-auth/core/generators/auth-hooks/generated/template-renderers.d.ts +271 -0
  89. package/dist/local-auth/core/generators/auth-hooks/generated/template-renderers.js +4 -2
  90. package/dist/local-auth/core/generators/auth-hooks/generated/ts-import-providers.d.ts +2 -1
  91. package/dist/local-auth/core/generators/auth-hooks/generated/ts-import-providers.js +2 -1
  92. package/dist/local-auth/core/generators/auth-hooks/generated/typed-templates.d.ts +548 -6
  93. package/dist/local-auth/core/generators/auth-hooks/generated/typed-templates.js +15 -14
  94. package/dist/local-auth/core/generators/auth-hooks/templates/src/hooks/use-log-out.js +1 -1
  95. package/dist/local-auth/core/generators/auth-hooks/templates/src/hooks/use-log-out.ts +1 -1
  96. package/dist/local-auth/core/generators/auth-hooks/templates/src/hooks/use-session.d.ts +7 -0
  97. package/dist/local-auth/core/generators/auth-hooks/templates/src/hooks/use-session.ts +7 -0
  98. package/dist/local-auth/core/generators/auth-module/auth-module.generator.d.ts +19 -7
  99. package/dist/local-auth/core/generators/auth-module/auth-module.generator.js +3 -26
  100. package/dist/local-auth/core/generators/auth-module/generated/index.d.ts +48 -7
  101. package/dist/local-auth/core/generators/auth-module/generated/template-paths.d.ts +0 -1
  102. package/dist/local-auth/core/generators/auth-module/generated/template-paths.js +0 -1
  103. package/dist/local-auth/core/generators/auth-module/generated/template-renderers.d.ts +19 -1
  104. package/dist/local-auth/core/generators/auth-module/generated/template-renderers.js +7 -3
  105. package/dist/local-auth/core/generators/auth-module/generated/ts-import-providers.d.ts +1 -0
  106. package/dist/local-auth/core/generators/auth-module/generated/ts-import-providers.js +1 -0
  107. package/dist/local-auth/core/generators/auth-module/generated/typed-templates.d.ts +28 -7
  108. package/dist/local-auth/core/generators/auth-module/generated/typed-templates.js +5 -14
  109. package/dist/local-auth/core/generators/auth-module/templates/module/services/code-verification.service.d.ts +7 -6
  110. package/dist/local-auth/core/generators/auth-module/templates/module/services/code-verification.service.js +23 -17
  111. package/dist/local-auth/core/generators/auth-module/templates/module/services/code-verification.service.ts +25 -18
  112. package/dist/local-auth/core/generators/auth-module/templates/module/services/user-session.service.js +8 -9
  113. package/dist/local-auth/core/generators/auth-module/templates/module/services/user-session.service.ts +10 -11
  114. package/dist/local-auth/core/generators/auth-routes/auth-routes.generator.d.ts +31 -0
  115. package/dist/local-auth/core/generators/auth-routes/generated/index.d.ts +249 -0
  116. package/dist/local-auth/core/generators/auth-routes/generated/template-renderers.d.ts +31 -0
  117. package/dist/local-auth/core/generators/auth-routes/generated/ts-import-providers.d.ts +1 -0
  118. package/dist/local-auth/core/generators/auth-routes/generated/ts-import-providers.js +1 -0
  119. package/dist/local-auth/core/generators/auth-routes/generated/typed-templates.d.ts +310 -0
  120. package/dist/local-auth/core/generators/auth-routes/templates/routes/auth_/accept-invite.js +12 -5
  121. package/dist/local-auth/core/generators/auth-routes/templates/routes/auth_/accept-invite.tsx +14 -4
  122. package/dist/local-auth/core/generators/auth-routes/templates/routes/auth_/forgot-password.js +1 -2
  123. package/dist/local-auth/core/generators/auth-routes/templates/routes/auth_/forgot-password.tsx +1 -1
  124. package/dist/local-auth/core/generators/auth-routes/templates/routes/auth_/login-otp.js +4 -4
  125. package/dist/local-auth/core/generators/auth-routes/templates/routes/auth_/login-otp.tsx +4 -3
  126. package/dist/local-auth/core/generators/auth-routes/templates/routes/auth_/login.js +4 -4
  127. package/dist/local-auth/core/generators/auth-routes/templates/routes/auth_/login.tsx +4 -3
  128. package/dist/local-auth/core/generators/auth-routes/templates/routes/auth_/register.js +4 -4
  129. package/dist/local-auth/core/generators/auth-routes/templates/routes/auth_/register.tsx +4 -3
  130. package/dist/local-auth/core/generators/auth-routes/templates/routes/auth_/reset-password.js +1 -2
  131. package/dist/local-auth/core/generators/auth-routes/templates/routes/auth_/reset-password.tsx +1 -1
  132. package/dist/local-auth/core/generators/auth-routes/templates/routes/auth_/verify-email.js +1 -2
  133. package/dist/local-auth/core/generators/auth-routes/templates/routes/auth_/verify-email.tsx +1 -1
  134. package/dist/local-auth/core/generators/react-session/generated/index.d.ts +78 -7
  135. package/dist/local-auth/core/generators/react-session/generated/template-renderers.d.ts +32 -1
  136. package/dist/local-auth/core/generators/react-session/generated/ts-import-providers.d.ts +1 -0
  137. package/dist/local-auth/core/generators/react-session/generated/ts-import-providers.js +1 -0
  138. package/dist/local-auth/core/generators/react-session/generated/typed-templates.d.ts +90 -12
  139. package/dist/local-auth/core/generators/react-session/generated/typed-templates.js +5 -2
  140. package/dist/local-auth/core/generators/react-session/react-session.generator.d.ts +48 -1
  141. package/dist/local-auth/core/generators/react-session/react-session.generator.js +35 -1
  142. package/dist/local-auth/core/generators/react-session/templates/src/app/user-session-provider.js +17 -44
  143. package/dist/local-auth/core/generators/react-session/templates/src/app/user-session-provider.tsx +21 -49
  144. package/dist/local-auth/core/generators/react-session/templates/src/services/user-session-client.d.ts +43 -34
  145. package/dist/local-auth/core/generators/react-session/templates/src/services/user-session-client.js +96 -80
  146. package/dist/local-auth/core/generators/react-session/templates/src/services/user-session-client.ts +148 -82
  147. package/dist/local-auth/core/generators/seed-initial-user/generated/index.d.ts +0 -2
  148. package/dist/local-auth/core/generators/seed-initial-user/generated/template-renderers.d.ts +0 -1
  149. package/dist/local-auth/core/generators/seed-initial-user/generated/typed-templates.d.ts +0 -1
  150. package/dist/local-auth/core/generators/seed-initial-user/seed-initial-user.generator.d.ts +0 -1
  151. package/dist/local-auth/core/node.js +7 -7
  152. package/dist/placeholder-auth/core/generators/placeholder-auth-hooks/generated/index.d.ts +4 -3
  153. package/dist/placeholder-auth/core/generators/placeholder-auth-hooks/generated/template-paths.d.ts +1 -1
  154. package/dist/placeholder-auth/core/generators/placeholder-auth-hooks/generated/template-paths.js +1 -1
  155. package/dist/placeholder-auth/core/generators/placeholder-auth-hooks/generated/ts-import-providers.d.ts +2 -1
  156. package/dist/placeholder-auth/core/generators/placeholder-auth-hooks/generated/ts-import-providers.js +2 -1
  157. package/dist/placeholder-auth/core/generators/placeholder-auth-hooks/generated/typed-templates.d.ts +4 -4
  158. package/dist/placeholder-auth/core/generators/placeholder-auth-hooks/generated/typed-templates.js +13 -13
  159. package/dist/placeholder-auth/core/generators/placeholder-auth-hooks/placeholder-auth-hooks.generator.d.ts +1 -1
  160. package/dist/placeholder-auth/core/generators/placeholder-auth-hooks/templates/src/hooks/use-session.d.ts +1 -0
  161. package/dist/placeholder-auth/core/generators/placeholder-auth-hooks/templates/src/hooks/use-session.ts +2 -0
  162. package/dist/placeholder-auth/core/generators/placeholder-auth-module/generated/index.d.ts +1 -2
  163. package/dist/placeholder-auth/core/generators/placeholder-auth-module/generated/template-renderers.d.ts +0 -1
  164. package/dist/placeholder-auth/core/generators/placeholder-auth-module/generated/ts-import-providers.d.ts +1 -0
  165. package/dist/placeholder-auth/core/generators/placeholder-auth-module/generated/ts-import-providers.js +1 -0
  166. package/dist/placeholder-auth/core/generators/placeholder-auth-module/generated/typed-templates.d.ts +0 -1
  167. package/dist/placeholder-auth/core/generators/placeholder-auth-module/placeholder-auth-module.generator.d.ts +0 -1
  168. package/dist/web/assets/{_virtual_mf-localSharedImportMap___mfe_internal__plugin_mf_2_auth__mf_owner__1-CKKmnLep.js → _virtual_mf-localSharedImportMap___mfe_internal__plugin_mf_2_auth__mf_owner__1-DUupKqD4.js} +14 -14
  169. package/dist/web/assets/{_virtual_mf___mfe_internal__plugin_mf_2_auth__mf_owner__1__loadShare___mf_0_baseplate_mf_2_dev_mf_1_project_mf_2_builder_mf_2_lib__loadShare__.js-Cx7TvZ_H.js → _virtual_mf___mfe_internal__plugin_mf_2_auth__mf_owner__1__loadShare___mf_0_baseplate_mf_2_dev_mf_1_project_mf_2_builder_mf_2_lib__loadShare__.js-DE4rTqEA.js} +198 -66
  170. package/dist/web/assets/{_virtual_mf___mfe_internal__plugin_mf_2_auth__mf_owner__1__loadShare___mf_0_baseplate_mf_2_dev_mf_1_project_mf_2_builder_mf_2_lib_mf_1_web__loadShare__.js-D3Nvasea.js → _virtual_mf___mfe_internal__plugin_mf_2_auth__mf_owner__1__loadShare___mf_0_baseplate_mf_2_dev_mf_1_project_mf_2_builder_mf_2_lib_mf_1_web__loadShare__.js-mszeXpf-.js} +1 -1
  171. package/dist/web/assets/{_virtual_mf___mfe_internal__plugin_mf_2_auth__mf_owner__1__loadShare___mf_0_baseplate_mf_2_dev_mf_1_ui_mf_2_components__loadShare__.js-C2GDE8Py.js → _virtual_mf___mfe_internal__plugin_mf_2_auth__mf_owner__1__loadShare___mf_0_baseplate_mf_2_dev_mf_1_ui_mf_2_components__loadShare__.js-CtIleM_e.js} +2517 -1545
  172. package/dist/web/assets/{_virtual_mf___mfe_internal__plugin_mf_2_auth__mf_owner__1__loadShare___mf_0_tanstack_mf_1_react_mf_2_router__loadShare__.js-CiccpWjh.js → _virtual_mf___mfe_internal__plugin_mf_2_auth__mf_owner__1__loadShare___mf_0_tanstack_mf_1_react_mf_2_router__loadShare__.js-BckLhSjF.js} +2 -2
  173. package/dist/web/assets/auth-DR6QxrAW.js +1 -0
  174. package/dist/web/assets/{common-CoLuMS7U.js → common-BsyRiQi3.js} +6 -6
  175. package/dist/web/assets/{common-N3skPbzk.js → common-CRwNlCMn.js} +10 -10
  176. package/dist/web/assets/{common-Co5lW_TK.js → common-CvqlRZC9.js} +12 -12
  177. package/dist/web/assets/{common-C8_sC5pp.js → common-D3atSs7O.js} +15 -15
  178. package/dist/web/assets/common-DuFyXa6l.js +36 -0
  179. package/dist/web/assets/common-islduJTj.js +43 -0
  180. package/dist/web/assets/{get-auth-plugin-definition-DyokUVjX.js → get-auth-plugin-definition-BgWWHl_Y.js} +3 -3
  181. package/dist/web/assets/{hostInit-BCYmw0H5.js → hostInit-DNA4kLRY.js} +1 -1
  182. package/dist/web/assets/{mf-entry-bootstrap-0-3ede9334.js → mf-entry-bootstrap-0-ea77c09b.js} +1 -1
  183. package/dist/web/assets/{mf-entry-bootstrap-1-3da85eea.js → mf-entry-bootstrap-1-9dee3d8d.js} +2 -2
  184. package/dist/web/assets/{mf-entry-bootstrap-2-32e24e11.js → mf-entry-bootstrap-2-3179040b.js} +1 -1
  185. package/dist/web/assets/{mf-entry-bootstrap-3-a3cfea9d.js → mf-entry-bootstrap-3-370d200d.js} +2 -2
  186. package/dist/web/assets/{models-BcPOQC5p.js → models-BOeSYfRn.js} +4 -4
  187. package/dist/web/assets/{models-BcUgOGGn.js → models-DF6DoXt6.js} +4 -4
  188. package/dist/web/assets/{plugin-definition-D1EImXIf.js → plugin-definition--k0VAeK3.js} +9 -9
  189. package/dist/web/assets/{plugin-definition-lw-gB4hU.js → plugin-definition-CMwSlxsJ.js} +3 -3
  190. package/dist/web/assets/{styles-EOyEbGA4.js → styles-BQEcQHoR.js} +8 -8
  191. package/dist/web/assets/{virtualExposes-DWORnjyA.js → virtualExposes-C7fDiAmS.js} +1 -1
  192. package/dist/web/assets/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__plugin-auth__remoteEntry_js-t-KnBiUh.js → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__plugin-auth__remoteEntry_js-BZBRyml2.js} +3 -3
  193. package/dist/web/assets/{virtual_mf-exposes___mfe_internal__plugin-auth__remoteEntry_js-DZfE3QCR.js → virtual_mf-exposes___mfe_internal__plugin-auth__remoteEntry_js-6SjVUCs8.js} +13 -13
  194. package/dist/web/assets/{web-kaD9AzNS.js → web-8wz0ad-V.js} +8 -8
  195. package/dist/web/assets/{web-EDeSquSP.js → web-BGixH_gT.js} +19 -19
  196. package/dist/web/assets/{web-PqAcfBSy.js → web-BxIwkN3O.js} +7 -7
  197. package/dist/web/assets/{web-CBVepebK.js → web-CQMfABjr.js} +19 -19
  198. package/dist/web/assets/{web-RhChfBw_.js → web-CcNpItSu.js} +17 -17
  199. package/dist/web/assets/{web-xJ-GnSkC.js → web-CypPeiVv.js} +25 -25
  200. package/dist/web/assets/{web-Dgb85jhs.js → web-CzK_la2_.js} +41 -41
  201. package/dist/web/index.html +4 -4
  202. package/dist/web/remoteEntry.js +1 -1
  203. package/package.json +12 -12
  204. package/dist/local-auth/core/generators/auth-module/templates/module/utils/cookie-signer.d.ts +0 -38
  205. package/dist/local-auth/core/generators/auth-module/templates/module/utils/cookie-signer.js +0 -71
  206. package/dist/local-auth/core/generators/auth-module/templates/module/utils/cookie-signer.ts +0 -77
  207. package/dist/web/assets/auth-CsHp2bQi.js +0 -1
  208. package/dist/web/assets/common-BGTuTgx7.js +0 -43
  209. package/dist/web/assets/common-Dueu_1NG.js +0 -36
@@ -1,6 +1,5 @@
1
1
  export declare const authModuleGenerator: import("@baseplate-dev/sync").GeneratorBundleCreator<{
2
2
  userAdminRoles?: string[] | undefined;
3
- devWebPorts?: number[] | undefined;
4
3
  emailOtp?: boolean | undefined;
5
4
  }, {
6
5
  paths: import("@baseplate-dev/sync").GeneratorTask<{
@@ -27,6 +26,25 @@ export declare const authModuleGenerator: import("@baseplate-dev/sync").Generato
27
26
  renderers: import("@baseplate-dev/sync").GeneratorTask<{
28
27
  localAuthCoreAuthModuleRenderers: import("@baseplate-dev/sync").ProviderExport<import("./generated/template-renderers.js").LocalAuthCoreAuthModuleRenderers>;
29
28
  }, {
29
+ appSecretImports: import("@baseplate-dev/sync").ProviderType<import("@baseplate-dev/core-generators").InferTsImportMapFromSchema<{
30
+ createSigner: {};
31
+ deriveKey: {};
32
+ SecretPolicy: {
33
+ isTypeOnly: true;
34
+ };
35
+ Signer: {
36
+ isTypeOnly: true;
37
+ };
38
+ }>>;
39
+ appUrlsImports: import("@baseplate-dev/sync").ProviderType<import("@baseplate-dev/core-generators").InferTsImportMapFromSchema<{
40
+ getApiUrl: {};
41
+ getWebAppForUrl: {};
42
+ getWebOrigins: {};
43
+ getWebUrl: {};
44
+ WebAppName: {
45
+ isTypeOnly: true;
46
+ };
47
+ }>>;
30
48
  authContextImports: import("@baseplate-dev/sync").ProviderType<import("@baseplate-dev/core-generators").InferTsImportMapFromSchema<{
31
49
  AuthContext: {
32
50
  isTypeOnly: true;
@@ -37,7 +55,6 @@ export declare const authModuleGenerator: import("@baseplate-dev/sync").Generato
37
55
  AuthUserSessionInfo: {
38
56
  isTypeOnly: true;
39
57
  };
40
- createAnonymousAuthContext: {};
41
58
  createAuthContextFromSessionInfo: {};
42
59
  createSystemAuthContext: {};
43
60
  InvalidSessionError: {};
@@ -158,11 +175,6 @@ export declare const authModuleGenerator: import("@baseplate-dev/sync").Generato
158
175
  };
159
176
  }>>;
160
177
  }, undefined>;
161
- config: import("@baseplate-dev/sync").GeneratorTask<undefined, {
162
- provider: import("@baseplate-dev/sync").ProviderType<Omit<import("@baseplate-dev/utils").FieldMap<{
163
- configFields: import("@baseplate-dev/utils").MapContainer<string, import("@baseplate-dev/fastify-generators").ConfigServiceField>;
164
- }>, "getValues">>;
165
- }, undefined>;
166
178
  appModule: import("@baseplate-dev/sync").GeneratorTask<any, {
167
179
  paths: import("@baseplate-dev/sync").ProviderType<import("./generated/template-paths.js").LocalAuthCoreAuthModulePaths>;
168
180
  appModule: import("@baseplate-dev/sync").ProviderType<import("@baseplate-dev/fastify-generators").AppModuleProvider>;
@@ -1,45 +1,22 @@
1
1
  import { tsCodeFragment, TsCodeUtils, tsTypeImportBuilder, } from '@baseplate-dev/core-generators';
2
- import { appModuleProvider, appRuntimeConfigProvider, configServiceProvider, createPothosPrismaObjectTypeOutputName, pothosTypeOutputProvider, prismaOutputProvider, } from '@baseplate-dev/fastify-generators';
3
- import { createGenerator, createGeneratorTask, createProviderTask, } from '@baseplate-dev/sync';
2
+ import { appModuleProvider, appRuntimeConfigProvider, createPothosPrismaObjectTypeOutputName, pothosTypeOutputProvider, prismaOutputProvider, } from '@baseplate-dev/fastify-generators';
3
+ import { createGenerator, createGeneratorTask } from '@baseplate-dev/sync';
4
4
  import { quot } from '@baseplate-dev/utils';
5
5
  import { z } from 'zod';
6
6
  import { LOCAL_AUTH_MODELS } from '#src/local-auth/constants/model-names.js';
7
7
  import { LOCAL_AUTH_CORE_AUTH_MODULE_GENERATED as GENERATED_TEMPLATES } from './generated/index.js';
8
8
  const descriptorSchema = z.object({
9
9
  userAdminRoles: z.array(z.string()).default([]),
10
- devWebPorts: z.array(z.number()).default([]),
11
10
  emailOtp: z.boolean().default(false),
12
11
  });
13
12
  export const authModuleGenerator = createGenerator({
14
13
  name: 'local-auth/core/auth-module',
15
14
  generatorFileUrl: import.meta.url,
16
15
  descriptorSchema,
17
- buildTasks: ({ userAdminRoles, devWebPorts, emailOtp }) => ({
16
+ buildTasks: ({ userAdminRoles, emailOtp }) => ({
18
17
  paths: GENERATED_TEMPLATES.paths.task,
19
18
  imports: GENERATED_TEMPLATES.imports.task,
20
19
  renderers: GENERATED_TEMPLATES.renderers.task,
21
- config: createProviderTask(configServiceProvider, (configService) => {
22
- const allowedOrigins = devWebPorts
23
- .map((p) => `http://localhost:${String(p)}`)
24
- .join(',');
25
- configService.configFields.set('ALLOWED_ORIGINS', {
26
- validator: tsCodeFragment("z.string().optional().transform((val) => (val ? val.split(',').map((s) => s.trim()) : []))"),
27
- comment: 'Comma-separated list of additional allowed origins for CSRF protection (e.g. https://example.com,https://app.example.com)',
28
- ...(allowedOrigins
29
- ? {
30
- seedValue: allowedOrigins,
31
- exampleValue: allowedOrigins,
32
- }
33
- : {}),
34
- });
35
- const authSecret = 'a-secret-key-1234567890';
36
- configService.configFields.set('AUTH_SECRET', {
37
- validator: tsCodeFragment('z.string().regex(/^[a-zA-Z0-9-_+=/]{20,}$/)'),
38
- comment: 'Secret key for signing auth cookie (at least 20 alphanumeric characters)',
39
- seedValue: authSecret,
40
- exampleValue: authSecret,
41
- });
42
- }),
43
20
  appModule: createGeneratorTask({
44
21
  dependencies: {
45
22
  paths: GENERATED_TEMPLATES.paths.provider,
@@ -1,5 +1,6 @@
1
1
  export declare const LOCAL_AUTH_CORE_AUTH_MODULE_GENERATED: {
2
2
  imports: {
3
+ generatorName: string;
3
4
  task: import("@baseplate-dev/sync").GeneratorTask<{
4
5
  authModuleImports: import("@baseplate-dev/sync").ProviderExport<import("@baseplate-dev/core-generators").InferTsImportMapFromSchema<{
5
6
  cleanupAuthVerificationQueue: {};
@@ -30,6 +31,25 @@ export declare const LOCAL_AUTH_CORE_AUTH_MODULE_GENERATED: {
30
31
  task: import("@baseplate-dev/sync").GeneratorTask<{
31
32
  localAuthCoreAuthModuleRenderers: import("@baseplate-dev/sync").ProviderExport<import("./template-renderers.js").LocalAuthCoreAuthModuleRenderers>;
32
33
  }, {
34
+ appSecretImports: import("@baseplate-dev/sync").ProviderType<import("@baseplate-dev/core-generators").InferTsImportMapFromSchema<{
35
+ createSigner: {};
36
+ deriveKey: {};
37
+ SecretPolicy: {
38
+ isTypeOnly: true;
39
+ };
40
+ Signer: {
41
+ isTypeOnly: true;
42
+ };
43
+ }>>;
44
+ appUrlsImports: import("@baseplate-dev/sync").ProviderType<import("@baseplate-dev/core-generators").InferTsImportMapFromSchema<{
45
+ getApiUrl: {};
46
+ getWebAppForUrl: {};
47
+ getWebOrigins: {};
48
+ getWebUrl: {};
49
+ WebAppName: {
50
+ isTypeOnly: true;
51
+ };
52
+ }>>;
33
53
  authContextImports: import("@baseplate-dev/sync").ProviderType<import("@baseplate-dev/core-generators").InferTsImportMapFromSchema<{
34
54
  AuthContext: {
35
55
  isTypeOnly: true;
@@ -40,7 +60,6 @@ export declare const LOCAL_AUTH_CORE_AUTH_MODULE_GENERATED: {
40
60
  AuthUserSessionInfo: {
41
61
  isTypeOnly: true;
42
62
  };
43
- createAnonymousAuthContext: {};
44
63
  createAuthContextFromSessionInfo: {};
45
64
  createSystemAuthContext: {};
46
65
  InvalidSessionError: {};
@@ -388,9 +407,15 @@ export declare const LOCAL_AUTH_CORE_AUTH_MODULE_GENERATED: {
388
407
  }>>;
389
408
  }, Record<never, Record<never, never>>>;
390
409
  servicesCodeVerification: import("@baseplate-dev/core-generators").TsTemplateFile<{}, {
391
- configServiceImports: import("@baseplate-dev/sync").ProviderType<import("@baseplate-dev/core-generators").InferTsImportMapFromSchema<{
392
- getConfig: {};
393
- isDevelopment: {};
410
+ appSecretImports: import("@baseplate-dev/sync").ProviderType<import("@baseplate-dev/core-generators").InferTsImportMapFromSchema<{
411
+ createSigner: {};
412
+ deriveKey: {};
413
+ SecretPolicy: {
414
+ isTypeOnly: true;
415
+ };
416
+ Signer: {
417
+ isTypeOnly: true;
418
+ };
394
419
  }>>;
395
420
  prismaGeneratedImports: import("@baseplate-dev/sync").ProviderType<import("@baseplate-dev/core-generators").InferTsImportMapFromSchema<{
396
421
  PrismaClient: {};
@@ -407,6 +432,25 @@ export declare const LOCAL_AUTH_CORE_AUTH_MODULE_GENERATED: {
407
432
  userSessionService: import("@baseplate-dev/core-generators").TsTemplateFile<{
408
433
  TPL_PRISMA_USER_SESSION: {};
409
434
  }, {
435
+ appSecretImports: import("@baseplate-dev/sync").ProviderType<import("@baseplate-dev/core-generators").InferTsImportMapFromSchema<{
436
+ createSigner: {};
437
+ deriveKey: {};
438
+ SecretPolicy: {
439
+ isTypeOnly: true;
440
+ };
441
+ Signer: {
442
+ isTypeOnly: true;
443
+ };
444
+ }>>;
445
+ appUrlsImports: import("@baseplate-dev/sync").ProviderType<import("@baseplate-dev/core-generators").InferTsImportMapFromSchema<{
446
+ getApiUrl: {};
447
+ getWebAppForUrl: {};
448
+ getWebOrigins: {};
449
+ getWebUrl: {};
450
+ WebAppName: {
451
+ isTypeOnly: true;
452
+ };
453
+ }>>;
410
454
  authContextImports: import("@baseplate-dev/sync").ProviderType<import("@baseplate-dev/core-generators").InferTsImportMapFromSchema<{
411
455
  AuthContext: {
412
456
  isTypeOnly: true;
@@ -417,7 +461,6 @@ export declare const LOCAL_AUTH_CORE_AUTH_MODULE_GENERATED: {
417
461
  AuthUserSessionInfo: {
418
462
  isTypeOnly: true;
419
463
  };
420
- createAnonymousAuthContext: {};
421
464
  createAuthContextFromSessionInfo: {};
422
465
  createSystemAuthContext: {};
423
466
  InvalidSessionError: {};
@@ -470,13 +513,11 @@ export declare const LOCAL_AUTH_CORE_AUTH_MODULE_GENERATED: {
470
513
  };
471
514
  }>>;
472
515
  }, {
473
- cookieSigner: {};
474
516
  sessionCookie: {};
475
517
  userSessionConstants: {};
476
518
  verifyRequestOrigin: {};
477
519
  }>;
478
520
  utilsGroup: {
479
- cookieSigner: import("@baseplate-dev/core-generators").TsTemplateFile<{}, {}, Record<never, Record<never, never>>>;
480
521
  sessionCookie: import("@baseplate-dev/core-generators").TsTemplateFile<{}, {
481
522
  configServiceImports: import("@baseplate-dev/sync").ProviderType<import("@baseplate-dev/core-generators").InferTsImportMapFromSchema<{
482
523
  getConfig: {};
@@ -1,6 +1,5 @@
1
1
  export interface LocalAuthCoreAuthModulePaths {
2
2
  authRoleEnum: string;
3
- cookieSigner: string;
4
3
  queuesCleanupAuthVerification: string;
5
4
  queuesCleanupAuthVerificationWorker: string;
6
5
  schemaUserSessionMutations: string;
@@ -12,7 +12,6 @@ const localAuthCoreAuthModulePathsTask = createGeneratorTask({
12
12
  providers: {
13
13
  localAuthCoreAuthModulePaths: {
14
14
  authRoleEnum: `${moduleRoot}/schema/auth-role.enum.ts`,
15
- cookieSigner: `${moduleRoot}/utils/cookie-signer.ts`,
16
15
  queuesCleanupAuthVerification: `${moduleRoot}/queues/cleanup-auth-verification.queue.ts`,
17
16
  queuesCleanupAuthVerificationWorker: `${moduleRoot}/queues/cleanup-auth-verification.worker.ts`,
18
17
  schemaUserSessionMutations: `${moduleRoot}/schema/user-session.mutations.ts`,
@@ -32,6 +32,25 @@ export declare const LOCAL_AUTH_CORE_AUTH_MODULE_RENDERERS: {
32
32
  task: import("@baseplate-dev/sync").GeneratorTask<{
33
33
  localAuthCoreAuthModuleRenderers: import("@baseplate-dev/sync").ProviderExport<LocalAuthCoreAuthModuleRenderers>;
34
34
  }, {
35
+ appSecretImports: import("@baseplate-dev/sync").ProviderType<import("@baseplate-dev/core-generators").InferTsImportMapFromSchema<{
36
+ createSigner: {};
37
+ deriveKey: {};
38
+ SecretPolicy: {
39
+ isTypeOnly: true;
40
+ };
41
+ Signer: {
42
+ isTypeOnly: true;
43
+ };
44
+ }>>;
45
+ appUrlsImports: import("@baseplate-dev/sync").ProviderType<import("@baseplate-dev/core-generators").InferTsImportMapFromSchema<{
46
+ getApiUrl: {};
47
+ getWebAppForUrl: {};
48
+ getWebOrigins: {};
49
+ getWebUrl: {};
50
+ WebAppName: {
51
+ isTypeOnly: true;
52
+ };
53
+ }>>;
35
54
  authContextImports: import("@baseplate-dev/sync").ProviderType<import("@baseplate-dev/core-generators").InferTsImportMapFromSchema<{
36
55
  AuthContext: {
37
56
  isTypeOnly: true;
@@ -42,7 +61,6 @@ export declare const LOCAL_AUTH_CORE_AUTH_MODULE_RENDERERS: {
42
61
  AuthUserSessionInfo: {
43
62
  isTypeOnly: true;
44
63
  };
45
- createAnonymousAuthContext: {};
46
64
  createAuthContextFromSessionInfo: {};
47
65
  createSystemAuthContext: {};
48
66
  InvalidSessionError: {};
@@ -1,5 +1,5 @@
1
1
  import { typescriptFileProvider } from '@baseplate-dev/core-generators';
2
- import { authContextImportsProvider, authRolesImportsProvider, configServiceImportsProvider, errorHandlerServiceImportsProvider, pothosImportsProvider, prismaGeneratedImportsProvider, prismaImportsProvider, requestServiceContextImportsProvider, userSessionTypesImportsProvider, } from '@baseplate-dev/fastify-generators';
2
+ import { appSecretImportsProvider, appUrlsImportsProvider, authContextImportsProvider, authRolesImportsProvider, configServiceImportsProvider, errorHandlerServiceImportsProvider, pothosImportsProvider, prismaGeneratedImportsProvider, prismaImportsProvider, requestServiceContextImportsProvider, userSessionTypesImportsProvider, } from '@baseplate-dev/fastify-generators';
3
3
  import { queuesImportsProvider } from '@baseplate-dev/plugin-queue';
4
4
  import { createGeneratorTask, createProviderType } from '@baseplate-dev/sync';
5
5
  import { LOCAL_AUTH_CORE_AUTH_MODULE_PATHS } from './template-paths.js';
@@ -7,6 +7,8 @@ import { LOCAL_AUTH_CORE_AUTH_MODULE_TEMPLATES } from './typed-templates.js';
7
7
  const localAuthCoreAuthModuleRenderers = createProviderType('local-auth-core-auth-module-renderers');
8
8
  const localAuthCoreAuthModuleRenderersTask = createGeneratorTask({
9
9
  dependencies: {
10
+ appSecretImports: appSecretImportsProvider,
11
+ appUrlsImports: appUrlsImportsProvider,
10
12
  authContextImports: authContextImportsProvider,
11
13
  authRolesImports: authRolesImportsProvider,
12
14
  configServiceImports: configServiceImportsProvider,
@@ -23,7 +25,7 @@ const localAuthCoreAuthModuleRenderersTask = createGeneratorTask({
23
25
  exports: {
24
26
  localAuthCoreAuthModuleRenderers: localAuthCoreAuthModuleRenderers.export(),
25
27
  },
26
- run({ authContextImports, authRolesImports, configServiceImports, errorHandlerServiceImports, paths, pothosImports, prismaGeneratedImports, prismaImports, queuesImports, requestServiceContextImports, typescriptFile, userSessionTypesImports, }) {
28
+ run({ appSecretImports, appUrlsImports, authContextImports, authRolesImports, configServiceImports, errorHandlerServiceImports, paths, pothosImports, prismaGeneratedImports, prismaImports, queuesImports, requestServiceContextImports, typescriptFile, userSessionTypesImports, }) {
27
29
  return {
28
30
  providers: {
29
31
  localAuthCoreAuthModuleRenderers: {
@@ -86,7 +88,7 @@ const localAuthCoreAuthModuleRenderersTask = createGeneratorTask({
86
88
  template: LOCAL_AUTH_CORE_AUTH_MODULE_TEMPLATES.servicesCodeVerification,
87
89
  destination: paths.servicesCodeVerification,
88
90
  importMapProviders: {
89
- configServiceImports,
91
+ appSecretImports,
90
92
  prismaGeneratedImports,
91
93
  prismaImports,
92
94
  },
@@ -99,6 +101,8 @@ const localAuthCoreAuthModuleRenderersTask = createGeneratorTask({
99
101
  template: LOCAL_AUTH_CORE_AUTH_MODULE_TEMPLATES.userSessionService,
100
102
  destination: paths.userSessionService,
101
103
  importMapProviders: {
104
+ appSecretImports,
105
+ appUrlsImports,
102
106
  authContextImports,
103
107
  authRolesImports,
104
108
  configServiceImports,
@@ -25,6 +25,7 @@ export declare const authModuleImportsProvider: import("@baseplate-dev/sync").Pr
25
25
  validateCodeVerification: {};
26
26
  }>>;
27
27
  export declare const LOCAL_AUTH_CORE_AUTH_MODULE_IMPORTS: {
28
+ generatorName: string;
28
29
  task: import("@baseplate-dev/sync").GeneratorTask<{
29
30
  authModuleImports: import("@baseplate-dev/sync").ProviderExport<import("@baseplate-dev/core-generators").InferTsImportMapFromSchema<{
30
31
  cleanupAuthVerificationQueue: {};
@@ -41,6 +41,7 @@ const localAuthCoreAuthModuleImportsTask = createGeneratorTask({
41
41
  },
42
42
  });
43
43
  export const LOCAL_AUTH_CORE_AUTH_MODULE_IMPORTS = {
44
+ generatorName: '@baseplate-dev/plugin-auth#local-auth/core/auth-module',
44
45
  task: localAuthCoreAuthModuleImportsTask,
45
46
  };
46
47
  //# sourceMappingURL=ts-import-providers.js.map
@@ -91,7 +91,6 @@ export declare const moduleGroup: {
91
91
  }, Record<never, Record<never, never>>>;
92
92
  };
93
93
  export declare const utilsGroup: {
94
- cookieSigner: import("@baseplate-dev/core-generators").TsTemplateFile<{}, {}, Record<never, Record<never, never>>>;
95
94
  sessionCookie: import("@baseplate-dev/core-generators").TsTemplateFile<{}, {
96
95
  configServiceImports: import("@baseplate-dev/sync").ProviderType<import("@baseplate-dev/core-generators").InferTsImportMapFromSchema<{
97
96
  getConfig: {};
@@ -326,9 +325,15 @@ export declare const LOCAL_AUTH_CORE_AUTH_MODULE_TEMPLATES: {
326
325
  }>>;
327
326
  }, Record<never, Record<never, never>>>;
328
327
  servicesCodeVerification: import("@baseplate-dev/core-generators").TsTemplateFile<{}, {
329
- configServiceImports: import("@baseplate-dev/sync").ProviderType<import("@baseplate-dev/core-generators").InferTsImportMapFromSchema<{
330
- getConfig: {};
331
- isDevelopment: {};
328
+ appSecretImports: import("@baseplate-dev/sync").ProviderType<import("@baseplate-dev/core-generators").InferTsImportMapFromSchema<{
329
+ createSigner: {};
330
+ deriveKey: {};
331
+ SecretPolicy: {
332
+ isTypeOnly: true;
333
+ };
334
+ Signer: {
335
+ isTypeOnly: true;
336
+ };
332
337
  }>>;
333
338
  prismaGeneratedImports: import("@baseplate-dev/sync").ProviderType<import("@baseplate-dev/core-generators").InferTsImportMapFromSchema<{
334
339
  PrismaClient: {};
@@ -345,6 +350,25 @@ export declare const LOCAL_AUTH_CORE_AUTH_MODULE_TEMPLATES: {
345
350
  userSessionService: import("@baseplate-dev/core-generators").TsTemplateFile<{
346
351
  TPL_PRISMA_USER_SESSION: {};
347
352
  }, {
353
+ appSecretImports: import("@baseplate-dev/sync").ProviderType<import("@baseplate-dev/core-generators").InferTsImportMapFromSchema<{
354
+ createSigner: {};
355
+ deriveKey: {};
356
+ SecretPolicy: {
357
+ isTypeOnly: true;
358
+ };
359
+ Signer: {
360
+ isTypeOnly: true;
361
+ };
362
+ }>>;
363
+ appUrlsImports: import("@baseplate-dev/sync").ProviderType<import("@baseplate-dev/core-generators").InferTsImportMapFromSchema<{
364
+ getApiUrl: {};
365
+ getWebAppForUrl: {};
366
+ getWebOrigins: {};
367
+ getWebUrl: {};
368
+ WebAppName: {
369
+ isTypeOnly: true;
370
+ };
371
+ }>>;
348
372
  authContextImports: import("@baseplate-dev/sync").ProviderType<import("@baseplate-dev/core-generators").InferTsImportMapFromSchema<{
349
373
  AuthContext: {
350
374
  isTypeOnly: true;
@@ -355,7 +379,6 @@ export declare const LOCAL_AUTH_CORE_AUTH_MODULE_TEMPLATES: {
355
379
  AuthUserSessionInfo: {
356
380
  isTypeOnly: true;
357
381
  };
358
- createAnonymousAuthContext: {};
359
382
  createAuthContextFromSessionInfo: {};
360
383
  createSystemAuthContext: {};
361
384
  InvalidSessionError: {};
@@ -408,13 +431,11 @@ export declare const LOCAL_AUTH_CORE_AUTH_MODULE_TEMPLATES: {
408
431
  };
409
432
  }>>;
410
433
  }, {
411
- cookieSigner: {};
412
434
  sessionCookie: {};
413
435
  userSessionConstants: {};
414
436
  verifyRequestOrigin: {};
415
437
  }>;
416
438
  utilsGroup: {
417
- cookieSigner: import("@baseplate-dev/core-generators").TsTemplateFile<{}, {}, Record<never, Record<never, never>>>;
418
439
  sessionCookie: import("@baseplate-dev/core-generators").TsTemplateFile<{}, {
419
440
  configServiceImports: import("@baseplate-dev/sync").ProviderType<import("@baseplate-dev/core-generators").InferTsImportMapFromSchema<{
420
441
  getConfig: {};
@@ -1,5 +1,5 @@
1
1
  import { createTsTemplateFile } from '@baseplate-dev/core-generators';
2
- import { authContextImportsProvider, authRolesImportsProvider, configServiceImportsProvider, errorHandlerServiceImportsProvider, pothosImportsProvider, prismaGeneratedImportsProvider, prismaImportsProvider, requestServiceContextImportsProvider, userSessionTypesImportsProvider, } from '@baseplate-dev/fastify-generators';
2
+ import { appSecretImportsProvider, appUrlsImportsProvider, authContextImportsProvider, authRolesImportsProvider, configServiceImportsProvider, errorHandlerServiceImportsProvider, pothosImportsProvider, prismaGeneratedImportsProvider, prismaImportsProvider, requestServiceContextImportsProvider, userSessionTypesImportsProvider, } from '@baseplate-dev/fastify-generators';
3
3
  import { queuesImportsProvider } from '@baseplate-dev/plugin-queue';
4
4
  import path from 'node:path';
5
5
  const userSessionConstants = createTsTemplateFile({
@@ -143,7 +143,7 @@ const servicesAuthVerification = createTsTemplateFile({
143
143
  const servicesCodeVerification = createTsTemplateFile({
144
144
  fileOptions: { kind: 'singleton' },
145
145
  importMapProviders: {
146
- configServiceImports: configServiceImportsProvider,
146
+ appSecretImports: appSecretImportsProvider,
147
147
  prismaGeneratedImports: prismaGeneratedImportsProvider,
148
148
  prismaImports: prismaImportsProvider,
149
149
  },
@@ -162,6 +162,8 @@ const servicesCodeVerification = createTsTemplateFile({
162
162
  const userSessionService = createTsTemplateFile({
163
163
  fileOptions: { kind: 'singleton' },
164
164
  importMapProviders: {
165
+ appSecretImports: appSecretImportsProvider,
166
+ appUrlsImports: appUrlsImportsProvider,
165
167
  authContextImports: authContextImportsProvider,
166
168
  authRolesImports: authRolesImportsProvider,
167
169
  configServiceImports: configServiceImportsProvider,
@@ -173,7 +175,6 @@ const userSessionService = createTsTemplateFile({
173
175
  name: 'user-session-service',
174
176
  projectExports: { CookieUserSessionService: { isTypeOnly: false } },
175
177
  referencedGeneratorTemplates: {
176
- cookieSigner: {},
177
178
  sessionCookie: {},
178
179
  userSessionConstants: {},
179
180
  verifyRequestOrigin: {},
@@ -183,16 +184,6 @@ const userSessionService = createTsTemplateFile({
183
184
  },
184
185
  variables: { TPL_PRISMA_USER_SESSION: {} },
185
186
  });
186
- const cookieSigner = createTsTemplateFile({
187
- fileOptions: { kind: 'singleton' },
188
- group: 'utils',
189
- importMapProviders: {},
190
- name: 'cookie-signer',
191
- source: {
192
- path: path.join(import.meta.dirname, '../templates/module/utils/cookie-signer.ts'),
193
- },
194
- variables: {},
195
- });
196
187
  const sessionCookie = createTsTemplateFile({
197
188
  fileOptions: { kind: 'singleton' },
198
189
  group: 'utils',
@@ -213,7 +204,7 @@ const verifyRequestOrigin = createTsTemplateFile({
213
204
  },
214
205
  variables: {},
215
206
  });
216
- export const utilsGroup = { cookieSigner, sessionCookie, verifyRequestOrigin };
207
+ export const utilsGroup = { sessionCookie, verifyRequestOrigin };
217
208
  export const LOCAL_AUTH_CORE_AUTH_MODULE_TEMPLATES = {
218
209
  constantsGroup,
219
210
  moduleGroup,
@@ -28,18 +28,19 @@ export declare function createCodeVerification({ type, identifier, code, expires
28
28
  id: string;
29
29
  }>;
30
30
  /**
31
- * Validates a short code verification without consuming it, so the caller can
32
- * gather any further input it needs before committing.
31
+ * Validates a short code verification, leaving the record in place so the
32
+ * caller can gather any further input it needs before committing.
33
33
  *
34
34
  * Security: a short numeric code has far less entropy than a random token, so
35
35
  * each code carries its own attempt counter alongside the endpoint rate limits.
36
- * The record is deleted when the code has expired or the attempt budget is
37
- * exhausted. Pass the returned record to {@link consumeCodeVerification} to
36
+ * Every call spends an attempt, including one that matches, and the record is
37
+ * deleted once the code has expired or a wrong guess has spent the last
38
+ * attempt. Pass the returned record to {@link consumeCodeVerification} to
38
39
  * complete the flow.
39
40
  *
40
- * Both cleanup paths delete by filter rather than by primary key: simultaneous
41
+ * The cleanup paths delete by filter rather than by primary key: simultaneous
41
42
  * callers can each decide the record should go, and only one of them removes a
42
- * row. A keyed delete would raise on the others instead of returning null.
43
+ * row.
43
44
  */
44
45
  export declare function validateCodeVerification({ type, identifier, code, maxAttempts, }: {
45
46
  type: string;
@@ -1,6 +1,6 @@
1
1
  // @ts-nocheck
2
2
  import { safeCompare } from '$servicesAuthVerification';
3
- import { getConfig } from '%configServiceImports';
3
+ import { deriveKey } from '%appSecretImports';
4
4
  import { prisma } from '%prismaImports';
5
5
  import * as crypto from 'node:crypto';
6
6
  /**
@@ -24,7 +24,7 @@ import * as crypto from 'node:crypto';
24
24
  */
25
25
  function hashCode({ type, identifier, code, }) {
26
26
  return crypto
27
- .createHmac('sha256', getConfig().AUTH_SECRET)
27
+ .createHmac('sha256', deriveKey('auth:code-verification:v1'))
28
28
  .update(`${type}:${identifier}:${code}`)
29
29
  .digest('hex');
30
30
  }
@@ -74,18 +74,19 @@ export async function createCodeVerification({ type, identifier, code, expiresIn
74
74
  return { id };
75
75
  }
76
76
  /**
77
- * Validates a short code verification without consuming it, so the caller can
78
- * gather any further input it needs before committing.
77
+ * Validates a short code verification, leaving the record in place so the
78
+ * caller can gather any further input it needs before committing.
79
79
  *
80
80
  * Security: a short numeric code has far less entropy than a random token, so
81
81
  * each code carries its own attempt counter alongside the endpoint rate limits.
82
- * The record is deleted when the code has expired or the attempt budget is
83
- * exhausted. Pass the returned record to {@link consumeCodeVerification} to
82
+ * Every call spends an attempt, including one that matches, and the record is
83
+ * deleted once the code has expired or a wrong guess has spent the last
84
+ * attempt. Pass the returned record to {@link consumeCodeVerification} to
84
85
  * complete the flow.
85
86
  *
86
- * Both cleanup paths delete by filter rather than by primary key: simultaneous
87
+ * The cleanup paths delete by filter rather than by primary key: simultaneous
87
88
  * callers can each decide the record should go, and only one of them removes a
88
- * row. A keyed delete would raise on the others instead of returning null.
89
+ * row.
89
90
  */
90
91
  export async function validateCodeVerification({ type, identifier, code, maxAttempts, }) {
91
92
  const record = await prisma.authVerification.findUnique({
@@ -98,17 +99,22 @@ export async function validateCodeVerification({ type, identifier, code, maxAtte
98
99
  await prisma.authVerification.deleteMany({ where: { id: record.id } });
99
100
  return null;
100
101
  }
101
- if (safeCompare(record.value, hashCode({ type, identifier, code }))) {
102
- return record;
103
- }
104
- // Incremented in the database rather than read-modify-written here, so
105
- // simultaneous guesses each cost a point instead of sharing one.
106
- const { attempts } = await prisma.authVerification.update({
107
- where: { id: record.id },
102
+ // Simultaneous guesses serialize on this statement, so at most `maxAttempts`
103
+ // of them reach the comparison below.
104
+ const [claimed] = await prisma.authVerification.updateManyAndReturn({
105
+ where: { id: record.id, attempts: { lt: maxAttempts } },
108
106
  data: { attempts: { increment: 1 } },
109
- select: { attempts: true },
110
107
  });
111
- if (attempts >= maxAttempts) {
108
+ // A spent budget is not this caller's to clean up: the guess that spent it
109
+ // discards the record below, and a correct guess that spent it may still be
110
+ // holding the record for {@link consumeCodeVerification}.
111
+ if (!claimed) {
112
+ return null;
113
+ }
114
+ if (safeCompare(claimed.value, hashCode({ type, identifier, code }))) {
115
+ return claimed;
116
+ }
117
+ if (claimed.attempts >= maxAttempts) {
112
118
  await prisma.authVerification.deleteMany({ where: { id: record.id } });
113
119
  }
114
120
  return null;
@@ -3,7 +3,7 @@
3
3
  import type { AuthVerification, Prisma } from '%prismaGeneratedImports';
4
4
 
5
5
  import { safeCompare } from '$servicesAuthVerification';
6
- import { getConfig } from '%configServiceImports';
6
+ import { deriveKey } from '%appSecretImports';
7
7
  import { prisma } from '%prismaImports';
8
8
  import * as crypto from 'node:crypto';
9
9
 
@@ -37,7 +37,7 @@ function hashCode({
37
37
  code: string;
38
38
  }): string {
39
39
  return crypto
40
- .createHmac('sha256', getConfig().AUTH_SECRET)
40
+ .createHmac('sha256', deriveKey('auth:code-verification:v1'))
41
41
  .update(`${type}:${identifier}:${code}`)
42
42
  .digest('hex');
43
43
  }
@@ -101,18 +101,19 @@ export async function createCodeVerification({
101
101
  }
102
102
 
103
103
  /**
104
- * Validates a short code verification without consuming it, so the caller can
105
- * gather any further input it needs before committing.
104
+ * Validates a short code verification, leaving the record in place so the
105
+ * caller can gather any further input it needs before committing.
106
106
  *
107
107
  * Security: a short numeric code has far less entropy than a random token, so
108
108
  * each code carries its own attempt counter alongside the endpoint rate limits.
109
- * The record is deleted when the code has expired or the attempt budget is
110
- * exhausted. Pass the returned record to {@link consumeCodeVerification} to
109
+ * Every call spends an attempt, including one that matches, and the record is
110
+ * deleted once the code has expired or a wrong guess has spent the last
111
+ * attempt. Pass the returned record to {@link consumeCodeVerification} to
111
112
  * complete the flow.
112
113
  *
113
- * Both cleanup paths delete by filter rather than by primary key: simultaneous
114
+ * The cleanup paths delete by filter rather than by primary key: simultaneous
114
115
  * callers can each decide the record should go, and only one of them removes a
115
- * row. A keyed delete would raise on the others instead of returning null.
116
+ * row.
116
117
  */
117
118
  export async function validateCodeVerification({
118
119
  type,
@@ -138,19 +139,25 @@ export async function validateCodeVerification({
138
139
  return null;
139
140
  }
140
141
 
141
- if (safeCompare(record.value, hashCode({ type, identifier, code }))) {
142
- return record;
143
- }
144
-
145
- // Incremented in the database rather than read-modify-written here, so
146
- // simultaneous guesses each cost a point instead of sharing one.
147
- const { attempts } = await prisma.authVerification.update({
148
- where: { id: record.id },
142
+ // Simultaneous guesses serialize on this statement, so at most `maxAttempts`
143
+ // of them reach the comparison below.
144
+ const [claimed] = await prisma.authVerification.updateManyAndReturn({
145
+ where: { id: record.id, attempts: { lt: maxAttempts } },
149
146
  data: { attempts: { increment: 1 } },
150
- select: { attempts: true },
151
147
  });
152
148
 
153
- if (attempts >= maxAttempts) {
149
+ // A spent budget is not this caller's to clean up: the guess that spent it
150
+ // discards the record below, and a correct guess that spent it may still be
151
+ // holding the record for {@link consumeCodeVerification}.
152
+ if (!claimed) {
153
+ return null;
154
+ }
155
+
156
+ if (safeCompare(claimed.value, hashCode({ type, identifier, code }))) {
157
+ return claimed;
158
+ }
159
+
160
+ if (claimed.attempts >= maxAttempts) {
154
161
  await prisma.authVerification.deleteMany({ where: { id: record.id } });
155
162
  }
156
163