better-auth 1.7.0-beta.2 → 1.7.0-beta.4
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 +14 -15
- package/dist/_virtual/_rolldown/runtime.mjs +10 -1
- package/dist/api/index.d.mts +18 -48
- package/dist/api/routes/account.d.mts +4 -23
- package/dist/api/routes/account.mjs +102 -75
- package/dist/api/routes/callback.mjs +42 -20
- package/dist/api/routes/email-verification.d.mts +1 -0
- package/dist/api/routes/email-verification.mjs +6 -5
- package/dist/api/routes/error.mjs +1 -1
- package/dist/api/routes/password.mjs +1 -1
- package/dist/api/routes/session.mjs +15 -10
- package/dist/api/routes/sign-in.d.mts +3 -1
- package/dist/api/routes/sign-in.mjs +13 -15
- package/dist/api/routes/sign-up.d.mts +1 -0
- package/dist/api/routes/sign-up.mjs +10 -8
- package/dist/api/routes/update-user.mjs +8 -8
- package/dist/api/to-auth-endpoints.mjs +7 -1
- package/dist/auth/base.mjs +30 -27
- package/dist/client/config.mjs +8 -1
- package/dist/client/fetch-plugins.mjs +2 -1
- package/dist/client/index.d.mts +2 -2
- package/dist/client/lynx/index.d.mts +13 -0
- package/dist/client/lynx/index.mjs +2 -1
- package/dist/client/parser.mjs +0 -1
- package/dist/client/plugins/index.d.mts +4 -17
- package/dist/client/plugins/index.mjs +1 -4
- package/dist/client/proxy.mjs +2 -1
- package/dist/client/react/index.d.mts +13 -0
- package/dist/client/react/index.mjs +2 -1
- package/dist/client/session-atom.mjs +12 -1
- package/dist/client/solid/index.d.mts +13 -0
- package/dist/client/solid/index.mjs +3 -2
- package/dist/client/svelte/index.d.mts +13 -0
- package/dist/client/svelte/index.mjs +2 -1
- package/dist/client/vanilla.d.mts +13 -0
- package/dist/client/vanilla.mjs +2 -1
- package/dist/client/vue/index.d.mts +13 -0
- package/dist/client/vue/index.mjs +2 -1
- package/dist/context/create-context.mjs +10 -14
- package/dist/context/helpers.mjs +3 -2
- package/dist/cookies/cookie-utils.d.mts +33 -1
- package/dist/cookies/cookie-utils.mjs +95 -14
- package/dist/cookies/index.d.mts +2 -3
- package/dist/cookies/index.mjs +39 -11
- package/dist/cookies/session-store.mjs +4 -23
- package/dist/db/get-migration.mjs +4 -4
- package/dist/db/index.d.mts +2 -2
- package/dist/db/index.mjs +3 -2
- package/dist/db/internal-adapter.mjs +129 -27
- package/dist/db/schema.d.mts +14 -1
- package/dist/db/schema.mjs +26 -1
- package/dist/db/with-hooks.d.mts +1 -0
- package/dist/db/with-hooks.mjs +58 -1
- package/dist/index.d.mts +2 -2
- package/dist/index.mjs +2 -2
- package/dist/integrations/cookie-plugin-guard.mjs +18 -0
- package/dist/integrations/next-js.mjs +6 -0
- package/dist/integrations/svelte-kit.mjs +6 -0
- package/dist/integrations/tanstack-start-solid.mjs +6 -0
- package/dist/integrations/tanstack-start.mjs +6 -0
- package/dist/node_modules/.pnpm/clipboardy@4.0.0/node_modules/clipboardy/index.mjs +32 -0
- package/dist/node_modules/.pnpm/clipboardy@4.0.0/node_modules/clipboardy/lib/linux.mjs +55 -0
- package/dist/node_modules/.pnpm/clipboardy@4.0.0/node_modules/clipboardy/lib/macos.mjs +26 -0
- package/dist/node_modules/.pnpm/clipboardy@4.0.0/node_modules/clipboardy/lib/termux.mjs +39 -0
- package/dist/node_modules/.pnpm/clipboardy@4.0.0/node_modules/clipboardy/lib/windows.mjs +19 -0
- package/dist/node_modules/.pnpm/consola@3.4.2/node_modules/consola/dist/chunks/prompt.mjs +845 -0
- package/dist/node_modules/.pnpm/consola@3.4.2/node_modules/consola/dist/core.mjs +386 -0
- package/dist/node_modules/.pnpm/consola@3.4.2/node_modules/consola/dist/index.mjs +320 -0
- package/dist/node_modules/.pnpm/consola@3.4.2/node_modules/consola/dist/shared/consola.DRwqZj3T.mjs +62 -0
- package/dist/node_modules/.pnpm/consola@3.4.2/node_modules/consola/dist/shared/consola.DXBYu-KD.mjs +190 -0
- package/dist/node_modules/.pnpm/consola@3.4.2/node_modules/consola/dist/utils.mjs +2 -0
- package/dist/node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/index.mjs +29 -0
- package/dist/node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/lib/enoent.mjs +42 -0
- package/dist/node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/lib/parse.mjs +67 -0
- package/dist/node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/lib/util/escape.mjs +23 -0
- package/dist/node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/lib/util/readShebang.mjs +22 -0
- package/dist/node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/lib/util/resolveCommand.mjs +36 -0
- package/dist/node_modules/.pnpm/crossws@0.3.5/node_modules/crossws/dist/adapters/node.d.mts +292 -0
- package/dist/node_modules/.pnpm/crossws@0.3.5/node_modules/crossws/dist/adapters/node.mjs +127 -0
- package/dist/node_modules/.pnpm/crossws@0.3.5/node_modules/crossws/dist/index.d.mts +145 -0
- package/dist/node_modules/.pnpm/crossws@0.3.5/node_modules/crossws/dist/shared/crossws.BQXMA5bH.d.mts +298 -0
- package/dist/node_modules/.pnpm/crossws@0.3.5/node_modules/crossws/dist/shared/crossws.By9qWDAI.mjs +9 -0
- package/dist/node_modules/.pnpm/crossws@0.3.5/node_modules/crossws/dist/shared/crossws.CipVM6lf.mjs +3549 -0
- package/dist/node_modules/.pnpm/crossws@0.3.5/node_modules/crossws/dist/shared/crossws.D9ehKjSh.mjs +66 -0
- package/dist/node_modules/.pnpm/crossws@0.3.5/node_modules/crossws/dist/shared/crossws.DfCzGthR.mjs +227 -0
- package/dist/node_modules/.pnpm/execa@8.0.1/node_modules/execa/index.mjs +224 -0
- package/dist/node_modules/.pnpm/execa@8.0.1/node_modules/execa/lib/command.mjs +52 -0
- package/dist/node_modules/.pnpm/execa@8.0.1/node_modules/execa/lib/error.mjs +54 -0
- package/dist/node_modules/.pnpm/execa@8.0.1/node_modules/execa/lib/kill.mjs +62 -0
- package/dist/node_modules/.pnpm/execa@8.0.1/node_modules/execa/lib/pipe.mjs +26 -0
- package/dist/node_modules/.pnpm/execa@8.0.1/node_modules/execa/lib/promise.mjs +32 -0
- package/dist/node_modules/.pnpm/execa@8.0.1/node_modules/execa/lib/stdio.mjs +19 -0
- package/dist/node_modules/.pnpm/execa@8.0.1/node_modules/execa/lib/stream.mjs +98 -0
- package/dist/node_modules/.pnpm/execa@8.0.1/node_modules/execa/lib/verbose.mjs +15 -0
- package/dist/node_modules/.pnpm/get-port-please@3.2.0/node_modules/get-port-please/dist/index.d.mts +15 -0
- package/dist/node_modules/.pnpm/get-port-please@3.2.0/node_modules/get-port-please/dist/index.mjs +220 -0
- package/dist/node_modules/.pnpm/get-stream@8.0.1/node_modules/get-stream/source/array-buffer.mjs +54 -0
- package/dist/node_modules/.pnpm/get-stream@8.0.1/node_modules/get-stream/source/array.mjs +2 -0
- package/dist/node_modules/.pnpm/get-stream@8.0.1/node_modules/get-stream/source/buffer.mjs +14 -0
- package/dist/node_modules/.pnpm/get-stream@8.0.1/node_modules/get-stream/source/contents.mjs +76 -0
- package/dist/node_modules/.pnpm/get-stream@8.0.1/node_modules/get-stream/source/index.mjs +6 -0
- package/dist/node_modules/.pnpm/get-stream@8.0.1/node_modules/get-stream/source/string.mjs +35 -0
- package/dist/node_modules/.pnpm/get-stream@8.0.1/node_modules/get-stream/source/utils.mjs +10 -0
- package/dist/node_modules/.pnpm/http-shutdown@1.2.2/node_modules/http-shutdown/index.mjs +76 -0
- package/dist/node_modules/.pnpm/human-signals@5.0.0/node_modules/human-signals/build/src/core.mjs +274 -0
- package/dist/node_modules/.pnpm/human-signals@5.0.0/node_modules/human-signals/build/src/main.mjs +44 -0
- package/dist/node_modules/.pnpm/human-signals@5.0.0/node_modules/human-signals/build/src/realtime.mjs +15 -0
- package/dist/node_modules/.pnpm/human-signals@5.0.0/node_modules/human-signals/build/src/signals.mjs +23 -0
- package/dist/node_modules/.pnpm/is-docker@3.0.0/node_modules/is-docker/index.mjs +24 -0
- package/dist/node_modules/.pnpm/is-inside-container@1.0.0/node_modules/is-inside-container/index.mjs +18 -0
- package/dist/node_modules/.pnpm/is-stream@3.0.0/node_modules/is-stream/index.mjs +9 -0
- package/dist/node_modules/.pnpm/is-wsl@3.1.1/node_modules/is-wsl/index.mjs +20 -0
- package/dist/node_modules/.pnpm/is64bit@2.0.0/node_modules/is64bit/index.mjs +13 -0
- package/dist/node_modules/.pnpm/isexe@2.0.0/node_modules/isexe/index.mjs +47 -0
- package/dist/node_modules/.pnpm/isexe@2.0.0/node_modules/isexe/mode.mjs +33 -0
- package/dist/node_modules/.pnpm/isexe@2.0.0/node_modules/isexe/windows.mjs +33 -0
- package/dist/node_modules/.pnpm/listhen@1.9.0/node_modules/listhen/dist/chunks/xdg-open.mjs +1070 -0
- package/dist/node_modules/.pnpm/listhen@1.9.0/node_modules/listhen/dist/index.mjs +619 -0
- package/dist/node_modules/.pnpm/listhen@1.9.0/node_modules/listhen/dist/shared/listhen.1c46e31d.d.mts +83 -0
- package/dist/node_modules/.pnpm/merge-stream@2.0.0/node_modules/merge-stream/index.mjs +38 -0
- package/dist/node_modules/.pnpm/mimic-fn@4.0.0/node_modules/mimic-fn/index.mjs +38 -0
- package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/aes.mjs +597 -0
- package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/aesCipherSuites.mjs +195 -0
- package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/asn1-validator.mjs +76 -0
- package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/asn1.mjs +967 -0
- package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/baseN.mjs +137 -0
- package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/cipher.mjs +186 -0
- package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/cipherModes.mjs +597 -0
- package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/des.mjs +1187 -0
- package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/ed25519.mjs +1029 -0
- package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/forge.mjs +15 -0
- package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/hmac.mjs +107 -0
- package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/index.mjs +66 -0
- package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/jsbn.mjs +1334 -0
- package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/kem.mjs +146 -0
- package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/log.mjs +241 -0
- package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/md.all.mjs +24 -0
- package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/md.mjs +18 -0
- package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/md5.mjs +324 -0
- package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/mgf.mjs +20 -0
- package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/mgf1.mjs +44 -0
- package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/oids.mjs +154 -0
- package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/pbe.mjs +815 -0
- package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/pbkdf2.mjs +125 -0
- package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/pem.mjs +175 -0
- package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/pkcs1.mjs +200 -0
- package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/pkcs12.mjs +724 -0
- package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/pkcs7.mjs +642 -0
- package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/pkcs7asn1.mjs +405 -0
- package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/pki.mjs +101 -0
- package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/prime.mjs +193 -0
- package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/prng.mjs +290 -0
- package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/pss.mjs +141 -0
- package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/random.mjs +141 -0
- package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/rc2.mjs +538 -0
- package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/rsa.mjs +1309 -0
- package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/sha1.mjs +230 -0
- package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/sha256.mjs +267 -0
- package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/sha512.mjs +413 -0
- package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/ssh.mjs +194 -0
- package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/tls.mjs +3655 -0
- package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/util.mjs +2117 -0
- package/dist/node_modules/.pnpm/node-forge@1.4.0/node_modules/node-forge/lib/x509.mjs +2168 -0
- package/dist/node_modules/.pnpm/npm-run-path@5.3.0/node_modules/npm-run-path/index.mjs +34 -0
- package/dist/node_modules/.pnpm/onetime@6.0.0/node_modules/onetime/index.mjs +26 -0
- package/dist/node_modules/.pnpm/path-key@3.1.1/node_modules/path-key/index.mjs +14 -0
- package/dist/node_modules/.pnpm/path-key@4.0.0/node_modules/path-key/index.mjs +8 -0
- package/dist/node_modules/.pnpm/pathe@1.1.2/node_modules/pathe/dist/shared/pathe.ff20891b.mjs +176 -0
- package/dist/node_modules/.pnpm/shebang-command@2.0.0/node_modules/shebang-command/index.mjs +17 -0
- package/dist/node_modules/.pnpm/shebang-regex@3.0.0/node_modules/shebang-regex/index.mjs +8 -0
- package/dist/node_modules/.pnpm/signal-exit@4.1.0/node_modules/signal-exit/dist/mjs/index.mjs +169 -0
- package/dist/node_modules/.pnpm/signal-exit@4.1.0/node_modules/signal-exit/dist/mjs/signals.mjs +33 -0
- package/dist/node_modules/.pnpm/std-env@3.10.0/node_modules/std-env/dist/index.mjs +171 -0
- package/dist/node_modules/.pnpm/strip-final-newline@3.0.0/node_modules/strip-final-newline/index.mjs +10 -0
- package/dist/node_modules/.pnpm/system-architecture@0.1.0/node_modules/system-architecture/index.mjs +16 -0
- package/dist/node_modules/.pnpm/uncrypto@0.1.3/node_modules/uncrypto/dist/crypto.node.mjs +7 -0
- package/dist/node_modules/.pnpm/untun@0.1.3/node_modules/untun/dist/chunks/index.mjs +154 -0
- package/dist/node_modules/.pnpm/untun@0.1.3/node_modules/untun/dist/index.mjs +34 -0
- package/dist/node_modules/.pnpm/uqr@0.1.2/node_modules/uqr/dist/index.mjs +896 -0
- package/dist/node_modules/.pnpm/which@2.0.2/node_modules/which/which.mjs +76 -0
- package/dist/oauth2/errors.mjs +27 -0
- package/dist/oauth2/index.d.mts +2 -2
- package/dist/oauth2/index.mjs +3 -3
- package/dist/oauth2/link-account.d.mts +27 -1
- package/dist/oauth2/link-account.mjs +30 -5
- package/dist/oauth2/state.mjs +8 -2
- package/dist/{package.mjs → packages/better-auth/package.mjs} +1 -1
- package/dist/plugins/access/access.d.mts +3 -15
- package/dist/plugins/access/access.mjs +11 -6
- package/dist/plugins/access/index.d.mts +2 -2
- package/dist/plugins/access/types.d.mts +11 -4
- package/dist/plugins/admin/access/statement.d.mts +29 -93
- package/dist/plugins/admin/admin.mjs +0 -4
- package/dist/plugins/admin/client.d.mts +6 -1
- package/dist/plugins/admin/client.mjs +5 -0
- package/dist/plugins/admin/routes.mjs +3 -2
- package/dist/plugins/anonymous/client.d.mts +1 -0
- package/dist/plugins/anonymous/error-codes.d.mts +1 -0
- package/dist/plugins/anonymous/error-codes.mjs +1 -0
- package/dist/plugins/anonymous/index.d.mts +1 -0
- package/dist/plugins/anonymous/index.mjs +16 -2
- package/dist/plugins/bearer/index.mjs +5 -12
- package/dist/plugins/captcha/index.mjs +14 -1
- package/dist/plugins/device-authorization/error-codes.mjs +1 -0
- package/dist/plugins/device-authorization/index.d.mts +1 -0
- package/dist/plugins/device-authorization/routes.mjs +34 -3
- package/dist/plugins/email-otp/routes.mjs +4 -4
- package/dist/plugins/generic-oauth/error-codes.mjs +0 -1
- package/dist/plugins/generic-oauth/index.d.mts +2 -4
- package/dist/plugins/generic-oauth/index.mjs +23 -17
- package/dist/plugins/generic-oauth/providers/auth0.mjs +1 -0
- package/dist/plugins/generic-oauth/providers/gumroad.mjs +1 -0
- package/dist/plugins/generic-oauth/providers/hubspot.mjs +1 -0
- package/dist/plugins/generic-oauth/providers/keycloak.mjs +1 -0
- package/dist/plugins/generic-oauth/providers/line.mjs +1 -0
- package/dist/plugins/generic-oauth/providers/microsoft-entra-id.mjs +1 -0
- package/dist/plugins/generic-oauth/providers/okta.mjs +1 -0
- package/dist/plugins/generic-oauth/providers/patreon.mjs +1 -0
- package/dist/plugins/generic-oauth/providers/slack.mjs +1 -0
- package/dist/plugins/generic-oauth/types.d.mts +30 -8
- package/dist/plugins/index.d.mts +2 -2
- package/dist/plugins/jwt/utils.d.mts +1 -1
- package/dist/plugins/last-login-method/client.mjs +2 -2
- package/dist/plugins/magic-link/index.d.mts +8 -1
- package/dist/plugins/magic-link/index.mjs +4 -17
- package/dist/plugins/mcp/authorize.mjs +8 -2
- package/dist/plugins/mcp/index.mjs +75 -35
- package/dist/plugins/multi-session/index.mjs +2 -2
- package/dist/plugins/oauth-proxy/index.mjs +45 -32
- package/dist/plugins/oauth-proxy/utils.mjs +3 -10
- package/dist/plugins/oidc-provider/authorize.mjs +8 -2
- package/dist/plugins/oidc-provider/index.mjs +65 -38
- package/dist/plugins/one-tap/client.mjs +9 -2
- package/dist/plugins/one-tap/index.mjs +19 -36
- package/dist/plugins/open-api/generator.mjs +25 -5
- package/dist/plugins/organization/access/statement.d.mts +68 -201
- package/dist/plugins/organization/adapter.d.mts +1 -1
- package/dist/plugins/organization/adapter.mjs +65 -58
- package/dist/plugins/organization/client.d.mts +3 -1
- package/dist/plugins/organization/client.mjs +1 -1
- package/dist/plugins/organization/error-codes.d.mts +2 -0
- package/dist/plugins/organization/error-codes.mjs +3 -1
- package/dist/plugins/organization/routes/crud-access-control.d.mts +2 -2
- package/dist/plugins/organization/routes/crud-invites.d.mts +8 -1
- package/dist/plugins/organization/routes/crud-invites.mjs +8 -3
- package/dist/plugins/organization/routes/crud-org.d.mts +4 -4
- package/dist/plugins/organization/routes/crud-org.mjs +2 -2
- package/dist/plugins/organization/routes/crud-team.mjs +7 -2
- package/dist/plugins/organization/schema.d.mts +1 -1
- package/dist/plugins/organization/types.d.mts +15 -5
- package/dist/plugins/phone-number/routes.mjs +1 -1
- package/dist/plugins/siwe/client.d.mts +4 -0
- package/dist/plugins/siwe/client.mjs +5 -1
- package/dist/plugins/siwe/index.d.mts +13 -2
- package/dist/plugins/siwe/index.mjs +179 -165
- package/dist/plugins/two-factor/backup-codes/index.d.mts +4 -3
- package/dist/plugins/two-factor/client.mjs +2 -1
- package/dist/plugins/two-factor/index.mjs +3 -2
- package/dist/plugins/username/client.d.mts +1 -0
- package/dist/plugins/username/error-codes.d.mts +1 -0
- package/dist/plugins/username/error-codes.mjs +2 -1
- package/dist/plugins/username/index.d.mts +43 -2
- package/dist/plugins/username/index.mjs +73 -6
- package/dist/state.d.mts +2 -2
- package/dist/state.mjs +18 -4
- package/dist/test-utils/headers.mjs +2 -7
- package/dist/test-utils/http-test-instance.d.mts +397 -0
- package/dist/test-utils/http-test-instance.mjs +54 -0
- package/dist/test-utils/index.d.mts +2 -1
- package/dist/test-utils/index.mjs +2 -1
- package/dist/test-utils/test-instance.d.mts +4110 -224
- package/dist/test-utils/test-instance.mjs +11 -2
- package/dist/types/auth.d.mts +4 -0
- package/dist/utils/index.d.mts +1 -1
- package/dist/utils/url.d.mts +2 -1
- package/dist/utils/url.mjs +9 -3
- package/dist/version.mjs +1 -1
- package/package.json +14 -14
- package/dist/oauth2/error-codes.d.mts +0 -20
- package/dist/plugins/generic-oauth/client.d.mts +0 -32
- package/dist/plugins/generic-oauth/client.mjs +0 -19
- package/dist/plugins/generic-oauth/error-codes.d.mts +0 -10
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { parseUserOutput } from "../../db/schema.mjs";
|
|
2
2
|
import { setSessionCookie } from "../../cookies/index.mjs";
|
|
3
|
+
import { handleOAuthUserInfo } from "../../oauth2/link-account.mjs";
|
|
3
4
|
import { APIError } from "../../api/index.mjs";
|
|
4
5
|
import { PACKAGE_VERSION } from "../../version.mjs";
|
|
5
6
|
import { toBoolean } from "../../utils/boolean.mjs";
|
|
@@ -45,47 +46,29 @@ const oneTap = (options) => ({
|
|
|
45
46
|
} catch {
|
|
46
47
|
throw new APIError("BAD_REQUEST", { message: "invalid id token" });
|
|
47
48
|
}
|
|
48
|
-
const { email, email_verified, name, picture, sub } = payload;
|
|
49
|
-
if (!
|
|
50
|
-
const
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
email,
|
|
49
|
+
const { email: rawEmail, email_verified, name, picture, sub } = payload;
|
|
50
|
+
if (!rawEmail) return ctx.json({ error: "Email not available in token" });
|
|
51
|
+
const result = await handleOAuthUserInfo(ctx, {
|
|
52
|
+
userInfo: {
|
|
53
|
+
id: sub,
|
|
54
|
+
email: rawEmail.toLowerCase(),
|
|
55
55
|
emailVerified: typeof email_verified === "boolean" ? email_verified : toBoolean(email_verified),
|
|
56
|
-
name,
|
|
56
|
+
name: name ?? "",
|
|
57
57
|
image: picture
|
|
58
|
-
},
|
|
58
|
+
},
|
|
59
|
+
account: {
|
|
59
60
|
providerId: "google",
|
|
60
|
-
accountId: sub
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
user: newUser.user,
|
|
66
|
-
session
|
|
67
|
-
});
|
|
68
|
-
return ctx.json({
|
|
69
|
-
token: session.token,
|
|
70
|
-
user: parseUserOutput(ctx.context.options, newUser.user)
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
|
-
if (!await ctx.context.internalAdapter.findAccount(sub)) if ((ctx.context.options.account?.accountLinking)?.enabled !== false && (ctx.context.trustedProviders.includes("google") || email_verified)) await ctx.context.internalAdapter.linkAccount({
|
|
74
|
-
userId: user.user.id,
|
|
75
|
-
providerId: "google",
|
|
76
|
-
accountId: sub,
|
|
77
|
-
scope: "openid,profile,email",
|
|
78
|
-
idToken
|
|
79
|
-
});
|
|
80
|
-
else throw new APIError("UNAUTHORIZED", { message: "Google sub doesn't match" });
|
|
81
|
-
const session = await ctx.context.internalAdapter.createSession(user.user.id);
|
|
82
|
-
await setSessionCookie(ctx, {
|
|
83
|
-
user: user.user,
|
|
84
|
-
session
|
|
61
|
+
accountId: sub,
|
|
62
|
+
idToken,
|
|
63
|
+
scope: "openid,profile,email"
|
|
64
|
+
},
|
|
65
|
+
disableSignUp: options?.disableSignup
|
|
85
66
|
});
|
|
67
|
+
if (result.error) throw new APIError("UNAUTHORIZED", { message: result.error });
|
|
68
|
+
await setSessionCookie(ctx, result.data);
|
|
86
69
|
return ctx.json({
|
|
87
|
-
token: session.token,
|
|
88
|
-
user: parseUserOutput(ctx.context.options,
|
|
70
|
+
token: result.data.session.token,
|
|
71
|
+
user: parseUserOutput(ctx.context.options, result.data.user)
|
|
89
72
|
});
|
|
90
73
|
}) },
|
|
91
74
|
options
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { db_exports } from "../../db/index.mjs";
|
|
2
2
|
import { getEndpoints } from "../../api/index.mjs";
|
|
3
3
|
import * as z from "zod";
|
|
4
|
+
import { toPascalCase } from "@better-auth/core/utils/string";
|
|
4
5
|
//#region src/plugins/open-api/generator.ts
|
|
5
6
|
const allowedType = new Set([
|
|
6
7
|
"string",
|
|
@@ -86,6 +87,15 @@ function processZodType(zodType) {
|
|
|
86
87
|
default: defaultValue
|
|
87
88
|
};
|
|
88
89
|
}
|
|
90
|
+
if (zodType instanceof z.ZodRecord) {
|
|
91
|
+
const valueType = zodType._zod?.def?.valueType;
|
|
92
|
+
return {
|
|
93
|
+
type: "object",
|
|
94
|
+
additionalProperties: valueType instanceof z.ZodType ? processZodType(valueType) : {},
|
|
95
|
+
description: zodType.description
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
if (zodType instanceof z.ZodAny || zodType instanceof z.ZodUnknown) return { description: zodType.description };
|
|
89
99
|
if (zodType instanceof z.ZodObject) {
|
|
90
100
|
const shape = zodType.shape;
|
|
91
101
|
if (shape) {
|
|
@@ -156,7 +166,7 @@ function getResponse(responses) {
|
|
|
156
166
|
} } },
|
|
157
167
|
description: "Internal Server Error. This is a problem with the server that you cannot fix."
|
|
158
168
|
},
|
|
159
|
-
...responses
|
|
169
|
+
...responses ? structuredClone(responses) : {}
|
|
160
170
|
};
|
|
161
171
|
}
|
|
162
172
|
function toOpenApiPath(path) {
|
|
@@ -196,6 +206,16 @@ async function generator(ctx, options) {
|
|
|
196
206
|
return acc;
|
|
197
207
|
}, {}) } };
|
|
198
208
|
const paths = {};
|
|
209
|
+
const seenOperationIds = /* @__PURE__ */ new Set();
|
|
210
|
+
const uniqueOperationId = (operationId, method) => {
|
|
211
|
+
if (!operationId) return void 0;
|
|
212
|
+
const base = seenOperationIds.has(operationId) ? `${operationId}${toPascalCase(method)}` : operationId;
|
|
213
|
+
let result = base;
|
|
214
|
+
let n = 2;
|
|
215
|
+
while (seenOperationIds.has(result)) result = `${base}${n++}`;
|
|
216
|
+
seenOperationIds.add(result);
|
|
217
|
+
return result;
|
|
218
|
+
};
|
|
199
219
|
Object.entries(baseEndpoints.api).forEach(([_, value]) => {
|
|
200
220
|
if (!value.path || ctx.options.disabledPaths?.includes(value.path)) return;
|
|
201
221
|
const options = value.options;
|
|
@@ -207,7 +227,7 @@ async function generator(ctx, options) {
|
|
|
207
227
|
[method.toLowerCase()]: {
|
|
208
228
|
tags: ["Default", ...options.metadata?.openapi?.tags || []],
|
|
209
229
|
description: options.metadata?.openapi?.description,
|
|
210
|
-
operationId: options.metadata?.openapi?.operationId,
|
|
230
|
+
operationId: uniqueOperationId(options.metadata?.openapi?.operationId, method),
|
|
211
231
|
security: [{ bearerAuth: [] }],
|
|
212
232
|
parameters: getParameters(options),
|
|
213
233
|
responses: getResponse(options.metadata?.openapi?.responses)
|
|
@@ -220,7 +240,7 @@ async function generator(ctx, options) {
|
|
|
220
240
|
[method.toLowerCase()]: {
|
|
221
241
|
tags: ["Default", ...options.metadata?.openapi?.tags || []],
|
|
222
242
|
description: options.metadata?.openapi?.description,
|
|
223
|
-
operationId: options.metadata?.openapi?.operationId,
|
|
243
|
+
operationId: uniqueOperationId(options.metadata?.openapi?.operationId, method),
|
|
224
244
|
security: [{ bearerAuth: [] }],
|
|
225
245
|
parameters: getParameters(options),
|
|
226
246
|
...body ? { requestBody: body } : { requestBody: { content: { "application/json": { schema: {
|
|
@@ -253,7 +273,7 @@ async function generator(ctx, options) {
|
|
|
253
273
|
[method.toLowerCase()]: {
|
|
254
274
|
tags: options.metadata?.openapi?.tags || [plugin.id.charAt(0).toUpperCase() + plugin.id.slice(1)],
|
|
255
275
|
description: options.metadata?.openapi?.description,
|
|
256
|
-
operationId: options.metadata?.openapi?.operationId,
|
|
276
|
+
operationId: uniqueOperationId(options.metadata?.openapi?.operationId, method),
|
|
257
277
|
security: [{ bearerAuth: [] }],
|
|
258
278
|
parameters: getParameters(options),
|
|
259
279
|
responses: getResponse(options.metadata?.openapi?.responses)
|
|
@@ -264,7 +284,7 @@ async function generator(ctx, options) {
|
|
|
264
284
|
[method.toLowerCase()]: {
|
|
265
285
|
tags: options.metadata?.openapi?.tags || [plugin.id.charAt(0).toUpperCase() + plugin.id.slice(1)],
|
|
266
286
|
description: options.metadata?.openapi?.description,
|
|
267
|
-
operationId: options.metadata?.openapi?.operationId,
|
|
287
|
+
operationId: uniqueOperationId(options.metadata?.openapi?.operationId, method),
|
|
268
288
|
security: [{ bearerAuth: [] }],
|
|
269
289
|
parameters: getParameters(options),
|
|
270
290
|
requestBody: getRequestBody(options),
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { AuthorizeResponse } from "../../access/access.mjs";
|
|
1
|
+
import { ExactRoleStatements, Role, RoleInput, Statements } from "../../access/types.mjs";
|
|
3
2
|
//#region src/plugins/organization/access/statement.d.ts
|
|
4
3
|
declare const defaultStatements: {
|
|
5
4
|
readonly organization: readonly ["update", "delete"];
|
|
@@ -9,137 +8,100 @@ declare const defaultStatements: {
|
|
|
9
8
|
readonly ac: readonly ["create", "read", "update", "delete"];
|
|
10
9
|
};
|
|
11
10
|
declare const defaultAc: {
|
|
12
|
-
newRole<
|
|
11
|
+
newRole<const TRoleStatements extends Statements>(statements: RoleInput<{
|
|
13
12
|
readonly organization: readonly ["update", "delete"];
|
|
14
13
|
readonly member: readonly ["create", "update", "delete"];
|
|
15
14
|
readonly invitation: readonly ["create", "cancel"];
|
|
16
15
|
readonly team: readonly ["create", "update", "delete"];
|
|
17
16
|
readonly ac: readonly ["create", "read", "update", "delete"];
|
|
18
|
-
}>): {
|
|
19
|
-
authorize<K_1 extends K>(request: K_1 extends infer T extends keyof Subset<K, {
|
|
20
|
-
readonly organization: readonly ["update", "delete"];
|
|
21
|
-
readonly member: readonly ["create", "update", "delete"];
|
|
22
|
-
readonly invitation: readonly ["create", "cancel"];
|
|
23
|
-
readonly team: readonly ["create", "update", "delete"];
|
|
24
|
-
readonly ac: readonly ["create", "read", "update", "delete"];
|
|
25
|
-
}> ? { [key in T]?: Subset<K, {
|
|
26
|
-
readonly organization: readonly ["update", "delete"];
|
|
27
|
-
readonly member: readonly ["create", "update", "delete"];
|
|
28
|
-
readonly invitation: readonly ["create", "cancel"];
|
|
29
|
-
readonly team: readonly ["create", "update", "delete"];
|
|
30
|
-
readonly ac: readonly ["create", "read", "update", "delete"];
|
|
31
|
-
}>[key] | {
|
|
32
|
-
actions: Subset<K, {
|
|
33
|
-
readonly organization: readonly ["update", "delete"];
|
|
34
|
-
readonly member: readonly ["create", "update", "delete"];
|
|
35
|
-
readonly invitation: readonly ["create", "cancel"];
|
|
36
|
-
readonly team: readonly ["create", "update", "delete"];
|
|
37
|
-
readonly ac: readonly ["create", "read", "update", "delete"];
|
|
38
|
-
}>[key];
|
|
39
|
-
connector: "OR" | "AND";
|
|
40
|
-
} | undefined } : never, connector?: "OR" | "AND"): AuthorizeResponse;
|
|
41
|
-
statements: Subset<K, {
|
|
42
|
-
readonly organization: readonly ["update", "delete"];
|
|
43
|
-
readonly member: readonly ["create", "update", "delete"];
|
|
44
|
-
readonly invitation: readonly ["create", "cancel"];
|
|
45
|
-
readonly team: readonly ["create", "update", "delete"];
|
|
46
|
-
readonly ac: readonly ["create", "read", "update", "delete"];
|
|
47
|
-
}>;
|
|
48
|
-
};
|
|
49
|
-
statements: {
|
|
50
|
-
readonly organization: readonly ["update", "delete"];
|
|
51
|
-
readonly member: readonly ["create", "update", "delete"];
|
|
52
|
-
readonly invitation: readonly ["create", "cancel"];
|
|
53
|
-
readonly team: readonly ["create", "update", "delete"];
|
|
54
|
-
readonly ac: readonly ["create", "read", "update", "delete"];
|
|
55
|
-
};
|
|
56
|
-
};
|
|
57
|
-
declare const adminAc: {
|
|
58
|
-
authorize<K extends "organization" | "member" | "team" | "ac" | "invitation">(request: K extends infer T extends keyof Subset<"organization" | "member" | "team" | "ac" | "invitation", {
|
|
59
|
-
readonly organization: readonly ["update", "delete"];
|
|
60
|
-
readonly member: readonly ["create", "update", "delete"];
|
|
61
|
-
readonly invitation: readonly ["create", "cancel"];
|
|
62
|
-
readonly team: readonly ["create", "update", "delete"];
|
|
63
|
-
readonly ac: readonly ["create", "read", "update", "delete"];
|
|
64
|
-
}> ? { [key in T]?: Subset<"organization" | "member" | "team" | "ac" | "invitation", {
|
|
65
|
-
readonly organization: readonly ["update", "delete"];
|
|
66
|
-
readonly member: readonly ["create", "update", "delete"];
|
|
67
|
-
readonly invitation: readonly ["create", "cancel"];
|
|
68
|
-
readonly team: readonly ["create", "update", "delete"];
|
|
69
|
-
readonly ac: readonly ["create", "read", "update", "delete"];
|
|
70
|
-
}>[key] | {
|
|
71
|
-
actions: Subset<"organization" | "member" | "team" | "ac" | "invitation", {
|
|
72
|
-
readonly organization: readonly ["update", "delete"];
|
|
73
|
-
readonly member: readonly ["create", "update", "delete"];
|
|
74
|
-
readonly invitation: readonly ["create", "cancel"];
|
|
75
|
-
readonly team: readonly ["create", "update", "delete"];
|
|
76
|
-
readonly ac: readonly ["create", "read", "update", "delete"];
|
|
77
|
-
}>[key];
|
|
78
|
-
connector: "OR" | "AND";
|
|
79
|
-
} | undefined } : never, connector?: "OR" | "AND"): AuthorizeResponse;
|
|
80
|
-
statements: Subset<"organization" | "member" | "team" | "ac" | "invitation", {
|
|
17
|
+
}, TRoleStatements>): Role<ExactRoleStatements<TRoleStatements>, {
|
|
81
18
|
readonly organization: readonly ["update", "delete"];
|
|
82
19
|
readonly member: readonly ["create", "update", "delete"];
|
|
83
20
|
readonly invitation: readonly ["create", "cancel"];
|
|
84
21
|
readonly team: readonly ["create", "update", "delete"];
|
|
85
22
|
readonly ac: readonly ["create", "read", "update", "delete"];
|
|
86
23
|
}>;
|
|
87
|
-
|
|
88
|
-
declare const ownerAc: {
|
|
89
|
-
authorize<K extends "organization" | "member" | "team" | "ac" | "invitation">(request: K extends infer T extends keyof Subset<"organization" | "member" | "team" | "ac" | "invitation", {
|
|
90
|
-
readonly organization: readonly ["update", "delete"];
|
|
91
|
-
readonly member: readonly ["create", "update", "delete"];
|
|
92
|
-
readonly invitation: readonly ["create", "cancel"];
|
|
93
|
-
readonly team: readonly ["create", "update", "delete"];
|
|
94
|
-
readonly ac: readonly ["create", "read", "update", "delete"];
|
|
95
|
-
}> ? { [key in T]?: Subset<"organization" | "member" | "team" | "ac" | "invitation", {
|
|
96
|
-
readonly organization: readonly ["update", "delete"];
|
|
97
|
-
readonly member: readonly ["create", "update", "delete"];
|
|
98
|
-
readonly invitation: readonly ["create", "cancel"];
|
|
99
|
-
readonly team: readonly ["create", "update", "delete"];
|
|
100
|
-
readonly ac: readonly ["create", "read", "update", "delete"];
|
|
101
|
-
}>[key] | {
|
|
102
|
-
actions: Subset<"organization" | "member" | "team" | "ac" | "invitation", {
|
|
103
|
-
readonly organization: readonly ["update", "delete"];
|
|
104
|
-
readonly member: readonly ["create", "update", "delete"];
|
|
105
|
-
readonly invitation: readonly ["create", "cancel"];
|
|
106
|
-
readonly team: readonly ["create", "update", "delete"];
|
|
107
|
-
readonly ac: readonly ["create", "read", "update", "delete"];
|
|
108
|
-
}>[key];
|
|
109
|
-
connector: "OR" | "AND";
|
|
110
|
-
} | undefined } : never, connector?: "OR" | "AND"): AuthorizeResponse;
|
|
111
|
-
statements: Subset<"organization" | "member" | "team" | "ac" | "invitation", {
|
|
24
|
+
statements: {
|
|
112
25
|
readonly organization: readonly ["update", "delete"];
|
|
113
26
|
readonly member: readonly ["create", "update", "delete"];
|
|
114
27
|
readonly invitation: readonly ["create", "cancel"];
|
|
115
28
|
readonly team: readonly ["create", "update", "delete"];
|
|
116
29
|
readonly ac: readonly ["create", "read", "update", "delete"];
|
|
117
|
-
}
|
|
30
|
+
};
|
|
118
31
|
};
|
|
119
|
-
declare const
|
|
120
|
-
|
|
32
|
+
declare const adminAc: Role<ExactRoleStatements<{
|
|
33
|
+
readonly organization: ["update"];
|
|
34
|
+
readonly invitation: ["create", "cancel"];
|
|
35
|
+
readonly member: ["create", "update", "delete"];
|
|
36
|
+
readonly team: ["create", "update", "delete"];
|
|
37
|
+
readonly ac: ["create", "read", "update", "delete"];
|
|
38
|
+
}>, {
|
|
39
|
+
readonly organization: readonly ["update", "delete"];
|
|
40
|
+
readonly member: readonly ["create", "update", "delete"];
|
|
41
|
+
readonly invitation: readonly ["create", "cancel"];
|
|
42
|
+
readonly team: readonly ["create", "update", "delete"];
|
|
43
|
+
readonly ac: readonly ["create", "read", "update", "delete"];
|
|
44
|
+
}>;
|
|
45
|
+
declare const ownerAc: Role<ExactRoleStatements<{
|
|
46
|
+
readonly organization: ["update", "delete"];
|
|
47
|
+
readonly member: ["create", "update", "delete"];
|
|
48
|
+
readonly invitation: ["create", "cancel"];
|
|
49
|
+
readonly team: ["create", "update", "delete"];
|
|
50
|
+
readonly ac: ["create", "read", "update", "delete"];
|
|
51
|
+
}>, {
|
|
52
|
+
readonly organization: readonly ["update", "delete"];
|
|
53
|
+
readonly member: readonly ["create", "update", "delete"];
|
|
54
|
+
readonly invitation: readonly ["create", "cancel"];
|
|
55
|
+
readonly team: readonly ["create", "update", "delete"];
|
|
56
|
+
readonly ac: readonly ["create", "read", "update", "delete"];
|
|
57
|
+
}>;
|
|
58
|
+
declare const memberAc: Role<ExactRoleStatements<{
|
|
59
|
+
readonly organization: [];
|
|
60
|
+
readonly member: [];
|
|
61
|
+
readonly invitation: [];
|
|
62
|
+
readonly team: [];
|
|
63
|
+
readonly ac: ["read"];
|
|
64
|
+
}>, {
|
|
65
|
+
readonly organization: readonly ["update", "delete"];
|
|
66
|
+
readonly member: readonly ["create", "update", "delete"];
|
|
67
|
+
readonly invitation: readonly ["create", "cancel"];
|
|
68
|
+
readonly team: readonly ["create", "update", "delete"];
|
|
69
|
+
readonly ac: readonly ["create", "read", "update", "delete"];
|
|
70
|
+
}>;
|
|
71
|
+
declare const defaultRoles: {
|
|
72
|
+
admin: Role<ExactRoleStatements<{
|
|
73
|
+
readonly organization: ["update"];
|
|
74
|
+
readonly invitation: ["create", "cancel"];
|
|
75
|
+
readonly member: ["create", "update", "delete"];
|
|
76
|
+
readonly team: ["create", "update", "delete"];
|
|
77
|
+
readonly ac: ["create", "read", "update", "delete"];
|
|
78
|
+
}>, {
|
|
121
79
|
readonly organization: readonly ["update", "delete"];
|
|
122
80
|
readonly member: readonly ["create", "update", "delete"];
|
|
123
81
|
readonly invitation: readonly ["create", "cancel"];
|
|
124
82
|
readonly team: readonly ["create", "update", "delete"];
|
|
125
83
|
readonly ac: readonly ["create", "read", "update", "delete"];
|
|
126
|
-
}
|
|
84
|
+
}>;
|
|
85
|
+
owner: Role<ExactRoleStatements<{
|
|
86
|
+
readonly organization: ["update", "delete"];
|
|
87
|
+
readonly member: ["create", "update", "delete"];
|
|
88
|
+
readonly invitation: ["create", "cancel"];
|
|
89
|
+
readonly team: ["create", "update", "delete"];
|
|
90
|
+
readonly ac: ["create", "read", "update", "delete"];
|
|
91
|
+
}>, {
|
|
127
92
|
readonly organization: readonly ["update", "delete"];
|
|
128
93
|
readonly member: readonly ["create", "update", "delete"];
|
|
129
94
|
readonly invitation: readonly ["create", "cancel"];
|
|
130
95
|
readonly team: readonly ["create", "update", "delete"];
|
|
131
96
|
readonly ac: readonly ["create", "read", "update", "delete"];
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
connector: "OR" | "AND";
|
|
141
|
-
} | undefined } : never, connector?: "OR" | "AND"): AuthorizeResponse;
|
|
142
|
-
statements: Subset<"organization" | "member" | "team" | "ac" | "invitation", {
|
|
97
|
+
}>;
|
|
98
|
+
member: Role<ExactRoleStatements<{
|
|
99
|
+
readonly organization: [];
|
|
100
|
+
readonly member: [];
|
|
101
|
+
readonly invitation: [];
|
|
102
|
+
readonly team: [];
|
|
103
|
+
readonly ac: ["read"];
|
|
104
|
+
}>, {
|
|
143
105
|
readonly organization: readonly ["update", "delete"];
|
|
144
106
|
readonly member: readonly ["create", "update", "delete"];
|
|
145
107
|
readonly invitation: readonly ["create", "cancel"];
|
|
@@ -147,100 +109,5 @@ declare const memberAc: {
|
|
|
147
109
|
readonly ac: readonly ["create", "read", "update", "delete"];
|
|
148
110
|
}>;
|
|
149
111
|
};
|
|
150
|
-
declare const defaultRoles: {
|
|
151
|
-
admin: {
|
|
152
|
-
authorize<K extends "organization" | "member" | "team" | "ac" | "invitation">(request: K extends infer T extends keyof Subset<"organization" | "member" | "team" | "ac" | "invitation", {
|
|
153
|
-
readonly organization: readonly ["update", "delete"];
|
|
154
|
-
readonly member: readonly ["create", "update", "delete"];
|
|
155
|
-
readonly invitation: readonly ["create", "cancel"];
|
|
156
|
-
readonly team: readonly ["create", "update", "delete"];
|
|
157
|
-
readonly ac: readonly ["create", "read", "update", "delete"];
|
|
158
|
-
}> ? { [key in T]?: Subset<"organization" | "member" | "team" | "ac" | "invitation", {
|
|
159
|
-
readonly organization: readonly ["update", "delete"];
|
|
160
|
-
readonly member: readonly ["create", "update", "delete"];
|
|
161
|
-
readonly invitation: readonly ["create", "cancel"];
|
|
162
|
-
readonly team: readonly ["create", "update", "delete"];
|
|
163
|
-
readonly ac: readonly ["create", "read", "update", "delete"];
|
|
164
|
-
}>[key] | {
|
|
165
|
-
actions: Subset<"organization" | "member" | "team" | "ac" | "invitation", {
|
|
166
|
-
readonly organization: readonly ["update", "delete"];
|
|
167
|
-
readonly member: readonly ["create", "update", "delete"];
|
|
168
|
-
readonly invitation: readonly ["create", "cancel"];
|
|
169
|
-
readonly team: readonly ["create", "update", "delete"];
|
|
170
|
-
readonly ac: readonly ["create", "read", "update", "delete"];
|
|
171
|
-
}>[key];
|
|
172
|
-
connector: "OR" | "AND";
|
|
173
|
-
} | undefined } : never, connector?: "OR" | "AND"): AuthorizeResponse;
|
|
174
|
-
statements: Subset<"organization" | "member" | "team" | "ac" | "invitation", {
|
|
175
|
-
readonly organization: readonly ["update", "delete"];
|
|
176
|
-
readonly member: readonly ["create", "update", "delete"];
|
|
177
|
-
readonly invitation: readonly ["create", "cancel"];
|
|
178
|
-
readonly team: readonly ["create", "update", "delete"];
|
|
179
|
-
readonly ac: readonly ["create", "read", "update", "delete"];
|
|
180
|
-
}>;
|
|
181
|
-
};
|
|
182
|
-
owner: {
|
|
183
|
-
authorize<K extends "organization" | "member" | "team" | "ac" | "invitation">(request: K extends infer T extends keyof Subset<"organization" | "member" | "team" | "ac" | "invitation", {
|
|
184
|
-
readonly organization: readonly ["update", "delete"];
|
|
185
|
-
readonly member: readonly ["create", "update", "delete"];
|
|
186
|
-
readonly invitation: readonly ["create", "cancel"];
|
|
187
|
-
readonly team: readonly ["create", "update", "delete"];
|
|
188
|
-
readonly ac: readonly ["create", "read", "update", "delete"];
|
|
189
|
-
}> ? { [key in T]?: Subset<"organization" | "member" | "team" | "ac" | "invitation", {
|
|
190
|
-
readonly organization: readonly ["update", "delete"];
|
|
191
|
-
readonly member: readonly ["create", "update", "delete"];
|
|
192
|
-
readonly invitation: readonly ["create", "cancel"];
|
|
193
|
-
readonly team: readonly ["create", "update", "delete"];
|
|
194
|
-
readonly ac: readonly ["create", "read", "update", "delete"];
|
|
195
|
-
}>[key] | {
|
|
196
|
-
actions: Subset<"organization" | "member" | "team" | "ac" | "invitation", {
|
|
197
|
-
readonly organization: readonly ["update", "delete"];
|
|
198
|
-
readonly member: readonly ["create", "update", "delete"];
|
|
199
|
-
readonly invitation: readonly ["create", "cancel"];
|
|
200
|
-
readonly team: readonly ["create", "update", "delete"];
|
|
201
|
-
readonly ac: readonly ["create", "read", "update", "delete"];
|
|
202
|
-
}>[key];
|
|
203
|
-
connector: "OR" | "AND";
|
|
204
|
-
} | undefined } : never, connector?: "OR" | "AND"): AuthorizeResponse;
|
|
205
|
-
statements: Subset<"organization" | "member" | "team" | "ac" | "invitation", {
|
|
206
|
-
readonly organization: readonly ["update", "delete"];
|
|
207
|
-
readonly member: readonly ["create", "update", "delete"];
|
|
208
|
-
readonly invitation: readonly ["create", "cancel"];
|
|
209
|
-
readonly team: readonly ["create", "update", "delete"];
|
|
210
|
-
readonly ac: readonly ["create", "read", "update", "delete"];
|
|
211
|
-
}>;
|
|
212
|
-
};
|
|
213
|
-
member: {
|
|
214
|
-
authorize<K extends "organization" | "member" | "team" | "ac" | "invitation">(request: K extends infer T extends keyof Subset<"organization" | "member" | "team" | "ac" | "invitation", {
|
|
215
|
-
readonly organization: readonly ["update", "delete"];
|
|
216
|
-
readonly member: readonly ["create", "update", "delete"];
|
|
217
|
-
readonly invitation: readonly ["create", "cancel"];
|
|
218
|
-
readonly team: readonly ["create", "update", "delete"];
|
|
219
|
-
readonly ac: readonly ["create", "read", "update", "delete"];
|
|
220
|
-
}> ? { [key in T]?: Subset<"organization" | "member" | "team" | "ac" | "invitation", {
|
|
221
|
-
readonly organization: readonly ["update", "delete"];
|
|
222
|
-
readonly member: readonly ["create", "update", "delete"];
|
|
223
|
-
readonly invitation: readonly ["create", "cancel"];
|
|
224
|
-
readonly team: readonly ["create", "update", "delete"];
|
|
225
|
-
readonly ac: readonly ["create", "read", "update", "delete"];
|
|
226
|
-
}>[key] | {
|
|
227
|
-
actions: Subset<"organization" | "member" | "team" | "ac" | "invitation", {
|
|
228
|
-
readonly organization: readonly ["update", "delete"];
|
|
229
|
-
readonly member: readonly ["create", "update", "delete"];
|
|
230
|
-
readonly invitation: readonly ["create", "cancel"];
|
|
231
|
-
readonly team: readonly ["create", "update", "delete"];
|
|
232
|
-
readonly ac: readonly ["create", "read", "update", "delete"];
|
|
233
|
-
}>[key];
|
|
234
|
-
connector: "OR" | "AND";
|
|
235
|
-
} | undefined } : never, connector?: "OR" | "AND"): AuthorizeResponse;
|
|
236
|
-
statements: Subset<"organization" | "member" | "team" | "ac" | "invitation", {
|
|
237
|
-
readonly organization: readonly ["update", "delete"];
|
|
238
|
-
readonly member: readonly ["create", "update", "delete"];
|
|
239
|
-
readonly invitation: readonly ["create", "cancel"];
|
|
240
|
-
readonly team: readonly ["create", "update", "delete"];
|
|
241
|
-
readonly ac: readonly ["create", "read", "update", "delete"];
|
|
242
|
-
}>;
|
|
243
|
-
};
|
|
244
|
-
};
|
|
245
112
|
//#endregion
|
|
246
113
|
export { adminAc, defaultAc, defaultRoles, defaultStatements, memberAc, ownerAc };
|
|
@@ -396,7 +396,7 @@ declare const getOrgAdapter: <O extends OrganizationOptions>(context: AuthContex
|
|
|
396
396
|
} ? FieldAttributeToObject<RemoveFieldsWithReturnedFalse<Field>> : {}) extends infer T_3 ? { [K_3 in keyof T_3]: T_3[K_3] } : never)[] | undefined;
|
|
397
397
|
}) | null>;
|
|
398
398
|
listOrganizations: (userId: string) => Promise<InferOrganization<O>[]>;
|
|
399
|
-
createTeam: (data:
|
|
399
|
+
createTeam: (data: TeamInput) => Promise<{
|
|
400
400
|
id: string;
|
|
401
401
|
name: string;
|
|
402
402
|
organizationId: string;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { getDate } from "../../utils/date.mjs";
|
|
2
2
|
import { parseJSON } from "../../client/parser.mjs";
|
|
3
|
-
import { getCurrentAdapter } from "@better-auth/core/context";
|
|
3
|
+
import { getCurrentAdapter, runWithTransaction } from "@better-auth/core/context";
|
|
4
4
|
import { BetterAuthError } from "@better-auth/core/error";
|
|
5
5
|
import { filterOutputFields } from "@better-auth/core/utils/db";
|
|
6
6
|
//#region src/plugins/organization/adapter.ts
|
|
@@ -184,46 +184,49 @@ const getOrgAdapter = (context, options) => {
|
|
|
184
184
|
});
|
|
185
185
|
},
|
|
186
186
|
deleteMember: async ({ memberId, organizationId, userId: _userId }) => {
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
187
|
+
return runWithTransaction(baseAdapter, async () => {
|
|
188
|
+
const adapter = await getCurrentAdapter(baseAdapter);
|
|
189
|
+
let userId;
|
|
190
|
+
if (!_userId) {
|
|
191
|
+
const member = await adapter.findOne({
|
|
192
|
+
model: "member",
|
|
193
|
+
where: [{
|
|
194
|
+
field: "id",
|
|
195
|
+
value: memberId
|
|
196
|
+
}]
|
|
197
|
+
});
|
|
198
|
+
if (!member) throw new BetterAuthError("Member not found");
|
|
199
|
+
userId = member.userId;
|
|
200
|
+
} else userId = _userId;
|
|
201
|
+
const member = await adapter.delete({
|
|
191
202
|
model: "member",
|
|
192
203
|
where: [{
|
|
193
204
|
field: "id",
|
|
194
205
|
value: memberId
|
|
195
206
|
}]
|
|
196
207
|
});
|
|
197
|
-
if (
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
208
|
+
if (options?.teams?.enabled) {
|
|
209
|
+
const teams = await adapter.findMany({
|
|
210
|
+
model: "team",
|
|
211
|
+
where: [{
|
|
212
|
+
field: "organizationId",
|
|
213
|
+
value: organizationId
|
|
214
|
+
}]
|
|
215
|
+
});
|
|
216
|
+
if (teams.length > 0) await adapter.deleteMany({
|
|
217
|
+
model: "teamMember",
|
|
218
|
+
where: [{
|
|
219
|
+
field: "userId",
|
|
220
|
+
value: userId
|
|
221
|
+
}, {
|
|
222
|
+
field: "teamId",
|
|
223
|
+
value: teams.map((team) => team.id),
|
|
224
|
+
operator: "in"
|
|
225
|
+
}]
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
return member;
|
|
206
229
|
});
|
|
207
|
-
if (options?.teams?.enabled) {
|
|
208
|
-
const teams = await adapter.findMany({
|
|
209
|
-
model: "team",
|
|
210
|
-
where: [{
|
|
211
|
-
field: "organizationId",
|
|
212
|
-
value: organizationId
|
|
213
|
-
}]
|
|
214
|
-
});
|
|
215
|
-
await Promise.all(teams.map((team) => adapter.deleteMany({
|
|
216
|
-
model: "teamMember",
|
|
217
|
-
where: [{
|
|
218
|
-
field: "teamId",
|
|
219
|
-
value: team.id
|
|
220
|
-
}, {
|
|
221
|
-
field: "userId",
|
|
222
|
-
value: userId
|
|
223
|
-
}]
|
|
224
|
-
})));
|
|
225
|
-
}
|
|
226
|
-
return member;
|
|
227
230
|
},
|
|
228
231
|
updateOrganization: async (organizationId, data) => {
|
|
229
232
|
const organization = await (await getCurrentAdapter(baseAdapter)).update({
|
|
@@ -244,29 +247,31 @@ const getOrgAdapter = (context, options) => {
|
|
|
244
247
|
}, orgAdditionalFields);
|
|
245
248
|
},
|
|
246
249
|
deleteOrganization: async (organizationId) => {
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
250
|
+
return runWithTransaction(baseAdapter, async () => {
|
|
251
|
+
const adapter = await getCurrentAdapter(baseAdapter);
|
|
252
|
+
await adapter.deleteMany({
|
|
253
|
+
model: "member",
|
|
254
|
+
where: [{
|
|
255
|
+
field: "organizationId",
|
|
256
|
+
value: organizationId
|
|
257
|
+
}]
|
|
258
|
+
});
|
|
259
|
+
await adapter.deleteMany({
|
|
260
|
+
model: "invitation",
|
|
261
|
+
where: [{
|
|
262
|
+
field: "organizationId",
|
|
263
|
+
value: organizationId
|
|
264
|
+
}]
|
|
265
|
+
});
|
|
266
|
+
await adapter.delete({
|
|
267
|
+
model: "organization",
|
|
268
|
+
where: [{
|
|
269
|
+
field: "id",
|
|
270
|
+
value: organizationId
|
|
271
|
+
}]
|
|
272
|
+
});
|
|
273
|
+
return organizationId;
|
|
268
274
|
});
|
|
269
|
-
return organizationId;
|
|
270
275
|
},
|
|
271
276
|
setActiveOrganization: async (sessionToken, organizationId, ctx) => {
|
|
272
277
|
return await context.internalAdapter.updateSession(sessionToken, { activeOrganizationId: organizationId });
|
|
@@ -357,7 +362,8 @@ const getOrgAdapter = (context, options) => {
|
|
|
357
362
|
createTeam: async (data) => {
|
|
358
363
|
return await (await getCurrentAdapter(baseAdapter)).create({
|
|
359
364
|
model: "team",
|
|
360
|
-
data
|
|
365
|
+
data,
|
|
366
|
+
forceAllowId: true
|
|
361
367
|
});
|
|
362
368
|
},
|
|
363
369
|
findTeamById: async ({ teamId, organizationId, includeTeamMembers }) => {
|
|
@@ -553,7 +559,8 @@ const getOrgAdapter = (context, options) => {
|
|
|
553
559
|
inviterId: user.id,
|
|
554
560
|
...invitation,
|
|
555
561
|
teamId: invitation.teamIds.length > 0 ? invitation.teamIds.join(",") : null
|
|
556
|
-
}
|
|
562
|
+
},
|
|
563
|
+
forceAllowId: true
|
|
557
564
|
});
|
|
558
565
|
},
|
|
559
566
|
findInvitationById: async (id) => {
|