@revealui/auth 0.0.1-pre.0
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/LICENSE +202 -0
- package/dist/better-auth/adapter/__tests__/transform.test.js +213 -0
- package/dist/better-auth/adapter/__tests__/transform.test.js.map +1 -0
- package/dist/better-auth/adapter/generate-schema/biome.d.js +2 -0
- package/dist/better-auth/adapter/generate-schema/biome.d.js.map +1 -0
- package/dist/better-auth/adapter/generate-schema/generate-schema-builder.d.ts +5 -0
- package/dist/better-auth/adapter/generate-schema/generate-schema-builder.js +482 -0
- package/dist/better-auth/adapter/generate-schema/generate-schema-builder.js.map +1 -0
- package/dist/better-auth/adapter/generate-schema/get-payload-schema.d.ts +1 -0
- package/dist/better-auth/adapter/generate-schema/get-payload-schema.js +42 -0
- package/dist/better-auth/adapter/generate-schema/get-payload-schema.js.map +1 -0
- package/dist/better-auth/adapter/generate-schema/index.d.ts +4 -0
- package/dist/better-auth/adapter/generate-schema/index.js +19 -0
- package/dist/better-auth/adapter/generate-schema/index.js.map +1 -0
- package/dist/better-auth/adapter/generate-schema/utils.d.ts +2 -0
- package/dist/better-auth/adapter/generate-schema/utils.js +20 -0
- package/dist/better-auth/adapter/generate-schema/utils.js.map +1 -0
- package/dist/better-auth/adapter/index.d.ts +15 -0
- package/dist/better-auth/adapter/index.js +731 -0
- package/dist/better-auth/adapter/index.js.map +1 -0
- package/dist/better-auth/adapter/tests/adapter.test.js +174 -0
- package/dist/better-auth/adapter/tests/adapter.test.js.map +1 -0
- package/dist/better-auth/adapter/tests/base-collections-tests.js +575 -0
- package/dist/better-auth/adapter/tests/base-collections-tests.js.map +1 -0
- package/dist/better-auth/adapter/tests/dev/index.js +117 -0
- package/dist/better-auth/adapter/tests/dev/index.js.map +1 -0
- package/dist/better-auth/adapter/tests/dev/migrate.js +26 -0
- package/dist/better-auth/adapter/tests/dev/migrate.js.map +1 -0
- package/dist/better-auth/adapter/tests/dev/migrations/20250423_232936_init.js +218 -0
- package/dist/better-auth/adapter/tests/dev/migrations/20250423_232936_init.js.map +1 -0
- package/dist/better-auth/adapter/tests/dev/schema.js +160 -0
- package/dist/better-auth/adapter/tests/dev/schema.js.map +1 -0
- package/dist/better-auth/adapter/tests/plugins-tests.js +2 -0
- package/dist/better-auth/adapter/tests/plugins-tests.js.map +1 -0
- package/dist/better-auth/adapter/transform/index.d.ts +27 -0
- package/dist/better-auth/adapter/transform/index.js +664 -0
- package/dist/better-auth/adapter/transform/index.js.map +1 -0
- package/dist/better-auth/adapter/types.d.ts +10 -0
- package/dist/better-auth/adapter/types.js +3 -0
- package/dist/better-auth/adapter/types.js.map +1 -0
- package/dist/better-auth/generated-types.d.ts +285 -0
- package/dist/better-auth/index.d.ts +3 -0
- package/dist/better-auth/index.js +5 -0
- package/dist/better-auth/index.js.map +1 -0
- package/dist/better-auth/plugin/__tests__/plugin.test.js +162 -0
- package/dist/better-auth/plugin/__tests__/plugin.test.js.map +1 -0
- package/dist/better-auth/plugin/constants.d.ts +220 -0
- package/dist/better-auth/plugin/constants.js +249 -0
- package/dist/better-auth/plugin/constants.js.map +1 -0
- package/dist/better-auth/plugin/helpers/check-plugin-exists.d.ts +12 -0
- package/dist/better-auth/plugin/helpers/check-plugin-exists.js +14 -0
- package/dist/better-auth/plugin/helpers/check-plugin-exists.js.map +1 -0
- package/dist/better-auth/plugin/helpers/generate-verify-email-url.d.ts +29 -0
- package/dist/better-auth/plugin/helpers/generate-verify-email-url.js +46 -0
- package/dist/better-auth/plugin/helpers/generate-verify-email-url.js.map +1 -0
- package/dist/better-auth/plugin/helpers/get-admin-access.d.ts +7 -0
- package/dist/better-auth/plugin/helpers/get-admin-access.js +22 -0
- package/dist/better-auth/plugin/helpers/get-admin-access.js.map +1 -0
- package/dist/better-auth/plugin/helpers/get-all-roles.d.ts +5 -0
- package/dist/better-auth/plugin/helpers/get-all-roles.js +20 -0
- package/dist/better-auth/plugin/helpers/get-all-roles.js.map +1 -0
- package/dist/better-auth/plugin/helpers/get-better-auth-schema.d.ts +18 -0
- package/dist/better-auth/plugin/helpers/get-better-auth-schema.js +70 -0
- package/dist/better-auth/plugin/helpers/get-better-auth-schema.js.map +1 -0
- package/dist/better-auth/plugin/helpers/get-collection-slug.d.ts +5 -0
- package/dist/better-auth/plugin/helpers/get-collection-slug.js +20 -0
- package/dist/better-auth/plugin/helpers/get-collection-slug.js.map +1 -0
- package/dist/better-auth/plugin/helpers/get-collection.d.ts +15 -0
- package/dist/better-auth/plugin/helpers/get-collection.js +29 -0
- package/dist/better-auth/plugin/helpers/get-collection.js.map +1 -0
- package/dist/better-auth/plugin/helpers/get-ip.d.ts +2 -0
- package/dist/better-auth/plugin/helpers/get-ip.js +31 -0
- package/dist/better-auth/plugin/helpers/get-ip.js.map +1 -0
- package/dist/better-auth/plugin/helpers/get-signed-cookie.d.ts +2 -0
- package/dist/better-auth/plugin/helpers/get-signed-cookie.js +65 -0
- package/dist/better-auth/plugin/helpers/get-signed-cookie.js.map +1 -0
- package/dist/better-auth/plugin/helpers/index.d.ts +1 -0
- package/dist/better-auth/plugin/helpers/index.js +3 -0
- package/dist/better-auth/plugin/helpers/index.js.map +1 -0
- package/dist/better-auth/plugin/helpers/prepare-session-data.d.ts +59 -0
- package/dist/better-auth/plugin/helpers/prepare-session-data.js +49 -0
- package/dist/better-auth/plugin/helpers/prepare-session-data.js.map +1 -0
- package/dist/better-auth/plugin/helpers/sync-resolved-schema-with-collection-map.d.ts +20 -0
- package/dist/better-auth/plugin/helpers/sync-resolved-schema-with-collection-map.js +67 -0
- package/dist/better-auth/plugin/helpers/sync-resolved-schema-with-collection-map.js.map +1 -0
- package/dist/better-auth/plugin/index.d.ts +11 -0
- package/dist/better-auth/plugin/index.js +125 -0
- package/dist/better-auth/plugin/index.js.map +1 -0
- package/dist/better-auth/plugin/lib/apply-disabled-default-auth-config.d.ts +12 -0
- package/dist/better-auth/plugin/lib/apply-disabled-default-auth-config.js +87 -0
- package/dist/better-auth/plugin/lib/apply-disabled-default-auth-config.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/accounts/hooks/sync-password-to-user.d.ts +3 -0
- package/dist/better-auth/plugin/lib/build-collections/accounts/hooks/sync-password-to-user.js +60 -0
- package/dist/better-auth/plugin/lib/build-collections/accounts/hooks/sync-password-to-user.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/accounts/index.d.ts +3 -0
- package/dist/better-auth/plugin/lib/build-collections/accounts/index.js +154 -0
- package/dist/better-auth/plugin/lib/build-collections/accounts/index.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/admin-invitations/hooks/get-url-after-read.d.ts +5 -0
- package/dist/better-auth/plugin/lib/build-collections/admin-invitations/hooks/get-url-after-read.js +11 -0
- package/dist/better-auth/plugin/lib/build-collections/admin-invitations/hooks/get-url-after-read.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/admin-invitations/hooks/get-url-before-change.d.ts +2 -0
- package/dist/better-auth/plugin/lib/build-collections/admin-invitations/hooks/get-url-before-change.js +8 -0
- package/dist/better-auth/plugin/lib/build-collections/admin-invitations/hooks/get-url-before-change.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/admin-invitations/index.d.ts +6 -0
- package/dist/better-auth/plugin/lib/build-collections/admin-invitations/index.js +119 -0
- package/dist/better-auth/plugin/lib/build-collections/admin-invitations/index.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/api-keys.d.ts +3 -0
- package/dist/better-auth/plugin/lib/build-collections/api-keys.js +177 -0
- package/dist/better-auth/plugin/lib/build-collections/api-keys.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/device-code.d.ts +3 -0
- package/dist/better-auth/plugin/lib/build-collections/device-code.js +50 -0
- package/dist/better-auth/plugin/lib/build-collections/device-code.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/index.d.ts +10 -0
- package/dist/better-auth/plugin/lib/build-collections/index.js +73 -0
- package/dist/better-auth/plugin/lib/build-collections/index.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/invitations.d.ts +3 -0
- package/dist/better-auth/plugin/lib/build-collections/invitations.js +94 -0
- package/dist/better-auth/plugin/lib/build-collections/invitations.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/jwks.d.ts +3 -0
- package/dist/better-auth/plugin/lib/build-collections/jwks.js +59 -0
- package/dist/better-auth/plugin/lib/build-collections/jwks.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/members.d.ts +3 -0
- package/dist/better-auth/plugin/lib/build-collections/members.js +73 -0
- package/dist/better-auth/plugin/lib/build-collections/members.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/oauth-access-tokens.d.ts +3 -0
- package/dist/better-auth/plugin/lib/build-collections/oauth-access-tokens.js +107 -0
- package/dist/better-auth/plugin/lib/build-collections/oauth-access-tokens.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/oauth-applications.d.ts +3 -0
- package/dist/better-auth/plugin/lib/build-collections/oauth-applications.js +118 -0
- package/dist/better-auth/plugin/lib/build-collections/oauth-applications.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/oauth-consents.d.ts +3 -0
- package/dist/better-auth/plugin/lib/build-collections/oauth-consents.js +89 -0
- package/dist/better-auth/plugin/lib/build-collections/oauth-consents.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/organizations.d.ts +3 -0
- package/dist/better-auth/plugin/lib/build-collections/organizations.js +70 -0
- package/dist/better-auth/plugin/lib/build-collections/organizations.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/passkeys.d.ts +3 -0
- package/dist/better-auth/plugin/lib/build-collections/passkeys.js +115 -0
- package/dist/better-auth/plugin/lib/build-collections/passkeys.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/sessions.d.ts +3 -0
- package/dist/better-auth/plugin/lib/build-collections/sessions.js +170 -0
- package/dist/better-auth/plugin/lib/build-collections/sessions.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/sso-providers.d.ts +3 -0
- package/dist/better-auth/plugin/lib/build-collections/sso-providers.js +81 -0
- package/dist/better-auth/plugin/lib/build-collections/sso-providers.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/subscriptions.d.ts +3 -0
- package/dist/better-auth/plugin/lib/build-collections/subscriptions.js +111 -0
- package/dist/better-auth/plugin/lib/build-collections/subscriptions.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/team-members.d.ts +3 -0
- package/dist/better-auth/plugin/lib/build-collections/team-members.js +57 -0
- package/dist/better-auth/plugin/lib/build-collections/team-members.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/teams.d.ts +3 -0
- package/dist/better-auth/plugin/lib/build-collections/teams.js +76 -0
- package/dist/better-auth/plugin/lib/build-collections/teams.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/two-factors.d.ts +3 -0
- package/dist/better-auth/plugin/lib/build-collections/two-factors.js +67 -0
- package/dist/better-auth/plugin/lib/build-collections/two-factors.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/users/better-auth-strategy.d.ts +7 -0
- package/dist/better-auth/plugin/lib/build-collections/users/better-auth-strategy.js +53 -0
- package/dist/better-auth/plugin/lib/build-collections/users/better-auth-strategy.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/generate-invite-url.d.ts +11 -0
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/generate-invite-url.js +75 -0
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/generate-invite-url.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/index.d.ts +4 -0
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/index.js +6 -0
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/index.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/refresh-token.d.ts +2 -0
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/refresh-token.js +115 -0
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/refresh-token.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/send-invite-url.d.ts +3 -0
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/send-invite-url.js +64 -0
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/send-invite-url.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/set-admin-role.d.ts +3 -0
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/set-admin-role.js +80 -0
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/set-admin-role.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-login.d.ts +6 -0
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-login.js +79 -0
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-login.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-logout.d.ts +2 -0
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-logout.js +82 -0
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-logout.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/before-delete.d.ts +2 -0
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/before-delete.js +54 -0
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/before-delete.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/before-login.d.ts +6 -0
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/before-login.js +15 -0
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/before-login.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/index.d.ts +6 -0
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/index.js +8 -0
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/index.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/on-verified-change.d.ts +2 -0
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/on-verified-change.js +17 -0
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/on-verified-change.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/sync-account.d.ts +2 -0
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/sync-account.js +91 -0
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/sync-account.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/users/index.d.ts +3 -0
- package/dist/better-auth/plugin/lib/build-collections/users/index.js +341 -0
- package/dist/better-auth/plugin/lib/build-collections/users/index.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/utils/collection-schema.d.ts +15 -0
- package/dist/better-auth/plugin/lib/build-collections/utils/collection-schema.js +24 -0
- package/dist/better-auth/plugin/lib/build-collections/utils/collection-schema.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/utils/filter-duplicate-fields.d.ts +10 -0
- package/dist/better-auth/plugin/lib/build-collections/utils/filter-duplicate-fields.js +67 -0
- package/dist/better-auth/plugin/lib/build-collections/utils/filter-duplicate-fields.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/utils/filter-properties.d.ts +9 -0
- package/dist/better-auth/plugin/lib/build-collections/utils/filter-properties.js +94 -0
- package/dist/better-auth/plugin/lib/build-collections/utils/filter-properties.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/utils/get-timestamp-fields.d.ts +7 -0
- package/dist/better-auth/plugin/lib/build-collections/utils/get-timestamp-fields.js +35 -0
- package/dist/better-auth/plugin/lib/build-collections/utils/get-timestamp-fields.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/utils/model-field-transformations.d.ts +12 -0
- package/dist/better-auth/plugin/lib/build-collections/utils/model-field-transformations.js +25 -0
- package/dist/better-auth/plugin/lib/build-collections/utils/model-field-transformations.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/utils/payload-access.d.ts +14 -0
- package/dist/better-auth/plugin/lib/build-collections/utils/payload-access.js +67 -0
- package/dist/better-auth/plugin/lib/build-collections/utils/payload-access.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/utils/transform-schema-fields-to-payload.d.ts +20 -0
- package/dist/better-auth/plugin/lib/build-collections/utils/transform-schema-fields-to-payload.js +98 -0
- package/dist/better-auth/plugin/lib/build-collections/utils/transform-schema-fields-to-payload.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/verifications.d.ts +3 -0
- package/dist/better-auth/plugin/lib/build-collections/verifications.js +87 -0
- package/dist/better-auth/plugin/lib/build-collections/verifications.js.map +1 -0
- package/dist/better-auth/plugin/lib/get-payload-auth.d.ts +5 -0
- package/dist/better-auth/plugin/lib/get-payload-auth.js +9 -0
- package/dist/better-auth/plugin/lib/get-payload-auth.js.map +1 -0
- package/dist/better-auth/plugin/lib/init-better-auth.d.ts +7 -0
- package/dist/better-auth/plugin/lib/init-better-auth.js +46 -0
- package/dist/better-auth/plugin/lib/init-better-auth.js.map +1 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/admin-plugin.d.ts +2 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/admin-plugin.js +9 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/admin-plugin.js.map +1 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/api-key-plugin.d.ts +2 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/api-key-plugin.js +10 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/api-key-plugin.js.map +1 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/device-authorization-plugin.d.ts +2 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/device-authorization-plugin.js +8 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/device-authorization-plugin.js.map +1 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/index.d.ts +10 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/index.js +156 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/index.js.map +1 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/oidc-plugin.d.ts +2 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/oidc-plugin.js +18 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/oidc-plugin.js.map +1 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/organizations-plugin.d.ts +2 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/organizations-plugin.js +34 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/organizations-plugin.js.map +1 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/passkey-plugin.d.ts +2 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/passkey-plugin.js +11 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/passkey-plugin.js.map +1 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/sso-plugin.d.ts +2 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/sso-plugin.js +10 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/sso-plugin.js.map +1 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/two-factor-plugin.d.ts +2 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/two-factor-plugin.js +11 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/two-factor-plugin.js.map +1 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/ensure-password-set-before-create.d.ts +7 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/ensure-password-set-before-create.js +23 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/ensure-password-set-before-create.js.map +1 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/password.d.ts +25 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/password.js +62 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/password.js.map +1 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/require-admin-invite-for-sign-up-middleware.d.ts +9 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/require-admin-invite-for-sign-up-middleware.js +47 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/require-admin-invite-for-sign-up-middleware.js.map +1 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/save-to-jwt-middleware.d.ts +15 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/save-to-jwt-middleware.js +42 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/save-to-jwt-middleware.js.map +1 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/use-admin-invite-after-email-sign-up-middleware.d.ts +9 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/use-admin-invite-after-email-sign-up-middleware.js +63 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/use-admin-invite-after-email-sign-up-middleware.js.map +1 -0
- package/dist/better-auth/plugin/lib/set-login-methods.d.ts +4 -0
- package/dist/better-auth/plugin/lib/set-login-methods.js +14 -0
- package/dist/better-auth/plugin/lib/set-login-methods.js.map +1 -0
- package/dist/better-auth/plugin/payload/components/admin-buttons/index.d.ts +9 -0
- package/dist/better-auth/plugin/payload/components/admin-buttons/index.js +143 -0
- package/dist/better-auth/plugin/payload/components/admin-buttons/index.js.map +1 -0
- package/dist/better-auth/plugin/payload/components/admin-invite-button/index.d.ts +10 -0
- package/dist/better-auth/plugin/payload/components/admin-invite-button/index.js +219 -0
- package/dist/better-auth/plugin/payload/components/admin-invite-button/index.js.map +1 -0
- package/dist/better-auth/plugin/payload/components/logout-button.d.ts +4 -0
- package/dist/better-auth/plugin/payload/components/logout-button.js +24 -0
- package/dist/better-auth/plugin/payload/components/logout-button.js.map +1 -0
- package/dist/better-auth/plugin/payload/components/passkeys/add-button.d.ts +8 -0
- package/dist/better-auth/plugin/payload/components/passkeys/add-button.js +117 -0
- package/dist/better-auth/plugin/payload/components/passkeys/add-button.js.map +1 -0
- package/dist/better-auth/plugin/payload/components/passkeys/client.d.ts +3 -0
- package/dist/better-auth/plugin/payload/components/passkeys/client.js +66 -0
- package/dist/better-auth/plugin/payload/components/passkeys/client.js.map +1 -0
- package/dist/better-auth/plugin/payload/components/passkeys/index.d.ts +4 -0
- package/dist/better-auth/plugin/payload/components/passkeys/index.js +52 -0
- package/dist/better-auth/plugin/payload/components/passkeys/index.js.map +1 -0
- package/dist/better-auth/plugin/payload/components/passkeys/list.d.ts +8 -0
- package/dist/better-auth/plugin/payload/components/passkeys/list.js +57 -0
- package/dist/better-auth/plugin/payload/components/passkeys/list.js.map +1 -0
- package/dist/better-auth/plugin/payload/components/passkeys/types.d.ts +22 -0
- package/dist/better-auth/plugin/payload/components/passkeys/types.js +3 -0
- package/dist/better-auth/plugin/payload/components/passkeys/types.js.map +1 -0
- package/dist/better-auth/plugin/payload/components/rsc-redirect.d.ts +6 -0
- package/dist/better-auth/plugin/payload/components/rsc-redirect.js +7 -0
- package/dist/better-auth/plugin/payload/components/rsc-redirect.js.map +1 -0
- package/dist/better-auth/plugin/payload/components/social-provider-buttons/index.d.ts +15 -0
- package/dist/better-auth/plugin/payload/components/social-provider-buttons/index.js +157 -0
- package/dist/better-auth/plugin/payload/components/social-provider-buttons/index.js.map +1 -0
- package/dist/better-auth/plugin/payload/components/token-field.d.ts +4 -0
- package/dist/better-auth/plugin/payload/components/token-field.js +31 -0
- package/dist/better-auth/plugin/payload/components/token-field.js.map +1 -0
- package/dist/better-auth/plugin/payload/components/two-factor-auth/index.d.ts +8 -0
- package/dist/better-auth/plugin/payload/components/two-factor-auth/index.js +300 -0
- package/dist/better-auth/plugin/payload/components/two-factor-auth/index.js.map +1 -0
- package/dist/better-auth/plugin/payload/exports/client.d.ts +6 -0
- package/dist/better-auth/plugin/payload/exports/client.js +8 -0
- package/dist/better-auth/plugin/payload/exports/client.js.map +1 -0
- package/dist/better-auth/plugin/payload/exports/rsc.d.ts +8 -0
- package/dist/better-auth/plugin/payload/exports/rsc.js +10 -0
- package/dist/better-auth/plugin/payload/exports/rsc.js.map +1 -0
- package/dist/better-auth/plugin/payload/utils/generate-admin-invite-url.d.ts +2 -0
- package/dist/better-auth/plugin/payload/utils/generate-admin-invite-url.js +9 -0
- package/dist/better-auth/plugin/payload/utils/generate-admin-invite-url.js.map +1 -0
- package/dist/better-auth/plugin/payload/utils/get-safe-redirect.d.ts +1 -0
- package/dist/better-auth/plugin/payload/utils/get-safe-redirect.js +22 -0
- package/dist/better-auth/plugin/payload/utils/get-safe-redirect.js.map +1 -0
- package/dist/better-auth/plugin/payload/views/admin-login/client.d.ts +19 -0
- package/dist/better-auth/plugin/payload/views/admin-login/client.js +226 -0
- package/dist/better-auth/plugin/payload/views/admin-login/client.js.map +1 -0
- package/dist/better-auth/plugin/payload/views/admin-login/index.d.ts +10 -0
- package/dist/better-auth/plugin/payload/views/admin-login/index.js +150 -0
- package/dist/better-auth/plugin/payload/views/admin-login/index.js.map +1 -0
- package/dist/better-auth/plugin/payload/views/admin-signup/client.d.ts +16 -0
- package/dist/better-auth/plugin/payload/views/admin-signup/client.js +299 -0
- package/dist/better-auth/plugin/payload/views/admin-signup/client.js.map +1 -0
- package/dist/better-auth/plugin/payload/views/admin-signup/index.d.ts +9 -0
- package/dist/better-auth/plugin/payload/views/admin-signup/index.js +104 -0
- package/dist/better-auth/plugin/payload/views/admin-signup/index.js.map +1 -0
- package/dist/better-auth/plugin/payload/views/forgot-password/client.d.ts +7 -0
- package/dist/better-auth/plugin/payload/views/forgot-password/client.js +119 -0
- package/dist/better-auth/plugin/payload/views/forgot-password/client.js.map +1 -0
- package/dist/better-auth/plugin/payload/views/forgot-password/index.d.ts +8 -0
- package/dist/better-auth/plugin/payload/views/forgot-password/index.js +78 -0
- package/dist/better-auth/plugin/payload/views/forgot-password/index.js.map +1 -0
- package/dist/better-auth/plugin/payload/views/reset-password/client.d.ts +10 -0
- package/dist/better-auth/plugin/payload/views/reset-password/client.js +144 -0
- package/dist/better-auth/plugin/payload/views/reset-password/client.js.map +1 -0
- package/dist/better-auth/plugin/payload/views/reset-password/index.d.ts +8 -0
- package/dist/better-auth/plugin/payload/views/reset-password/index.js +96 -0
- package/dist/better-auth/plugin/payload/views/reset-password/index.js.map +1 -0
- package/dist/better-auth/plugin/payload/views/two-factor-verify/client.d.ts +6 -0
- package/dist/better-auth/plugin/payload/views/two-factor-verify/client.js +96 -0
- package/dist/better-auth/plugin/payload/views/two-factor-verify/client.js.map +1 -0
- package/dist/better-auth/plugin/payload/views/two-factor-verify/index.d.ts +9 -0
- package/dist/better-auth/plugin/payload/views/two-factor-verify/index.js +56 -0
- package/dist/better-auth/plugin/payload/views/two-factor-verify/index.js.map +1 -0
- package/dist/better-auth/plugin/types.d.ts +429 -0
- package/dist/better-auth/plugin/types.js +3 -0
- package/dist/better-auth/plugin/types.js.map +1 -0
- package/dist/better-auth/plugin/utils/set.d.ts +39 -0
- package/dist/better-auth/plugin/utils/set.js +103 -0
- package/dist/better-auth/plugin/utils/set.js.map +1 -0
- package/dist/better-auth/scripts/generate-types.d.ts +1 -0
- package/dist/better-auth/scripts/generate-types.js +234 -0
- package/dist/better-auth/scripts/generate-types.js.map +1 -0
- package/dist/better-auth/types.d.ts +2 -0
- package/dist/better-auth/types.js +4 -0
- package/dist/better-auth/types.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/shared/components/icons.d.ts +7 -0
- package/dist/shared/components/icons.js +442 -0
- package/dist/shared/components/icons.js.map +1 -0
- package/dist/shared/components/logo.d.ts +3 -0
- package/dist/shared/components/logo.js +24 -0
- package/dist/shared/components/logo.js.map +1 -0
- package/dist/shared/form/components/submit.d.ts +7 -0
- package/dist/shared/form/components/submit.js +16 -0
- package/dist/shared/form/components/submit.js.map +1 -0
- package/dist/shared/form/fields/text-field.d.ts +8 -0
- package/dist/shared/form/fields/text-field.js +37 -0
- package/dist/shared/form/fields/text-field.js.map +1 -0
- package/dist/shared/form/index.d.ts +4 -0
- package/dist/shared/form/index.js +8 -0
- package/dist/shared/form/index.js.map +1 -0
- package/dist/shared/form/ui/header/index.d.ts +8 -0
- package/dist/shared/form/ui/header/index.js +24 -0
- package/dist/shared/form/ui/header/index.js.map +1 -0
- package/dist/shared/form/ui/index.d.ts +31 -0
- package/dist/shared/form/ui/index.js +57 -0
- package/dist/shared/form/ui/index.js.map +1 -0
- package/dist/shared/form/validation.d.ts +51 -0
- package/dist/shared/form/validation.js +127 -0
- package/dist/shared/form/validation.js.map +1 -0
- package/dist/shared/index.d.ts +2 -0
- package/dist/shared/index.js +4 -0
- package/dist/shared/index.js.map +1 -0
- package/dist/shared/payload/fields/field-copy-button/index.d.ts +3 -0
- package/dist/shared/payload/fields/field-copy-button/index.js +38 -0
- package/dist/shared/payload/fields/field-copy-button/index.js.map +1 -0
- package/dist/shared/payload/fields/generate-uuid-button/index.d.ts +3 -0
- package/dist/shared/payload/fields/generate-uuid-button/index.js +26 -0
- package/dist/shared/payload/fields/generate-uuid-button/index.js.map +1 -0
- package/dist/shared/payload/fields/index.d.ts +2 -0
- package/dist/shared/payload/fields/index.js +4 -0
- package/dist/shared/payload/fields/index.js.map +1 -0
- package/dist/shared/utils/regex.d.ts +2 -0
- package/dist/shared/utils/regex.js +4 -0
- package/dist/shared/utils/regex.js.map +1 -0
- package/dist/shared/utils/try-catch.d.ts +11 -0
- package/dist/shared/utils/try-catch.js +17 -0
- package/dist/shared/utils/try-catch.js.map +1 -0
- package/dist/shared/utils/value-or-default.d.ts +9 -0
- package/dist/shared/utils/value-or-default.js +12 -0
- package/dist/shared/utils/value-or-default.js.map +1 -0
- package/package.json +122 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Button, TextInput, useField, useFormFields } from "@payloadcms/ui";
|
|
4
|
+
const AdminInviteTokenField = (props)=>{
|
|
5
|
+
const { path } = props;
|
|
6
|
+
const { setValue } = useField({
|
|
7
|
+
path
|
|
8
|
+
});
|
|
9
|
+
// Using any because PayloadCMS useFormFields returns dynamic field structures that vary by form
|
|
10
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
11
|
+
const token = useFormFields(([fields])=>fields.token);
|
|
12
|
+
const value = token.value ?? '';
|
|
13
|
+
return /*#__PURE__*/ _jsxs("div", {
|
|
14
|
+
children: [
|
|
15
|
+
/*#__PURE__*/ _jsx(Button, {
|
|
16
|
+
onClick: ()=>setValue(crypto.randomUUID()),
|
|
17
|
+
children: "Generate Token"
|
|
18
|
+
}),
|
|
19
|
+
/*#__PURE__*/ _jsx(TextInput, {
|
|
20
|
+
path: path,
|
|
21
|
+
readOnly: true,
|
|
22
|
+
label: "Token",
|
|
23
|
+
placeholder: "Click 'Generate Token' to create a token",
|
|
24
|
+
value: value
|
|
25
|
+
})
|
|
26
|
+
]
|
|
27
|
+
});
|
|
28
|
+
};
|
|
29
|
+
export default AdminInviteTokenField;
|
|
30
|
+
|
|
31
|
+
//# sourceMappingURL=token-field.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/better-auth/plugin/payload/components/token-field.tsx"],"sourcesContent":["'use client';\n\nimport { Button, TextInput, useField, useFormFields } from '@payloadcms/ui';\nimport type { TextFieldClientProps } from 'payload';\nimport type React from 'react';\n\nconst AdminInviteTokenField: React.FC<TextFieldClientProps> = props => {\n const { path } = props;\n const { setValue } = useField({ path });\n // Using any because PayloadCMS useFormFields returns dynamic field structures that vary by form\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const token = useFormFields(([fields]) => (fields as any).token);\n const value = (token.value as string) ?? '';\n\n return (\n <div>\n <Button onClick={() => setValue(crypto.randomUUID())}>Generate Token</Button>\n <TextInput\n path={path}\n readOnly\n label='Token'\n placeholder=\"Click 'Generate Token' to create a token\"\n value={value}\n />\n </div>\n );\n};\n\nexport default AdminInviteTokenField;\n"],"names":["Button","TextInput","useField","useFormFields","AdminInviteTokenField","props","path","setValue","token","fields","value","div","onClick","crypto","randomUUID","readOnly","label","placeholder"],"mappings":"AAAA;;AAEA,SAASA,MAAM,EAAEC,SAAS,EAAEC,QAAQ,EAAEC,aAAa,QAAQ,iBAAiB;AAI5E,MAAMC,wBAAwDC,CAAAA;IAC5D,MAAM,EAAEC,IAAI,EAAE,GAAGD;IACjB,MAAM,EAAEE,QAAQ,EAAE,GAAGL,SAAS;QAAEI;IAAK;IACrC,gGAAgG;IAChG,8DAA8D;IAC9D,MAAME,QAAQL,cAAc,CAAC,CAACM,OAAO,GAAK,AAACA,OAAeD,KAAK;IAC/D,MAAME,QAAQ,AAACF,MAAME,KAAK,IAAe;IAEzC,qBACE,MAACC;;0BACC,KAACX;gBAAOY,SAAS,IAAML,SAASM,OAAOC,UAAU;0BAAK;;0BACtD,KAACb;gBACCK,MAAMA;gBACNS,QAAQ;gBACRC,OAAM;gBACNC,aAAY;gBACZP,OAAOA;;;;AAIf;AAEA,eAAeN,sBAAsB"}
|
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import "./index.scss";
|
|
4
|
+
import { zodResolver } from "@hookform/resolvers/zod";
|
|
5
|
+
import { Button, Modal, toast, useField, useFormFields, useModal } from "@payloadcms/ui";
|
|
6
|
+
import { twoFactorClient } from "better-auth/client/plugins";
|
|
7
|
+
import { createAuthClient } from "better-auth/react";
|
|
8
|
+
import { Copy, X as XIcon } from "lucide-react";
|
|
9
|
+
import dynamic from "next/dynamic";
|
|
10
|
+
import { FormProvider, useForm } from "react-hook-form";
|
|
11
|
+
const QRCodeSVG = dynamic(()=>import("qrcode.react").then((m)=>m.QRCodeSVG), {
|
|
12
|
+
ssr: false
|
|
13
|
+
});
|
|
14
|
+
import React, { useMemo, useState } from "react";
|
|
15
|
+
import { z } from "zod";
|
|
16
|
+
const baseClass = 'two-factor-auth-modal';
|
|
17
|
+
export const TwoFactorAuth = ({ baseURL, basePath })=>{
|
|
18
|
+
const [totpURI, setTotpURI] = useState('');
|
|
19
|
+
const [backupCodes, setBackupCodes] = useState(null);
|
|
20
|
+
const [formState, setFormState] = useState('enable');
|
|
21
|
+
const { openModal, closeModal } = useModal();
|
|
22
|
+
const twoFactorEnabledField = useFormFields(([fields])=>fields.twoFactorEnabled);
|
|
23
|
+
const twoFactorEnabled = Boolean(twoFactorEnabledField?.value);
|
|
24
|
+
const { setValue: setTwoFactorEnabled } = useField({
|
|
25
|
+
path: 'twoFactorEnabled'
|
|
26
|
+
});
|
|
27
|
+
const authClient = useMemo(()=>{
|
|
28
|
+
const options = {
|
|
29
|
+
plugins: [
|
|
30
|
+
twoFactorClient()
|
|
31
|
+
]
|
|
32
|
+
};
|
|
33
|
+
if (baseURL) options.baseURL = baseURL;
|
|
34
|
+
if (basePath) options.basePath = basePath;
|
|
35
|
+
return createAuthClient(options);
|
|
36
|
+
}, []);
|
|
37
|
+
const copyURI = async ()=>{
|
|
38
|
+
if (!totpURI) return;
|
|
39
|
+
try {
|
|
40
|
+
await navigator.clipboard.writeText(totpURI);
|
|
41
|
+
toast.success('Copied');
|
|
42
|
+
} catch {
|
|
43
|
+
toast.error('Failed to copy');
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
// Form Schemas
|
|
47
|
+
const passwordSchema = z.object({
|
|
48
|
+
password: z.string().min(1, 'Required')
|
|
49
|
+
});
|
|
50
|
+
const otpSchema = z.object({
|
|
51
|
+
otp: z.string().length(6, 'Code must be 6 digits').refine((val)=>/^\d{6}$/.test(val), 'Code must be numeric')
|
|
52
|
+
});
|
|
53
|
+
const EnableForm = ()=>{
|
|
54
|
+
const methods = useForm({
|
|
55
|
+
defaultValues: {
|
|
56
|
+
password: ''
|
|
57
|
+
},
|
|
58
|
+
resolver: zodResolver(passwordSchema),
|
|
59
|
+
mode: 'onSubmit'
|
|
60
|
+
});
|
|
61
|
+
const onSubmit = async (value)=>{
|
|
62
|
+
const { data, error } = await authClient.twoFactor.enable({
|
|
63
|
+
password: value.password
|
|
64
|
+
});
|
|
65
|
+
if (error) {
|
|
66
|
+
toast.error(error.message);
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
setTotpURI(data.totpURI);
|
|
70
|
+
if (data && 'backupCodes' in data && data.backupCodes) {
|
|
71
|
+
setBackupCodes(Array.isArray(data.backupCodes) ? data.backupCodes : String(data.backupCodes).split(/\s+/).filter(Boolean));
|
|
72
|
+
} else {
|
|
73
|
+
setBackupCodes(null);
|
|
74
|
+
}
|
|
75
|
+
setFormState('verify');
|
|
76
|
+
};
|
|
77
|
+
return /*#__PURE__*/ _jsx(FormProvider, {
|
|
78
|
+
...methods,
|
|
79
|
+
children: /*#__PURE__*/ _jsx("form", {
|
|
80
|
+
onSubmit: methods.handleSubmit(onSubmit),
|
|
81
|
+
className: "two-factor-enable-form",
|
|
82
|
+
children: /*#__PURE__*/ _jsx("div", {
|
|
83
|
+
className: "two-factor-enable-form__inputWrap",
|
|
84
|
+
children: /*#__PURE__*/ _jsx(Button, {
|
|
85
|
+
type: "submit",
|
|
86
|
+
children: "Enable"
|
|
87
|
+
})
|
|
88
|
+
})
|
|
89
|
+
})
|
|
90
|
+
});
|
|
91
|
+
};
|
|
92
|
+
const VerifyForm = ()=>{
|
|
93
|
+
const methods = useForm({
|
|
94
|
+
defaultValues: {
|
|
95
|
+
otp: ''
|
|
96
|
+
},
|
|
97
|
+
resolver: zodResolver(otpSchema),
|
|
98
|
+
mode: 'onSubmit'
|
|
99
|
+
});
|
|
100
|
+
const onSubmit = async (value)=>{
|
|
101
|
+
const { data, error } = await authClient.twoFactor.verifyTotp({
|
|
102
|
+
code: value.otp
|
|
103
|
+
});
|
|
104
|
+
if (error) {
|
|
105
|
+
toast.error(error.message);
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
if (data && 'backupCodes' in data && data.backupCodes) {
|
|
109
|
+
setBackupCodes(Array.isArray(data.backupCodes) ? data.backupCodes : String(data.backupCodes).split(/\s+/).filter(Boolean));
|
|
110
|
+
}
|
|
111
|
+
toast.success('Two‑factor verified & enabled');
|
|
112
|
+
setTwoFactorEnabled(true);
|
|
113
|
+
setFormState('backupCodes');
|
|
114
|
+
};
|
|
115
|
+
return /*#__PURE__*/ _jsx(FormProvider, {
|
|
116
|
+
...methods,
|
|
117
|
+
children: /*#__PURE__*/ _jsx("form", {
|
|
118
|
+
onSubmit: methods.handleSubmit(onSubmit),
|
|
119
|
+
className: "two-factor-verify-form",
|
|
120
|
+
children: /*#__PURE__*/ _jsx("div", {
|
|
121
|
+
className: "tf__inputWrap",
|
|
122
|
+
children: /*#__PURE__*/ _jsx(Button, {
|
|
123
|
+
type: "submit",
|
|
124
|
+
children: "Verify"
|
|
125
|
+
})
|
|
126
|
+
})
|
|
127
|
+
})
|
|
128
|
+
});
|
|
129
|
+
};
|
|
130
|
+
const DisableForm = ()=>{
|
|
131
|
+
const methods = useForm({
|
|
132
|
+
defaultValues: {
|
|
133
|
+
password: ''
|
|
134
|
+
},
|
|
135
|
+
resolver: zodResolver(passwordSchema),
|
|
136
|
+
mode: 'onSubmit'
|
|
137
|
+
});
|
|
138
|
+
const onSubmit = async (value)=>{
|
|
139
|
+
await authClient.twoFactor.disable({
|
|
140
|
+
password: value.password
|
|
141
|
+
}, {
|
|
142
|
+
onSuccess () {
|
|
143
|
+
toast.success('Two‑factor disabled');
|
|
144
|
+
setTwoFactorEnabled(false);
|
|
145
|
+
closeModal('two-factor-auth-modal');
|
|
146
|
+
return undefined;
|
|
147
|
+
},
|
|
148
|
+
onError (ctx) {
|
|
149
|
+
toast.error(ctx.error.message);
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
};
|
|
153
|
+
return /*#__PURE__*/ _jsx(FormProvider, {
|
|
154
|
+
...methods,
|
|
155
|
+
children: /*#__PURE__*/ _jsx("form", {
|
|
156
|
+
onSubmit: methods.handleSubmit(onSubmit),
|
|
157
|
+
className: "two-factor-disable-form mt-4",
|
|
158
|
+
children: /*#__PURE__*/ _jsx("div", {
|
|
159
|
+
className: "two-factor-disable-form__inputWrap",
|
|
160
|
+
children: /*#__PURE__*/ _jsx(Button, {
|
|
161
|
+
type: "submit",
|
|
162
|
+
children: "Disable Two‑Factor"
|
|
163
|
+
})
|
|
164
|
+
})
|
|
165
|
+
})
|
|
166
|
+
});
|
|
167
|
+
};
|
|
168
|
+
return /*#__PURE__*/ _jsxs("div", {
|
|
169
|
+
className: "two-factor-auth-field",
|
|
170
|
+
children: [
|
|
171
|
+
twoFactorEnabled ? /*#__PURE__*/ _jsx(Button, {
|
|
172
|
+
onClick: ()=>{
|
|
173
|
+
setFormState('disable');
|
|
174
|
+
openModal('two-factor-auth-modal');
|
|
175
|
+
},
|
|
176
|
+
size: "medium",
|
|
177
|
+
buttonStyle: "pill",
|
|
178
|
+
children: "Disable Two-Factor"
|
|
179
|
+
}) : /*#__PURE__*/ _jsx(Button, {
|
|
180
|
+
onClick: ()=>{
|
|
181
|
+
setFormState('enable');
|
|
182
|
+
openModal('two-factor-auth-modal');
|
|
183
|
+
},
|
|
184
|
+
size: "medium",
|
|
185
|
+
buttonStyle: "pill",
|
|
186
|
+
children: "Enable Two-Factor"
|
|
187
|
+
}),
|
|
188
|
+
/*#__PURE__*/ _jsx(Modal, {
|
|
189
|
+
slug: "two-factor-auth-modal",
|
|
190
|
+
className: baseClass,
|
|
191
|
+
closeOnBlur: true,
|
|
192
|
+
children: /*#__PURE__*/ _jsxs("div", {
|
|
193
|
+
className: `${baseClass}__wrapper`,
|
|
194
|
+
children: [
|
|
195
|
+
/*#__PURE__*/ _jsx(Button, {
|
|
196
|
+
onClick: ()=>closeModal('two-factor-auth-modal'),
|
|
197
|
+
buttonStyle: "icon-label",
|
|
198
|
+
size: "small",
|
|
199
|
+
className: `${baseClass}__close-button`,
|
|
200
|
+
children: /*#__PURE__*/ _jsx(XIcon, {
|
|
201
|
+
size: 24
|
|
202
|
+
})
|
|
203
|
+
}),
|
|
204
|
+
/*#__PURE__*/ _jsxs("div", {
|
|
205
|
+
className: `${baseClass}__content`,
|
|
206
|
+
style: {
|
|
207
|
+
maxWidth: '38rem'
|
|
208
|
+
},
|
|
209
|
+
children: [
|
|
210
|
+
formState === 'enable' && /*#__PURE__*/ _jsxs(_Fragment, {
|
|
211
|
+
children: [
|
|
212
|
+
/*#__PURE__*/ _jsx("h2", {
|
|
213
|
+
children: "Enable Two‑Factor"
|
|
214
|
+
}),
|
|
215
|
+
/*#__PURE__*/ _jsx(EnableForm, {})
|
|
216
|
+
]
|
|
217
|
+
}),
|
|
218
|
+
formState === 'verify' && /*#__PURE__*/ _jsxs(_Fragment, {
|
|
219
|
+
children: [
|
|
220
|
+
/*#__PURE__*/ _jsx("h2", {
|
|
221
|
+
children: "Verify Two‑Factor"
|
|
222
|
+
}),
|
|
223
|
+
/*#__PURE__*/ _jsxs("div", {
|
|
224
|
+
className: "two-factor-auth-modal__verify-block",
|
|
225
|
+
children: [
|
|
226
|
+
/*#__PURE__*/ _jsx("p", {
|
|
227
|
+
children: "Scan the QR code with your authenticator app or copy the URI."
|
|
228
|
+
}),
|
|
229
|
+
/*#__PURE__*/ _jsx("div", {
|
|
230
|
+
className: "two-factor-auth-modal__qrcode",
|
|
231
|
+
children: /*#__PURE__*/ _jsx(QRCodeSVG, {
|
|
232
|
+
value: totpURI,
|
|
233
|
+
size: 200
|
|
234
|
+
})
|
|
235
|
+
}),
|
|
236
|
+
/*#__PURE__*/ _jsxs(Button, {
|
|
237
|
+
size: "small",
|
|
238
|
+
buttonStyle: "transparent",
|
|
239
|
+
onClick: copyURI,
|
|
240
|
+
className: "two-factor-auth-modal__copy-btn",
|
|
241
|
+
children: [
|
|
242
|
+
/*#__PURE__*/ _jsx(Copy, {
|
|
243
|
+
size: 18,
|
|
244
|
+
className: "two-factor-auth-modal__copy-icon"
|
|
245
|
+
}),
|
|
246
|
+
" Copy URI"
|
|
247
|
+
]
|
|
248
|
+
}),
|
|
249
|
+
/*#__PURE__*/ _jsx(VerifyForm, {})
|
|
250
|
+
]
|
|
251
|
+
})
|
|
252
|
+
]
|
|
253
|
+
}),
|
|
254
|
+
formState === 'backupCodes' && backupCodes && /*#__PURE__*/ _jsxs(_Fragment, {
|
|
255
|
+
children: [
|
|
256
|
+
/*#__PURE__*/ _jsx("h2", {
|
|
257
|
+
children: "Backup Codes"
|
|
258
|
+
}),
|
|
259
|
+
/*#__PURE__*/ _jsxs("div", {
|
|
260
|
+
className: "two-factor-auth-modal__backup-codes",
|
|
261
|
+
children: [
|
|
262
|
+
/*#__PURE__*/ _jsx("ul", {
|
|
263
|
+
children: backupCodes.map((code, i)=>/*#__PURE__*/ _jsx("li", {
|
|
264
|
+
className: "two-factor-auth-modal__backup-code",
|
|
265
|
+
children: code
|
|
266
|
+
}, `backup-code-${i}-${code}`))
|
|
267
|
+
}),
|
|
268
|
+
/*#__PURE__*/ _jsx("p", {
|
|
269
|
+
className: "two-factor-auth-modal__backup-desc",
|
|
270
|
+
children: "Store these codes in a safe place. Each code can be used once if you lose access to your authenticator."
|
|
271
|
+
})
|
|
272
|
+
]
|
|
273
|
+
}),
|
|
274
|
+
/*#__PURE__*/ _jsx(Button, {
|
|
275
|
+
onClick: ()=>closeModal('two-factor-auth-modal'),
|
|
276
|
+
buttonStyle: "primary",
|
|
277
|
+
size: "large",
|
|
278
|
+
className: "two-factor-auth-modal__backup-codes-close-button",
|
|
279
|
+
children: "Saved them!"
|
|
280
|
+
})
|
|
281
|
+
]
|
|
282
|
+
}),
|
|
283
|
+
formState === 'disable' && /*#__PURE__*/ _jsxs(_Fragment, {
|
|
284
|
+
children: [
|
|
285
|
+
/*#__PURE__*/ _jsx("h2", {
|
|
286
|
+
children: "Two‑Factor Authentication"
|
|
287
|
+
}),
|
|
288
|
+
/*#__PURE__*/ _jsx(DisableForm, {})
|
|
289
|
+
]
|
|
290
|
+
})
|
|
291
|
+
]
|
|
292
|
+
})
|
|
293
|
+
]
|
|
294
|
+
})
|
|
295
|
+
})
|
|
296
|
+
]
|
|
297
|
+
});
|
|
298
|
+
};
|
|
299
|
+
|
|
300
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/better-auth/plugin/payload/components/two-factor-auth/index.tsx"],"sourcesContent":["'use client';\n\nimport './index.scss';\n\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { Button, Modal, toast, useField, useFormFields, useModal } from '@payloadcms/ui';\nimport { twoFactorClient } from 'better-auth/client/plugins';\nimport { createAuthClient } from 'better-auth/react';\nimport { Copy, X as XIcon } from 'lucide-react';\nimport dynamic from 'next/dynamic';\nimport { FormProvider, useForm } from 'react-hook-form';\nconst QRCodeSVG = dynamic(() => import('qrcode.react').then(m => m.QRCodeSVG), {\n ssr: false,\n});\nimport React, { useMemo, useState } from 'react';\nimport { z } from 'zod';\n\nconst baseClass = 'two-factor-auth-modal';\n\ntype TwoFactorAuthProps = {\n baseURL?: string;\n basePath?: string;\n};\n\nexport const TwoFactorAuth: React.FC<TwoFactorAuthProps> = ({ baseURL, basePath }) => {\n const [totpURI, setTotpURI] = useState('');\n const [backupCodes, setBackupCodes] = useState<string[] | null>(null);\n const [formState, setFormState] = useState<'enable' | 'verify' | 'backupCodes' | 'disable'>(\n 'enable'\n );\n const { openModal, closeModal } = useModal();\n const twoFactorEnabledField = useFormFields(([fields]) => (fields as any).twoFactorEnabled);\n const twoFactorEnabled = Boolean(twoFactorEnabledField?.value);\n const { setValue: setTwoFactorEnabled } = useField({ path: 'twoFactorEnabled' });\n\n const authClient = useMemo(() => {\n const options: any = { plugins: [twoFactorClient() as any] };\n if (baseURL) options.baseURL = baseURL;\n if (basePath) options.basePath = basePath;\n return createAuthClient(options);\n }, []);\n\n const copyURI = async () => {\n if (!totpURI) return;\n try {\n await navigator.clipboard.writeText(totpURI);\n toast.success('Copied');\n } catch {\n toast.error('Failed to copy');\n }\n };\n\n // Form Schemas\n const passwordSchema = z.object({\n password: z.string().min(1, 'Required'), // simple required validation\n });\n\n const otpSchema = z.object({\n otp: z\n .string()\n .length(6, 'Code must be 6 digits')\n .refine(val => /^\\d{6}$/.test(val), 'Code must be numeric'),\n });\n\n const EnableForm = () => {\n const methods = useForm({\n defaultValues: { password: '' },\n resolver: zodResolver(passwordSchema),\n mode: 'onSubmit',\n });\n\n const onSubmit = async (value: { password: string }) => {\n const { data, error } = await (authClient as any).twoFactor.enable({\n password: value.password,\n });\n if (error) {\n toast.error(error.message);\n return;\n }\n setTotpURI(data.totpURI);\n if (data && 'backupCodes' in data && data.backupCodes) {\n setBackupCodes(\n Array.isArray(data.backupCodes)\n ? data.backupCodes\n : String(data.backupCodes).split(/\\s+/).filter(Boolean)\n );\n } else {\n setBackupCodes(null);\n }\n setFormState('verify');\n };\n\n return (\n <FormProvider {...methods}>\n <form onSubmit={methods.handleSubmit(onSubmit)} className='two-factor-enable-form'>\n <div className='two-factor-enable-form__inputWrap'>\n <Button type='submit'>Enable</Button>\n </div>\n </form>\n </FormProvider>\n );\n };\n\n const VerifyForm = () => {\n const methods = useForm({\n defaultValues: { otp: '' },\n resolver: zodResolver(otpSchema),\n mode: 'onSubmit',\n });\n\n const onSubmit = async (value: { otp: string }) => {\n const { data, error } = await (authClient as any).twoFactor.verifyTotp({ code: value.otp });\n if (error) {\n toast.error(error.message);\n return;\n }\n if (data && 'backupCodes' in data && data.backupCodes) {\n setBackupCodes(\n Array.isArray(data.backupCodes)\n ? data.backupCodes\n : String(data.backupCodes).split(/\\s+/).filter(Boolean)\n );\n }\n toast.success('Two‑factor verified & enabled');\n setTwoFactorEnabled(true);\n setFormState('backupCodes');\n };\n\n return (\n <FormProvider {...methods}>\n <form onSubmit={methods.handleSubmit(onSubmit)} className='two-factor-verify-form'>\n <div className='tf__inputWrap'>\n <Button type='submit'>Verify</Button>\n </div>\n </form>\n </FormProvider>\n );\n };\n\n const DisableForm = () => {\n const methods = useForm({\n defaultValues: { password: '' },\n resolver: zodResolver(passwordSchema),\n mode: 'onSubmit',\n });\n\n const onSubmit = async (value: { password: string }) => {\n await (authClient as any).twoFactor.disable(\n { password: value.password },\n {\n onSuccess() {\n toast.success('Two‑factor disabled');\n setTwoFactorEnabled(false);\n closeModal('two-factor-auth-modal');\n return undefined;\n },\n onError(ctx: any) {\n toast.error(ctx.error.message);\n },\n }\n );\n };\n\n return (\n <FormProvider {...methods}>\n <form onSubmit={methods.handleSubmit(onSubmit)} className='two-factor-disable-form mt-4'>\n <div className='two-factor-disable-form__inputWrap'>\n <Button type='submit'>Disable Two‑Factor</Button>\n </div>\n </form>\n </FormProvider>\n );\n };\n\n return (\n <div className='two-factor-auth-field'>\n {twoFactorEnabled ? (\n <Button\n onClick={() => {\n setFormState('disable');\n openModal('two-factor-auth-modal');\n }}\n size='medium'\n buttonStyle='pill'\n >\n Disable Two-Factor\n </Button>\n ) : (\n <Button\n onClick={() => {\n setFormState('enable');\n openModal('two-factor-auth-modal');\n }}\n size='medium'\n buttonStyle='pill'\n >\n Enable Two-Factor\n </Button>\n )}\n <Modal slug='two-factor-auth-modal' className={baseClass} closeOnBlur>\n <div className={`${baseClass}__wrapper`}>\n <Button\n onClick={() => closeModal('two-factor-auth-modal')}\n buttonStyle='icon-label'\n size='small'\n className={`${baseClass}__close-button`}\n >\n <XIcon size={24} />\n </Button>\n\n <div className={`${baseClass}__content`} style={{ maxWidth: '38rem' }}>\n {formState === 'enable' && (\n <>\n <h2>Enable Two‑Factor</h2>\n <EnableForm />\n </>\n )}\n {formState === 'verify' && (\n <>\n <h2>Verify Two‑Factor</h2>\n <div className='two-factor-auth-modal__verify-block'>\n <p>Scan the QR code with your authenticator app or copy the URI.</p>\n <div className='two-factor-auth-modal__qrcode'>\n <QRCodeSVG value={totpURI} size={200} />\n </div>\n <Button\n size='small'\n buttonStyle='transparent'\n onClick={copyURI}\n className='two-factor-auth-modal__copy-btn'\n >\n <Copy size={18} className='two-factor-auth-modal__copy-icon' /> Copy URI\n </Button>\n <VerifyForm />\n </div>\n </>\n )}\n {formState === 'backupCodes' && backupCodes && (\n <>\n <h2>Backup Codes</h2>\n <div className='two-factor-auth-modal__backup-codes'>\n <ul>\n {backupCodes.map((code, i) => (\n <li\n key={`backup-code-${i}-${code}`}\n className='two-factor-auth-modal__backup-code'\n >\n {code}\n </li>\n ))}\n </ul>\n <p className='two-factor-auth-modal__backup-desc'>\n Store these codes in a safe place. Each code can be used once if you lose access\n to your authenticator.\n </p>\n </div>\n <Button\n onClick={() => closeModal('two-factor-auth-modal')}\n buttonStyle='primary'\n size='large'\n className='two-factor-auth-modal__backup-codes-close-button'\n >\n Saved them!\n </Button>\n </>\n )}\n {formState === 'disable' && (\n <>\n <h2>Two‑Factor Authentication</h2>\n <DisableForm />\n </>\n )}\n </div>\n </div>\n </Modal>\n </div>\n );\n};\n"],"names":["zodResolver","Button","Modal","toast","useField","useFormFields","useModal","twoFactorClient","createAuthClient","Copy","X","XIcon","dynamic","FormProvider","useForm","QRCodeSVG","then","m","ssr","React","useMemo","useState","z","baseClass","TwoFactorAuth","baseURL","basePath","totpURI","setTotpURI","backupCodes","setBackupCodes","formState","setFormState","openModal","closeModal","twoFactorEnabledField","fields","twoFactorEnabled","Boolean","value","setValue","setTwoFactorEnabled","path","authClient","options","plugins","copyURI","navigator","clipboard","writeText","success","error","passwordSchema","object","password","string","min","otpSchema","otp","length","refine","val","test","EnableForm","methods","defaultValues","resolver","mode","onSubmit","data","twoFactor","enable","message","Array","isArray","String","split","filter","form","handleSubmit","className","div","type","VerifyForm","verifyTotp","code","DisableForm","disable","onSuccess","undefined","onError","ctx","onClick","size","buttonStyle","slug","closeOnBlur","style","maxWidth","h2","p","ul","map","i","li"],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { AdminButtons } from '../components/admin-buttons';
|
|
2
|
+
import { AdminInviteButton } from '../components/admin-invite-button';
|
|
3
|
+
import { LogoutButton } from '../components/logout-button';
|
|
4
|
+
import { AdminSocialProviderButtons } from '../components/social-provider-buttons';
|
|
5
|
+
import { TwoFactorAuth } from '../components/two-factor-auth';
|
|
6
|
+
export { AdminButtons, AdminInviteButton, LogoutButton, AdminSocialProviderButtons, TwoFactorAuth };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { AdminButtons } from "../components/admin-buttons";
|
|
2
|
+
import { AdminInviteButton } from "../components/admin-invite-button";
|
|
3
|
+
import { LogoutButton } from "../components/logout-button";
|
|
4
|
+
import { AdminSocialProviderButtons } from "../components/social-provider-buttons";
|
|
5
|
+
import { TwoFactorAuth } from "../components/two-factor-auth";
|
|
6
|
+
export { AdminButtons, AdminInviteButton, LogoutButton, AdminSocialProviderButtons, TwoFactorAuth };
|
|
7
|
+
|
|
8
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/better-auth/plugin/payload/exports/client.ts"],"sourcesContent":["import { AdminButtons } from '../components/admin-buttons';\nimport { AdminInviteButton } from '../components/admin-invite-button';\nimport { LogoutButton } from '../components/logout-button';\nimport { AdminSocialProviderButtons } from '../components/social-provider-buttons';\nimport { TwoFactorAuth } from '../components/two-factor-auth';\n\nexport { AdminButtons, AdminInviteButton, LogoutButton, AdminSocialProviderButtons, TwoFactorAuth };\n"],"names":["AdminButtons","AdminInviteButton","LogoutButton","AdminSocialProviderButtons","TwoFactorAuth"],"mappings":"AAAA,SAASA,YAAY,QAAQ,8BAA8B;AAC3D,SAASC,iBAAiB,QAAQ,oCAAoC;AACtE,SAASC,YAAY,QAAQ,8BAA8B;AAC3D,SAASC,0BAA0B,QAAQ,wCAAwC;AACnF,SAASC,aAAa,QAAQ,gCAAgC;AAE9D,SAASJ,YAAY,EAAEC,iBAAiB,EAAEC,YAAY,EAAEC,0BAA0B,EAAEC,aAAa,GAAG"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Passkeys } from '../components/passkeys';
|
|
2
|
+
import RSCRedirect from '../components/rsc-redirect';
|
|
3
|
+
import AdminLogin from '../views/admin-login';
|
|
4
|
+
import AdminSignup from '../views/admin-signup';
|
|
5
|
+
import ForgotPassword from '../views/forgot-password';
|
|
6
|
+
import ResetPassword from '../views/reset-password';
|
|
7
|
+
import TwoFactorVerify from '../views/two-factor-verify';
|
|
8
|
+
export { AdminSignup, AdminLogin, ForgotPassword, ResetPassword, RSCRedirect, TwoFactorVerify, Passkeys, };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Passkeys } from "../components/passkeys";
|
|
2
|
+
import RSCRedirect from "../components/rsc-redirect";
|
|
3
|
+
import AdminLogin from "../views/admin-login";
|
|
4
|
+
import AdminSignup from "../views/admin-signup";
|
|
5
|
+
import ForgotPassword from "../views/forgot-password";
|
|
6
|
+
import ResetPassword from "../views/reset-password";
|
|
7
|
+
import TwoFactorVerify from "../views/two-factor-verify";
|
|
8
|
+
export { AdminSignup, AdminLogin, ForgotPassword, ResetPassword, RSCRedirect, TwoFactorVerify, Passkeys };
|
|
9
|
+
|
|
10
|
+
//# sourceMappingURL=rsc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/better-auth/plugin/payload/exports/rsc.ts"],"sourcesContent":["import { Passkeys } from '../components/passkeys';\nimport RSCRedirect from '../components/rsc-redirect';\nimport AdminLogin from '../views/admin-login';\nimport AdminSignup from '../views/admin-signup';\nimport ForgotPassword from '../views/forgot-password';\nimport ResetPassword from '../views/reset-password';\nimport TwoFactorVerify from '../views/two-factor-verify';\n\nexport {\n AdminSignup,\n AdminLogin,\n ForgotPassword,\n ResetPassword,\n RSCRedirect,\n TwoFactorVerify,\n Passkeys,\n};\n"],"names":["Passkeys","RSCRedirect","AdminLogin","AdminSignup","ForgotPassword","ResetPassword","TwoFactorVerify"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,yBAAyB;AAClD,OAAOC,iBAAiB,6BAA6B;AACrD,OAAOC,gBAAgB,uBAAuB;AAC9C,OAAOC,iBAAiB,wBAAwB;AAChD,OAAOC,oBAAoB,2BAA2B;AACtD,OAAOC,mBAAmB,0BAA0B;AACpD,OAAOC,qBAAqB,6BAA6B;AAEzD,SACEH,WAAW,EACXD,UAAU,EACVE,cAAc,EACdC,aAAa,EACbJ,WAAW,EACXK,eAAe,EACfN,QAAQ,GACR"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { adminRoutes } from "@/better-auth/plugin/constants";
|
|
2
|
+
export const generateAdminInviteUrl = ({ payload, token })=>{
|
|
3
|
+
if (!payload?.config?.serverURL) {
|
|
4
|
+
payload.logger.warn('payload.config.serverURL is not set. Set it to generate a full URL for the admin invite link.');
|
|
5
|
+
}
|
|
6
|
+
return `${payload.getAdminURL()}${adminRoutes.adminSignup}?token=${token}`;
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
//# sourceMappingURL=generate-admin-invite-url.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/better-auth/plugin/payload/utils/generate-admin-invite-url.ts"],"sourcesContent":["import { adminRoutes } from '@/better-auth/plugin/constants';\nimport type { GenerateAdminInviteUrlFn } from '@/better-auth/plugin/types';\n\nexport const generateAdminInviteUrl: GenerateAdminInviteUrlFn = ({ payload, token }) => {\n if (!payload?.config?.serverURL) {\n payload.logger.warn(\n 'payload.config.serverURL is not set. Set it to generate a full URL for the admin invite link.'\n );\n }\n return `${payload.getAdminURL()}${adminRoutes.adminSignup}?token=${token}`;\n};\n"],"names":["adminRoutes","generateAdminInviteUrl","payload","token","config","serverURL","logger","warn","getAdminURL","adminSignup"],"mappings":"AAAA,SAASA,WAAW,QAAQ,iCAAiC;AAG7D,OAAO,MAAMC,yBAAmD,CAAC,EAAEC,OAAO,EAAEC,KAAK,EAAE;IACjF,IAAI,CAACD,SAASE,QAAQC,WAAW;QAC/BH,QAAQI,MAAM,CAACC,IAAI,CACjB;IAEJ;IACA,OAAO,GAAGL,QAAQM,WAAW,KAAKR,YAAYS,WAAW,CAAC,OAAO,EAAEN,OAAO;AAC5E,EAAE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const getSafeRedirect: (redirectParam: string | string[], fallback?: string) => string;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export const getSafeRedirect = (redirectParam, fallback = '/')=>{
|
|
2
|
+
if (typeof redirectParam !== 'string') {
|
|
3
|
+
return fallback;
|
|
4
|
+
}
|
|
5
|
+
// Normalize and decode the path
|
|
6
|
+
let redirectPath;
|
|
7
|
+
try {
|
|
8
|
+
redirectPath = decodeURIComponent(redirectParam.trim());
|
|
9
|
+
} catch {
|
|
10
|
+
return fallback; // invalid encoding
|
|
11
|
+
}
|
|
12
|
+
const isSafeRedirect = // Must start with a single forward slash (e.g., "/admin")
|
|
13
|
+
redirectPath.startsWith('/') && // Prevent protocol-relative URLs (e.g., "//example.com")
|
|
14
|
+
!redirectPath.startsWith('//') && // Prevent encoded slashes that could resolve to protocol-relative
|
|
15
|
+
!redirectPath.startsWith('/%2F') && // Prevent backslash-based escape attempts (e.g., "/\\/example.com", "/\\\\example.com", "/\\example.com")
|
|
16
|
+
!redirectPath.startsWith('/\\/') && !redirectPath.startsWith('/\\\\') && !redirectPath.startsWith('/\\') && // Prevent javascript-based schemes (e.g., "/javascript:alert(1)")
|
|
17
|
+
!redirectPath.toLowerCase().startsWith('/javascript:') && // Prevent attempts to redirect to full URLs using "/http:" or "/https:"
|
|
18
|
+
!redirectPath.toLowerCase().startsWith('/http');
|
|
19
|
+
return isSafeRedirect ? redirectPath : fallback;
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
//# sourceMappingURL=get-safe-redirect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/better-auth/plugin/payload/utils/get-safe-redirect.ts"],"sourcesContent":["export const getSafeRedirect = (\n redirectParam: string | string[],\n fallback: string = '/'\n): string => {\n if (typeof redirectParam !== 'string') {\n return fallback;\n }\n\n // Normalize and decode the path\n let redirectPath: string;\n try {\n redirectPath = decodeURIComponent(redirectParam.trim());\n } catch {\n return fallback; // invalid encoding\n }\n\n const isSafeRedirect =\n // Must start with a single forward slash (e.g., \"/admin\")\n redirectPath.startsWith('/') &&\n // Prevent protocol-relative URLs (e.g., \"//example.com\")\n !redirectPath.startsWith('//') &&\n // Prevent encoded slashes that could resolve to protocol-relative\n !redirectPath.startsWith('/%2F') &&\n // Prevent backslash-based escape attempts (e.g., \"/\\\\/example.com\", \"/\\\\\\\\example.com\", \"/\\\\example.com\")\n !redirectPath.startsWith('/\\\\/') &&\n !redirectPath.startsWith('/\\\\\\\\') &&\n !redirectPath.startsWith('/\\\\') &&\n // Prevent javascript-based schemes (e.g., \"/javascript:alert(1)\")\n !redirectPath.toLowerCase().startsWith('/javascript:') &&\n // Prevent attempts to redirect to full URLs using \"/http:\" or \"/https:\"\n !redirectPath.toLowerCase().startsWith('/http');\n\n return isSafeRedirect ? redirectPath : fallback;\n};\n"],"names":["getSafeRedirect","redirectParam","fallback","redirectPath","decodeURIComponent","trim","isSafeRedirect","startsWith","toLowerCase"],"mappings":"AAAA,OAAO,MAAMA,kBAAkB,CAC7BC,eACAC,WAAmB,GAAG;IAEtB,IAAI,OAAOD,kBAAkB,UAAU;QACrC,OAAOC;IACT;IAEA,gCAAgC;IAChC,IAAIC;IACJ,IAAI;QACFA,eAAeC,mBAAmBH,cAAcI,IAAI;IACtD,EAAE,OAAM;QACN,OAAOH,UAAU,mBAAmB;IACtC;IAEA,MAAMI,iBACJ,0DAA0D;IAC1DH,aAAaI,UAAU,CAAC,QACxB,yDAAyD;IACzD,CAACJ,aAAaI,UAAU,CAAC,SACzB,kEAAkE;IAClE,CAACJ,aAAaI,UAAU,CAAC,WACzB,0GAA0G;IAC1G,CAACJ,aAAaI,UAAU,CAAC,WACzB,CAACJ,aAAaI,UAAU,CAAC,YACzB,CAACJ,aAAaI,UAAU,CAAC,UACzB,kEAAkE;IAClE,CAACJ,aAAaK,WAAW,GAAGD,UAAU,CAAC,mBACvC,wEAAwE;IACxE,CAACJ,aAAaK,WAAW,GAAGD,UAAU,CAAC;IAEzC,OAAOD,iBAAiBH,eAAeD;AACzC,EAAE"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { LoginMethod } from '@/better-auth/plugin/types';
|
|
2
|
+
import type { LoginWithUsernameOptions } from 'payload';
|
|
3
|
+
import React from 'react';
|
|
4
|
+
type AdminLoginClientProps = {
|
|
5
|
+
loginMethods: LoginMethod[];
|
|
6
|
+
hasUsernamePlugin: boolean;
|
|
7
|
+
hasPasskeyPlugin: boolean;
|
|
8
|
+
prefillEmail?: string;
|
|
9
|
+
prefillPassword?: string;
|
|
10
|
+
prefillUsername?: string;
|
|
11
|
+
searchParams: {
|
|
12
|
+
[key: string]: string | string[] | undefined;
|
|
13
|
+
};
|
|
14
|
+
loginWithUsername: false | LoginWithUsernameOptions;
|
|
15
|
+
baseURL?: string;
|
|
16
|
+
basePath?: string;
|
|
17
|
+
};
|
|
18
|
+
export declare const AdminLoginClient: React.FC<AdminLoginClientProps>;
|
|
19
|
+
export {};
|