@tinyrack/issuary-server 0.31.0 → 0.32.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/entities/auth-budget.entity.d.ts +20 -0
- package/dist/entities/auth-budget.entity.d.ts.map +1 -0
- package/dist/entities/auth-budget.entity.js +11 -0
- package/dist/entities/auth-budget.entity.js.map +1 -0
- package/dist/entities/browser-session.entity.d.ts +32 -0
- package/dist/entities/browser-session.entity.d.ts.map +1 -0
- package/dist/entities/browser-session.entity.js +12 -0
- package/dist/entities/browser-session.entity.js.map +1 -0
- package/dist/entities/email-verification.entity.d.ts +18 -0
- package/dist/entities/email-verification.entity.d.ts.map +1 -1
- package/dist/entities/email-verification.entity.js +2 -0
- package/dist/entities/email-verification.entity.js.map +1 -1
- package/dist/entities/oauth-client.entity.d.ts +120 -0
- package/dist/entities/oauth-client.entity.d.ts.map +1 -1
- package/dist/entities/oauth-code.entity.d.ts +120 -0
- package/dist/entities/oauth-code.entity.d.ts.map +1 -1
- package/dist/entities/oauth-code.entity.js +3 -0
- package/dist/entities/oauth-code.entity.js.map +1 -1
- package/dist/entities/oauth-device-code.entity.d.ts +120 -0
- package/dist/entities/oauth-device-code.entity.d.ts.map +1 -1
- package/dist/entities/oauth-device-code.entity.js +3 -0
- package/dist/entities/oauth-device-code.entity.js.map +1 -1
- package/dist/entities/oauth-grant.entity.d.ts +52 -0
- package/dist/entities/oauth-grant.entity.d.ts.map +1 -0
- package/dist/entities/oauth-grant.entity.js +19 -0
- package/dist/entities/oauth-grant.entity.js.map +1 -0
- package/dist/entities/password-reset.entity.d.ts +18 -0
- package/dist/entities/password-reset.entity.d.ts.map +1 -1
- package/dist/entities/password-reset.entity.js +2 -0
- package/dist/entities/password-reset.entity.js.map +1 -1
- package/dist/entities/pending-oauth-registration.entity.d.ts +9 -0
- package/dist/entities/pending-oauth-registration.entity.d.ts.map +1 -1
- package/dist/entities/pending-oauth-registration.entity.js +1 -0
- package/dist/entities/pending-oauth-registration.entity.js.map +1 -1
- package/dist/entities/revoked-token.entity.d.ts +120 -0
- package/dist/entities/revoked-token.entity.d.ts.map +1 -1
- package/dist/entities/terms-content.entity.d.ts +36 -0
- package/dist/entities/terms-content.entity.d.ts.map +1 -1
- package/dist/entities/terms.entity.d.ts +36 -0
- package/dist/entities/terms.entity.d.ts.map +1 -1
- package/dist/entities/user-consent.entity.d.ts +120 -0
- package/dist/entities/user-consent.entity.d.ts.map +1 -1
- package/dist/entities/user-terms-consent.entity.d.ts +36 -0
- package/dist/entities/user-terms-consent.entity.d.ts.map +1 -1
- package/dist/entities/user-totp-recovery-code.entity.d.ts +36 -0
- package/dist/entities/user-totp-recovery-code.entity.d.ts.map +1 -1
- package/dist/entities/user-totp.entity.d.ts +36 -0
- package/dist/entities/user-totp.entity.d.ts.map +1 -1
- package/dist/entities/user-totp.entity.js +1 -0
- package/dist/entities/user-totp.entity.js.map +1 -1
- package/dist/entities/user.entity.d.ts +36 -0
- package/dist/entities/user.entity.d.ts.map +1 -1
- package/dist/entities/user.entity.js +3 -0
- package/dist/entities/user.entity.js.map +1 -1
- package/dist/entrypoints/app.d.ts +448 -437
- package/dist/entrypoints/app.d.ts.map +1 -1
- package/dist/entrypoints/app.js +78 -6
- package/dist/entrypoints/app.js.map +1 -1
- package/dist/entrypoints/database/postgres/compiled-functions.d.ts +326 -200
- package/dist/entrypoints/database/postgres/compiled-functions.js +1849 -518
- package/dist/entrypoints/database/postgres/compiled-functions.js.map +1 -1
- package/dist/entrypoints/database/sqlite/compiled-functions.d.ts +326 -200
- package/dist/entrypoints/database/sqlite/compiled-functions.js +1849 -518
- package/dist/entrypoints/database/sqlite/compiled-functions.js.map +1 -1
- package/dist/entrypoints/database/sqlite/sqlite.d.ts.map +1 -1
- package/dist/entrypoints/database/sqlite/sqlite.js +1 -0
- package/dist/entrypoints/database/sqlite/sqlite.js.map +1 -1
- package/dist/entrypoints/scheduler/database.d.ts +3 -1
- package/dist/entrypoints/scheduler/database.d.ts.map +1 -1
- package/dist/entrypoints/scheduler/database.js +13 -2
- package/dist/entrypoints/scheduler/database.js.map +1 -1
- package/dist/entrypoints/scheduler/distributed-runner.d.ts +4 -0
- package/dist/entrypoints/scheduler/distributed-runner.d.ts.map +1 -1
- package/dist/entrypoints/scheduler/distributed-runner.js +26 -1
- package/dist/entrypoints/scheduler/distributed-runner.js.map +1 -1
- package/dist/lib/config/email.d.ts +1 -0
- package/dist/lib/config/email.d.ts.map +1 -1
- package/dist/lib/config/email.js.map +1 -1
- package/dist/lib/database/entities.d.ts.map +1 -1
- package/dist/lib/database/entities.js +6 -0
- package/dist/lib/database/entities.js.map +1 -1
- package/dist/lib/openapi.d.ts +2 -0
- package/dist/lib/openapi.d.ts.map +1 -1
- package/dist/lib/openapi.js +36 -1
- package/dist/lib/openapi.js.map +1 -1
- package/dist/lib/request-ip.d.ts +4 -0
- package/dist/lib/request-ip.d.ts.map +1 -0
- package/dist/lib/request-ip.js +39 -0
- package/dist/lib/request-ip.js.map +1 -0
- package/dist/middleware/auth-budget.d.ts +3 -0
- package/dist/middleware/auth-budget.d.ts.map +1 -0
- package/dist/middleware/auth-budget.js +80 -0
- package/dist/middleware/auth-budget.js.map +1 -0
- package/dist/middleware/session.d.ts +23 -5
- package/dist/middleware/session.d.ts.map +1 -1
- package/dist/middleware/session.js +152 -12
- package/dist/middleware/session.js.map +1 -1
- package/dist/middleware/strict-input.d.ts +4 -0
- package/dist/middleware/strict-input.d.ts.map +1 -0
- package/dist/middleware/strict-input.js +144 -0
- package/dist/middleware/strict-input.js.map +1 -0
- package/dist/migrations/postgres/Migration20260910120000_api_security.d.ts +6 -0
- package/dist/migrations/postgres/Migration20260910120000_api_security.d.ts.map +1 -0
- package/dist/migrations/postgres/Migration20260910120000_api_security.js +20 -0
- package/dist/migrations/postgres/Migration20260910120000_api_security.js.map +1 -0
- package/dist/migrations/postgres/Migration20260910160000_security_followup.d.ts +6 -0
- package/dist/migrations/postgres/Migration20260910160000_security_followup.d.ts.map +1 -0
- package/dist/migrations/postgres/Migration20260910160000_security_followup.js +23 -0
- package/dist/migrations/postgres/Migration20260910160000_security_followup.js.map +1 -0
- package/dist/migrations/postgres/Migration20260910200000_authentication_epoch.d.ts +6 -0
- package/dist/migrations/postgres/Migration20260910200000_authentication_epoch.d.ts.map +1 -0
- package/dist/migrations/postgres/Migration20260910200000_authentication_epoch.js +28 -0
- package/dist/migrations/postgres/Migration20260910200000_authentication_epoch.js.map +1 -0
- package/dist/migrations/postgres/Migration20260910220000_flow_revocation.d.ts +6 -0
- package/dist/migrations/postgres/Migration20260910220000_flow_revocation.d.ts.map +1 -0
- package/dist/migrations/postgres/Migration20260910220000_flow_revocation.js +19 -0
- package/dist/migrations/postgres/Migration20260910220000_flow_revocation.js.map +1 -0
- package/dist/migrations/postgres/index.d.ts.map +1 -1
- package/dist/migrations/postgres/index.js +8 -0
- package/dist/migrations/postgres/index.js.map +1 -1
- package/dist/migrations/sqlite/Migration20260910120000_api_security.d.ts +6 -0
- package/dist/migrations/sqlite/Migration20260910120000_api_security.d.ts.map +1 -0
- package/dist/migrations/sqlite/Migration20260910120000_api_security.js +20 -0
- package/dist/migrations/sqlite/Migration20260910120000_api_security.js.map +1 -0
- package/dist/migrations/sqlite/Migration20260910160000_security_followup.d.ts +6 -0
- package/dist/migrations/sqlite/Migration20260910160000_security_followup.d.ts.map +1 -0
- package/dist/migrations/sqlite/Migration20260910160000_security_followup.js +23 -0
- package/dist/migrations/sqlite/Migration20260910160000_security_followup.js.map +1 -0
- package/dist/migrations/sqlite/Migration20260910200000_authentication_epoch.d.ts +8 -0
- package/dist/migrations/sqlite/Migration20260910200000_authentication_epoch.d.ts.map +1 -0
- package/dist/migrations/sqlite/Migration20260910200000_authentication_epoch.js +72 -0
- package/dist/migrations/sqlite/Migration20260910200000_authentication_epoch.js.map +1 -0
- package/dist/migrations/sqlite/Migration20260910220000_flow_revocation.d.ts +6 -0
- package/dist/migrations/sqlite/Migration20260910220000_flow_revocation.d.ts.map +1 -0
- package/dist/migrations/sqlite/Migration20260910220000_flow_revocation.js +19 -0
- package/dist/migrations/sqlite/Migration20260910220000_flow_revocation.js.map +1 -0
- package/dist/migrations/sqlite/index.d.ts.map +1 -1
- package/dist/migrations/sqlite/index.js +8 -0
- package/dist/migrations/sqlite/index.js.map +1 -1
- package/dist/repositories/email-verification.repository.d.ts +1 -0
- package/dist/repositories/email-verification.repository.d.ts.map +1 -1
- package/dist/repositories/email-verification.repository.js +8 -17
- package/dist/repositories/email-verification.repository.js.map +1 -1
- package/dist/repositories/oauth-code.repository.d.ts +2 -0
- package/dist/repositories/oauth-code.repository.d.ts.map +1 -1
- package/dist/repositories/oauth-code.repository.js +8 -0
- package/dist/repositories/oauth-code.repository.js.map +1 -1
- package/dist/repositories/oauth-device-code.repository.d.ts +3 -0
- package/dist/repositories/oauth-device-code.repository.d.ts.map +1 -1
- package/dist/repositories/oauth-device-code.repository.js +64 -29
- package/dist/repositories/oauth-device-code.repository.js.map +1 -1
- package/dist/repositories/password-reset.repository.d.ts +1 -0
- package/dist/repositories/password-reset.repository.d.ts.map +1 -1
- package/dist/repositories/password-reset.repository.js +6 -19
- package/dist/repositories/password-reset.repository.js.map +1 -1
- package/dist/repositories/pending-oauth-registration.repository.d.ts +2 -0
- package/dist/repositories/pending-oauth-registration.repository.d.ts.map +1 -1
- package/dist/repositories/pending-oauth-registration.repository.js +16 -2
- package/dist/repositories/pending-oauth-registration.repository.js.map +1 -1
- package/dist/repositories/terms.repository.d.ts.map +1 -1
- package/dist/repositories/terms.repository.js +1 -0
- package/dist/repositories/terms.repository.js.map +1 -1
- package/dist/repositories/user-consent.repository.d.ts.map +1 -1
- package/dist/repositories/user-consent.repository.js +1 -1
- package/dist/repositories/user-consent.repository.js.map +1 -1
- package/dist/repositories/user-terms-consent.repository.d.ts.map +1 -1
- package/dist/repositories/user-terms-consent.repository.js +2 -0
- package/dist/repositories/user-terms-consent.repository.js.map +1 -1
- package/dist/repositories/user-totp-recovery-code.repository.d.ts +24 -0
- package/dist/repositories/user-totp-recovery-code.repository.d.ts.map +1 -1
- package/dist/repositories/user-totp.repository.d.ts +36 -0
- package/dist/repositories/user-totp.repository.d.ts.map +1 -1
- package/dist/routes/.well-known/openid-configuration/get.d.ts.map +1 -1
- package/dist/routes/.well-known/openid-configuration/get.js +5 -1
- package/dist/routes/.well-known/openid-configuration/get.js.map +1 -1
- package/dist/routes/api/admin/console/index.d.ts.map +1 -1
- package/dist/routes/api/admin/console/index.js +29 -14
- package/dist/routes/api/admin/console/index.js.map +1 -1
- package/dist/routes/api/admin/me/get.js +2 -3
- package/dist/routes/api/admin/me/get.js.map +1 -1
- package/dist/routes/api/admin/users/index.d.ts.map +1 -1
- package/dist/routes/api/admin/users/index.js +59 -52
- package/dist/routes/api/admin/users/index.js.map +1 -1
- package/dist/routes/api/auth/accounts/remove.post.d.ts +5 -5
- package/dist/routes/api/auth/email/resend/post.d.ts.map +1 -1
- package/dist/routes/api/auth/email/resend/post.js +3 -24
- package/dist/routes/api/auth/email/resend/post.js.map +1 -1
- package/dist/routes/api/auth/email/verify/post.d.ts.map +1 -1
- package/dist/routes/api/auth/email/verify/post.js +29 -12
- package/dist/routes/api/auth/email/verify/post.js.map +1 -1
- package/dist/routes/api/auth/login/post.d.ts.map +1 -1
- package/dist/routes/api/auth/login/post.js +4 -3
- package/dist/routes/api/auth/login/post.js.map +1 -1
- package/dist/routes/api/auth/passkey/verify/post.d.ts.map +1 -1
- package/dist/routes/api/auth/passkey/verify/post.js +25 -11
- package/dist/routes/api/auth/passkey/verify/post.js.map +1 -1
- package/dist/routes/api/auth/password/forgot/post.d.ts.map +1 -1
- package/dist/routes/api/auth/password/forgot/post.js +2 -19
- package/dist/routes/api/auth/password/forgot/post.js.map +1 -1
- package/dist/routes/api/auth/register/post.d.ts.map +1 -1
- package/dist/routes/api/auth/register/post.js +4 -3
- package/dist/routes/api/auth/register/post.js.map +1 -1
- package/dist/routes/api/auth/totp/recovery/verify/post.d.ts.map +1 -1
- package/dist/routes/api/auth/totp/recovery/verify/post.js +7 -5
- package/dist/routes/api/auth/totp/recovery/verify/post.js.map +1 -1
- package/dist/routes/api/auth/totp/verify/post.d.ts.map +1 -1
- package/dist/routes/api/auth/totp/verify/post.js +7 -5
- package/dist/routes/api/auth/totp/verify/post.js.map +1 -1
- package/dist/routes/api/consent/post.d.ts.map +1 -1
- package/dist/routes/api/consent/post.js +141 -120
- package/dist/routes/api/consent/post.js.map +1 -1
- package/dist/routes/api/docs/get.d.ts.map +1 -1
- package/dist/routes/api/docs/get.js +8 -1
- package/dist/routes/api/docs/get.js.map +1 -1
- package/dist/routes/api/index.d.ts +379 -379
- package/dist/routes/api/oauth/_provider/authorize/get.d.ts.map +1 -1
- package/dist/routes/api/oauth/_provider/authorize/get.js +5 -1
- package/dist/routes/api/oauth/_provider/authorize/get.js.map +1 -1
- package/dist/routes/api/oauth/_provider/callback/get.d.ts +9 -9
- package/dist/routes/api/oauth/_provider/callback/get.d.ts.map +1 -1
- package/dist/routes/api/oauth/_provider/callback/get.js +30 -6
- package/dist/routes/api/oauth/_provider/callback/get.js.map +1 -1
- package/dist/routes/api/oauth/_provider/callback/post.d.ts.map +1 -1
- package/dist/routes/api/oauth/_provider/callback/post.js +31 -31
- package/dist/routes/api/oauth/_provider/callback/post.js.map +1 -1
- package/dist/routes/api/oauth/_provider/delete.d.ts.map +1 -1
- package/dist/routes/api/oauth/_provider/delete.js +14 -11
- package/dist/routes/api/oauth/_provider/delete.js.map +1 -1
- package/dist/routes/api/oauth/index.d.ts +18 -18
- package/dist/routes/api/terms/consent/post.d.ts.map +1 -1
- package/dist/routes/api/terms/consent/post.js +59 -43
- package/dist/routes/api/terms/consent/post.js.map +1 -1
- package/dist/routes/api/user/delete.d.ts.map +1 -1
- package/dist/routes/api/user/delete.js +8 -8
- package/dist/routes/api/user/delete.js.map +1 -1
- package/dist/routes/api/user/passkeys/_id/delete.d.ts.map +1 -1
- package/dist/routes/api/user/passkeys/_id/delete.js +17 -29
- package/dist/routes/api/user/passkeys/_id/delete.js.map +1 -1
- package/dist/routes/api/user/passkeys/_id/patch.d.ts.map +1 -1
- package/dist/routes/api/user/passkeys/_id/patch.js +16 -13
- package/dist/routes/api/user/passkeys/_id/patch.js.map +1 -1
- package/dist/routes/api/user/passkeys/register/verify/post.d.ts.map +1 -1
- package/dist/routes/api/user/passkeys/register/verify/post.js +27 -19
- package/dist/routes/api/user/passkeys/register/verify/post.js.map +1 -1
- package/dist/routes/api/user/password/delete.d.ts.map +1 -1
- package/dist/routes/api/user/password/delete.js +13 -10
- package/dist/routes/api/user/password/delete.js.map +1 -1
- package/dist/routes/api/user/password/post.d.ts.map +1 -1
- package/dist/routes/api/user/password/post.js +13 -10
- package/dist/routes/api/user/password/post.js.map +1 -1
- package/dist/routes/api/user/password/put.d.ts.map +1 -1
- package/dist/routes/api/user/password/put.js +13 -10
- package/dist/routes/api/user/password/put.js.map +1 -1
- package/dist/routes/api/user/totp/confirm/post.d.ts.map +1 -1
- package/dist/routes/api/user/totp/confirm/post.js +33 -18
- package/dist/routes/api/user/totp/confirm/post.js.map +1 -1
- package/dist/routes/api/user/totp/delete.d.ts.map +1 -1
- package/dist/routes/api/user/totp/delete.js +13 -18
- package/dist/routes/api/user/totp/delete.js.map +1 -1
- package/dist/routes/api/user/totp/recovery/regenerate/post.d.ts.map +1 -1
- package/dist/routes/api/user/totp/recovery/regenerate/post.js +13 -10
- package/dist/routes/api/user/totp/recovery/regenerate/post.js.map +1 -1
- package/dist/routes/api/user/totp/setup/post.d.ts.map +1 -1
- package/dist/routes/api/user/totp/setup/post.js +13 -8
- package/dist/routes/api/user/totp/setup/post.js.map +1 -1
- package/dist/routes/api/user/totp/verify/post.d.ts.map +1 -1
- package/dist/routes/api/user/totp/verify/post.js +23 -12
- package/dist/routes/api/user/totp/verify/post.js.map +1 -1
- package/dist/routes/index.d.ts +252 -242
- package/dist/routes/index.d.ts.map +1 -1
- package/dist/routes/oauth/authorize/get.d.ts.map +1 -1
- package/dist/routes/oauth/authorize/get.js +12 -4
- package/dist/routes/oauth/authorize/get.js.map +1 -1
- package/dist/routes/oauth/device/get-post.d.ts +10 -0
- package/dist/routes/oauth/device/get-post.d.ts.map +1 -1
- package/dist/routes/oauth/device/get-post.js +32 -3
- package/dist/routes/oauth/device/get-post.js.map +1 -1
- package/dist/routes/oauth/device-authorization/post.d.ts.map +1 -1
- package/dist/routes/oauth/device-authorization/post.js +13 -7
- package/dist/routes/oauth/device-authorization/post.js.map +1 -1
- package/dist/routes/oauth/end-session/get.d.ts.map +1 -1
- package/dist/routes/oauth/end-session/get.js +2 -3
- package/dist/routes/oauth/end-session/get.js.map +1 -1
- package/dist/routes/oauth/index.d.ts +10 -0
- package/dist/routes/oauth/index.d.ts.map +1 -1
- package/dist/routes/oauth/revoke/post.d.ts.map +1 -1
- package/dist/routes/oauth/revoke/post.js +10 -2
- package/dist/routes/oauth/revoke/post.js.map +1 -1
- package/dist/routes/oauth/token/post.d.ts.map +1 -1
- package/dist/routes/oauth/token/post.js +69 -57
- package/dist/routes/oauth/token/post.js.map +1 -1
- package/dist/schemas/error.d.ts +75 -0
- package/dist/schemas/error.d.ts.map +1 -1
- package/dist/schemas/error.js +3 -0
- package/dist/schemas/error.js.map +1 -1
- package/dist/schemas/field.d.ts.map +1 -1
- package/dist/schemas/field.js +3 -0
- package/dist/schemas/field.js.map +1 -1
- package/dist/seeders/config.seeder.d.ts +1 -1
- package/dist/seeders/config.seeder.d.ts.map +1 -1
- package/dist/seeders/config.seeder.js +100 -36
- package/dist/seeders/config.seeder.js.map +1 -1
- package/dist/services/admin-console.service.d.ts.map +1 -1
- package/dist/services/admin-console.service.js +137 -100
- package/dist/services/admin-console.service.js.map +1 -1
- package/dist/services/auth-budget.service.d.ts +6 -0
- package/dist/services/auth-budget.service.d.ts.map +1 -0
- package/dist/services/auth-budget.service.js +30 -0
- package/dist/services/auth-budget.service.js.map +1 -0
- package/dist/services/authentication-epoch.d.ts +5 -0
- package/dist/services/authentication-epoch.d.ts.map +1 -0
- package/dist/services/authentication-epoch.js +22 -0
- package/dist/services/authentication-epoch.js.map +1 -0
- package/dist/services/authorization-browser.service.d.ts +18 -0
- package/dist/services/authorization-browser.service.d.ts.map +1 -0
- package/dist/services/authorization-browser.service.js +28 -0
- package/dist/services/authorization-browser.service.js.map +1 -0
- package/dist/services/browser-security.service.d.ts +14 -0
- package/dist/services/browser-security.service.d.ts.map +1 -0
- package/dist/services/browser-security.service.js +85 -0
- package/dist/services/browser-security.service.js.map +1 -0
- package/dist/services/browser-session.service.d.ts +25 -0
- package/dist/services/browser-session.service.d.ts.map +1 -0
- package/dist/services/browser-session.service.js +102 -0
- package/dist/services/browser-session.service.js.map +1 -0
- package/dist/services/cleanup.service.d.ts +1 -0
- package/dist/services/cleanup.service.d.ts.map +1 -1
- package/dist/services/cleanup.service.js +31 -0
- package/dist/services/cleanup.service.js.map +1 -1
- package/dist/services/client-security.d.ts +641 -0
- package/dist/services/client-security.d.ts.map +1 -0
- package/dist/services/client-security.js +10 -0
- package/dist/services/client-security.js.map +1 -0
- package/dist/services/container.d.ts +2 -0
- package/dist/services/container.d.ts.map +1 -1
- package/dist/services/container.js +6 -2
- package/dist/services/container.js.map +1 -1
- package/dist/services/email.service.d.ts +2 -14
- package/dist/services/email.service.d.ts.map +1 -1
- package/dist/services/email.service.js +35 -29
- package/dist/services/email.service.js.map +1 -1
- package/dist/services/jwt.service.d.ts +1 -0
- package/dist/services/jwt.service.d.ts.map +1 -1
- package/dist/services/jwt.service.js +13 -1
- package/dist/services/jwt.service.js.map +1 -1
- package/dist/services/mail-queue.service.d.ts +24 -0
- package/dist/services/mail-queue.service.d.ts.map +1 -0
- package/dist/services/mail-queue.service.js +223 -0
- package/dist/services/mail-queue.service.js.map +1 -0
- package/dist/services/mikro.service.d.ts.map +1 -1
- package/dist/services/mikro.service.js +2 -0
- package/dist/services/mikro.service.js.map +1 -1
- package/dist/services/oauth-authorize.service.d.ts +3 -0
- package/dist/services/oauth-authorize.service.d.ts.map +1 -1
- package/dist/services/oauth-authorize.service.js +131 -101
- package/dist/services/oauth-authorize.service.js.map +1 -1
- package/dist/services/oauth-browser-security.service.d.ts +7 -0
- package/dist/services/oauth-browser-security.service.d.ts.map +1 -0
- package/dist/services/oauth-browser-security.service.js +67 -0
- package/dist/services/oauth-browser-security.service.js.map +1 -0
- package/dist/services/oauth-client.service.d.ts +24 -1
- package/dist/services/oauth-client.service.d.ts.map +1 -1
- package/dist/services/oauth-client.service.js +52 -13
- package/dist/services/oauth-client.service.js.map +1 -1
- package/dist/services/oauth-connect.service.d.ts +37 -3
- package/dist/services/oauth-connect.service.d.ts.map +1 -1
- package/dist/services/oauth-connect.service.js +236 -212
- package/dist/services/oauth-connect.service.js.map +1 -1
- package/dist/services/oauth-token.service.d.ts +6 -4
- package/dist/services/oauth-token.service.d.ts.map +1 -1
- package/dist/services/oauth-token.service.js +295 -209
- package/dist/services/oauth-token.service.js.map +1 -1
- package/dist/services/passkey.service.d.ts +26 -7
- package/dist/services/passkey.service.d.ts.map +1 -1
- package/dist/services/passkey.service.js +71 -42
- package/dist/services/passkey.service.js.map +1 -1
- package/dist/services/password-auth.service.d.ts +5 -1
- package/dist/services/password-auth.service.d.ts.map +1 -1
- package/dist/services/password-auth.service.js +79 -52
- package/dist/services/password-auth.service.js.map +1 -1
- package/dist/services/password-reset.service.d.ts.map +1 -1
- package/dist/services/password-reset.service.js +34 -15
- package/dist/services/password-reset.service.js.map +1 -1
- package/dist/services/security.service.d.ts +3 -1
- package/dist/services/security.service.d.ts.map +1 -1
- package/dist/services/security.service.js +11 -2
- package/dist/services/security.service.js.map +1 -1
- package/dist/services/terms-policy.service.d.ts +7 -0
- package/dist/services/terms-policy.service.d.ts.map +1 -0
- package/dist/services/terms-policy.service.js +26 -0
- package/dist/services/terms-policy.service.js.map +1 -0
- package/dist/services/totp.service.d.ts +4 -5
- package/dist/services/totp.service.d.ts.map +1 -1
- package/dist/services/totp.service.js +116 -86
- package/dist/services/totp.service.js.map +1 -1
- package/dist/services/user-security.service.d.ts +15 -0
- package/dist/services/user-security.service.d.ts.map +1 -0
- package/dist/services/user-security.service.js +57 -0
- package/dist/services/user-security.service.js.map +1 -0
- package/dist/services/user.service.d.ts +6 -4
- package/dist/services/user.service.d.ts.map +1 -1
- package/dist/services/user.service.js +143 -121
- package/dist/services/user.service.js.map +1 -1
- package/frontend/client/assets/{auth-layout-BedWIZ7L.js → auth-layout-sea6nww4.js} +1 -1
- package/frontend/client/assets/{auth-page-header-C6Z6Air-.js → auth-page-header-CV85AJLW.js} +1 -1
- package/frontend/client/assets/document-navigation-FZbb5ldf.js +1 -0
- package/frontend/client/assets/i18n-vfKY-byx.js +1 -0
- package/frontend/client/assets/{language-selector-CeLHnp1n.js → language-selector-Jso2cQNI.js} +1 -1
- package/frontend/client/assets/manifest-90703545.js +1 -0
- package/frontend/client/assets/{passkey-Bkqvhjwb.js → passkey-CJhT-7yO.js} +1 -1
- package/frontend/client/assets/{promise-CepnkPDw.js → promise-BP9iSIs-.js} +1 -1
- package/frontend/client/assets/{root-CM8lJbh5.js → root-BkavuloG.js} +1 -1
- package/frontend/client/assets/{route-Y1_yJKhW.js → route-B0udr9eT.js} +1 -1
- package/frontend/client/assets/{route-CdPHVY9W.js → route-B3Uv9aTa.js} +1 -1
- package/frontend/client/assets/{route-CF1S7UUy.js → route-B6hIfgxz.js} +1 -1
- package/frontend/client/assets/{route-BcXtt6V2.js → route-BEWds2g-.js} +1 -1
- package/frontend/client/assets/route-Bm9LsorH.js +1 -0
- package/frontend/client/assets/route-Btv5Y69z.js +1 -0
- package/frontend/client/assets/route-BvyDzziE.js +1 -0
- package/frontend/client/assets/route-C6kG9u7j.js +1 -0
- package/frontend/client/assets/{route-1rid8j-3.js → route-C7C3Z0vI.js} +1 -1
- package/frontend/client/assets/{route-DphbGk_G.js → route-CVyefM3x.js} +1 -1
- package/frontend/client/assets/{route-DZvCkU11.js → route-CXth2Wqz.js} +1 -1
- package/frontend/client/assets/route-D0IqOurp.js +1 -0
- package/frontend/client/assets/route-DHmYUnJR.js +1 -0
- package/frontend/client/assets/route-DTjZQ_Fl.js +1 -0
- package/frontend/client/assets/route-D_dTeu1b.js +1 -0
- package/frontend/client/assets/{route-DkoXJmYM.js → route-Dj8gVemC.js} +1 -1
- package/frontend/client/assets/{route-DrtpzI6u.js → route-DnhPlHOi.js} +1 -1
- package/frontend/client/assets/route-FY92YQhF.js +1 -0
- package/frontend/client/assets/{route-CKiun7AR.js → route-PcLpZHbT.js} +1 -1
- package/frontend/client/assets/{route-BwhQptmx.js → route-qpE7i22X.js} +1 -1
- package/frontend/client/assets/{route-HA9dma-h.js → route-wK89gmoS.js} +1 -1
- package/frontend/client/assets/security-error-message-CMsTsiWf.js +1 -0
- package/frontend/client/assets/{shell-header-bar-CjPlfRKT.js → shell-header-bar-DRx10tE5.js} +1 -1
- package/frontend/client/assets/{terms-BGJD_l_i.js → terms-Bu9Itxxs.js} +1 -1
- package/frontend/client/assets/{use-totp-setup-Cwuds2tR.js → use-totp-setup-CoOXWOcT.js} +1 -1
- package/frontend/server/assets/{hydration-B63_G0fd.js → hydration-DWMjpNav.js} +1 -1
- package/frontend/server/assets/{root-loader.server-DUIBlg_3.js → root-loader.server-B4OqoLGG.js} +3 -3
- package/frontend/server/assets/{route-runtime.server-DiqwWb8W.js → route-runtime.server-03_pjVDT.js} +1 -1
- package/frontend/server/assets/{session-BaAt7WMI.js → session-sJkmzJie.js} +36 -24
- package/frontend/server/index.js +239 -193
- package/package.json +1 -1
- package/frontend/client/assets/document-navigation-Cnp3Alf0.js +0 -1
- package/frontend/client/assets/i18n-Dzv9HKFm.js +0 -1
- package/frontend/client/assets/manifest-71025d92.js +0 -1
- package/frontend/client/assets/route-B4jDMFTW.js +0 -1
- package/frontend/client/assets/route-C-DecXPL.js +0 -1
- package/frontend/client/assets/route-CGTMMDiX.js +0 -1
- package/frontend/client/assets/route-CMJbXiDe.js +0 -1
- package/frontend/client/assets/route-DBpAiakW.js +0 -1
- package/frontend/client/assets/route-DS92RKs5.js +0 -1
- package/frontend/client/assets/route-Dc6G2aDX.js +0 -1
- package/frontend/client/assets/route-DqAmRSJE.js +0 -1
- package/frontend/client/assets/route-Ezzcj26w.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/routes/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAKhD,eAAO,MAAM,MAAM
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/routes/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAKhD,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iCAGsB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../../src/routes/oauth/authorize/get.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../../src/routes/oauth/authorize/get.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AActD,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAiRxB,CAAC"}
|
|
@@ -2,17 +2,18 @@ import { Hono } from 'hono';
|
|
|
2
2
|
import { describeRoute, resolver, validator } from 'hono-openapi';
|
|
3
3
|
import { z } from 'zod';
|
|
4
4
|
import { escapeHtml } from '../../../lib/escape-html.js';
|
|
5
|
-
import { OPENAPI_SECURITY } from '../../../lib/openapi.js';
|
|
5
|
+
import { OPENAPI_SECURITY, securityMutationDocumentation, } from '../../../lib/openapi.js';
|
|
6
6
|
import { TAGS } from '../../../lib/swagger-tags.js';
|
|
7
7
|
import { verifyAuth } from '../../../middleware/auth.js';
|
|
8
8
|
import { e } from '../../../schemas/error.js';
|
|
9
9
|
import { f } from '../../../schemas/field.js';
|
|
10
10
|
import { r } from '../../../schemas/response.js';
|
|
11
|
+
import { completeBrowserAuthorization } from '../../../services/authorization-browser.service.js';
|
|
11
12
|
export const authorizeGet = new Hono().get('/authorize', describeRoute({
|
|
12
13
|
tags: [TAGS.OPENID],
|
|
13
14
|
security: OPENAPI_SECURITY.optionalCookieSession,
|
|
14
15
|
summary: 'Authorize',
|
|
15
|
-
description: 'OAuth2 Authorization Endpoint',
|
|
16
|
+
description: 'OAuth2 Authorization Endpoint. Grant issuance and browser session persistence commit atomically; revoked browser authentication returns 401 without authorization credentials. Final issuance rechecks current scope consent, consent exemption and mandatory terms under policy locks. Newly required consent or terms returns to the corresponding screen, or an OAuth interaction error for prompt=none, without issuing authorization credentials.',
|
|
16
17
|
responses: {
|
|
17
18
|
302: {
|
|
18
19
|
description: 'Redirect',
|
|
@@ -66,7 +67,7 @@ export const authorizeGet = new Hono().get('/authorize', describeRoute({
|
|
|
66
67
|
ui_locales: z.string().min(1).max(1000).optional(),
|
|
67
68
|
id_token_hint: z.string().min(1).max(4000).optional(),
|
|
68
69
|
acr_values: z.string().min(1).max(1000).optional(),
|
|
69
|
-
})), verifyAuth({ optional: true }), async (c) => {
|
|
70
|
+
})), verifyAuth({ optional: true }), securityMutationDocumentation, async (c) => {
|
|
70
71
|
const query = c.req.valid('query');
|
|
71
72
|
const { oauthAuthorizeService } = c.var.services;
|
|
72
73
|
// Helper function to redirect with error
|
|
@@ -125,7 +126,11 @@ export const authorizeGet = new Hono().get('/authorize', describeRoute({
|
|
|
125
126
|
authorizeParams.setAccountSelectionSession = (state) => c.var.session.set('accountSelection', state);
|
|
126
127
|
authorizeParams.setReauthenticationSession = (state) => c.var.session.set('reauthentication', state);
|
|
127
128
|
authorizeParams.clearAccountSelectionSession = () => c.var.session.set('accountSelection', undefined);
|
|
128
|
-
const result = await oauthAuthorizeService.authorize(
|
|
129
|
+
const result = await oauthAuthorizeService.authorize({
|
|
130
|
+
...authorizeParams,
|
|
131
|
+
completeAuthorization: (proof, operation) => completeBrowserAuthorization(c, proof, operation),
|
|
132
|
+
authenticationEpochs: c.var.session.authorization.security?.grants ?? {},
|
|
133
|
+
});
|
|
129
134
|
if (result.type === 'form_post') {
|
|
130
135
|
return c.html(buildFormPostResponse(result.url, result.params ?? {}));
|
|
131
136
|
}
|
|
@@ -133,6 +138,9 @@ export const authorizeGet = new Hono().get('/authorize', describeRoute({
|
|
|
133
138
|
return c.redirect(result.url);
|
|
134
139
|
}
|
|
135
140
|
catch (error) {
|
|
141
|
+
if (error instanceof e.Unauthorized.Error ||
|
|
142
|
+
error instanceof e.ConcurrentSecurityChange.Error)
|
|
143
|
+
throw error;
|
|
136
144
|
// RFC 6749 §4.1.2.1: If client_id is invalid or redirect_uri validation fails,
|
|
137
145
|
// do NOT redirect to the provided redirect_uri
|
|
138
146
|
if (error instanceof e.OAuthClientNotFound.Error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get.js","sourceRoot":"","sources":["../../../../src/routes/oauth/authorize/get.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,
|
|
1
|
+
{"version":3,"file":"get.js","sourceRoot":"","sources":["../../../../src/routes/oauth/authorize/get.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,6 +11,16 @@ export declare const deviceGetPost: import("hono/hono-base").HonoBase<AppEnv, {
|
|
|
11
11
|
} & {
|
|
12
12
|
"/device": {
|
|
13
13
|
$post: {
|
|
14
|
+
output: undefined;
|
|
15
|
+
outputFormat: "redirect";
|
|
16
|
+
status: 303;
|
|
17
|
+
input: {
|
|
18
|
+
form: {
|
|
19
|
+
user_code: import("hono/types").ParsedFormValue[] | import("hono/types").ParsedFormValue;
|
|
20
|
+
decision?: "approve" | "deny" | undefined;
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
} | {
|
|
14
24
|
output: {
|
|
15
25
|
status: string;
|
|
16
26
|
client_id: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-post.d.ts","sourceRoot":"","sources":["../../../../src/routes/oauth/device/get-post.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"get-post.d.ts","sourceRoot":"","sources":["../../../../src/routes/oauth/device/get-post.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAkBtD,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAwIvB,CAAC"}
|
|
@@ -2,13 +2,19 @@ import { Hono } from 'hono';
|
|
|
2
2
|
import { describeRoute, validator } from 'hono-openapi';
|
|
3
3
|
import { z } from 'zod';
|
|
4
4
|
import { escapeHtml } from '../../../lib/escape-html.js';
|
|
5
|
+
import { securityMutationDocumentation } from '../../../lib/openapi.js';
|
|
5
6
|
import { TAGS } from '../../../lib/swagger-tags.js';
|
|
6
7
|
import { verifyAuth } from '../../../middleware/auth.js';
|
|
7
8
|
import { e } from '../../../schemas/error.js';
|
|
9
|
+
import { withBrowserSecurity } from '../../../services/browser-security.service.js';
|
|
8
10
|
const DeviceVerificationRequestBody = z.object({
|
|
9
11
|
user_code: z.string().min(1).max(64),
|
|
10
12
|
decision: z.enum(['approve', 'deny']).default('approve'),
|
|
11
13
|
});
|
|
14
|
+
function deviceTermsLocation(userCode) {
|
|
15
|
+
const redirect = `/oauth/device?${new URLSearchParams({ user_code: userCode })}`;
|
|
16
|
+
return `/terms?${new URLSearchParams({ redirect })}`;
|
|
17
|
+
}
|
|
12
18
|
export const deviceGetPost = new Hono()
|
|
13
19
|
.get('/device', describeRoute({
|
|
14
20
|
tags: [TAGS.OPENID],
|
|
@@ -16,6 +22,9 @@ export const deviceGetPost = new Hono()
|
|
|
16
22
|
description: 'User-facing OAuth device verification page',
|
|
17
23
|
responses: {
|
|
18
24
|
200: { description: 'Device verification form' },
|
|
25
|
+
303: {
|
|
26
|
+
description: 'Accept required terms and return to this device confirmation',
|
|
27
|
+
},
|
|
19
28
|
},
|
|
20
29
|
}), verifyAuth({ optional: true }), async (c) => {
|
|
21
30
|
const userCode = c.req.query('user_code') ?? '';
|
|
@@ -30,6 +39,8 @@ export const deviceGetPost = new Hono()
|
|
|
30
39
|
const userCodeHash = await securityService.hashOpaqueToken('oauth-device-user-code', userCode.toUpperCase());
|
|
31
40
|
const deviceCode = await mikro.oauthDeviceCode.findPendingByUserCodeHash(userCodeHash);
|
|
32
41
|
if (deviceCode) {
|
|
42
|
+
if ((await c.var.services.termsService.getPendingRequiredTerms(verifiedUser.user.sub)).length > 0)
|
|
43
|
+
return c.redirect(deviceTermsLocation(userCode), 303);
|
|
33
44
|
await mikro.em.populate(deviceCode, ['client']);
|
|
34
45
|
const scopes = deviceCode.scope
|
|
35
46
|
.map((scope) => `<li>${escapeHtml(scope)}</li>`)
|
|
@@ -37,7 +48,10 @@ export const deviceGetPost = new Hono()
|
|
|
37
48
|
deviceDetails = `<section><h2>${escapeHtml(deviceCode.client.name)}</h2><p>Requested scopes:</p><ul>${scopes}</ul></section>`;
|
|
38
49
|
}
|
|
39
50
|
}
|
|
40
|
-
|
|
51
|
+
// Native POST forms use an opaque Origin under no-referrer. Preserve
|
|
52
|
+
// the first-party Origin for CSRF without sending a cross-site referrer.
|
|
53
|
+
c.header('Referrer-Policy', 'same-origin');
|
|
54
|
+
return c.html(`<!doctype html><html><body>${deviceDetails}<form method="post" action="/oauth/device"><input name="user_code" value="${escapeHtml(userCode)}"><button type="submit" name="decision" value="approve">Approve</button><button type="submit" name="decision" value="deny">Deny</button></form></body></html>`);
|
|
41
55
|
})
|
|
42
56
|
.post('/device', describeRoute({
|
|
43
57
|
tags: [TAGS.OPENID],
|
|
@@ -46,11 +60,21 @@ export const deviceGetPost = new Hono()
|
|
|
46
60
|
responses: {
|
|
47
61
|
200: { description: 'Device authorization approved' },
|
|
48
62
|
400: { description: 'Invalid device user code' },
|
|
63
|
+
303: {
|
|
64
|
+
description: 'Accept required terms and return to device approval; the device remains pending',
|
|
65
|
+
},
|
|
49
66
|
},
|
|
50
|
-
}), validator('form', DeviceVerificationRequestBody), verifyAuth(), async (c) => {
|
|
67
|
+
}), validator('form', DeviceVerificationRequestBody), verifyAuth(), securityMutationDocumentation, async (c) => withBrowserSecurity(c, async () => {
|
|
51
68
|
const { decision, user_code: userCode } = c.req.valid('form');
|
|
52
69
|
const { mikro, securityService } = c.var.services;
|
|
53
70
|
const userCodeHash = await securityService.hashOpaqueToken('oauth-device-user-code', userCode.toUpperCase());
|
|
71
|
+
if (decision === 'approve') {
|
|
72
|
+
const pending = await mikro.oauthDeviceCode.findPendingByUserCodeHash(userCodeHash);
|
|
73
|
+
if (!pending)
|
|
74
|
+
throw new e.InvalidDeviceCode.Error();
|
|
75
|
+
if ((await c.var.services.termsService.getPendingRequiredTerms(c.var.verifiedUser.user.sub)).length > 0)
|
|
76
|
+
return c.redirect(deviceTermsLocation(userCode), 303);
|
|
77
|
+
}
|
|
54
78
|
const now = new Date();
|
|
55
79
|
const deviceCode = decision === 'deny'
|
|
56
80
|
? await mikro.oauthDeviceCode.denyPendingByUserCodeHash({
|
|
@@ -61,6 +85,7 @@ export const deviceGetPost = new Hono()
|
|
|
61
85
|
userCodeHash,
|
|
62
86
|
userSub: c.var.verifiedUser.user.sub,
|
|
63
87
|
approvedAt: now,
|
|
88
|
+
userEpoch: c.var.session.authorization.security?.grants[c.var.verifiedUser.user.sub] ?? '',
|
|
64
89
|
});
|
|
65
90
|
if (!deviceCode) {
|
|
66
91
|
throw new e.InvalidDeviceCode.Error();
|
|
@@ -69,5 +94,9 @@ export const deviceGetPost = new Hono()
|
|
|
69
94
|
status: decision === 'deny' ? 'denied' : 'approved',
|
|
70
95
|
client_id: deviceCode.client.clientId,
|
|
71
96
|
});
|
|
72
|
-
}
|
|
97
|
+
}, {
|
|
98
|
+
...(c.req.valid('form').decision === 'approve' && {
|
|
99
|
+
termsPolicy: 'read',
|
|
100
|
+
}),
|
|
101
|
+
}));
|
|
73
102
|
//# sourceMappingURL=get-post.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-post.js","sourceRoot":"","sources":["../../../../src/routes/oauth/device/get-post.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,IAAI,EAAE,MAAM,8BAA8B,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,CAAC,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"get-post.js","sourceRoot":"","sources":["../../../../src/routes/oauth/device/get-post.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"post.d.ts","sourceRoot":"","sources":["../../../../src/routes/oauth/device-authorization/post.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"post.d.ts","sourceRoot":"","sources":["../../../../src/routes/oauth/device-authorization/post.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AA2BtD,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;gCAuGnC,CAAC"}
|
|
@@ -50,8 +50,9 @@ export const deviceAuthorizationPost = new Hono().post('/device_authorization',
|
|
|
50
50
|
oauthClientService.validateEnabled(client);
|
|
51
51
|
oauthClientService.validateGrantType(client, DEVICE_CODE_GRANT_TYPE);
|
|
52
52
|
const clientSecret = basicCredentials?.clientSecret ?? body.client_secret;
|
|
53
|
+
let authentication;
|
|
53
54
|
try {
|
|
54
|
-
await oauthClientService.validateClientSecretIfRequired(clientId, clientSecret);
|
|
55
|
+
authentication = await oauthClientService.validateClientSecretIfRequired(clientId, clientSecret);
|
|
55
56
|
}
|
|
56
57
|
catch (err) {
|
|
57
58
|
if (authorizationHeader) {
|
|
@@ -65,12 +66,17 @@ export const deviceAuthorizationPost = new Hono().post('/device_authorization',
|
|
|
65
66
|
const userCode = createUserCode();
|
|
66
67
|
const deviceCodeHash = await securityService.hashOpaqueToken('oauth-device-code', deviceCode);
|
|
67
68
|
const userCodeHash = await securityService.hashOpaqueToken('oauth-device-user-code', userCode);
|
|
68
|
-
await mikro.
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
69
|
+
await mikro.em.transactional(async () => {
|
|
70
|
+
const current = await oauthClientService.lockAuthenticatedClient(authentication, clientId, DEVICE_CODE_GRANT_TYPE);
|
|
71
|
+
oauthClientService.validateScopes(current, requestedScopes);
|
|
72
|
+
await mikro.oauthDeviceCode.createDeviceAuthorization({
|
|
73
|
+
clientId: client.id,
|
|
74
|
+
clientEpoch: authentication.epoch,
|
|
75
|
+
deviceCodeHash,
|
|
76
|
+
userCodeHash,
|
|
77
|
+
scope: requestedScopes,
|
|
78
|
+
expiresInSeconds: DEVICE_CODE_EXPIRES_IN,
|
|
79
|
+
});
|
|
74
80
|
});
|
|
75
81
|
const verificationUri = `${config.server.public_origin}/oauth/device`;
|
|
76
82
|
const verificationUriComplete = new URL(verificationUri);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"post.js","sourceRoot":"","sources":["../../../../src/routes/oauth/device-authorization/post.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,EAAE,IAAI,EAAE,MAAM,8BAA8B,CAAC;AACpD,OAAO,EAAE,CAAC,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"post.js","sourceRoot":"","sources":["../../../../src/routes/oauth/device-authorization/post.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../../src/routes/oauth/end-session/get.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../../src/routes/oauth/end-session/get.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAItD,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uBA+GzB,CAAC"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { Hono } from 'hono';
|
|
2
|
-
import { deleteCookie } from 'hono/cookie';
|
|
3
2
|
import { describeRoute, resolver, validator } from 'hono-openapi';
|
|
4
3
|
import { z } from 'zod';
|
|
5
4
|
import { TAGS } from '../../../lib/swagger-tags.js';
|
|
@@ -28,7 +27,7 @@ export const endSessionGet = new Hono().get('/end_session', describeRoute({
|
|
|
28
27
|
const query = c.req.valid('query');
|
|
29
28
|
const { config, jwtService, oauthClientService } = c.var.services;
|
|
30
29
|
if (!query.post_logout_redirect_uri) {
|
|
31
|
-
|
|
30
|
+
c.var.session.delete();
|
|
32
31
|
return c.redirect(config.server.public_origin);
|
|
33
32
|
}
|
|
34
33
|
let clientId = query.client_id;
|
|
@@ -77,7 +76,7 @@ export const endSessionGet = new Hono().get('/end_session', describeRoute({
|
|
|
77
76
|
if (query.state) {
|
|
78
77
|
redirectUrl.searchParams.set('state', query.state);
|
|
79
78
|
}
|
|
80
|
-
|
|
79
|
+
c.var.session.delete();
|
|
81
80
|
return c.redirect(redirectUrl.toString());
|
|
82
81
|
});
|
|
83
82
|
//# sourceMappingURL=get.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get.js","sourceRoot":"","sources":["../../../../src/routes/oauth/end-session/get.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"get.js","sourceRoot":"","sources":["../../../../src/routes/oauth/end-session/get.ts"],"names":[],"mappings":"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"}
|
|
@@ -222,6 +222,16 @@ export declare const oauthApplicationRoutes: import("hono/hono-base").HonoBase<A
|
|
|
222
222
|
} & {
|
|
223
223
|
"/device": {
|
|
224
224
|
$post: {
|
|
225
|
+
output: undefined;
|
|
226
|
+
outputFormat: "redirect";
|
|
227
|
+
status: 303;
|
|
228
|
+
input: {
|
|
229
|
+
form: {
|
|
230
|
+
user_code: import("hono/types").ParsedFormValue[] | import("hono/types").ParsedFormValue;
|
|
231
|
+
decision?: "approve" | "deny" | undefined;
|
|
232
|
+
};
|
|
233
|
+
};
|
|
234
|
+
} | {
|
|
225
235
|
output: {
|
|
226
236
|
status: string;
|
|
227
237
|
client_id: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/routes/oauth/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAanD,eAAO,MAAM,sBAAsB
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/routes/oauth/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAanD,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAWP,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"post.d.ts","sourceRoot":"","sources":["../../../../src/routes/oauth/revoke/post.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"post.d.ts","sourceRoot":"","sources":["../../../../src/routes/oauth/revoke/post.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAqBtD;;GAEG;AACH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;kBAsHtB,CAAC"}
|
|
@@ -87,8 +87,9 @@ export const revokePost = new Hono().post('/revoke', describeRoute({
|
|
|
87
87
|
throw new e.OAuthClientDisabled.Error();
|
|
88
88
|
}
|
|
89
89
|
const clientSecret = basicCredentials?.clientSecret ?? body.client_secret;
|
|
90
|
+
let authentication;
|
|
90
91
|
try {
|
|
91
|
-
await oauthClientService.validateClientSecretIfRequired(clientId, clientSecret);
|
|
92
|
+
authentication = await oauthClientService.validateClientSecretIfRequired(clientId, clientSecret);
|
|
92
93
|
}
|
|
93
94
|
catch (err) {
|
|
94
95
|
if (authorizationHeader) {
|
|
@@ -96,7 +97,14 @@ export const revokePost = new Hono().post('/revoke', describeRoute({
|
|
|
96
97
|
}
|
|
97
98
|
throw err;
|
|
98
99
|
}
|
|
99
|
-
|
|
100
|
+
try {
|
|
101
|
+
await oauthTokenService.revokeToken(body.token, body.token_type_hint, clientId, authentication);
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
if (authorizationHeader)
|
|
105
|
+
setBasicClientAuthChallengeIfInvalidClientCredentials(c, error);
|
|
106
|
+
throw error;
|
|
107
|
+
}
|
|
100
108
|
c.header('Cache-Control', 'no-store');
|
|
101
109
|
c.header('Pragma', 'no-cache');
|
|
102
110
|
return c.json({}, 200);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"post.js","sourceRoot":"","sources":["../../../../src/routes/oauth/revoke/post.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,IAAI,EAAE,MAAM,8BAA8B,CAAC;AACpD,OAAO,EAAE,CAAC,EAAE,MAAM,2BAA2B,CAAC;AAC9C,OAAO,EAAE,CAAC,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"post.js","sourceRoot":"","sources":["../../../../src/routes/oauth/revoke/post.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"post.d.ts","sourceRoot":"","sources":["../../../../src/routes/oauth/token/post.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"post.d.ts","sourceRoot":"","sources":["../../../../src/routes/oauth/token/post.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAkCtD,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA4LrB,CAAC"}
|
|
@@ -52,7 +52,7 @@ export const tokenPost = new Hono().post('/token', describeRoute({
|
|
|
52
52
|
])),
|
|
53
53
|
},
|
|
54
54
|
},
|
|
55
|
-
description: 'Bad request, unsupported grant type, missing parameters, or
|
|
55
|
+
description: 'Bad request, unsupported grant type, missing parameters, disabled client, or a code/device grant invalidated by a client generation change',
|
|
56
56
|
},
|
|
57
57
|
401: {
|
|
58
58
|
content: {
|
|
@@ -91,8 +91,9 @@ export const tokenPost = new Hono().post('/token', describeRoute({
|
|
|
91
91
|
}
|
|
92
92
|
// 2. Confidential clients must authenticate; public clients must not.
|
|
93
93
|
const clientSecret = basicCredentials?.clientSecret ?? body.client_secret;
|
|
94
|
+
let authentication;
|
|
94
95
|
try {
|
|
95
|
-
await oauthClientService.validateClientSecretIfRequired(clientId, clientSecret);
|
|
96
|
+
authentication = await oauthClientService.validateClientSecretIfRequired(clientId, clientSecret);
|
|
96
97
|
}
|
|
97
98
|
catch (err) {
|
|
98
99
|
if (authorizationHeader) {
|
|
@@ -105,67 +106,78 @@ export const tokenPost = new Hono().post('/token', describeRoute({
|
|
|
105
106
|
throw new e.InvalidAuthorizationRequest.Error();
|
|
106
107
|
}
|
|
107
108
|
oauthClientService.validateGrantType(client, grantType);
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
if (
|
|
111
|
-
|
|
109
|
+
try {
|
|
110
|
+
// 3. Handle grant type
|
|
111
|
+
if (grantType === 'authorization_code') {
|
|
112
|
+
if (!body.code) {
|
|
113
|
+
throw new e.MissingAuthorizationCode.Error();
|
|
114
|
+
}
|
|
115
|
+
if (!body.redirect_uri) {
|
|
116
|
+
throw new e.MissingRedirectUri.Error();
|
|
117
|
+
}
|
|
118
|
+
const tokens = await oauthTokenService.exchangeAuthorizationCode({
|
|
119
|
+
authentication,
|
|
120
|
+
code: body.code,
|
|
121
|
+
redirectUri: body.redirect_uri,
|
|
122
|
+
clientId,
|
|
123
|
+
codeVerifier: body.code_verifier ?? undefined,
|
|
124
|
+
});
|
|
125
|
+
c.header('Cache-Control', 'no-store');
|
|
126
|
+
c.header('Pragma', 'no-cache');
|
|
127
|
+
return c.json(tokens, 200);
|
|
112
128
|
}
|
|
113
|
-
if (
|
|
114
|
-
|
|
129
|
+
if (grantType === 'refresh_token') {
|
|
130
|
+
if (!body.refresh_token) {
|
|
131
|
+
throw new e.MissingRefreshToken.Error();
|
|
132
|
+
}
|
|
133
|
+
const tokens = await oauthTokenService.refreshAccessToken({
|
|
134
|
+
authentication,
|
|
135
|
+
refreshToken: body.refresh_token,
|
|
136
|
+
clientId,
|
|
137
|
+
scope: body.scope ? body.scope.split(' ') : undefined,
|
|
138
|
+
});
|
|
139
|
+
c.header('Cache-Control', 'no-store');
|
|
140
|
+
c.header('Pragma', 'no-cache');
|
|
141
|
+
return c.json(tokens, 200);
|
|
115
142
|
}
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
143
|
+
if (grantType === 'client_credentials') {
|
|
144
|
+
await oauthClientService.validateConfidentialClient(clientId);
|
|
145
|
+
const requestedScopes = body.scope ? body.scope.split(' ') : [];
|
|
146
|
+
const endUserScopes = requestedScopes.filter((scope) => END_USER_SCOPES_FOR_CLIENT_CREDENTIALS.has(scope));
|
|
147
|
+
if (endUserScopes.length > 0) {
|
|
148
|
+
throw new e.InvalidScope.Error({
|
|
149
|
+
invalidScopes: endUserScopes,
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
oauthClientService.validateScopes(client, requestedScopes);
|
|
153
|
+
const tokens = await oauthTokenService.issueClientCredentialsToken({
|
|
154
|
+
authentication,
|
|
155
|
+
clientId,
|
|
156
|
+
scope: requestedScopes,
|
|
157
|
+
});
|
|
158
|
+
c.header('Cache-Control', 'no-store');
|
|
159
|
+
c.header('Pragma', 'no-cache');
|
|
160
|
+
return c.json(tokens, 200);
|
|
129
161
|
}
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
}
|
|
139
|
-
if (grantType === 'client_credentials') {
|
|
140
|
-
await oauthClientService.validateConfidentialClient(clientId);
|
|
141
|
-
const requestedScopes = body.scope ? body.scope.split(' ') : [];
|
|
142
|
-
const endUserScopes = requestedScopes.filter((scope) => END_USER_SCOPES_FOR_CLIENT_CREDENTIALS.has(scope));
|
|
143
|
-
if (endUserScopes.length > 0) {
|
|
144
|
-
throw new e.InvalidScope.Error({
|
|
145
|
-
invalidScopes: endUserScopes,
|
|
162
|
+
if (grantType === 'urn:ietf:params:oauth:grant-type:device_code') {
|
|
163
|
+
if (!body.device_code) {
|
|
164
|
+
throw new e.MissingDeviceCode.Error();
|
|
165
|
+
}
|
|
166
|
+
const tokens = await oauthTokenService.exchangeDeviceCode({
|
|
167
|
+
authentication,
|
|
168
|
+
deviceCode: body.device_code,
|
|
169
|
+
clientId,
|
|
146
170
|
});
|
|
171
|
+
c.header('Cache-Control', 'no-store');
|
|
172
|
+
c.header('Pragma', 'no-cache');
|
|
173
|
+
return c.json(tokens, 200);
|
|
147
174
|
}
|
|
148
|
-
|
|
149
|
-
const tokens = await oauthTokenService.issueClientCredentialsToken({
|
|
150
|
-
clientId,
|
|
151
|
-
scope: requestedScopes,
|
|
152
|
-
});
|
|
153
|
-
c.header('Cache-Control', 'no-store');
|
|
154
|
-
c.header('Pragma', 'no-cache');
|
|
155
|
-
return c.json(tokens, 200);
|
|
175
|
+
throw new e.UnsupportedGrantType.Error();
|
|
156
176
|
}
|
|
157
|
-
|
|
158
|
-
if (
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
const tokens = await oauthTokenService.exchangeDeviceCode({
|
|
162
|
-
deviceCode: body.device_code,
|
|
163
|
-
clientId,
|
|
164
|
-
});
|
|
165
|
-
c.header('Cache-Control', 'no-store');
|
|
166
|
-
c.header('Pragma', 'no-cache');
|
|
167
|
-
return c.json(tokens, 200);
|
|
177
|
+
catch (error) {
|
|
178
|
+
if (authorizationHeader)
|
|
179
|
+
setBasicClientAuthChallengeIfInvalidClientCredentials(c, error);
|
|
180
|
+
throw error;
|
|
168
181
|
}
|
|
169
|
-
throw new e.UnsupportedGrantType.Error();
|
|
170
182
|
});
|
|
171
183
|
//# sourceMappingURL=post.js.map
|