@hammadj/better-auth 1.5.0-beta.10
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/README.md +33 -0
- package/dist/_virtual/rolldown_runtime.mjs +36 -0
- package/dist/adapters/drizzle-adapter/index.d.mts +1 -0
- package/dist/adapters/drizzle-adapter/index.mjs +3 -0
- package/dist/adapters/index.d.mts +23 -0
- package/dist/adapters/index.mjs +13 -0
- package/dist/adapters/index.mjs.map +1 -0
- package/dist/adapters/kysely-adapter/index.d.mts +1 -0
- package/dist/adapters/kysely-adapter/index.mjs +3 -0
- package/dist/adapters/memory-adapter/index.d.mts +1 -0
- package/dist/adapters/memory-adapter/index.mjs +3 -0
- package/dist/adapters/mongodb-adapter/index.d.mts +1 -0
- package/dist/adapters/mongodb-adapter/index.mjs +3 -0
- package/dist/adapters/prisma-adapter/index.d.mts +1 -0
- package/dist/adapters/prisma-adapter/index.mjs +3 -0
- package/dist/api/index.d.mts +40 -0
- package/dist/api/index.mjs +205 -0
- package/dist/api/index.mjs.map +1 -0
- package/dist/api/middlewares/index.d.mts +1 -0
- package/dist/api/middlewares/index.mjs +3 -0
- package/dist/api/middlewares/origin-check.d.mts +17 -0
- package/dist/api/middlewares/origin-check.mjs +140 -0
- package/dist/api/middlewares/origin-check.mjs.map +1 -0
- package/dist/api/rate-limiter/index.mjs +177 -0
- package/dist/api/rate-limiter/index.mjs.map +1 -0
- package/dist/api/routes/account.d.mts +10 -0
- package/dist/api/routes/account.mjs +493 -0
- package/dist/api/routes/account.mjs.map +1 -0
- package/dist/api/routes/callback.d.mts +5 -0
- package/dist/api/routes/callback.mjs +178 -0
- package/dist/api/routes/callback.mjs.map +1 -0
- package/dist/api/routes/email-verification.d.mts +29 -0
- package/dist/api/routes/email-verification.mjs +301 -0
- package/dist/api/routes/email-verification.mjs.map +1 -0
- package/dist/api/routes/error.d.mts +5 -0
- package/dist/api/routes/error.mjs +386 -0
- package/dist/api/routes/error.mjs.map +1 -0
- package/dist/api/routes/index.d.mts +11 -0
- package/dist/api/routes/index.mjs +13 -0
- package/dist/api/routes/ok.d.mts +5 -0
- package/dist/api/routes/ok.mjs +30 -0
- package/dist/api/routes/ok.mjs.map +1 -0
- package/dist/api/routes/password.d.mts +8 -0
- package/dist/api/routes/password.mjs +198 -0
- package/dist/api/routes/password.mjs.map +1 -0
- package/dist/api/routes/session.d.mts +52 -0
- package/dist/api/routes/session.mjs +478 -0
- package/dist/api/routes/session.mjs.map +1 -0
- package/dist/api/routes/sign-in.d.mts +8 -0
- package/dist/api/routes/sign-in.mjs +262 -0
- package/dist/api/routes/sign-in.mjs.map +1 -0
- package/dist/api/routes/sign-out.d.mts +5 -0
- package/dist/api/routes/sign-out.mjs +33 -0
- package/dist/api/routes/sign-out.mjs.map +1 -0
- package/dist/api/routes/sign-up.d.mts +7 -0
- package/dist/api/routes/sign-up.mjs +227 -0
- package/dist/api/routes/sign-up.mjs.map +1 -0
- package/dist/api/routes/update-user.d.mts +12 -0
- package/dist/api/routes/update-user.mjs +493 -0
- package/dist/api/routes/update-user.mjs.map +1 -0
- package/dist/api/state/oauth.d.mts +5 -0
- package/dist/api/state/oauth.mjs +8 -0
- package/dist/api/state/oauth.mjs.map +1 -0
- package/dist/api/state/should-session-refresh.d.mts +13 -0
- package/dist/api/state/should-session-refresh.mjs +16 -0
- package/dist/api/state/should-session-refresh.mjs.map +1 -0
- package/dist/api/to-auth-endpoints.mjs +197 -0
- package/dist/api/to-auth-endpoints.mjs.map +1 -0
- package/dist/auth/base.mjs +44 -0
- package/dist/auth/base.mjs.map +1 -0
- package/dist/auth/full.d.mts +30 -0
- package/dist/auth/full.mjs +32 -0
- package/dist/auth/full.mjs.map +1 -0
- package/dist/auth/minimal.d.mts +12 -0
- package/dist/auth/minimal.mjs +14 -0
- package/dist/auth/minimal.mjs.map +1 -0
- package/dist/auth/trusted-origins.mjs +31 -0
- package/dist/auth/trusted-origins.mjs.map +1 -0
- package/dist/client/broadcast-channel.d.mts +20 -0
- package/dist/client/broadcast-channel.mjs +46 -0
- package/dist/client/broadcast-channel.mjs.map +1 -0
- package/dist/client/config.mjs +90 -0
- package/dist/client/config.mjs.map +1 -0
- package/dist/client/fetch-plugins.mjs +18 -0
- package/dist/client/fetch-plugins.mjs.map +1 -0
- package/dist/client/focus-manager.d.mts +11 -0
- package/dist/client/focus-manager.mjs +32 -0
- package/dist/client/focus-manager.mjs.map +1 -0
- package/dist/client/index.d.mts +30 -0
- package/dist/client/index.mjs +21 -0
- package/dist/client/index.mjs.map +1 -0
- package/dist/client/lynx/index.d.mts +62 -0
- package/dist/client/lynx/index.mjs +24 -0
- package/dist/client/lynx/index.mjs.map +1 -0
- package/dist/client/lynx/lynx-store.d.mts +47 -0
- package/dist/client/lynx/lynx-store.mjs +47 -0
- package/dist/client/lynx/lynx-store.mjs.map +1 -0
- package/dist/client/online-manager.d.mts +12 -0
- package/dist/client/online-manager.mjs +35 -0
- package/dist/client/online-manager.mjs.map +1 -0
- package/dist/client/parser.mjs +73 -0
- package/dist/client/parser.mjs.map +1 -0
- package/dist/client/path-to-object.d.mts +57 -0
- package/dist/client/plugins/index.d.mts +58 -0
- package/dist/client/plugins/index.mjs +33 -0
- package/dist/client/plugins/infer-plugin.d.mts +9 -0
- package/dist/client/plugins/infer-plugin.mjs +11 -0
- package/dist/client/plugins/infer-plugin.mjs.map +1 -0
- package/dist/client/proxy.mjs +79 -0
- package/dist/client/proxy.mjs.map +1 -0
- package/dist/client/query.d.mts +23 -0
- package/dist/client/query.mjs +98 -0
- package/dist/client/query.mjs.map +1 -0
- package/dist/client/react/index.d.mts +63 -0
- package/dist/client/react/index.mjs +24 -0
- package/dist/client/react/index.mjs.map +1 -0
- package/dist/client/react/react-store.d.mts +47 -0
- package/dist/client/react/react-store.mjs +47 -0
- package/dist/client/react/react-store.mjs.map +1 -0
- package/dist/client/session-atom.mjs +29 -0
- package/dist/client/session-atom.mjs.map +1 -0
- package/dist/client/session-refresh.d.mts +28 -0
- package/dist/client/session-refresh.mjs +140 -0
- package/dist/client/session-refresh.mjs.map +1 -0
- package/dist/client/solid/index.d.mts +57 -0
- package/dist/client/solid/index.mjs +22 -0
- package/dist/client/solid/index.mjs.map +1 -0
- package/dist/client/solid/solid-store.mjs +24 -0
- package/dist/client/solid/solid-store.mjs.map +1 -0
- package/dist/client/svelte/index.d.mts +63 -0
- package/dist/client/svelte/index.mjs +20 -0
- package/dist/client/svelte/index.mjs.map +1 -0
- package/dist/client/types.d.mts +58 -0
- package/dist/client/vanilla.d.mts +62 -0
- package/dist/client/vanilla.mjs +20 -0
- package/dist/client/vanilla.mjs.map +1 -0
- package/dist/client/vue/index.d.mts +86 -0
- package/dist/client/vue/index.mjs +38 -0
- package/dist/client/vue/index.mjs.map +1 -0
- package/dist/client/vue/vue-store.mjs +26 -0
- package/dist/client/vue/vue-store.mjs.map +1 -0
- package/dist/context/create-context.mjs +211 -0
- package/dist/context/create-context.mjs.map +1 -0
- package/dist/context/helpers.mjs +62 -0
- package/dist/context/helpers.mjs.map +1 -0
- package/dist/context/init-minimal.mjs +20 -0
- package/dist/context/init-minimal.mjs.map +1 -0
- package/dist/context/init.mjs +22 -0
- package/dist/context/init.mjs.map +1 -0
- package/dist/cookies/cookie-utils.d.mts +29 -0
- package/dist/cookies/cookie-utils.mjs +105 -0
- package/dist/cookies/cookie-utils.mjs.map +1 -0
- package/dist/cookies/index.d.mts +67 -0
- package/dist/cookies/index.mjs +264 -0
- package/dist/cookies/index.mjs.map +1 -0
- package/dist/cookies/session-store.d.mts +36 -0
- package/dist/cookies/session-store.mjs +200 -0
- package/dist/cookies/session-store.mjs.map +1 -0
- package/dist/crypto/buffer.d.mts +8 -0
- package/dist/crypto/buffer.mjs +18 -0
- package/dist/crypto/buffer.mjs.map +1 -0
- package/dist/crypto/index.d.mts +27 -0
- package/dist/crypto/index.mjs +38 -0
- package/dist/crypto/index.mjs.map +1 -0
- package/dist/crypto/jwt.d.mts +8 -0
- package/dist/crypto/jwt.mjs +95 -0
- package/dist/crypto/jwt.mjs.map +1 -0
- package/dist/crypto/password.d.mts +12 -0
- package/dist/crypto/password.mjs +36 -0
- package/dist/crypto/password.mjs.map +1 -0
- package/dist/crypto/random.d.mts +5 -0
- package/dist/crypto/random.mjs +8 -0
- package/dist/crypto/random.mjs.map +1 -0
- package/dist/db/adapter-base.d.mts +8 -0
- package/dist/db/adapter-base.mjs +28 -0
- package/dist/db/adapter-base.mjs.map +1 -0
- package/dist/db/adapter-kysely.d.mts +8 -0
- package/dist/db/adapter-kysely.mjs +21 -0
- package/dist/db/adapter-kysely.mjs.map +1 -0
- package/dist/db/field-converter.d.mts +8 -0
- package/dist/db/field-converter.mjs +21 -0
- package/dist/db/field-converter.mjs.map +1 -0
- package/dist/db/field.d.mts +55 -0
- package/dist/db/field.mjs +11 -0
- package/dist/db/field.mjs.map +1 -0
- package/dist/db/get-migration.d.mts +23 -0
- package/dist/db/get-migration.mjs +339 -0
- package/dist/db/get-migration.mjs.map +1 -0
- package/dist/db/get-schema.d.mts +11 -0
- package/dist/db/get-schema.mjs +39 -0
- package/dist/db/get-schema.mjs.map +1 -0
- package/dist/db/index.d.mts +9 -0
- package/dist/db/index.mjs +36 -0
- package/dist/db/index.mjs.map +1 -0
- package/dist/db/internal-adapter.d.mts +14 -0
- package/dist/db/internal-adapter.mjs +616 -0
- package/dist/db/internal-adapter.mjs.map +1 -0
- package/dist/db/schema.d.mts +26 -0
- package/dist/db/schema.mjs +118 -0
- package/dist/db/schema.mjs.map +1 -0
- package/dist/db/to-zod.d.mts +36 -0
- package/dist/db/to-zod.mjs +26 -0
- package/dist/db/to-zod.mjs.map +1 -0
- package/dist/db/verification-token-storage.mjs +28 -0
- package/dist/db/verification-token-storage.mjs.map +1 -0
- package/dist/db/with-hooks.d.mts +33 -0
- package/dist/db/with-hooks.mjs +159 -0
- package/dist/db/with-hooks.mjs.map +1 -0
- package/dist/index.d.mts +52 -0
- package/dist/index.mjs +26 -0
- package/dist/integrations/next-js.d.mts +14 -0
- package/dist/integrations/next-js.mjs +78 -0
- package/dist/integrations/next-js.mjs.map +1 -0
- package/dist/integrations/node.d.mts +13 -0
- package/dist/integrations/node.mjs +16 -0
- package/dist/integrations/node.mjs.map +1 -0
- package/dist/integrations/solid-start.d.mts +23 -0
- package/dist/integrations/solid-start.mjs +17 -0
- package/dist/integrations/solid-start.mjs.map +1 -0
- package/dist/integrations/svelte-kit.d.mts +29 -0
- package/dist/integrations/svelte-kit.mjs +57 -0
- package/dist/integrations/svelte-kit.mjs.map +1 -0
- package/dist/integrations/tanstack-start-solid.d.mts +22 -0
- package/dist/integrations/tanstack-start-solid.mjs +61 -0
- package/dist/integrations/tanstack-start-solid.mjs.map +1 -0
- package/dist/integrations/tanstack-start.d.mts +22 -0
- package/dist/integrations/tanstack-start.mjs +61 -0
- package/dist/integrations/tanstack-start.mjs.map +1 -0
- package/dist/oauth2/index.d.mts +5 -0
- package/dist/oauth2/index.mjs +7 -0
- package/dist/oauth2/link-account.d.mts +31 -0
- package/dist/oauth2/link-account.mjs +144 -0
- package/dist/oauth2/link-account.mjs.map +1 -0
- package/dist/oauth2/state.d.mts +26 -0
- package/dist/oauth2/state.mjs +51 -0
- package/dist/oauth2/state.mjs.map +1 -0
- package/dist/oauth2/utils.d.mts +8 -0
- package/dist/oauth2/utils.mjs +31 -0
- package/dist/oauth2/utils.mjs.map +1 -0
- package/dist/plugins/access/access.d.mts +30 -0
- package/dist/plugins/access/access.mjs +46 -0
- package/dist/plugins/access/access.mjs.map +1 -0
- package/dist/plugins/access/index.d.mts +3 -0
- package/dist/plugins/access/index.mjs +3 -0
- package/dist/plugins/access/types.d.mts +17 -0
- package/dist/plugins/additional-fields/client.d.mts +14 -0
- package/dist/plugins/additional-fields/client.mjs +11 -0
- package/dist/plugins/additional-fields/client.mjs.map +1 -0
- package/dist/plugins/admin/access/index.d.mts +2 -0
- package/dist/plugins/admin/access/index.mjs +3 -0
- package/dist/plugins/admin/access/statement.d.mts +118 -0
- package/dist/plugins/admin/access/statement.mjs +53 -0
- package/dist/plugins/admin/access/statement.mjs.map +1 -0
- package/dist/plugins/admin/admin.d.mts +14 -0
- package/dist/plugins/admin/admin.mjs +95 -0
- package/dist/plugins/admin/admin.mjs.map +1 -0
- package/dist/plugins/admin/client.d.mts +14 -0
- package/dist/plugins/admin/client.mjs +36 -0
- package/dist/plugins/admin/client.mjs.map +1 -0
- package/dist/plugins/admin/error-codes.d.mts +5 -0
- package/dist/plugins/admin/error-codes.mjs +30 -0
- package/dist/plugins/admin/error-codes.mjs.map +1 -0
- package/dist/plugins/admin/has-permission.mjs +16 -0
- package/dist/plugins/admin/has-permission.mjs.map +1 -0
- package/dist/plugins/admin/index.d.mts +3 -0
- package/dist/plugins/admin/index.mjs +3 -0
- package/dist/plugins/admin/routes.mjs +855 -0
- package/dist/plugins/admin/routes.mjs.map +1 -0
- package/dist/plugins/admin/schema.d.mts +6 -0
- package/dist/plugins/admin/schema.mjs +34 -0
- package/dist/plugins/admin/schema.mjs.map +1 -0
- package/dist/plugins/admin/types.d.mts +89 -0
- package/dist/plugins/anonymous/client.d.mts +9 -0
- package/dist/plugins/anonymous/client.mjs +22 -0
- package/dist/plugins/anonymous/client.mjs.map +1 -0
- package/dist/plugins/anonymous/error-codes.d.mts +5 -0
- package/dist/plugins/anonymous/error-codes.mjs +16 -0
- package/dist/plugins/anonymous/error-codes.mjs.map +1 -0
- package/dist/plugins/anonymous/index.d.mts +14 -0
- package/dist/plugins/anonymous/index.mjs +163 -0
- package/dist/plugins/anonymous/index.mjs.map +1 -0
- package/dist/plugins/anonymous/schema.d.mts +5 -0
- package/dist/plugins/anonymous/schema.mjs +11 -0
- package/dist/plugins/anonymous/schema.mjs.map +1 -0
- package/dist/plugins/anonymous/types.d.mts +68 -0
- package/dist/plugins/api-key/adapter.mjs +468 -0
- package/dist/plugins/api-key/adapter.mjs.map +1 -0
- package/dist/plugins/api-key/client.d.mts +9 -0
- package/dist/plugins/api-key/client.mjs +19 -0
- package/dist/plugins/api-key/client.mjs.map +1 -0
- package/dist/plugins/api-key/error-codes.d.mts +5 -0
- package/dist/plugins/api-key/error-codes.mjs +34 -0
- package/dist/plugins/api-key/error-codes.mjs.map +1 -0
- package/dist/plugins/api-key/index.d.mts +17 -0
- package/dist/plugins/api-key/index.mjs +134 -0
- package/dist/plugins/api-key/index.mjs.map +1 -0
- package/dist/plugins/api-key/rate-limit.mjs +74 -0
- package/dist/plugins/api-key/rate-limit.mjs.map +1 -0
- package/dist/plugins/api-key/routes/create-api-key.mjs +252 -0
- package/dist/plugins/api-key/routes/create-api-key.mjs.map +1 -0
- package/dist/plugins/api-key/routes/delete-all-expired-api-keys.mjs +24 -0
- package/dist/plugins/api-key/routes/delete-all-expired-api-keys.mjs.map +1 -0
- package/dist/plugins/api-key/routes/delete-api-key.mjs +74 -0
- package/dist/plugins/api-key/routes/delete-api-key.mjs.map +1 -0
- package/dist/plugins/api-key/routes/get-api-key.mjs +158 -0
- package/dist/plugins/api-key/routes/get-api-key.mjs.map +1 -0
- package/dist/plugins/api-key/routes/index.mjs +71 -0
- package/dist/plugins/api-key/routes/index.mjs.map +1 -0
- package/dist/plugins/api-key/routes/list-api-keys.mjs +194 -0
- package/dist/plugins/api-key/routes/list-api-keys.mjs.map +1 -0
- package/dist/plugins/api-key/routes/update-api-key.mjs +248 -0
- package/dist/plugins/api-key/routes/update-api-key.mjs.map +1 -0
- package/dist/plugins/api-key/routes/verify-api-key.mjs +223 -0
- package/dist/plugins/api-key/routes/verify-api-key.mjs.map +1 -0
- package/dist/plugins/api-key/schema.d.mts +11 -0
- package/dist/plugins/api-key/schema.mjs +130 -0
- package/dist/plugins/api-key/schema.mjs.map +1 -0
- package/dist/plugins/api-key/types.d.mts +346 -0
- package/dist/plugins/bearer/index.d.mts +25 -0
- package/dist/plugins/bearer/index.mjs +66 -0
- package/dist/plugins/bearer/index.mjs.map +1 -0
- package/dist/plugins/captcha/constants.d.mts +10 -0
- package/dist/plugins/captcha/constants.mjs +22 -0
- package/dist/plugins/captcha/constants.mjs.map +1 -0
- package/dist/plugins/captcha/error-codes.mjs +16 -0
- package/dist/plugins/captcha/error-codes.mjs.map +1 -0
- package/dist/plugins/captcha/index.d.mts +14 -0
- package/dist/plugins/captcha/index.mjs +60 -0
- package/dist/plugins/captcha/index.mjs.map +1 -0
- package/dist/plugins/captcha/types.d.mts +28 -0
- package/dist/plugins/captcha/utils.mjs +11 -0
- package/dist/plugins/captcha/utils.mjs.map +1 -0
- package/dist/plugins/captcha/verify-handlers/captchafox.mjs +27 -0
- package/dist/plugins/captcha/verify-handlers/captchafox.mjs.map +1 -0
- package/dist/plugins/captcha/verify-handlers/cloudflare-turnstile.mjs +25 -0
- package/dist/plugins/captcha/verify-handlers/cloudflare-turnstile.mjs.map +1 -0
- package/dist/plugins/captcha/verify-handlers/google-recaptcha.mjs +29 -0
- package/dist/plugins/captcha/verify-handlers/google-recaptcha.mjs.map +1 -0
- package/dist/plugins/captcha/verify-handlers/h-captcha.mjs +27 -0
- package/dist/plugins/captcha/verify-handlers/h-captcha.mjs.map +1 -0
- package/dist/plugins/captcha/verify-handlers/index.mjs +6 -0
- package/dist/plugins/custom-session/client.d.mts +10 -0
- package/dist/plugins/custom-session/client.mjs +11 -0
- package/dist/plugins/custom-session/client.mjs.map +1 -0
- package/dist/plugins/custom-session/index.d.mts +26 -0
- package/dist/plugins/custom-session/index.mjs +70 -0
- package/dist/plugins/custom-session/index.mjs.map +1 -0
- package/dist/plugins/device-authorization/client.d.mts +5 -0
- package/dist/plugins/device-authorization/client.mjs +18 -0
- package/dist/plugins/device-authorization/client.mjs.map +1 -0
- package/dist/plugins/device-authorization/error-codes.mjs +21 -0
- package/dist/plugins/device-authorization/error-codes.mjs.map +1 -0
- package/dist/plugins/device-authorization/index.d.mts +28 -0
- package/dist/plugins/device-authorization/index.mjs +50 -0
- package/dist/plugins/device-authorization/index.mjs.map +1 -0
- package/dist/plugins/device-authorization/routes.mjs +510 -0
- package/dist/plugins/device-authorization/routes.mjs.map +1 -0
- package/dist/plugins/device-authorization/schema.mjs +57 -0
- package/dist/plugins/device-authorization/schema.mjs.map +1 -0
- package/dist/plugins/email-otp/client.d.mts +7 -0
- package/dist/plugins/email-otp/client.mjs +18 -0
- package/dist/plugins/email-otp/client.mjs.map +1 -0
- package/dist/plugins/email-otp/error-codes.d.mts +5 -0
- package/dist/plugins/email-otp/error-codes.mjs +12 -0
- package/dist/plugins/email-otp/error-codes.mjs.map +1 -0
- package/dist/plugins/email-otp/index.d.mts +14 -0
- package/dist/plugins/email-otp/index.mjs +108 -0
- package/dist/plugins/email-otp/index.mjs.map +1 -0
- package/dist/plugins/email-otp/otp-token.mjs +29 -0
- package/dist/plugins/email-otp/otp-token.mjs.map +1 -0
- package/dist/plugins/email-otp/routes.mjs +564 -0
- package/dist/plugins/email-otp/routes.mjs.map +1 -0
- package/dist/plugins/email-otp/types.d.mts +74 -0
- package/dist/plugins/email-otp/utils.mjs +17 -0
- package/dist/plugins/email-otp/utils.mjs.map +1 -0
- package/dist/plugins/generic-oauth/client.d.mts +19 -0
- package/dist/plugins/generic-oauth/client.mjs +14 -0
- package/dist/plugins/generic-oauth/client.mjs.map +1 -0
- package/dist/plugins/generic-oauth/error-codes.d.mts +5 -0
- package/dist/plugins/generic-oauth/error-codes.mjs +15 -0
- package/dist/plugins/generic-oauth/error-codes.mjs.map +1 -0
- package/dist/plugins/generic-oauth/index.d.mts +34 -0
- package/dist/plugins/generic-oauth/index.mjs +137 -0
- package/dist/plugins/generic-oauth/index.mjs.map +1 -0
- package/dist/plugins/generic-oauth/providers/auth0.d.mts +37 -0
- package/dist/plugins/generic-oauth/providers/auth0.mjs +62 -0
- package/dist/plugins/generic-oauth/providers/auth0.mjs.map +1 -0
- package/dist/plugins/generic-oauth/providers/gumroad.d.mts +32 -0
- package/dist/plugins/generic-oauth/providers/gumroad.mjs +60 -0
- package/dist/plugins/generic-oauth/providers/gumroad.mjs.map +1 -0
- package/dist/plugins/generic-oauth/providers/hubspot.d.mts +37 -0
- package/dist/plugins/generic-oauth/providers/hubspot.mjs +60 -0
- package/dist/plugins/generic-oauth/providers/hubspot.mjs.map +1 -0
- package/dist/plugins/generic-oauth/providers/index.d.mts +9 -0
- package/dist/plugins/generic-oauth/providers/index.mjs +11 -0
- package/dist/plugins/generic-oauth/providers/keycloak.d.mts +37 -0
- package/dist/plugins/generic-oauth/providers/keycloak.mjs +62 -0
- package/dist/plugins/generic-oauth/providers/keycloak.mjs.map +1 -0
- package/dist/plugins/generic-oauth/providers/line.d.mts +55 -0
- package/dist/plugins/generic-oauth/providers/line.mjs +91 -0
- package/dist/plugins/generic-oauth/providers/line.mjs.map +1 -0
- package/dist/plugins/generic-oauth/providers/microsoft-entra-id.d.mts +37 -0
- package/dist/plugins/generic-oauth/providers/microsoft-entra-id.mjs +66 -0
- package/dist/plugins/generic-oauth/providers/microsoft-entra-id.mjs.map +1 -0
- package/dist/plugins/generic-oauth/providers/okta.d.mts +37 -0
- package/dist/plugins/generic-oauth/providers/okta.mjs +62 -0
- package/dist/plugins/generic-oauth/providers/okta.mjs.map +1 -0
- package/dist/plugins/generic-oauth/providers/patreon.d.mts +30 -0
- package/dist/plugins/generic-oauth/providers/patreon.mjs +59 -0
- package/dist/plugins/generic-oauth/providers/patreon.mjs.map +1 -0
- package/dist/plugins/generic-oauth/providers/slack.d.mts +30 -0
- package/dist/plugins/generic-oauth/providers/slack.mjs +61 -0
- package/dist/plugins/generic-oauth/providers/slack.mjs.map +1 -0
- package/dist/plugins/generic-oauth/routes.mjs +394 -0
- package/dist/plugins/generic-oauth/routes.mjs.map +1 -0
- package/dist/plugins/generic-oauth/types.d.mts +145 -0
- package/dist/plugins/haveibeenpwned/index.d.mts +21 -0
- package/dist/plugins/haveibeenpwned/index.mjs +56 -0
- package/dist/plugins/haveibeenpwned/index.mjs.map +1 -0
- package/dist/plugins/index.d.mts +68 -0
- package/dist/plugins/index.mjs +51 -0
- package/dist/plugins/jwt/adapter.mjs +27 -0
- package/dist/plugins/jwt/adapter.mjs.map +1 -0
- package/dist/plugins/jwt/client.d.mts +18 -0
- package/dist/plugins/jwt/client.mjs +19 -0
- package/dist/plugins/jwt/client.mjs.map +1 -0
- package/dist/plugins/jwt/index.d.mts +17 -0
- package/dist/plugins/jwt/index.mjs +202 -0
- package/dist/plugins/jwt/index.mjs.map +1 -0
- package/dist/plugins/jwt/schema.d.mts +5 -0
- package/dist/plugins/jwt/schema.mjs +23 -0
- package/dist/plugins/jwt/schema.mjs.map +1 -0
- package/dist/plugins/jwt/sign.d.mts +57 -0
- package/dist/plugins/jwt/sign.mjs +66 -0
- package/dist/plugins/jwt/sign.mjs.map +1 -0
- package/dist/plugins/jwt/types.d.mts +194 -0
- package/dist/plugins/jwt/utils.d.mts +42 -0
- package/dist/plugins/jwt/utils.mjs +64 -0
- package/dist/plugins/jwt/utils.mjs.map +1 -0
- package/dist/plugins/jwt/verify.d.mts +12 -0
- package/dist/plugins/jwt/verify.mjs +46 -0
- package/dist/plugins/jwt/verify.mjs.map +1 -0
- package/dist/plugins/last-login-method/client.d.mts +18 -0
- package/dist/plugins/last-login-method/client.mjs +32 -0
- package/dist/plugins/last-login-method/client.mjs.map +1 -0
- package/dist/plugins/last-login-method/index.d.mts +52 -0
- package/dist/plugins/last-login-method/index.mjs +77 -0
- package/dist/plugins/last-login-method/index.mjs.map +1 -0
- package/dist/plugins/magic-link/client.d.mts +5 -0
- package/dist/plugins/magic-link/client.mjs +11 -0
- package/dist/plugins/magic-link/client.mjs.map +1 -0
- package/dist/plugins/magic-link/index.d.mts +61 -0
- package/dist/plugins/magic-link/index.mjs +167 -0
- package/dist/plugins/magic-link/index.mjs.map +1 -0
- package/dist/plugins/magic-link/utils.mjs +12 -0
- package/dist/plugins/magic-link/utils.mjs.map +1 -0
- package/dist/plugins/mcp/authorize.mjs +133 -0
- package/dist/plugins/mcp/authorize.mjs.map +1 -0
- package/dist/plugins/mcp/index.d.mts +46 -0
- package/dist/plugins/mcp/index.mjs +717 -0
- package/dist/plugins/mcp/index.mjs.map +1 -0
- package/dist/plugins/multi-session/client.d.mts +8 -0
- package/dist/plugins/multi-session/client.mjs +20 -0
- package/dist/plugins/multi-session/client.mjs.map +1 -0
- package/dist/plugins/multi-session/error-codes.d.mts +5 -0
- package/dist/plugins/multi-session/error-codes.mjs +8 -0
- package/dist/plugins/multi-session/error-codes.mjs.map +1 -0
- package/dist/plugins/multi-session/index.d.mts +22 -0
- package/dist/plugins/multi-session/index.mjs +172 -0
- package/dist/plugins/multi-session/index.mjs.map +1 -0
- package/dist/plugins/oauth-proxy/index.d.mts +39 -0
- package/dist/plugins/oauth-proxy/index.mjs +305 -0
- package/dist/plugins/oauth-proxy/index.mjs.map +1 -0
- package/dist/plugins/oauth-proxy/utils.mjs +44 -0
- package/dist/plugins/oauth-proxy/utils.mjs.map +1 -0
- package/dist/plugins/oidc-provider/authorize.mjs +194 -0
- package/dist/plugins/oidc-provider/authorize.mjs.map +1 -0
- package/dist/plugins/oidc-provider/client.d.mts +8 -0
- package/dist/plugins/oidc-provider/client.mjs +11 -0
- package/dist/plugins/oidc-provider/client.mjs.map +1 -0
- package/dist/plugins/oidc-provider/error.mjs +17 -0
- package/dist/plugins/oidc-provider/error.mjs.map +1 -0
- package/dist/plugins/oidc-provider/index.d.mts +32 -0
- package/dist/plugins/oidc-provider/index.mjs +1093 -0
- package/dist/plugins/oidc-provider/index.mjs.map +1 -0
- package/dist/plugins/oidc-provider/schema.d.mts +26 -0
- package/dist/plugins/oidc-provider/schema.mjs +132 -0
- package/dist/plugins/oidc-provider/schema.mjs.map +1 -0
- package/dist/plugins/oidc-provider/types.d.mts +517 -0
- package/dist/plugins/oidc-provider/utils/prompt.mjs +19 -0
- package/dist/plugins/oidc-provider/utils/prompt.mjs.map +1 -0
- package/dist/plugins/oidc-provider/utils.mjs +15 -0
- package/dist/plugins/oidc-provider/utils.mjs.map +1 -0
- package/dist/plugins/one-tap/client.d.mts +159 -0
- package/dist/plugins/one-tap/client.mjs +214 -0
- package/dist/plugins/one-tap/client.mjs.map +1 -0
- package/dist/plugins/one-tap/index.d.mts +27 -0
- package/dist/plugins/one-tap/index.mjs +96 -0
- package/dist/plugins/one-tap/index.mjs.map +1 -0
- package/dist/plugins/one-time-token/client.d.mts +7 -0
- package/dist/plugins/one-time-token/client.mjs +11 -0
- package/dist/plugins/one-time-token/client.mjs.map +1 -0
- package/dist/plugins/one-time-token/index.d.mts +53 -0
- package/dist/plugins/one-time-token/index.mjs +82 -0
- package/dist/plugins/one-time-token/index.mjs.map +1 -0
- package/dist/plugins/one-time-token/utils.mjs +12 -0
- package/dist/plugins/one-time-token/utils.mjs.map +1 -0
- package/dist/plugins/open-api/generator.d.mts +115 -0
- package/dist/plugins/open-api/generator.mjs +315 -0
- package/dist/plugins/open-api/generator.mjs.map +1 -0
- package/dist/plugins/open-api/index.d.mts +45 -0
- package/dist/plugins/open-api/index.mjs +67 -0
- package/dist/plugins/open-api/index.mjs.map +1 -0
- package/dist/plugins/open-api/logo.mjs +15 -0
- package/dist/plugins/open-api/logo.mjs.map +1 -0
- package/dist/plugins/organization/access/index.d.mts +2 -0
- package/dist/plugins/organization/access/index.mjs +3 -0
- package/dist/plugins/organization/access/statement.d.mts +249 -0
- package/dist/plugins/organization/access/statement.mjs +81 -0
- package/dist/plugins/organization/access/statement.mjs.map +1 -0
- package/dist/plugins/organization/adapter.d.mts +205 -0
- package/dist/plugins/organization/adapter.mjs +624 -0
- package/dist/plugins/organization/adapter.mjs.map +1 -0
- package/dist/plugins/organization/call.mjs +19 -0
- package/dist/plugins/organization/call.mjs.map +1 -0
- package/dist/plugins/organization/client.d.mts +151 -0
- package/dist/plugins/organization/client.mjs +107 -0
- package/dist/plugins/organization/client.mjs.map +1 -0
- package/dist/plugins/organization/error-codes.d.mts +5 -0
- package/dist/plugins/organization/error-codes.mjs +65 -0
- package/dist/plugins/organization/error-codes.mjs.map +1 -0
- package/dist/plugins/organization/has-permission.mjs +35 -0
- package/dist/plugins/organization/has-permission.mjs.map +1 -0
- package/dist/plugins/organization/index.d.mts +5 -0
- package/dist/plugins/organization/index.mjs +4 -0
- package/dist/plugins/organization/organization.d.mts +252 -0
- package/dist/plugins/organization/organization.mjs +428 -0
- package/dist/plugins/organization/organization.mjs.map +1 -0
- package/dist/plugins/organization/permission.d.mts +26 -0
- package/dist/plugins/organization/permission.mjs +16 -0
- package/dist/plugins/organization/permission.mjs.map +1 -0
- package/dist/plugins/organization/routes/crud-access-control.d.mts +11 -0
- package/dist/plugins/organization/routes/crud-access-control.mjs +656 -0
- package/dist/plugins/organization/routes/crud-access-control.mjs.map +1 -0
- package/dist/plugins/organization/routes/crud-invites.d.mts +16 -0
- package/dist/plugins/organization/routes/crud-invites.mjs +555 -0
- package/dist/plugins/organization/routes/crud-invites.mjs.map +1 -0
- package/dist/plugins/organization/routes/crud-members.d.mts +13 -0
- package/dist/plugins/organization/routes/crud-members.mjs +473 -0
- package/dist/plugins/organization/routes/crud-members.mjs.map +1 -0
- package/dist/plugins/organization/routes/crud-org.d.mts +13 -0
- package/dist/plugins/organization/routes/crud-org.mjs +447 -0
- package/dist/plugins/organization/routes/crud-org.mjs.map +1 -0
- package/dist/plugins/organization/routes/crud-team.d.mts +15 -0
- package/dist/plugins/organization/routes/crud-team.mjs +676 -0
- package/dist/plugins/organization/routes/crud-team.mjs.map +1 -0
- package/dist/plugins/organization/schema.d.mts +376 -0
- package/dist/plugins/organization/schema.mjs +68 -0
- package/dist/plugins/organization/schema.mjs.map +1 -0
- package/dist/plugins/organization/types.d.mts +733 -0
- package/dist/plugins/phone-number/client.d.mts +8 -0
- package/dist/plugins/phone-number/client.mjs +20 -0
- package/dist/plugins/phone-number/client.mjs.map +1 -0
- package/dist/plugins/phone-number/error-codes.d.mts +5 -0
- package/dist/plugins/phone-number/error-codes.mjs +21 -0
- package/dist/plugins/phone-number/error-codes.mjs.map +1 -0
- package/dist/plugins/phone-number/index.d.mts +14 -0
- package/dist/plugins/phone-number/index.mjs +49 -0
- package/dist/plugins/phone-number/index.mjs.map +1 -0
- package/dist/plugins/phone-number/routes.mjs +459 -0
- package/dist/plugins/phone-number/routes.mjs.map +1 -0
- package/dist/plugins/phone-number/schema.d.mts +5 -0
- package/dist/plugins/phone-number/schema.mjs +20 -0
- package/dist/plugins/phone-number/schema.mjs.map +1 -0
- package/dist/plugins/phone-number/types.d.mts +118 -0
- package/dist/plugins/siwe/client.d.mts +5 -0
- package/dist/plugins/siwe/client.mjs +11 -0
- package/dist/plugins/siwe/client.mjs.map +1 -0
- package/dist/plugins/siwe/error-codes.mjs +13 -0
- package/dist/plugins/siwe/error-codes.mjs.map +1 -0
- package/dist/plugins/siwe/index.d.mts +26 -0
- package/dist/plugins/siwe/index.mjs +261 -0
- package/dist/plugins/siwe/index.mjs.map +1 -0
- package/dist/plugins/siwe/schema.d.mts +5 -0
- package/dist/plugins/siwe/schema.mjs +32 -0
- package/dist/plugins/siwe/schema.mjs.map +1 -0
- package/dist/plugins/siwe/types.d.mts +44 -0
- package/dist/plugins/two-factor/backup-codes/index.d.mts +91 -0
- package/dist/plugins/two-factor/backup-codes/index.mjs +277 -0
- package/dist/plugins/two-factor/backup-codes/index.mjs.map +1 -0
- package/dist/plugins/two-factor/client.d.mts +17 -0
- package/dist/plugins/two-factor/client.mjs +37 -0
- package/dist/plugins/two-factor/client.mjs.map +1 -0
- package/dist/plugins/two-factor/constant.mjs +8 -0
- package/dist/plugins/two-factor/constant.mjs.map +1 -0
- package/dist/plugins/two-factor/error-code.d.mts +5 -0
- package/dist/plugins/two-factor/error-code.mjs +18 -0
- package/dist/plugins/two-factor/error-code.mjs.map +1 -0
- package/dist/plugins/two-factor/index.d.mts +19 -0
- package/dist/plugins/two-factor/index.mjs +207 -0
- package/dist/plugins/two-factor/index.mjs.map +1 -0
- package/dist/plugins/two-factor/otp/index.d.mts +96 -0
- package/dist/plugins/two-factor/otp/index.mjs +199 -0
- package/dist/plugins/two-factor/otp/index.mjs.map +1 -0
- package/dist/plugins/two-factor/schema.d.mts +5 -0
- package/dist/plugins/two-factor/schema.mjs +36 -0
- package/dist/plugins/two-factor/schema.mjs.map +1 -0
- package/dist/plugins/two-factor/totp/index.d.mts +81 -0
- package/dist/plugins/two-factor/totp/index.mjs +157 -0
- package/dist/plugins/two-factor/totp/index.mjs.map +1 -0
- package/dist/plugins/two-factor/types.d.mts +65 -0
- package/dist/plugins/two-factor/utils.mjs +12 -0
- package/dist/plugins/two-factor/utils.mjs.map +1 -0
- package/dist/plugins/two-factor/verify-two-factor.mjs +76 -0
- package/dist/plugins/two-factor/verify-two-factor.mjs.map +1 -0
- package/dist/plugins/username/client.d.mts +7 -0
- package/dist/plugins/username/client.mjs +18 -0
- package/dist/plugins/username/client.mjs.map +1 -0
- package/dist/plugins/username/error-codes.d.mts +5 -0
- package/dist/plugins/username/error-codes.mjs +17 -0
- package/dist/plugins/username/error-codes.mjs.map +1 -0
- package/dist/plugins/username/index.d.mts +74 -0
- package/dist/plugins/username/index.mjs +237 -0
- package/dist/plugins/username/index.mjs.map +1 -0
- package/dist/plugins/username/schema.d.mts +9 -0
- package/dist/plugins/username/schema.mjs +26 -0
- package/dist/plugins/username/schema.mjs.map +1 -0
- package/dist/social-providers/index.d.mts +1 -0
- package/dist/social-providers/index.mjs +3 -0
- package/dist/state.d.mts +42 -0
- package/dist/state.mjs +107 -0
- package/dist/state.mjs.map +1 -0
- package/dist/test-utils/headers.d.mts +9 -0
- package/dist/test-utils/headers.mjs +24 -0
- package/dist/test-utils/headers.mjs.map +1 -0
- package/dist/test-utils/index.d.mts +3 -0
- package/dist/test-utils/index.mjs +4 -0
- package/dist/test-utils/test-instance.d.mts +181 -0
- package/dist/test-utils/test-instance.mjs +210 -0
- package/dist/test-utils/test-instance.mjs.map +1 -0
- package/dist/types/adapter.d.mts +24 -0
- package/dist/types/api.d.mts +62 -0
- package/dist/types/auth.d.mts +30 -0
- package/dist/types/helper.d.mts +21 -0
- package/dist/types/index.d.mts +11 -0
- package/dist/types/index.mjs +1 -0
- package/dist/types/models.d.mts +17 -0
- package/dist/types/plugins.d.mts +16 -0
- package/dist/utils/boolean.mjs +8 -0
- package/dist/utils/boolean.mjs.map +1 -0
- package/dist/utils/constants.mjs +6 -0
- package/dist/utils/constants.mjs.map +1 -0
- package/dist/utils/date.mjs +8 -0
- package/dist/utils/date.mjs.map +1 -0
- package/dist/utils/get-request-ip.d.mts +7 -0
- package/dist/utils/get-request-ip.mjs +23 -0
- package/dist/utils/get-request-ip.mjs.map +1 -0
- package/dist/utils/hashing.mjs +21 -0
- package/dist/utils/hashing.mjs.map +1 -0
- package/dist/utils/hide-metadata.d.mts +7 -0
- package/dist/utils/hide-metadata.mjs +6 -0
- package/dist/utils/hide-metadata.mjs.map +1 -0
- package/dist/utils/index.d.mts +3 -0
- package/dist/utils/index.mjs +5 -0
- package/dist/utils/is-api-error.d.mts +7 -0
- package/dist/utils/is-api-error.mjs +11 -0
- package/dist/utils/is-api-error.mjs.map +1 -0
- package/dist/utils/is-atom.mjs +8 -0
- package/dist/utils/is-atom.mjs.map +1 -0
- package/dist/utils/is-promise.mjs +8 -0
- package/dist/utils/is-promise.mjs.map +1 -0
- package/dist/utils/middleware-response.mjs +6 -0
- package/dist/utils/middleware-response.mjs.map +1 -0
- package/dist/utils/password.mjs +26 -0
- package/dist/utils/password.mjs.map +1 -0
- package/dist/utils/plugin-helper.mjs +17 -0
- package/dist/utils/plugin-helper.mjs.map +1 -0
- package/dist/utils/shim.mjs +24 -0
- package/dist/utils/shim.mjs.map +1 -0
- package/dist/utils/time.d.mts +49 -0
- package/dist/utils/time.mjs +100 -0
- package/dist/utils/time.mjs.map +1 -0
- package/dist/utils/url.mjs +92 -0
- package/dist/utils/url.mjs.map +1 -0
- package/dist/utils/wildcard.mjs +108 -0
- package/dist/utils/wildcard.mjs.map +1 -0
- package/package.json +601 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.mjs","names":[],"sources":["../../../src/plugins/organization/adapter.ts"],"sourcesContent":["import type { AuthContext, GenericEndpointContext } from \"@better-auth/core\";\nimport { getCurrentAdapter } from \"@better-auth/core/context\";\nimport { BetterAuthError } from \"@better-auth/core/error\";\nimport { filterOutputFields } from \"@better-auth/core/utils/db\";\nimport { parseJSON } from \"../../client/parser\";\nimport type { InferAdditionalFieldsFromPluginOptions } from \"../../db\";\nimport type { Session, User } from \"../../types\";\nimport { getDate } from \"../../utils/date\";\nimport type {\n\tInferInvitation,\n\tInferMember,\n\tInferOrganization,\n\tInferTeam,\n\tInvitationInput,\n\tMember,\n\tMemberInput,\n\tOrganizationInput,\n\tTeam,\n\tTeamInput,\n\tTeamMember,\n} from \"./schema\";\nimport type { OrganizationOptions } from \"./types\";\n\nexport const getOrgAdapter = <O extends OrganizationOptions>(\n\tcontext: AuthContext,\n\toptions?: O | undefined,\n) => {\n\tconst baseAdapter = context.adapter;\n\tconst orgAdditionalFields = options?.schema?.organization?.additionalFields;\n\tconst memberAdditionalFields = options?.schema?.member?.additionalFields;\n\tconst invitationAdditionalFields =\n\t\toptions?.schema?.invitation?.additionalFields;\n\tconst teamAdditionalFields = options?.schema?.team?.additionalFields;\n\treturn {\n\t\tfindOrganizationBySlug: async (\n\t\t\tslug: string,\n\t\t): Promise<InferOrganization<O> | null> => {\n\t\t\tconst adapter = await getCurrentAdapter(baseAdapter);\n\t\t\tconst organization = await adapter.findOne<InferOrganization<O, false>>({\n\t\t\t\tmodel: \"organization\",\n\t\t\t\twhere: [\n\t\t\t\t\t{\n\t\t\t\t\t\tfield: \"slug\",\n\t\t\t\t\t\tvalue: slug,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t});\n\t\t\treturn filterOutputFields(\n\t\t\t\torganization,\n\t\t\t\torgAdditionalFields,\n\t\t\t) as InferOrganization<O> | null;\n\t\t},\n\t\tcreateOrganization: async (data: {\n\t\t\torganization: OrganizationInput &\n\t\t\t\t// This represents the additional fields from the plugin options\n\t\t\t\tRecord<string, any>;\n\t\t}): Promise<InferOrganization<O>> => {\n\t\t\tconst adapter = await getCurrentAdapter(baseAdapter);\n\t\t\tconst organization = await adapter.create<\n\t\t\t\tOrganizationInput,\n\t\t\t\tInferOrganization<O, false>\n\t\t\t>({\n\t\t\t\tmodel: \"organization\",\n\t\t\t\tdata: {\n\t\t\t\t\t...data.organization,\n\t\t\t\t\tmetadata: data.organization.metadata\n\t\t\t\t\t\t? JSON.stringify(data.organization.metadata)\n\t\t\t\t\t\t: undefined,\n\t\t\t\t},\n\t\t\t\tforceAllowId: true,\n\t\t\t});\n\n\t\t\tconst result = {\n\t\t\t\t...organization,\n\t\t\t\tmetadata:\n\t\t\t\t\torganization.metadata && typeof organization.metadata === \"string\"\n\t\t\t\t\t\t? JSON.parse(organization.metadata)\n\t\t\t\t\t\t: undefined,\n\t\t\t};\n\t\t\treturn filterOutputFields(\n\t\t\t\tresult,\n\t\t\t\torgAdditionalFields,\n\t\t\t) as InferOrganization<O>;\n\t\t},\n\t\tfindMemberByEmail: async (data: {\n\t\t\temail: string;\n\t\t\torganizationId: string;\n\t\t}) => {\n\t\t\tconst adapter = await getCurrentAdapter(baseAdapter);\n\t\t\tconst user = await adapter.findOne<User>({\n\t\t\t\tmodel: \"user\",\n\t\t\t\twhere: [\n\t\t\t\t\t{\n\t\t\t\t\t\tfield: \"email\",\n\t\t\t\t\t\tvalue: data.email.toLowerCase(),\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t});\n\t\t\tif (!user) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst member = await adapter.findOne<InferMember<O, false>>({\n\t\t\t\tmodel: \"member\",\n\t\t\t\twhere: [\n\t\t\t\t\t{\n\t\t\t\t\t\tfield: \"organizationId\",\n\t\t\t\t\t\tvalue: data.organizationId,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tfield: \"userId\",\n\t\t\t\t\t\tvalue: user.id,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t});\n\t\t\tif (!member) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn {\n\t\t\t\t...member,\n\t\t\t\tuser: {\n\t\t\t\t\tid: user.id,\n\t\t\t\t\tname: user.name,\n\t\t\t\t\temail: user.email,\n\t\t\t\t\timage: user.image,\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t\tlistMembers: async (data: {\n\t\t\torganizationId?: string | undefined;\n\t\t\tlimit?: number | undefined;\n\t\t\toffset?: number | undefined;\n\t\t\tsortBy?: string | undefined;\n\t\t\tsortOrder?: (\"asc\" | \"desc\") | undefined;\n\t\t\tfilter?:\n\t\t\t\t| {\n\t\t\t\t\t\tfield: string;\n\t\t\t\t\t\toperator?: \"eq\" | \"ne\" | \"lt\" | \"lte\" | \"gt\" | \"gte\" | \"contains\";\n\t\t\t\t\t\tvalue: any;\n\t\t\t\t }\n\t\t\t\t| undefined;\n\t\t}) => {\n\t\t\tconst adapter = await getCurrentAdapter(baseAdapter);\n\t\t\tconst members = await Promise.all([\n\t\t\t\tadapter.findMany<InferMember<O, false>>({\n\t\t\t\t\tmodel: \"member\",\n\t\t\t\t\twhere: [\n\t\t\t\t\t\t{ field: \"organizationId\", value: data.organizationId },\n\t\t\t\t\t\t...(data.filter?.field\n\t\t\t\t\t\t\t? [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tfield: data.filter?.field,\n\t\t\t\t\t\t\t\t\t\tvalue: data.filter?.value,\n\t\t\t\t\t\t\t\t\t\t...(data.filter.operator\n\t\t\t\t\t\t\t\t\t\t\t? { operator: data.filter.operator }\n\t\t\t\t\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t: []),\n\t\t\t\t\t],\n\t\t\t\t\tlimit:\n\t\t\t\t\t\tdata.limit ||\n\t\t\t\t\t\t(typeof options?.membershipLimit === \"number\"\n\t\t\t\t\t\t\t? options.membershipLimit\n\t\t\t\t\t\t\t: 100) ||\n\t\t\t\t\t\t100,\n\t\t\t\t\toffset: data.offset || 0,\n\t\t\t\t\tsortBy: data.sortBy\n\t\t\t\t\t\t? { field: data.sortBy, direction: data.sortOrder || \"asc\" }\n\t\t\t\t\t\t: undefined,\n\t\t\t\t}),\n\t\t\t\tadapter.count({\n\t\t\t\t\tmodel: \"member\",\n\t\t\t\t\twhere: [\n\t\t\t\t\t\t{ field: \"organizationId\", value: data.organizationId },\n\t\t\t\t\t\t...(data.filter?.field\n\t\t\t\t\t\t\t? [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tfield: data.filter?.field,\n\t\t\t\t\t\t\t\t\t\tvalue: data.filter?.value,\n\t\t\t\t\t\t\t\t\t\t...(data.filter.operator\n\t\t\t\t\t\t\t\t\t\t\t? { operator: data.filter.operator }\n\t\t\t\t\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t: []),\n\t\t\t\t\t],\n\t\t\t\t}),\n\t\t\t]);\n\t\t\tconst users = await adapter.findMany<User>({\n\t\t\t\tmodel: \"user\",\n\t\t\t\twhere: [\n\t\t\t\t\t{\n\t\t\t\t\t\tfield: \"id\",\n\t\t\t\t\t\tvalue: members[0].map((member) => member.userId),\n\t\t\t\t\t\toperator: \"in\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t});\n\t\t\treturn {\n\t\t\t\tmembers: members[0].map((member) => {\n\t\t\t\t\tconst user = users.find((user) => user.id === member.userId);\n\t\t\t\t\tif (!user) {\n\t\t\t\t\t\tthrow new BetterAuthError(\n\t\t\t\t\t\t\t\"Unexpected error: User not found for member\",\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...member,\n\t\t\t\t\t\tuser: {\n\t\t\t\t\t\t\tid: user.id,\n\t\t\t\t\t\t\tname: user.name,\n\t\t\t\t\t\t\temail: user.email,\n\t\t\t\t\t\t\timage: user.image,\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t}),\n\t\t\t\ttotal: members[1],\n\t\t\t};\n\t\t},\n\t\tfindMemberByOrgId: async (data: {\n\t\t\tuserId: string;\n\t\t\torganizationId: string;\n\t\t}) => {\n\t\t\tconst adapter = await getCurrentAdapter(baseAdapter);\n\t\t\tconst result = await adapter.findOne<\n\t\t\t\tInferMember<O, false> & { user: User }\n\t\t\t>({\n\t\t\t\tmodel: \"member\",\n\t\t\t\twhere: [\n\t\t\t\t\t{\n\t\t\t\t\t\tfield: \"userId\",\n\t\t\t\t\t\tvalue: data.userId,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tfield: \"organizationId\",\n\t\t\t\t\t\tvalue: data.organizationId,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tjoin: {\n\t\t\t\t\tuser: true,\n\t\t\t\t},\n\t\t\t});\n\t\t\tif (!result || !result.user) return null;\n\t\t\tconst { user, ...member } = result;\n\n\t\t\treturn {\n\t\t\t\t...member,\n\t\t\t\tuser: {\n\t\t\t\t\tid: user.id,\n\t\t\t\t\tname: user.name,\n\t\t\t\t\temail: user.email,\n\t\t\t\t\timage: user.image,\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t\tfindMemberById: async (memberId: string) => {\n\t\t\tconst adapter = await getCurrentAdapter(baseAdapter);\n\t\t\tconst result = await adapter.findOne<\n\t\t\t\tInferMember<O, false> & { user: User }\n\t\t\t>({\n\t\t\t\tmodel: \"member\",\n\t\t\t\twhere: [\n\t\t\t\t\t{\n\t\t\t\t\t\tfield: \"id\",\n\t\t\t\t\t\tvalue: memberId,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tjoin: {\n\t\t\t\t\tuser: true,\n\t\t\t\t},\n\t\t\t});\n\t\t\tif (!result) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst { user, ...member } = result;\n\n\t\t\treturn {\n\t\t\t\t...(member as unknown as InferMember<O, false>),\n\t\t\t\tuser: {\n\t\t\t\t\tid: user.id,\n\t\t\t\t\tname: user.name,\n\t\t\t\t\temail: user.email,\n\t\t\t\t\timage: user.image,\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t\tcreateMember: async (\n\t\t\tdata: Omit<MemberInput, \"id\"> &\n\t\t\t\t// Additional fields from the plugin options\n\t\t\t\tRecord<string, any>,\n\t\t) => {\n\t\t\tconst adapter = await getCurrentAdapter(baseAdapter);\n\t\t\tconst member = await adapter.create<\n\t\t\t\ttypeof data,\n\t\t\t\tMember & InferAdditionalFieldsFromPluginOptions<\"member\", O, false>\n\t\t\t>({\n\t\t\t\tmodel: \"member\",\n\t\t\t\tdata: {\n\t\t\t\t\t...data,\n\t\t\t\t\tcreatedAt: new Date(),\n\t\t\t\t},\n\t\t\t});\n\t\t\treturn member;\n\t\t},\n\t\tupdateMember: async (memberId: string, role: string) => {\n\t\t\tconst adapter = await getCurrentAdapter(baseAdapter);\n\t\t\tconst member = await adapter.update<InferMember<O, false>>({\n\t\t\t\tmodel: \"member\",\n\t\t\t\twhere: [\n\t\t\t\t\t{\n\t\t\t\t\t\tfield: \"id\",\n\t\t\t\t\t\tvalue: memberId,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tupdate: {\n\t\t\t\t\trole,\n\t\t\t\t},\n\t\t\t});\n\t\t\treturn member;\n\t\t},\n\t\tdeleteMember: async ({\n\t\t\tmemberId,\n\t\t\torganizationId,\n\t\t\tuserId: _userId,\n\t\t}: {\n\t\t\tmemberId: string;\n\t\t\torganizationId: string;\n\t\t\tuserId?: string;\n\t\t}) => {\n\t\t\tconst adapter = await getCurrentAdapter(baseAdapter);\n\t\t\tlet userId: string;\n\t\t\tif (!_userId) {\n\t\t\t\tconst member = await adapter.findOne<Member>({\n\t\t\t\t\tmodel: \"member\",\n\t\t\t\t\twhere: [{ field: \"id\", value: memberId }],\n\t\t\t\t});\n\t\t\t\tif (!member) {\n\t\t\t\t\tthrow new BetterAuthError(\"Member not found\");\n\t\t\t\t}\n\t\t\t\tuserId = member.userId;\n\t\t\t} else {\n\t\t\t\tuserId = _userId;\n\t\t\t}\n\t\t\tconst member = await adapter.delete<InferMember<O, false>>({\n\t\t\t\tmodel: \"member\",\n\t\t\t\twhere: [\n\t\t\t\t\t{\n\t\t\t\t\t\tfield: \"id\",\n\t\t\t\t\t\tvalue: memberId,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t});\n\t\t\t// remove member from all teams they're part of\n\t\t\tif (options?.teams?.enabled) {\n\t\t\t\tconst teams = await adapter.findMany<Team>({\n\t\t\t\t\tmodel: \"team\",\n\t\t\t\t\twhere: [{ field: \"organizationId\", value: organizationId }],\n\t\t\t\t});\n\t\t\t\tawait Promise.all(\n\t\t\t\t\tteams.map((team) =>\n\t\t\t\t\t\tadapter.deleteMany({\n\t\t\t\t\t\t\tmodel: \"teamMember\",\n\t\t\t\t\t\t\twhere: [\n\t\t\t\t\t\t\t\t{ field: \"teamId\", value: team.id },\n\t\t\t\t\t\t\t\t{ field: \"userId\", value: userId },\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t}),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn member;\n\t\t},\n\t\tupdateOrganization: async (\n\t\t\torganizationId: string,\n\t\t\tdata: Partial<OrganizationInput>,\n\t\t): Promise<InferOrganization<O> | null> => {\n\t\t\tconst adapter = await getCurrentAdapter(baseAdapter);\n\t\t\tconst organization = await adapter.update<InferOrganization<O, false>>({\n\t\t\t\tmodel: \"organization\",\n\t\t\t\twhere: [\n\t\t\t\t\t{\n\t\t\t\t\t\tfield: \"id\",\n\t\t\t\t\t\tvalue: organizationId,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tupdate: {\n\t\t\t\t\t...data,\n\t\t\t\t\tmetadata:\n\t\t\t\t\t\ttypeof data.metadata === \"object\"\n\t\t\t\t\t\t\t? JSON.stringify(data.metadata)\n\t\t\t\t\t\t\t: data.metadata,\n\t\t\t\t},\n\t\t\t});\n\t\t\tif (!organization) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst result = {\n\t\t\t\t...organization,\n\t\t\t\tmetadata: organization.metadata\n\t\t\t\t\t? parseJSON<Record<string, any>>(organization.metadata)\n\t\t\t\t\t: undefined,\n\t\t\t};\n\t\t\treturn filterOutputFields(\n\t\t\t\tresult,\n\t\t\t\torgAdditionalFields,\n\t\t\t) as InferOrganization<O>;\n\t\t},\n\t\tdeleteOrganization: async (organizationId: string) => {\n\t\t\tconst adapter = await getCurrentAdapter(baseAdapter);\n\t\t\tawait adapter.deleteMany({\n\t\t\t\tmodel: \"member\",\n\t\t\t\twhere: [\n\t\t\t\t\t{\n\t\t\t\t\t\tfield: \"organizationId\",\n\t\t\t\t\t\tvalue: organizationId,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t});\n\t\t\tawait adapter.deleteMany({\n\t\t\t\tmodel: \"invitation\",\n\t\t\t\twhere: [\n\t\t\t\t\t{\n\t\t\t\t\t\tfield: \"organizationId\",\n\t\t\t\t\t\tvalue: organizationId,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t});\n\t\t\tawait adapter.delete<InferOrganization<O, false>>({\n\t\t\t\tmodel: \"organization\",\n\t\t\t\twhere: [\n\t\t\t\t\t{\n\t\t\t\t\t\tfield: \"id\",\n\t\t\t\t\t\tvalue: organizationId,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t});\n\t\t\treturn organizationId;\n\t\t},\n\t\tsetActiveOrganization: async (\n\t\t\tsessionToken: string,\n\t\t\torganizationId: string | null,\n\t\t\tctx: GenericEndpointContext,\n\t\t) => {\n\t\t\tconst session = await context.internalAdapter.updateSession(\n\t\t\t\tsessionToken,\n\t\t\t\t{\n\t\t\t\t\tactiveOrganizationId: organizationId,\n\t\t\t\t},\n\t\t\t);\n\t\t\treturn session as Session;\n\t\t},\n\t\tfindOrganizationById: async (\n\t\t\torganizationId: string,\n\t\t): Promise<InferOrganization<O> | null> => {\n\t\t\tconst adapter = await getCurrentAdapter(baseAdapter);\n\t\t\tconst organization = await adapter.findOne<InferOrganization<O, false>>({\n\t\t\t\tmodel: \"organization\",\n\t\t\t\twhere: [\n\t\t\t\t\t{\n\t\t\t\t\t\tfield: \"id\",\n\t\t\t\t\t\tvalue: organizationId,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t});\n\t\t\treturn filterOutputFields(\n\t\t\t\torganization,\n\t\t\t\torgAdditionalFields,\n\t\t\t) as InferOrganization<O> | null;\n\t\t},\n\t\tcheckMembership: async ({\n\t\t\tuserId,\n\t\t\torganizationId,\n\t\t}: {\n\t\t\tuserId: string;\n\t\t\torganizationId: string;\n\t\t}) => {\n\t\t\tconst adapter = await getCurrentAdapter(baseAdapter);\n\t\t\tconst member = await adapter.findOne<InferMember<O, false>>({\n\t\t\t\tmodel: \"member\",\n\t\t\t\twhere: [\n\t\t\t\t\t{\n\t\t\t\t\t\tfield: \"userId\",\n\t\t\t\t\t\tvalue: userId,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tfield: \"organizationId\",\n\t\t\t\t\t\tvalue: organizationId,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t});\n\t\t\treturn member;\n\t\t},\n\t\t/**\n\t\t * @requires db\n\t\t */\n\t\tfindFullOrganization: async ({\n\t\t\torganizationId,\n\t\t\tisSlug,\n\t\t\tincludeTeams,\n\t\t\tmembersLimit,\n\t\t}: {\n\t\t\torganizationId: string;\n\t\t\tisSlug?: boolean | undefined;\n\t\t\tincludeTeams?: boolean | undefined;\n\t\t\tmembersLimit?: number | undefined;\n\t\t}) => {\n\t\t\tconst adapter = await getCurrentAdapter(baseAdapter);\n\t\t\tconst result = await adapter.findOne<\n\t\t\t\tInferOrganization<O, false> & {\n\t\t\t\t\tinvitation: InferInvitation<O>[];\n\t\t\t\t\tmember: InferMember<O>[];\n\t\t\t\t\tteam: InferTeam<O>[] | undefined;\n\t\t\t\t}\n\t\t\t>({\n\t\t\t\tmodel: \"organization\",\n\t\t\t\twhere: [{ field: isSlug ? \"slug\" : \"id\", value: organizationId }],\n\t\t\t\tjoin: {\n\t\t\t\t\tinvitation: true,\n\t\t\t\t\tmember: membersLimit ? { limit: membersLimit } : true,\n\t\t\t\t\t...(includeTeams ? { team: true } : {}),\n\t\t\t\t},\n\t\t\t});\n\t\t\tif (!result) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tconst {\n\t\t\t\tinvitation: invitations,\n\t\t\t\tmember: members,\n\t\t\t\tteam: teams,\n\t\t\t\t...org\n\t\t\t} = result;\n\t\t\tconst userIds = members.map((member) => member.userId);\n\t\t\tconst users =\n\t\t\t\tuserIds.length > 0\n\t\t\t\t\t? await adapter.findMany<User>({\n\t\t\t\t\t\t\tmodel: \"user\",\n\t\t\t\t\t\t\twhere: [{ field: \"id\", value: userIds, operator: \"in\" }],\n\t\t\t\t\t\t\tlimit:\n\t\t\t\t\t\t\t\t(typeof options?.membershipLimit === \"number\"\n\t\t\t\t\t\t\t\t\t? options.membershipLimit\n\t\t\t\t\t\t\t\t\t: 100) || 100,\n\t\t\t\t\t\t})\n\t\t\t\t\t: [];\n\n\t\t\tconst userMap = new Map(users.map((user) => [user.id, user]));\n\t\t\tconst membersWithUsers = members.map((member) => {\n\t\t\t\tconst user = userMap.get(member.userId);\n\t\t\t\tif (!user) {\n\t\t\t\t\tthrow new BetterAuthError(\n\t\t\t\t\t\t\"Unexpected error: User not found for member\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tconst filteredMember = filterOutputFields(\n\t\t\t\t\tmember,\n\t\t\t\t\tmemberAdditionalFields,\n\t\t\t\t);\n\t\t\t\treturn {\n\t\t\t\t\t...filteredMember,\n\t\t\t\t\tuser: {\n\t\t\t\t\t\tid: user.id,\n\t\t\t\t\t\tname: user.name,\n\t\t\t\t\t\temail: user.email,\n\t\t\t\t\t\timage: user.image,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t});\n\n\t\t\tconst filteredOrg = filterOutputFields(org, orgAdditionalFields);\n\t\t\tconst filteredInvitations = invitations.map((inv) =>\n\t\t\t\tfilterOutputFields(inv, invitationAdditionalFields),\n\t\t\t);\n\t\t\tconst filteredTeams = teams?.map((team) =>\n\t\t\t\tfilterOutputFields(team, teamAdditionalFields),\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\t...filteredOrg,\n\t\t\t\tinvitations: filteredInvitations,\n\t\t\t\tmembers: membersWithUsers,\n\t\t\t\tteams: filteredTeams,\n\t\t\t};\n\t\t},\n\t\tlistOrganizations: async (\n\t\t\tuserId: string,\n\t\t): Promise<InferOrganization<O>[]> => {\n\t\t\tconst adapter = await getCurrentAdapter(baseAdapter);\n\t\t\tconst result = await adapter.findMany<\n\t\t\t\tInferMember<O, false> & { organization: InferOrganization<O, false> }\n\t\t\t>({\n\t\t\t\tmodel: \"member\",\n\t\t\t\twhere: [\n\t\t\t\t\t{\n\t\t\t\t\t\tfield: \"userId\",\n\t\t\t\t\t\tvalue: userId,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tjoin: {\n\t\t\t\t\torganization: true,\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tif (!result || result.length === 0) {\n\t\t\t\treturn [];\n\t\t\t}\n\n\t\t\tconst organizations = result.map(\n\t\t\t\t(member) =>\n\t\t\t\t\tfilterOutputFields(\n\t\t\t\t\t\tmember.organization,\n\t\t\t\t\t\torgAdditionalFields,\n\t\t\t\t\t) as InferOrganization<O>,\n\t\t\t);\n\n\t\t\treturn organizations;\n\t\t},\n\t\tcreateTeam: async (data: Omit<TeamInput, \"id\">) => {\n\t\t\tconst adapter = await getCurrentAdapter(baseAdapter);\n\t\t\tconst team = await adapter.create<\n\t\t\t\tOmit<TeamInput, \"id\">,\n\t\t\t\tInferTeam<O, false>\n\t\t\t>({\n\t\t\t\tmodel: \"team\",\n\t\t\t\tdata,\n\t\t\t});\n\t\t\treturn team;\n\t\t},\n\t\tfindTeamById: async <IncludeMembers extends boolean>({\n\t\t\tteamId,\n\t\t\torganizationId,\n\t\t\tincludeTeamMembers,\n\t\t}: {\n\t\t\tteamId: string;\n\t\t\torganizationId?: string | undefined;\n\t\t\tincludeTeamMembers?: IncludeMembers | undefined;\n\t\t}): Promise<\n\t\t\t| (InferTeam<O> &\n\t\t\t\t\t(IncludeMembers extends true ? { members: TeamMember[] } : {}))\n\t\t\t| null\n\t\t> => {\n\t\t\tconst adapter = await getCurrentAdapter(baseAdapter);\n\t\t\tconst result = await adapter.findOne<\n\t\t\t\tInferTeam<O> & { teamMember: TeamMember[] }\n\t\t\t>({\n\t\t\t\tmodel: \"team\",\n\t\t\t\twhere: [\n\t\t\t\t\t{\n\t\t\t\t\t\tfield: \"id\",\n\t\t\t\t\t\tvalue: teamId,\n\t\t\t\t\t},\n\t\t\t\t\t...(organizationId\n\t\t\t\t\t\t? [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tfield: \"organizationId\",\n\t\t\t\t\t\t\t\t\tvalue: organizationId,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t: []),\n\t\t\t\t],\n\t\t\t\tjoin: {\n\t\t\t\t\t// In the future when `join` support is better, we can apply the `membershipLimit` here. Right now we're just querying 100.\n\t\t\t\t\t...(includeTeamMembers ? { teamMember: true } : {}),\n\t\t\t\t},\n\t\t\t});\n\t\t\tif (!result) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst { teamMember, ...team } = result;\n\n\t\t\treturn {\n\t\t\t\t...team,\n\t\t\t\t...(includeTeamMembers ? { members: teamMember } : {}),\n\t\t\t} as any;\n\t\t},\n\t\tupdateTeam: async (\n\t\t\tteamId: string,\n\t\t\tdata: {\n\t\t\t\tname?: string | undefined;\n\t\t\t\tdescription?: string | undefined;\n\t\t\t\tstatus?: string | undefined;\n\t\t\t},\n\t\t) => {\n\t\t\tconst adapter = await getCurrentAdapter(baseAdapter);\n\t\t\tif (\"id\" in data) data.id = undefined;\n\t\t\tconst team = await adapter.update<\n\t\t\t\tInferTeam<O, false> & InferAdditionalFieldsFromPluginOptions<\"team\", O>\n\t\t\t>({\n\t\t\t\tmodel: \"team\",\n\t\t\t\twhere: [\n\t\t\t\t\t{\n\t\t\t\t\t\tfield: \"id\",\n\t\t\t\t\t\tvalue: teamId,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tupdate: {\n\t\t\t\t\t...data,\n\t\t\t\t},\n\t\t\t});\n\t\t\treturn team;\n\t\t},\n\n\t\tdeleteTeam: async (teamId: string) => {\n\t\t\tconst adapter = await getCurrentAdapter(baseAdapter);\n\t\t\tawait adapter.deleteMany({\n\t\t\t\tmodel: \"teamMember\",\n\t\t\t\twhere: [\n\t\t\t\t\t{\n\t\t\t\t\t\tfield: \"teamId\",\n\t\t\t\t\t\tvalue: teamId,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t});\n\n\t\t\tconst team = await adapter.delete<InferTeam<O, false>>({\n\t\t\t\tmodel: \"team\",\n\t\t\t\twhere: [\n\t\t\t\t\t{\n\t\t\t\t\t\tfield: \"id\",\n\t\t\t\t\t\tvalue: teamId,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t});\n\t\t\treturn team;\n\t\t},\n\n\t\tlistTeams: async (organizationId: string) => {\n\t\t\tconst adapter = await getCurrentAdapter(baseAdapter);\n\t\t\tconst teams = await adapter.findMany<InferTeam<O, false>>({\n\t\t\t\tmodel: \"team\",\n\t\t\t\twhere: [\n\t\t\t\t\t{\n\t\t\t\t\t\tfield: \"organizationId\",\n\t\t\t\t\t\tvalue: organizationId,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t});\n\t\t\treturn teams;\n\t\t},\n\n\t\tcreateTeamInvitation: async ({\n\t\t\temail,\n\t\t\trole,\n\t\t\tteamId,\n\t\t\torganizationId,\n\t\t\tinviterId,\n\t\t\texpiresIn = 1000 * 60 * 60 * 48, // Default expiration: 48 hours\n\t\t}: {\n\t\t\temail: string;\n\t\t\trole: string;\n\t\t\tteamId: string;\n\t\t\torganizationId: string;\n\t\t\tinviterId: string;\n\t\t\texpiresIn?: number | undefined;\n\t\t}) => {\n\t\t\tconst adapter = await getCurrentAdapter(baseAdapter);\n\t\t\tconst expiresAt = getDate(expiresIn); // Get expiration date\n\n\t\t\tconst invitation = await adapter.create<\n\t\t\t\tInvitationInput,\n\t\t\t\tInferInvitation<O>\n\t\t\t>({\n\t\t\t\tmodel: \"invitation\",\n\t\t\t\tdata: {\n\t\t\t\t\temail,\n\t\t\t\t\trole,\n\t\t\t\t\torganizationId,\n\t\t\t\t\tteamId,\n\t\t\t\t\tinviterId,\n\t\t\t\t\tstatus: \"pending\",\n\t\t\t\t\texpiresAt,\n\t\t\t\t},\n\t\t\t});\n\n\t\t\treturn invitation;\n\t\t},\n\n\t\tsetActiveTeam: async (\n\t\t\tsessionToken: string,\n\t\t\tteamId: string | null,\n\t\t\tctx: GenericEndpointContext,\n\t\t) => {\n\t\t\tconst session = await context.internalAdapter.updateSession(\n\t\t\t\tsessionToken,\n\t\t\t\t{\n\t\t\t\t\tactiveTeamId: teamId,\n\t\t\t\t},\n\t\t\t);\n\t\t\treturn session as Session;\n\t\t},\n\n\t\tlistTeamMembers: async (data: { teamId: string }) => {\n\t\t\tconst adapter = await getCurrentAdapter(baseAdapter);\n\t\t\tconst members = await adapter.findMany<TeamMember>({\n\t\t\t\tmodel: \"teamMember\",\n\t\t\t\twhere: [\n\t\t\t\t\t{\n\t\t\t\t\t\tfield: \"teamId\",\n\t\t\t\t\t\tvalue: data.teamId,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t});\n\n\t\t\treturn members;\n\t\t},\n\t\tcountTeamMembers: async (data: { teamId: string }) => {\n\t\t\tconst adapter = await getCurrentAdapter(baseAdapter);\n\t\t\tconst count = await adapter.count({\n\t\t\t\tmodel: \"teamMember\",\n\t\t\t\twhere: [{ field: \"teamId\", value: data.teamId }],\n\t\t\t});\n\t\t\treturn count;\n\t\t},\n\t\tcountMembers: async (data: { organizationId: string }) => {\n\t\t\tconst adapter = await getCurrentAdapter(baseAdapter);\n\t\t\tconst count = await adapter.count({\n\t\t\t\tmodel: \"member\",\n\t\t\t\twhere: [{ field: \"organizationId\", value: data.organizationId }],\n\t\t\t});\n\t\t\treturn count;\n\t\t},\n\t\tlistTeamsByUser: async (data: { userId: string }) => {\n\t\t\tconst adapter = await getCurrentAdapter(baseAdapter);\n\t\t\tconst results = await adapter.findMany<TeamMember & { team: Team }>({\n\t\t\t\tmodel: \"teamMember\",\n\t\t\t\twhere: [\n\t\t\t\t\t{\n\t\t\t\t\t\tfield: \"userId\",\n\t\t\t\t\t\tvalue: data.userId,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tjoin: {\n\t\t\t\t\tteam: true,\n\t\t\t\t},\n\t\t\t});\n\n\t\t\treturn results.map((result) => result.team);\n\t\t},\n\n\t\tfindTeamMember: async (data: { teamId: string; userId: string }) => {\n\t\t\tconst adapter = await getCurrentAdapter(baseAdapter);\n\t\t\tconst member = await adapter.findOne<TeamMember>({\n\t\t\t\tmodel: \"teamMember\",\n\t\t\t\twhere: [\n\t\t\t\t\t{\n\t\t\t\t\t\tfield: \"teamId\",\n\t\t\t\t\t\tvalue: data.teamId,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tfield: \"userId\",\n\t\t\t\t\t\tvalue: data.userId,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t});\n\n\t\t\treturn member;\n\t\t},\n\n\t\tfindOrCreateTeamMember: async (data: {\n\t\t\tteamId: string;\n\t\t\tuserId: string;\n\t\t}) => {\n\t\t\tconst adapter = await getCurrentAdapter(baseAdapter);\n\t\t\tconst member = await adapter.findOne<TeamMember>({\n\t\t\t\tmodel: \"teamMember\",\n\t\t\t\twhere: [\n\t\t\t\t\t{\n\t\t\t\t\t\tfield: \"teamId\",\n\t\t\t\t\t\tvalue: data.teamId,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tfield: \"userId\",\n\t\t\t\t\t\tvalue: data.userId,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t});\n\n\t\t\tif (member) return member;\n\n\t\t\treturn await adapter.create<Omit<TeamMember, \"id\">, TeamMember>({\n\t\t\t\tmodel: \"teamMember\",\n\t\t\t\tdata: {\n\t\t\t\t\tteamId: data.teamId,\n\t\t\t\t\tuserId: data.userId,\n\t\t\t\t\tcreatedAt: new Date(),\n\t\t\t\t},\n\t\t\t});\n\t\t},\n\t\tremoveTeamMember: async (data: { teamId: string; userId: string }) => {\n\t\t\tconst adapter = await getCurrentAdapter(baseAdapter);\n\t\t\t// use `deleteMany` instead of `delete` since Prisma requires 1 unique field for normal `delete` operations\n\t\t\t// FKs do not count thus breaking the operation. As a solution, we'll use `deleteMany` instead.\n\t\t\tawait adapter.deleteMany({\n\t\t\t\tmodel: \"teamMember\",\n\t\t\t\twhere: [\n\t\t\t\t\t{\n\t\t\t\t\t\tfield: \"teamId\",\n\t\t\t\t\t\tvalue: data.teamId,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tfield: \"userId\",\n\t\t\t\t\t\tvalue: data.userId,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t});\n\t\t},\n\t\tfindInvitationsByTeamId: async (teamId: string) => {\n\t\t\tconst adapter = await getCurrentAdapter(baseAdapter);\n\t\t\tconst invitations = await adapter.findMany<InferInvitation<O, false>>({\n\t\t\t\tmodel: \"invitation\",\n\t\t\t\twhere: [\n\t\t\t\t\t{\n\t\t\t\t\t\tfield: \"teamId\",\n\t\t\t\t\t\tvalue: teamId,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t});\n\t\t\treturn invitations;\n\t\t},\n\t\tlistUserInvitations: async (email: string) => {\n\t\t\tconst adapter = await getCurrentAdapter(baseAdapter);\n\t\t\tconst invitations = await adapter.findMany<\n\t\t\t\tInferInvitation<O, false> & {\n\t\t\t\t\torganization: InferOrganization<O, false>;\n\t\t\t\t}\n\t\t\t>({\n\t\t\t\tmodel: \"invitation\",\n\t\t\t\twhere: [{ field: \"email\", value: email.toLowerCase() }],\n\t\t\t\tjoin: {\n\t\t\t\t\torganization: true,\n\t\t\t\t},\n\t\t\t});\n\t\t\treturn invitations.map(({ organization, ...inv }) => ({\n\t\t\t\t...inv,\n\t\t\t\torganizationName: organization.name,\n\t\t\t}));\n\t\t},\n\t\tcreateInvitation: async ({\n\t\t\tinvitation,\n\t\t\tuser,\n\t\t}: {\n\t\t\tinvitation: {\n\t\t\t\temail: string;\n\t\t\t\trole: string;\n\t\t\t\torganizationId: string;\n\t\t\t\tteamIds: string[];\n\t\t\t} & Record<string, any>; // This represents the additionalFields for the invitation\n\t\t\tuser: User;\n\t\t}) => {\n\t\t\tconst adapter = await getCurrentAdapter(baseAdapter);\n\t\t\tconst defaultExpiration = 60 * 60 * 48;\n\t\t\tconst expiresAt = getDate(\n\t\t\t\toptions?.invitationExpiresIn || defaultExpiration,\n\t\t\t\t\"sec\",\n\t\t\t);\n\t\t\tconst invite = await adapter.create<\n\t\t\t\tOmit<InvitationInput, \"id\">,\n\t\t\t\tInferInvitation<O, false>\n\t\t\t>({\n\t\t\t\tmodel: \"invitation\",\n\t\t\t\tdata: {\n\t\t\t\t\tstatus: \"pending\",\n\t\t\t\t\texpiresAt,\n\t\t\t\t\tcreatedAt: new Date(),\n\t\t\t\t\tinviterId: user.id,\n\t\t\t\t\t...invitation,\n\t\t\t\t\tteamId:\n\t\t\t\t\t\tinvitation.teamIds.length > 0 ? invitation.teamIds.join(\",\") : null,\n\t\t\t\t},\n\t\t\t});\n\n\t\t\treturn invite;\n\t\t},\n\t\tfindInvitationById: async (id: string) => {\n\t\t\tconst adapter = await getCurrentAdapter(baseAdapter);\n\t\t\tconst invitation = await adapter.findOne<InferInvitation<O, false>>({\n\t\t\t\tmodel: \"invitation\",\n\t\t\t\twhere: [\n\t\t\t\t\t{\n\t\t\t\t\t\tfield: \"id\",\n\t\t\t\t\t\tvalue: id,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t});\n\t\t\treturn invitation;\n\t\t},\n\t\tfindPendingInvitation: async (data: {\n\t\t\temail: string;\n\t\t\torganizationId: string;\n\t\t}) => {\n\t\t\tconst adapter = await getCurrentAdapter(baseAdapter);\n\t\t\tconst invitation = await adapter.findMany<InferInvitation<O, false>>({\n\t\t\t\tmodel: \"invitation\",\n\t\t\t\twhere: [\n\t\t\t\t\t{\n\t\t\t\t\t\tfield: \"email\",\n\t\t\t\t\t\tvalue: data.email.toLowerCase(),\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tfield: \"organizationId\",\n\t\t\t\t\t\tvalue: data.organizationId,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tfield: \"status\",\n\t\t\t\t\t\tvalue: \"pending\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t});\n\t\t\treturn invitation.filter(\n\t\t\t\t(invite) => new Date(invite.expiresAt) > new Date(),\n\t\t\t);\n\t\t},\n\t\tfindPendingInvitations: async (data: { organizationId: string }) => {\n\t\t\tconst adapter = await getCurrentAdapter(baseAdapter);\n\t\t\tconst invitations = await adapter.findMany<InferInvitation<O, false>>({\n\t\t\t\tmodel: \"invitation\",\n\t\t\t\twhere: [\n\t\t\t\t\t{\n\t\t\t\t\t\tfield: \"organizationId\",\n\t\t\t\t\t\tvalue: data.organizationId,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tfield: \"status\",\n\t\t\t\t\t\tvalue: \"pending\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t});\n\t\t\treturn invitations.filter(\n\t\t\t\t(invite) => new Date(invite.expiresAt) > new Date(),\n\t\t\t);\n\t\t},\n\t\tlistInvitations: async (data: { organizationId: string }) => {\n\t\t\tconst adapter = await getCurrentAdapter(baseAdapter);\n\t\t\tconst invitations = await adapter.findMany<InferInvitation<O, false>>({\n\t\t\t\tmodel: \"invitation\",\n\t\t\t\twhere: [\n\t\t\t\t\t{\n\t\t\t\t\t\tfield: \"organizationId\",\n\t\t\t\t\t\tvalue: data.organizationId,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t});\n\t\t\treturn invitations;\n\t\t},\n\t\tupdateInvitation: async (data: {\n\t\t\tinvitationId: string;\n\t\t\tstatus: \"accepted\" | \"canceled\" | \"rejected\";\n\t\t}) => {\n\t\t\tconst adapter = await getCurrentAdapter(baseAdapter);\n\t\t\tconst invitation = await adapter.update<InferInvitation<O, false>>({\n\t\t\t\tmodel: \"invitation\",\n\t\t\t\twhere: [\n\t\t\t\t\t{\n\t\t\t\t\t\tfield: \"id\",\n\t\t\t\t\t\tvalue: data.invitationId,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tupdate: {\n\t\t\t\t\tstatus: data.status,\n\t\t\t\t},\n\t\t\t});\n\t\t\treturn invitation;\n\t\t},\n\t};\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { sessionMiddleware } from "../../api/routes/session.mjs";
|
|
2
|
+
import "../../api/index.mjs";
|
|
3
|
+
import { createAuthMiddleware } from "@better-auth/core/api";
|
|
4
|
+
|
|
5
|
+
//#region src/plugins/organization/call.ts
|
|
6
|
+
const orgMiddleware = createAuthMiddleware(async () => {
|
|
7
|
+
return {};
|
|
8
|
+
});
|
|
9
|
+
/**
|
|
10
|
+
* The middleware forces the endpoint to require a valid session by utilizing the `sessionMiddleware`.
|
|
11
|
+
* It also appends additional types to the session type regarding organizations.
|
|
12
|
+
*/
|
|
13
|
+
const orgSessionMiddleware = createAuthMiddleware({ use: [sessionMiddleware] }, async (ctx) => {
|
|
14
|
+
return { session: ctx.context.session };
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
//#endregion
|
|
18
|
+
export { orgMiddleware, orgSessionMiddleware };
|
|
19
|
+
//# sourceMappingURL=call.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"call.mjs","names":[],"sources":["../../../src/plugins/organization/call.ts"],"sourcesContent":["import type { GenericEndpointContext } from \"@better-auth/core\";\nimport { createAuthMiddleware } from \"@better-auth/core/api\";\nimport { sessionMiddleware } from \"../../api\";\nimport type { Session, User } from \"../../types\";\nimport type { Role } from \"../access\";\nimport type { defaultRoles } from \"./access/statement\";\nimport type { OrganizationOptions } from \"./types\";\n\nexport const orgMiddleware = createAuthMiddleware(async () => {\n\treturn {} as {\n\t\torgOptions: OrganizationOptions;\n\t\troles: typeof defaultRoles & {\n\t\t\t[key: string]: Role<{}>;\n\t\t};\n\t\tgetSession: (context: GenericEndpointContext) => Promise<{\n\t\t\tsession: Session & {\n\t\t\t\tactiveTeamId?: string | undefined;\n\t\t\t\tactiveOrganizationId?: string | undefined;\n\t\t\t};\n\t\t\tuser: User;\n\t\t}>;\n\t};\n});\n\n/**\n * The middleware forces the endpoint to require a valid session by utilizing the `sessionMiddleware`.\n * It also appends additional types to the session type regarding organizations.\n */\nexport const orgSessionMiddleware = createAuthMiddleware(\n\t{\n\t\tuse: [sessionMiddleware],\n\t},\n\tasync (ctx) => {\n\t\tconst session = ctx.context.session as {\n\t\t\tsession: Session & {\n\t\t\t\tactiveTeamId?: string | undefined;\n\t\t\t\tactiveOrganizationId?: string | undefined;\n\t\t\t};\n\t\t\tuser: User;\n\t\t};\n\t\treturn {\n\t\t\tsession,\n\t\t};\n\t},\n);\n"],"mappings":";;;;;AAQA,MAAa,gBAAgB,qBAAqB,YAAY;AAC7D,QAAO,EAAE;EAaR;;;;;AAMF,MAAa,uBAAuB,qBACnC,EACC,KAAK,CAAC,kBAAkB,EACxB,EACD,OAAO,QAAQ;AAQd,QAAO,EACN,SARe,IAAI,QAAQ,SAS3B;EAEF"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { BetterAuthOptions } from "../../types/index.mjs";
|
|
2
|
+
import { AccessControl, Role } from "../access/types.mjs";
|
|
3
|
+
import "../access/index.mjs";
|
|
4
|
+
import { OrganizationOptions } from "./types.mjs";
|
|
5
|
+
import { InferInvitation, InferMember, InferOrganization, InferOrganizationRolesFromOption, InferOrganizationZodRolesFromOption, InferTeam, Invitation, InvitationInput, InvitationStatus, Member, MemberInput, Organization, OrganizationInput, OrganizationRole, OrganizationSchema, Team, TeamInput, TeamMember, TeamMemberInput, defaultRolesSchema, invitationSchema, invitationStatus, memberSchema, organizationRoleSchema, organizationSchema, roleSchema, teamMemberSchema, teamSchema } from "./schema.mjs";
|
|
6
|
+
import { ORGANIZATION_ERROR_CODES } from "./error-codes.mjs";
|
|
7
|
+
import "./index.mjs";
|
|
8
|
+
import { HasPermissionBaseInput } from "./permission.mjs";
|
|
9
|
+
import { DBFieldAttribute } from "@better-auth/core/db";
|
|
10
|
+
|
|
11
|
+
//#region src/plugins/organization/client.d.ts
|
|
12
|
+
/**
|
|
13
|
+
* Using the same `hasPermissionFn` function, but without the need for a `ctx` parameter or the `organizationId` parameter.
|
|
14
|
+
*/
|
|
15
|
+
declare const clientSideHasPermission: (input: HasPermissionBaseInput) => boolean;
|
|
16
|
+
interface OrganizationClientOptions {
|
|
17
|
+
ac?: AccessControl | undefined;
|
|
18
|
+
roles?: { [key in string]: Role } | undefined;
|
|
19
|
+
teams?: {
|
|
20
|
+
enabled: boolean;
|
|
21
|
+
} | undefined;
|
|
22
|
+
schema?: {
|
|
23
|
+
organization?: {
|
|
24
|
+
additionalFields?: {
|
|
25
|
+
[key: string]: DBFieldAttribute;
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
member?: {
|
|
29
|
+
additionalFields?: {
|
|
30
|
+
[key: string]: DBFieldAttribute;
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
invitation?: {
|
|
34
|
+
additionalFields?: {
|
|
35
|
+
[key: string]: DBFieldAttribute;
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
team?: {
|
|
39
|
+
additionalFields?: {
|
|
40
|
+
[key: string]: DBFieldAttribute;
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
organizationRole?: {
|
|
44
|
+
additionalFields?: {
|
|
45
|
+
[key: string]: DBFieldAttribute;
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
} | undefined;
|
|
49
|
+
dynamicAccessControl?: {
|
|
50
|
+
enabled: boolean;
|
|
51
|
+
} | undefined;
|
|
52
|
+
}
|
|
53
|
+
declare const organizationClient: <CO extends OrganizationClientOptions>(options?: CO | undefined) => BetterAuthClientPlugin;
|
|
54
|
+
declare const inferOrgAdditionalFields: <O extends {
|
|
55
|
+
options: BetterAuthOptions;
|
|
56
|
+
}, S extends OrganizationOptions["schema"] = undefined>(schema?: S | undefined) => undefined extends S ? O extends Object ? O extends {
|
|
57
|
+
session?: {
|
|
58
|
+
fields?: {
|
|
59
|
+
activeOrganizationId?: string;
|
|
60
|
+
activeTeamId?: string;
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
organization?: {
|
|
64
|
+
modelName?: string;
|
|
65
|
+
fields?: { [key in keyof Omit<Organization, "id">]?: string };
|
|
66
|
+
additionalFields?: { [key in string]: DBFieldAttribute };
|
|
67
|
+
};
|
|
68
|
+
member?: {
|
|
69
|
+
modelName?: string;
|
|
70
|
+
fields?: { [key in keyof Omit<Member, "id">]?: string };
|
|
71
|
+
additionalFields?: { [key in string]: DBFieldAttribute };
|
|
72
|
+
};
|
|
73
|
+
invitation?: {
|
|
74
|
+
modelName?: string;
|
|
75
|
+
fields?: { [key in keyof Omit<Invitation, "id">]?: string };
|
|
76
|
+
additionalFields?: { [key in string]: DBFieldAttribute };
|
|
77
|
+
};
|
|
78
|
+
team?: {
|
|
79
|
+
modelName?: string;
|
|
80
|
+
fields?: { [key in keyof Omit<Team, "id">]?: string };
|
|
81
|
+
additionalFields?: { [key in string]: DBFieldAttribute };
|
|
82
|
+
};
|
|
83
|
+
teamMember?: {
|
|
84
|
+
modelName?: string;
|
|
85
|
+
fields?: { [key in keyof Omit<TeamMember, "id">]?: string };
|
|
86
|
+
};
|
|
87
|
+
organizationRole?: {
|
|
88
|
+
modelName?: string;
|
|
89
|
+
fields?: { [key in keyof Omit<OrganizationRole, "id">]?: string };
|
|
90
|
+
additionalFields?: { [key in string]: DBFieldAttribute };
|
|
91
|
+
};
|
|
92
|
+
} ? O : ((O extends {
|
|
93
|
+
options: any;
|
|
94
|
+
} ? O : {
|
|
95
|
+
options: {
|
|
96
|
+
plugins: [];
|
|
97
|
+
};
|
|
98
|
+
})["options"]["plugins"][number] extends infer T ? T extends (O extends {
|
|
99
|
+
options: any;
|
|
100
|
+
} ? O : {
|
|
101
|
+
options: {
|
|
102
|
+
plugins: [];
|
|
103
|
+
};
|
|
104
|
+
})["options"]["plugins"][number] ? T extends {
|
|
105
|
+
id: "organization";
|
|
106
|
+
} ? T : never : never : never) extends {
|
|
107
|
+
options: {
|
|
108
|
+
schema: infer S_1;
|
|
109
|
+
};
|
|
110
|
+
} ? S_1 extends {
|
|
111
|
+
session?: {
|
|
112
|
+
fields?: {
|
|
113
|
+
activeOrganizationId?: string;
|
|
114
|
+
activeTeamId?: string;
|
|
115
|
+
};
|
|
116
|
+
};
|
|
117
|
+
organization?: {
|
|
118
|
+
modelName?: string;
|
|
119
|
+
fields?: { [key in keyof Omit<Organization, "id">]?: string };
|
|
120
|
+
additionalFields?: { [key in string]: DBFieldAttribute };
|
|
121
|
+
};
|
|
122
|
+
member?: {
|
|
123
|
+
modelName?: string;
|
|
124
|
+
fields?: { [key in keyof Omit<Member, "id">]?: string };
|
|
125
|
+
additionalFields?: { [key in string]: DBFieldAttribute };
|
|
126
|
+
};
|
|
127
|
+
invitation?: {
|
|
128
|
+
modelName?: string;
|
|
129
|
+
fields?: { [key in keyof Omit<Invitation, "id">]?: string };
|
|
130
|
+
additionalFields?: { [key in string]: DBFieldAttribute };
|
|
131
|
+
};
|
|
132
|
+
team?: {
|
|
133
|
+
modelName?: string;
|
|
134
|
+
fields?: { [key in keyof Omit<Team, "id">]?: string };
|
|
135
|
+
additionalFields?: { [key in string]: DBFieldAttribute };
|
|
136
|
+
};
|
|
137
|
+
teamMember?: {
|
|
138
|
+
modelName?: string;
|
|
139
|
+
fields?: { [key in keyof Omit<TeamMember, "id">]?: string };
|
|
140
|
+
};
|
|
141
|
+
organizationRole?: {
|
|
142
|
+
modelName?: string;
|
|
143
|
+
fields?: { [key in keyof Omit<OrganizationRole, "id">]?: string };
|
|
144
|
+
additionalFields?: { [key in string]: DBFieldAttribute };
|
|
145
|
+
};
|
|
146
|
+
} | undefined ? { [K in keyof S_1]: S_1[K] extends {
|
|
147
|
+
additionalFields: infer _AF;
|
|
148
|
+
} ? S_1[K] : undefined } : undefined : undefined : undefined : S;
|
|
149
|
+
//#endregion
|
|
150
|
+
export { clientSideHasPermission, inferOrgAdditionalFields, organizationClient };
|
|
151
|
+
//# sourceMappingURL=client.d.mts.map
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { useAuthQuery } from "../../client/query.mjs";
|
|
2
|
+
import "../../client/index.mjs";
|
|
3
|
+
import { adminAc, defaultRoles, memberAc, ownerAc } from "./access/statement.mjs";
|
|
4
|
+
import "./access/index.mjs";
|
|
5
|
+
import { ORGANIZATION_ERROR_CODES } from "./error-codes.mjs";
|
|
6
|
+
import { hasPermissionFn } from "./permission.mjs";
|
|
7
|
+
import { atom } from "nanostores";
|
|
8
|
+
|
|
9
|
+
//#region src/plugins/organization/client.ts
|
|
10
|
+
/**
|
|
11
|
+
* Using the same `hasPermissionFn` function, but without the need for a `ctx` parameter or the `organizationId` parameter.
|
|
12
|
+
*/
|
|
13
|
+
const clientSideHasPermission = (input) => {
|
|
14
|
+
return hasPermissionFn(input, input.options.roles || defaultRoles);
|
|
15
|
+
};
|
|
16
|
+
const organizationClient = (options) => {
|
|
17
|
+
const $listOrg = atom(false);
|
|
18
|
+
const $activeOrgSignal = atom(false);
|
|
19
|
+
const $activeMemberSignal = atom(false);
|
|
20
|
+
const $activeMemberRoleSignal = atom(false);
|
|
21
|
+
const roles = {
|
|
22
|
+
admin: adminAc,
|
|
23
|
+
member: memberAc,
|
|
24
|
+
owner: ownerAc,
|
|
25
|
+
...options?.roles
|
|
26
|
+
};
|
|
27
|
+
return {
|
|
28
|
+
id: "organization",
|
|
29
|
+
$InferServerPlugin: {},
|
|
30
|
+
getActions: ($fetch, _$store, co) => ({
|
|
31
|
+
$Infer: {
|
|
32
|
+
ActiveOrganization: {},
|
|
33
|
+
Organization: {},
|
|
34
|
+
Invitation: {},
|
|
35
|
+
Member: {},
|
|
36
|
+
Team: {}
|
|
37
|
+
},
|
|
38
|
+
organization: { checkRolePermission: (data) => {
|
|
39
|
+
return clientSideHasPermission({
|
|
40
|
+
role: data.role,
|
|
41
|
+
options: {
|
|
42
|
+
ac: options?.ac,
|
|
43
|
+
roles
|
|
44
|
+
},
|
|
45
|
+
permissions: data.permissions ?? data.permission
|
|
46
|
+
});
|
|
47
|
+
} }
|
|
48
|
+
}),
|
|
49
|
+
getAtoms: ($fetch) => {
|
|
50
|
+
const listOrganizations = useAuthQuery($listOrg, "/organization/list", $fetch, { method: "GET" });
|
|
51
|
+
return {
|
|
52
|
+
$listOrg,
|
|
53
|
+
$activeOrgSignal,
|
|
54
|
+
$activeMemberSignal,
|
|
55
|
+
$activeMemberRoleSignal,
|
|
56
|
+
activeOrganization: useAuthQuery([$activeOrgSignal], "/organization/get-full-organization", $fetch, () => ({ method: "GET" })),
|
|
57
|
+
listOrganizations,
|
|
58
|
+
activeMember: useAuthQuery([$activeMemberSignal], "/organization/get-active-member", $fetch, { method: "GET" }),
|
|
59
|
+
activeMemberRole: useAuthQuery([$activeMemberRoleSignal], "/organization/get-active-member-role", $fetch, { method: "GET" })
|
|
60
|
+
};
|
|
61
|
+
},
|
|
62
|
+
pathMethods: {
|
|
63
|
+
"/organization/get-full-organization": "GET",
|
|
64
|
+
"/organization/list-user-teams": "GET"
|
|
65
|
+
},
|
|
66
|
+
atomListeners: [
|
|
67
|
+
{
|
|
68
|
+
matcher(path) {
|
|
69
|
+
return path === "/organization/create" || path === "/organization/delete" || path === "/organization/update";
|
|
70
|
+
},
|
|
71
|
+
signal: "$listOrg"
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
matcher(path) {
|
|
75
|
+
return path.startsWith("/organization");
|
|
76
|
+
},
|
|
77
|
+
signal: "$activeOrgSignal"
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
matcher(path) {
|
|
81
|
+
return path.startsWith("/organization/set-active");
|
|
82
|
+
},
|
|
83
|
+
signal: "$sessionSignal"
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
matcher(path) {
|
|
87
|
+
return path.includes("/organization/update-member-role");
|
|
88
|
+
},
|
|
89
|
+
signal: "$activeMemberSignal"
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
matcher(path) {
|
|
93
|
+
return path.includes("/organization/update-member-role");
|
|
94
|
+
},
|
|
95
|
+
signal: "$activeMemberRoleSignal"
|
|
96
|
+
}
|
|
97
|
+
],
|
|
98
|
+
$ERROR_CODES: ORGANIZATION_ERROR_CODES
|
|
99
|
+
};
|
|
100
|
+
};
|
|
101
|
+
const inferOrgAdditionalFields = (schema) => {
|
|
102
|
+
return {};
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
//#endregion
|
|
106
|
+
export { clientSideHasPermission, inferOrgAdditionalFields, organizationClient };
|
|
107
|
+
//# sourceMappingURL=client.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.mjs","names":[],"sources":["../../../src/plugins/organization/client.ts"],"sourcesContent":["import type { BetterAuthClientPlugin } from \"@better-auth/core\";\nimport type { DBFieldAttribute } from \"@better-auth/core/db\";\nimport { atom } from \"nanostores\";\nimport { useAuthQuery } from \"../../client\";\nimport type {\n\tInferInvitation,\n\tInferMember,\n\tInferOrganization,\n\tInferTeam,\n\tMember,\n} from \"../../plugins/organization/schema\";\nimport type { BetterAuthOptions, BetterAuthPlugin } from \"../../types\";\nimport type { Prettify } from \"../../types/helper\";\nimport type { AccessControl, Role } from \"../access\";\nimport type { defaultStatements } from \"./access\";\nimport { adminAc, defaultRoles, memberAc, ownerAc } from \"./access\";\nimport { ORGANIZATION_ERROR_CODES } from \"./error-codes\";\nimport type { OrganizationPlugin } from \"./organization\";\nimport type { HasPermissionBaseInput } from \"./permission\";\nimport { hasPermissionFn } from \"./permission\";\nimport type { OrganizationOptions } from \"./types\";\n\nexport * from \"./error-codes\";\n\n/**\n * Using the same `hasPermissionFn` function, but without the need for a `ctx` parameter or the `organizationId` parameter.\n */\nexport const clientSideHasPermission = (input: HasPermissionBaseInput) => {\n\tconst acRoles: {\n\t\t[x: string]: Role<any> | undefined;\n\t} = input.options.roles || defaultRoles;\n\n\treturn hasPermissionFn(input, acRoles);\n};\n\ninterface OrganizationClientOptions {\n\tac?: AccessControl | undefined;\n\troles?:\n\t\t| {\n\t\t\t\t[key in string]: Role;\n\t\t }\n\t\t| undefined;\n\tteams?:\n\t\t| {\n\t\t\t\tenabled: boolean;\n\t\t }\n\t\t| undefined;\n\tschema?:\n\t\t| {\n\t\t\t\torganization?: {\n\t\t\t\t\tadditionalFields?: {\n\t\t\t\t\t\t[key: string]: DBFieldAttribute;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t\tmember?: {\n\t\t\t\t\tadditionalFields?: {\n\t\t\t\t\t\t[key: string]: DBFieldAttribute;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t\tinvitation?: {\n\t\t\t\t\tadditionalFields?: {\n\t\t\t\t\t\t[key: string]: DBFieldAttribute;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t\tteam?: {\n\t\t\t\t\tadditionalFields?: {\n\t\t\t\t\t\t[key: string]: DBFieldAttribute;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t\torganizationRole?: {\n\t\t\t\t\tadditionalFields?: {\n\t\t\t\t\t\t[key: string]: DBFieldAttribute;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t }\n\t\t| undefined;\n\tdynamicAccessControl?:\n\t\t| {\n\t\t\t\tenabled: boolean;\n\t\t }\n\t\t| undefined;\n}\n\nexport const organizationClient = <CO extends OrganizationClientOptions>(\n\toptions?: CO | undefined,\n) => {\n\tconst $listOrg = atom<boolean>(false);\n\tconst $activeOrgSignal = atom<boolean>(false);\n\tconst $activeMemberSignal = atom<boolean>(false);\n\tconst $activeMemberRoleSignal = atom<boolean>(false);\n\n\ttype DefaultStatements = typeof defaultStatements;\n\ttype Statements =\n\t\tCO[\"ac\"] extends AccessControl<infer S> ? S : DefaultStatements;\n\ttype PermissionType = {\n\t\t[key in keyof Statements]?: Array<\n\t\t\tStatements[key] extends readonly unknown[]\n\t\t\t\t? Statements[key][number]\n\t\t\t\t: never\n\t\t>;\n\t};\n\ttype PermissionExclusive =\n\t\t| {\n\t\t\t\t/**\n\t\t\t\t * @deprecated Use `permissions` instead\n\t\t\t\t */\n\t\t\t\tpermission: PermissionType;\n\t\t\t\tpermissions?: never | undefined;\n\t\t }\n\t\t| {\n\t\t\t\tpermissions: PermissionType;\n\t\t\t\tpermission?: never | undefined;\n\t\t };\n\n\tconst roles = {\n\t\tadmin: adminAc,\n\t\tmember: memberAc,\n\t\towner: ownerAc,\n\t\t...options?.roles,\n\t};\n\n\ttype OrganizationReturn = CO[\"teams\"] extends { enabled: true }\n\t\t? {\n\t\t\t\tmembers: InferMember<CO>[];\n\t\t\t\tinvitations: InferInvitation<CO>[];\n\t\t\t\tteams: InferTeam<CO>[];\n\t\t\t} & InferOrganization<CO>\n\t\t: {\n\t\t\t\tmembers: InferMember<CO>[];\n\t\t\t\tinvitations: InferInvitation<CO>[];\n\t\t\t} & InferOrganization<CO>;\n\n\ttype Schema = CO[\"schema\"];\n\treturn {\n\t\tid: \"organization\",\n\t\t$InferServerPlugin: {} as OrganizationPlugin<{\n\t\t\tac: CO[\"ac\"] extends AccessControl\n\t\t\t\t? CO[\"ac\"]\n\t\t\t\t: AccessControl<DefaultStatements>;\n\t\t\troles: CO[\"roles\"] extends Record<string, Role>\n\t\t\t\t? CO[\"roles\"]\n\t\t\t\t: {\n\t\t\t\t\t\tadmin: Role;\n\t\t\t\t\t\tmember: Role;\n\t\t\t\t\t\towner: Role;\n\t\t\t\t\t};\n\t\t\tteams: {\n\t\t\t\tenabled: CO[\"teams\"] extends { enabled: true } ? true : false;\n\t\t\t};\n\t\t\tschema: Schema;\n\t\t\tdynamicAccessControl: {\n\t\t\t\tenabled: CO[\"dynamicAccessControl\"] extends { enabled: true }\n\t\t\t\t\t? true\n\t\t\t\t\t: false;\n\t\t\t};\n\t\t}>,\n\t\tgetActions: ($fetch, _$store, co) => ({\n\t\t\t$Infer: {\n\t\t\t\tActiveOrganization: {} as OrganizationReturn,\n\t\t\t\tOrganization: {} as InferOrganization<CO>,\n\t\t\t\tInvitation: {} as InferInvitation<CO>,\n\t\t\t\tMember: {} as InferMember<CO>,\n\t\t\t\tTeam: {} as InferTeam<CO>,\n\t\t\t},\n\t\t\torganization: {\n\t\t\t\tcheckRolePermission: <\n\t\t\t\t\tR extends CO extends { roles: any }\n\t\t\t\t\t\t? keyof CO[\"roles\"]\n\t\t\t\t\t\t: \"admin\" | \"member\" | \"owner\",\n\t\t\t\t>(\n\t\t\t\t\tdata: PermissionExclusive & {\n\t\t\t\t\t\trole: R;\n\t\t\t\t\t},\n\t\t\t\t) => {\n\t\t\t\t\tconst isAuthorized = clientSideHasPermission({\n\t\t\t\t\t\trole: data.role as string,\n\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\tac: options?.ac,\n\t\t\t\t\t\t\troles: roles,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tpermissions: (data.permissions ?? data.permission) as any,\n\t\t\t\t\t});\n\t\t\t\t\treturn isAuthorized;\n\t\t\t\t},\n\t\t\t},\n\t\t}),\n\t\tgetAtoms: ($fetch) => {\n\t\t\tconst listOrganizations = useAuthQuery<InferOrganization<CO>[]>(\n\t\t\t\t$listOrg,\n\t\t\t\t\"/organization/list\",\n\t\t\t\t$fetch,\n\t\t\t\t{\n\t\t\t\t\tmethod: \"GET\",\n\t\t\t\t},\n\t\t\t);\n\t\t\tconst activeOrganization = useAuthQuery<\n\t\t\t\tPrettify<\n\t\t\t\t\tInferOrganization<CO> & {\n\t\t\t\t\t\tmembers: InferMember<CO>[];\n\t\t\t\t\t\tinvitations: InferInvitation<CO>[];\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t>(\n\t\t\t\t[$activeOrgSignal],\n\t\t\t\t\"/organization/get-full-organization\",\n\t\t\t\t$fetch,\n\t\t\t\t() => ({\n\t\t\t\t\tmethod: \"GET\",\n\t\t\t\t}),\n\t\t\t);\n\n\t\t\tconst activeMember = useAuthQuery<Member>(\n\t\t\t\t[$activeMemberSignal],\n\t\t\t\t\"/organization/get-active-member\",\n\t\t\t\t$fetch,\n\t\t\t\t{\n\t\t\t\t\tmethod: \"GET\",\n\t\t\t\t},\n\t\t\t);\n\n\t\t\tconst activeMemberRole = useAuthQuery<{ role: string }>(\n\t\t\t\t[$activeMemberRoleSignal],\n\t\t\t\t\"/organization/get-active-member-role\",\n\t\t\t\t$fetch,\n\t\t\t\t{\n\t\t\t\t\tmethod: \"GET\",\n\t\t\t\t},\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\t$listOrg,\n\t\t\t\t$activeOrgSignal,\n\t\t\t\t$activeMemberSignal,\n\t\t\t\t$activeMemberRoleSignal,\n\t\t\t\tactiveOrganization,\n\t\t\t\tlistOrganizations,\n\t\t\t\tactiveMember,\n\t\t\t\tactiveMemberRole,\n\t\t\t};\n\t\t},\n\t\tpathMethods: {\n\t\t\t\"/organization/get-full-organization\": \"GET\",\n\t\t\t\"/organization/list-user-teams\": \"GET\",\n\t\t},\n\t\tatomListeners: [\n\t\t\t{\n\t\t\t\tmatcher(path) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\tpath === \"/organization/create\" ||\n\t\t\t\t\t\tpath === \"/organization/delete\" ||\n\t\t\t\t\t\tpath === \"/organization/update\"\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tsignal: \"$listOrg\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tmatcher(path) {\n\t\t\t\t\treturn path.startsWith(\"/organization\");\n\t\t\t\t},\n\t\t\t\tsignal: \"$activeOrgSignal\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tmatcher(path) {\n\t\t\t\t\treturn path.startsWith(\"/organization/set-active\");\n\t\t\t\t},\n\t\t\t\tsignal: \"$sessionSignal\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tmatcher(path) {\n\t\t\t\t\treturn path.includes(\"/organization/update-member-role\");\n\t\t\t\t},\n\t\t\t\tsignal: \"$activeMemberSignal\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tmatcher(path) {\n\t\t\t\t\treturn path.includes(\"/organization/update-member-role\");\n\t\t\t\t},\n\t\t\t\tsignal: \"$activeMemberRoleSignal\",\n\t\t\t},\n\t\t],\n\t\t$ERROR_CODES: ORGANIZATION_ERROR_CODES,\n\t} satisfies BetterAuthClientPlugin;\n};\n\nexport const inferOrgAdditionalFields = <\n\tO extends {\n\t\toptions: BetterAuthOptions;\n\t},\n\tS extends OrganizationOptions[\"schema\"] = undefined,\n>(\n\tschema?: S | undefined,\n) => {\n\ttype FindById<\n\t\tT extends readonly BetterAuthPlugin[],\n\t\tTargetId extends string,\n\t> = Extract<T[number], { id: TargetId }>;\n\n\ttype Auth = O extends { options: any } ? O : { options: { plugins: [] } };\n\n\ttype OrganizationPlugin = FindById<\n\t\t// @ts-expect-error\n\t\tAuth[\"options\"][\"plugins\"],\n\t\t\"organization\"\n\t>;\n\n\t// The server schema can contain more properties other than additionalFields, but the client only supports additionalFields\n\t// if we don't remove all other properties we may see assignability issues\n\n\ttype ExtractClientOnlyFields<T> = {\n\t\t[K in keyof T]: T[K] extends { additionalFields: infer _AF }\n\t\t\t? T[K]\n\t\t\t: undefined;\n\t};\n\n\ttype Schema = O extends Object\n\t\t? O extends Exclude<OrganizationOptions[\"schema\"], undefined>\n\t\t\t? O\n\t\t\t: OrganizationPlugin extends { options: { schema: infer S } }\n\t\t\t\t? S extends OrganizationOptions[\"schema\"]\n\t\t\t\t\t? ExtractClientOnlyFields<S>\n\t\t\t\t\t: undefined\n\t\t\t\t: undefined\n\t\t: undefined;\n\treturn {} as undefined extends S ? Schema : S;\n};\n\nexport type * from \"./schema\";\n"],"mappings":";;;;;;;;;;;;AA2BA,MAAa,2BAA2B,UAAkC;AAKzE,QAAO,gBAAgB,OAFnB,MAAM,QAAQ,SAAS,aAEW;;AAmDvC,MAAa,sBACZ,YACI;CACJ,MAAM,WAAW,KAAc,MAAM;CACrC,MAAM,mBAAmB,KAAc,MAAM;CAC7C,MAAM,sBAAsB,KAAc,MAAM;CAChD,MAAM,0BAA0B,KAAc,MAAM;CAyBpD,MAAM,QAAQ;EACb,OAAO;EACP,QAAQ;EACR,OAAO;EACP,GAAG,SAAS;EACZ;AAcD,QAAO;EACN,IAAI;EACJ,oBAAoB,EAAE;EAqBtB,aAAa,QAAQ,SAAS,QAAQ;GACrC,QAAQ;IACP,oBAAoB,EAAE;IACtB,cAAc,EAAE;IAChB,YAAY,EAAE;IACd,QAAQ,EAAE;IACV,MAAM,EAAE;IACR;GACD,cAAc,EACb,sBAKC,SAGI;AASJ,WARqB,wBAAwB;KAC5C,MAAM,KAAK;KACX,SAAS;MACR,IAAI,SAAS;MACN;MACP;KACD,aAAc,KAAK,eAAe,KAAK;KACvC,CAAC;MAGH;GACD;EACD,WAAW,WAAW;GACrB,MAAM,oBAAoB,aACzB,UACA,sBACA,QACA,EACC,QAAQ,OACR,CACD;AAmCD,UAAO;IACN;IACA;IACA;IACA;IACA,oBAvC0B,aAQ1B,CAAC,iBAAiB,EAClB,uCACA,eACO,EACN,QAAQ,OACR,EACD;IA0BA;IACA,cAzBoB,aACpB,CAAC,oBAAoB,EACrB,mCACA,QACA,EACC,QAAQ,OACR,CACD;IAmBA,kBAjBwB,aACxB,CAAC,wBAAwB,EACzB,wCACA,QACA,EACC,QAAQ,OACR,CACD;IAWA;;EAEF,aAAa;GACZ,uCAAuC;GACvC,iCAAiC;GACjC;EACD,eAAe;GACd;IACC,QAAQ,MAAM;AACb,YACC,SAAS,0BACT,SAAS,0BACT,SAAS;;IAGX,QAAQ;IACR;GACD;IACC,QAAQ,MAAM;AACb,YAAO,KAAK,WAAW,gBAAgB;;IAExC,QAAQ;IACR;GACD;IACC,QAAQ,MAAM;AACb,YAAO,KAAK,WAAW,2BAA2B;;IAEnD,QAAQ;IACR;GACD;IACC,QAAQ,MAAM;AACb,YAAO,KAAK,SAAS,mCAAmC;;IAEzD,QAAQ;IACR;GACD;IACC,QAAQ,MAAM;AACb,YAAO,KAAK,SAAS,mCAAmC;;IAEzD,QAAQ;IACR;GACD;EACD,cAAc;EACd;;AAGF,MAAa,4BAMZ,WACI;AAgCJ,QAAO,EAAE"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { defineErrorCodes } from "@better-auth/core/utils/error-codes";
|
|
2
|
+
|
|
3
|
+
//#region src/plugins/organization/error-codes.ts
|
|
4
|
+
const ORGANIZATION_ERROR_CODES = defineErrorCodes({
|
|
5
|
+
YOU_ARE_NOT_ALLOWED_TO_CREATE_A_NEW_ORGANIZATION: "You are not allowed to create a new organization",
|
|
6
|
+
YOU_HAVE_REACHED_THE_MAXIMUM_NUMBER_OF_ORGANIZATIONS: "You have reached the maximum number of organizations",
|
|
7
|
+
ORGANIZATION_ALREADY_EXISTS: "Organization already exists",
|
|
8
|
+
ORGANIZATION_SLUG_ALREADY_TAKEN: "Organization slug already taken",
|
|
9
|
+
ORGANIZATION_NOT_FOUND: "Organization not found",
|
|
10
|
+
USER_IS_NOT_A_MEMBER_OF_THE_ORGANIZATION: "User is not a member of the organization",
|
|
11
|
+
YOU_ARE_NOT_ALLOWED_TO_UPDATE_THIS_ORGANIZATION: "You are not allowed to update this organization",
|
|
12
|
+
YOU_ARE_NOT_ALLOWED_TO_DELETE_THIS_ORGANIZATION: "You are not allowed to delete this organization",
|
|
13
|
+
NO_ACTIVE_ORGANIZATION: "No active organization",
|
|
14
|
+
USER_IS_ALREADY_A_MEMBER_OF_THIS_ORGANIZATION: "User is already a member of this organization",
|
|
15
|
+
MEMBER_NOT_FOUND: "Member not found",
|
|
16
|
+
ROLE_NOT_FOUND: "Role not found",
|
|
17
|
+
YOU_ARE_NOT_ALLOWED_TO_CREATE_A_NEW_TEAM: "You are not allowed to create a new team",
|
|
18
|
+
TEAM_ALREADY_EXISTS: "Team already exists",
|
|
19
|
+
TEAM_NOT_FOUND: "Team not found",
|
|
20
|
+
YOU_CANNOT_LEAVE_THE_ORGANIZATION_AS_THE_ONLY_OWNER: "You cannot leave the organization as the only owner",
|
|
21
|
+
YOU_CANNOT_LEAVE_THE_ORGANIZATION_WITHOUT_AN_OWNER: "You cannot leave the organization without an owner",
|
|
22
|
+
YOU_ARE_NOT_ALLOWED_TO_DELETE_THIS_MEMBER: "You are not allowed to delete this member",
|
|
23
|
+
YOU_ARE_NOT_ALLOWED_TO_INVITE_USERS_TO_THIS_ORGANIZATION: "You are not allowed to invite users to this organization",
|
|
24
|
+
USER_IS_ALREADY_INVITED_TO_THIS_ORGANIZATION: "User is already invited to this organization",
|
|
25
|
+
INVITATION_NOT_FOUND: "Invitation not found",
|
|
26
|
+
YOU_ARE_NOT_THE_RECIPIENT_OF_THE_INVITATION: "You are not the recipient of the invitation",
|
|
27
|
+
EMAIL_VERIFICATION_REQUIRED_BEFORE_ACCEPTING_OR_REJECTING_INVITATION: "Email verification required before accepting or rejecting invitation",
|
|
28
|
+
YOU_ARE_NOT_ALLOWED_TO_CANCEL_THIS_INVITATION: "You are not allowed to cancel this invitation",
|
|
29
|
+
INVITER_IS_NO_LONGER_A_MEMBER_OF_THE_ORGANIZATION: "Inviter is no longer a member of the organization",
|
|
30
|
+
YOU_ARE_NOT_ALLOWED_TO_INVITE_USER_WITH_THIS_ROLE: "You are not allowed to invite a user with this role",
|
|
31
|
+
FAILED_TO_RETRIEVE_INVITATION: "Failed to retrieve invitation",
|
|
32
|
+
YOU_HAVE_REACHED_THE_MAXIMUM_NUMBER_OF_TEAMS: "You have reached the maximum number of teams",
|
|
33
|
+
UNABLE_TO_REMOVE_LAST_TEAM: "Unable to remove last team",
|
|
34
|
+
YOU_ARE_NOT_ALLOWED_TO_UPDATE_THIS_MEMBER: "You are not allowed to update this member",
|
|
35
|
+
ORGANIZATION_MEMBERSHIP_LIMIT_REACHED: "Organization membership limit reached",
|
|
36
|
+
YOU_ARE_NOT_ALLOWED_TO_CREATE_TEAMS_IN_THIS_ORGANIZATION: "You are not allowed to create teams in this organization",
|
|
37
|
+
YOU_ARE_NOT_ALLOWED_TO_DELETE_TEAMS_IN_THIS_ORGANIZATION: "You are not allowed to delete teams in this organization",
|
|
38
|
+
YOU_ARE_NOT_ALLOWED_TO_UPDATE_THIS_TEAM: "You are not allowed to update this team",
|
|
39
|
+
YOU_ARE_NOT_ALLOWED_TO_DELETE_THIS_TEAM: "You are not allowed to delete this team",
|
|
40
|
+
INVITATION_LIMIT_REACHED: "Invitation limit reached",
|
|
41
|
+
TEAM_MEMBER_LIMIT_REACHED: "Team member limit reached",
|
|
42
|
+
USER_IS_NOT_A_MEMBER_OF_THE_TEAM: "User is not a member of the team",
|
|
43
|
+
YOU_CAN_NOT_ACCESS_THE_MEMBERS_OF_THIS_TEAM: "You are not allowed to list the members of this team",
|
|
44
|
+
YOU_DO_NOT_HAVE_AN_ACTIVE_TEAM: "You do not have an active team",
|
|
45
|
+
YOU_ARE_NOT_ALLOWED_TO_CREATE_A_NEW_TEAM_MEMBER: "You are not allowed to create a new member",
|
|
46
|
+
YOU_ARE_NOT_ALLOWED_TO_REMOVE_A_TEAM_MEMBER: "You are not allowed to remove a team member",
|
|
47
|
+
YOU_ARE_NOT_ALLOWED_TO_ACCESS_THIS_ORGANIZATION: "You are not allowed to access this organization as an owner",
|
|
48
|
+
YOU_ARE_NOT_A_MEMBER_OF_THIS_ORGANIZATION: "You are not a member of this organization",
|
|
49
|
+
MISSING_AC_INSTANCE: "Dynamic Access Control requires a pre-defined ac instance on the server auth plugin. Read server logs for more information",
|
|
50
|
+
YOU_MUST_BE_IN_AN_ORGANIZATION_TO_CREATE_A_ROLE: "You must be in an organization to create a role",
|
|
51
|
+
YOU_ARE_NOT_ALLOWED_TO_CREATE_A_ROLE: "You are not allowed to create a role",
|
|
52
|
+
YOU_ARE_NOT_ALLOWED_TO_UPDATE_A_ROLE: "You are not allowed to update a role",
|
|
53
|
+
YOU_ARE_NOT_ALLOWED_TO_DELETE_A_ROLE: "You are not allowed to delete a role",
|
|
54
|
+
YOU_ARE_NOT_ALLOWED_TO_READ_A_ROLE: "You are not allowed to read a role",
|
|
55
|
+
YOU_ARE_NOT_ALLOWED_TO_LIST_A_ROLE: "You are not allowed to list a role",
|
|
56
|
+
YOU_ARE_NOT_ALLOWED_TO_GET_A_ROLE: "You are not allowed to get a role",
|
|
57
|
+
TOO_MANY_ROLES: "This organization has too many roles",
|
|
58
|
+
INVALID_RESOURCE: "The provided permission includes an invalid resource",
|
|
59
|
+
ROLE_NAME_IS_ALREADY_TAKEN: "That role name is already taken",
|
|
60
|
+
CANNOT_DELETE_A_PRE_DEFINED_ROLE: "Cannot delete a pre-defined role"
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
//#endregion
|
|
64
|
+
export { ORGANIZATION_ERROR_CODES };
|
|
65
|
+
//# sourceMappingURL=error-codes.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-codes.mjs","names":[],"sources":["../../../src/plugins/organization/error-codes.ts"],"sourcesContent":["import { defineErrorCodes } from \"@better-auth/core/utils/error-codes\";\n\nexport const ORGANIZATION_ERROR_CODES = defineErrorCodes({\n\tYOU_ARE_NOT_ALLOWED_TO_CREATE_A_NEW_ORGANIZATION:\n\t\t\"You are not allowed to create a new organization\",\n\tYOU_HAVE_REACHED_THE_MAXIMUM_NUMBER_OF_ORGANIZATIONS:\n\t\t\"You have reached the maximum number of organizations\",\n\tORGANIZATION_ALREADY_EXISTS: \"Organization already exists\",\n\tORGANIZATION_SLUG_ALREADY_TAKEN: \"Organization slug already taken\",\n\tORGANIZATION_NOT_FOUND: \"Organization not found\",\n\tUSER_IS_NOT_A_MEMBER_OF_THE_ORGANIZATION:\n\t\t\"User is not a member of the organization\",\n\tYOU_ARE_NOT_ALLOWED_TO_UPDATE_THIS_ORGANIZATION:\n\t\t\"You are not allowed to update this organization\",\n\tYOU_ARE_NOT_ALLOWED_TO_DELETE_THIS_ORGANIZATION:\n\t\t\"You are not allowed to delete this organization\",\n\tNO_ACTIVE_ORGANIZATION: \"No active organization\",\n\tUSER_IS_ALREADY_A_MEMBER_OF_THIS_ORGANIZATION:\n\t\t\"User is already a member of this organization\",\n\tMEMBER_NOT_FOUND: \"Member not found\",\n\tROLE_NOT_FOUND: \"Role not found\",\n\tYOU_ARE_NOT_ALLOWED_TO_CREATE_A_NEW_TEAM:\n\t\t\"You are not allowed to create a new team\",\n\tTEAM_ALREADY_EXISTS: \"Team already exists\",\n\tTEAM_NOT_FOUND: \"Team not found\",\n\tYOU_CANNOT_LEAVE_THE_ORGANIZATION_AS_THE_ONLY_OWNER:\n\t\t\"You cannot leave the organization as the only owner\",\n\tYOU_CANNOT_LEAVE_THE_ORGANIZATION_WITHOUT_AN_OWNER:\n\t\t\"You cannot leave the organization without an owner\",\n\tYOU_ARE_NOT_ALLOWED_TO_DELETE_THIS_MEMBER:\n\t\t\"You are not allowed to delete this member\",\n\tYOU_ARE_NOT_ALLOWED_TO_INVITE_USERS_TO_THIS_ORGANIZATION:\n\t\t\"You are not allowed to invite users to this organization\",\n\tUSER_IS_ALREADY_INVITED_TO_THIS_ORGANIZATION:\n\t\t\"User is already invited to this organization\",\n\tINVITATION_NOT_FOUND: \"Invitation not found\",\n\tYOU_ARE_NOT_THE_RECIPIENT_OF_THE_INVITATION:\n\t\t\"You are not the recipient of the invitation\",\n\tEMAIL_VERIFICATION_REQUIRED_BEFORE_ACCEPTING_OR_REJECTING_INVITATION:\n\t\t\"Email verification required before accepting or rejecting invitation\",\n\tYOU_ARE_NOT_ALLOWED_TO_CANCEL_THIS_INVITATION:\n\t\t\"You are not allowed to cancel this invitation\",\n\tINVITER_IS_NO_LONGER_A_MEMBER_OF_THE_ORGANIZATION:\n\t\t\"Inviter is no longer a member of the organization\",\n\tYOU_ARE_NOT_ALLOWED_TO_INVITE_USER_WITH_THIS_ROLE:\n\t\t\"You are not allowed to invite a user with this role\",\n\tFAILED_TO_RETRIEVE_INVITATION: \"Failed to retrieve invitation\",\n\tYOU_HAVE_REACHED_THE_MAXIMUM_NUMBER_OF_TEAMS:\n\t\t\"You have reached the maximum number of teams\",\n\tUNABLE_TO_REMOVE_LAST_TEAM: \"Unable to remove last team\",\n\tYOU_ARE_NOT_ALLOWED_TO_UPDATE_THIS_MEMBER:\n\t\t\"You are not allowed to update this member\",\n\tORGANIZATION_MEMBERSHIP_LIMIT_REACHED:\n\t\t\"Organization membership limit reached\",\n\tYOU_ARE_NOT_ALLOWED_TO_CREATE_TEAMS_IN_THIS_ORGANIZATION:\n\t\t\"You are not allowed to create teams in this organization\",\n\tYOU_ARE_NOT_ALLOWED_TO_DELETE_TEAMS_IN_THIS_ORGANIZATION:\n\t\t\"You are not allowed to delete teams in this organization\",\n\tYOU_ARE_NOT_ALLOWED_TO_UPDATE_THIS_TEAM:\n\t\t\"You are not allowed to update this team\",\n\tYOU_ARE_NOT_ALLOWED_TO_DELETE_THIS_TEAM:\n\t\t\"You are not allowed to delete this team\",\n\tINVITATION_LIMIT_REACHED: \"Invitation limit reached\",\n\tTEAM_MEMBER_LIMIT_REACHED: \"Team member limit reached\",\n\tUSER_IS_NOT_A_MEMBER_OF_THE_TEAM: \"User is not a member of the team\",\n\tYOU_CAN_NOT_ACCESS_THE_MEMBERS_OF_THIS_TEAM:\n\t\t\"You are not allowed to list the members of this team\",\n\tYOU_DO_NOT_HAVE_AN_ACTIVE_TEAM: \"You do not have an active team\",\n\tYOU_ARE_NOT_ALLOWED_TO_CREATE_A_NEW_TEAM_MEMBER:\n\t\t\"You are not allowed to create a new member\",\n\tYOU_ARE_NOT_ALLOWED_TO_REMOVE_A_TEAM_MEMBER:\n\t\t\"You are not allowed to remove a team member\",\n\tYOU_ARE_NOT_ALLOWED_TO_ACCESS_THIS_ORGANIZATION:\n\t\t\"You are not allowed to access this organization as an owner\",\n\tYOU_ARE_NOT_A_MEMBER_OF_THIS_ORGANIZATION:\n\t\t\"You are not a member of this organization\",\n\tMISSING_AC_INSTANCE:\n\t\t\"Dynamic Access Control requires a pre-defined ac instance on the server auth plugin. Read server logs for more information\",\n\tYOU_MUST_BE_IN_AN_ORGANIZATION_TO_CREATE_A_ROLE:\n\t\t\"You must be in an organization to create a role\",\n\tYOU_ARE_NOT_ALLOWED_TO_CREATE_A_ROLE: \"You are not allowed to create a role\",\n\tYOU_ARE_NOT_ALLOWED_TO_UPDATE_A_ROLE: \"You are not allowed to update a role\",\n\tYOU_ARE_NOT_ALLOWED_TO_DELETE_A_ROLE: \"You are not allowed to delete a role\",\n\tYOU_ARE_NOT_ALLOWED_TO_READ_A_ROLE: \"You are not allowed to read a role\",\n\tYOU_ARE_NOT_ALLOWED_TO_LIST_A_ROLE: \"You are not allowed to list a role\",\n\tYOU_ARE_NOT_ALLOWED_TO_GET_A_ROLE: \"You are not allowed to get a role\",\n\tTOO_MANY_ROLES: \"This organization has too many roles\",\n\tINVALID_RESOURCE: \"The provided permission includes an invalid resource\",\n\tROLE_NAME_IS_ALREADY_TAKEN: \"That role name is already taken\",\n\tCANNOT_DELETE_A_PRE_DEFINED_ROLE: \"Cannot delete a pre-defined role\",\n});\n"],"mappings":";;;AAEA,MAAa,2BAA2B,iBAAiB;CACxD,kDACC;CACD,sDACC;CACD,6BAA6B;CAC7B,iCAAiC;CACjC,wBAAwB;CACxB,0CACC;CACD,iDACC;CACD,iDACC;CACD,wBAAwB;CACxB,+CACC;CACD,kBAAkB;CAClB,gBAAgB;CAChB,0CACC;CACD,qBAAqB;CACrB,gBAAgB;CAChB,qDACC;CACD,oDACC;CACD,2CACC;CACD,0DACC;CACD,8CACC;CACD,sBAAsB;CACtB,6CACC;CACD,sEACC;CACD,+CACC;CACD,mDACC;CACD,mDACC;CACD,+BAA+B;CAC/B,8CACC;CACD,4BAA4B;CAC5B,2CACC;CACD,uCACC;CACD,0DACC;CACD,0DACC;CACD,yCACC;CACD,yCACC;CACD,0BAA0B;CAC1B,2BAA2B;CAC3B,kCAAkC;CAClC,6CACC;CACD,gCAAgC;CAChC,iDACC;CACD,6CACC;CACD,iDACC;CACD,2CACC;CACD,qBACC;CACD,iDACC;CACD,sCAAsC;CACtC,sCAAsC;CACtC,sCAAsC;CACtC,oCAAoC;CACpC,oCAAoC;CACpC,mCAAmC;CACnC,gBAAgB;CAChB,kBAAkB;CAClB,4BAA4B;CAC5B,kCAAkC;CAClC,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { APIError } from "../../api/index.mjs";
|
|
2
|
+
import { defaultRoles } from "./access/statement.mjs";
|
|
3
|
+
import "./access/index.mjs";
|
|
4
|
+
import { cacheAllRoles, hasPermissionFn } from "./permission.mjs";
|
|
5
|
+
import * as z from "zod";
|
|
6
|
+
|
|
7
|
+
//#region src/plugins/organization/has-permission.ts
|
|
8
|
+
const hasPermission = async (input, ctx) => {
|
|
9
|
+
let acRoles = { ...input.options.roles || defaultRoles };
|
|
10
|
+
if (ctx && input.organizationId && input.options.dynamicAccessControl?.enabled && input.options.ac && !input.useMemoryCache) {
|
|
11
|
+
const roles = await ctx.context.adapter.findMany({
|
|
12
|
+
model: "organizationRole",
|
|
13
|
+
where: [{
|
|
14
|
+
field: "organizationId",
|
|
15
|
+
value: input.organizationId
|
|
16
|
+
}]
|
|
17
|
+
});
|
|
18
|
+
for (const { role, permission: permissionsString } of roles) {
|
|
19
|
+
if (role in acRoles) continue;
|
|
20
|
+
const result = z.record(z.string(), z.array(z.string())).safeParse(JSON.parse(permissionsString));
|
|
21
|
+
if (!result.success) {
|
|
22
|
+
ctx.context.logger.error("[hasPermission] Invalid permissions for role " + role, { permissions: JSON.parse(permissionsString) });
|
|
23
|
+
throw new APIError("INTERNAL_SERVER_ERROR", { message: "Invalid permissions for role " + role });
|
|
24
|
+
}
|
|
25
|
+
acRoles[role] = input.options.ac.newRole(result.data);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
if (input.useMemoryCache) acRoles = cacheAllRoles.get(input.organizationId) || acRoles;
|
|
29
|
+
cacheAllRoles.set(input.organizationId, acRoles);
|
|
30
|
+
return hasPermissionFn(input, acRoles);
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
//#endregion
|
|
34
|
+
export { hasPermission };
|
|
35
|
+
//# sourceMappingURL=has-permission.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"has-permission.mjs","names":[],"sources":["../../../src/plugins/organization/has-permission.ts"],"sourcesContent":["import type { GenericEndpointContext } from \"@better-auth/core\";\nimport * as z from \"zod\";\nimport { APIError } from \"../../api\";\nimport type { Role } from \"../access\";\nimport { defaultRoles } from \"./access\";\nimport type { HasPermissionBaseInput } from \"./permission\";\nimport { cacheAllRoles, hasPermissionFn } from \"./permission\";\nimport type { OrganizationRole } from \"./schema\";\n\nexport const hasPermission = async (\n\tinput: {\n\t\torganizationId: string;\n\t\t/**\n\t\t * If true, will use the in-memory cache of the roles.\n\t\t * Keep in mind to use this in a stateless mindset, the purpose of this is to avoid unnecessary database calls when running multiple\n\t\t * hasPermission calls in a row.\n\t\t *\n\t\t * @default false\n\t\t */\n\t\tuseMemoryCache?: boolean | undefined;\n\t} & HasPermissionBaseInput,\n\tctx: GenericEndpointContext,\n) => {\n\tlet acRoles: {\n\t\t[x: string]: Role<any> | undefined;\n\t} = { ...(input.options.roles || defaultRoles) };\n\n\tif (\n\t\tctx &&\n\t\tinput.organizationId &&\n\t\tinput.options.dynamicAccessControl?.enabled &&\n\t\tinput.options.ac &&\n\t\t!input.useMemoryCache\n\t) {\n\t\t// Load roles from database\n\t\tconst roles = await ctx.context.adapter.findMany<\n\t\t\tOrganizationRole & { permission: string }\n\t\t>({\n\t\t\tmodel: \"organizationRole\",\n\t\t\twhere: [\n\t\t\t\t{\n\t\t\t\t\tfield: \"organizationId\",\n\t\t\t\t\tvalue: input.organizationId,\n\t\t\t\t},\n\t\t\t],\n\t\t});\n\n\t\tfor (const { role, permission: permissionsString } of roles) {\n\t\t\t// If it's for an existing role, skip as we shouldn't override hard-coded roles.\n\t\t\tif (role in acRoles) continue;\n\n\t\t\tconst result = z\n\t\t\t\t.record(z.string(), z.array(z.string()))\n\t\t\t\t.safeParse(JSON.parse(permissionsString));\n\n\t\t\tif (!result.success) {\n\t\t\t\tctx.context.logger.error(\n\t\t\t\t\t\"[hasPermission] Invalid permissions for role \" + role,\n\t\t\t\t\t{\n\t\t\t\t\t\tpermissions: JSON.parse(permissionsString),\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t\tthrow new APIError(\"INTERNAL_SERVER_ERROR\", {\n\t\t\t\t\tmessage: \"Invalid permissions for role \" + role,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tacRoles[role] = input.options.ac.newRole(result.data);\n\t\t}\n\t}\n\n\tif (input.useMemoryCache) {\n\t\tacRoles = cacheAllRoles.get(input.organizationId) || acRoles;\n\t}\n\tcacheAllRoles.set(input.organizationId, acRoles);\n\n\treturn hasPermissionFn(input, acRoles);\n};\n"],"mappings":";;;;;;;AASA,MAAa,gBAAgB,OAC5B,OAWA,QACI;CACJ,IAAI,UAEA,EAAE,GAAI,MAAM,QAAQ,SAAS,cAAe;AAEhD,KACC,OACA,MAAM,kBACN,MAAM,QAAQ,sBAAsB,WACpC,MAAM,QAAQ,MACd,CAAC,MAAM,gBACN;EAED,MAAM,QAAQ,MAAM,IAAI,QAAQ,QAAQ,SAEtC;GACD,OAAO;GACP,OAAO,CACN;IACC,OAAO;IACP,OAAO,MAAM;IACb,CACD;GACD,CAAC;AAEF,OAAK,MAAM,EAAE,MAAM,YAAY,uBAAuB,OAAO;AAE5D,OAAI,QAAQ,QAAS;GAErB,MAAM,SAAS,EACb,OAAO,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CACvC,UAAU,KAAK,MAAM,kBAAkB,CAAC;AAE1C,OAAI,CAAC,OAAO,SAAS;AACpB,QAAI,QAAQ,OAAO,MAClB,kDAAkD,MAClD,EACC,aAAa,KAAK,MAAM,kBAAkB,EAC1C,CACD;AACD,UAAM,IAAI,SAAS,yBAAyB,EAC3C,SAAS,kCAAkC,MAC3C,CAAC;;AAGH,WAAQ,QAAQ,MAAM,QAAQ,GAAG,QAAQ,OAAO,KAAK;;;AAIvD,KAAI,MAAM,eACT,WAAU,cAAc,IAAI,MAAM,eAAe,IAAI;AAEtD,eAAc,IAAI,MAAM,gBAAgB,QAAQ;AAEhD,QAAO,gBAAgB,OAAO,QAAQ"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { OrganizationOptions } from "./types.mjs";
|
|
2
|
+
import { InferInvitation, InferMember, InferOrganization, InferOrganizationRolesFromOption, InferOrganizationZodRolesFromOption, InferTeam, Invitation, InvitationInput, InvitationStatus, Member, MemberInput, Organization, OrganizationInput, OrganizationRole, OrganizationSchema, Team, TeamInput, TeamMember, TeamMemberInput, defaultRolesSchema, invitationSchema, invitationStatus, memberSchema, organizationRoleSchema, organizationSchema, roleSchema, teamMemberSchema, teamSchema } from "./schema.mjs";
|
|
3
|
+
import { getOrgAdapter } from "./adapter.mjs";
|
|
4
|
+
import { DefaultOrganizationPlugin, DynamicAccessControlEndpoints, OrganizationCreator, OrganizationEndpoints, OrganizationPlugin, TeamEndpoints, organization, parseRoles } from "./organization.mjs";
|
|
5
|
+
export { DefaultOrganizationPlugin, DynamicAccessControlEndpoints, InferInvitation, InferMember, InferOrganization, InferOrganizationRolesFromOption, InferOrganizationZodRolesFromOption, InferTeam, Invitation, InvitationInput, InvitationStatus, Member, MemberInput, Organization, OrganizationCreator, OrganizationEndpoints, OrganizationInput, OrganizationOptions, OrganizationPlugin, OrganizationRole, OrganizationSchema, Team, TeamEndpoints, TeamInput, TeamMember, TeamMemberInput, defaultRolesSchema, getOrgAdapter, invitationSchema, invitationStatus, memberSchema, organization, organizationRoleSchema, organizationSchema, parseRoles, roleSchema, teamMemberSchema, teamSchema };
|