@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.
- package/CHANGELOG.md +34 -0
- package/dist/better-auth/admin/generators/admin-crud-manage-roles-action/admin-crud-manage-roles-action.generator.d.ts +62 -0
- package/dist/better-auth/admin/generators/admin-crud-manage-roles-action/generated/index.d.ts +62 -0
- package/dist/better-auth/admin/generators/admin-crud-manage-roles-action/generated/template-renderers.d.ts +31 -0
- package/dist/better-auth/admin/generators/admin-crud-manage-roles-action/generated/typed-templates.d.ts +31 -0
- package/dist/better-auth/admin/generators/admin-crud-manage-roles-action/templates/routes/-components/role-manager-dialog.js +1 -2
- package/dist/better-auth/admin/generators/admin-crud-manage-roles-action/templates/routes/-components/role-manager-dialog.tsx +1 -1
- package/dist/better-auth/admin/generators/admin-crud-reset-password-action/admin-crud-reset-password-action.generator.d.ts +62 -0
- package/dist/better-auth/admin/generators/admin-crud-reset-password-action/generated/index.d.ts +62 -0
- package/dist/better-auth/admin/generators/admin-crud-reset-password-action/generated/template-renderers.d.ts +31 -0
- package/dist/better-auth/admin/generators/admin-crud-reset-password-action/generated/typed-templates.d.ts +62 -0
- package/dist/better-auth/admin/generators/admin-crud-reset-password-action/templates/routes/-components/password-reset-dialog.js +1 -2
- package/dist/better-auth/admin/generators/admin-crud-reset-password-action/templates/routes/-components/password-reset-dialog.tsx +1 -1
- package/dist/better-auth/admin/generators/admin-crud-roles-column/admin-crud-roles-column.generator.d.ts +31 -0
- package/dist/better-auth/core/node.js +7 -8
- package/dist/better-auth/generators/fastify/better-auth-admin-module/generated/index.d.ts +1 -0
- package/dist/better-auth/generators/fastify/better-auth-admin-module/generated/ts-import-providers.d.ts +1 -0
- package/dist/better-auth/generators/fastify/better-auth-admin-module/generated/ts-import-providers.js +1 -0
- package/dist/better-auth/generators/fastify/better-auth-module/better-auth-module.generator.d.ts +20 -3
- package/dist/better-auth/generators/fastify/better-auth-module/better-auth-module.generator.js +5 -24
- package/dist/better-auth/generators/fastify/better-auth-module/generated/index.d.ts +40 -2
- package/dist/better-auth/generators/fastify/better-auth-module/generated/template-renderers.d.ts +19 -1
- package/dist/better-auth/generators/fastify/better-auth-module/generated/template-renderers.js +6 -2
- package/dist/better-auth/generators/fastify/better-auth-module/generated/ts-import-providers.d.ts +1 -0
- package/dist/better-auth/generators/fastify/better-auth-module/generated/ts-import-providers.js +1 -0
- package/dist/better-auth/generators/fastify/better-auth-module/generated/typed-templates.d.ts +20 -1
- package/dist/better-auth/generators/fastify/better-auth-module/generated/typed-templates.js +4 -1
- package/dist/better-auth/generators/fastify/better-auth-module/templates/module/services/auth.ts +16 -8
- package/dist/better-auth/generators/react/better-auth-hooks/better-auth-hooks.generator.d.ts +1 -1
- package/dist/better-auth/generators/react/better-auth-hooks/generated/index.d.ts +5 -4
- package/dist/better-auth/generators/react/better-auth-hooks/generated/template-paths.d.ts +1 -1
- package/dist/better-auth/generators/react/better-auth-hooks/generated/template-paths.js +1 -1
- package/dist/better-auth/generators/react/better-auth-hooks/generated/ts-import-providers.d.ts +2 -1
- package/dist/better-auth/generators/react/better-auth-hooks/generated/ts-import-providers.js +2 -1
- package/dist/better-auth/generators/react/better-auth-hooks/generated/typed-templates.d.ts +6 -6
- package/dist/better-auth/generators/react/better-auth-hooks/generated/typed-templates.js +13 -13
- 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
- package/dist/better-auth/generators/react/better-auth-pages/better-auth-pages.generator.d.ts +31 -0
- package/dist/better-auth/generators/react/better-auth-pages/generated/index.d.ts +186 -0
- package/dist/better-auth/generators/react/better-auth-pages/generated/template-renderers.d.ts +31 -0
- package/dist/better-auth/generators/react/better-auth-pages/generated/typed-templates.d.ts +310 -0
- package/dist/better-auth/generators/react/better-auth-pages/templates/routes/forgot-password.tsx +1 -4
- package/dist/better-auth/generators/react/react-better-auth/generated/index.d.ts +65 -2
- package/dist/better-auth/generators/react/react-better-auth/generated/template-renderers.d.ts +32 -1
- package/dist/better-auth/generators/react/react-better-auth/generated/ts-import-providers.d.ts +1 -0
- package/dist/better-auth/generators/react/react-better-auth/generated/ts-import-providers.js +1 -0
- package/dist/better-auth/generators/react/react-better-auth/generated/typed-templates.d.ts +32 -1
- package/dist/better-auth/generators/react/react-better-auth/react-better-auth.generator.d.ts +32 -1
- package/dist/better-auth/generators/react/react-better-auth/templates/src/app/auth-loaded-gate.tsx +12 -3
- package/dist/local-auth/admin/generators/admin-crud-invite-user-action/admin-crud-invite-user-action.generator.d.ts +62 -0
- package/dist/local-auth/admin/generators/admin-crud-invite-user-action/generated/index.d.ts +62 -0
- package/dist/local-auth/admin/generators/admin-crud-invite-user-action/generated/template-renderers.d.ts +31 -0
- package/dist/local-auth/admin/generators/admin-crud-invite-user-action/generated/typed-templates.d.ts +31 -0
- package/dist/local-auth/admin/generators/admin-crud-invite-user-action/templates/routes/-components/invite-user-dialog.js +1 -2
- package/dist/local-auth/admin/generators/admin-crud-invite-user-action/templates/routes/-components/invite-user-dialog.tsx +1 -1
- package/dist/local-auth/admin/generators/admin-crud-manage-roles-action/admin-crud-manage-roles-action.generator.d.ts +62 -0
- package/dist/local-auth/admin/generators/admin-crud-manage-roles-action/generated/index.d.ts +62 -0
- package/dist/local-auth/admin/generators/admin-crud-manage-roles-action/generated/template-renderers.d.ts +31 -0
- package/dist/local-auth/admin/generators/admin-crud-manage-roles-action/generated/typed-templates.d.ts +31 -0
- package/dist/local-auth/admin/generators/admin-crud-manage-roles-action/templates/routes/-components/role-manager-dialog.js +1 -2
- package/dist/local-auth/admin/generators/admin-crud-manage-roles-action/templates/routes/-components/role-manager-dialog.tsx +1 -1
- package/dist/local-auth/admin/generators/admin-crud-reset-password-action/admin-crud-reset-password-action.generator.d.ts +62 -0
- package/dist/local-auth/admin/generators/admin-crud-reset-password-action/generated/index.d.ts +62 -0
- package/dist/local-auth/admin/generators/admin-crud-reset-password-action/generated/template-renderers.d.ts +31 -0
- package/dist/local-auth/admin/generators/admin-crud-reset-password-action/generated/typed-templates.d.ts +62 -0
- package/dist/local-auth/admin/generators/admin-crud-reset-password-action/templates/routes/-components/password-reset-dialog.js +1 -2
- package/dist/local-auth/admin/generators/admin-crud-reset-password-action/templates/routes/-components/password-reset-dialog.tsx +1 -1
- package/dist/local-auth/admin/generators/admin-crud-roles-column/admin-crud-roles-column.generator.d.ts +31 -0
- package/dist/local-auth/core/generators/auth-email-password/auth-email-password.generator.d.ts +10 -7
- package/dist/local-auth/core/generators/auth-email-password/auth-email-password.generator.js +8 -11
- package/dist/local-auth/core/generators/auth-email-password/generated/index.d.ts +40 -13
- package/dist/local-auth/core/generators/auth-email-password/generated/template-renderers.d.ts +9 -0
- package/dist/local-auth/core/generators/auth-email-password/generated/template-renderers.js +6 -5
- package/dist/local-auth/core/generators/auth-email-password/generated/ts-import-providers.d.ts +1 -3
- package/dist/local-auth/core/generators/auth-email-password/generated/ts-import-providers.js +1 -2
- package/dist/local-auth/core/generators/auth-email-password/generated/typed-templates.d.ts +40 -16
- package/dist/local-auth/core/generators/auth-email-password/generated/typed-templates.js +11 -8
- package/dist/local-auth/core/generators/auth-email-password/templates/module/services/email-verification.service.js +2 -3
- package/dist/local-auth/core/generators/auth-email-password/templates/module/services/email-verification.service.ts +5 -3
- package/dist/local-auth/core/generators/auth-email-password/templates/module/services/invite.service.js +17 -13
- package/dist/local-auth/core/generators/auth-email-password/templates/module/services/invite.service.ts +25 -13
- package/dist/local-auth/core/generators/auth-email-password/templates/module/services/password-reset.service.js +2 -3
- package/dist/local-auth/core/generators/auth-email-password/templates/module/services/password-reset.service.ts +5 -3
- package/dist/local-auth/core/generators/auth-hooks/auth-hooks.generator.d.ts +272 -1
- package/dist/local-auth/core/generators/auth-hooks/generated/index.d.ts +547 -4
- package/dist/local-auth/core/generators/auth-hooks/generated/template-paths.d.ts +1 -1
- package/dist/local-auth/core/generators/auth-hooks/generated/template-paths.js +1 -1
- package/dist/local-auth/core/generators/auth-hooks/generated/template-renderers.d.ts +271 -0
- package/dist/local-auth/core/generators/auth-hooks/generated/template-renderers.js +4 -2
- package/dist/local-auth/core/generators/auth-hooks/generated/ts-import-providers.d.ts +2 -1
- package/dist/local-auth/core/generators/auth-hooks/generated/ts-import-providers.js +2 -1
- package/dist/local-auth/core/generators/auth-hooks/generated/typed-templates.d.ts +548 -6
- package/dist/local-auth/core/generators/auth-hooks/generated/typed-templates.js +15 -14
- package/dist/local-auth/core/generators/auth-hooks/templates/src/hooks/use-log-out.js +1 -1
- package/dist/local-auth/core/generators/auth-hooks/templates/src/hooks/use-log-out.ts +1 -1
- package/dist/local-auth/core/generators/auth-hooks/templates/src/hooks/use-session.d.ts +7 -0
- package/dist/local-auth/core/generators/auth-hooks/templates/src/hooks/use-session.ts +7 -0
- package/dist/local-auth/core/generators/auth-module/auth-module.generator.d.ts +19 -7
- package/dist/local-auth/core/generators/auth-module/auth-module.generator.js +3 -26
- package/dist/local-auth/core/generators/auth-module/generated/index.d.ts +48 -7
- package/dist/local-auth/core/generators/auth-module/generated/template-paths.d.ts +0 -1
- package/dist/local-auth/core/generators/auth-module/generated/template-paths.js +0 -1
- package/dist/local-auth/core/generators/auth-module/generated/template-renderers.d.ts +19 -1
- package/dist/local-auth/core/generators/auth-module/generated/template-renderers.js +7 -3
- package/dist/local-auth/core/generators/auth-module/generated/ts-import-providers.d.ts +1 -0
- package/dist/local-auth/core/generators/auth-module/generated/ts-import-providers.js +1 -0
- package/dist/local-auth/core/generators/auth-module/generated/typed-templates.d.ts +28 -7
- package/dist/local-auth/core/generators/auth-module/generated/typed-templates.js +5 -14
- package/dist/local-auth/core/generators/auth-module/templates/module/services/code-verification.service.d.ts +7 -6
- package/dist/local-auth/core/generators/auth-module/templates/module/services/code-verification.service.js +23 -17
- package/dist/local-auth/core/generators/auth-module/templates/module/services/code-verification.service.ts +25 -18
- package/dist/local-auth/core/generators/auth-module/templates/module/services/user-session.service.js +8 -9
- package/dist/local-auth/core/generators/auth-module/templates/module/services/user-session.service.ts +10 -11
- package/dist/local-auth/core/generators/auth-routes/auth-routes.generator.d.ts +31 -0
- package/dist/local-auth/core/generators/auth-routes/generated/index.d.ts +249 -0
- package/dist/local-auth/core/generators/auth-routes/generated/template-renderers.d.ts +31 -0
- package/dist/local-auth/core/generators/auth-routes/generated/ts-import-providers.d.ts +1 -0
- package/dist/local-auth/core/generators/auth-routes/generated/ts-import-providers.js +1 -0
- package/dist/local-auth/core/generators/auth-routes/generated/typed-templates.d.ts +310 -0
- package/dist/local-auth/core/generators/auth-routes/templates/routes/auth_/accept-invite.js +12 -5
- package/dist/local-auth/core/generators/auth-routes/templates/routes/auth_/accept-invite.tsx +14 -4
- package/dist/local-auth/core/generators/auth-routes/templates/routes/auth_/forgot-password.js +1 -2
- package/dist/local-auth/core/generators/auth-routes/templates/routes/auth_/forgot-password.tsx +1 -1
- package/dist/local-auth/core/generators/auth-routes/templates/routes/auth_/login-otp.js +4 -4
- package/dist/local-auth/core/generators/auth-routes/templates/routes/auth_/login-otp.tsx +4 -3
- package/dist/local-auth/core/generators/auth-routes/templates/routes/auth_/login.js +4 -4
- package/dist/local-auth/core/generators/auth-routes/templates/routes/auth_/login.tsx +4 -3
- package/dist/local-auth/core/generators/auth-routes/templates/routes/auth_/register.js +4 -4
- package/dist/local-auth/core/generators/auth-routes/templates/routes/auth_/register.tsx +4 -3
- package/dist/local-auth/core/generators/auth-routes/templates/routes/auth_/reset-password.js +1 -2
- package/dist/local-auth/core/generators/auth-routes/templates/routes/auth_/reset-password.tsx +1 -1
- package/dist/local-auth/core/generators/auth-routes/templates/routes/auth_/verify-email.js +1 -2
- package/dist/local-auth/core/generators/auth-routes/templates/routes/auth_/verify-email.tsx +1 -1
- package/dist/local-auth/core/generators/react-session/generated/index.d.ts +78 -7
- package/dist/local-auth/core/generators/react-session/generated/template-renderers.d.ts +32 -1
- package/dist/local-auth/core/generators/react-session/generated/ts-import-providers.d.ts +1 -0
- package/dist/local-auth/core/generators/react-session/generated/ts-import-providers.js +1 -0
- package/dist/local-auth/core/generators/react-session/generated/typed-templates.d.ts +90 -12
- package/dist/local-auth/core/generators/react-session/generated/typed-templates.js +5 -2
- package/dist/local-auth/core/generators/react-session/react-session.generator.d.ts +48 -1
- package/dist/local-auth/core/generators/react-session/react-session.generator.js +35 -1
- package/dist/local-auth/core/generators/react-session/templates/src/app/user-session-provider.js +17 -44
- package/dist/local-auth/core/generators/react-session/templates/src/app/user-session-provider.tsx +21 -49
- package/dist/local-auth/core/generators/react-session/templates/src/services/user-session-client.d.ts +43 -34
- package/dist/local-auth/core/generators/react-session/templates/src/services/user-session-client.js +96 -80
- package/dist/local-auth/core/generators/react-session/templates/src/services/user-session-client.ts +148 -82
- package/dist/local-auth/core/generators/seed-initial-user/generated/index.d.ts +0 -2
- package/dist/local-auth/core/generators/seed-initial-user/generated/template-renderers.d.ts +0 -1
- package/dist/local-auth/core/generators/seed-initial-user/generated/typed-templates.d.ts +0 -1
- package/dist/local-auth/core/generators/seed-initial-user/seed-initial-user.generator.d.ts +0 -1
- package/dist/local-auth/core/node.js +7 -7
- package/dist/placeholder-auth/core/generators/placeholder-auth-hooks/generated/index.d.ts +4 -3
- package/dist/placeholder-auth/core/generators/placeholder-auth-hooks/generated/template-paths.d.ts +1 -1
- package/dist/placeholder-auth/core/generators/placeholder-auth-hooks/generated/template-paths.js +1 -1
- package/dist/placeholder-auth/core/generators/placeholder-auth-hooks/generated/ts-import-providers.d.ts +2 -1
- package/dist/placeholder-auth/core/generators/placeholder-auth-hooks/generated/ts-import-providers.js +2 -1
- package/dist/placeholder-auth/core/generators/placeholder-auth-hooks/generated/typed-templates.d.ts +4 -4
- package/dist/placeholder-auth/core/generators/placeholder-auth-hooks/generated/typed-templates.js +13 -13
- package/dist/placeholder-auth/core/generators/placeholder-auth-hooks/placeholder-auth-hooks.generator.d.ts +1 -1
- package/dist/placeholder-auth/core/generators/placeholder-auth-hooks/templates/src/hooks/use-session.d.ts +1 -0
- package/dist/placeholder-auth/core/generators/placeholder-auth-hooks/templates/src/hooks/use-session.ts +2 -0
- package/dist/placeholder-auth/core/generators/placeholder-auth-module/generated/index.d.ts +1 -2
- package/dist/placeholder-auth/core/generators/placeholder-auth-module/generated/template-renderers.d.ts +0 -1
- package/dist/placeholder-auth/core/generators/placeholder-auth-module/generated/ts-import-providers.d.ts +1 -0
- package/dist/placeholder-auth/core/generators/placeholder-auth-module/generated/ts-import-providers.js +1 -0
- package/dist/placeholder-auth/core/generators/placeholder-auth-module/generated/typed-templates.d.ts +0 -1
- package/dist/placeholder-auth/core/generators/placeholder-auth-module/placeholder-auth-module.generator.d.ts +0 -1
- 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
- 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
- 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
- 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
- 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
- package/dist/web/assets/auth-DR6QxrAW.js +1 -0
- package/dist/web/assets/{common-CoLuMS7U.js → common-BsyRiQi3.js} +6 -6
- package/dist/web/assets/{common-N3skPbzk.js → common-CRwNlCMn.js} +10 -10
- package/dist/web/assets/{common-Co5lW_TK.js → common-CvqlRZC9.js} +12 -12
- package/dist/web/assets/{common-C8_sC5pp.js → common-D3atSs7O.js} +15 -15
- package/dist/web/assets/common-DuFyXa6l.js +36 -0
- package/dist/web/assets/common-islduJTj.js +43 -0
- package/dist/web/assets/{get-auth-plugin-definition-DyokUVjX.js → get-auth-plugin-definition-BgWWHl_Y.js} +3 -3
- package/dist/web/assets/{hostInit-BCYmw0H5.js → hostInit-DNA4kLRY.js} +1 -1
- package/dist/web/assets/{mf-entry-bootstrap-0-3ede9334.js → mf-entry-bootstrap-0-ea77c09b.js} +1 -1
- package/dist/web/assets/{mf-entry-bootstrap-1-3da85eea.js → mf-entry-bootstrap-1-9dee3d8d.js} +2 -2
- package/dist/web/assets/{mf-entry-bootstrap-2-32e24e11.js → mf-entry-bootstrap-2-3179040b.js} +1 -1
- package/dist/web/assets/{mf-entry-bootstrap-3-a3cfea9d.js → mf-entry-bootstrap-3-370d200d.js} +2 -2
- package/dist/web/assets/{models-BcPOQC5p.js → models-BOeSYfRn.js} +4 -4
- package/dist/web/assets/{models-BcUgOGGn.js → models-DF6DoXt6.js} +4 -4
- package/dist/web/assets/{plugin-definition-D1EImXIf.js → plugin-definition--k0VAeK3.js} +9 -9
- package/dist/web/assets/{plugin-definition-lw-gB4hU.js → plugin-definition-CMwSlxsJ.js} +3 -3
- package/dist/web/assets/{styles-EOyEbGA4.js → styles-BQEcQHoR.js} +8 -8
- package/dist/web/assets/{virtualExposes-DWORnjyA.js → virtualExposes-C7fDiAmS.js} +1 -1
- 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
- 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
- package/dist/web/assets/{web-kaD9AzNS.js → web-8wz0ad-V.js} +8 -8
- package/dist/web/assets/{web-EDeSquSP.js → web-BGixH_gT.js} +19 -19
- package/dist/web/assets/{web-PqAcfBSy.js → web-BxIwkN3O.js} +7 -7
- package/dist/web/assets/{web-CBVepebK.js → web-CQMfABjr.js} +19 -19
- package/dist/web/assets/{web-RhChfBw_.js → web-CcNpItSu.js} +17 -17
- package/dist/web/assets/{web-xJ-GnSkC.js → web-CypPeiVv.js} +25 -25
- package/dist/web/assets/{web-Dgb85jhs.js → web-CzK_la2_.js} +41 -41
- package/dist/web/index.html +4 -4
- package/dist/web/remoteEntry.js +1 -1
- package/package.json +12 -12
- package/dist/local-auth/core/generators/auth-module/templates/module/utils/cookie-signer.d.ts +0 -38
- package/dist/local-auth/core/generators/auth-module/templates/module/utils/cookie-signer.js +0 -71
- package/dist/local-auth/core/generators/auth-module/templates/module/utils/cookie-signer.ts +0 -77
- package/dist/web/assets/auth-CsHp2bQi.js +0 -1
- package/dist/web/assets/common-BGTuTgx7.js +0 -43
- 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,
|
|
3
|
-
import { createGenerator, createGeneratorTask
|
|
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,
|
|
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
|
-
|
|
392
|
-
|
|
393
|
-
|
|
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: {};
|
|
@@ -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
|
-
|
|
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
|
-
|
|
330
|
-
|
|
331
|
-
|
|
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
|
-
|
|
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 = {
|
|
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
|
|
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
|
-
*
|
|
37
|
-
*
|
|
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
|
-
*
|
|
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.
|
|
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 {
|
|
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',
|
|
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
|
|
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
|
-
*
|
|
83
|
-
*
|
|
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
|
-
*
|
|
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.
|
|
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
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
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
|
-
|
|
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 {
|
|
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',
|
|
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
|
|
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
|
-
*
|
|
110
|
-
*
|
|
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
|
-
*
|
|
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.
|
|
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
|
-
|
|
142
|
-
|
|
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
|
-
|
|
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
|
|