@revealui/auth 0.0.1-pre.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/dist/better-auth/adapter/__tests__/transform.test.js +213 -0
- package/dist/better-auth/adapter/__tests__/transform.test.js.map +1 -0
- package/dist/better-auth/adapter/generate-schema/biome.d.js +2 -0
- package/dist/better-auth/adapter/generate-schema/biome.d.js.map +1 -0
- package/dist/better-auth/adapter/generate-schema/generate-schema-builder.d.ts +5 -0
- package/dist/better-auth/adapter/generate-schema/generate-schema-builder.js +482 -0
- package/dist/better-auth/adapter/generate-schema/generate-schema-builder.js.map +1 -0
- package/dist/better-auth/adapter/generate-schema/get-payload-schema.d.ts +1 -0
- package/dist/better-auth/adapter/generate-schema/get-payload-schema.js +42 -0
- package/dist/better-auth/adapter/generate-schema/get-payload-schema.js.map +1 -0
- package/dist/better-auth/adapter/generate-schema/index.d.ts +4 -0
- package/dist/better-auth/adapter/generate-schema/index.js +19 -0
- package/dist/better-auth/adapter/generate-schema/index.js.map +1 -0
- package/dist/better-auth/adapter/generate-schema/utils.d.ts +2 -0
- package/dist/better-auth/adapter/generate-schema/utils.js +20 -0
- package/dist/better-auth/adapter/generate-schema/utils.js.map +1 -0
- package/dist/better-auth/adapter/index.d.ts +15 -0
- package/dist/better-auth/adapter/index.js +731 -0
- package/dist/better-auth/adapter/index.js.map +1 -0
- package/dist/better-auth/adapter/tests/adapter.test.js +174 -0
- package/dist/better-auth/adapter/tests/adapter.test.js.map +1 -0
- package/dist/better-auth/adapter/tests/base-collections-tests.js +575 -0
- package/dist/better-auth/adapter/tests/base-collections-tests.js.map +1 -0
- package/dist/better-auth/adapter/tests/dev/index.js +117 -0
- package/dist/better-auth/adapter/tests/dev/index.js.map +1 -0
- package/dist/better-auth/adapter/tests/dev/migrate.js +26 -0
- package/dist/better-auth/adapter/tests/dev/migrate.js.map +1 -0
- package/dist/better-auth/adapter/tests/dev/migrations/20250423_232936_init.js +218 -0
- package/dist/better-auth/adapter/tests/dev/migrations/20250423_232936_init.js.map +1 -0
- package/dist/better-auth/adapter/tests/dev/schema.js +160 -0
- package/dist/better-auth/adapter/tests/dev/schema.js.map +1 -0
- package/dist/better-auth/adapter/tests/plugins-tests.js +2 -0
- package/dist/better-auth/adapter/tests/plugins-tests.js.map +1 -0
- package/dist/better-auth/adapter/transform/index.d.ts +27 -0
- package/dist/better-auth/adapter/transform/index.js +664 -0
- package/dist/better-auth/adapter/transform/index.js.map +1 -0
- package/dist/better-auth/adapter/types.d.ts +10 -0
- package/dist/better-auth/adapter/types.js +3 -0
- package/dist/better-auth/adapter/types.js.map +1 -0
- package/dist/better-auth/generated-types.d.ts +285 -0
- package/dist/better-auth/index.d.ts +3 -0
- package/dist/better-auth/index.js +5 -0
- package/dist/better-auth/index.js.map +1 -0
- package/dist/better-auth/plugin/__tests__/plugin.test.js +162 -0
- package/dist/better-auth/plugin/__tests__/plugin.test.js.map +1 -0
- package/dist/better-auth/plugin/constants.d.ts +220 -0
- package/dist/better-auth/plugin/constants.js +249 -0
- package/dist/better-auth/plugin/constants.js.map +1 -0
- package/dist/better-auth/plugin/helpers/check-plugin-exists.d.ts +12 -0
- package/dist/better-auth/plugin/helpers/check-plugin-exists.js +14 -0
- package/dist/better-auth/plugin/helpers/check-plugin-exists.js.map +1 -0
- package/dist/better-auth/plugin/helpers/generate-verify-email-url.d.ts +29 -0
- package/dist/better-auth/plugin/helpers/generate-verify-email-url.js +46 -0
- package/dist/better-auth/plugin/helpers/generate-verify-email-url.js.map +1 -0
- package/dist/better-auth/plugin/helpers/get-admin-access.d.ts +7 -0
- package/dist/better-auth/plugin/helpers/get-admin-access.js +22 -0
- package/dist/better-auth/plugin/helpers/get-admin-access.js.map +1 -0
- package/dist/better-auth/plugin/helpers/get-all-roles.d.ts +5 -0
- package/dist/better-auth/plugin/helpers/get-all-roles.js +20 -0
- package/dist/better-auth/plugin/helpers/get-all-roles.js.map +1 -0
- package/dist/better-auth/plugin/helpers/get-better-auth-schema.d.ts +18 -0
- package/dist/better-auth/plugin/helpers/get-better-auth-schema.js +70 -0
- package/dist/better-auth/plugin/helpers/get-better-auth-schema.js.map +1 -0
- package/dist/better-auth/plugin/helpers/get-collection-slug.d.ts +5 -0
- package/dist/better-auth/plugin/helpers/get-collection-slug.js +20 -0
- package/dist/better-auth/plugin/helpers/get-collection-slug.js.map +1 -0
- package/dist/better-auth/plugin/helpers/get-collection.d.ts +15 -0
- package/dist/better-auth/plugin/helpers/get-collection.js +29 -0
- package/dist/better-auth/plugin/helpers/get-collection.js.map +1 -0
- package/dist/better-auth/plugin/helpers/get-ip.d.ts +2 -0
- package/dist/better-auth/plugin/helpers/get-ip.js +31 -0
- package/dist/better-auth/plugin/helpers/get-ip.js.map +1 -0
- package/dist/better-auth/plugin/helpers/get-signed-cookie.d.ts +2 -0
- package/dist/better-auth/plugin/helpers/get-signed-cookie.js +65 -0
- package/dist/better-auth/plugin/helpers/get-signed-cookie.js.map +1 -0
- package/dist/better-auth/plugin/helpers/index.d.ts +1 -0
- package/dist/better-auth/plugin/helpers/index.js +3 -0
- package/dist/better-auth/plugin/helpers/index.js.map +1 -0
- package/dist/better-auth/plugin/helpers/prepare-session-data.d.ts +59 -0
- package/dist/better-auth/plugin/helpers/prepare-session-data.js +49 -0
- package/dist/better-auth/plugin/helpers/prepare-session-data.js.map +1 -0
- package/dist/better-auth/plugin/helpers/sync-resolved-schema-with-collection-map.d.ts +20 -0
- package/dist/better-auth/plugin/helpers/sync-resolved-schema-with-collection-map.js +67 -0
- package/dist/better-auth/plugin/helpers/sync-resolved-schema-with-collection-map.js.map +1 -0
- package/dist/better-auth/plugin/index.d.ts +11 -0
- package/dist/better-auth/plugin/index.js +125 -0
- package/dist/better-auth/plugin/index.js.map +1 -0
- package/dist/better-auth/plugin/lib/apply-disabled-default-auth-config.d.ts +12 -0
- package/dist/better-auth/plugin/lib/apply-disabled-default-auth-config.js +87 -0
- package/dist/better-auth/plugin/lib/apply-disabled-default-auth-config.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/accounts/hooks/sync-password-to-user.d.ts +3 -0
- package/dist/better-auth/plugin/lib/build-collections/accounts/hooks/sync-password-to-user.js +60 -0
- package/dist/better-auth/plugin/lib/build-collections/accounts/hooks/sync-password-to-user.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/accounts/index.d.ts +3 -0
- package/dist/better-auth/plugin/lib/build-collections/accounts/index.js +154 -0
- package/dist/better-auth/plugin/lib/build-collections/accounts/index.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/admin-invitations/hooks/get-url-after-read.d.ts +5 -0
- package/dist/better-auth/plugin/lib/build-collections/admin-invitations/hooks/get-url-after-read.js +11 -0
- package/dist/better-auth/plugin/lib/build-collections/admin-invitations/hooks/get-url-after-read.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/admin-invitations/hooks/get-url-before-change.d.ts +2 -0
- package/dist/better-auth/plugin/lib/build-collections/admin-invitations/hooks/get-url-before-change.js +8 -0
- package/dist/better-auth/plugin/lib/build-collections/admin-invitations/hooks/get-url-before-change.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/admin-invitations/index.d.ts +6 -0
- package/dist/better-auth/plugin/lib/build-collections/admin-invitations/index.js +119 -0
- package/dist/better-auth/plugin/lib/build-collections/admin-invitations/index.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/api-keys.d.ts +3 -0
- package/dist/better-auth/plugin/lib/build-collections/api-keys.js +177 -0
- package/dist/better-auth/plugin/lib/build-collections/api-keys.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/device-code.d.ts +3 -0
- package/dist/better-auth/plugin/lib/build-collections/device-code.js +50 -0
- package/dist/better-auth/plugin/lib/build-collections/device-code.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/index.d.ts +10 -0
- package/dist/better-auth/plugin/lib/build-collections/index.js +73 -0
- package/dist/better-auth/plugin/lib/build-collections/index.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/invitations.d.ts +3 -0
- package/dist/better-auth/plugin/lib/build-collections/invitations.js +94 -0
- package/dist/better-auth/plugin/lib/build-collections/invitations.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/jwks.d.ts +3 -0
- package/dist/better-auth/plugin/lib/build-collections/jwks.js +59 -0
- package/dist/better-auth/plugin/lib/build-collections/jwks.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/members.d.ts +3 -0
- package/dist/better-auth/plugin/lib/build-collections/members.js +73 -0
- package/dist/better-auth/plugin/lib/build-collections/members.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/oauth-access-tokens.d.ts +3 -0
- package/dist/better-auth/plugin/lib/build-collections/oauth-access-tokens.js +107 -0
- package/dist/better-auth/plugin/lib/build-collections/oauth-access-tokens.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/oauth-applications.d.ts +3 -0
- package/dist/better-auth/plugin/lib/build-collections/oauth-applications.js +118 -0
- package/dist/better-auth/plugin/lib/build-collections/oauth-applications.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/oauth-consents.d.ts +3 -0
- package/dist/better-auth/plugin/lib/build-collections/oauth-consents.js +89 -0
- package/dist/better-auth/plugin/lib/build-collections/oauth-consents.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/organizations.d.ts +3 -0
- package/dist/better-auth/plugin/lib/build-collections/organizations.js +70 -0
- package/dist/better-auth/plugin/lib/build-collections/organizations.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/passkeys.d.ts +3 -0
- package/dist/better-auth/plugin/lib/build-collections/passkeys.js +115 -0
- package/dist/better-auth/plugin/lib/build-collections/passkeys.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/sessions.d.ts +3 -0
- package/dist/better-auth/plugin/lib/build-collections/sessions.js +170 -0
- package/dist/better-auth/plugin/lib/build-collections/sessions.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/sso-providers.d.ts +3 -0
- package/dist/better-auth/plugin/lib/build-collections/sso-providers.js +81 -0
- package/dist/better-auth/plugin/lib/build-collections/sso-providers.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/subscriptions.d.ts +3 -0
- package/dist/better-auth/plugin/lib/build-collections/subscriptions.js +111 -0
- package/dist/better-auth/plugin/lib/build-collections/subscriptions.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/team-members.d.ts +3 -0
- package/dist/better-auth/plugin/lib/build-collections/team-members.js +57 -0
- package/dist/better-auth/plugin/lib/build-collections/team-members.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/teams.d.ts +3 -0
- package/dist/better-auth/plugin/lib/build-collections/teams.js +76 -0
- package/dist/better-auth/plugin/lib/build-collections/teams.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/two-factors.d.ts +3 -0
- package/dist/better-auth/plugin/lib/build-collections/two-factors.js +67 -0
- package/dist/better-auth/plugin/lib/build-collections/two-factors.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/users/better-auth-strategy.d.ts +7 -0
- package/dist/better-auth/plugin/lib/build-collections/users/better-auth-strategy.js +53 -0
- package/dist/better-auth/plugin/lib/build-collections/users/better-auth-strategy.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/generate-invite-url.d.ts +11 -0
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/generate-invite-url.js +75 -0
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/generate-invite-url.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/index.d.ts +4 -0
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/index.js +6 -0
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/index.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/refresh-token.d.ts +2 -0
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/refresh-token.js +115 -0
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/refresh-token.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/send-invite-url.d.ts +3 -0
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/send-invite-url.js +64 -0
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/send-invite-url.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/set-admin-role.d.ts +3 -0
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/set-admin-role.js +80 -0
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/set-admin-role.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-login.d.ts +6 -0
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-login.js +79 -0
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-login.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-logout.d.ts +2 -0
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-logout.js +82 -0
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-logout.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/before-delete.d.ts +2 -0
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/before-delete.js +54 -0
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/before-delete.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/before-login.d.ts +6 -0
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/before-login.js +15 -0
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/before-login.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/index.d.ts +6 -0
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/index.js +8 -0
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/index.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/on-verified-change.d.ts +2 -0
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/on-verified-change.js +17 -0
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/on-verified-change.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/sync-account.d.ts +2 -0
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/sync-account.js +91 -0
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/sync-account.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/users/index.d.ts +3 -0
- package/dist/better-auth/plugin/lib/build-collections/users/index.js +341 -0
- package/dist/better-auth/plugin/lib/build-collections/users/index.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/utils/collection-schema.d.ts +15 -0
- package/dist/better-auth/plugin/lib/build-collections/utils/collection-schema.js +24 -0
- package/dist/better-auth/plugin/lib/build-collections/utils/collection-schema.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/utils/filter-duplicate-fields.d.ts +10 -0
- package/dist/better-auth/plugin/lib/build-collections/utils/filter-duplicate-fields.js +67 -0
- package/dist/better-auth/plugin/lib/build-collections/utils/filter-duplicate-fields.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/utils/filter-properties.d.ts +9 -0
- package/dist/better-auth/plugin/lib/build-collections/utils/filter-properties.js +94 -0
- package/dist/better-auth/plugin/lib/build-collections/utils/filter-properties.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/utils/get-timestamp-fields.d.ts +7 -0
- package/dist/better-auth/plugin/lib/build-collections/utils/get-timestamp-fields.js +35 -0
- package/dist/better-auth/plugin/lib/build-collections/utils/get-timestamp-fields.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/utils/model-field-transformations.d.ts +12 -0
- package/dist/better-auth/plugin/lib/build-collections/utils/model-field-transformations.js +25 -0
- package/dist/better-auth/plugin/lib/build-collections/utils/model-field-transformations.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/utils/payload-access.d.ts +14 -0
- package/dist/better-auth/plugin/lib/build-collections/utils/payload-access.js +67 -0
- package/dist/better-auth/plugin/lib/build-collections/utils/payload-access.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/utils/transform-schema-fields-to-payload.d.ts +20 -0
- package/dist/better-auth/plugin/lib/build-collections/utils/transform-schema-fields-to-payload.js +98 -0
- package/dist/better-auth/plugin/lib/build-collections/utils/transform-schema-fields-to-payload.js.map +1 -0
- package/dist/better-auth/plugin/lib/build-collections/verifications.d.ts +3 -0
- package/dist/better-auth/plugin/lib/build-collections/verifications.js +87 -0
- package/dist/better-auth/plugin/lib/build-collections/verifications.js.map +1 -0
- package/dist/better-auth/plugin/lib/get-payload-auth.d.ts +5 -0
- package/dist/better-auth/plugin/lib/get-payload-auth.js +9 -0
- package/dist/better-auth/plugin/lib/get-payload-auth.js.map +1 -0
- package/dist/better-auth/plugin/lib/init-better-auth.d.ts +7 -0
- package/dist/better-auth/plugin/lib/init-better-auth.js +46 -0
- package/dist/better-auth/plugin/lib/init-better-auth.js.map +1 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/admin-plugin.d.ts +2 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/admin-plugin.js +9 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/admin-plugin.js.map +1 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/api-key-plugin.d.ts +2 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/api-key-plugin.js +10 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/api-key-plugin.js.map +1 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/device-authorization-plugin.d.ts +2 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/device-authorization-plugin.js +8 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/device-authorization-plugin.js.map +1 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/index.d.ts +10 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/index.js +156 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/index.js.map +1 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/oidc-plugin.d.ts +2 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/oidc-plugin.js +18 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/oidc-plugin.js.map +1 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/organizations-plugin.d.ts +2 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/organizations-plugin.js +34 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/organizations-plugin.js.map +1 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/passkey-plugin.d.ts +2 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/passkey-plugin.js +11 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/passkey-plugin.js.map +1 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/sso-plugin.d.ts +2 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/sso-plugin.js +10 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/sso-plugin.js.map +1 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/two-factor-plugin.d.ts +2 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/two-factor-plugin.js +11 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/two-factor-plugin.js.map +1 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/ensure-password-set-before-create.d.ts +7 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/ensure-password-set-before-create.js +23 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/ensure-password-set-before-create.js.map +1 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/password.d.ts +25 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/password.js +62 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/password.js.map +1 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/require-admin-invite-for-sign-up-middleware.d.ts +9 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/require-admin-invite-for-sign-up-middleware.js +47 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/require-admin-invite-for-sign-up-middleware.js.map +1 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/save-to-jwt-middleware.d.ts +15 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/save-to-jwt-middleware.js +42 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/save-to-jwt-middleware.js.map +1 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/use-admin-invite-after-email-sign-up-middleware.d.ts +9 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/use-admin-invite-after-email-sign-up-middleware.js +63 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/use-admin-invite-after-email-sign-up-middleware.js.map +1 -0
- package/dist/better-auth/plugin/lib/set-login-methods.d.ts +4 -0
- package/dist/better-auth/plugin/lib/set-login-methods.js +14 -0
- package/dist/better-auth/plugin/lib/set-login-methods.js.map +1 -0
- package/dist/better-auth/plugin/payload/components/admin-buttons/index.d.ts +9 -0
- package/dist/better-auth/plugin/payload/components/admin-buttons/index.js +143 -0
- package/dist/better-auth/plugin/payload/components/admin-buttons/index.js.map +1 -0
- package/dist/better-auth/plugin/payload/components/admin-invite-button/index.d.ts +10 -0
- package/dist/better-auth/plugin/payload/components/admin-invite-button/index.js +219 -0
- package/dist/better-auth/plugin/payload/components/admin-invite-button/index.js.map +1 -0
- package/dist/better-auth/plugin/payload/components/logout-button.d.ts +4 -0
- package/dist/better-auth/plugin/payload/components/logout-button.js +24 -0
- package/dist/better-auth/plugin/payload/components/logout-button.js.map +1 -0
- package/dist/better-auth/plugin/payload/components/passkeys/add-button.d.ts +8 -0
- package/dist/better-auth/plugin/payload/components/passkeys/add-button.js +117 -0
- package/dist/better-auth/plugin/payload/components/passkeys/add-button.js.map +1 -0
- package/dist/better-auth/plugin/payload/components/passkeys/client.d.ts +3 -0
- package/dist/better-auth/plugin/payload/components/passkeys/client.js +66 -0
- package/dist/better-auth/plugin/payload/components/passkeys/client.js.map +1 -0
- package/dist/better-auth/plugin/payload/components/passkeys/index.d.ts +4 -0
- package/dist/better-auth/plugin/payload/components/passkeys/index.js +52 -0
- package/dist/better-auth/plugin/payload/components/passkeys/index.js.map +1 -0
- package/dist/better-auth/plugin/payload/components/passkeys/list.d.ts +8 -0
- package/dist/better-auth/plugin/payload/components/passkeys/list.js +57 -0
- package/dist/better-auth/plugin/payload/components/passkeys/list.js.map +1 -0
- package/dist/better-auth/plugin/payload/components/passkeys/types.d.ts +22 -0
- package/dist/better-auth/plugin/payload/components/passkeys/types.js +3 -0
- package/dist/better-auth/plugin/payload/components/passkeys/types.js.map +1 -0
- package/dist/better-auth/plugin/payload/components/rsc-redirect.d.ts +6 -0
- package/dist/better-auth/plugin/payload/components/rsc-redirect.js +7 -0
- package/dist/better-auth/plugin/payload/components/rsc-redirect.js.map +1 -0
- package/dist/better-auth/plugin/payload/components/social-provider-buttons/index.d.ts +15 -0
- package/dist/better-auth/plugin/payload/components/social-provider-buttons/index.js +157 -0
- package/dist/better-auth/plugin/payload/components/social-provider-buttons/index.js.map +1 -0
- package/dist/better-auth/plugin/payload/components/token-field.d.ts +4 -0
- package/dist/better-auth/plugin/payload/components/token-field.js +31 -0
- package/dist/better-auth/plugin/payload/components/token-field.js.map +1 -0
- package/dist/better-auth/plugin/payload/components/two-factor-auth/index.d.ts +8 -0
- package/dist/better-auth/plugin/payload/components/two-factor-auth/index.js +300 -0
- package/dist/better-auth/plugin/payload/components/two-factor-auth/index.js.map +1 -0
- package/dist/better-auth/plugin/payload/exports/client.d.ts +6 -0
- package/dist/better-auth/plugin/payload/exports/client.js +8 -0
- package/dist/better-auth/plugin/payload/exports/client.js.map +1 -0
- package/dist/better-auth/plugin/payload/exports/rsc.d.ts +8 -0
- package/dist/better-auth/plugin/payload/exports/rsc.js +10 -0
- package/dist/better-auth/plugin/payload/exports/rsc.js.map +1 -0
- package/dist/better-auth/plugin/payload/utils/generate-admin-invite-url.d.ts +2 -0
- package/dist/better-auth/plugin/payload/utils/generate-admin-invite-url.js +9 -0
- package/dist/better-auth/plugin/payload/utils/generate-admin-invite-url.js.map +1 -0
- package/dist/better-auth/plugin/payload/utils/get-safe-redirect.d.ts +1 -0
- package/dist/better-auth/plugin/payload/utils/get-safe-redirect.js +22 -0
- package/dist/better-auth/plugin/payload/utils/get-safe-redirect.js.map +1 -0
- package/dist/better-auth/plugin/payload/views/admin-login/client.d.ts +19 -0
- package/dist/better-auth/plugin/payload/views/admin-login/client.js +226 -0
- package/dist/better-auth/plugin/payload/views/admin-login/client.js.map +1 -0
- package/dist/better-auth/plugin/payload/views/admin-login/index.d.ts +10 -0
- package/dist/better-auth/plugin/payload/views/admin-login/index.js +150 -0
- package/dist/better-auth/plugin/payload/views/admin-login/index.js.map +1 -0
- package/dist/better-auth/plugin/payload/views/admin-signup/client.d.ts +16 -0
- package/dist/better-auth/plugin/payload/views/admin-signup/client.js +299 -0
- package/dist/better-auth/plugin/payload/views/admin-signup/client.js.map +1 -0
- package/dist/better-auth/plugin/payload/views/admin-signup/index.d.ts +9 -0
- package/dist/better-auth/plugin/payload/views/admin-signup/index.js +104 -0
- package/dist/better-auth/plugin/payload/views/admin-signup/index.js.map +1 -0
- package/dist/better-auth/plugin/payload/views/forgot-password/client.d.ts +7 -0
- package/dist/better-auth/plugin/payload/views/forgot-password/client.js +119 -0
- package/dist/better-auth/plugin/payload/views/forgot-password/client.js.map +1 -0
- package/dist/better-auth/plugin/payload/views/forgot-password/index.d.ts +8 -0
- package/dist/better-auth/plugin/payload/views/forgot-password/index.js +78 -0
- package/dist/better-auth/plugin/payload/views/forgot-password/index.js.map +1 -0
- package/dist/better-auth/plugin/payload/views/reset-password/client.d.ts +10 -0
- package/dist/better-auth/plugin/payload/views/reset-password/client.js +144 -0
- package/dist/better-auth/plugin/payload/views/reset-password/client.js.map +1 -0
- package/dist/better-auth/plugin/payload/views/reset-password/index.d.ts +8 -0
- package/dist/better-auth/plugin/payload/views/reset-password/index.js +96 -0
- package/dist/better-auth/plugin/payload/views/reset-password/index.js.map +1 -0
- package/dist/better-auth/plugin/payload/views/two-factor-verify/client.d.ts +6 -0
- package/dist/better-auth/plugin/payload/views/two-factor-verify/client.js +96 -0
- package/dist/better-auth/plugin/payload/views/two-factor-verify/client.js.map +1 -0
- package/dist/better-auth/plugin/payload/views/two-factor-verify/index.d.ts +9 -0
- package/dist/better-auth/plugin/payload/views/two-factor-verify/index.js +56 -0
- package/dist/better-auth/plugin/payload/views/two-factor-verify/index.js.map +1 -0
- package/dist/better-auth/plugin/types.d.ts +429 -0
- package/dist/better-auth/plugin/types.js +3 -0
- package/dist/better-auth/plugin/types.js.map +1 -0
- package/dist/better-auth/plugin/utils/set.d.ts +39 -0
- package/dist/better-auth/plugin/utils/set.js +103 -0
- package/dist/better-auth/plugin/utils/set.js.map +1 -0
- package/dist/better-auth/scripts/generate-types.d.ts +1 -0
- package/dist/better-auth/scripts/generate-types.js +234 -0
- package/dist/better-auth/scripts/generate-types.js.map +1 -0
- package/dist/better-auth/types.d.ts +2 -0
- package/dist/better-auth/types.js +4 -0
- package/dist/better-auth/types.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/shared/components/icons.d.ts +7 -0
- package/dist/shared/components/icons.js +442 -0
- package/dist/shared/components/icons.js.map +1 -0
- package/dist/shared/components/logo.d.ts +3 -0
- package/dist/shared/components/logo.js +24 -0
- package/dist/shared/components/logo.js.map +1 -0
- package/dist/shared/form/components/submit.d.ts +7 -0
- package/dist/shared/form/components/submit.js +16 -0
- package/dist/shared/form/components/submit.js.map +1 -0
- package/dist/shared/form/fields/text-field.d.ts +8 -0
- package/dist/shared/form/fields/text-field.js +37 -0
- package/dist/shared/form/fields/text-field.js.map +1 -0
- package/dist/shared/form/index.d.ts +4 -0
- package/dist/shared/form/index.js +8 -0
- package/dist/shared/form/index.js.map +1 -0
- package/dist/shared/form/ui/header/index.d.ts +8 -0
- package/dist/shared/form/ui/header/index.js +24 -0
- package/dist/shared/form/ui/header/index.js.map +1 -0
- package/dist/shared/form/ui/index.d.ts +31 -0
- package/dist/shared/form/ui/index.js +57 -0
- package/dist/shared/form/ui/index.js.map +1 -0
- package/dist/shared/form/validation.d.ts +51 -0
- package/dist/shared/form/validation.js +127 -0
- package/dist/shared/form/validation.js.map +1 -0
- package/dist/shared/index.d.ts +2 -0
- package/dist/shared/index.js +4 -0
- package/dist/shared/index.js.map +1 -0
- package/dist/shared/payload/fields/field-copy-button/index.d.ts +3 -0
- package/dist/shared/payload/fields/field-copy-button/index.js +38 -0
- package/dist/shared/payload/fields/field-copy-button/index.js.map +1 -0
- package/dist/shared/payload/fields/generate-uuid-button/index.d.ts +3 -0
- package/dist/shared/payload/fields/generate-uuid-button/index.js +26 -0
- package/dist/shared/payload/fields/generate-uuid-button/index.js.map +1 -0
- package/dist/shared/payload/fields/index.d.ts +2 -0
- package/dist/shared/payload/fields/index.js +4 -0
- package/dist/shared/payload/fields/index.js.map +1 -0
- package/dist/shared/utils/regex.d.ts +2 -0
- package/dist/shared/utils/regex.js +4 -0
- package/dist/shared/utils/regex.js.map +1 -0
- package/dist/shared/utils/try-catch.d.ts +11 -0
- package/dist/shared/utils/try-catch.js +17 -0
- package/dist/shared/utils/try-catch.js.map +1 -0
- package/dist/shared/utils/value-or-default.d.ts +9 -0
- package/dist/shared/utils/value-or-default.js +12 -0
- package/dist/shared/utils/value-or-default.js.map +1 -0
- package/package.json +122 -0
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { adminEndpoints, baseSlugs } from "@/better-auth/plugin/constants";
|
|
2
|
+
import { status as httpStatus } from "http-status";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
import { getPayloadAuth } from "../../../get-payload-auth";
|
|
5
|
+
const setAdminRoleSchema = z.object({
|
|
6
|
+
token: z.string().optional(),
|
|
7
|
+
redirect: z.string().optional()
|
|
8
|
+
});
|
|
9
|
+
export const getSetAdminRoleEndpoint = (pluginOptions, userSlug)=>{
|
|
10
|
+
const endpoint = {
|
|
11
|
+
path: adminEndpoints.setAdminRole,
|
|
12
|
+
method: 'get',
|
|
13
|
+
handler: async (req)=>{
|
|
14
|
+
const { config } = req.payload;
|
|
15
|
+
const schema = setAdminRoleSchema.safeParse(req.query);
|
|
16
|
+
if (!schema.success) {
|
|
17
|
+
return Response.json({
|
|
18
|
+
message: schema.error.message
|
|
19
|
+
}, {
|
|
20
|
+
status: httpStatus.BAD_REQUEST
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
const payloadAuth = await getPayloadAuth(config);
|
|
24
|
+
const session = await payloadAuth.betterAuth.api.getSession({
|
|
25
|
+
headers: req.headers
|
|
26
|
+
});
|
|
27
|
+
if (!session) {
|
|
28
|
+
return Response.json({
|
|
29
|
+
message: 'No session found'
|
|
30
|
+
}, {
|
|
31
|
+
status: httpStatus.UNAUTHORIZED
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
const { token, redirect } = schema.data;
|
|
35
|
+
const invite = await req.payload.find({
|
|
36
|
+
collection: pluginOptions.adminInvitations?.slug ?? baseSlugs.adminInvitations,
|
|
37
|
+
where: {
|
|
38
|
+
token: {
|
|
39
|
+
equals: token
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
limit: 1
|
|
43
|
+
});
|
|
44
|
+
if (invite.docs.length === 0) {
|
|
45
|
+
return Response.json({
|
|
46
|
+
message: 'Invalid token'
|
|
47
|
+
}, {
|
|
48
|
+
status: httpStatus.UNAUTHORIZED
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
const role = invite.docs[0]?.role;
|
|
52
|
+
await req.payload.update({
|
|
53
|
+
collection: userSlug,
|
|
54
|
+
id: session.user.id,
|
|
55
|
+
data: {
|
|
56
|
+
role: role
|
|
57
|
+
},
|
|
58
|
+
overrideAccess: true
|
|
59
|
+
});
|
|
60
|
+
await req.payload.delete({
|
|
61
|
+
collection: pluginOptions.adminInvitations?.slug ?? baseSlugs.adminInvitations,
|
|
62
|
+
where: {
|
|
63
|
+
token: {
|
|
64
|
+
equals: token
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
const response = new Response(null, {
|
|
69
|
+
status: 307,
|
|
70
|
+
headers: {
|
|
71
|
+
Location: redirect ?? config.routes.admin
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
return response;
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
return endpoint;
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
//# sourceMappingURL=set-admin-role.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../src/better-auth/plugin/lib/build-collections/users/endpoints/set-admin-role.ts"],"sourcesContent":["import { adminEndpoints, baseSlugs } from '@/better-auth/plugin/constants';\nimport { status as httpStatus } from 'http-status';\nimport { type CollectionSlug, type Endpoint } from 'payload';\nimport { z } from 'zod';\nimport type { BetterAuthPluginOptions } from '../../../../types';\nimport { getPayloadAuth } from '../../../get-payload-auth';\n\nconst setAdminRoleSchema = z.object({\n token: z.string().optional(),\n redirect: z.string().optional(),\n});\n\nexport const getSetAdminRoleEndpoint = (\n pluginOptions: BetterAuthPluginOptions,\n userSlug: string\n): Endpoint => {\n const endpoint: Endpoint = {\n path: adminEndpoints.setAdminRole,\n method: 'get',\n handler: async req => {\n const { config } = req.payload;\n const schema = setAdminRoleSchema.safeParse(req.query);\n if (!schema.success) {\n return Response.json({ message: schema.error.message }, { status: httpStatus.BAD_REQUEST });\n }\n const payloadAuth = await getPayloadAuth(config);\n const session = await payloadAuth.betterAuth.api.getSession({\n headers: req.headers,\n });\n if (!session) {\n return Response.json({ message: 'No session found' }, { status: httpStatus.UNAUTHORIZED });\n }\n const { token, redirect } = schema.data;\n const invite = await req.payload.find({\n collection: (pluginOptions.adminInvitations?.slug ??\n baseSlugs.adminInvitations) as CollectionSlug,\n where: {\n token: { equals: token },\n },\n limit: 1,\n });\n if (invite.docs.length === 0) {\n return Response.json({ message: 'Invalid token' }, { status: httpStatus.UNAUTHORIZED });\n }\n const role = (invite.docs[0] as any)?.role as string;\n await req.payload.update({\n collection: userSlug as CollectionSlug,\n id: session.user.id,\n data: {\n role: role as any,\n } as any,\n overrideAccess: true,\n });\n await req.payload.delete({\n collection: (pluginOptions.adminInvitations?.slug ??\n baseSlugs.adminInvitations) as CollectionSlug,\n where: {\n token: {\n equals: token,\n },\n },\n });\n const response = new Response(null, {\n status: 307,\n headers: {\n Location: redirect ?? config.routes.admin,\n },\n });\n return response;\n },\n };\n\n return endpoint;\n};\n"],"names":["adminEndpoints","baseSlugs","status","httpStatus","z","getPayloadAuth","setAdminRoleSchema","object","token","string","optional","redirect","getSetAdminRoleEndpoint","pluginOptions","userSlug","endpoint","path","setAdminRole","method","handler","req","config","payload","schema","safeParse","query","success","Response","json","message","error","BAD_REQUEST","payloadAuth","session","betterAuth","api","getSession","headers","UNAUTHORIZED","data","invite","find","collection","adminInvitations","slug","where","equals","limit","docs","length","role","update","id","user","overrideAccess","delete","response","Location","routes","admin"],"mappings":"AAAA,SAASA,cAAc,EAAEC,SAAS,QAAQ,iCAAiC;AAC3E,SAASC,UAAUC,UAAU,QAAQ,cAAc;AAEnD,SAASC,CAAC,QAAQ,MAAM;AAExB,SAASC,cAAc,QAAQ,4BAA4B;AAE3D,MAAMC,qBAAqBF,EAAEG,MAAM,CAAC;IAClCC,OAAOJ,EAAEK,MAAM,GAAGC,QAAQ;IAC1BC,UAAUP,EAAEK,MAAM,GAAGC,QAAQ;AAC/B;AAEA,OAAO,MAAME,0BAA0B,CACrCC,eACAC;IAEA,MAAMC,WAAqB;QACzBC,MAAMhB,eAAeiB,YAAY;QACjCC,QAAQ;QACRC,SAAS,OAAMC;YACb,MAAM,EAAEC,MAAM,EAAE,GAAGD,IAAIE,OAAO;YAC9B,MAAMC,SAASjB,mBAAmBkB,SAAS,CAACJ,IAAIK,KAAK;YACrD,IAAI,CAACF,OAAOG,OAAO,EAAE;gBACnB,OAAOC,SAASC,IAAI,CAAC;oBAAEC,SAASN,OAAOO,KAAK,CAACD,OAAO;gBAAC,GAAG;oBAAE3B,QAAQC,WAAW4B,WAAW;gBAAC;YAC3F;YACA,MAAMC,cAAc,MAAM3B,eAAegB;YACzC,MAAMY,UAAU,MAAMD,YAAYE,UAAU,CAACC,GAAG,CAACC,UAAU,CAAC;gBAC1DC,SAASjB,IAAIiB,OAAO;YACtB;YACA,IAAI,CAACJ,SAAS;gBACZ,OAAON,SAASC,IAAI,CAAC;oBAAEC,SAAS;gBAAmB,GAAG;oBAAE3B,QAAQC,WAAWmC,YAAY;gBAAC;YAC1F;YACA,MAAM,EAAE9B,KAAK,EAAEG,QAAQ,EAAE,GAAGY,OAAOgB,IAAI;YACvC,MAAMC,SAAS,MAAMpB,IAAIE,OAAO,CAACmB,IAAI,CAAC;gBACpCC,YAAa7B,cAAc8B,gBAAgB,EAAEC,QAC3C3C,UAAU0C,gBAAgB;gBAC5BE,OAAO;oBACLrC,OAAO;wBAAEsC,QAAQtC;oBAAM;gBACzB;gBACAuC,OAAO;YACT;YACA,IAAIP,OAAOQ,IAAI,CAACC,MAAM,KAAK,GAAG;gBAC5B,OAAOtB,SAASC,IAAI,CAAC;oBAAEC,SAAS;gBAAgB,GAAG;oBAAE3B,QAAQC,WAAWmC,YAAY;gBAAC;YACvF;YACA,MAAMY,OAAQV,OAAOQ,IAAI,CAAC,EAAE,EAAUE;YACtC,MAAM9B,IAAIE,OAAO,CAAC6B,MAAM,CAAC;gBACvBT,YAAY5B;gBACZsC,IAAInB,QAAQoB,IAAI,CAACD,EAAE;gBACnBb,MAAM;oBACJW,MAAMA;gBACR;gBACAI,gBAAgB;YAClB;YACA,MAAMlC,IAAIE,OAAO,CAACiC,MAAM,CAAC;gBACvBb,YAAa7B,cAAc8B,gBAAgB,EAAEC,QAC3C3C,UAAU0C,gBAAgB;gBAC5BE,OAAO;oBACLrC,OAAO;wBACLsC,QAAQtC;oBACV;gBACF;YACF;YACA,MAAMgD,WAAW,IAAI7B,SAAS,MAAM;gBAClCzB,QAAQ;gBACRmC,SAAS;oBACPoB,UAAU9C,YAAYU,OAAOqC,MAAM,CAACC,KAAK;gBAC3C;YACF;YACA,OAAOH;QACT;IACF;IAEA,OAAOzC;AACT,EAAE"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { CollectionAfterLoginHook } from 'payload';
|
|
2
|
+
/**
|
|
3
|
+
* This hook is used to sync the admin login token with better-auth session token
|
|
4
|
+
* It also creates a new session in better-auth
|
|
5
|
+
*/
|
|
6
|
+
export declare function getAfterLoginHook(): CollectionAfterLoginHook;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { baModelKey } from "@/better-auth/plugin/constants";
|
|
2
|
+
import { getCollectionByModelKey } from "@/better-auth/plugin/helpers/get-collection";
|
|
3
|
+
import { getIp } from "@/better-auth/plugin/helpers/get-ip";
|
|
4
|
+
import { prepareSessionData } from "@/better-auth/plugin/helpers/prepare-session-data";
|
|
5
|
+
import { getPayloadAuth } from "@/better-auth/plugin/lib/get-payload-auth";
|
|
6
|
+
import { generateId } from "../../../../..";
|
|
7
|
+
import { createAuthMiddleware } from "better-auth/api";
|
|
8
|
+
import { setSessionCookie } from "better-auth/cookies";
|
|
9
|
+
import { parseSetCookie } from "next/dist/compiled/@edge-runtime/cookies";
|
|
10
|
+
import { cookies } from "next/headers";
|
|
11
|
+
/**
|
|
12
|
+
* This hook is used to sync the admin login token with better-auth session token
|
|
13
|
+
* It also creates a new session in better-auth
|
|
14
|
+
*/ export function getAfterLoginHook() {
|
|
15
|
+
const hook = async ({ req, user })=>{
|
|
16
|
+
const config = req.payload.config;
|
|
17
|
+
const payload = await getPayloadAuth(config);
|
|
18
|
+
const collections = req.payload.collections;
|
|
19
|
+
const userCollection = getCollectionByModelKey(collections, baModelKey.user);
|
|
20
|
+
const sessionCollection = getCollectionByModelKey(collections, baModelKey.session);
|
|
21
|
+
const cookieStore = await cookies();
|
|
22
|
+
const authContext = await payload.betterAuth.$context;
|
|
23
|
+
const sessionExpiration = payload.betterAuth.options.session?.expiresIn ?? 60 * 60 * 24 * 7; // 7 days
|
|
24
|
+
// we can't use internal adapter as we can cause a race condition unless we pass req to the payload.create
|
|
25
|
+
const session = await payload.create({
|
|
26
|
+
collection: sessionCollection.slug,
|
|
27
|
+
data: {
|
|
28
|
+
ipAddress: getIp(req.headers, payload.betterAuth.options) ?? '',
|
|
29
|
+
userAgent: req.headers?.get('user-agent') ?? '',
|
|
30
|
+
user: user.id,
|
|
31
|
+
token: generateId(32),
|
|
32
|
+
expiresAt: new Date(Date.now() + sessionExpiration * 1000).toISOString()
|
|
33
|
+
},
|
|
34
|
+
req
|
|
35
|
+
});
|
|
36
|
+
const betterAuthHandleRequest = createAuthMiddleware(async (ctx)=>{
|
|
37
|
+
ctx.context = {
|
|
38
|
+
...authContext,
|
|
39
|
+
user
|
|
40
|
+
};
|
|
41
|
+
await ctx.setSignedCookie(ctx.context.authCookies.sessionToken.name, session.token, ctx.context.secret, ctx.context.authCookies.sessionToken.options);
|
|
42
|
+
const filteredSessionData = await prepareSessionData({
|
|
43
|
+
sessionData: {
|
|
44
|
+
session,
|
|
45
|
+
user
|
|
46
|
+
},
|
|
47
|
+
usersCollection: userCollection,
|
|
48
|
+
sessionsCollection: sessionCollection
|
|
49
|
+
});
|
|
50
|
+
if (filteredSessionData) {
|
|
51
|
+
await setSessionCookie(ctx, filteredSessionData);
|
|
52
|
+
}
|
|
53
|
+
if ('responseHeaders' in ctx) {
|
|
54
|
+
return ctx.responseHeaders;
|
|
55
|
+
}
|
|
56
|
+
return null;
|
|
57
|
+
});
|
|
58
|
+
// Create a modified request object that matches the expected MiddlewareInputContext type
|
|
59
|
+
const modifiedReq = {
|
|
60
|
+
...req,
|
|
61
|
+
body: undefined
|
|
62
|
+
};
|
|
63
|
+
const responseHeaders = await betterAuthHandleRequest(modifiedReq);
|
|
64
|
+
const responseCookies = responseHeaders?.getSetCookie().map((cookie)=>parseSetCookie(cookie)).filter(Boolean);
|
|
65
|
+
if (responseCookies) {
|
|
66
|
+
for (const cookieData of responseCookies){
|
|
67
|
+
const { name, value, ...options } = cookieData;
|
|
68
|
+
cookieStore.set({
|
|
69
|
+
...options,
|
|
70
|
+
name,
|
|
71
|
+
value: decodeURIComponent(value)
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
return hook;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
//# sourceMappingURL=after-login.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../src/better-auth/plugin/lib/build-collections/users/hooks/after-login.ts"],"sourcesContent":["import { baModelKey } from '@/better-auth/plugin/constants';\nimport { getCollectionByModelKey } from '@/better-auth/plugin/helpers/get-collection';\nimport { getIp } from '@/better-auth/plugin/helpers/get-ip';\nimport { prepareSessionData } from '@/better-auth/plugin/helpers/prepare-session-data';\nimport { getPayloadAuth } from '@/better-auth/plugin/lib/get-payload-auth';\nimport { type Session, generateId } from 'better-auth';\nimport { createAuthMiddleware } from 'better-auth/api';\nimport { setSessionCookie } from 'better-auth/cookies';\nimport { type ResponseCookie, parseSetCookie } from 'next/dist/compiled/@edge-runtime/cookies';\nimport { cookies } from 'next/headers';\nimport type { CollectionAfterLoginHook, CollectionSlug } from 'payload';\n/**\n * This hook is used to sync the admin login token with better-auth session token\n * It also creates a new session in better-auth\n */\nexport function getAfterLoginHook() {\n const hook: CollectionAfterLoginHook = async ({ req, user }) => {\n const config = req.payload.config;\n const payload = await getPayloadAuth(config);\n const collections = req.payload.collections;\n const userCollection = getCollectionByModelKey(collections, baModelKey.user);\n const sessionCollection = getCollectionByModelKey(collections, baModelKey.session);\n const cookieStore = await cookies();\n const authContext = await payload.betterAuth.$context;\n const sessionExpiration = payload.betterAuth.options.session?.expiresIn ?? 60 * 60 * 24 * 7; // 7 days\n // we can't use internal adapter as we can cause a race condition unless we pass req to the payload.create\n const session = (await payload.create({\n collection: sessionCollection.slug as CollectionSlug,\n data: {\n ipAddress: getIp(req.headers, payload.betterAuth.options) ?? '',\n userAgent: req.headers?.get('user-agent') ?? '',\n user: user.id,\n token: generateId(32),\n expiresAt: new Date(Date.now() + sessionExpiration * 1000).toISOString(),\n // Using Record<string, unknown> because PayloadCMS create data structure varies by collection configuration\n } as /* Using Record<string, unknown> because PayloadCMS create data structure varies by collection configuration */ Record<\n string,\n unknown\n >,\n req,\n })) as unknown as Session;\n\n const betterAuthHandleRequest = createAuthMiddleware(async (ctx): Promise<Headers | null> => {\n ctx.context = { ...authContext, user };\n await ctx.setSignedCookie(\n ctx.context.authCookies.sessionToken.name,\n session.token,\n ctx.context.secret,\n ctx.context.authCookies.sessionToken.options\n );\n const filteredSessionData = await prepareSessionData({\n sessionData: { session, user },\n usersCollection: userCollection,\n sessionsCollection: sessionCollection,\n });\n if (filteredSessionData) {\n await setSessionCookie(ctx, filteredSessionData);\n }\n if ('responseHeaders' in ctx) {\n return ctx.responseHeaders as Headers;\n }\n return null;\n });\n\n // Create a modified request object that matches the expected MiddlewareInputContext type\n const modifiedReq = {\n ...req,\n body: undefined, // Explicitly set body to undefined to satisfy type constraint\n };\n\n const responseHeaders = await betterAuthHandleRequest(modifiedReq);\n const responseCookies = responseHeaders\n ?.getSetCookie()\n .map(cookie => parseSetCookie(cookie))\n .filter(Boolean) as ResponseCookie[];\n\n if (responseCookies) {\n for (const cookieData of responseCookies) {\n const { name, value, ...options } = cookieData;\n cookieStore.set({\n ...options,\n name,\n value: decodeURIComponent(value),\n });\n }\n }\n };\n\n return hook as CollectionAfterLoginHook;\n}\n"],"names":["baModelKey","getCollectionByModelKey","getIp","prepareSessionData","getPayloadAuth","generateId","createAuthMiddleware","setSessionCookie","parseSetCookie","cookies","getAfterLoginHook","hook","req","user","config","payload","collections","userCollection","sessionCollection","session","cookieStore","authContext","betterAuth","$context","sessionExpiration","options","expiresIn","create","collection","slug","data","ipAddress","headers","userAgent","get","id","token","expiresAt","Date","now","toISOString","betterAuthHandleRequest","ctx","context","setSignedCookie","authCookies","sessionToken","name","secret","filteredSessionData","sessionData","usersCollection","sessionsCollection","responseHeaders","modifiedReq","body","undefined","responseCookies","getSetCookie","map","cookie","filter","Boolean","cookieData","value","set","decodeURIComponent"],"mappings":"AAAA,SAASA,UAAU,QAAQ,iCAAiC;AAC5D,SAASC,uBAAuB,QAAQ,8CAA8C;AACtF,SAASC,KAAK,QAAQ,sCAAsC;AAC5D,SAASC,kBAAkB,QAAQ,oDAAoD;AACvF,SAASC,cAAc,QAAQ,4CAA4C;AAC3E,SAAuBC,UAAU,QAAQ,iBAAc;AACvD,SAASC,oBAAoB,QAAQ,kBAAkB;AACvD,SAASC,gBAAgB,QAAQ,sBAAsB;AACvD,SAA8BC,cAAc,QAAQ,2CAA2C;AAC/F,SAASC,OAAO,QAAQ,eAAe;AAEvC;;;CAGC,GACD,OAAO,SAASC;IACd,MAAMC,OAAiC,OAAO,EAAEC,GAAG,EAAEC,IAAI,EAAE;QACzD,MAAMC,SAASF,IAAIG,OAAO,CAACD,MAAM;QACjC,MAAMC,UAAU,MAAMX,eAAeU;QACrC,MAAME,cAAcJ,IAAIG,OAAO,CAACC,WAAW;QAC3C,MAAMC,iBAAiBhB,wBAAwBe,aAAahB,WAAWa,IAAI;QAC3E,MAAMK,oBAAoBjB,wBAAwBe,aAAahB,WAAWmB,OAAO;QACjF,MAAMC,cAAc,MAAMX;QAC1B,MAAMY,cAAc,MAAMN,QAAQO,UAAU,CAACC,QAAQ;QACrD,MAAMC,oBAAoBT,QAAQO,UAAU,CAACG,OAAO,CAACN,OAAO,EAAEO,aAAa,KAAK,KAAK,KAAK,GAAG,SAAS;QACtG,0GAA0G;QAC1G,MAAMP,UAAW,MAAMJ,QAAQY,MAAM,CAAC;YACpCC,YAAYV,kBAAkBW,IAAI;YAClCC,MAAM;gBACJC,WAAW7B,MAAMU,IAAIoB,OAAO,EAAEjB,QAAQO,UAAU,CAACG,OAAO,KAAK;gBAC7DQ,WAAWrB,IAAIoB,OAAO,EAAEE,IAAI,iBAAiB;gBAC7CrB,MAAMA,KAAKsB,EAAE;gBACbC,OAAO/B,WAAW;gBAClBgC,WAAW,IAAIC,KAAKA,KAAKC,GAAG,KAAKf,oBAAoB,MAAMgB,WAAW;YAExE;YAIA5B;QACF;QAEA,MAAM6B,0BAA0BnC,qBAAqB,OAAOoC;YAC1DA,IAAIC,OAAO,GAAG;gBAAE,GAAGtB,WAAW;gBAAER;YAAK;YACrC,MAAM6B,IAAIE,eAAe,CACvBF,IAAIC,OAAO,CAACE,WAAW,CAACC,YAAY,CAACC,IAAI,EACzC5B,QAAQiB,KAAK,EACbM,IAAIC,OAAO,CAACK,MAAM,EAClBN,IAAIC,OAAO,CAACE,WAAW,CAACC,YAAY,CAACrB,OAAO;YAE9C,MAAMwB,sBAAsB,MAAM9C,mBAAmB;gBACnD+C,aAAa;oBAAE/B;oBAASN;gBAAK;gBAC7BsC,iBAAiBlC;gBACjBmC,oBAAoBlC;YACtB;YACA,IAAI+B,qBAAqB;gBACvB,MAAM1C,iBAAiBmC,KAAKO;YAC9B;YACA,IAAI,qBAAqBP,KAAK;gBAC5B,OAAOA,IAAIW,eAAe;YAC5B;YACA,OAAO;QACT;QAEA,yFAAyF;QACzF,MAAMC,cAAc;YAClB,GAAG1C,GAAG;YACN2C,MAAMC;QACR;QAEA,MAAMH,kBAAkB,MAAMZ,wBAAwBa;QACtD,MAAMG,kBAAkBJ,iBACpBK,eACDC,IAAIC,CAAAA,SAAUpD,eAAeoD,SAC7BC,OAAOC;QAEV,IAAIL,iBAAiB;YACnB,KAAK,MAAMM,cAAcN,gBAAiB;gBACxC,MAAM,EAAEV,IAAI,EAAEiB,KAAK,EAAE,GAAGvC,SAAS,GAAGsC;gBACpC3C,YAAY6C,GAAG,CAAC;oBACd,GAAGxC,OAAO;oBACVsB;oBACAiB,OAAOE,mBAAmBF;gBAC5B;YACF;QACF;IACF;IAEA,OAAOrD;AACT"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { baModelKey } from "@/better-auth/plugin/constants";
|
|
2
|
+
import { getCollectionByModelKey } from "@/better-auth/plugin/helpers/get-collection";
|
|
3
|
+
import { getPayloadAuth } from "@/better-auth/plugin/lib/get-payload-auth";
|
|
4
|
+
import { cookies } from "next/headers";
|
|
5
|
+
export function getAfterLogoutHook() {
|
|
6
|
+
const hook = async ({ req })=>{
|
|
7
|
+
const store = await cookies();
|
|
8
|
+
const payload = await getPayloadAuth(req.payload.config);
|
|
9
|
+
const { dontRememberToken, sessionData, sessionToken } = (await payload.betterAuth.$context).authCookies;
|
|
10
|
+
const sessionsSlug = getCollectionByModelKey(req.payload.collections, baModelKey.session).slug;
|
|
11
|
+
await deleteSessionFromDb(payload, sessionsSlug, store.get(sessionToken.name)?.value, req);
|
|
12
|
+
const baseNames = [
|
|
13
|
+
sessionToken.name,
|
|
14
|
+
sessionData.name,
|
|
15
|
+
dontRememberToken.name,
|
|
16
|
+
//This is a hacky wat to delete the admin session cookie (BETTER AUTH HARDCODED THIS)
|
|
17
|
+
// see https://github.com/better-auth/better-auth/blob/25e82669eed83ba6da063c167e8ae5b7da84ef9f/packages/better-auth/src/plugins/admin/admin.ts#L917C7-L917C23
|
|
18
|
+
'admin_session'
|
|
19
|
+
];
|
|
20
|
+
const multiBase = `${sessionToken.name}_multi`;
|
|
21
|
+
const multiCandidates = store.getAll().filter((c)=>c.name.startsWith(multiBase) || c.name.startsWith(`__Secure-${multiBase}`)).map((c)=>c.name);
|
|
22
|
+
const allNames = [
|
|
23
|
+
...baseNames.flatMap((n)=>{
|
|
24
|
+
const clean = n.replace(/^__Secure-/, '');
|
|
25
|
+
return [
|
|
26
|
+
clean,
|
|
27
|
+
`__Secure-${clean}`
|
|
28
|
+
];
|
|
29
|
+
}),
|
|
30
|
+
...multiCandidates
|
|
31
|
+
];
|
|
32
|
+
allNames.forEach((n)=>deleteCookie(store, n));
|
|
33
|
+
};
|
|
34
|
+
return hook;
|
|
35
|
+
}
|
|
36
|
+
async function deleteSessionFromDb(payload, slug, rawCookieValue, req) {
|
|
37
|
+
if (!rawCookieValue) return;
|
|
38
|
+
const [token] = rawCookieValue.split('.');
|
|
39
|
+
const { docs } = await payload.find({
|
|
40
|
+
collection: slug,
|
|
41
|
+
limit: 1,
|
|
42
|
+
req,
|
|
43
|
+
where: {
|
|
44
|
+
token: {
|
|
45
|
+
equals: token
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
const session = docs.at(0);
|
|
50
|
+
if (!session) return;
|
|
51
|
+
try {
|
|
52
|
+
await payload.delete({
|
|
53
|
+
collection: slug,
|
|
54
|
+
req,
|
|
55
|
+
where: {
|
|
56
|
+
id: {
|
|
57
|
+
equals: session.id
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
} catch {
|
|
62
|
+
// Ignore errors during session deletion
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Deleting __Secure-* cookies need to set options.secure = true
|
|
67
|
+
*/ function deleteCookie(store, name) {
|
|
68
|
+
const cookie = store.get(name);
|
|
69
|
+
if (!cookie) return;
|
|
70
|
+
const isSecure = name.startsWith('__Secure-') || name.startsWith('__Host-');
|
|
71
|
+
// Using Record<string, unknown> because cookie options structure varies by Next.js cookie store implementation
|
|
72
|
+
const options = {
|
|
73
|
+
httpOnly: true,
|
|
74
|
+
maxAge: 0,
|
|
75
|
+
path: '/',
|
|
76
|
+
sameSite: 'lax'
|
|
77
|
+
};
|
|
78
|
+
if (isSecure) options.secure = true;
|
|
79
|
+
store.set(name, '', options);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
//# sourceMappingURL=after-logout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../src/better-auth/plugin/lib/build-collections/users/hooks/after-logout.ts"],"sourcesContent":["import { baModelKey } from '@/better-auth/plugin/constants';\nimport { getCollectionByModelKey } from '@/better-auth/plugin/helpers/get-collection';\nimport { getPayloadAuth } from '@/better-auth/plugin/lib/get-payload-auth';\nimport { cookies } from 'next/headers';\n\nimport type { CollectionAfterLogoutHook, CollectionSlug, PayloadRequest } from 'payload';\n\nexport function getAfterLogoutHook() {\n const hook: CollectionAfterLogoutHook = async ({ req }) => {\n const store = await cookies();\n const payload = await getPayloadAuth(req.payload.config);\n\n const { dontRememberToken, sessionData, sessionToken } = (await payload.betterAuth.$context)\n .authCookies;\n\n const sessionsSlug = getCollectionByModelKey(req.payload.collections, baModelKey.session).slug;\n\n await deleteSessionFromDb(payload, sessionsSlug, store.get(sessionToken.name)?.value, req);\n\n const baseNames = [\n sessionToken.name,\n sessionData.name,\n dontRememberToken.name,\n //This is a hacky wat to delete the admin session cookie (BETTER AUTH HARDCODED THIS)\n // see https://github.com/better-auth/better-auth/blob/25e82669eed83ba6da063c167e8ae5b7da84ef9f/packages/better-auth/src/plugins/admin/admin.ts#L917C7-L917C23\n 'admin_session',\n ];\n\n const multiBase = `${sessionToken.name}_multi`;\n const multiCandidates = store\n .getAll()\n .filter(c => c.name.startsWith(multiBase) || c.name.startsWith(`__Secure-${multiBase}`))\n .map(c => c.name);\n\n const allNames = [\n ...baseNames.flatMap(n => {\n const clean = n.replace(/^__Secure-/, '');\n return [clean, `__Secure-${clean}`];\n }),\n ...multiCandidates,\n ];\n\n allNames.forEach(n => deleteCookie(store, n));\n };\n\n return hook;\n}\n\nasync function deleteSessionFromDb(\n payload: Awaited<ReturnType<typeof getPayloadAuth>>,\n slug: string,\n rawCookieValue: string | undefined,\n req: PayloadRequest\n) {\n if (!rawCookieValue) return;\n const [token] = rawCookieValue.split('.');\n const { docs } = await payload.find({\n collection: slug as CollectionSlug,\n limit: 1,\n req,\n where: { token: { equals: token } },\n });\n const session = docs.at(0);\n if (!session) return;\n try {\n await payload.delete({\n collection: slug as CollectionSlug,\n req,\n where: { id: { equals: session.id } },\n });\n } catch {\n // Ignore errors during session deletion\n }\n}\n\n/**\n * Deleting __Secure-* cookies need to set options.secure = true\n */\nfunction deleteCookie(store: Awaited<ReturnType<typeof cookies>>, name: string) {\n const cookie = store.get(name);\n if (!cookie) return;\n\n const isSecure = name.startsWith('__Secure-') || name.startsWith('__Host-');\n\n // Using Record<string, unknown> because cookie options structure varies by Next.js cookie store implementation\n const options: /* Using Record<string, unknown> because cookie options structure varies by Next.js cookie store implementation */ Record<\n string,\n unknown\n > = {\n httpOnly: true,\n maxAge: 0,\n path: '/',\n sameSite: 'lax',\n };\n\n if (isSecure) options.secure = true;\n\n store.set(name, '', options);\n}\n"],"names":["baModelKey","getCollectionByModelKey","getPayloadAuth","cookies","getAfterLogoutHook","hook","req","store","payload","config","dontRememberToken","sessionData","sessionToken","betterAuth","$context","authCookies","sessionsSlug","collections","session","slug","deleteSessionFromDb","get","name","value","baseNames","multiBase","multiCandidates","getAll","filter","c","startsWith","map","allNames","flatMap","n","clean","replace","forEach","deleteCookie","rawCookieValue","token","split","docs","find","collection","limit","where","equals","at","delete","id","cookie","isSecure","options","httpOnly","maxAge","path","sameSite","secure","set"],"mappings":"AAAA,SAASA,UAAU,QAAQ,iCAAiC;AAC5D,SAASC,uBAAuB,QAAQ,8CAA8C;AACtF,SAASC,cAAc,QAAQ,4CAA4C;AAC3E,SAASC,OAAO,QAAQ,eAAe;AAIvC,OAAO,SAASC;IACd,MAAMC,OAAkC,OAAO,EAAEC,GAAG,EAAE;QACpD,MAAMC,QAAQ,MAAMJ;QACpB,MAAMK,UAAU,MAAMN,eAAeI,IAAIE,OAAO,CAACC,MAAM;QAEvD,MAAM,EAAEC,iBAAiB,EAAEC,WAAW,EAAEC,YAAY,EAAE,GAAG,AAAC,CAAA,MAAMJ,QAAQK,UAAU,CAACC,QAAQ,AAAD,EACvFC,WAAW;QAEd,MAAMC,eAAef,wBAAwBK,IAAIE,OAAO,CAACS,WAAW,EAAEjB,WAAWkB,OAAO,EAAEC,IAAI;QAE9F,MAAMC,oBAAoBZ,SAASQ,cAAcT,MAAMc,GAAG,CAACT,aAAaU,IAAI,GAAGC,OAAOjB;QAEtF,MAAMkB,YAAY;YAChBZ,aAAaU,IAAI;YACjBX,YAAYW,IAAI;YAChBZ,kBAAkBY,IAAI;YACtB,qFAAqF;YACrF,8JAA8J;YAC9J;SACD;QAED,MAAMG,YAAY,GAAGb,aAAaU,IAAI,CAAC,MAAM,CAAC;QAC9C,MAAMI,kBAAkBnB,MACrBoB,MAAM,GACNC,MAAM,CAACC,CAAAA,IAAKA,EAAEP,IAAI,CAACQ,UAAU,CAACL,cAAcI,EAAEP,IAAI,CAACQ,UAAU,CAAC,CAAC,SAAS,EAAEL,WAAW,GACrFM,GAAG,CAACF,CAAAA,IAAKA,EAAEP,IAAI;QAElB,MAAMU,WAAW;eACZR,UAAUS,OAAO,CAACC,CAAAA;gBACnB,MAAMC,QAAQD,EAAEE,OAAO,CAAC,cAAc;gBACtC,OAAO;oBAACD;oBAAO,CAAC,SAAS,EAAEA,OAAO;iBAAC;YACrC;eACGT;SACJ;QAEDM,SAASK,OAAO,CAACH,CAAAA,IAAKI,aAAa/B,OAAO2B;IAC5C;IAEA,OAAO7B;AACT;AAEA,eAAee,oBACbZ,OAAmD,EACnDW,IAAY,EACZoB,cAAkC,EAClCjC,GAAmB;IAEnB,IAAI,CAACiC,gBAAgB;IACrB,MAAM,CAACC,MAAM,GAAGD,eAAeE,KAAK,CAAC;IACrC,MAAM,EAAEC,IAAI,EAAE,GAAG,MAAMlC,QAAQmC,IAAI,CAAC;QAClCC,YAAYzB;QACZ0B,OAAO;QACPvC;QACAwC,OAAO;YAAEN,OAAO;gBAAEO,QAAQP;YAAM;QAAE;IACpC;IACA,MAAMtB,UAAUwB,KAAKM,EAAE,CAAC;IACxB,IAAI,CAAC9B,SAAS;IACd,IAAI;QACF,MAAMV,QAAQyC,MAAM,CAAC;YACnBL,YAAYzB;YACZb;YACAwC,OAAO;gBAAEI,IAAI;oBAAEH,QAAQ7B,QAAQgC,EAAE;gBAAC;YAAE;QACtC;IACF,EAAE,OAAM;IACN,wCAAwC;IAC1C;AACF;AAEA;;CAEC,GACD,SAASZ,aAAa/B,KAA0C,EAAEe,IAAY;IAC5E,MAAM6B,SAAS5C,MAAMc,GAAG,CAACC;IACzB,IAAI,CAAC6B,QAAQ;IAEb,MAAMC,WAAW9B,KAAKQ,UAAU,CAAC,gBAAgBR,KAAKQ,UAAU,CAAC;IAEjE,+GAA+G;IAC/G,MAAMuB,UAGF;QACFC,UAAU;QACVC,QAAQ;QACRC,MAAM;QACNC,UAAU;IACZ;IAEA,IAAIL,UAAUC,QAAQK,MAAM,GAAG;IAE/BnD,MAAMoD,GAAG,CAACrC,MAAM,IAAI+B;AACtB"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { baModelKey } from "@/better-auth/plugin/constants";
|
|
2
|
+
import { getCollectionByModelKey } from "@/better-auth/plugin/helpers/get-collection";
|
|
3
|
+
import { commitTransaction, initTransaction, killTransaction } from "payload";
|
|
4
|
+
export function getBeforeDeleteHook() {
|
|
5
|
+
const hook = async ({ req, id })=>{
|
|
6
|
+
const collections = req.payload.collections;
|
|
7
|
+
const accountsSlug = getCollectionByModelKey(collections, baModelKey.account).slug;
|
|
8
|
+
const sessionsSlug = getCollectionByModelKey(collections, baModelKey.session).slug;
|
|
9
|
+
const verificationsSlug = getCollectionByModelKey(collections, baModelKey.verification).slug;
|
|
10
|
+
try {
|
|
11
|
+
const { payload } = req;
|
|
12
|
+
const userId = id;
|
|
13
|
+
const shouldCommit = await initTransaction(req);
|
|
14
|
+
await payload.delete({
|
|
15
|
+
collection: accountsSlug,
|
|
16
|
+
where: {
|
|
17
|
+
user: {
|
|
18
|
+
equals: userId
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
req
|
|
22
|
+
});
|
|
23
|
+
await payload.delete({
|
|
24
|
+
collection: sessionsSlug,
|
|
25
|
+
where: {
|
|
26
|
+
user: {
|
|
27
|
+
equals: userId
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
req
|
|
31
|
+
});
|
|
32
|
+
await payload.delete({
|
|
33
|
+
collection: verificationsSlug,
|
|
34
|
+
where: {
|
|
35
|
+
value: {
|
|
36
|
+
like: `"${userId}"`
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
req
|
|
40
|
+
});
|
|
41
|
+
if (shouldCommit) {
|
|
42
|
+
await commitTransaction(req);
|
|
43
|
+
}
|
|
44
|
+
return;
|
|
45
|
+
} catch (error) {
|
|
46
|
+
await killTransaction(req);
|
|
47
|
+
console.error('Error in user afterDelete hook:', error);
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
return hook;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
//# sourceMappingURL=before-delete.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../src/better-auth/plugin/lib/build-collections/users/hooks/before-delete.ts"],"sourcesContent":["import { baModelKey } from '@/better-auth/plugin/constants';\nimport { getCollectionByModelKey } from '@/better-auth/plugin/helpers/get-collection';\nimport {\n type CollectionBeforeDeleteHook,\n type CollectionSlug,\n commitTransaction,\n initTransaction,\n killTransaction,\n} from 'payload';\n\nexport function getBeforeDeleteHook(): CollectionBeforeDeleteHook {\n const hook: CollectionBeforeDeleteHook = async ({ req, id }) => {\n const collections = req.payload.collections;\n const accountsSlug = getCollectionByModelKey(collections, baModelKey.account).slug;\n const sessionsSlug = getCollectionByModelKey(collections, baModelKey.session).slug;\n const verificationsSlug = getCollectionByModelKey(collections, baModelKey.verification).slug;\n try {\n const { payload } = req;\n const userId = id;\n\n const shouldCommit = await initTransaction(req);\n\n await payload.delete({\n collection: accountsSlug as CollectionSlug,\n where: {\n user: {\n equals: userId,\n },\n },\n req,\n });\n\n await payload.delete({\n collection: sessionsSlug as CollectionSlug,\n where: {\n user: {\n equals: userId,\n },\n },\n req,\n });\n\n await payload.delete({\n collection: verificationsSlug as CollectionSlug,\n where: {\n value: {\n like: `\"${userId}\"`,\n },\n },\n req,\n });\n\n if (shouldCommit) {\n await commitTransaction(req);\n }\n\n return;\n } catch (error) {\n await killTransaction(req);\n console.error('Error in user afterDelete hook:', error);\n return;\n }\n };\n\n return hook;\n}\n"],"names":["baModelKey","getCollectionByModelKey","commitTransaction","initTransaction","killTransaction","getBeforeDeleteHook","hook","req","id","collections","payload","accountsSlug","account","slug","sessionsSlug","session","verificationsSlug","verification","userId","shouldCommit","delete","collection","where","user","equals","value","like","error","console"],"mappings":"AAAA,SAASA,UAAU,QAAQ,iCAAiC;AAC5D,SAASC,uBAAuB,QAAQ,8CAA8C;AACtF,SAGEC,iBAAiB,EACjBC,eAAe,EACfC,eAAe,QACV,UAAU;AAEjB,OAAO,SAASC;IACd,MAAMC,OAAmC,OAAO,EAAEC,GAAG,EAAEC,EAAE,EAAE;QACzD,MAAMC,cAAcF,IAAIG,OAAO,CAACD,WAAW;QAC3C,MAAME,eAAeV,wBAAwBQ,aAAaT,WAAWY,OAAO,EAAEC,IAAI;QAClF,MAAMC,eAAeb,wBAAwBQ,aAAaT,WAAWe,OAAO,EAAEF,IAAI;QAClF,MAAMG,oBAAoBf,wBAAwBQ,aAAaT,WAAWiB,YAAY,EAAEJ,IAAI;QAC5F,IAAI;YACF,MAAM,EAAEH,OAAO,EAAE,GAAGH;YACpB,MAAMW,SAASV;YAEf,MAAMW,eAAe,MAAMhB,gBAAgBI;YAE3C,MAAMG,QAAQU,MAAM,CAAC;gBACnBC,YAAYV;gBACZW,OAAO;oBACLC,MAAM;wBACJC,QAAQN;oBACV;gBACF;gBACAX;YACF;YAEA,MAAMG,QAAQU,MAAM,CAAC;gBACnBC,YAAYP;gBACZQ,OAAO;oBACLC,MAAM;wBACJC,QAAQN;oBACV;gBACF;gBACAX;YACF;YAEA,MAAMG,QAAQU,MAAM,CAAC;gBACnBC,YAAYL;gBACZM,OAAO;oBACLG,OAAO;wBACLC,MAAM,CAAC,CAAC,EAAER,OAAO,CAAC,CAAC;oBACrB;gBACF;gBACAX;YACF;YAEA,IAAIY,cAAc;gBAChB,MAAMjB,kBAAkBK;YAC1B;YAEA;QACF,EAAE,OAAOoB,OAAO;YACd,MAAMvB,gBAAgBG;YACtBqB,QAAQD,KAAK,CAAC,mCAAmCA;YACjD;QACF;IACF;IAEA,OAAOrB;AACT"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { BetterAuthOptions } from '@/better-auth/plugin/types';
|
|
2
|
+
import { type CollectionBeforeLoginHook } from 'payload';
|
|
3
|
+
/**
|
|
4
|
+
* This hook blocks login attempts if email verification is required and the user's email is not verified
|
|
5
|
+
*/
|
|
6
|
+
export declare function getBeforeLoginHook(betterAuthOptions: BetterAuthOptions): CollectionBeforeLoginHook;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { APIError } from "payload";
|
|
2
|
+
/**
|
|
3
|
+
* This hook blocks login attempts if email verification is required and the user's email is not verified
|
|
4
|
+
*/ export function getBeforeLoginHook(betterAuthOptions) {
|
|
5
|
+
const hook = async ({ user })=>{
|
|
6
|
+
const requireEmailVerification = betterAuthOptions.emailAndPassword?.requireEmailVerification ?? false;
|
|
7
|
+
if (requireEmailVerification && !user.emailVerified) {
|
|
8
|
+
throw new APIError('Email verification required. Please verify your email before logging in.', 403);
|
|
9
|
+
}
|
|
10
|
+
return user;
|
|
11
|
+
};
|
|
12
|
+
return hook;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
//# sourceMappingURL=before-login.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../src/better-auth/plugin/lib/build-collections/users/hooks/before-login.ts"],"sourcesContent":["import type { BetterAuthOptions } from '@/better-auth/plugin/types';\nimport { APIError, type CollectionBeforeLoginHook } from 'payload';\n/**\n * This hook blocks login attempts if email verification is required and the user's email is not verified\n */\nexport function getBeforeLoginHook(betterAuthOptions: BetterAuthOptions) {\n const hook: CollectionBeforeLoginHook = async ({ user }) => {\n const requireEmailVerification =\n betterAuthOptions.emailAndPassword?.requireEmailVerification ?? false;\n\n if (requireEmailVerification && !user.emailVerified) {\n throw new APIError(\n 'Email verification required. Please verify your email before logging in.',\n 403\n );\n }\n\n return user;\n };\n\n return hook;\n}\n"],"names":["APIError","getBeforeLoginHook","betterAuthOptions","hook","user","requireEmailVerification","emailAndPassword","emailVerified"],"mappings":"AACA,SAASA,QAAQ,QAAwC,UAAU;AACnE;;CAEC,GACD,OAAO,SAASC,mBAAmBC,iBAAoC;IACrE,MAAMC,OAAkC,OAAO,EAAEC,IAAI,EAAE;QACrD,MAAMC,2BACJH,kBAAkBI,gBAAgB,EAAED,4BAA4B;QAElE,IAAIA,4BAA4B,CAACD,KAAKG,aAAa,EAAE;YACnD,MAAM,IAAIP,SACR,4EACA;QAEJ;QAEA,OAAOI;IACT;IAEA,OAAOD;AACT"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../src/better-auth/plugin/lib/build-collections/users/hooks/index.ts"],"sourcesContent":["export * from './after-login';\nexport * from './after-logout';\nexport * from './before-delete';\nexport * from './before-login';\nexport * from './on-verified-change';\nexport * from './sync-account';\n"],"names":[],"mappings":"AAAA,cAAc,gBAAgB;AAC9B,cAAc,iBAAiB;AAC/B,cAAc,kBAAkB;AAChC,cAAc,iBAAiB;AAC/B,cAAc,uBAAuB;AACrC,cAAc,iBAAiB"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export function getOnVerifiedChangeHook() {
|
|
2
|
+
const hook = async ({ data, originalDoc })=>{
|
|
3
|
+
const isVerifiedChangingToTrue = !!data._verified && !originalDoc?._verified;
|
|
4
|
+
const isEmailVerifiedChangingToTrue = !!data.emailVerified && !originalDoc?.emailVerified;
|
|
5
|
+
if (!isVerifiedChangingToTrue && !isEmailVerifiedChangingToTrue) {
|
|
6
|
+
return data;
|
|
7
|
+
}
|
|
8
|
+
return {
|
|
9
|
+
...data,
|
|
10
|
+
_verified: true,
|
|
11
|
+
emailVerified: true
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
return hook;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
//# sourceMappingURL=on-verified-change.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../src/better-auth/plugin/lib/build-collections/users/hooks/on-verified-change.ts"],"sourcesContent":["import type { CollectionBeforeChangeHook } from 'payload';\n\nexport function getOnVerifiedChangeHook() {\n const hook: CollectionBeforeChangeHook = async ({ data, originalDoc }) => {\n const isVerifiedChangingToTrue = !!data._verified && !originalDoc?._verified;\n const isEmailVerifiedChangingToTrue = !!data.emailVerified && !originalDoc?.emailVerified;\n\n if (!isVerifiedChangingToTrue && !isEmailVerifiedChangingToTrue) {\n return data;\n }\n\n return {\n ...data,\n _verified: true,\n emailVerified: true,\n } as typeof data;\n };\n\n return hook;\n}\n"],"names":["getOnVerifiedChangeHook","hook","data","originalDoc","isVerifiedChangingToTrue","_verified","isEmailVerifiedChangingToTrue","emailVerified"],"mappings":"AAEA,OAAO,SAASA;IACd,MAAMC,OAAmC,OAAO,EAAEC,IAAI,EAAEC,WAAW,EAAE;QACnE,MAAMC,2BAA2B,CAAC,CAACF,KAAKG,SAAS,IAAI,CAACF,aAAaE;QACnE,MAAMC,gCAAgC,CAAC,CAACJ,KAAKK,aAAa,IAAI,CAACJ,aAAaI;QAE5E,IAAI,CAACH,4BAA4B,CAACE,+BAA+B;YAC/D,OAAOJ;QACT;QAEA,OAAO;YACL,GAAGA,IAAI;YACPG,WAAW;YACXE,eAAe;QACjB;IACF;IAEA,OAAON;AACT"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { BETTER_AUTH_CONTEXT_KEY } from "@/better-auth/adapter";
|
|
2
|
+
import { baModelKey } from "@/better-auth/plugin/constants";
|
|
3
|
+
import { getCollectionByModelKey, getCollectionFieldNameByFieldKey } from "@/better-auth/plugin/helpers/get-collection";
|
|
4
|
+
export function getSyncAccountHook() {
|
|
5
|
+
const hook = async ({ context, doc, operation, req })=>{
|
|
6
|
+
if (context?.syncPasswordToUser) return doc;
|
|
7
|
+
if (operation !== 'create' && operation !== 'update') return doc;
|
|
8
|
+
const collections = req.payload.collections;
|
|
9
|
+
const userCollection = getCollectionByModelKey(collections, baModelKey.user);
|
|
10
|
+
const accountCollection = getCollectionByModelKey(collections, baModelKey.account);
|
|
11
|
+
const userIdFieldName = getCollectionFieldNameByFieldKey(accountCollection, baModelKey.account, 'userId');
|
|
12
|
+
const accountIdFieldName = getCollectionFieldNameByFieldKey(accountCollection, baModelKey.account, 'accountId');
|
|
13
|
+
const providerIdFieldName = getCollectionFieldNameByFieldKey(accountCollection, baModelKey.account, 'providerId');
|
|
14
|
+
const passwordFieldName = getCollectionFieldNameByFieldKey(accountCollection, baModelKey.account, 'password');
|
|
15
|
+
const user = await req.payload.findByID({
|
|
16
|
+
collection: userCollection.slug,
|
|
17
|
+
depth: 0,
|
|
18
|
+
id: doc.id,
|
|
19
|
+
req,
|
|
20
|
+
showHiddenFields: true
|
|
21
|
+
});
|
|
22
|
+
const userAny = user;
|
|
23
|
+
if (!userAny || !userAny.hash || !userAny.salt) return doc;
|
|
24
|
+
const passwordValue = `${userAny.salt}:${userAny.hash}`;
|
|
25
|
+
if (operation === 'create' && !(BETTER_AUTH_CONTEXT_KEY in context)) {
|
|
26
|
+
try {
|
|
27
|
+
await req.payload.create({
|
|
28
|
+
collection: accountCollection.slug,
|
|
29
|
+
context: {
|
|
30
|
+
syncAccountHook: true
|
|
31
|
+
},
|
|
32
|
+
data: {
|
|
33
|
+
[accountIdFieldName]: doc.id.toString(),
|
|
34
|
+
[passwordFieldName]: passwordValue,
|
|
35
|
+
[providerIdFieldName]: 'credential',
|
|
36
|
+
[userIdFieldName]: doc.id
|
|
37
|
+
},
|
|
38
|
+
req
|
|
39
|
+
});
|
|
40
|
+
} catch (error) {
|
|
41
|
+
console.error('Failed to create account for user:', error);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
if (operation === 'update') {
|
|
45
|
+
try {
|
|
46
|
+
const accounts = await req.payload.find({
|
|
47
|
+
collection: accountCollection.slug,
|
|
48
|
+
context: {
|
|
49
|
+
syncAccountHook: true
|
|
50
|
+
},
|
|
51
|
+
depth: 0,
|
|
52
|
+
req,
|
|
53
|
+
where: {
|
|
54
|
+
and: [
|
|
55
|
+
{
|
|
56
|
+
[userIdFieldName]: {
|
|
57
|
+
equals: doc.id
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
[providerIdFieldName]: {
|
|
62
|
+
equals: 'credential'
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
]
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
const account = accounts.docs.at(0);
|
|
69
|
+
if (account) {
|
|
70
|
+
await req.payload.update({
|
|
71
|
+
collection: accountCollection.slug,
|
|
72
|
+
context: {
|
|
73
|
+
syncAccountHook: true
|
|
74
|
+
},
|
|
75
|
+
data: {
|
|
76
|
+
[passwordFieldName]: passwordValue
|
|
77
|
+
},
|
|
78
|
+
id: account.id,
|
|
79
|
+
req
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
} catch (error) {
|
|
83
|
+
console.error('Failed to sync hash/salt to account:', error);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return doc;
|
|
87
|
+
};
|
|
88
|
+
return hook;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
//# sourceMappingURL=sync-account.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../src/better-auth/plugin/lib/build-collections/users/hooks/sync-account.ts"],"sourcesContent":["import { BETTER_AUTH_CONTEXT_KEY } from '@/better-auth/adapter';\nimport { baModelKey } from '@/better-auth/plugin/constants';\nimport {\n getCollectionByModelKey,\n getCollectionFieldNameByFieldKey,\n} from '@/better-auth/plugin/helpers/get-collection';\n\nimport type { CollectionAfterChangeHook, CollectionSlug } from 'payload';\n\nexport function getSyncAccountHook(): CollectionAfterChangeHook {\n const hook: CollectionAfterChangeHook = async ({ context, doc, operation, req }) => {\n if (context?.syncPasswordToUser) return doc;\n\n if (operation !== 'create' && operation !== 'update') return doc;\n\n const collections = req.payload.collections;\n const userCollection = getCollectionByModelKey(collections, baModelKey.user);\n const accountCollection = getCollectionByModelKey(collections, baModelKey.account);\n\n const userIdFieldName = getCollectionFieldNameByFieldKey(\n accountCollection,\n baModelKey.account,\n 'userId'\n );\n const accountIdFieldName = getCollectionFieldNameByFieldKey(\n accountCollection,\n baModelKey.account,\n 'accountId'\n );\n const providerIdFieldName = getCollectionFieldNameByFieldKey(\n accountCollection,\n baModelKey.account,\n 'providerId'\n );\n const passwordFieldName = getCollectionFieldNameByFieldKey(\n accountCollection,\n baModelKey.account,\n 'password'\n );\n\n const user = await req.payload.findByID({\n collection: userCollection.slug as unknown as CollectionSlug,\n depth: 0,\n id: doc.id,\n req,\n showHiddenFields: true,\n });\n\n const userAny = user as any;\n if (!userAny || !userAny.hash || !userAny.salt) return doc;\n\n const passwordValue = `${userAny.salt}:${userAny.hash}`;\n\n if (operation === 'create' && !(BETTER_AUTH_CONTEXT_KEY in context)) {\n try {\n await req.payload.create({\n collection: accountCollection.slug as unknown as CollectionSlug,\n context: { syncAccountHook: true },\n data: {\n [accountIdFieldName]: doc.id.toString(),\n [passwordFieldName]: passwordValue,\n [providerIdFieldName]: 'credential',\n [userIdFieldName]: doc.id,\n },\n req,\n });\n } catch (error) {\n console.error('Failed to create account for user:', error);\n }\n }\n\n if (operation === 'update') {\n try {\n const accounts = await req.payload.find({\n collection: accountCollection.slug as unknown as CollectionSlug,\n context: { syncAccountHook: true },\n depth: 0,\n req,\n where: {\n and: [\n { [userIdFieldName]: { equals: doc.id } },\n { [providerIdFieldName]: { equals: 'credential' } },\n ],\n },\n });\n\n const account = accounts.docs.at(0);\n if (account) {\n await req.payload.update({\n collection: accountCollection.slug as unknown as CollectionSlug,\n context: { syncAccountHook: true },\n data: {\n [passwordFieldName]: passwordValue,\n },\n id: account.id,\n req,\n });\n }\n } catch (error) {\n console.error('Failed to sync hash/salt to account:', error);\n }\n }\n\n return doc;\n };\n\n return hook as CollectionAfterChangeHook;\n}\n"],"names":["BETTER_AUTH_CONTEXT_KEY","baModelKey","getCollectionByModelKey","getCollectionFieldNameByFieldKey","getSyncAccountHook","hook","context","doc","operation","req","syncPasswordToUser","collections","payload","userCollection","user","accountCollection","account","userIdFieldName","accountIdFieldName","providerIdFieldName","passwordFieldName","findByID","collection","slug","depth","id","showHiddenFields","userAny","hash","salt","passwordValue","create","syncAccountHook","data","toString","error","console","accounts","find","where","and","equals","docs","at","update"],"mappings":"AAAA,SAASA,uBAAuB,QAAQ,wBAAwB;AAChE,SAASC,UAAU,QAAQ,iCAAiC;AAC5D,SACEC,uBAAuB,EACvBC,gCAAgC,QAC3B,8CAA8C;AAIrD,OAAO,SAASC;IACd,MAAMC,OAAkC,OAAO,EAAEC,OAAO,EAAEC,GAAG,EAAEC,SAAS,EAAEC,GAAG,EAAE;QAC7E,IAAIH,SAASI,oBAAoB,OAAOH;QAExC,IAAIC,cAAc,YAAYA,cAAc,UAAU,OAAOD;QAE7D,MAAMI,cAAcF,IAAIG,OAAO,CAACD,WAAW;QAC3C,MAAME,iBAAiBX,wBAAwBS,aAAaV,WAAWa,IAAI;QAC3E,MAAMC,oBAAoBb,wBAAwBS,aAAaV,WAAWe,OAAO;QAEjF,MAAMC,kBAAkBd,iCACtBY,mBACAd,WAAWe,OAAO,EAClB;QAEF,MAAME,qBAAqBf,iCACzBY,mBACAd,WAAWe,OAAO,EAClB;QAEF,MAAMG,sBAAsBhB,iCAC1BY,mBACAd,WAAWe,OAAO,EAClB;QAEF,MAAMI,oBAAoBjB,iCACxBY,mBACAd,WAAWe,OAAO,EAClB;QAGF,MAAMF,OAAO,MAAML,IAAIG,OAAO,CAACS,QAAQ,CAAC;YACtCC,YAAYT,eAAeU,IAAI;YAC/BC,OAAO;YACPC,IAAIlB,IAAIkB,EAAE;YACVhB;YACAiB,kBAAkB;QACpB;QAEA,MAAMC,UAAUb;QAChB,IAAI,CAACa,WAAW,CAACA,QAAQC,IAAI,IAAI,CAACD,QAAQE,IAAI,EAAE,OAAOtB;QAEvD,MAAMuB,gBAAgB,GAAGH,QAAQE,IAAI,CAAC,CAAC,EAAEF,QAAQC,IAAI,EAAE;QAEvD,IAAIpB,cAAc,YAAY,CAAER,CAAAA,2BAA2BM,OAAM,GAAI;YACnE,IAAI;gBACF,MAAMG,IAAIG,OAAO,CAACmB,MAAM,CAAC;oBACvBT,YAAYP,kBAAkBQ,IAAI;oBAClCjB,SAAS;wBAAE0B,iBAAiB;oBAAK;oBACjCC,MAAM;wBACJ,CAACf,mBAAmB,EAAEX,IAAIkB,EAAE,CAACS,QAAQ;wBACrC,CAACd,kBAAkB,EAAEU;wBACrB,CAACX,oBAAoB,EAAE;wBACvB,CAACF,gBAAgB,EAAEV,IAAIkB,EAAE;oBAC3B;oBACAhB;gBACF;YACF,EAAE,OAAO0B,OAAO;gBACdC,QAAQD,KAAK,CAAC,sCAAsCA;YACtD;QACF;QAEA,IAAI3B,cAAc,UAAU;YAC1B,IAAI;gBACF,MAAM6B,WAAW,MAAM5B,IAAIG,OAAO,CAAC0B,IAAI,CAAC;oBACtChB,YAAYP,kBAAkBQ,IAAI;oBAClCjB,SAAS;wBAAE0B,iBAAiB;oBAAK;oBACjCR,OAAO;oBACPf;oBACA8B,OAAO;wBACLC,KAAK;4BACH;gCAAE,CAACvB,gBAAgB,EAAE;oCAAEwB,QAAQlC,IAAIkB,EAAE;gCAAC;4BAAE;4BACxC;gCAAE,CAACN,oBAAoB,EAAE;oCAAEsB,QAAQ;gCAAa;4BAAE;yBACnD;oBACH;gBACF;gBAEA,MAAMzB,UAAUqB,SAASK,IAAI,CAACC,EAAE,CAAC;gBACjC,IAAI3B,SAAS;oBACX,MAAMP,IAAIG,OAAO,CAACgC,MAAM,CAAC;wBACvBtB,YAAYP,kBAAkBQ,IAAI;wBAClCjB,SAAS;4BAAE0B,iBAAiB;wBAAK;wBACjCC,MAAM;4BACJ,CAACb,kBAAkB,EAAEU;wBACvB;wBACAL,IAAIT,QAAQS,EAAE;wBACdhB;oBACF;gBACF;YACF,EAAE,OAAO0B,OAAO;gBACdC,QAAQD,KAAK,CAAC,wCAAwCA;YACxD;QACF;QAEA,OAAO5B;IACT;IAEA,OAAOF;AACT"}
|