payload-auth 1.0.1 → 1.1.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/dist/authjs/index.d.ts +1 -0
- package/dist/authjs/index.d.ts.map +1 -0
- package/dist/authjs/index.js +1 -1
- package/dist/better-auth/adapter/generate-schema/generate-schema-builder.d.ts +1 -0
- package/dist/better-auth/adapter/generate-schema/generate-schema-builder.d.ts.map +1 -0
- package/dist/better-auth/adapter/generate-schema/generate-schema-builder.js +1 -1
- package/dist/better-auth/adapter/generate-schema/get-payload-schema.d.ts +1 -0
- package/dist/better-auth/adapter/generate-schema/get-payload-schema.d.ts.map +1 -0
- package/dist/better-auth/adapter/generate-schema/get-payload-schema.js +1 -1
- package/dist/better-auth/adapter/generate-schema/index.d.ts +1 -0
- package/dist/better-auth/adapter/generate-schema/index.d.ts.map +1 -0
- package/dist/better-auth/adapter/generate-schema/index.js +3 -3
- package/dist/better-auth/adapter/generate-schema/utils.d.ts +1 -0
- package/dist/better-auth/adapter/generate-schema/utils.d.ts.map +1 -0
- package/dist/better-auth/adapter/generate-schema/utils.js +1 -1
- package/dist/better-auth/adapter/index.d.ts +3 -2
- package/dist/better-auth/adapter/index.d.ts.map +1 -0
- package/dist/better-auth/adapter/index.js +115 -69
- package/dist/better-auth/adapter/transform/index.d.ts +19 -6
- package/dist/better-auth/adapter/transform/index.d.ts.map +1 -0
- package/dist/better-auth/adapter/transform/index.js +387 -96
- package/dist/better-auth/adapter/types.d.ts +3 -1
- package/dist/better-auth/adapter/types.d.ts.map +1 -0
- package/dist/better-auth/adapter/types.js +1 -1
- package/dist/better-auth/index.d.ts +1 -0
- package/dist/better-auth/index.d.ts.map +1 -0
- package/dist/better-auth/index.js +1 -1
- package/dist/better-auth/plugin/helpers/check-passkey-plugin.d.ts +3 -0
- package/dist/better-auth/plugin/helpers/check-passkey-plugin.d.ts.map +1 -0
- package/dist/better-auth/plugin/helpers/check-passkey-plugin.js +5 -0
- package/dist/better-auth/plugin/helpers/check-username-plugin.d.ts +3 -0
- package/dist/better-auth/plugin/helpers/check-username-plugin.d.ts.map +1 -0
- package/dist/better-auth/plugin/helpers/check-username-plugin.js +5 -0
- package/dist/better-auth/plugin/helpers/generate-verify-email-url.d.ts +1 -0
- package/dist/better-auth/plugin/helpers/generate-verify-email-url.d.ts.map +1 -0
- package/dist/better-auth/plugin/helpers/generate-verify-email-url.js +8 -8
- package/dist/better-auth/plugin/helpers/get-admin-access.d.ts +8 -0
- package/dist/better-auth/plugin/helpers/get-admin-access.d.ts.map +1 -0
- package/dist/better-auth/plugin/helpers/get-admin-access.js +22 -0
- package/dist/better-auth/plugin/helpers/get-admin-routes.d.ts +14 -0
- package/dist/better-auth/plugin/helpers/get-admin-routes.d.ts.map +1 -0
- package/dist/better-auth/plugin/helpers/get-admin-routes.js +6 -0
- package/dist/better-auth/plugin/helpers/get-all-roles.d.ts +6 -0
- package/dist/better-auth/plugin/helpers/get-all-roles.d.ts.map +1 -0
- package/dist/better-auth/plugin/helpers/get-all-roles.js +20 -0
- package/dist/better-auth/plugin/helpers/get-ip.d.ts +2 -1
- package/dist/better-auth/plugin/helpers/get-ip.d.ts.map +1 -0
- package/dist/better-auth/plugin/helpers/get-ip.js +14 -14
- package/dist/better-auth/plugin/helpers/get-requst-collection.d.ts +3 -0
- package/dist/better-auth/plugin/helpers/get-requst-collection.d.ts.map +1 -0
- package/dist/better-auth/plugin/helpers/get-requst-collection.js +14 -0
- package/dist/better-auth/plugin/helpers/index.d.ts +2 -1
- package/dist/better-auth/plugin/helpers/index.d.ts.map +1 -0
- package/dist/better-auth/plugin/helpers/index.js +2 -2
- package/dist/better-auth/plugin/{lib → helpers}/prepare-session-data.d.ts +3 -2
- package/dist/better-auth/plugin/helpers/prepare-session-data.d.ts.map +1 -0
- package/dist/better-auth/plugin/helpers/prepare-session-data.js +42 -0
- package/dist/better-auth/plugin/helpers/serialize-cookie.d.ts +3 -2
- package/dist/better-auth/plugin/helpers/serialize-cookie.d.ts.map +1 -0
- package/dist/better-auth/plugin/helpers/serialize-cookie.js +34 -34
- package/dist/better-auth/plugin/index.d.ts +8 -7
- package/dist/better-auth/plugin/index.d.ts.map +1 -0
- package/dist/better-auth/plugin/index.js +145 -37
- package/dist/better-auth/plugin/{collections → lib/build-collections}/accounts/hooks/sync-password-to-user.d.ts +2 -1
- package/dist/better-auth/plugin/lib/build-collections/accounts/hooks/sync-password-to-user.d.ts.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/accounts/hooks/sync-password-to-user.js +47 -0
- package/dist/better-auth/plugin/lib/build-collections/accounts/index.d.ts +7 -0
- package/dist/better-auth/plugin/lib/build-collections/accounts/index.d.ts.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/accounts/index.js +159 -0
- package/dist/better-auth/plugin/lib/build-collections/admin-invitations/hooks/get-url-after-read.d.ts +6 -0
- package/dist/better-auth/plugin/lib/build-collections/admin-invitations/hooks/get-url-after-read.d.ts.map +1 -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-before-change.d.ts +3 -0
- package/dist/better-auth/plugin/lib/build-collections/admin-invitations/hooks/get-url-before-change.d.ts.map +1 -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/index.d.ts +7 -0
- package/dist/better-auth/plugin/lib/build-collections/admin-invitations/index.d.ts.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/admin-invitations/index.js +107 -0
- package/dist/better-auth/plugin/lib/build-collections/api-keys.d.ts +6 -0
- package/dist/better-auth/plugin/lib/build-collections/api-keys.d.ts.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/api-keys.js +196 -0
- package/dist/better-auth/plugin/lib/build-collections/index.d.ts +12 -0
- package/dist/better-auth/plugin/lib/build-collections/index.d.ts.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/index.js +96 -0
- package/dist/better-auth/plugin/lib/build-collections/invitations.d.ts +6 -0
- package/dist/better-auth/plugin/lib/build-collections/invitations.d.ts.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/invitations.js +91 -0
- package/dist/better-auth/plugin/lib/build-collections/jwks.d.ts +6 -0
- package/dist/better-auth/plugin/lib/build-collections/jwks.d.ts.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/jwks.js +43 -0
- package/dist/better-auth/plugin/lib/build-collections/members.d.ts +6 -0
- package/dist/better-auth/plugin/lib/build-collections/members.d.ts.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/members.js +71 -0
- package/dist/better-auth/plugin/lib/build-collections/oauth-access-tokens.d.ts +6 -0
- package/dist/better-auth/plugin/lib/build-collections/oauth-access-tokens.d.ts.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/oauth-access-tokens.js +98 -0
- package/dist/better-auth/plugin/lib/build-collections/oauth-applications.d.ts +6 -0
- package/dist/better-auth/plugin/lib/build-collections/oauth-applications.d.ts.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/oauth-applications.js +113 -0
- package/dist/better-auth/plugin/lib/build-collections/oauth-consents.d.ts +6 -0
- package/dist/better-auth/plugin/lib/build-collections/oauth-consents.d.ts.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/oauth-consents.js +67 -0
- package/dist/better-auth/plugin/lib/build-collections/organizations.d.ts +6 -0
- package/dist/better-auth/plugin/lib/build-collections/organizations.d.ts.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/organizations.js +59 -0
- package/dist/better-auth/plugin/lib/build-collections/passkeys.d.ts +6 -0
- package/dist/better-auth/plugin/lib/build-collections/passkeys.d.ts.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/passkeys.js +108 -0
- package/dist/better-auth/plugin/lib/build-collections/sessions.d.ts +8 -0
- package/dist/better-auth/plugin/lib/build-collections/sessions.d.ts.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/sessions.js +123 -0
- package/dist/better-auth/plugin/lib/build-collections/sso-providers.d.ts +6 -0
- package/dist/better-auth/plugin/lib/build-collections/sso-providers.d.ts.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/sso-providers.js +83 -0
- package/dist/better-auth/plugin/lib/build-collections/teams.d.ts +6 -0
- package/dist/better-auth/plugin/lib/build-collections/teams.d.ts.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/teams.js +45 -0
- package/dist/better-auth/plugin/lib/build-collections/two-factors.d.ts +6 -0
- package/dist/better-auth/plugin/lib/build-collections/two-factors.d.ts.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/two-factors.js +56 -0
- package/dist/better-auth/plugin/lib/build-collections/users/better-auth-strategy.d.ts +8 -0
- package/dist/better-auth/plugin/lib/build-collections/users/better-auth-strategy.d.ts.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/users/better-auth-strategy.js +52 -0
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/forgot-password.d.ts +3 -0
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/forgot-password.d.ts.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/forgot-password.js +96 -0
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/generate-invite-url.d.ts +13 -0
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/generate-invite-url.d.ts.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/generate-invite-url.js +67 -0
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/login.d.ts +4 -0
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/login.d.ts.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/login.js +115 -0
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/refresh-token.d.ts +3 -0
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/refresh-token.d.ts.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/refresh-token.js +110 -0
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/reset-password.d.ts +3 -0
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/reset-password.d.ts.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/reset-password.js +62 -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.d.ts.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/send-invite-url.js +42 -0
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/set-admin-role.d.ts +4 -0
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/set-admin-role.d.ts.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/set-admin-role.js +79 -0
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/signup.d.ts +4 -0
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/signup.d.ts.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/signup.js +153 -0
- package/dist/better-auth/plugin/{collections → lib/build-collections}/users/hooks/after-login.d.ts +2 -1
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-login.d.ts.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-login.js +75 -0
- package/dist/better-auth/plugin/{collections → lib/build-collections}/users/hooks/after-logout.d.ts +2 -1
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-logout.d.ts.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-logout.js +74 -0
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/before-delete.d.ts +7 -0
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/before-delete.d.ts.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/before-delete.js +45 -0
- package/dist/better-auth/plugin/{collections → lib/build-collections}/users/hooks/before-login.d.ts +2 -1
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/before-login.d.ts.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/before-login.js +18 -0
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/on-verified-change.d.ts +3 -0
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/on-verified-change.d.ts.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/on-verified-change.js +14 -0
- package/dist/better-auth/plugin/{collections → lib/build-collections}/users/hooks/sync-account.d.ts +2 -1
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/sync-account.d.ts.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/sync-account.js +82 -0
- package/dist/better-auth/plugin/lib/build-collections/users/index.d.ts +8 -0
- package/dist/better-auth/plugin/lib/build-collections/users/index.d.ts.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/users/index.js +345 -0
- package/dist/better-auth/plugin/lib/build-collections/utils/get-timestamp-fields.d.ts +8 -0
- package/dist/better-auth/plugin/lib/build-collections/utils/get-timestamp-fields.d.ts.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/utils/get-timestamp-fields.js +31 -0
- package/dist/better-auth/plugin/lib/{payload-access.d.ts → build-collections/utils/payload-access.d.ts} +2 -1
- package/dist/better-auth/plugin/lib/build-collections/utils/payload-access.d.ts.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/utils/payload-access.js +64 -0
- package/dist/better-auth/plugin/lib/build-collections/verifications.d.ts +7 -0
- package/dist/better-auth/plugin/lib/build-collections/verifications.d.ts.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/verifications.js +63 -0
- package/dist/better-auth/plugin/lib/{config.d.ts → constants.d.ts} +14 -0
- package/dist/better-auth/plugin/lib/constants.d.ts.map +1 -0
- package/dist/better-auth/plugin/lib/constants.js +56 -0
- package/dist/better-auth/plugin/lib/get-payload-auth.d.ts +3 -2
- package/dist/better-auth/plugin/lib/get-payload-auth.d.ts.map +1 -0
- package/dist/better-auth/plugin/lib/get-payload-auth.js +2 -2
- package/dist/better-auth/plugin/lib/get-required-collection-slugs.d.ts +5 -4
- package/dist/better-auth/plugin/lib/get-required-collection-slugs.d.ts.map +1 -0
- package/dist/better-auth/plugin/lib/get-required-collection-slugs.js +26 -43
- package/dist/better-auth/plugin/lib/init-better-auth.d.ts +5 -3
- package/dist/better-auth/plugin/lib/init-better-auth.d.ts.map +1 -0
- package/dist/better-auth/plugin/lib/init-better-auth.js +6 -6
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/admin-plugin.d.ts +3 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/admin-plugin.d.ts.map +1 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/admin-plugin.js +8 -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.d.ts.map +1 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/api-key-plugin.js +17 -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.d.ts.map +1 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/index.js +118 -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.d.ts.map +1 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/oidc-plugin.js +58 -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.d.ts.map +1 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/organizations-plugin.js +86 -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.d.ts.map +1 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/passkey-plugin.js +17 -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.d.ts.map +1 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/sso-plugin.js +17 -0
- package/dist/better-auth/plugin/lib/{ensure-password-set-before-create.d.ts → sanitize-better-auth-options/utils/ensure-password-set-before-create.d.ts} +2 -1
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/ensure-password-set-before-create.d.ts.map +1 -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/{password.d.ts → sanitize-better-auth-options/utils/password.d.ts} +1 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/password.d.ts.map +1 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/password.js +62 -0
- package/dist/better-auth/plugin/lib/{respect-save-to-jwt-fields-middleware.d.ts → sanitize-better-auth-options/utils/save-to-jwt-middleware.d.ts} +6 -5
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/save-to-jwt-middleware.d.ts.map +1 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/save-to-jwt-middleware.js +30 -0
- package/dist/better-auth/plugin/payload/components/admin-buttons/index.d.ts +8 -0
- package/dist/better-auth/plugin/payload/components/admin-buttons/index.d.ts.map +1 -0
- package/dist/better-auth/plugin/payload/components/admin-buttons/index.js +115 -0
- package/dist/better-auth/plugin/payload/components/admin-buttons/index.scss +31 -0
- package/dist/better-auth/plugin/payload/components/admin-invite-button/index.d.ts +11 -0
- package/dist/better-auth/plugin/payload/components/admin-invite-button/index.d.ts.map +1 -0
- package/dist/better-auth/plugin/payload/components/admin-invite-button/index.js +196 -0
- package/dist/better-auth/plugin/payload/components/admin-invite-button/index.scss +131 -0
- package/dist/better-auth/plugin/payload/components/admin-social-provider-buttons/index.d.ts +14 -0
- package/dist/better-auth/plugin/payload/components/admin-social-provider-buttons/index.d.ts.map +1 -0
- package/dist/better-auth/plugin/payload/components/admin-social-provider-buttons/index.js +111 -0
- package/dist/better-auth/plugin/payload/components/admin-social-provider-buttons/index.scss +51 -0
- package/dist/better-auth/plugin/payload/components/form-header/index.d.ts +9 -0
- package/dist/better-auth/plugin/payload/components/form-header/index.d.ts.map +1 -0
- package/dist/better-auth/plugin/payload/components/form-header/index.js +23 -0
- package/dist/better-auth/plugin/payload/components/form-header/index.scss +8 -0
- package/dist/better-auth/plugin/payload/components/icons.d.ts +9 -0
- package/dist/better-auth/plugin/payload/components/icons.d.ts.map +1 -0
- package/dist/better-auth/plugin/payload/components/icons.js +437 -0
- package/dist/better-auth/plugin/payload/components/logo.d.ts +4 -1
- package/dist/better-auth/plugin/payload/components/logo.d.ts.map +1 -0
- package/dist/better-auth/plugin/payload/components/logo.js +22 -34
- package/dist/better-auth/plugin/payload/components/logout-button.d.ts +6 -0
- package/dist/better-auth/plugin/payload/components/logout-button.d.ts.map +1 -0
- package/dist/better-auth/plugin/payload/components/logout-button.js +27 -0
- package/dist/better-auth/plugin/payload/components/rsc-redirect.d.ts +7 -0
- package/dist/better-auth/plugin/payload/components/rsc-redirect.d.ts.map +1 -0
- package/dist/better-auth/plugin/payload/components/rsc-redirect.js +8 -0
- package/dist/better-auth/plugin/payload/components/styles.css +2 -2
- package/dist/better-auth/plugin/payload/components/token-field.d.ts +5 -0
- package/dist/better-auth/plugin/payload/components/token-field.d.ts.map +1 -0
- package/dist/better-auth/plugin/payload/components/token-field.js +30 -0
- package/dist/better-auth/plugin/payload/exports/client.d.ts +7 -3
- package/dist/better-auth/plugin/payload/exports/client.d.ts.map +1 -0
- package/dist/better-auth/plugin/payload/exports/client.js +7 -4
- package/dist/better-auth/plugin/payload/exports/rsc.d.ts +10 -5
- package/dist/better-auth/plugin/payload/exports/rsc.d.ts.map +1 -0
- package/dist/better-auth/plugin/payload/exports/rsc.js +10 -6
- package/dist/better-auth/plugin/payload/utils/generate-admin-invite-url.d.ts +3 -0
- package/dist/better-auth/plugin/payload/utils/generate-admin-invite-url.d.ts.map +1 -0
- package/dist/better-auth/plugin/payload/utils/generate-admin-invite-url.js +8 -0
- package/dist/better-auth/plugin/payload/utils/generate-metadata.d.ts +15 -0
- package/dist/better-auth/plugin/payload/utils/generate-metadata.d.ts.map +1 -0
- package/dist/better-auth/plugin/payload/utils/generate-metadata.js +74 -0
- package/dist/better-auth/plugin/payload/utils/get-safe-redirect.d.ts +2 -0
- package/dist/better-auth/plugin/payload/utils/get-safe-redirect.d.ts.map +1 -0
- package/dist/better-auth/plugin/payload/utils/get-safe-redirect.js +23 -0
- package/dist/better-auth/plugin/payload/views/admin-invite/client.d.ts +12 -0
- package/dist/better-auth/plugin/payload/views/admin-invite/client.d.ts.map +1 -0
- package/dist/better-auth/plugin/payload/views/admin-invite/client.js +92 -0
- package/dist/better-auth/plugin/payload/views/admin-invite/index.d.ts +11 -0
- package/dist/better-auth/plugin/payload/views/admin-invite/index.d.ts.map +1 -0
- package/dist/better-auth/plugin/payload/views/admin-invite/index.js +84 -0
- package/dist/better-auth/plugin/payload/views/admin-invite/index.scss +25 -0
- package/dist/better-auth/plugin/payload/views/create-first-admin/client.d.ts +14 -0
- package/dist/better-auth/plugin/payload/views/create-first-admin/client.d.ts.map +1 -0
- package/dist/better-auth/plugin/payload/views/create-first-admin/client.js +95 -0
- package/dist/better-auth/plugin/payload/views/create-first-admin/index.d.ts +11 -3
- package/dist/better-auth/plugin/payload/views/create-first-admin/index.d.ts.map +1 -0
- package/dist/better-auth/plugin/payload/views/create-first-admin/index.js +124 -92
- package/dist/better-auth/plugin/payload/views/create-first-admin/index.scss +29 -0
- package/dist/better-auth/plugin/payload/views/forgot-password/client.d.ts +8 -0
- package/dist/better-auth/plugin/payload/views/forgot-password/client.d.ts.map +1 -0
- package/dist/better-auth/plugin/payload/views/forgot-password/client.js +119 -0
- package/dist/better-auth/plugin/payload/views/forgot-password/index.d.ts +9 -0
- package/dist/better-auth/plugin/payload/views/forgot-password/index.d.ts.map +1 -0
- package/dist/better-auth/plugin/payload/views/forgot-password/index.js +69 -0
- package/dist/better-auth/plugin/payload/views/forgot-password/index.scss +0 -0
- package/dist/better-auth/plugin/payload/views/inactivity/index.d.ts +5 -0
- package/dist/better-auth/plugin/payload/views/inactivity/index.d.ts.map +1 -0
- package/dist/better-auth/plugin/payload/views/inactivity/index.js +12 -0
- package/dist/better-auth/plugin/payload/views/login/form/fields/login-field.d.ts +9 -0
- package/dist/better-auth/plugin/payload/views/login/form/fields/login-field.d.ts.map +1 -0
- package/dist/better-auth/plugin/payload/views/login/form/fields/login-field.js +54 -0
- package/dist/better-auth/plugin/payload/views/login/form/fields/password/index.d.ts +1 -0
- package/dist/better-auth/plugin/payload/views/login/form/fields/password/index.d.ts.map +1 -0
- package/dist/better-auth/plugin/payload/views/login/form/fields/password/index.js +121 -0
- package/dist/better-auth/plugin/payload/views/login/form/fields/password/index.scss +31 -0
- package/dist/better-auth/plugin/payload/views/login/form/fields/password/types.d.ts +56 -0
- package/dist/better-auth/plugin/payload/views/login/form/fields/password/types.d.ts.map +1 -0
- package/dist/better-auth/plugin/payload/views/login/form/fields/password/types.js +3 -0
- package/dist/better-auth/plugin/payload/views/login/form/index.d.ts +17 -0
- package/dist/better-auth/plugin/payload/views/login/form/index.d.ts.map +1 -0
- package/dist/better-auth/plugin/payload/views/login/form/index.js +137 -0
- package/dist/better-auth/plugin/payload/views/login/form/index.scss +23 -0
- package/dist/better-auth/plugin/payload/views/login/index.d.ts +11 -4
- package/dist/better-auth/plugin/payload/views/login/index.d.ts.map +1 -0
- package/dist/better-auth/plugin/payload/views/login/index.js +81 -61
- package/dist/better-auth/plugin/payload/views/login/index.scss +10 -0
- package/dist/better-auth/plugin/payload/views/logout/client.d.ts +8 -0
- package/dist/better-auth/plugin/payload/views/logout/client.d.ts.map +1 -0
- package/dist/better-auth/plugin/payload/views/logout/client.js +76 -0
- package/dist/better-auth/plugin/payload/views/logout/index.d.ts +8 -0
- package/dist/better-auth/plugin/payload/views/logout/index.d.ts.map +1 -0
- package/dist/better-auth/plugin/payload/views/logout/index.js +14 -0
- package/dist/better-auth/plugin/payload/views/logout/index.scss +0 -0
- package/dist/better-auth/plugin/payload/views/reset-password/client.d.ts +7 -0
- package/dist/better-auth/plugin/payload/views/reset-password/client.d.ts.map +1 -0
- package/dist/better-auth/plugin/payload/views/reset-password/client.js +72 -0
- package/dist/better-auth/plugin/payload/views/reset-password/index.d.ts +5 -0
- package/dist/better-auth/plugin/payload/views/reset-password/index.d.ts.map +1 -0
- package/dist/better-auth/plugin/payload/views/reset-password/index.js +81 -0
- package/dist/better-auth/plugin/payload/views/reset-password/index.scss +9 -0
- package/dist/better-auth/plugin/payload/views/reset-password/metadata.d.ts +3 -0
- package/dist/better-auth/plugin/payload/views/reset-password/metadata.d.ts.map +1 -0
- package/dist/better-auth/plugin/payload/views/reset-password/metadata.js +11 -0
- package/dist/better-auth/plugin/types.d.ts +171 -33
- package/dist/better-auth/plugin/types.d.ts.map +1 -0
- package/dist/better-auth/plugin/types.js +1 -1
- package/dist/better-auth/types.d.ts +1 -0
- package/dist/better-auth/types.d.ts.map +1 -0
- package/dist/better-auth/types.js +1 -1
- package/dist/clerk/admin-ui.d.ts +4 -0
- package/dist/clerk/admin-ui.d.ts.map +1 -0
- package/dist/clerk/admin-ui.js +5 -0
- package/dist/clerk/index.d.ts +7 -1
- package/dist/clerk/index.d.ts.map +1 -0
- package/dist/clerk/index.js +7 -2
- package/dist/clerk/plugin/auth-strategy.d.ts +11 -0
- package/dist/clerk/plugin/auth-strategy.d.ts.map +1 -0
- package/dist/clerk/plugin/auth-strategy.js +45 -0
- package/dist/clerk/plugin/collections/users/access.d.ts +14 -0
- package/dist/clerk/plugin/collections/users/access.d.ts.map +1 -0
- package/dist/clerk/plugin/collections/users/access.js +36 -0
- package/dist/clerk/plugin/collections/users/endpoints/sync-from-clerk.d.ts +14 -0
- package/dist/clerk/plugin/collections/users/endpoints/sync-from-clerk.d.ts.map +1 -0
- package/dist/clerk/plugin/collections/users/endpoints/sync-from-clerk.js +108 -0
- package/dist/clerk/plugin/collections/users/endpoints/webhook/handlers/index.d.ts +4 -0
- package/dist/clerk/plugin/collections/users/endpoints/webhook/handlers/index.d.ts.map +1 -0
- package/dist/clerk/plugin/collections/users/endpoints/webhook/handlers/index.js +5 -0
- package/dist/clerk/plugin/collections/users/endpoints/webhook/handlers/userCreated.d.ts +13 -0
- package/dist/clerk/plugin/collections/users/endpoints/webhook/handlers/userCreated.d.ts.map +1 -0
- package/dist/clerk/plugin/collections/users/endpoints/webhook/handlers/userCreated.js +33 -0
- package/dist/clerk/plugin/collections/users/endpoints/webhook/handlers/userDeleted.d.ts +11 -0
- package/dist/clerk/plugin/collections/users/endpoints/webhook/handlers/userDeleted.d.ts.map +1 -0
- package/dist/clerk/plugin/collections/users/endpoints/webhook/handlers/userDeleted.js +27 -0
- package/dist/clerk/plugin/collections/users/endpoints/webhook/handlers/userUpdated.d.ts +13 -0
- package/dist/clerk/plugin/collections/users/endpoints/webhook/handlers/userUpdated.d.ts.map +1 -0
- package/dist/clerk/plugin/collections/users/endpoints/webhook/handlers/userUpdated.js +35 -0
- package/dist/clerk/plugin/collections/users/endpoints/webhook/index.d.ts +12 -0
- package/dist/clerk/plugin/collections/users/endpoints/webhook/index.d.ts.map +1 -0
- package/dist/clerk/plugin/collections/users/endpoints/webhook/index.js +86 -0
- package/dist/clerk/plugin/collections/users/fields.d.ts +6 -0
- package/dist/clerk/plugin/collections/users/fields.d.ts.map +1 -0
- package/dist/clerk/plugin/collections/users/fields.js +81 -0
- package/dist/clerk/plugin/collections/users/index.d.ts +10 -0
- package/dist/clerk/plugin/collections/users/index.d.ts.map +1 -0
- package/dist/clerk/plugin/collections/users/index.js +95 -0
- package/dist/clerk/plugin/components/after-login-form.d.ts +4 -0
- package/dist/clerk/plugin/components/after-login-form.d.ts.map +1 -0
- package/dist/clerk/plugin/components/after-login-form.js +65 -0
- package/dist/clerk/plugin/components/logout-button.d.ts +2 -0
- package/dist/clerk/plugin/components/logout-button.d.ts.map +1 -0
- package/dist/clerk/plugin/components/logout-button.js +49 -0
- package/dist/clerk/plugin/components/sync-clerk-users-button.d.ts +6 -0
- package/dist/clerk/plugin/components/sync-clerk-users-button.d.ts.map +1 -0
- package/dist/clerk/plugin/components/sync-clerk-users-button.js +75 -0
- package/dist/clerk/plugin.d.ts +6 -0
- package/dist/clerk/plugin.d.ts.map +1 -0
- package/dist/clerk/plugin.js +63 -0
- package/dist/clerk/types.d.ts +63 -0
- package/dist/clerk/types.d.ts.map +1 -0
- package/dist/clerk/types.js +3 -0
- package/dist/clerk/utils/clerk-user.d.ts +21 -0
- package/dist/clerk/utils/clerk-user.d.ts.map +1 -0
- package/dist/clerk/utils/clerk-user.js +45 -0
- package/dist/clerk/utils/index.d.ts +4 -0
- package/dist/clerk/utils/index.d.ts.map +1 -0
- package/dist/clerk/utils/index.js +5 -0
- package/dist/clerk/utils/load-clerk-instance.d.ts +8 -0
- package/dist/clerk/utils/load-clerk-instance.d.ts.map +1 -0
- package/dist/clerk/utils/load-clerk-instance.js +11 -0
- package/dist/clerk/utils/svix.d.ts +9 -0
- package/dist/clerk/utils/svix.d.ts.map +1 -0
- package/dist/clerk/utils/svix.js +40 -0
- package/dist/clerk/utils/user.d.ts +17 -0
- package/dist/clerk/utils/user.d.ts.map +1 -0
- package/dist/clerk/utils/user.js +46 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -5
- package/dist/kinde/index.d.ts +1 -0
- package/dist/kinde/index.d.ts.map +1 -0
- package/dist/kinde/index.js +1 -1
- package/package.json +44 -18
- package/LICENSE.md +0 -17
- package/dist/authjs/index.js.map +0 -1
- package/dist/better-auth/adapter/dev/bin/run.d.ts +0 -1
- package/dist/better-auth/adapter/dev/bin/run.js +0 -64
- package/dist/better-auth/adapter/dev/bin/run.js.map +0 -1
- package/dist/better-auth/adapter/dev/bin/schema.d.ts +0 -22
- package/dist/better-auth/adapter/dev/bin/schema.js +0 -160
- package/dist/better-auth/adapter/dev/bin/schema.js.map +0 -1
- package/dist/better-auth/adapter/dev/collections.d.ts +0 -3
- package/dist/better-auth/adapter/dev/collections.js +0 -212
- package/dist/better-auth/adapter/dev/collections.js.map +0 -1
- package/dist/better-auth/adapter/dev/index.d.ts +0 -3
- package/dist/better-auth/adapter/dev/index.js +0 -168
- package/dist/better-auth/adapter/dev/index.js.map +0 -1
- package/dist/better-auth/adapter/generate-schema/generate-schema-builder.js.map +0 -1
- package/dist/better-auth/adapter/generate-schema/get-payload-schema.js.map +0 -1
- package/dist/better-auth/adapter/generate-schema/index.js.map +0 -1
- package/dist/better-auth/adapter/generate-schema/utils.js.map +0 -1
- package/dist/better-auth/adapter/index.js.map +0 -1
- package/dist/better-auth/adapter/test/adapter.test.d.ts +0 -1
- package/dist/better-auth/adapter/test/adapter.test.js +0 -181
- package/dist/better-auth/adapter/test/adapter.test.js.map +0 -1
- package/dist/better-auth/adapter/test/better-auth-adapter-test.d.ts +0 -7
- package/dist/better-auth/adapter/test/better-auth-adapter-test.js +0 -425
- package/dist/better-auth/adapter/test/better-auth-adapter-test.js.map +0 -1
- package/dist/better-auth/adapter/test/schema.test.d.ts +0 -1
- package/dist/better-auth/adapter/test/schema.test.js +0 -796
- package/dist/better-auth/adapter/test/schema.test.js.map +0 -1
- package/dist/better-auth/adapter/test/test_payload1/schema.d.ts +0 -23
- package/dist/better-auth/adapter/test/test_payload1/schema.js +0 -177
- package/dist/better-auth/adapter/test/test_payload1/schema.js.map +0 -1
- package/dist/better-auth/adapter/test/test_payload2/schema.d.ts +0 -23
- package/dist/better-auth/adapter/test/test_payload2/schema.js +0 -167
- package/dist/better-auth/adapter/test/test_payload2/schema.js.map +0 -1
- package/dist/better-auth/adapter/test/test_payload3/schema.d.ts +0 -23
- package/dist/better-auth/adapter/test/test_payload3/schema.js +0 -198
- package/dist/better-auth/adapter/test/test_payload3/schema.js.map +0 -1
- package/dist/better-auth/adapter/transform/index.js.map +0 -1
- package/dist/better-auth/adapter/types.js.map +0 -1
- package/dist/better-auth/index.js.map +0 -1
- package/dist/better-auth/plugin/collections/accounts/hooks/sync-password-to-user.js +0 -47
- package/dist/better-auth/plugin/collections/accounts/hooks/sync-password-to-user.js.map +0 -1
- package/dist/better-auth/plugin/collections/users/endpoints/refresh-token.d.ts +0 -6
- package/dist/better-auth/plugin/collections/users/endpoints/refresh-token.js +0 -106
- package/dist/better-auth/plugin/collections/users/endpoints/refresh-token.js.map +0 -1
- package/dist/better-auth/plugin/collections/users/hooks/after-login.js +0 -71
- package/dist/better-auth/plugin/collections/users/hooks/after-login.js.map +0 -1
- package/dist/better-auth/plugin/collections/users/hooks/after-logout.js +0 -49
- package/dist/better-auth/plugin/collections/users/hooks/after-logout.js.map +0 -1
- package/dist/better-auth/plugin/collections/users/hooks/before-login.js +0 -18
- package/dist/better-auth/plugin/collections/users/hooks/before-login.js.map +0 -1
- package/dist/better-auth/plugin/collections/users/hooks/clean-up-user-after-delete.d.ts +0 -5
- package/dist/better-auth/plugin/collections/users/hooks/clean-up-user-after-delete.js +0 -33
- package/dist/better-auth/plugin/collections/users/hooks/clean-up-user-after-delete.js.map +0 -1
- package/dist/better-auth/plugin/collections/users/hooks/on-verified-change.d.ts +0 -2
- package/dist/better-auth/plugin/collections/users/hooks/on-verified-change.js +0 -14
- package/dist/better-auth/plugin/collections/users/hooks/on-verified-change.js.map +0 -1
- package/dist/better-auth/plugin/collections/users/hooks/sync-account.js +0 -82
- package/dist/better-auth/plugin/collections/users/hooks/sync-account.js.map +0 -1
- package/dist/better-auth/plugin/helpers/generate-verify-email-url.js.map +0 -1
- package/dist/better-auth/plugin/helpers/get-ip.js.map +0 -1
- package/dist/better-auth/plugin/helpers/index.js.map +0 -1
- package/dist/better-auth/plugin/helpers/serialize-cookie.js.map +0 -1
- package/dist/better-auth/plugin/index.js.map +0 -1
- package/dist/better-auth/plugin/lib/auth-strategy.d.ts +0 -8
- package/dist/better-auth/plugin/lib/auth-strategy.js +0 -48
- package/dist/better-auth/plugin/lib/auth-strategy.js.map +0 -1
- package/dist/better-auth/plugin/lib/build-collection-configs.d.ts +0 -11
- package/dist/better-auth/plugin/lib/build-collection-configs.js +0 -1558
- package/dist/better-auth/plugin/lib/build-collection-configs.js.map +0 -1
- package/dist/better-auth/plugin/lib/config.js +0 -43
- package/dist/better-auth/plugin/lib/config.js.map +0 -1
- package/dist/better-auth/plugin/lib/ensure-password-set-before-create.js +0 -24
- package/dist/better-auth/plugin/lib/ensure-password-set-before-create.js.map +0 -1
- package/dist/better-auth/plugin/lib/get-payload-auth.js.map +0 -1
- package/dist/better-auth/plugin/lib/get-required-collection-slugs.js.map +0 -1
- package/dist/better-auth/plugin/lib/init-better-auth.js.map +0 -1
- package/dist/better-auth/plugin/lib/password.js +0 -63
- package/dist/better-auth/plugin/lib/password.js.map +0 -1
- package/dist/better-auth/plugin/lib/payload-access.js +0 -64
- package/dist/better-auth/plugin/lib/payload-access.js.map +0 -1
- package/dist/better-auth/plugin/lib/prepare-session-data.js +0 -42
- package/dist/better-auth/plugin/lib/prepare-session-data.js.map +0 -1
- package/dist/better-auth/plugin/lib/respect-save-to-jwt-fields-middleware.js +0 -30
- package/dist/better-auth/plugin/lib/respect-save-to-jwt-fields-middleware.js.map +0 -1
- package/dist/better-auth/plugin/lib/sanitize-auth-options.d.ts +0 -5
- package/dist/better-auth/plugin/lib/sanitize-auth-options.js +0 -298
- package/dist/better-auth/plugin/lib/sanitize-auth-options.js.map +0 -1
- package/dist/better-auth/plugin/payload/components/admin-buttons.d.ts +0 -5
- package/dist/better-auth/plugin/payload/components/admin-buttons.js +0 -222
- package/dist/better-auth/plugin/payload/components/admin-buttons.js.map +0 -1
- package/dist/better-auth/plugin/payload/components/login-redirect.d.ts +0 -1
- package/dist/better-auth/plugin/payload/components/login-redirect.js +0 -6
- package/dist/better-auth/plugin/payload/components/login-redirect.js.map +0 -1
- package/dist/better-auth/plugin/payload/components/logo.js.map +0 -1
- package/dist/better-auth/plugin/payload/components/logout.d.ts +0 -1
- package/dist/better-auth/plugin/payload/components/logout.js +0 -61
- package/dist/better-auth/plugin/payload/components/logout.js.map +0 -1
- package/dist/better-auth/plugin/payload/components/sign-in.d.ts +0 -3
- package/dist/better-auth/plugin/payload/components/sign-in.js +0 -384
- package/dist/better-auth/plugin/payload/components/sign-in.js.map +0 -1
- package/dist/better-auth/plugin/payload/components/sign-up.d.ts +0 -6
- package/dist/better-auth/plugin/payload/components/sign-up.js +0 -502
- package/dist/better-auth/plugin/payload/components/sign-up.js.map +0 -1
- package/dist/better-auth/plugin/payload/components/ui/button.d.ts +0 -10
- package/dist/better-auth/plugin/payload/components/ui/button.js +0 -42
- package/dist/better-auth/plugin/payload/components/ui/button.js.map +0 -1
- package/dist/better-auth/plugin/payload/components/ui/card.d.ts +0 -9
- package/dist/better-auth/plugin/payload/components/ui/card.js +0 -55
- package/dist/better-auth/plugin/payload/components/ui/card.js.map +0 -1
- package/dist/better-auth/plugin/payload/components/ui/checkbox.d.ts +0 -4
- package/dist/better-auth/plugin/payload/components/ui/checkbox.js +0 -23
- package/dist/better-auth/plugin/payload/components/ui/checkbox.js.map +0 -1
- package/dist/better-auth/plugin/payload/components/ui/cn.d.ts +0 -2
- package/dist/better-auth/plugin/payload/components/ui/cn.js +0 -7
- package/dist/better-auth/plugin/payload/components/ui/cn.js.map +0 -1
- package/dist/better-auth/plugin/payload/components/ui/input.d.ts +0 -3
- package/dist/better-auth/plugin/payload/components/ui/input.js +0 -14
- package/dist/better-auth/plugin/payload/components/ui/input.js.map +0 -1
- package/dist/better-auth/plugin/payload/components/ui/label.d.ts +0 -4
- package/dist/better-auth/plugin/payload/components/ui/label.js +0 -15
- package/dist/better-auth/plugin/payload/components/ui/label.js.map +0 -1
- package/dist/better-auth/plugin/payload/components/ui/password-input.d.ts +0 -2
- package/dist/better-auth/plugin/payload/components/ui/password-input.js +0 -55
- package/dist/better-auth/plugin/payload/components/ui/password-input.js.map +0 -1
- package/dist/better-auth/plugin/payload/exports/client.js.map +0 -1
- package/dist/better-auth/plugin/payload/exports/rsc.js.map +0 -1
- package/dist/better-auth/plugin/payload/views/create-first-admin/index.js.map +0 -1
- package/dist/better-auth/plugin/payload/views/login/index.js.map +0 -1
- package/dist/better-auth/plugin/types.js.map +0 -1
- package/dist/better-auth/types.js.map +0 -1
- package/dist/clerk/index.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/kinde/index.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/plugin/lib/build-collection-configs.ts"],"sourcesContent":["import type { PayloadBetterAuthPluginOptions, SanitizedBetterAuthOptions } from '..'\nimport { baseCollectionSlugs, betterAuthPluginSlugs } from './config'\nimport { betterAuthStrategy } from './auth-strategy'\nimport { getAfterLogoutHook } from '../collections/users/hooks/after-logout'\nimport { getRefreshTokenEndpoint } from '../collections/users/endpoints/refresh-token'\nimport {\n isAdminOrCurrentUserUpdateWithAllowedFields,\n isAdminOrCurrentUserWithRoles,\n isAdminWithRoles,\n} from './payload-access'\nimport { cleanUpUserAfterDelete } from '../collections/users/hooks/clean-up-user-after-delete'\nimport { getSyncPasswordToUserHook } from '../collections/accounts/hooks/sync-password-to-user'\nimport { getSyncAccountHook } from '../collections/users/hooks/sync-account'\nimport { onVerifiedChange } from '../collections/users/hooks/on-verified-change'\nimport { getAfterLoginHook } from '../collections/users/hooks/after-login'\nimport { getBeforeLoginHook } from '../collections/users/hooks/before-login'\nimport { CollectionConfig, Field } from 'payload'\n/**\n * Builds the required collections based on the BetterAuth options and plugins\n */\nexport function buildCollectionConfigs({\n incomingCollections,\n requiredCollectionSlugs,\n pluginOptions,\n sanitizedBAOptions,\n}: {\n incomingCollections: CollectionConfig[]\n requiredCollectionSlugs: Set<string>\n pluginOptions: PayloadBetterAuthPluginOptions\n sanitizedBAOptions: SanitizedBetterAuthOptions\n}): CollectionConfig[] {\n const userSlug = pluginOptions.users?.slug ?? baseCollectionSlugs.users\n const accountSlug = pluginOptions.accounts?.slug ?? baseCollectionSlugs.accounts\n const sessionSlug = pluginOptions.sessions?.slug ?? baseCollectionSlugs.sessions\n const verificationSlug = pluginOptions.verifications?.slug ?? baseCollectionSlugs.verifications\n const baPlugins = sanitizedBAOptions.plugins ?? null\n const adminRoles = pluginOptions.users?.adminRoles ?? ['admin']\n\n const getTimestampFields = ({\n saveUpdatedAtToJWT = true,\n saveCreatedAtToJWT = true,\n }: {\n saveUpdatedAtToJWT?: boolean\n saveCreatedAtToJWT?: boolean\n } = {}): Field[] => {\n return [\n {\n name: 'updatedAt',\n type: 'date',\n saveToJWT: saveUpdatedAtToJWT,\n admin: {\n disableBulkEdit: true,\n hidden: true,\n },\n index: true,\n label: ({ t }) => t('general:updatedAt'),\n },\n {\n name: 'createdAt',\n saveToJWT: saveCreatedAtToJWT,\n admin: {\n disableBulkEdit: true,\n hidden: true,\n },\n type: 'date',\n index: true,\n label: ({ t }) => t('general:createdAt'),\n },\n ]\n }\n\n const enhancedCollections: CollectionConfig[] = []\n\n requiredCollectionSlugs.forEach((slug) => {\n switch (slug as keyof typeof baseCollectionSlugs | keyof typeof betterAuthPluginSlugs) {\n case baseCollectionSlugs.users:\n const existingUserCollection = incomingCollections.find(\n (collection) => collection.slug === userSlug,\n ) as CollectionConfig | undefined\n const allowedFields = pluginOptions.users?.allowedFields ?? ['name']\n let usersCollection: CollectionConfig = {\n ...existingUserCollection,\n slug: userSlug,\n admin: {\n defaultColumns: ['email'],\n useAsTitle: 'email',\n ...existingUserCollection?.admin,\n hidden: pluginOptions.users?.hidden ?? false,\n },\n access: {\n admin: ({ req }) => adminRoles.includes((req.user?.role as string) ?? 'user'),\n read: isAdminOrCurrentUserWithRoles({ adminRoles, idField: 'id' }),\n create: isAdminWithRoles({ adminRoles }),\n delete: isAdminOrCurrentUserWithRoles({ adminRoles, idField: 'id' }),\n update: isAdminOrCurrentUserUpdateWithAllowedFields({\n allowedFields,\n adminRoles,\n userSlug,\n }),\n ...(existingUserCollection?.access ?? {}),\n },\n endpoints: [\n ...(existingUserCollection?.endpoints ? existingUserCollection.endpoints : []),\n getRefreshTokenEndpoint({ userSlug }),\n ],\n hooks: {\n beforeChange: [\n ...(existingUserCollection?.hooks?.beforeChange ?? []),\n onVerifiedChange,\n ],\n afterChange: [\n ...(existingUserCollection?.hooks?.afterChange ?? []),\n getSyncAccountHook({\n userSlug,\n accountSlug,\n }),\n ],\n beforeLogin: [\n ...(existingUserCollection?.hooks?.beforeLogin ?? []),\n getBeforeLoginHook(),\n ],\n afterLogin: [\n ...(existingUserCollection?.hooks?.afterLogin ?? []),\n getAfterLoginHook({\n sessionsCollectionSlug: sessionSlug,\n usersCollectionSlug: userSlug,\n }),\n ],\n afterLogout: [\n ...(existingUserCollection?.hooks?.afterLogout ?? []),\n getAfterLogoutHook({ sessionsCollectionSlug: sessionSlug }),\n ],\n afterDelete: [\n ...(existingUserCollection?.hooks?.afterDelete ?? []),\n (args) => cleanUpUserAfterDelete(args as any),\n ],\n },\n auth: {\n ...(existingUserCollection && typeof existingUserCollection.auth === 'object'\n ? existingUserCollection.auth\n : {}),\n //disableLocalStrategy: false,\n strategies: [betterAuthStrategy(adminRoles, userSlug)],\n },\n fields: [\n ...(existingUserCollection?.fields ?? []),\n {\n name: 'betterAuthAdminButtons',\n type: 'ui',\n admin: {\n position: 'sidebar',\n components: {\n Field: {\n path: 'payload-auth/better-auth/plugin/client#AdminButtons',\n clientProps: () => {\n return {\n userSlug,\n }\n },\n },\n },\n condition: () => {\n // Only show the impersonate button if the admin plugin is enabled\n return (baPlugins && baPlugins.some((plugin) => plugin.id === 'admin')) ?? false\n },\n },\n },\n {\n name: 'name',\n type: 'text',\n label: 'Name',\n saveToJWT: true,\n admin: {\n description: 'Users chosen display name',\n },\n },\n {\n name: 'email',\n type: 'text',\n required: true,\n unique: true,\n index: true,\n label: 'Email',\n admin: {\n description: 'The email of the user',\n },\n },\n {\n name: 'emailVerified',\n type: 'checkbox',\n required: true,\n defaultValue: false,\n saveToJWT: true,\n label: 'Email Verified',\n admin: {\n description: 'Whether the email of the user has been verified',\n },\n },\n {\n name: 'image',\n type: 'text',\n label: 'Image',\n saveToJWT: true,\n admin: {\n description: 'The image of the user',\n },\n },\n {\n name: 'role',\n type: 'select',\n required: true,\n defaultValue: 'user',\n saveToJWT: true,\n options: [\n ...(\n pluginOptions.users?.roles ?? [\n { label: 'Admin', value: 'admin' },\n { label: 'User', value: 'user' },\n ]\n ).map((role) => {\n if (typeof role === 'string') {\n return {\n label: role.charAt(0).toUpperCase() + role.slice(1),\n value: role,\n }\n }\n return role\n }),\n ],\n label: 'Role',\n admin: {\n description: 'The role of the user',\n },\n },\n ...getTimestampFields({ saveUpdatedAtToJWT: false, saveCreatedAtToJWT: false }),\n ],\n }\n if (baPlugins) {\n baPlugins.forEach((plugin) => {\n switch (plugin.id) {\n case 'two-factor':\n usersCollection.fields.push({\n name: 'twoFactorEnabled',\n type: 'checkbox',\n defaultValue: false,\n label: 'Two Factor Enabled',\n admin: {\n description: 'Whether the user has two factor authentication enabled',\n },\n })\n break\n case 'username':\n usersCollection.fields.push(\n {\n name: 'username',\n type: 'text',\n unique: true,\n required: false, // TODO: decide if this should be required, will have to tell users they need to add ui for it.\n label: 'Username',\n admin: {\n description: 'The username of the user',\n },\n },\n {\n name: 'displayUsername',\n type: 'text',\n required: true,\n label: 'Display Username',\n admin: {\n description: 'The display username of the user',\n },\n },\n )\n break\n case 'anonymous':\n usersCollection.fields.push({\n name: 'isAnonymous',\n type: 'checkbox',\n defaultValue: false,\n label: 'Is Anonymous',\n admin: {\n description: 'Whether the user is anonymous.',\n },\n })\n break\n case 'phone-number':\n usersCollection.fields.push(\n {\n name: 'phoneNumber',\n type: 'text',\n label: 'Phone Number',\n admin: {\n description: 'The phone number of the user',\n },\n },\n {\n name: 'phoneNumberVerified',\n type: 'checkbox',\n defaultValue: false,\n label: 'Phone Number Verified',\n admin: {\n description: 'Whether the phone number of the user has been verified',\n },\n },\n )\n break\n case 'admin':\n usersCollection.fields.push(\n {\n name: 'banned',\n type: 'checkbox',\n defaultValue: false,\n label: 'Banned',\n admin: {\n description: 'Whether the user is banned from the platform',\n },\n },\n {\n name: 'banReason',\n type: 'text',\n label: 'Ban Reason',\n admin: {\n description: 'The reason for the ban',\n },\n },\n {\n name: 'banExpires',\n type: 'date',\n label: 'Ban Expires',\n admin: {\n description: 'The date and time when the ban will expire',\n },\n },\n )\n break\n case 'harmony-email':\n usersCollection.fields.push({\n name: 'normalizedEmail',\n type: 'text',\n required: false,\n unique: true,\n admin: {\n readOnly: true,\n description: 'The normalized email of the user',\n },\n })\n break\n default:\n break\n }\n })\n }\n\n if (pluginOptions.users?.collectionOverrides) {\n usersCollection = pluginOptions.users.collectionOverrides({ collection: usersCollection })\n }\n\n enhancedCollections.push(usersCollection)\n break\n case baseCollectionSlugs.accounts:\n const existingAccountCollection = incomingCollections.find(\n (collection) => collection.slug === accountSlug,\n ) as CollectionConfig | undefined\n let accountCollection: CollectionConfig = {\n slug: accountSlug,\n admin: {\n useAsTitle: 'accountId',\n description: 'Accounts are used to store user accounts for authentication providers',\n ...existingAccountCollection?.admin,\n hidden: pluginOptions.accounts?.hidden,\n },\n hooks: {\n afterChange: [\n ...(existingAccountCollection?.hooks?.afterChange ?? []),\n getSyncPasswordToUserHook({\n userSlug,\n accountSlug,\n }),\n ],\n },\n access: {\n create: isAdminWithRoles({ adminRoles }),\n delete: isAdminWithRoles({ adminRoles }),\n read: isAdminOrCurrentUserWithRoles({ adminRoles, idField: 'user' }),\n update: isAdminWithRoles({ adminRoles }),\n ...(existingAccountCollection?.access ?? {}),\n },\n fields: [\n ...(existingAccountCollection?.fields ?? []),\n {\n name: 'user',\n type: 'relationship',\n relationTo: userSlug,\n required: true,\n index: true,\n label: 'User',\n admin: {\n readOnly: true,\n description: 'The user that the account belongs to',\n },\n },\n {\n name: 'accountId',\n type: 'text',\n label: 'Account ID',\n required: true,\n index: true,\n admin: {\n readOnly: true,\n description:\n 'The id of the account as provided by the SSO or equal to userId for credential accounts',\n },\n },\n {\n name: 'providerId',\n type: 'text',\n required: true,\n label: 'Provider ID',\n admin: {\n readOnly: true,\n description: 'The id of the provider as provided by the SSO',\n },\n },\n {\n name: 'accessToken',\n type: 'text',\n label: 'Access Token',\n admin: {\n readOnly: true,\n description: 'The access token of the account. Returned by the provider',\n },\n },\n {\n name: 'refreshToken',\n type: 'text',\n label: 'Refresh Token',\n admin: {\n readOnly: true,\n description: 'The refresh token of the account. Returned by the provider',\n },\n },\n {\n name: 'accessTokenExpiresAt',\n type: 'date',\n label: 'Access Token Expires At',\n admin: {\n readOnly: true,\n description: 'The date and time when the access token will expire',\n },\n },\n {\n name: 'refreshTokenExpiresAt',\n type: 'date',\n label: 'Refresh Token Expires At',\n admin: {\n readOnly: true,\n description: 'The date and time when the refresh token will expire',\n },\n },\n {\n name: 'scope',\n type: 'text',\n label: 'Scope',\n admin: {\n readOnly: true,\n description: 'The scope of the account. Returned by the provider',\n },\n },\n {\n name: 'idToken',\n type: 'text',\n label: 'ID Token',\n admin: {\n readOnly: true,\n description: 'The id token for the account. Returned by the provider',\n },\n },\n {\n name: 'password',\n type: 'text',\n label: 'Password',\n admin: {\n readOnly: true,\n hidden: true,\n description:\n 'The hashed password of the account. Mainly used for email and password authentication',\n },\n },\n ...getTimestampFields(),\n ],\n ...existingAccountCollection,\n }\n if (pluginOptions.accounts?.collectionOverrides) {\n accountCollection = pluginOptions.accounts.collectionOverrides({\n collection: accountCollection,\n })\n }\n\n enhancedCollections.push(accountCollection)\n break\n case baseCollectionSlugs.sessions:\n const existingSessionCollection = incomingCollections.find(\n (collection) => collection.slug === sessionSlug,\n ) as CollectionConfig | undefined\n let sessionCollection: CollectionConfig = {\n slug: sessionSlug,\n admin: {\n ...existingSessionCollection?.admin,\n hidden: pluginOptions.sessions?.hidden,\n description:\n 'Sessions are active sessions for users. They are used to authenticate users with a session token',\n },\n fields: [\n ...(existingSessionCollection?.fields ?? []),\n {\n name: 'user',\n type: 'relationship',\n relationTo: userSlug,\n required: true,\n saveToJWT: true,\n index: true,\n admin: {\n readOnly: true,\n description: 'The user that the session belongs to',\n },\n },\n {\n name: 'token',\n type: 'text',\n required: true,\n unique: true,\n index: true,\n saveToJWT: true,\n label: 'Token',\n admin: {\n description: 'The unique session token',\n readOnly: true,\n },\n },\n {\n name: 'expiresAt',\n type: 'date',\n required: true,\n label: 'Expires At',\n saveToJWT: true,\n admin: {\n description: 'The date and time when the session will expire',\n readOnly: true,\n },\n },\n {\n name: 'ipAddress',\n type: 'text',\n label: 'IP Address',\n saveToJWT: true,\n admin: {\n description: 'The IP address of the device',\n readOnly: true,\n },\n },\n {\n name: 'userAgent',\n type: 'text',\n label: 'User Agent',\n saveToJWT: true,\n admin: {\n description: 'The user agent information of the device',\n readOnly: true,\n },\n },\n ...getTimestampFields(),\n ],\n ...existingSessionCollection,\n }\n if (baPlugins) {\n baPlugins.forEach((plugin) => {\n switch (plugin.id) {\n case 'admin':\n sessionCollection.fields.push({\n name: 'impersonatedBy',\n type: 'relationship',\n relationTo: userSlug,\n required: false,\n label: 'Impersonated By',\n admin: {\n readOnly: true,\n description: 'The admin who is impersonating this session',\n },\n })\n break\n case 'organization':\n sessionCollection.fields.push({\n name: 'activeOrganization',\n type: 'relationship',\n relationTo: betterAuthPluginSlugs.organizations,\n label: 'Active Organization',\n admin: {\n readOnly: true,\n description: 'The currently active organization for the session',\n },\n })\n break\n default:\n break\n }\n })\n }\n\n if (pluginOptions.sessions?.collectionOverrides) {\n sessionCollection = pluginOptions.sessions.collectionOverrides({\n collection: sessionCollection,\n })\n }\n\n enhancedCollections.push(sessionCollection)\n break\n case baseCollectionSlugs.verifications:\n const existingVerificationCollection = incomingCollections.find(\n (collection) => collection.slug === verificationSlug,\n )\n const verificationCollection: CollectionConfig = {\n slug: verificationSlug,\n admin: {\n ...existingVerificationCollection?.admin,\n hidden: pluginOptions.verifications?.hidden,\n useAsTitle: 'identifier',\n description: 'Verifications are used to verify authentication requests',\n },\n fields: [\n ...(existingVerificationCollection?.fields ?? []),\n {\n name: 'identifier',\n type: 'text',\n required: true,\n index: true,\n label: 'Identifier',\n admin: {\n description: 'The identifier of the verification request',\n readOnly: true,\n },\n },\n {\n name: 'value',\n type: 'text',\n required: true,\n label: 'Value',\n admin: {\n description: 'The value to be verified',\n readOnly: true,\n },\n },\n {\n name: 'expiresAt',\n type: 'date',\n required: true,\n label: 'Expires At',\n admin: {\n description: 'The date and time when the verification request will expire',\n readOnly: true,\n },\n },\n ],\n timestamps: true,\n ...existingVerificationCollection,\n }\n enhancedCollections.push(verificationCollection)\n break\n case betterAuthPluginSlugs.organizations:\n const organizationCollection: CollectionConfig = {\n slug: betterAuthPluginSlugs.organizations,\n admin: {\n hidden: pluginOptions.hidePluginCollections ?? false,\n useAsTitle: 'name',\n description:\n 'Organizations are groups of users that share access to certain resources.',\n },\n fields: [\n {\n name: 'name',\n type: 'text',\n required: true,\n label: 'Name',\n admin: {\n description: 'The name of the organization.',\n },\n },\n {\n name: 'slug',\n type: 'text',\n unique: true,\n index: true,\n label: 'Slug',\n admin: {\n description: 'The slug of the organization.',\n },\n },\n {\n name: 'logo',\n type: 'text',\n label: 'Logo',\n admin: {\n description: 'The logo of the organization.',\n },\n },\n {\n name: 'metadata',\n type: 'json',\n label: 'Metadata',\n admin: {\n description: 'Additional metadata for the organization.',\n },\n },\n ],\n timestamps: true,\n }\n enhancedCollections.push(organizationCollection)\n break\n case betterAuthPluginSlugs.members:\n const memberCollection: CollectionConfig = {\n slug: betterAuthPluginSlugs.members,\n admin: {\n hidden: pluginOptions.hidePluginCollections ?? false,\n useAsTitle: 'organization',\n description: 'Members of an organization.',\n },\n fields: [\n {\n name: 'organization',\n type: 'relationship',\n relationTo: betterAuthPluginSlugs.organizations,\n required: true,\n index: true,\n label: 'Organization',\n admin: {\n readOnly: true,\n description: 'The organization that the member belongs to.',\n },\n },\n {\n name: 'user',\n type: 'relationship',\n relationTo: userSlug,\n required: true,\n index: true,\n label: 'User',\n admin: {\n readOnly: true,\n description: 'The user that is a member of the organization.',\n },\n },\n {\n name: 'team',\n type: 'relationship',\n relationTo: betterAuthPluginSlugs.teams,\n required: false,\n label: 'Team',\n admin: {\n description: 'The team that the member belongs to.',\n },\n },\n {\n name: 'role',\n type: 'text',\n required: true,\n defaultValue: 'member',\n label: 'Role',\n admin: {\n description: 'The role of the member in the organization.',\n },\n },\n ],\n timestamps: true,\n }\n enhancedCollections.push(memberCollection)\n break\n case betterAuthPluginSlugs.invitations:\n const invitationCollection: CollectionConfig = {\n slug: betterAuthPluginSlugs.invitations,\n admin: {\n hidden: pluginOptions.hidePluginCollections ?? false,\n useAsTitle: 'email',\n description: 'Invitations to join an organization',\n },\n fields: [\n {\n name: 'email',\n type: 'text',\n required: true,\n index: true,\n label: 'Email',\n admin: {\n description: 'The email of the user being invited.',\n readOnly: true,\n },\n },\n {\n name: 'inviter',\n type: 'relationship',\n relationTo: userSlug,\n required: true,\n label: 'Inviter',\n admin: {\n description: 'The user who invited the user.',\n readOnly: true,\n },\n },\n {\n name: 'organization',\n type: 'relationship',\n relationTo: betterAuthPluginSlugs.organizations,\n required: true,\n index: true,\n label: 'Organization',\n admin: {\n description: 'The organization that the user is being invited to.',\n readOnly: true,\n },\n },\n {\n name: 'role',\n type: 'text',\n required: true,\n label: 'Role',\n admin: {\n description: 'The role of the user being invited.',\n readOnly: true,\n },\n },\n {\n name: 'status',\n type: 'text',\n required: true,\n defaultValue: 'pending',\n label: 'Status',\n admin: {\n description: 'The status of the invitation.',\n readOnly: true,\n },\n },\n {\n name: 'expiresAt',\n type: 'date',\n required: true,\n label: 'Expires At',\n admin: {\n description: 'The date and time when the invitation will expire.',\n readOnly: true,\n },\n },\n ],\n timestamps: true,\n }\n enhancedCollections.push(invitationCollection)\n break\n case betterAuthPluginSlugs.teams:\n const teamCollection: CollectionConfig = {\n slug: betterAuthPluginSlugs.teams,\n admin: {\n hidden: pluginOptions.hidePluginCollections ?? false,\n useAsTitle: 'name',\n description: 'Teams are groups of users that share access to certain resources.',\n },\n fields: [\n {\n name: 'name',\n type: 'text',\n required: true,\n label: 'Name',\n admin: {\n description: 'The name of the team.',\n },\n },\n {\n name: 'organization',\n type: 'relationship',\n relationTo: betterAuthPluginSlugs.organizations,\n required: true,\n label: 'Organization',\n admin: {\n readOnly: true,\n description: 'The organization that the team belongs to.',\n },\n },\n ],\n timestamps: true,\n }\n enhancedCollections.push(teamCollection)\n break\n case betterAuthPluginSlugs.jwks:\n const jwksCollection: CollectionConfig = {\n slug: betterAuthPluginSlugs.jwks,\n admin: {\n hidden: pluginOptions.hidePluginCollections ?? false,\n useAsTitle: 'publicKey',\n description: 'JWKS are used to verify the signature of the JWT token',\n },\n fields: [\n {\n name: 'publicKey',\n type: 'text',\n required: true,\n index: true,\n label: 'Public Key',\n admin: {\n description: 'The public part of the web key',\n },\n },\n {\n name: 'privateKey',\n type: 'text',\n required: true,\n label: 'Private Key',\n admin: {\n description: 'The private part of the web key',\n },\n },\n ],\n timestamps: true,\n }\n enhancedCollections.push(jwksCollection)\n break\n case betterAuthPluginSlugs.apiKeys:\n const apiKeyCollection: CollectionConfig = {\n slug: betterAuthPluginSlugs.apiKeys,\n admin: {\n hidden: pluginOptions.hidePluginCollections ?? false,\n useAsTitle: 'name',\n description: 'API keys are used to authenticate requests to the API.',\n },\n fields: [\n {\n name: 'name',\n type: 'text',\n label: 'Name',\n admin: {\n readOnly: true,\n description: 'The name of the API key.',\n },\n },\n {\n name: 'start',\n type: 'text',\n label: 'Starting Characters',\n admin: {\n readOnly: true,\n description:\n 'The starting characters of the API key. Useful for showing the first few characters of the API key in the UI for the users to easily identify.',\n },\n },\n {\n name: 'prefix',\n type: 'text',\n label: 'Prefix',\n admin: {\n readOnly: true,\n description: 'The API Key prefix. Stored as plain text.',\n },\n },\n {\n name: 'key',\n type: 'text',\n required: true,\n label: 'API Key',\n admin: {\n readOnly: true,\n description: 'The hashed API key itself.',\n },\n },\n {\n name: 'user',\n type: 'relationship',\n relationTo: userSlug,\n required: true,\n label: 'User',\n admin: {\n readOnly: true,\n description: 'The user associated with the API key.',\n },\n },\n {\n name: 'refillInterval',\n type: 'number',\n label: 'Refill Interval',\n admin: {\n readOnly: true,\n description: 'The interval to refill the key in milliseconds.',\n },\n },\n {\n name: 'refillAmount',\n type: 'number',\n label: 'Refill Amount',\n admin: {\n readOnly: true,\n description: 'The amount to refill the remaining count of the key.',\n },\n },\n {\n name: 'lastRefillAt',\n type: 'date',\n label: 'Last Refill At',\n admin: {\n readOnly: true,\n description: 'The date and time when the key was last refilled.',\n },\n },\n {\n name: 'enabled',\n type: 'checkbox',\n defaultValue: true,\n label: 'Enabled',\n admin: {\n readOnly: true,\n description: 'Whether the API key is enabled.',\n },\n },\n {\n name: 'rateLimitEnabled',\n type: 'checkbox',\n defaultValue: true,\n label: 'Rate Limit Enabled',\n admin: {\n readOnly: true,\n description: 'Whether the API key has rate limiting enabled.',\n },\n },\n {\n name: 'rateLimitTimeWindow',\n type: 'number',\n label: 'Rate Limit Time Window',\n admin: {\n readOnly: true,\n description: 'The time window in milliseconds for the rate limit.',\n },\n },\n {\n name: 'rateLimitMax',\n type: 'number',\n label: 'The maximum number of requests allowed within the `rateLimitTimeWindow`.',\n admin: {\n readOnly: true,\n description:\n 'The maximum number of requests allowed within the rate limit time window.',\n },\n },\n {\n name: 'requstCount',\n type: 'number',\n label: 'Request Count',\n required: true,\n admin: {\n readOnly: true,\n description: 'The number of requests made within the rate limit time window.',\n },\n },\n {\n name: 'remaining',\n type: 'number',\n label: 'Remaining Requests',\n admin: {\n readOnly: true,\n description: 'The number of requests remaining.',\n },\n },\n {\n name: 'lastRequest',\n type: 'date',\n label: 'Last Request At',\n admin: {\n readOnly: true,\n description: 'The date and time of the last request made to the key.',\n },\n },\n {\n name: 'expiresAt',\n type: 'date',\n label: 'Expires At',\n admin: {\n readOnly: true,\n description: 'The date and time of when the API key will expire.',\n },\n },\n {\n name: 'permissions',\n type: 'text',\n label: 'Permissions',\n admin: {\n readOnly: true,\n description: 'The permissions for the API key.',\n },\n },\n {\n name: 'metadata',\n type: 'json',\n label: 'Metadata',\n admin: {\n readOnly: true,\n description: 'Any additional metadata you want to store with the key.',\n },\n },\n ],\n timestamps: true,\n }\n enhancedCollections.push(apiKeyCollection)\n break\n case betterAuthPluginSlugs.twoFactors:\n const twoFactorCollection: CollectionConfig = {\n slug: betterAuthPluginSlugs.twoFactors,\n admin: {\n hidden: pluginOptions.hidePluginCollections ?? false,\n useAsTitle: 'secret',\n description: 'Two factor authentication secrets',\n },\n fields: [\n {\n name: 'user',\n type: 'relationship',\n relationTo: userSlug,\n required: true,\n label: 'User',\n admin: {\n readOnly: true,\n description: 'The user that the two factor authentication secret belongs to',\n },\n },\n {\n name: 'secret',\n type: 'text',\n label: 'Secret',\n index: true,\n admin: {\n readOnly: true,\n description: 'The secret used to generate the TOTP code.',\n },\n },\n {\n name: 'backupCodes',\n type: 'text',\n required: true,\n label: 'Backup Codes',\n admin: {\n readOnly: true,\n description:\n 'The backup codes used to recover access to the account if the user loses access to their phone or email',\n },\n },\n ],\n timestamps: true,\n }\n enhancedCollections.push(twoFactorCollection)\n break\n case betterAuthPluginSlugs.oauthAccessTokens:\n const oauthAccessTokenCollection: CollectionConfig = {\n slug: betterAuthPluginSlugs.oauthAccessTokens,\n admin: {\n hidden: pluginOptions.hidePluginCollections ?? false,\n useAsTitle: 'accessToken',\n description: 'OAuth access tokens for custom OAuth clients',\n },\n fields: [\n {\n name: 'accessToken',\n type: 'text',\n required: true,\n index: true,\n label: 'Access Token',\n admin: {\n readOnly: true,\n description: 'Access token issued to the client',\n },\n },\n {\n name: 'refreshToken',\n type: 'text',\n required: true,\n label: 'Refresh Token',\n admin: {\n readOnly: true,\n description: 'Refresh token issued to the client',\n },\n },\n {\n name: 'accessTokenExpiresAt',\n type: 'date',\n required: true,\n label: 'Access Token Expires At',\n admin: {\n readOnly: true,\n description: 'Expiration date of the access token',\n },\n },\n {\n name: 'refreshTokenExpiresAt',\n type: 'date',\n required: true,\n label: 'Refresh Token Expires At',\n admin: {\n readOnly: true,\n description: 'Expiration date of the refresh token',\n },\n },\n {\n name: 'client',\n type: 'relationship',\n relationTo: betterAuthPluginSlugs.oauthApplications,\n required: true,\n label: 'Client',\n admin: {\n readOnly: true,\n description: 'OAuth application associated with the access token',\n },\n },\n {\n name: 'user',\n type: 'relationship',\n relationTo: userSlug,\n required: true,\n label: 'User',\n admin: {\n readOnly: true,\n description: 'User associated with the access token',\n },\n },\n {\n name: 'scopes',\n type: 'text',\n required: true,\n label: 'Scopes',\n admin: {\n description: 'Comma-separated list of scopes granted',\n },\n },\n ],\n timestamps: true,\n }\n enhancedCollections.push(oauthAccessTokenCollection)\n break\n case betterAuthPluginSlugs.oauthApplications:\n const oauthApplicationCollection: CollectionConfig = {\n slug: betterAuthPluginSlugs.oauthApplications,\n admin: {\n hidden: pluginOptions.hidePluginCollections ?? false,\n useAsTitle: 'name',\n description: 'OAuth applications are custom OAuth clients',\n },\n fields: [\n {\n name: 'clientId',\n type: 'text',\n unique: true,\n index: true,\n required: true,\n label: 'Client ID',\n admin: {\n readOnly: true,\n description: 'Unique identifier for each OAuth client',\n },\n },\n {\n name: 'clientSecret',\n type: 'text',\n required: true,\n label: 'Client Secret',\n admin: {\n readOnly: true,\n description: 'Secret key for the OAuth client',\n },\n },\n {\n name: 'name',\n type: 'text',\n required: true,\n index: true,\n label: 'Name',\n admin: {\n description: 'Name of the OAuth application',\n },\n },\n {\n name: 'redirectURLs',\n type: 'text',\n required: true,\n label: 'Redirect URLs',\n admin: {\n description: 'Comma-separated list of redirect URLs',\n },\n },\n {\n name: 'metadata',\n type: 'json',\n admin: {\n readOnly: true,\n description: 'Additional metadata for the OAuth application',\n },\n },\n {\n name: 'type',\n type: 'text',\n required: true,\n label: 'Type',\n admin: {\n readOnly: true,\n description: 'Type of OAuth client (e.g., web, mobile)',\n },\n },\n {\n name: 'disabled',\n type: 'checkbox',\n defaultValue: false,\n required: true,\n label: 'Disabled',\n admin: {\n description: 'Indicates if the client is disabled',\n },\n },\n {\n name: 'icon',\n type: 'text',\n label: 'Icon',\n admin: {\n description: 'Icon of the OAuth application',\n },\n },\n {\n name: 'user',\n type: 'relationship',\n relationTo: userSlug,\n required: false,\n label: 'User',\n admin: {\n readOnly: true,\n description: 'ID of the user who owns the client. (optional)',\n },\n },\n ],\n timestamps: true,\n }\n enhancedCollections.push(oauthApplicationCollection)\n break\n case betterAuthPluginSlugs.oauthConsents:\n const oauthConsentCollection: CollectionConfig = {\n slug: betterAuthPluginSlugs.oauthConsents,\n admin: {\n hidden: pluginOptions.hidePluginCollections ?? false,\n description: 'OAuth consents are used to store user consents for OAuth clients',\n },\n fields: [\n {\n name: 'client',\n type: 'relationship',\n relationTo: betterAuthPluginSlugs.oauthApplications,\n required: true,\n label: 'Client',\n admin: {\n readOnly: true,\n description: 'OAuth client associated with the consent',\n },\n },\n {\n name: 'user',\n type: 'relationship',\n relationTo: userSlug,\n required: true,\n label: 'User',\n admin: {\n readOnly: true,\n description: 'User associated with the consent',\n },\n },\n {\n name: 'scopes',\n type: 'text',\n required: true,\n label: 'Scopes',\n admin: {\n readOnly: true,\n description: 'Comma-separated list of scopes consented to',\n },\n },\n {\n name: 'consentGiven',\n type: 'checkbox',\n defaultValue: false,\n required: true,\n label: 'Consent Given',\n admin: {\n readOnly: true,\n description: '\tIndicates if consent was given',\n },\n },\n ],\n timestamps: true,\n }\n enhancedCollections.push(oauthConsentCollection)\n break\n case betterAuthPluginSlugs.passkeys:\n const passkeyCollection: CollectionConfig = {\n slug: betterAuthPluginSlugs.passkeys,\n admin: {\n hidden: pluginOptions.hidePluginCollections ?? false,\n useAsTitle: 'name',\n description: 'Passkeys are used to authenticate users',\n },\n fields: [\n {\n name: 'name',\n type: 'text',\n label: 'Name',\n admin: {\n readOnly: true,\n description: 'The name of the passkey',\n },\n },\n {\n name: 'publicKey',\n type: 'text',\n required: true,\n index: true,\n label: 'Public Key',\n admin: {\n readOnly: true,\n description: 'The public key of the passkey',\n },\n },\n {\n name: 'user',\n type: 'relationship',\n relationTo: userSlug,\n required: true,\n index: true,\n label: 'User',\n admin: {\n readOnly: true,\n description: 'The user that the passkey belongs to',\n },\n },\n {\n name: 'credentialID',\n type: 'text',\n required: true,\n unique: true,\n label: 'Credential ID',\n admin: {\n readOnly: true,\n description: 'The unique identifier of the registered credential',\n },\n },\n {\n name: 'counter',\n type: 'number',\n required: true,\n label: 'Counter',\n admin: {\n readOnly: true,\n description: 'The counter of the passkey',\n },\n },\n {\n name: 'deviceType',\n type: 'text',\n required: true,\n label: 'Device Type',\n admin: {\n readOnly: true,\n description: 'The type of device used to register the passkey',\n },\n },\n {\n name: 'backedUp',\n type: 'checkbox',\n required: true,\n label: 'Backed Up',\n admin: {\n readOnly: true,\n description: 'Whether the passkey is backed up',\n },\n },\n {\n name: 'transports',\n type: 'text',\n required: true,\n label: 'Transports',\n admin: {\n readOnly: true,\n description: 'The transports used to register the passkey',\n },\n },\n ],\n timestamps: true,\n }\n enhancedCollections.push(passkeyCollection)\n break\n case betterAuthPluginSlugs.ssoProviders:\n const ssoProviderCollection: CollectionConfig = {\n slug: betterAuthPluginSlugs.ssoProviders,\n admin: {\n hidden: pluginOptions.hidePluginCollections ?? false,\n useAsTitle: 'issuer',\n description: 'SSO providers are used to authenticate users with an external provider',\n },\n fields: [\n {\n name: 'issuer',\n type: 'text',\n required: true,\n index: true,\n label: 'Issuer',\n admin: {\n description: 'The issuer of the SSO provider',\n },\n },\n {\n name: 'domain',\n type: 'text',\n required: true,\n label: 'Domain',\n admin: {\n description: 'The domain of the SSO provider',\n },\n },\n {\n name: 'oidcConfig',\n type: 'text',\n required: true,\n label: 'OIDC Config',\n admin: {\n description: 'The OIDC config of the SSO provider',\n },\n },\n {\n name: 'user',\n type: 'relationship',\n relationTo: userSlug,\n required: true,\n label: 'User',\n admin: {\n description: 'The user associated with the SSO provider',\n },\n },\n {\n name: 'providerId',\n type: 'text',\n required: true,\n label: 'Provider ID',\n admin: {\n readOnly: true,\n description:\n 'The provider id. Used to identify a provider and to generate a redirect url',\n },\n },\n {\n name: 'organizationId',\n type: 'text',\n required: true,\n label: 'Organization ID',\n admin: {\n readOnly: true,\n description: 'The organization Id. If provider is linked to an organization',\n },\n },\n ],\n timestamps: true,\n }\n enhancedCollections.push(ssoProviderCollection)\n break\n default:\n break\n }\n })\n\n const restOfCollections = incomingCollections.filter((collection) => {\n return !enhancedCollections.some(\n (enhancedCollection) => enhancedCollection.slug === collection.slug,\n )\n })\n\n return [...enhancedCollections, ...restOfCollections]\n}\n"],"names":["baseCollectionSlugs","betterAuthPluginSlugs","betterAuthStrategy","getAfterLogoutHook","getRefreshTokenEndpoint","isAdminOrCurrentUserUpdateWithAllowedFields","isAdminOrCurrentUserWithRoles","isAdminWithRoles","cleanUpUserAfterDelete","getSyncPasswordToUserHook","getSyncAccountHook","onVerifiedChange","getAfterLoginHook","getBeforeLoginHook","buildCollectionConfigs","incomingCollections","requiredCollectionSlugs","pluginOptions","sanitizedBAOptions","userSlug","users","slug","accountSlug","accounts","sessionSlug","sessions","verificationSlug","verifications","baPlugins","plugins","adminRoles","getTimestampFields","saveUpdatedAtToJWT","saveCreatedAtToJWT","name","type","saveToJWT","admin","disableBulkEdit","hidden","index","label","t","enhancedCollections","forEach","existingUserCollection","find","collection","allowedFields","usersCollection","defaultColumns","useAsTitle","access","req","includes","user","role","read","idField","create","delete","update","endpoints","hooks","beforeChange","afterChange","beforeLogin","afterLogin","sessionsCollectionSlug","usersCollectionSlug","afterLogout","afterDelete","args","auth","strategies","fields","position","components","Field","path","clientProps","condition","some","plugin","id","description","required","unique","defaultValue","options","roles","value","map","charAt","toUpperCase","slice","push","readOnly","collectionOverrides","existingAccountCollection","accountCollection","relationTo","existingSessionCollection","sessionCollection","organizations","existingVerificationCollection","verificationCollection","timestamps","organizationCollection","hidePluginCollections","members","memberCollection","teams","invitations","invitationCollection","teamCollection","jwks","jwksCollection","apiKeys","apiKeyCollection","twoFactors","twoFactorCollection","oauthAccessTokens","oauthAccessTokenCollection","oauthApplications","oauthApplicationCollection","oauthConsents","oauthConsentCollection","passkeys","passkeyCollection","ssoProviders","ssoProviderCollection","restOfCollections","filter","enhancedCollection"],"mappings":"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"}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
export const supportedBetterAuthPluginIds = {
|
|
2
|
-
harmonyEmail: 'harmony-email',
|
|
3
|
-
harmonyPhoneNumber: 'harmony-phone-number',
|
|
4
|
-
twoFactor: 'two-factor',
|
|
5
|
-
username: 'username',
|
|
6
|
-
anonymous: 'anonymous',
|
|
7
|
-
phoneNumber: 'phone-number',
|
|
8
|
-
magicLink: 'magic-link',
|
|
9
|
-
emailOtp: 'email-otp',
|
|
10
|
-
passkey: 'passkey',
|
|
11
|
-
oneTap: 'one-tap',
|
|
12
|
-
admin: 'admin',
|
|
13
|
-
apiKey: 'api-key',
|
|
14
|
-
organization: 'organization',
|
|
15
|
-
multiSession: 'multi-session',
|
|
16
|
-
openApi: 'open-api',
|
|
17
|
-
jwt: 'jwt',
|
|
18
|
-
nextCookies: 'next-cookies',
|
|
19
|
-
sso: 'sso',
|
|
20
|
-
oidc: 'oidc'
|
|
21
|
-
};
|
|
22
|
-
export const baseCollectionSlugs = {
|
|
23
|
-
users: 'users',
|
|
24
|
-
sessions: 'sessions',
|
|
25
|
-
accounts: 'accounts',
|
|
26
|
-
verifications: 'verifications'
|
|
27
|
-
};
|
|
28
|
-
export const betterAuthPluginSlugs = {
|
|
29
|
-
apiKeys: 'apiKeys',
|
|
30
|
-
jwks: 'jwks',
|
|
31
|
-
twoFactors: 'twoFactors',
|
|
32
|
-
passkeys: 'passkeys',
|
|
33
|
-
oauthApplications: 'oauthApplications',
|
|
34
|
-
oauthAccessTokens: 'oauthAccessTokens',
|
|
35
|
-
oauthConsents: 'oauthConsents',
|
|
36
|
-
ssoProviders: 'ssoProviders',
|
|
37
|
-
organizations: 'organizations',
|
|
38
|
-
invitations: 'invitations',
|
|
39
|
-
members: 'members',
|
|
40
|
-
teams: 'teams'
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
//# sourceMappingURL=config.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/plugin/lib/config.ts"],"sourcesContent":["export const supportedBetterAuthPluginIds = {\n harmonyEmail: 'harmony-email',\n harmonyPhoneNumber: 'harmony-phone-number',\n twoFactor: 'two-factor',\n username: 'username',\n anonymous: 'anonymous',\n phoneNumber: 'phone-number',\n magicLink: 'magic-link',\n emailOtp: 'email-otp',\n passkey: 'passkey',\n oneTap: 'one-tap',\n admin: 'admin',\n apiKey: 'api-key',\n organization: 'organization',\n multiSession: 'multi-session',\n openApi: 'open-api',\n jwt: 'jwt',\n nextCookies: 'next-cookies',\n sso: 'sso',\n oidc: 'oidc',\n} as const\n\nexport const baseCollectionSlugs = {\n users: 'users',\n sessions: 'sessions',\n accounts: 'accounts',\n verifications: 'verifications',\n} as const\n\nexport const betterAuthPluginSlugs = {\n apiKeys: 'apiKeys',\n jwks: 'jwks',\n twoFactors: 'twoFactors',\n passkeys: 'passkeys',\n oauthApplications: 'oauthApplications',\n oauthAccessTokens: 'oauthAccessTokens',\n oauthConsents: 'oauthConsents',\n ssoProviders: 'ssoProviders',\n organizations: 'organizations',\n invitations: 'invitations',\n members: 'members',\n teams: 'teams',\n} as const\n"],"names":["supportedBetterAuthPluginIds","harmonyEmail","harmonyPhoneNumber","twoFactor","username","anonymous","phoneNumber","magicLink","emailOtp","passkey","oneTap","admin","apiKey","organization","multiSession","openApi","jwt","nextCookies","sso","oidc","baseCollectionSlugs","users","sessions","accounts","verifications","betterAuthPluginSlugs","apiKeys","jwks","twoFactors","passkeys","oauthApplications","oauthAccessTokens","oauthConsents","ssoProviders","organizations","invitations","members","teams"],"mappings":"AAAA,OAAO,MAAMA,+BAA+B;IAC1CC,cAAc;IACdC,oBAAoB;IACpBC,WAAW;IACXC,UAAU;IACVC,WAAW;IACXC,aAAa;IACbC,WAAW;IACXC,UAAU;IACVC,SAAS;IACTC,QAAQ;IACRC,OAAO;IACPC,QAAQ;IACRC,cAAc;IACdC,cAAc;IACdC,SAAS;IACTC,KAAK;IACLC,aAAa;IACbC,KAAK;IACLC,MAAM;AACR,EAAU;AAEV,OAAO,MAAMC,sBAAsB;IACjCC,OAAO;IACPC,UAAU;IACVC,UAAU;IACVC,eAAe;AACjB,EAAU;AAEV,OAAO,MAAMC,wBAAwB;IACnCC,SAAS;IACTC,MAAM;IACNC,YAAY;IACZC,UAAU;IACVC,mBAAmB;IACnBC,mBAAmB;IACnBC,eAAe;IACfC,cAAc;IACdC,eAAe;IACfC,aAAa;IACbC,SAAS;IACTC,OAAO;AACT,EAAU"}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Adds a before hook to the user create operation to ensure the password is set.
|
|
3
|
-
* This is necessary because the password is not set in the user create operation
|
|
4
|
-
* and is instead set in the sync password accounts hook.
|
|
5
|
-
*/ export function ensurePasswordSetBeforeUserCreate(options) {
|
|
6
|
-
if (typeof options.databaseHooks !== 'object') options.databaseHooks = {};
|
|
7
|
-
if (typeof options.databaseHooks.user !== 'object') options.databaseHooks.user = {};
|
|
8
|
-
if (typeof options.databaseHooks.user.create !== 'object') options.databaseHooks.user.create = {};
|
|
9
|
-
const initialBeforeUserCreateHook = options.databaseHooks.user.create.before ?? null;
|
|
10
|
-
options.databaseHooks.user.create.before = async (user, ctx)=>{
|
|
11
|
-
if (!user.password) {
|
|
12
|
-
;
|
|
13
|
-
user.password = ctx?.body?.password ?? Array(3).fill(0).map(()=>Math.random().toString(36).slice(2)).join('');
|
|
14
|
-
}
|
|
15
|
-
if (typeof initialBeforeUserCreateHook === 'function') {
|
|
16
|
-
return initialBeforeUserCreateHook(user, ctx);
|
|
17
|
-
}
|
|
18
|
-
return {
|
|
19
|
-
data: user
|
|
20
|
-
};
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
//# sourceMappingURL=ensure-password-set-before-create.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/plugin/lib/ensure-password-set-before-create.ts"],"sourcesContent":["import type { SanitizedBetterAuthOptions } from '..'\n\n/**\n * Adds a before hook to the user create operation to ensure the password is set.\n * This is necessary because the password is not set in the user create operation\n * and is instead set in the sync password accounts hook.\n */\nexport function ensurePasswordSetBeforeUserCreate(options: SanitizedBetterAuthOptions) {\n if (typeof options.databaseHooks !== 'object') options.databaseHooks = {}\n if (typeof options.databaseHooks.user !== 'object') options.databaseHooks.user = {}\n if (typeof options.databaseHooks.user.create !== 'object') options.databaseHooks.user.create = {}\n const initialBeforeUserCreateHook = options.databaseHooks.user.create.before ?? null\n\n options.databaseHooks.user.create.before = async (user, ctx) => {\n if (!(user as any).password) {\n ;(user as any).password =\n ctx?.body?.password ??\n Array(3)\n .fill(0)\n .map(() => Math.random().toString(36).slice(2))\n .join('')\n }\n if (typeof initialBeforeUserCreateHook === 'function') {\n return initialBeforeUserCreateHook(user, ctx)\n }\n return { data: user }\n }\n}\n"],"names":["ensurePasswordSetBeforeUserCreate","options","databaseHooks","user","create","initialBeforeUserCreateHook","before","ctx","password","body","Array","fill","map","Math","random","toString","slice","join","data"],"mappings":"AAEA;;;;CAIC,GACD,OAAO,SAASA,kCAAkCC,OAAmC;IACnF,IAAI,OAAOA,QAAQC,aAAa,KAAK,UAAUD,QAAQC,aAAa,GAAG,CAAC;IACxE,IAAI,OAAOD,QAAQC,aAAa,CAACC,IAAI,KAAK,UAAUF,QAAQC,aAAa,CAACC,IAAI,GAAG,CAAC;IAClF,IAAI,OAAOF,QAAQC,aAAa,CAACC,IAAI,CAACC,MAAM,KAAK,UAAUH,QAAQC,aAAa,CAACC,IAAI,CAACC,MAAM,GAAG,CAAC;IAChG,MAAMC,8BAA8BJ,QAAQC,aAAa,CAACC,IAAI,CAACC,MAAM,CAACE,MAAM,IAAI;IAEhFL,QAAQC,aAAa,CAACC,IAAI,CAACC,MAAM,CAACE,MAAM,GAAG,OAAOH,MAAMI;QACtD,IAAI,CAAC,AAACJ,KAAaK,QAAQ,EAAE;;YACzBL,KAAaK,QAAQ,GACrBD,KAAKE,MAAMD,YACXE,MAAM,GACHC,IAAI,CAAC,GACLC,GAAG,CAAC,IAAMC,KAAKC,MAAM,GAAGC,QAAQ,CAAC,IAAIC,KAAK,CAAC,IAC3CC,IAAI,CAAC;QACZ;QACA,IAAI,OAAOZ,gCAAgC,YAAY;YACrD,OAAOA,4BAA4BF,MAAMI;QAC3C;QACA,OAAO;YAAEW,MAAMf;QAAK;IACtB;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/plugin/lib/get-payload-auth.ts"],"sourcesContent":["import type { BasePayload, SanitizedConfig } from 'payload'\nimport { BetterAuthReturn, TPlugins } from '../types'\nimport { getPayload } from 'payload'\nexport async function getPayloadAuth<P extends TPlugins>(\n config: Promise<SanitizedConfig> | SanitizedConfig,\n): Promise<BasePayload & { betterAuth: BetterAuthReturn<P> }> {\n const payload = (await getPayload({ config })) as BasePayload & {\n betterAuth: BetterAuthReturn<P>\n }\n return payload\n}\n"],"names":["getPayload","getPayloadAuth","config","payload"],"mappings":"AAEA,SAASA,UAAU,QAAQ,UAAS;AACpC,OAAO,eAAeC,eACpBC,MAAkD;IAElD,MAAMC,UAAW,MAAMH,WAAW;QAAEE;IAAO;IAG3C,OAAOC;AACT"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/plugin/lib/get-required-collection-slugs.ts"],"sourcesContent":["import { getAuthTables } from 'better-auth/db'\nimport type { PayloadBetterAuthPluginOptions, SanitizedBetterAuthOptions } from '..'\n\n/**\n * Determines which collections are required based on the BetterAuth options and plugins\n */\nexport function getRequiredCollectionSlugs({\n logTables,\n pluginOptions,\n sanitizedBAOptions,\n}: {\n logTables: boolean\n pluginOptions: PayloadBetterAuthPluginOptions\n sanitizedBAOptions: SanitizedBetterAuthOptions\n}) {\n // Always include the base required collections (User, Account, Session, Verification)\n const userCollectionSlug = pluginOptions.users?.slug ?? 'users'\n const accountCollectionSlug = pluginOptions.accounts?.slug ?? 'accounts'\n const sessionCollectionSlug = pluginOptions.sessions?.slug ?? 'sessions'\n const verificationCollectionSlug = pluginOptions.verifications?.slug ?? 'verifications'\n\n const requiredCollectionSlugs = new Set([\n userCollectionSlug,\n accountCollectionSlug,\n sessionCollectionSlug,\n verificationCollectionSlug,\n ])\n\n // If we have better auth options, use getAuthTables to determine additional tables needed\n if (sanitizedBAOptions) {\n try {\n // Get the tables required by the auth configuration\n const tables = getAuthTables({\n ...sanitizedBAOptions,\n })\n\n const plugins = sanitizedBAOptions.plugins ?? []\n if (logTables) {\n console.log(\n 'Better Auth plugins:',\n plugins.map((plugin) => plugin.id),\n )\n console.log(\n 'Better Auth tables required:',\n Object.keys(tables).map((key) => tables[key].modelName),\n )\n }\n\n // Add all table slugs to the required collections set\n Object.values(tables).forEach((table) => {\n if (table.modelName) {\n requiredCollectionSlugs.add(table.modelName)\n }\n })\n } catch (error) {\n console.error('Error determining required auth tables:', error)\n console.warn('Falling back to base collections only')\n\n // Log the plugins that were attempted to be used\n if (sanitizedBAOptions.plugins?.length ?? 0 > 0) {\n console.warn(\n 'Plugins that may have caused the error:',\n sanitizedBAOptions.plugins?.map((plugin) => {\n // Type-safe way to get plugin identification\n return typeof plugin === 'object' && plugin !== null && 'name' in plugin\n ? plugin.name\n : 'unnamed plugin'\n }),\n )\n }\n }\n }\n\n // if (enable_debug_logs) {\n // console.log('Required collection slugs: ', Array.from(requiredCollectionSlugs))\n // }\n\n return requiredCollectionSlugs\n}\n"],"names":["getAuthTables","getRequiredCollectionSlugs","logTables","pluginOptions","sanitizedBAOptions","userCollectionSlug","users","slug","accountCollectionSlug","accounts","sessionCollectionSlug","sessions","verificationCollectionSlug","verifications","requiredCollectionSlugs","Set","tables","plugins","console","log","map","plugin","id","Object","keys","key","modelName","values","forEach","table","add","error","warn","length","name"],"mappings":"AAAA,SAASA,aAAa,QAAQ,iBAAgB;AAG9C;;CAEC,GACD,OAAO,SAASC,2BAA2B,EACzCC,SAAS,EACTC,aAAa,EACbC,kBAAkB,EAKnB;IACC,sFAAsF;IACtF,MAAMC,qBAAqBF,cAAcG,KAAK,EAAEC,QAAQ;IACxD,MAAMC,wBAAwBL,cAAcM,QAAQ,EAAEF,QAAQ;IAC9D,MAAMG,wBAAwBP,cAAcQ,QAAQ,EAAEJ,QAAQ;IAC9D,MAAMK,6BAA6BT,cAAcU,aAAa,EAAEN,QAAQ;IAExE,MAAMO,0BAA0B,IAAIC,IAAI;QACtCV;QACAG;QACAE;QACAE;KACD;IAED,0FAA0F;IAC1F,IAAIR,oBAAoB;QACtB,IAAI;YACF,oDAAoD;YACpD,MAAMY,SAAShB,cAAc;gBAC3B,GAAGI,kBAAkB;YACvB;YAEA,MAAMa,UAAUb,mBAAmBa,OAAO,IAAI,EAAE;YAChD,IAAIf,WAAW;gBACbgB,QAAQC,GAAG,CACT,wBACAF,QAAQG,GAAG,CAAC,CAACC,SAAWA,OAAOC,EAAE;gBAEnCJ,QAAQC,GAAG,CACT,gCACAI,OAAOC,IAAI,CAACR,QAAQI,GAAG,CAAC,CAACK,MAAQT,MAAM,CAACS,IAAI,CAACC,SAAS;YAE1D;YAEA,sDAAsD;YACtDH,OAAOI,MAAM,CAACX,QAAQY,OAAO,CAAC,CAACC;gBAC7B,IAAIA,MAAMH,SAAS,EAAE;oBACnBZ,wBAAwBgB,GAAG,CAACD,MAAMH,SAAS;gBAC7C;YACF;QACF,EAAE,OAAOK,OAAO;YACdb,QAAQa,KAAK,CAAC,2CAA2CA;YACzDb,QAAQc,IAAI,CAAC;YAEb,iDAAiD;YACjD,IAAI5B,mBAAmBa,OAAO,EAAEgB,UAAU,IAAI,GAAG;gBAC/Cf,QAAQc,IAAI,CACV,2CACA5B,mBAAmBa,OAAO,EAAEG,IAAI,CAACC;oBAC/B,6CAA6C;oBAC7C,OAAO,OAAOA,WAAW,YAAYA,WAAW,QAAQ,UAAUA,SAC9DA,OAAOa,IAAI,GACX;gBACN;YAEJ;QACF;IACF;IAEA,2BAA2B;IAC3B,oFAAoF;IACpF,IAAI;IAEJ,OAAOpB;AACT"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/plugin/lib/init-better-auth.ts"],"sourcesContent":["import { betterAuth } from \"better-auth\"\nimport { BetterAuthFunctionOptions, BetterAuthReturn, TPlugins } from \"../types\"\nimport { BasePayload } from \"payload\"\nimport { payloadAdapter } from \"payload-auth/better-auth/adapter\"\n\nexport function initBetterAuth<P extends TPlugins>({\n payload,\n options,\n}: {\n payload: BasePayload\n options: BetterAuthFunctionOptions<P>\n}): BetterAuthReturn<P> {\n const auth = betterAuth({\n ...options,\n database: payloadAdapter(payload, {\n enableDebugLogs: options.enableDebugLogs ?? false,\n }),\n })\n\n return auth as unknown as BetterAuthReturn<P>\n}\n"],"names":["betterAuth","payloadAdapter","initBetterAuth","payload","options","auth","database","enableDebugLogs"],"mappings":"AAAA,SAASA,UAAU,QAAQ,cAAa;AAGxC,SAASC,cAAc,QAAQ,mCAAkC;AAEjE,OAAO,SAASC,eAAmC,EACjDC,OAAO,EACPC,OAAO,EAIR;IACC,MAAMC,OAAOL,WAAW;QACtB,GAAGI,OAAO;QACVE,UAAUL,eAAeE,SAAS;YAChCI,iBAAiBH,QAAQG,eAAe,IAAI;QAC9C;IACF;IAEA,OAAOF;AACT"}
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import crypto from 'crypto';
|
|
2
|
-
/**
|
|
3
|
-
* Mimics Payload's internal password hashing using pbkdf2
|
|
4
|
-
*
|
|
5
|
-
* This generates a hash compatible with Payload's internal auth system
|
|
6
|
-
* so that passwords set via better-auth can be used with Payload admin panel
|
|
7
|
-
*/ function pbkdf2Promisified(password, salt) {
|
|
8
|
-
return new Promise((resolve, reject)=>crypto.pbkdf2(password, salt, 25000, 512, 'sha256', (err, hashRaw)=>err ? reject(err) : resolve(hashRaw)));
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* Generates random bytes for the salt
|
|
12
|
-
*/ function randomBytes() {
|
|
13
|
-
return new Promise((resolve, reject)=>crypto.randomBytes(32, (err, saltBuffer)=>err ? reject(err) : resolve(saltBuffer)));
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Custom implementation of password hashing that matches Payload's format
|
|
17
|
-
*
|
|
18
|
-
* Instead of using better-auth's scrypt, this uses pbkdf2 with the same
|
|
19
|
-
* parameters as Payload CMS
|
|
20
|
-
*
|
|
21
|
-
* @param password The password to hash
|
|
22
|
-
* @returns A string in the format {salt}:{hash}
|
|
23
|
-
*/ export const hashPassword = async (password)=>{
|
|
24
|
-
const saltBuffer = await randomBytes();
|
|
25
|
-
const salt = saltBuffer.toString('hex');
|
|
26
|
-
const hashRaw = await pbkdf2Promisified(password, salt);
|
|
27
|
-
const hash = hashRaw.toString('hex');
|
|
28
|
-
return `${salt}:${hash}`;
|
|
29
|
-
};
|
|
30
|
-
/**
|
|
31
|
-
* Verifies a password against a stored hash
|
|
32
|
-
*
|
|
33
|
-
* This function is flexible and can handle:
|
|
34
|
-
* 1. A combined string in format {salt}:{hash} (for account passwords)
|
|
35
|
-
* 2. When salt and hash need to be combined from user records
|
|
36
|
-
*
|
|
37
|
-
* @param params Object containing the hash and password
|
|
38
|
-
* @returns Boolean indicating if the password matches
|
|
39
|
-
*/ export const verifyPassword = async ({ hash, password, salt })=>{
|
|
40
|
-
let saltValue;
|
|
41
|
-
let storedHash;
|
|
42
|
-
// If salt is provided separately (from user record), use it with the hash
|
|
43
|
-
if (salt) {
|
|
44
|
-
saltValue = salt;
|
|
45
|
-
storedHash = hash;
|
|
46
|
-
} else {
|
|
47
|
-
// Otherwise, split the combined format (from account.password)
|
|
48
|
-
const parts = hash.split(':');
|
|
49
|
-
if (parts.length !== 2) {
|
|
50
|
-
return false;
|
|
51
|
-
}
|
|
52
|
-
;
|
|
53
|
-
[saltValue, storedHash] = parts;
|
|
54
|
-
}
|
|
55
|
-
if (!saltValue || !storedHash) {
|
|
56
|
-
return false;
|
|
57
|
-
}
|
|
58
|
-
const hashRaw = await pbkdf2Promisified(password, saltValue);
|
|
59
|
-
const computedHash = hashRaw.toString('hex');
|
|
60
|
-
return storedHash === computedHash;
|
|
61
|
-
};
|
|
62
|
-
|
|
63
|
-
//# sourceMappingURL=password.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/plugin/lib/password.ts"],"sourcesContent":["import crypto from 'crypto'\n\n/**\n * Mimics Payload's internal password hashing using pbkdf2\n *\n * This generates a hash compatible with Payload's internal auth system\n * so that passwords set via better-auth can be used with Payload admin panel\n */\nfunction pbkdf2Promisified(password: string, salt: string): Promise<Buffer> {\n return new Promise((resolve, reject) =>\n crypto.pbkdf2(password, salt, 25000, 512, 'sha256', (err, hashRaw) =>\n err ? reject(err) : resolve(hashRaw),\n ),\n )\n}\n\n/**\n * Generates random bytes for the salt\n */\nfunction randomBytes(): Promise<Buffer> {\n return new Promise((resolve, reject) =>\n crypto.randomBytes(32, (err, saltBuffer) => (err ? reject(err) : resolve(saltBuffer))),\n )\n}\n\n/**\n * Custom implementation of password hashing that matches Payload's format\n *\n * Instead of using better-auth's scrypt, this uses pbkdf2 with the same\n * parameters as Payload CMS\n *\n * @param password The password to hash\n * @returns A string in the format {salt}:{hash}\n */\nexport const hashPassword = async (password: string): Promise<string> => {\n const saltBuffer = await randomBytes()\n const salt = saltBuffer.toString('hex')\n\n const hashRaw = await pbkdf2Promisified(password, salt)\n const hash = hashRaw.toString('hex')\n\n return `${salt}:${hash}`\n}\n\n/**\n * Verifies a password against a stored hash\n *\n * This function is flexible and can handle:\n * 1. A combined string in format {salt}:{hash} (for account passwords)\n * 2. When salt and hash need to be combined from user records\n *\n * @param params Object containing the hash and password\n * @returns Boolean indicating if the password matches\n */\nexport const verifyPassword = async ({\n hash,\n password,\n salt,\n}: {\n hash: string\n password: string\n salt?: string\n}): Promise<boolean> => {\n let saltValue: string\n let storedHash: string\n\n // If salt is provided separately (from user record), use it with the hash\n if (salt) {\n saltValue = salt\n storedHash = hash\n } else {\n // Otherwise, split the combined format (from account.password)\n const parts = hash.split(':')\n if (parts.length !== 2) {\n return false\n }\n ;[saltValue, storedHash] = parts\n }\n\n if (!saltValue || !storedHash) {\n return false\n }\n\n const hashRaw = await pbkdf2Promisified(password, saltValue)\n const computedHash = hashRaw.toString('hex')\n\n return storedHash === computedHash\n}\n"],"names":["crypto","pbkdf2Promisified","password","salt","Promise","resolve","reject","pbkdf2","err","hashRaw","randomBytes","saltBuffer","hashPassword","toString","hash","verifyPassword","saltValue","storedHash","parts","split","length","computedHash"],"mappings":"AAAA,OAAOA,YAAY,SAAQ;AAE3B;;;;;CAKC,GACD,SAASC,kBAAkBC,QAAgB,EAAEC,IAAY;IACvD,OAAO,IAAIC,QAAQ,CAACC,SAASC,SAC3BN,OAAOO,MAAM,CAACL,UAAUC,MAAM,OAAO,KAAK,UAAU,CAACK,KAAKC,UACxDD,MAAMF,OAAOE,OAAOH,QAAQI;AAGlC;AAEA;;CAEC,GACD,SAASC;IACP,OAAO,IAAIN,QAAQ,CAACC,SAASC,SAC3BN,OAAOU,WAAW,CAAC,IAAI,CAACF,KAAKG,aAAgBH,MAAMF,OAAOE,OAAOH,QAAQM;AAE7E;AAEA;;;;;;;;CAQC,GACD,OAAO,MAAMC,eAAe,OAAOV;IACjC,MAAMS,aAAa,MAAMD;IACzB,MAAMP,OAAOQ,WAAWE,QAAQ,CAAC;IAEjC,MAAMJ,UAAU,MAAMR,kBAAkBC,UAAUC;IAClD,MAAMW,OAAOL,QAAQI,QAAQ,CAAC;IAE9B,OAAO,GAAGV,KAAK,CAAC,EAAEW,MAAM;AAC1B,EAAC;AAED;;;;;;;;;CASC,GACD,OAAO,MAAMC,iBAAiB,OAAO,EACnCD,IAAI,EACJZ,QAAQ,EACRC,IAAI,EAKL;IACC,IAAIa;IACJ,IAAIC;IAEJ,0EAA0E;IAC1E,IAAId,MAAM;QACRa,YAAYb;QACZc,aAAaH;IACf,OAAO;QACL,+DAA+D;QAC/D,MAAMI,QAAQJ,KAAKK,KAAK,CAAC;QACzB,IAAID,MAAME,MAAM,KAAK,GAAG;YACtB,OAAO;QACT;;QACC,CAACJ,WAAWC,WAAW,GAAGC;IAC7B;IAEA,IAAI,CAACF,aAAa,CAACC,YAAY;QAC7B,OAAO;IACT;IAEA,MAAMR,UAAU,MAAMR,kBAAkBC,UAAUc;IAClD,MAAMK,eAAeZ,QAAQI,QAAQ,CAAC;IAEtC,OAAOI,eAAeI;AACxB,EAAC"}
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
export const isAdminWithRoles = (config = {})=>({ req })=>{
|
|
2
|
-
const { adminRoles = [
|
|
3
|
-
'admin'
|
|
4
|
-
] } = config;
|
|
5
|
-
if (!req?.user || !req.user.role || !adminRoles.includes(req.user.role)) return false;
|
|
6
|
-
return true;
|
|
7
|
-
};
|
|
8
|
-
export const isAdminOrCurrentUserWithRoles = (config = {})=>({ req })=>{
|
|
9
|
-
const { adminRoles = [
|
|
10
|
-
'admin'
|
|
11
|
-
], idField = 'id' } = config;
|
|
12
|
-
if (isAdminWithRoles({
|
|
13
|
-
adminRoles
|
|
14
|
-
})({
|
|
15
|
-
req
|
|
16
|
-
})) return true;
|
|
17
|
-
if (!req?.user) return false;
|
|
18
|
-
return {
|
|
19
|
-
[idField]: {
|
|
20
|
-
equals: req?.user?.id
|
|
21
|
-
}
|
|
22
|
-
};
|
|
23
|
-
};
|
|
24
|
-
export const isAdminOrCurrentUserUpdateWithAllowedFields = (config)=>{
|
|
25
|
-
return async ({ req, id, data })=>{
|
|
26
|
-
const { adminRoles = [
|
|
27
|
-
'admin'
|
|
28
|
-
], allowedFields = [], userSlug, idField = 'id' } = config;
|
|
29
|
-
const user = req.user;
|
|
30
|
-
if (isAdminWithRoles({
|
|
31
|
-
adminRoles
|
|
32
|
-
})({
|
|
33
|
-
req
|
|
34
|
-
})) return true;
|
|
35
|
-
if (!user) return false;
|
|
36
|
-
if (user[idField] === id && data) {
|
|
37
|
-
const dataKeys = Object.keys(data);
|
|
38
|
-
const hasCurrentPassword = dataKeys.includes('currentPassword');
|
|
39
|
-
const hasPassword = dataKeys.includes('password');
|
|
40
|
-
if (hasPassword || hasCurrentPassword) {
|
|
41
|
-
if (!(hasCurrentPassword && hasPassword)) return false;
|
|
42
|
-
try {
|
|
43
|
-
if (!user.email) return false;
|
|
44
|
-
const result = await req.payload.login({
|
|
45
|
-
collection: userSlug,
|
|
46
|
-
data: {
|
|
47
|
-
email: user.email,
|
|
48
|
-
password: data.currentPassword
|
|
49
|
-
}
|
|
50
|
-
});
|
|
51
|
-
if (!result) return false;
|
|
52
|
-
allowedFields.push('password', 'currentPassword');
|
|
53
|
-
} catch (error) {
|
|
54
|
-
return false;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
const hasDisallowedField = dataKeys.some((key)=>!allowedFields.includes(key));
|
|
58
|
-
return !hasDisallowedField;
|
|
59
|
-
}
|
|
60
|
-
return false;
|
|
61
|
-
};
|
|
62
|
-
};
|
|
63
|
-
|
|
64
|
-
//# sourceMappingURL=payload-access.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/plugin/lib/payload-access.ts"],"sourcesContent":["import type { Access, FieldAccess } from 'payload'\n\nexport type AdminRolesConfig = {\n adminRoles?: string[]\n}\n\nexport type AdminOrCurrentUserConfig = AdminRolesConfig & {\n idField?: string\n}\n\nexport type AdminOrCurrentUserUpdateConfig = AdminOrCurrentUserConfig & {\n allowedFields?: string[]\n userSlug: string\n}\n\nexport const isAdminWithRoles =\n (config: AdminRolesConfig = {}): FieldAccess =>\n ({ req }) => {\n const { adminRoles = ['admin'] } = config\n if (!req?.user || !req.user.role || !adminRoles.includes(req.user.role)) return false\n return true\n }\n\nexport const isAdminOrCurrentUserWithRoles =\n (config: AdminOrCurrentUserConfig = {}): Access =>\n ({ req }) => {\n const { adminRoles = ['admin'], idField = 'id' } = config\n if (isAdminWithRoles({ adminRoles })({ req })) return true\n if (!req?.user) return false\n return {\n [idField]: {\n equals: req?.user?.id,\n },\n }\n }\n\nexport const isAdminOrCurrentUserUpdateWithAllowedFields = (\n config: AdminOrCurrentUserUpdateConfig,\n): Access => {\n return async ({ req, id, data }) => {\n const { adminRoles = ['admin'], allowedFields = [], userSlug, idField = 'id' } = config\n const user = req.user\n\n if (isAdminWithRoles({ adminRoles })({ req })) return true\n\n if (!user) return false\n\n if (user[idField] === id && data) {\n const dataKeys = Object.keys(data)\n\n const hasCurrentPassword = dataKeys.includes('currentPassword')\n const hasPassword = dataKeys.includes('password')\n\n if (hasPassword || hasCurrentPassword) {\n if (!(hasCurrentPassword && hasPassword)) return false\n try {\n if (!user.email) return false\n\n const result = await req.payload.login({\n collection: userSlug,\n data: {\n email: user.email,\n password: data.currentPassword,\n },\n })\n\n if (!result) return false\n\n allowedFields.push('password', 'currentPassword')\n } catch (error) {\n return false\n }\n }\n\n const hasDisallowedField = dataKeys.some((key) => !allowedFields.includes(key))\n\n return !hasDisallowedField\n }\n\n return false\n }\n}\n"],"names":["isAdminWithRoles","config","req","adminRoles","user","role","includes","isAdminOrCurrentUserWithRoles","idField","equals","id","isAdminOrCurrentUserUpdateWithAllowedFields","data","allowedFields","userSlug","dataKeys","Object","keys","hasCurrentPassword","hasPassword","email","result","payload","login","collection","password","currentPassword","push","error","hasDisallowedField","some","key"],"mappings":"AAeA,OAAO,MAAMA,mBACX,CAACC,SAA2B,CAAC,CAAC,GAC9B,CAAC,EAAEC,GAAG,EAAE;QACN,MAAM,EAAEC,aAAa;YAAC;SAAQ,EAAE,GAAGF;QACnC,IAAI,CAACC,KAAKE,QAAQ,CAACF,IAAIE,IAAI,CAACC,IAAI,IAAI,CAACF,WAAWG,QAAQ,CAACJ,IAAIE,IAAI,CAACC,IAAI,GAAG,OAAO;QAChF,OAAO;IACT,EAAC;AAEH,OAAO,MAAME,gCACX,CAACN,SAAmC,CAAC,CAAC,GACtC,CAAC,EAAEC,GAAG,EAAE;QACN,MAAM,EAAEC,aAAa;YAAC;SAAQ,EAAEK,UAAU,IAAI,EAAE,GAAGP;QACnD,IAAID,iBAAiB;YAAEG;QAAW,GAAG;YAAED;QAAI,IAAI,OAAO;QACtD,IAAI,CAACA,KAAKE,MAAM,OAAO;QACvB,OAAO;YACL,CAACI,QAAQ,EAAE;gBACTC,QAAQP,KAAKE,MAAMM;YACrB;QACF;IACF,EAAC;AAEH,OAAO,MAAMC,8CAA8C,CACzDV;IAEA,OAAO,OAAO,EAAEC,GAAG,EAAEQ,EAAE,EAAEE,IAAI,EAAE;QAC7B,MAAM,EAAET,aAAa;YAAC;SAAQ,EAAEU,gBAAgB,EAAE,EAAEC,QAAQ,EAAEN,UAAU,IAAI,EAAE,GAAGP;QACjF,MAAMG,OAAOF,IAAIE,IAAI;QAErB,IAAIJ,iBAAiB;YAAEG;QAAW,GAAG;YAAED;QAAI,IAAI,OAAO;QAEtD,IAAI,CAACE,MAAM,OAAO;QAElB,IAAIA,IAAI,CAACI,QAAQ,KAAKE,MAAME,MAAM;YAChC,MAAMG,WAAWC,OAAOC,IAAI,CAACL;YAE7B,MAAMM,qBAAqBH,SAAST,QAAQ,CAAC;YAC7C,MAAMa,cAAcJ,SAAST,QAAQ,CAAC;YAEtC,IAAIa,eAAeD,oBAAoB;gBACrC,IAAI,CAAEA,CAAAA,sBAAsBC,WAAU,GAAI,OAAO;gBACjD,IAAI;oBACF,IAAI,CAACf,KAAKgB,KAAK,EAAE,OAAO;oBAExB,MAAMC,SAAS,MAAMnB,IAAIoB,OAAO,CAACC,KAAK,CAAC;wBACrCC,YAAYV;wBACZF,MAAM;4BACJQ,OAAOhB,KAAKgB,KAAK;4BACjBK,UAAUb,KAAKc,eAAe;wBAChC;oBACF;oBAEA,IAAI,CAACL,QAAQ,OAAO;oBAEpBR,cAAcc,IAAI,CAAC,YAAY;gBACjC,EAAE,OAAOC,OAAO;oBACd,OAAO;gBACT;YACF;YAEA,MAAMC,qBAAqBd,SAASe,IAAI,CAAC,CAACC,MAAQ,CAAClB,cAAcP,QAAQ,CAACyB;YAE1E,OAAO,CAACF;QACV;QAEA,OAAO;IACT;AACF,EAAC"}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { getFieldsToSign } from 'payload';
|
|
2
|
-
/**
|
|
3
|
-
* Prepares session data for cookie cache by filtering user and session objects
|
|
4
|
-
* based on the payload configuration's 'saveToJwt' property
|
|
5
|
-
*/ export async function prepareSessionData({ newSession, payloadConfig, collectionSlugs }) {
|
|
6
|
-
if (!newSession || !newSession.user) {
|
|
7
|
-
return null;
|
|
8
|
-
}
|
|
9
|
-
const { userCollectionSlug, sessionCollectionSlug } = collectionSlugs;
|
|
10
|
-
const userCollection = payloadConfig?.collections?.find((c)=>c.slug === userCollectionSlug);
|
|
11
|
-
const sessionCollection = payloadConfig?.collections?.find((c)=>c.slug === sessionCollectionSlug);
|
|
12
|
-
if (!userCollection) {
|
|
13
|
-
throw new Error(`User collection with slug '${userCollectionSlug}' not found`);
|
|
14
|
-
}
|
|
15
|
-
const filteredUser = getFieldsToSign({
|
|
16
|
-
collectionConfig: userCollection,
|
|
17
|
-
email: newSession.user.email,
|
|
18
|
-
user: newSession.user
|
|
19
|
-
});
|
|
20
|
-
let filteredSession = newSession.session;
|
|
21
|
-
const isImpersonated = newSession.session.impersonatedBy;
|
|
22
|
-
if (sessionCollection && newSession.session) {
|
|
23
|
-
filteredSession = getFieldsToSign({
|
|
24
|
-
collectionConfig: sessionCollection,
|
|
25
|
-
email: newSession.user.email,
|
|
26
|
-
user: newSession.session
|
|
27
|
-
});
|
|
28
|
-
// getFieldsToSign is meant for auth collections so we remove the email and collection fields
|
|
29
|
-
delete filteredSession.email;
|
|
30
|
-
delete filteredSession.collection;
|
|
31
|
-
}
|
|
32
|
-
if (isImpersonated) {
|
|
33
|
-
filteredSession.impersonatedBy = newSession.session.impersonatedBy;
|
|
34
|
-
}
|
|
35
|
-
return {
|
|
36
|
-
...newSession,
|
|
37
|
-
user: filteredUser,
|
|
38
|
-
session: filteredSession
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
//# sourceMappingURL=prepare-session-data.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/plugin/lib/prepare-session-data.ts"],"sourcesContent":["import { getFieldsToSign } from 'payload'\nimport type { Config, Payload } from 'payload'\n\ntype CollectionSlugs = {\n userCollectionSlug: string\n sessionCollectionSlug: string\n}\n\n/**\n * Prepares session data for cookie cache by filtering user and session objects\n * based on the payload configuration's 'saveToJwt' property\n */\nexport async function prepareSessionData({\n newSession,\n payloadConfig,\n collectionSlugs,\n}: {\n newSession: {\n user: any\n session: any\n }\n payloadConfig: Payload['config'] | Config\n collectionSlugs: CollectionSlugs\n}) {\n if (!newSession || !newSession.user) {\n return null\n }\n\n const { userCollectionSlug, sessionCollectionSlug } = collectionSlugs\n\n const userCollection = payloadConfig?.collections?.find((c) => c.slug === userCollectionSlug)\n const sessionCollection = payloadConfig?.collections?.find(\n (c) => c.slug === sessionCollectionSlug,\n )\n\n if (!userCollection) {\n throw new Error(`User collection with slug '${userCollectionSlug}' not found`)\n }\n\n const filteredUser = getFieldsToSign({\n collectionConfig: userCollection,\n email: newSession.user.email,\n user: newSession.user,\n })\n\n let filteredSession = newSession.session\n const isImpersonated = newSession.session.impersonatedBy\n if (sessionCollection && newSession.session) {\n filteredSession = getFieldsToSign({\n collectionConfig: sessionCollection,\n email: newSession.user.email,\n user: newSession.session,\n }) as typeof newSession.session\n\n // getFieldsToSign is meant for auth collections so we remove the email and collection fields\n delete filteredSession.email\n delete filteredSession.collection\n }\n\n if (isImpersonated) {\n filteredSession.impersonatedBy = newSession.session.impersonatedBy\n }\n\n return {\n ...newSession,\n user: filteredUser,\n session: filteredSession,\n }\n}\n"],"names":["getFieldsToSign","prepareSessionData","newSession","payloadConfig","collectionSlugs","user","userCollectionSlug","sessionCollectionSlug","userCollection","collections","find","c","slug","sessionCollection","Error","filteredUser","collectionConfig","email","filteredSession","session","isImpersonated","impersonatedBy","collection"],"mappings":"AAAA,SAASA,eAAe,QAAQ,UAAS;AAQzC;;;CAGC,GACD,OAAO,eAAeC,mBAAmB,EACvCC,UAAU,EACVC,aAAa,EACbC,eAAe,EAQhB;IACC,IAAI,CAACF,cAAc,CAACA,WAAWG,IAAI,EAAE;QACnC,OAAO;IACT;IAEA,MAAM,EAAEC,kBAAkB,EAAEC,qBAAqB,EAAE,GAAGH;IAEtD,MAAMI,iBAAiBL,eAAeM,aAAaC,KAAK,CAACC,IAAMA,EAAEC,IAAI,KAAKN;IAC1E,MAAMO,oBAAoBV,eAAeM,aAAaC,KACpD,CAACC,IAAMA,EAAEC,IAAI,KAAKL;IAGpB,IAAI,CAACC,gBAAgB;QACnB,MAAM,IAAIM,MAAM,CAAC,2BAA2B,EAAER,mBAAmB,WAAW,CAAC;IAC/E;IAEA,MAAMS,eAAef,gBAAgB;QACnCgB,kBAAkBR;QAClBS,OAAOf,WAAWG,IAAI,CAACY,KAAK;QAC5BZ,MAAMH,WAAWG,IAAI;IACvB;IAEA,IAAIa,kBAAkBhB,WAAWiB,OAAO;IACxC,MAAMC,iBAAiBlB,WAAWiB,OAAO,CAACE,cAAc;IACxD,IAAIR,qBAAqBX,WAAWiB,OAAO,EAAE;QAC3CD,kBAAkBlB,gBAAgB;YAChCgB,kBAAkBH;YAClBI,OAAOf,WAAWG,IAAI,CAACY,KAAK;YAC5BZ,MAAMH,WAAWiB,OAAO;QAC1B;QAEA,6FAA6F;QAC7F,OAAOD,gBAAgBD,KAAK;QAC5B,OAAOC,gBAAgBI,UAAU;IACnC;IAEA,IAAIF,gBAAgB;QAClBF,gBAAgBG,cAAc,GAAGnB,WAAWiB,OAAO,CAACE,cAAc;IACpE;IAEA,OAAO;QACL,GAAGnB,UAAU;QACbG,MAAMU;QACNI,SAASD;IACX;AACF"}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { setCookieCache } from 'better-auth/cookies';
|
|
2
|
-
import { createAuthMiddleware } from 'better-auth/api';
|
|
3
|
-
import { prepareSessionData } from './prepare-session-data';
|
|
4
|
-
/**
|
|
5
|
-
* Sets up a middleware that enforces the saveToJwt configuration when setting session data.
|
|
6
|
-
* This ensures that only fields specified in saveToJwt are included in the cookie cache
|
|
7
|
-
* for both user and session objects.
|
|
8
|
-
*
|
|
9
|
-
* The middleware runs after authentication and filters the session data based on
|
|
10
|
-
* the collection configurations before storing it in the cookie cache.
|
|
11
|
-
*/ export function respectSaveToJwtFieldsMiddleware({ sanitizedOptions, payloadConfig, pluginOptions }) {
|
|
12
|
-
if (typeof sanitizedOptions.hooks !== 'object') sanitizedOptions.hooks = {};
|
|
13
|
-
sanitizedOptions.hooks.after = createAuthMiddleware(async (ctx)=>{
|
|
14
|
-
const newSession = ctx.context?.newSession;
|
|
15
|
-
if (!newSession) return;
|
|
16
|
-
const filteredSessionData = await prepareSessionData({
|
|
17
|
-
newSession,
|
|
18
|
-
payloadConfig,
|
|
19
|
-
collectionSlugs: {
|
|
20
|
-
userCollectionSlug: pluginOptions.users?.slug ?? 'users',
|
|
21
|
-
sessionCollectionSlug: pluginOptions.sessions?.slug ?? 'sessions'
|
|
22
|
-
}
|
|
23
|
-
});
|
|
24
|
-
if (filteredSessionData) {
|
|
25
|
-
await setCookieCache(ctx, filteredSessionData);
|
|
26
|
-
}
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
//# sourceMappingURL=respect-save-to-jwt-fields-middleware.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/plugin/lib/respect-save-to-jwt-fields-middleware.ts"],"sourcesContent":["import { setCookieCache } from 'better-auth/cookies'\nimport { createAuthMiddleware } from 'better-auth/api'\nimport type { SanitizedBetterAuthOptions, PayloadBetterAuthPluginOptions } from '..'\nimport type { Config, Payload } from 'payload'\nimport { prepareSessionData } from './prepare-session-data'\n\n/**\n * Sets up a middleware that enforces the saveToJwt configuration when setting session data.\n * This ensures that only fields specified in saveToJwt are included in the cookie cache\n * for both user and session objects.\n *\n * The middleware runs after authentication and filters the session data based on\n * the collection configurations before storing it in the cookie cache.\n */\nexport function respectSaveToJwtFieldsMiddleware({\n sanitizedOptions,\n payloadConfig,\n pluginOptions,\n}: {\n sanitizedOptions: SanitizedBetterAuthOptions\n payloadConfig: Payload['config'] | Config\n pluginOptions: PayloadBetterAuthPluginOptions\n}) {\n if (typeof sanitizedOptions.hooks !== 'object') sanitizedOptions.hooks = {}\n\n sanitizedOptions.hooks.after = createAuthMiddleware(async (ctx) => {\n const newSession = ctx.context?.newSession\n if (!newSession) return\n\n const filteredSessionData = await prepareSessionData({\n newSession,\n payloadConfig,\n collectionSlugs: {\n userCollectionSlug: pluginOptions.users?.slug ?? 'users',\n sessionCollectionSlug: pluginOptions.sessions?.slug ?? 'sessions',\n },\n })\n\n if (filteredSessionData) {\n await setCookieCache(ctx, filteredSessionData as any)\n }\n })\n}\n"],"names":["setCookieCache","createAuthMiddleware","prepareSessionData","respectSaveToJwtFieldsMiddleware","sanitizedOptions","payloadConfig","pluginOptions","hooks","after","ctx","newSession","context","filteredSessionData","collectionSlugs","userCollectionSlug","users","slug","sessionCollectionSlug","sessions"],"mappings":"AAAA,SAASA,cAAc,QAAQ,sBAAqB;AACpD,SAASC,oBAAoB,QAAQ,kBAAiB;AAGtD,SAASC,kBAAkB,QAAQ,yBAAwB;AAE3D;;;;;;;CAOC,GACD,OAAO,SAASC,iCAAiC,EAC/CC,gBAAgB,EAChBC,aAAa,EACbC,aAAa,EAKd;IACC,IAAI,OAAOF,iBAAiBG,KAAK,KAAK,UAAUH,iBAAiBG,KAAK,GAAG,CAAC;IAE1EH,iBAAiBG,KAAK,CAACC,KAAK,GAAGP,qBAAqB,OAAOQ;QACzD,MAAMC,aAAaD,IAAIE,OAAO,EAAED;QAChC,IAAI,CAACA,YAAY;QAEjB,MAAME,sBAAsB,MAAMV,mBAAmB;YACnDQ;YACAL;YACAQ,iBAAiB;gBACfC,oBAAoBR,cAAcS,KAAK,EAAEC,QAAQ;gBACjDC,uBAAuBX,cAAcY,QAAQ,EAAEF,QAAQ;YACzD;QACF;QAEA,IAAIJ,qBAAqB;YACvB,MAAMZ,eAAeS,KAAKG;QAC5B;IACF;AACF"}
|