@authup/server-core 1.0.0-beta.57 → 1.0.0-beta.59
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/adapters/database/logger/module.mjs +2 -4
- package/dist/adapters/database/logger/module.mjs.map +1 -1
- package/dist/adapters/http/controllers/entities/identity-provider/module.d.ts.map +1 -1
- package/dist/adapters/http/controllers/entities/identity-provider/module.mjs +1 -1
- package/dist/adapters/http/controllers/entities/identity-provider/module.mjs.map +1 -1
- package/dist/adapters/http/controllers/index.mjs +2 -1
- package/dist/adapters/http/controllers/workflows/account/index.d.ts +2 -0
- package/dist/adapters/http/controllers/workflows/account/index.d.ts.map +1 -0
- package/dist/adapters/http/controllers/workflows/account/index.mjs +5 -0
- package/dist/adapters/http/controllers/workflows/account/module.d.ts +24 -0
- package/dist/adapters/http/controllers/workflows/account/module.d.ts.map +1 -0
- package/dist/adapters/http/controllers/workflows/account/module.mjs +63 -0
- package/dist/adapters/http/controllers/workflows/account/module.mjs.map +1 -0
- package/dist/adapters/http/controllers/workflows/activate/module.mjs +1 -1
- package/dist/adapters/http/controllers/workflows/authorize/module.mjs +2 -2
- package/dist/adapters/http/controllers/workflows/authorize/module.mjs.map +1 -1
- package/dist/adapters/http/controllers/workflows/index.d.ts +1 -0
- package/dist/adapters/http/controllers/workflows/index.d.ts.map +1 -1
- package/dist/adapters/http/controllers/workflows/index.mjs +3 -1
- package/dist/adapters/http/controllers/workflows/logout/module.mjs +2 -2
- package/dist/adapters/http/controllers/workflows/logout/module.mjs.map +1 -1
- package/dist/adapters/http/controllers/workflows/password-forgot/module.mjs +1 -1
- package/dist/adapters/http/controllers/workflows/password-reset/module.mjs +1 -1
- package/dist/adapters/http/controllers/workflows/register/module.mjs +1 -1
- package/dist/adapters/http/controllers/workflows/userinfo/module.d.ts.map +1 -1
- package/dist/adapters/http/controllers/workflows/userinfo/module.mjs +5 -1
- package/dist/adapters/http/controllers/workflows/userinfo/module.mjs.map +1 -1
- package/dist/adapters/http/index.mjs +3 -1
- package/dist/adapters/http/middleware/built-in/assets.d.ts +8 -1
- package/dist/adapters/http/middleware/built-in/assets.d.ts.map +1 -1
- package/dist/adapters/http/middleware/built-in/assets.mjs +48 -4
- package/dist/adapters/http/middleware/built-in/assets.mjs.map +1 -1
- package/dist/adapters/http/middleware/built-in/authorization/module.mjs +2 -1
- package/dist/adapters/http/middleware/built-in/authorization/module.mjs.map +1 -1
- package/dist/adapters/http/middleware/built-in/index.d.ts +2 -0
- package/dist/adapters/http/middleware/built-in/index.d.ts.map +1 -1
- package/dist/adapters/http/middleware/built-in/index.mjs +2 -1
- package/dist/adapters/http/middleware/built-in/rate-limit.mjs +2 -2
- package/dist/adapters/http/middleware/built-in/rate-limit.mjs.map +1 -1
- package/dist/adapters/http/middleware/built-in/theme.d.ts +15 -0
- package/dist/adapters/http/middleware/built-in/theme.d.ts.map +1 -0
- package/dist/adapters/http/middleware/built-in/theme.mjs +27 -0
- package/dist/adapters/http/middleware/built-in/theme.mjs.map +1 -0
- package/dist/adapters/http/middleware/built-in/types.d.ts +14 -0
- package/dist/adapters/http/middleware/built-in/types.d.ts.map +1 -0
- package/dist/adapters/http/middleware/built-in/ui-http-client.d.ts +1 -1
- package/dist/adapters/http/middleware/built-in/ui-http-client.mjs +1 -1
- package/dist/adapters/http/middleware/built-in/ui-http-client.mjs.map +1 -1
- package/dist/adapters/http/middleware/index.mjs +2 -1
- package/dist/adapters/http/request/client-certificate.mjs +1 -1
- package/dist/adapters/http/request/client-certificate.mjs.map +1 -1
- package/dist/adapters/http/request/helpers/locations.mjs +1 -3
- package/dist/adapters/http/request/helpers/locations.mjs.map +1 -1
- package/dist/adapters/http/ui/account-console/index.d.ts +4 -0
- package/dist/adapters/http/ui/account-console/index.d.ts.map +1 -0
- package/dist/adapters/http/ui/account-console/index.mjs +6 -0
- package/dist/adapters/http/ui/account-console/module.d.ts +28 -0
- package/dist/adapters/http/ui/account-console/module.d.ts.map +1 -0
- package/dist/adapters/http/ui/account-console/module.mjs +80 -0
- package/dist/adapters/http/ui/account-console/module.mjs.map +1 -0
- package/dist/adapters/http/ui/account-console/ref.d.ts +30 -0
- package/dist/adapters/http/ui/account-console/ref.d.ts.map +1 -0
- package/dist/adapters/http/ui/account-console/ref.mjs +50 -0
- package/dist/adapters/http/ui/account-console/ref.mjs.map +1 -0
- package/dist/adapters/http/ui/account-console/types.d.ts +11 -0
- package/dist/adapters/http/ui/account-console/types.d.ts.map +1 -0
- package/dist/adapters/http/ui/account-console/types.mjs +4 -0
- package/dist/adapters/http/ui/{internal-http-client.d.ts → auth-console/http-client.d.ts} +1 -1
- package/dist/adapters/http/ui/auth-console/http-client.d.ts.map +1 -0
- package/dist/adapters/http/ui/{internal-http-client.mjs → auth-console/http-client.mjs} +2 -2
- package/dist/adapters/http/ui/auth-console/http-client.mjs.map +1 -0
- package/dist/adapters/http/ui/auth-console/index.d.ts +6 -0
- package/dist/adapters/http/ui/auth-console/index.d.ts.map +1 -0
- package/dist/adapters/http/ui/auth-console/index.mjs +8 -0
- package/dist/adapters/http/ui/auth-console/module.d.ts +4 -0
- package/dist/adapters/http/ui/auth-console/module.d.ts.map +1 -0
- package/dist/adapters/http/ui/auth-console/module.mjs +73 -0
- package/dist/adapters/http/ui/auth-console/module.mjs.map +1 -0
- package/dist/adapters/http/ui/auth-console/resolve.d.ts +21 -0
- package/dist/adapters/http/ui/auth-console/resolve.d.ts.map +1 -0
- package/dist/adapters/http/ui/auth-console/resolve.mjs +53 -0
- package/dist/adapters/http/ui/auth-console/resolve.mjs.map +1 -0
- package/dist/adapters/http/ui/{serve.d.ts → auth-console/serve.d.ts} +1 -8
- package/dist/adapters/http/ui/auth-console/serve.d.ts.map +1 -0
- package/dist/adapters/http/ui/{serve.mjs → auth-console/serve.mjs} +5 -5
- package/dist/adapters/http/ui/auth-console/serve.mjs.map +1 -0
- package/dist/adapters/http/ui/auth-console/types.d.ts +26 -0
- package/dist/adapters/http/ui/auth-console/types.d.ts.map +1 -0
- package/dist/adapters/http/ui/auth-console/types.mjs +4 -0
- package/dist/adapters/http/ui/console-packages/index.d.ts +3 -0
- package/dist/adapters/http/ui/console-packages/index.d.ts.map +1 -0
- package/dist/adapters/http/ui/console-packages/index.mjs +5 -0
- package/dist/adapters/http/ui/console-packages/module.d.ts +33 -0
- package/dist/adapters/http/ui/console-packages/module.d.ts.map +1 -0
- package/dist/adapters/http/ui/console-packages/module.mjs +70 -0
- package/dist/adapters/http/ui/console-packages/module.mjs.map +1 -0
- package/dist/adapters/http/ui/console-packages/types.d.ts +12 -0
- package/dist/adapters/http/ui/console-packages/types.d.ts.map +1 -0
- package/dist/adapters/http/ui/console-packages/types.mjs +4 -0
- package/dist/adapters/http/ui/index.d.ts +5 -5
- package/dist/adapters/http/ui/index.d.ts.map +1 -1
- package/dist/adapters/http/ui/index.mjs +22 -5
- package/dist/adapters/http/ui/shared/html.d.ts +76 -0
- package/dist/adapters/http/ui/shared/html.d.ts.map +1 -0
- package/dist/adapters/http/ui/shared/html.mjs +103 -0
- package/dist/adapters/http/ui/shared/html.mjs.map +1 -0
- package/dist/adapters/http/ui/shared/index.d.ts +2 -0
- package/dist/adapters/http/ui/shared/index.d.ts.map +1 -0
- package/dist/adapters/http/ui/shared/index.mjs +5 -0
- package/dist/adapters/http/ui/theme/apply.d.ts +12 -0
- package/dist/adapters/http/ui/theme/apply.d.ts.map +1 -0
- package/dist/adapters/http/ui/theme/apply.mjs +29 -0
- package/dist/adapters/http/ui/theme/apply.mjs.map +1 -0
- package/dist/adapters/http/ui/theme/assets.d.ts +20 -0
- package/dist/adapters/http/ui/theme/assets.d.ts.map +1 -0
- package/dist/adapters/http/ui/theme/assets.mjs +86 -0
- package/dist/adapters/http/ui/theme/assets.mjs.map +1 -0
- package/dist/adapters/http/ui/theme/constants.d.ts +16 -0
- package/dist/adapters/http/ui/theme/constants.d.ts.map +1 -0
- package/dist/adapters/http/ui/theme/constants.mjs +20 -0
- package/dist/adapters/http/ui/theme/constants.mjs.map +1 -0
- package/dist/adapters/http/ui/theme/contract/constants.d.ts +120 -0
- package/dist/adapters/http/ui/theme/contract/constants.d.ts.map +1 -0
- package/dist/adapters/http/ui/theme/contract/constants.mjs +136 -0
- package/dist/adapters/http/ui/theme/contract/constants.mjs.map +1 -0
- package/dist/adapters/http/ui/theme/contract/head.d.ts +12 -0
- package/dist/adapters/http/ui/theme/contract/head.d.ts.map +1 -0
- package/dist/adapters/http/ui/theme/contract/head.mjs +61 -0
- package/dist/adapters/http/ui/theme/contract/head.mjs.map +1 -0
- package/dist/adapters/http/ui/theme/contract/index.d.ts +6 -0
- package/dist/adapters/http/ui/theme/contract/index.d.ts.map +1 -0
- package/dist/adapters/http/ui/theme/contract/index.mjs +8 -0
- package/dist/adapters/http/ui/theme/contract/manifest.d.ts +25 -0
- package/dist/adapters/http/ui/theme/contract/manifest.d.ts.map +1 -0
- package/dist/adapters/http/ui/theme/contract/manifest.mjs +77 -0
- package/dist/adapters/http/ui/theme/contract/manifest.mjs.map +1 -0
- package/dist/adapters/http/ui/theme/contract/types.d.ts +26 -0
- package/dist/adapters/http/ui/theme/contract/types.d.ts.map +1 -0
- package/dist/adapters/http/ui/theme/contract/types.mjs +4 -0
- package/dist/adapters/http/ui/theme/contract/utils.d.ts +11 -0
- package/dist/adapters/http/ui/theme/contract/utils.d.ts.map +1 -0
- package/dist/adapters/http/ui/theme/contract/utils.mjs +22 -0
- package/dist/adapters/http/ui/theme/contract/utils.mjs.map +1 -0
- package/dist/adapters/http/ui/theme/index.d.ts +7 -0
- package/dist/adapters/http/ui/theme/index.d.ts.map +1 -0
- package/dist/adapters/http/ui/theme/index.mjs +13 -0
- package/dist/adapters/http/ui/theme/module.d.ts +79 -0
- package/dist/adapters/http/ui/theme/module.d.ts.map +1 -0
- package/dist/adapters/http/ui/theme/module.mjs +206 -0
- package/dist/adapters/http/ui/theme/module.mjs.map +1 -0
- package/dist/adapters/http/ui/theme/types.d.ts +42 -0
- package/dist/adapters/http/ui/theme/types.d.ts.map +1 -0
- package/dist/adapters/http/ui/theme/types.mjs +4 -0
- package/dist/app/index.mjs +3 -1
- package/dist/app/modules/authentication/module.mjs +6 -3
- package/dist/app/modules/authentication/module.mjs.map +1 -1
- package/dist/app/modules/config/constants.d.ts +5 -0
- package/dist/app/modules/config/constants.d.ts.map +1 -1
- package/dist/app/modules/config/constants.mjs +5 -0
- package/dist/app/modules/config/constants.mjs.map +1 -1
- package/dist/app/modules/config/helpers.mjs +3 -2
- package/dist/app/modules/config/helpers.mjs.map +1 -1
- package/dist/app/modules/config/normalize.d.ts.map +1 -1
- package/dist/app/modules/config/normalize.mjs +8 -0
- package/dist/app/modules/config/normalize.mjs.map +1 -1
- package/dist/app/modules/config/origins.d.ts.map +1 -1
- package/dist/app/modules/config/origins.mjs +2 -0
- package/dist/app/modules/config/origins.mjs.map +1 -1
- package/dist/app/modules/config/read/env.d.ts.map +1 -1
- package/dist/app/modules/config/read/env.mjs +10 -0
- package/dist/app/modules/config/read/env.mjs.map +1 -1
- package/dist/app/modules/config/read/module.mjs +8 -3
- package/dist/app/modules/config/read/module.mjs.map +1 -1
- package/dist/app/modules/config/types.d.ts +63 -3
- package/dist/app/modules/config/types.d.ts.map +1 -1
- package/dist/app/modules/config/validator.d.ts.map +1 -1
- package/dist/app/modules/config/validator.mjs +5 -0
- package/dist/app/modules/config/validator.mjs.map +1 -1
- package/dist/app/modules/database/module.mjs +2 -1
- package/dist/app/modules/database/module.mjs.map +1 -1
- package/dist/app/modules/http/module.d.ts.map +1 -1
- package/dist/app/modules/http/module.mjs +7 -1
- package/dist/app/modules/http/module.mjs.map +1 -1
- package/dist/app/modules/http/modules/controller.d.ts +2 -1
- package/dist/app/modules/http/modules/controller.d.ts.map +1 -1
- package/dist/app/modules/http/modules/controller.mjs +214 -128
- package/dist/app/modules/http/modules/controller.mjs.map +1 -1
- package/dist/app/modules/http/modules/middleware.d.ts +9 -1
- package/dist/app/modules/http/modules/middleware.d.ts.map +1 -1
- package/dist/app/modules/http/modules/middleware.mjs +28 -8
- package/dist/app/modules/http/modules/middleware.mjs.map +1 -1
- package/dist/app/modules/identity/module.mjs +6 -3
- package/dist/app/modules/identity/module.mjs.map +1 -1
- package/dist/app/modules/index.mjs +3 -1
- package/dist/app/modules/oauth2/module.mjs +37 -17
- package/dist/app/modules/oauth2/module.mjs.map +1 -1
- package/dist/app/modules/oauth2/repositories/authorize/state/repository.mjs +1 -1
- package/dist/app/modules/oauth2/repositories/authorize/state/repository.mjs.map +1 -1
- package/dist/app/modules/oauth2/repositories/token/repository.mjs +1 -1
- package/dist/app/modules/oauth2/repositories/token/repository.mjs.map +1 -1
- package/dist/app/modules/provisioning/constants.d.ts +12 -0
- package/dist/app/modules/provisioning/constants.d.ts.map +1 -0
- package/dist/app/modules/provisioning/constants.mjs +16 -0
- package/dist/app/modules/provisioning/constants.mjs.map +1 -0
- package/dist/app/modules/provisioning/index.d.ts +2 -0
- package/dist/app/modules/provisioning/index.d.ts.map +1 -1
- package/dist/app/modules/provisioning/index.mjs +3 -1
- package/dist/app/modules/provisioning/lazy-wildcard.d.ts +15 -0
- package/dist/app/modules/provisioning/lazy-wildcard.d.ts.map +1 -0
- package/dist/app/modules/provisioning/lazy-wildcard.mjs +23 -0
- package/dist/app/modules/provisioning/lazy-wildcard.mjs.map +1 -0
- package/dist/app/modules/provisioning/module.d.ts.map +1 -1
- package/dist/app/modules/provisioning/module.mjs +30 -11
- package/dist/app/modules/provisioning/module.mjs.map +1 -1
- package/dist/app/modules/provisioning/sources/composite/module.d.ts +0 -19
- package/dist/app/modules/provisioning/sources/composite/module.d.ts.map +1 -1
- package/dist/app/modules/provisioning/sources/composite/module.mjs +7 -77
- package/dist/app/modules/provisioning/sources/composite/module.mjs.map +1 -1
- package/dist/app/modules/provisioning/sources/file/module.d.ts.map +1 -1
- package/dist/app/modules/provisioning/sources/file/module.mjs +11 -2
- package/dist/app/modules/provisioning/sources/file/module.mjs.map +1 -1
- package/dist/core/authentication/session/module.mjs +2 -4
- package/dist/core/authentication/session/module.mjs.map +1 -1
- package/dist/core/entities/client/index.d.ts +1 -1
- package/dist/core/entities/client/index.d.ts.map +1 -1
- package/dist/core/entities/client/index.mjs +2 -2
- package/dist/core/entities/client/service.d.ts.map +1 -1
- package/dist/core/entities/client/service.mjs +1 -1
- package/dist/core/entities/client/service.mjs.map +1 -1
- package/dist/core/entities/client/system-clients.d.ts +95 -0
- package/dist/core/entities/client/system-clients.d.ts.map +1 -0
- package/dist/core/entities/client/system-clients.mjs +158 -0
- package/dist/core/entities/client/system-clients.mjs.map +1 -0
- package/dist/core/entities/client/types.d.ts +17 -4
- package/dist/core/entities/client/types.d.ts.map +1 -1
- package/dist/core/entities/client-permission/service.mjs +12 -9
- package/dist/core/entities/client-permission/service.mjs.map +1 -1
- package/dist/core/entities/index.mjs +2 -2
- package/dist/core/entities/key/service.mjs +4 -2
- package/dist/core/entities/key/service.mjs.map +1 -1
- package/dist/core/entities/permission/service.d.ts.map +1 -1
- package/dist/core/entities/permission/service.mjs +1 -1
- package/dist/core/entities/permission/service.mjs.map +1 -1
- package/dist/core/entities/policy/service.d.ts.map +1 -1
- package/dist/core/entities/policy/service.mjs +3 -2
- package/dist/core/entities/policy/service.mjs.map +1 -1
- package/dist/core/entities/realm/service.d.ts +8 -6
- package/dist/core/entities/realm/service.d.ts.map +1 -1
- package/dist/core/entities/realm/service.mjs +6 -9
- package/dist/core/entities/realm/service.mjs.map +1 -1
- package/dist/core/entities/role/service.d.ts.map +1 -1
- package/dist/core/entities/role/service.mjs +1 -1
- package/dist/core/entities/role/service.mjs.map +1 -1
- package/dist/core/entities/role-permission/service.mjs +12 -9
- package/dist/core/entities/role-permission/service.mjs.map +1 -1
- package/dist/core/entities/scope/service.d.ts.map +1 -1
- package/dist/core/entities/scope/service.mjs +1 -1
- package/dist/core/entities/scope/service.mjs.map +1 -1
- package/dist/core/entities/user/service.d.ts.map +1 -1
- package/dist/core/entities/user/service.mjs +1 -1
- package/dist/core/entities/user/service.mjs.map +1 -1
- package/dist/core/entities/user-authenticator/helpers.mjs +1 -1
- package/dist/core/entities/user-authenticator/helpers.mjs.map +1 -1
- package/dist/core/entities/user-authenticator/service.mjs +7 -7
- package/dist/core/entities/user-authenticator/service.mjs.map +1 -1
- package/dist/core/entities/user-permission/service.mjs +12 -9
- package/dist/core/entities/user-permission/service.mjs.map +1 -1
- package/dist/core/identity/password-recovery/service.mjs +1 -1
- package/dist/core/identity/password-recovery/service.mjs.map +1 -1
- package/dist/core/index.mjs +6 -2
- package/dist/core/key/types.d.ts +2 -1
- package/dist/core/key/types.d.ts.map +1 -1
- package/dist/core/oauth2/authorization/code-request/verifier/module.d.ts.map +1 -1
- package/dist/core/oauth2/authorization/code-request/verifier/module.mjs +2 -2
- package/dist/core/oauth2/authorization/code-request/verifier/module.mjs.map +1 -1
- package/dist/core/oauth2/end-session/service.d.ts.map +1 -1
- package/dist/core/oauth2/end-session/service.mjs +2 -2
- package/dist/core/oauth2/end-session/service.mjs.map +1 -1
- package/dist/core/provisioning/constants.d.ts +8 -0
- package/dist/core/provisioning/constants.d.ts.map +1 -0
- package/dist/core/provisioning/constants.mjs +14 -0
- package/dist/core/provisioning/constants.mjs.map +1 -0
- package/dist/core/provisioning/entities/index.mjs +2 -1
- package/dist/core/provisioning/entities/realm/index.d.ts +1 -0
- package/dist/core/provisioning/entities/realm/index.d.ts.map +1 -1
- package/dist/core/provisioning/entities/realm/index.mjs +2 -1
- package/dist/core/provisioning/entities/realm/validator.d.ts +11 -0
- package/dist/core/provisioning/entities/realm/validator.d.ts.map +1 -1
- package/dist/core/provisioning/entities/realm/validator.mjs +14 -0
- package/dist/core/provisioning/entities/realm/validator.mjs.map +1 -1
- package/dist/core/provisioning/entities/realm/wildcard-validator.d.ts +19 -0
- package/dist/core/provisioning/entities/realm/wildcard-validator.d.ts.map +1 -0
- package/dist/core/provisioning/entities/realm/wildcard-validator.mjs +65 -0
- package/dist/core/provisioning/entities/realm/wildcard-validator.mjs.map +1 -0
- package/dist/core/provisioning/index.d.ts +3 -0
- package/dist/core/provisioning/index.d.ts.map +1 -1
- package/dist/core/provisioning/index.mjs +7 -1
- package/dist/core/provisioning/merge/index.d.ts +3 -0
- package/dist/core/provisioning/merge/index.d.ts.map +1 -0
- package/dist/core/provisioning/merge/index.mjs +5 -0
- package/dist/core/provisioning/merge/module.d.ts +18 -0
- package/dist/core/provisioning/merge/module.d.ts.map +1 -0
- package/dist/core/provisioning/merge/module.mjs +82 -0
- package/dist/core/provisioning/merge/module.mjs.map +1 -0
- package/dist/core/provisioning/merge/types.d.ts +34 -0
- package/dist/core/provisioning/merge/types.d.ts.map +1 -0
- package/dist/core/provisioning/merge/types.mjs +4 -0
- package/dist/core/provisioning/synchronizer/client/module.mjs +0 -1
- package/dist/core/provisioning/synchronizer/client/module.mjs.map +1 -1
- package/dist/core/provisioning/synchronizer/permission/module.mjs +0 -1
- package/dist/core/provisioning/synchronizer/permission/module.mjs.map +1 -1
- package/dist/core/provisioning/synchronizer/realm/module.mjs +0 -1
- package/dist/core/provisioning/synchronizer/realm/module.mjs.map +1 -1
- package/dist/core/provisioning/synchronizer/role/module.mjs +0 -1
- package/dist/core/provisioning/synchronizer/role/module.mjs.map +1 -1
- package/dist/core/provisioning/synchronizer/scope/module.mjs +0 -1
- package/dist/core/provisioning/synchronizer/scope/module.mjs.map +1 -1
- package/dist/core/provisioning/synchronizer/user/module.mjs +0 -1
- package/dist/core/provisioning/synchronizer/user/module.mjs.map +1 -1
- package/dist/core/provisioning/types.d.ts +10 -0
- package/dist/core/provisioning/types.d.ts.map +1 -1
- package/dist/core/provisioning/wildcard/index.d.ts +3 -0
- package/dist/core/provisioning/wildcard/index.d.ts.map +1 -0
- package/dist/core/provisioning/wildcard/index.mjs +5 -0
- package/dist/core/provisioning/wildcard/module.d.ts +53 -0
- package/dist/core/provisioning/wildcard/module.d.ts.map +1 -0
- package/dist/core/provisioning/wildcard/module.mjs +91 -0
- package/dist/core/provisioning/wildcard/module.mjs.map +1 -0
- package/dist/core/provisioning/wildcard/types.d.ts +19 -0
- package/dist/core/provisioning/wildcard/types.d.ts.map +1 -0
- package/dist/core/provisioning/wildcard/types.mjs +4 -0
- package/dist/index.mjs +5 -1
- package/dist/path.d.ts +0 -2
- package/dist/path.d.ts.map +1 -1
- package/dist/path.mjs +1 -3
- package/dist/path.mjs.map +1 -1
- package/dist/swagger.json +485 -17
- package/package.json +26 -63
- package/dist/adapters/http/ui/base-path.d.ts +0 -9
- package/dist/adapters/http/ui/base-path.d.ts.map +0 -1
- package/dist/adapters/http/ui/base-path.mjs +0 -18
- package/dist/adapters/http/ui/base-path.mjs.map +0 -1
- package/dist/adapters/http/ui/internal-http-client.d.ts.map +0 -1
- package/dist/adapters/http/ui/internal-http-client.mjs.map +0 -1
- package/dist/adapters/http/ui/render.d.ts +0 -4
- package/dist/adapters/http/ui/render.d.ts.map +0 -1
- package/dist/adapters/http/ui/render.mjs +0 -63
- package/dist/adapters/http/ui/render.mjs.map +0 -1
- package/dist/adapters/http/ui/serve.d.ts.map +0 -1
- package/dist/adapters/http/ui/serve.mjs.map +0 -1
- package/dist/adapters/http/ui/types.d.ts +0 -20
- package/dist/adapters/http/ui/types.d.ts.map +0 -1
- package/dist/core/entities/client/web-client.d.ts +0 -72
- package/dist/core/entities/client/web-client.d.ts.map +0 -1
- package/dist/core/entities/client/web-client.mjs +0 -123
- package/dist/core/entities/client/web-client.mjs.map +0 -1
- package/dist/ui/client/.vite/ssr-manifest.json +0 -54812
- package/dist/ui/client/assets/asap-latin-400-normal-Dc37g3Il.woff +0 -0
- package/dist/ui/client/assets/asap-latin-400-normal-DnZ1MOsG.woff2 +0 -0
- package/dist/ui/client/assets/asap-latin-700-normal-Dqcopq14.woff +0 -0
- package/dist/ui/client/assets/asap-latin-700-normal-l2Y8pi-F.woff2 +0 -0
- package/dist/ui/client/assets/asap-latin-ext-400-normal-C-fcRdtE.woff +0 -0
- package/dist/ui/client/assets/asap-latin-ext-400-normal-DwYtpHbV.woff2 +0 -0
- package/dist/ui/client/assets/asap-latin-ext-700-normal-D00OESsZ.woff +0 -0
- package/dist/ui/client/assets/asap-latin-ext-700-normal-y8bo5aW5.woff2 +0 -0
- package/dist/ui/client/assets/asap-vietnamese-400-normal-DGyJlJLT.woff2 +0 -0
- package/dist/ui/client/assets/asap-vietnamese-400-normal-lfLaoF2x.woff +0 -0
- package/dist/ui/client/assets/asap-vietnamese-700-normal-B-e19ug5.woff +0 -0
- package/dist/ui/client/assets/asap-vietnamese-700-normal-D-SxY94i.woff2 +0 -0
- package/dist/ui/client/assets/index-Bk6-OZy9.css +0 -2
- package/dist/ui/client/assets/index-DO6_7NTJ.js +0 -106
- package/dist/ui/client/assets/nunito-cyrillic-300-normal-BPQV259B.woff2 +0 -0
- package/dist/ui/client/assets/nunito-cyrillic-300-normal-g5qSsvc0.woff +0 -0
- package/dist/ui/client/assets/nunito-cyrillic-400-normal-D1j0u8EH.woff +0 -0
- package/dist/ui/client/assets/nunito-cyrillic-400-normal-xAOo5cBP.woff2 +0 -0
- package/dist/ui/client/assets/nunito-cyrillic-600-normal-BUjmtIuu.woff +0 -0
- package/dist/ui/client/assets/nunito-cyrillic-600-normal-DJGQ2h05.woff2 +0 -0
- package/dist/ui/client/assets/nunito-cyrillic-700-normal-DP36NgGt.woff2 +0 -0
- package/dist/ui/client/assets/nunito-cyrillic-700-normal-DfHRUDv-.woff +0 -0
- package/dist/ui/client/assets/nunito-cyrillic-ext-300-normal-BDHtqmCR.woff +0 -0
- package/dist/ui/client/assets/nunito-cyrillic-ext-300-normal-ChMQLIrm.woff2 +0 -0
- package/dist/ui/client/assets/nunito-cyrillic-ext-400-normal-CuPM9foi.woff2 +0 -0
- package/dist/ui/client/assets/nunito-cyrillic-ext-400-normal-xaE7D4Sw.woff +0 -0
- package/dist/ui/client/assets/nunito-cyrillic-ext-600-normal-CWPPjBOD.woff2 +0 -0
- package/dist/ui/client/assets/nunito-cyrillic-ext-600-normal-vnfu4DTE.woff +0 -0
- package/dist/ui/client/assets/nunito-cyrillic-ext-700-normal-BuR0mlCG.woff2 +0 -0
- package/dist/ui/client/assets/nunito-cyrillic-ext-700-normal-DfoqN4Gs.woff +0 -0
- package/dist/ui/client/assets/nunito-latin-300-normal-C3ZIKvzv.woff +0 -0
- package/dist/ui/client/assets/nunito-latin-300-normal-COoPE5VN.woff2 +0 -0
- package/dist/ui/client/assets/nunito-latin-400-normal-DKg4f3fz.woff +0 -0
- package/dist/ui/client/assets/nunito-latin-400-normal-r8SDr6Up.woff2 +0 -0
- package/dist/ui/client/assets/nunito-latin-600-normal-Br8yIETf.woff2 +0 -0
- package/dist/ui/client/assets/nunito-latin-600-normal-Cd0eNu1l.woff +0 -0
- package/dist/ui/client/assets/nunito-latin-700-normal-Dort48En.woff2 +0 -0
- package/dist/ui/client/assets/nunito-latin-700-normal-OcDqTBcA.woff +0 -0
- package/dist/ui/client/assets/nunito-latin-ext-300-normal-D1SyVuPt.woff2 +0 -0
- package/dist/ui/client/assets/nunito-latin-ext-300-normal-DfqbmdMl.woff +0 -0
- package/dist/ui/client/assets/nunito-latin-ext-400-normal-CjMJVfGn.woff +0 -0
- package/dist/ui/client/assets/nunito-latin-ext-400-normal-i-8OOpdj.woff2 +0 -0
- package/dist/ui/client/assets/nunito-latin-ext-600-normal-BKUpuB78.woff +0 -0
- package/dist/ui/client/assets/nunito-latin-ext-600-normal-Dd9Zuxh1.woff2 +0 -0
- package/dist/ui/client/assets/nunito-latin-ext-700-normal-BWeMsAzO.woff2 +0 -0
- package/dist/ui/client/assets/nunito-latin-ext-700-normal-D4woHhbd.woff +0 -0
- package/dist/ui/client/assets/nunito-vietnamese-300-normal-DATld5Vw.woff +0 -0
- package/dist/ui/client/assets/nunito-vietnamese-300-normal-mLneKULB.woff2 +0 -0
- package/dist/ui/client/assets/nunito-vietnamese-400-normal-BHkVbP3T.woff2 +0 -0
- package/dist/ui/client/assets/nunito-vietnamese-400-normal-DtOtW02z.woff +0 -0
- package/dist/ui/client/assets/nunito-vietnamese-600-normal-BY8O6Cug.woff2 +0 -0
- package/dist/ui/client/assets/nunito-vietnamese-600-normal-DO1RqFw5.woff +0 -0
- package/dist/ui/client/assets/nunito-vietnamese-700-normal-C9SQsXvj.woff +0 -0
- package/dist/ui/client/assets/nunito-vietnamese-700-normal-Ch8EUCfz.woff2 +0 -0
- package/dist/ui/client/index.html +0 -22
- package/dist/ui/server/assets/multipart-parser-BCMy8Xwv.js +0 -181
- package/dist/ui/server/assets/multipart-parser-BVY8pIV2.js +0 -176
- package/dist/ui/server/server.js +0 -158420
- /package/dist/adapters/http/{ui → middleware/built-in}/types.mjs +0 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { IAppEvent } from 'routup';
|
|
2
|
+
import type { AccountConsoleServeOptions } from './types.ts';
|
|
3
|
+
/**
|
|
4
|
+
* Point the resolution at a substituted package (config
|
|
5
|
+
* `accountConsolePath`) instead of the node_modules walk. Called once at
|
|
6
|
+
* boot.
|
|
7
|
+
*/
|
|
8
|
+
export declare function setAccountConsolePackagePath(value: string | undefined): void;
|
|
9
|
+
/**
|
|
10
|
+
* Locate the built account console bundle. The SPA ships as the
|
|
11
|
+
* `@authup/client-account-console` package (a server-core dependency), so
|
|
12
|
+
* the node_modules ancestor walk from server-core's own package root
|
|
13
|
+
* (locter's `locateUp`) finds it for the workspace (symlink onto
|
|
14
|
+
* apps/client-account-console) and for a published install alike. Only a
|
|
15
|
+
* positive result is cached — a dev building the app after boot is picked
|
|
16
|
+
* up on the next request.
|
|
17
|
+
*/
|
|
18
|
+
export declare function resolveAccountConsoleDistPath(): string | undefined;
|
|
19
|
+
/**
|
|
20
|
+
* Serve the account console SPA shell: the package's built index.html with
|
|
21
|
+
* the runtime configuration injected (replacing the `<!--account-config-->`
|
|
22
|
+
* marker), the color-mode/lang attributes stamped from the shared cookies
|
|
23
|
+
* (no flash), and asset hrefs rebased when publicUrl carries a sub-path.
|
|
24
|
+
* Client-side routing owns everything below /account — the shell is the
|
|
25
|
+
* same for every sub-path.
|
|
26
|
+
*/
|
|
27
|
+
export declare function serveAccountConsolePage(event: IAppEvent, options: AccountConsoleServeOptions): Promise<string>;
|
|
28
|
+
//# sourceMappingURL=module.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../../src/adapters/http/ui/account-console/module.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAcxC,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAQ7D;;;;GAIG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAI,IAAI,CAI7E;AAED;;;;;;;;GAQG;AACH,wBAAgB,6BAA6B,IAAK,MAAM,GAAG,SAAS,CAmBnE;AAED;;;;;;;GAOG;AACH,wBAAsB,uBAAuB,CACzC,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,0BAA0B,GACnC,OAAO,CAAC,MAAM,CAAC,CAsDlB"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import "node:path";
|
|
2
|
+
import "node:url";
|
|
3
|
+
import.meta.url;
|
|
4
|
+
import { PACKAGE_PATH } from "../../../../path.mjs";
|
|
5
|
+
import { applyUIPageHeaders, readUIClientPreferences, rebaseAssetURLs, replaceTemplateMarker, serializeInlineScriptJSON, stampHtmlAttributes } from "../shared/html.mjs";
|
|
6
|
+
import "../shared/index.mjs";
|
|
7
|
+
import { applyTheme } from "../theme/apply.mjs";
|
|
8
|
+
import "../theme/index.mjs";
|
|
9
|
+
import { useRequestTheme } from "../../middleware/built-in/theme.mjs";
|
|
10
|
+
import "../../middleware/index.mjs";
|
|
11
|
+
import { resolveAccountConsoleRef } from "./ref.mjs";
|
|
12
|
+
import { getURLBasePath } from "@authup/kit";
|
|
13
|
+
import { InternalError } from "@authup/errors";
|
|
14
|
+
import path from "node:path";
|
|
15
|
+
import { useRequestQuery } from "@routup/basic/query";
|
|
16
|
+
import { CodeTransformation, isCodeTransformation } from "typeorm-extension";
|
|
17
|
+
import { locateUpSync } from "locter";
|
|
18
|
+
import fs from "node:fs";
|
|
19
|
+
//#region src/adapters/http/ui/account-console/module.ts
|
|
20
|
+
const CONFIG_MARKER = "<!--account-config-->";
|
|
21
|
+
let cachedDistPath;
|
|
22
|
+
let cachedHtml;
|
|
23
|
+
let overridePackagePath;
|
|
24
|
+
/**
|
|
25
|
+
* Point the resolution at a substituted package (config
|
|
26
|
+
* `accountConsolePath`) instead of the node_modules walk. Called once at
|
|
27
|
+
* boot.
|
|
28
|
+
*/ function setAccountConsolePackagePath(value) {
|
|
29
|
+
overridePackagePath = value || void 0;
|
|
30
|
+
cachedDistPath = void 0;
|
|
31
|
+
cachedHtml = void 0;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Locate the built account console bundle. The SPA ships as the
|
|
35
|
+
* `@authup/client-account-console` package (a server-core dependency), so
|
|
36
|
+
* the node_modules ancestor walk from server-core's own package root
|
|
37
|
+
* (locter's `locateUp`) finds it for the workspace (symlink onto
|
|
38
|
+
* apps/client-account-console) and for a published install alike. Only a
|
|
39
|
+
* positive result is cached — a dev building the app after boot is picked
|
|
40
|
+
* up on the next request.
|
|
41
|
+
*/ function resolveAccountConsoleDistPath() {
|
|
42
|
+
if (cachedDistPath) return cachedDistPath;
|
|
43
|
+
const packagePath = overridePackagePath ?? locateUpSync("node_modules/@authup/client-account-console/package.json", { cwd: PACKAGE_PATH })?.directory;
|
|
44
|
+
if (packagePath) {
|
|
45
|
+
const distPath = path.join(packagePath, "dist");
|
|
46
|
+
if (fs.existsSync(path.join(distPath, "index.html"))) cachedDistPath = distPath;
|
|
47
|
+
}
|
|
48
|
+
return cachedDistPath;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Serve the account console SPA shell: the package's built index.html with
|
|
52
|
+
* the runtime configuration injected (replacing the `<!--account-config-->`
|
|
53
|
+
* marker), the color-mode/lang attributes stamped from the shared cookies
|
|
54
|
+
* (no flash), and asset hrefs rebased when publicUrl carries a sub-path.
|
|
55
|
+
* Client-side routing owns everything below /account — the shell is the
|
|
56
|
+
* same for every sub-path.
|
|
57
|
+
*/ async function serveAccountConsolePage(event, options) {
|
|
58
|
+
const distPath = resolveAccountConsoleDistPath();
|
|
59
|
+
if (!distPath) throw new InternalError("The account console bundle (@authup/client-account-console) is not built or installed.");
|
|
60
|
+
let html;
|
|
61
|
+
if (isCodeTransformation(CodeTransformation.JUST_IN_TIME)) html = await fs.promises.readFile(path.join(distPath, "index.html"), "utf-8");
|
|
62
|
+
else html = cachedHtml ??= await fs.promises.readFile(path.join(distPath, "index.html"), "utf-8");
|
|
63
|
+
const basePath = getURLBasePath(options.baseURL);
|
|
64
|
+
const config = {
|
|
65
|
+
apiUrl: options.baseURL,
|
|
66
|
+
basePath: `${basePath}/account`,
|
|
67
|
+
features: options.features,
|
|
68
|
+
ref: resolveAccountConsoleRef(useRequestQuery(event, "ref"), options.trustedOrigins)
|
|
69
|
+
};
|
|
70
|
+
let body = replaceTemplateMarker(html, CONFIG_MARKER, `<script>window.__AUTHUP__ = ${serializeInlineScriptJSON(config)};<\/script>`);
|
|
71
|
+
body = stampHtmlAttributes(body, readUIClientPreferences(event));
|
|
72
|
+
body = rebaseAssetURLs(body, basePath, "/account/");
|
|
73
|
+
body = await applyTheme(body, useRequestTheme(event), basePath);
|
|
74
|
+
applyUIPageHeaders(event);
|
|
75
|
+
return body;
|
|
76
|
+
}
|
|
77
|
+
//#endregion
|
|
78
|
+
export { resolveAccountConsoleDistPath, serveAccountConsolePage, setAccountConsolePackagePath };
|
|
79
|
+
|
|
80
|
+
//# sourceMappingURL=module.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module.mjs","names":["InternalError","getURLBasePath","useRequestQuery","locateUpSync","fs","path","CodeTransformation","isCodeTransformation","PACKAGE_PATH","useRequestTheme","applyTheme","applyUIPageHeaders","readUIClientPreferences","rebaseAssetURLs","replaceTemplateMarker","serializeInlineScriptJSON","stampHtmlAttributes","resolveAccountConsoleRef","CONFIG_MARKER","cachedDistPath","cachedHtml","overridePackagePath","setAccountConsolePackagePath","value","undefined","resolveAccountConsoleDistPath","packagePath","cwd","directory","distPath","join","existsSync","serveAccountConsolePage","event","options","html","JUST_IN_TIME","promises","readFile","basePath","baseURL","config","apiUrl","features","ref","trustedOrigins","body"],"sources":["../../../../../src/adapters/http/ui/account-console/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2026.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { InternalError } from '@authup/errors';\nimport { getURLBasePath } from '@authup/kit';\nimport { useRequestQuery } from '@routup/basic/query';\nimport { locateUpSync } from 'locter';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport type { IAppEvent } from 'routup';\nimport { CodeTransformation, isCodeTransformation } from 'typeorm-extension';\nimport { PACKAGE_PATH } from '../../../../path.ts';\nimport { useRequestTheme } from '../../middleware/index.ts';\nimport { applyTheme } from '../theme/index.ts';\nimport {\n applyUIPageHeaders,\n readUIClientPreferences,\n rebaseAssetURLs,\n replaceTemplateMarker,\n serializeInlineScriptJSON,\n stampHtmlAttributes,\n} from '../shared/index.ts';\nimport { resolveAccountConsoleRef } from './ref.ts';\nimport type { AccountConsoleServeOptions } from './types.ts';\n\nconst CONFIG_MARKER = '<!--account-config-->';\n\nlet cachedDistPath: string | undefined;\nlet cachedHtml: string | undefined;\nlet overridePackagePath: string | undefined;\n\n/**\n * Point the resolution at a substituted package (config\n * `accountConsolePath`) instead of the node_modules walk. Called once at\n * boot.\n */\nexport function setAccountConsolePackagePath(value: string | undefined) : void {\n overridePackagePath = value || undefined;\n cachedDistPath = undefined;\n cachedHtml = undefined;\n}\n\n/**\n * Locate the built account console bundle. The SPA ships as the\n * `@authup/client-account-console` package (a server-core dependency), so\n * the node_modules ancestor walk from server-core's own package root\n * (locter's `locateUp`) finds it for the workspace (symlink onto\n * apps/client-account-console) and for a published install alike. Only a\n * positive result is cached — a dev building the app after boot is picked\n * up on the next request.\n */\nexport function resolveAccountConsoleDistPath() : string | undefined {\n if (cachedDistPath) {\n return cachedDistPath;\n }\n\n const packagePath = overridePackagePath ?? locateUpSync(\n 'node_modules/@authup/client-account-console/package.json',\n { cwd: PACKAGE_PATH },\n )?.directory;\n\n if (packagePath) {\n const distPath = path.join(packagePath, 'dist');\n\n if (fs.existsSync(path.join(distPath, 'index.html'))) {\n cachedDistPath = distPath;\n }\n }\n\n return cachedDistPath;\n}\n\n/**\n * Serve the account console SPA shell: the package's built index.html with\n * the runtime configuration injected (replacing the `<!--account-config-->`\n * marker), the color-mode/lang attributes stamped from the shared cookies\n * (no flash), and asset hrefs rebased when publicUrl carries a sub-path.\n * Client-side routing owns everything below /account — the shell is the\n * same for every sub-path.\n */\nexport async function serveAccountConsolePage(\n event: IAppEvent,\n options: AccountConsoleServeOptions,\n) : Promise<string> {\n const distPath = resolveAccountConsoleDistPath();\n if (!distPath) {\n throw new InternalError(\n 'The account console bundle (@authup/client-account-console) is not built or installed.',\n );\n }\n\n let html : string;\n if (isCodeTransformation(CodeTransformation.JUST_IN_TIME)) {\n // dev: re-read so a rebuilt bundle is picked up without a restart\n html = await fs.promises.readFile(path.join(distPath, 'index.html'), 'utf-8');\n } else {\n html = (cachedHtml ??= await fs.promises.readFile(\n path.join(distPath, 'index.html'),\n 'utf-8',\n ));\n }\n\n const basePath = getURLBasePath(options.baseURL);\n\n // publicUrl and the feature flags are operator config, but `ref` is\n // request-reflected, so it is validated against the trusted app\n // origins before it goes anywhere near the page.\n //\n // The splice below MUST stay `replaceTemplateMarker`. A plain\n // String.prototype.replace expands `$&`, \"$`\", `$'` and `$$` inside the\n // REPLACEMENT value, so a crafted `ref` could splice the template's own\n // tail into the payload and break the inline script. That is the exact\n // bug that killed the auth console's hydration payload.\n const config = {\n apiUrl: options.baseURL,\n basePath: `${basePath}/account`,\n features: options.features,\n ref: resolveAccountConsoleRef(\n useRequestQuery(event, 'ref'),\n options.trustedOrigins,\n ),\n };\n\n let body = replaceTemplateMarker(\n html,\n CONFIG_MARKER,\n `<script>window.__AUTHUP__ = ${serializeInlineScriptJSON(config)};</script>`,\n );\n\n body = stampHtmlAttributes(body, readUIClientPreferences(event));\n body = rebaseAssetURLs(body, basePath, '/account/');\n\n body = await applyTheme(body, useRequestTheme(event), basePath);\n\n applyUIPageHeaders(event);\n\n return body;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AA6BA,MAAMkB,gBAAgB;AAEtB,IAAIC;AACJ,IAAIC;AACJ,IAAIC;;;;;GAOJ,SAAgBC,6BAA6BC,OAAyB;CAClEF,sBAAsBE,SAASC,KAAAA;CAC/BL,iBAAiBK,KAAAA;CACjBJ,aAAaI,KAAAA;AACjB;;;;;;;;;GAWA,SAAgBC,gCAAAA;CACZ,IAAIN,gBACA,OAAOA;CAGX,MAAMO,cAAcL,uBAAuBlB,aACvC,4DACA,EAAEwB,KAAKnB,aAAa,CAAA,CAAA,EACrBoB;CAEH,IAAIF,aAAa;EACb,MAAMG,WAAWxB,KAAKyB,KAAKJ,aAAa,MAAA;EAExC,IAAItB,GAAG2B,WAAW1B,KAAKyB,KAAKD,UAAU,YAAA,CAAA,GAClCV,iBAAiBU;CAEzB;CAEA,OAAOV;AACX;;;;;;;;GAUA,eAAsBa,wBAClBC,OACAC,SAAmC;CAEnC,MAAML,WAAWJ,8BAAAA;CACjB,IAAI,CAACI,UACD,MAAM,IAAI7B,cACN,wFAAA;CAIR,IAAImC;CACJ,IAAI5B,qBAAqBD,mBAAmB8B,YAAY,GAEpDD,OAAO,MAAM/B,GAAGiC,SAASC,SAASjC,KAAKyB,KAAKD,UAAU,YAAA,GAAe,OAAA;MAErEM,OAAQf,eAAe,MAAMhB,GAAGiC,SAASC,SACrCjC,KAAKyB,KAAKD,UAAU,YAAA,GACpB,OAAA;CAIR,MAAMU,WAAWtC,eAAeiC,QAAQM,OAAO;CAW/C,MAAMC,SAAS;EACXC,QAAQR,QAAQM;EAChBD,UAAU,GAAGA,SAAS;EACtBI,UAAUT,QAAQS;EAClBC,KAAK3B,yBACDf,gBAAgB+B,OAAO,KAAA,GACvBC,QAAQW,cAAc;CAE9B;CAEA,IAAIC,OAAOhC,sBACPqB,MACAjB,eACA,+BAA+BH,0BAA0B0B,MAAAA,EAAQ,YAAW;CAGhFK,OAAO9B,oBAAoB8B,MAAMlC,wBAAwBqB,KAAAA,CAAAA;CACzDa,OAAOjC,gBAAgBiC,MAAMP,UAAU,WAAA;CAEvCO,OAAO,MAAMpC,WAAWoC,MAAMrC,gBAAgBwB,KAAAA,GAAQM,QAAAA;CAEtD5B,mBAAmBsB,KAAAA;CAEnB,OAAOa;AACX"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Upper bound on an accepted `ref`, matching the cap
|
|
3
|
+
* `OAuth2EndSessionRequestValidator` applies to `post_logout_redirect_uri`.
|
|
4
|
+
*/
|
|
5
|
+
export declare const ACCOUNT_CONSOLE_REF_MAX_LENGTH = 2000;
|
|
6
|
+
/**
|
|
7
|
+
* Resolve the `ref` back-link parameter against the trusted app origins.
|
|
8
|
+
*
|
|
9
|
+
* `ref` names the application the visitor came from, so the account console
|
|
10
|
+
* can render a link back to it. It is attacker-supplied, and it is rendered
|
|
11
|
+
* on an authenticated first-party page, so an unvalidated value would be a
|
|
12
|
+
* phishing surface. The check mirrors the client redirect allowlist: each
|
|
13
|
+
* trusted origin becomes an `<origin>/**` pattern, which admits the bare
|
|
14
|
+
* origin and any path below it while rejecting a foreign origin, a
|
|
15
|
+
* suffix-extended host (`admin.example.com.evil.test`), a userinfo-prefixed
|
|
16
|
+
* host (`admin.example.com@evil.test`) and a scheme downgrade.
|
|
17
|
+
*
|
|
18
|
+
* The value is canonicalized through `URL` before matching, so a host
|
|
19
|
+
* differing only in case still matches (the matcher is case-sensitive, while
|
|
20
|
+
* a host is not). The canonical form is what gets returned, and it is what
|
|
21
|
+
* the page embeds. `isSimpleURLMatch` canonicalizes as well, which is what
|
|
22
|
+
* keeps a wildcard in a trusted origin from escaping the authority; doing it
|
|
23
|
+
* here too is what lets this function RETURN the canonical form.
|
|
24
|
+
*
|
|
25
|
+
* Returns undefined for anything that does not pass. The caller drops it
|
|
26
|
+
* silently, the way `sanitizeRelativeRedirect` drops a bad workflow
|
|
27
|
+
* redirect.
|
|
28
|
+
*/
|
|
29
|
+
export declare function resolveAccountConsoleRef(value: unknown, trustedOrigins: string[]): string | undefined;
|
|
30
|
+
//# sourceMappingURL=ref.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ref.d.ts","sourceRoot":"","sources":["../../../../../src/adapters/http/ui/account-console/ref.ts"],"names":[],"mappings":"AASA;;;GAGG;AACH,eAAO,MAAM,8BAA8B,OAAO,CAAC;AAEnD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,wBAAwB,CACpC,KAAK,EAAE,OAAO,EACd,cAAc,EAAE,MAAM,EAAE,GACxB,MAAM,GAAG,SAAS,CA4BrB"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import "node:path";
|
|
2
|
+
import "node:url";
|
|
3
|
+
import.meta.url;
|
|
4
|
+
import { isSimpleURLMatch } from "@authup/kit";
|
|
5
|
+
//#region src/adapters/http/ui/account-console/ref.ts
|
|
6
|
+
/**
|
|
7
|
+
* Upper bound on an accepted `ref`, matching the cap
|
|
8
|
+
* `OAuth2EndSessionRequestValidator` applies to `post_logout_redirect_uri`.
|
|
9
|
+
*/ const ACCOUNT_CONSOLE_REF_MAX_LENGTH = 2e3;
|
|
10
|
+
/**
|
|
11
|
+
* Resolve the `ref` back-link parameter against the trusted app origins.
|
|
12
|
+
*
|
|
13
|
+
* `ref` names the application the visitor came from, so the account console
|
|
14
|
+
* can render a link back to it. It is attacker-supplied, and it is rendered
|
|
15
|
+
* on an authenticated first-party page, so an unvalidated value would be a
|
|
16
|
+
* phishing surface. The check mirrors the client redirect allowlist: each
|
|
17
|
+
* trusted origin becomes an `<origin>/**` pattern, which admits the bare
|
|
18
|
+
* origin and any path below it while rejecting a foreign origin, a
|
|
19
|
+
* suffix-extended host (`admin.example.com.evil.test`), a userinfo-prefixed
|
|
20
|
+
* host (`admin.example.com@evil.test`) and a scheme downgrade.
|
|
21
|
+
*
|
|
22
|
+
* The value is canonicalized through `URL` before matching, so a host
|
|
23
|
+
* differing only in case still matches (the matcher is case-sensitive, while
|
|
24
|
+
* a host is not). The canonical form is what gets returned, and it is what
|
|
25
|
+
* the page embeds. `isSimpleURLMatch` canonicalizes as well, which is what
|
|
26
|
+
* keeps a wildcard in a trusted origin from escaping the authority; doing it
|
|
27
|
+
* here too is what lets this function RETURN the canonical form.
|
|
28
|
+
*
|
|
29
|
+
* Returns undefined for anything that does not pass. The caller drops it
|
|
30
|
+
* silently, the way `sanitizeRelativeRedirect` drops a bad workflow
|
|
31
|
+
* redirect.
|
|
32
|
+
*/ function resolveAccountConsoleRef(value, trustedOrigins) {
|
|
33
|
+
if (typeof value !== "string") return;
|
|
34
|
+
const trimmed = value.trim();
|
|
35
|
+
if (trimmed.length === 0 || trimmed.length > 2e3) return;
|
|
36
|
+
let url;
|
|
37
|
+
try {
|
|
38
|
+
url = new URL(trimmed);
|
|
39
|
+
} catch {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
if (url.protocol !== "http:" && url.protocol !== "https:") return;
|
|
43
|
+
const candidate = `${url.origin}${url.pathname}${url.search}${url.hash}`;
|
|
44
|
+
if (!isSimpleURLMatch(candidate, trustedOrigins.map((origin) => `${origin}/**`))) return;
|
|
45
|
+
return candidate;
|
|
46
|
+
}
|
|
47
|
+
//#endregion
|
|
48
|
+
export { ACCOUNT_CONSOLE_REF_MAX_LENGTH, resolveAccountConsoleRef };
|
|
49
|
+
|
|
50
|
+
//# sourceMappingURL=ref.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ref.mjs","names":["isSimpleURLMatch","ACCOUNT_CONSOLE_REF_MAX_LENGTH","resolveAccountConsoleRef","value","trustedOrigins","undefined","trimmed","trim","length","url","URL","protocol","candidate","origin","pathname","search","hash","map"],"sources":["../../../../../src/adapters/http/ui/account-console/ref.ts"],"sourcesContent":["/*\n * Copyright (c) 2026.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isSimpleURLMatch } from '@authup/kit';\n\n/**\n * Upper bound on an accepted `ref`, matching the cap\n * `OAuth2EndSessionRequestValidator` applies to `post_logout_redirect_uri`.\n */\nexport const ACCOUNT_CONSOLE_REF_MAX_LENGTH = 2000;\n\n/**\n * Resolve the `ref` back-link parameter against the trusted app origins.\n *\n * `ref` names the application the visitor came from, so the account console\n * can render a link back to it. It is attacker-supplied, and it is rendered\n * on an authenticated first-party page, so an unvalidated value would be a\n * phishing surface. The check mirrors the client redirect allowlist: each\n * trusted origin becomes an `<origin>/**` pattern, which admits the bare\n * origin and any path below it while rejecting a foreign origin, a\n * suffix-extended host (`admin.example.com.evil.test`), a userinfo-prefixed\n * host (`admin.example.com@evil.test`) and a scheme downgrade.\n *\n * The value is canonicalized through `URL` before matching, so a host\n * differing only in case still matches (the matcher is case-sensitive, while\n * a host is not). The canonical form is what gets returned, and it is what\n * the page embeds. `isSimpleURLMatch` canonicalizes as well, which is what\n * keeps a wildcard in a trusted origin from escaping the authority; doing it\n * here too is what lets this function RETURN the canonical form.\n *\n * Returns undefined for anything that does not pass. The caller drops it\n * silently, the way `sanitizeRelativeRedirect` drops a bad workflow\n * redirect.\n */\nexport function resolveAccountConsoleRef(\n value: unknown,\n trustedOrigins: string[],\n) : string | undefined {\n if (typeof value !== 'string') {\n return undefined;\n }\n\n const trimmed = value.trim();\n if (trimmed.length === 0 || trimmed.length > ACCOUNT_CONSOLE_REF_MAX_LENGTH) {\n return undefined;\n }\n\n let url : URL;\n try {\n url = new URL(trimmed);\n } catch {\n return undefined;\n }\n\n if (url.protocol !== 'http:' && url.protocol !== 'https:') {\n return undefined;\n }\n\n const candidate = `${url.origin}${url.pathname}${url.search}${url.hash}`;\n\n if (!isSimpleURLMatch(candidate, trustedOrigins.map((origin) => `${origin}/**`))) {\n return undefined;\n }\n\n return candidate;\n}\n"],"mappings":";;;;;;;;GAaA,MAAaC,iCAAiC;;;;;;;;;;;;;;;;;;;;;;;GAyB9C,SAAgBC,yBACZC,OACAC,gBAAwB;CAExB,IAAI,OAAOD,UAAU,UACjB;CAGJ,MAAMG,UAAUH,MAAMI,KAAI;CAC1B,IAAID,QAAQE,WAAW,KAAKF,QAAQE,SAAAA,KAChC;CAGJ,IAAIC;CACJ,IAAI;EACAA,MAAM,IAAIC,IAAIJ,OAAAA;CAClB,QAAQ;EACJ;CACJ;CAEA,IAAIG,IAAIE,aAAa,WAAWF,IAAIE,aAAa,UAC7C;CAGJ,MAAMC,YAAY,GAAGH,IAAII,SAASJ,IAAIK,WAAWL,IAAIM,SAASN,IAAIO;CAElE,IAAI,CAAChB,iBAAiBY,WAAWR,eAAea,KAAKJ,WAAW,GAAGA,OAAO,IAAI,CAAA,GAC1E;CAGJ,OAAOD;AACX"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { StatusResponseFeatures } from '@authup/core-http-kit';
|
|
2
|
+
export type AccountConsoleServeOptions = {
|
|
3
|
+
baseURL: string;
|
|
4
|
+
features: StatusResponseFeatures;
|
|
5
|
+
/**
|
|
6
|
+
* Trusted application origins (`getAppOrigins(config)`). The allowlist
|
|
7
|
+
* the `ref` back-link parameter is validated against.
|
|
8
|
+
*/
|
|
9
|
+
trustedOrigins: string[];
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/adapters/http/ui/account-console/types.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAEpE,MAAM,MAAM,0BAA0B,GAAG;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,sBAAsB,CAAC;IACjC;;;OAGG;IACH,cAAc,EAAE,MAAM,EAAE,CAAC;CAC5B,CAAC"}
|
|
@@ -19,4 +19,4 @@ export declare function createPublicToInternalURLRewriter(publicURL: string, int
|
|
|
19
19
|
* hydration does not patch attribute mismatches.
|
|
20
20
|
*/
|
|
21
21
|
export declare function createInternalUIHttpClient(ctx: InternalUIHttpClientContext): IClient;
|
|
22
|
-
//# sourceMappingURL=
|
|
22
|
+
//# sourceMappingURL=http-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-client.d.ts","sourceRoot":"","sources":["../../../../../src/adapters/http/ui/auth-console/http-client.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAErD,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;AAE9D;;;;GAIG;AACH,wBAAgB,iCAAiC,CAC7C,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GACnB,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAmC1B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,2BAA2B,GAAI,OAAO,CAOrF"}
|
|
@@ -3,7 +3,7 @@ import "node:url";
|
|
|
3
3
|
import.meta.url;
|
|
4
4
|
import { Client } from "@authup/core-http-kit";
|
|
5
5
|
import { FetchTransport, fetch } from "hapic";
|
|
6
|
-
//#region src/adapters/http/ui/
|
|
6
|
+
//#region src/adapters/http/ui/auth-console/http-client.ts
|
|
7
7
|
/**
|
|
8
8
|
* Build a rewriter that maps URLs under the public base URL
|
|
9
9
|
* (scheme://host[/prefix]) onto the server's own listen address. URLs
|
|
@@ -49,4 +49,4 @@ import { FetchTransport, fetch } from "hapic";
|
|
|
49
49
|
//#endregion
|
|
50
50
|
export { createInternalUIHttpClient, createPublicToInternalURLRewriter };
|
|
51
51
|
|
|
52
|
-
//# sourceMappingURL=
|
|
52
|
+
//# sourceMappingURL=http-client.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-client.mjs","names":["Client","FetchTransport","fetch","createPublicToInternalURLRewriter","publicURL","internalURL","publicParsed","URL","internalParsed","hostname","basePath","pathname","replace","url","parsed","origin","startsWith","substring","length","search","href","createInternalUIHttpClient","ctx","rewriteURL","baseURL","transport","input","init"],"sources":["../../../../../src/adapters/http/ui/auth-console/http-client.ts"],"sourcesContent":["/*\n * Copyright (c) 2026.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { Client } from '@authup/core-http-kit';\nimport type { IClient } from '@authup/core-http-kit';\nimport { FetchTransport, fetch } from 'hapic';\nimport type { InternalUIHttpClientContext } from './types.ts';\n\n/**\n * Build a rewriter that maps URLs under the public base URL\n * (scheme://host[/prefix]) onto the server's own listen address. URLs\n * outside the public origin/prefix pass through untouched.\n */\nexport function createPublicToInternalURLRewriter(\n publicURL: string,\n internalURL: string,\n) : (url: string) => string {\n const publicParsed = new URL(publicURL);\n const internalParsed = new URL(internalURL);\n // a wildcard listen address (0.0.0.0 / [::]) is not reliably dialable —\n // loop back explicitly\n if (internalParsed.hostname === '0.0.0.0' || internalParsed.hostname === '[::]') {\n internalParsed.hostname = '127.0.0.1';\n }\n const basePath = publicParsed.pathname.replace(/\\/+$/, '');\n\n return (url: string) => {\n let parsed : URL;\n try {\n parsed = new URL(url);\n } catch {\n return url;\n }\n\n if (parsed.origin !== publicParsed.origin) {\n return url;\n }\n\n let { pathname } = parsed;\n if (basePath) {\n if (pathname === basePath) {\n pathname = '/';\n } else if (pathname.startsWith(`${basePath}/`)) {\n pathname = pathname.substring(basePath.length);\n } else {\n return url;\n }\n }\n\n return new URL(pathname + parsed.search, internalParsed.origin).href;\n };\n}\n\n/**\n * HTTP client for the SSR'd UI pages: the render's API calls target the\n * server itself, so they are dispatched against its own listen address —\n * no reverse-proxy round-trip, no TLS (a self-signed publicUrl certificate\n * would otherwise fail Node's fetch), no dependency on the public hostname\n * resolving from inside the deployment.\n *\n * The rewrite happens at the TRANSPORT layer only: `baseURL` must stay the\n * public URL because the rendered HTML derives user-facing URLs from it\n * (e.g. the identity-provider authorize hrefs via `getAuthorizeUri`), and\n * hydration does not patch attribute mismatches.\n */\nexport function createInternalUIHttpClient(ctx: InternalUIHttpClientContext) : IClient {\n const rewriteURL = createPublicToInternalURLRewriter(ctx.publicURL, ctx.internalURL);\n\n return new Client({\n baseURL: ctx.publicURL,\n transport: new FetchTransport({ fetch: (input, init) => fetch(rewriteURL(input), init) }),\n });\n}\n"],"mappings":";;;;;;;;;;GAiBA,SAAgBG,kCACZC,WACAC,aAAmB;CAEnB,MAAMC,eAAe,IAAIC,IAAIH,SAAAA;CAC7B,MAAMI,iBAAiB,IAAID,IAAIF,WAAAA;CAG/B,IAAIG,eAAeC,aAAa,aAAaD,eAAeC,aAAa,QACrED,eAAeC,WAAW;CAE9B,MAAMC,WAAWJ,aAAaK,SAASC,QAAQ,QAAQ,EAAA;CAEvD,QAAQC,QAAAA;EACJ,IAAIC;EACJ,IAAI;GACAA,SAAS,IAAIP,IAAIM,GAAAA;EACrB,QAAQ;GACJ,OAAOA;EACX;EAEA,IAAIC,OAAOC,WAAWT,aAAaS,QAC/B,OAAOF;EAGX,IAAI,EAAEF,aAAaG;EACnB,IAAIJ,UACA,IAAIC,aAAaD,UACbC,WAAW;OACR,IAAIA,SAASK,WAAW,GAAGN,SAAS,EAAE,GACzCC,WAAWA,SAASM,UAAUP,SAASQ,MAAM;OAE7C,OAAOL;EAIf,OAAO,IAAIN,IAAII,WAAWG,OAAOK,QAAQX,eAAeO,MAAM,CAAA,CAAEK;CACpE;AACJ;;;;;;;;;;;;GAcA,SAAgBC,2BAA2BC,KAAgC;CACvE,MAAMC,aAAapB,kCAAkCmB,IAAIlB,WAAWkB,IAAIjB,WAAW;CAEnF,OAAO,IAAIL,OAAO;EACdwB,SAASF,IAAIlB;EACbqB,WAAW,IAAIxB,eAAe,EAAEC,QAAQwB,OAAOC,SAASzB,MAAMqB,WAAWG,KAAAA,GAAQC,IAAAA,EAAM,CAAA;CAC3F,CAAA;AACJ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/adapters/http/ui/auth-console/index.ts"],"names":[],"mappings":"AAOA,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import "node:path";
|
|
2
|
+
import "node:url";
|
|
3
|
+
import.meta.url;
|
|
4
|
+
import { createInternalUIHttpClient, createPublicToInternalURLRewriter } from "./http-client.mjs";
|
|
5
|
+
import { resolveAuthConsoleDistPath, resolveAuthConsolePackagePath, setAuthConsolePackagePath } from "./resolve.mjs";
|
|
6
|
+
import { renderAuthConsolePage } from "./module.mjs";
|
|
7
|
+
import { serveWorkflowPage } from "./serve.mjs";
|
|
8
|
+
export { createInternalUIHttpClient, createPublicToInternalURLRewriter, renderAuthConsolePage, resolveAuthConsoleDistPath, resolveAuthConsolePackagePath, serveWorkflowPage, setAuthConsolePackagePath };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../../src/adapters/http/ui/auth-console/module.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAcxC,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAU3D,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,wBAAwB,GAAG,OAAO,CAAC,MAAM,CAAC,CA8F5G"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import "node:path";
|
|
2
|
+
import "node:url";
|
|
3
|
+
import.meta.url;
|
|
4
|
+
import { applyUIPageHeaders, readUIClientPreferences, rebaseAssetURLs, replaceTemplateMarker, stampHtmlAttributes } from "../shared/html.mjs";
|
|
5
|
+
import "../shared/index.mjs";
|
|
6
|
+
import { applyTheme } from "../theme/apply.mjs";
|
|
7
|
+
import "../theme/index.mjs";
|
|
8
|
+
import { resolveAuthConsoleDistPath, resolveAuthConsolePackagePath } from "./resolve.mjs";
|
|
9
|
+
import { useRequestTheme } from "../../middleware/built-in/theme.mjs";
|
|
10
|
+
import { VITE_SERVER_STORE_KEY } from "../../middleware/built-in/assets.mjs";
|
|
11
|
+
import { UI_HTTP_CLIENT_FACTORY_STORE_KEY } from "../../middleware/built-in/ui-http-client.mjs";
|
|
12
|
+
import "../../middleware/index.mjs";
|
|
13
|
+
import { getURLBasePath } from "@authup/kit";
|
|
14
|
+
import { InternalError, isError } from "@authup/errors";
|
|
15
|
+
import path from "node:path";
|
|
16
|
+
import { CodeTransformation, isCodeTransformation } from "typeorm-extension";
|
|
17
|
+
import { read } from "locter";
|
|
18
|
+
import fs from "node:fs";
|
|
19
|
+
//#region src/adapters/http/ui/auth-console/module.ts
|
|
20
|
+
let cachedHtml;
|
|
21
|
+
let cachedManifest;
|
|
22
|
+
let cachedRender;
|
|
23
|
+
async function renderAuthConsolePage(event, ctx) {
|
|
24
|
+
const isJIT = isCodeTransformation(CodeTransformation.JUST_IN_TIME);
|
|
25
|
+
const preferences = readUIClientPreferences(event);
|
|
26
|
+
ctx.payload.config.colorMode = preferences.colorMode;
|
|
27
|
+
ctx.payload.config.locale = preferences.locale;
|
|
28
|
+
let html;
|
|
29
|
+
let manifest;
|
|
30
|
+
let render;
|
|
31
|
+
let vite;
|
|
32
|
+
if (isJIT) {
|
|
33
|
+
const packagePath = resolveAuthConsolePackagePath();
|
|
34
|
+
if (!packagePath) throw new InternalError("The auth console package (@authup/client-auth-console) is not installed.");
|
|
35
|
+
vite = event.store[VITE_SERVER_STORE_KEY];
|
|
36
|
+
html = await fs.promises.readFile(path.join(packagePath, "index.html"), "utf-8");
|
|
37
|
+
html = await vite.transformIndexHtml(ctx.url, html);
|
|
38
|
+
manifest = {};
|
|
39
|
+
render = (await vite.ssrLoadModule("/src/server.ts")).render;
|
|
40
|
+
} else {
|
|
41
|
+
const distPath = resolveAuthConsoleDistPath();
|
|
42
|
+
if (!distPath) throw new InternalError("The auth console bundle (@authup/client-auth-console) is not built or installed.");
|
|
43
|
+
html = cachedHtml ??= await fs.promises.readFile(path.join(distPath, "client", "index.html"), "utf-8");
|
|
44
|
+
manifest = cachedManifest ??= JSON.parse(await fs.promises.readFile(path.join(distPath, "client", ".vite", "ssr-manifest.json"), "utf-8"));
|
|
45
|
+
render = cachedRender ??= (await read(path.join(distPath, "server", "server.js"))).render;
|
|
46
|
+
}
|
|
47
|
+
const httpClientFactory = event.store[UI_HTTP_CLIENT_FACTORY_STORE_KEY];
|
|
48
|
+
let appHtml;
|
|
49
|
+
let preloadLinks;
|
|
50
|
+
try {
|
|
51
|
+
[appHtml, preloadLinks] = await render({
|
|
52
|
+
url: ctx.url,
|
|
53
|
+
manifest,
|
|
54
|
+
payload: ctx.payload,
|
|
55
|
+
httpClient: httpClientFactory ? httpClientFactory() : void 0
|
|
56
|
+
});
|
|
57
|
+
} catch (e) {
|
|
58
|
+
if (vite && isError(e)) vite.ssrFixStacktrace(e);
|
|
59
|
+
throw e;
|
|
60
|
+
}
|
|
61
|
+
let body = replaceTemplateMarker(html, "<!--preload-links-->", preloadLinks);
|
|
62
|
+
body = replaceTemplateMarker(body, "<!--app-html-->", appHtml);
|
|
63
|
+
body = stampHtmlAttributes(body, preferences);
|
|
64
|
+
const basePath = getURLBasePath(ctx.payload.config.baseURL);
|
|
65
|
+
body = rebaseAssetURLs(body, basePath, "/public/");
|
|
66
|
+
body = await applyTheme(body, useRequestTheme(event), basePath);
|
|
67
|
+
applyUIPageHeaders(event);
|
|
68
|
+
return body;
|
|
69
|
+
}
|
|
70
|
+
//#endregion
|
|
71
|
+
export { renderAuthConsolePage };
|
|
72
|
+
|
|
73
|
+
//# sourceMappingURL=module.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module.mjs","names":["InternalError","isError","getURLBasePath","read","fs","path","CodeTransformation","isCodeTransformation","UI_HTTP_CLIENT_FACTORY_STORE_KEY","VITE_SERVER_STORE_KEY","useRequestTheme","applyUIPageHeaders","readUIClientPreferences","rebaseAssetURLs","replaceTemplateMarker","stampHtmlAttributes","applyTheme","resolveAuthConsoleDistPath","resolveAuthConsolePackagePath","cachedHtml","cachedManifest","cachedRender","renderAuthConsolePage","event","ctx","isJIT","JUST_IN_TIME","preferences","payload","config","colorMode","locale","html","manifest","render","vite","packagePath","store","promises","readFile","join","transformIndexHtml","url","ssrLoadModule","distPath","JSON","parse","httpClientFactory","appHtml","preloadLinks","httpClient","undefined","e","ssrFixStacktrace","body","basePath","baseURL"],"sources":["../../../../../src/adapters/http/ui/auth-console/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2026.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { RenderFunction } from '@authup/client-auth-console';\nimport { InternalError, isError } from '@authup/errors';\nimport { getURLBasePath } from '@authup/kit';\nimport { read } from 'locter';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport type { IAppEvent } from 'routup';\nimport type { ViteDevServer } from 'vite';\nimport { CodeTransformation, isCodeTransformation } from 'typeorm-extension';\nimport type { IClient } from '@authup/core-http-kit';\nimport { UI_HTTP_CLIENT_FACTORY_STORE_KEY, VITE_SERVER_STORE_KEY, useRequestTheme } from '../../middleware/index.ts';\nimport {\n applyUIPageHeaders,\n readUIClientPreferences,\n rebaseAssetURLs,\n replaceTemplateMarker,\n stampHtmlAttributes,\n} from '../shared/index.ts';\nimport { applyTheme } from '../theme/index.ts';\nimport { resolveAuthConsoleDistPath, resolveAuthConsolePackagePath } from './resolve.ts';\nimport type { AuthConsoleRenderContext } from './types.ts';\n\n// Process-lifetime caches for the immutable production SSR assets. The dist\n// template, manifest and server bundle don't change after boot, so read them\n// once instead of per request (the auth/login routes are hot paths). The JIT\n// (dev) path deliberately re-reads so HMR keeps working.\nlet cachedHtml: string | undefined;\nlet cachedManifest: Record<string, any> | undefined;\nlet cachedRender: RenderFunction | undefined;\n\nexport async function renderAuthConsolePage(event: IAppEvent, ctx: AuthConsoleRenderContext): Promise<string> {\n const isJIT = isCodeTransformation(CodeTransformation.JUST_IN_TIME);\n\n // The client app hydrates locale + color-mode from the payload, so it\n // adopts the same values the HTML shell is stamped with below.\n const preferences = readUIClientPreferences(event);\n ctx.payload.config.colorMode = preferences.colorMode;\n ctx.payload.config.locale = preferences.locale;\n\n let html : string;\n let manifest : Record<string, any>;\n let render : RenderFunction;\n let vite : ViteDevServer | undefined;\n\n if (isJIT) {\n const packagePath = resolveAuthConsolePackagePath();\n if (!packagePath) {\n throw new InternalError(\n 'The auth console package (@authup/client-auth-console) is not installed.',\n );\n }\n\n vite = event.store[VITE_SERVER_STORE_KEY] as ViteDevServer;\n\n html = await fs.promises.readFile(\n path.join(packagePath, 'index.html'),\n 'utf-8',\n );\n // The URL reaches every transformIndexHtml hook as its context.\n // Pass the rendered route rather than a fixed '/', as vite's own SSR\n // guide does.\n html = await vite.transformIndexHtml(ctx.url, html);\n manifest = {};\n render = (await vite.ssrLoadModule('/src/server.ts')).render as RenderFunction;\n } else {\n const distPath = resolveAuthConsoleDistPath();\n if (!distPath) {\n throw new InternalError(\n 'The auth console bundle (@authup/client-auth-console) is not built or installed.',\n );\n }\n\n html = (cachedHtml ??= await fs.promises.readFile(\n path.join(distPath, 'client', 'index.html'),\n 'utf-8',\n ));\n manifest = (cachedManifest ??= JSON.parse(await fs.promises.readFile(\n path.join(distPath, 'client', '.vite', 'ssr-manifest.json'),\n 'utf-8',\n )));\n render = (cachedRender ??= (await read(\n path.join(distPath, 'server', 'server.js'),\n )).render as RenderFunction);\n }\n\n const httpClientFactory = event.store[UI_HTTP_CLIENT_FACTORY_STORE_KEY] as (() => IClient) | undefined;\n\n let appHtml : string;\n let preloadLinks : string;\n\n try {\n [appHtml, preloadLinks] = await render({\n url: ctx.url,\n manifest,\n payload: ctx.payload,\n httpClient: httpClientFactory ? httpClientFactory() : undefined,\n });\n } catch (e) {\n // Map the bundled frames back onto the source files before the error\n // reaches the logger. Only the dev server can do this, so a production\n // render rethrows untouched.\n if (vite && isError(e)) {\n vite.ssrFixStacktrace(e);\n }\n\n throw e;\n }\n\n let body = replaceTemplateMarker(html, '<!--preload-links-->', preloadLinks);\n body = replaceTemplateMarker(body, '<!--app-html-->', appHtml);\n\n body = stampHtmlAttributes(body, preferences);\n\n // When authup is publicly served under a sub-path (publicUrl carries a\n // pathname, e.g. https://example.com/auth), the fixed /public/ vite base\n // would bypass the proxy mapping — rebase asset URLs onto the prefix.\n const basePath = getURLBasePath(ctx.payload.config.baseURL);\n body = rebaseAssetURLs(body, basePath, '/public/');\n\n body = await applyTheme(body, useRequestTheme(event), basePath);\n\n applyUIPageHeaders(event);\n\n return body;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAiCA,IAAImB;AACJ,IAAIC;AACJ,IAAIC;AAEJ,eAAsBC,sBAAsBC,OAAkBC,KAA6B;CACvF,MAAMC,QAAQlB,qBAAqBD,mBAAmBoB,YAAY;CAIlE,MAAMC,cAAcf,wBAAwBW,KAAAA;CAC5CC,IAAII,QAAQC,OAAOC,YAAYH,YAAYG;CAC3CN,IAAII,QAAQC,OAAOE,SAASJ,YAAYI;CAExC,IAAIC;CACJ,IAAIC;CACJ,IAAIC;CACJ,IAAIC;CAEJ,IAAIV,OAAO;EACP,MAAMW,cAAclB,8BAAAA;EACpB,IAAI,CAACkB,aACD,MAAM,IAAIpC,cACN,0EAAA;EAIRmC,OAAOZ,MAAMc,MAAM5B;EAEnBuB,OAAO,MAAM5B,GAAGkC,SAASC,SACrBlC,KAAKmC,KAAKJ,aAAa,YAAA,GACvB,OAAA;EAKJJ,OAAO,MAAMG,KAAKM,mBAAmBjB,IAAIkB,KAAKV,IAAAA;EAC9CC,WAAW,CAAC;EACZC,UAAU,MAAMC,KAAKQ,cAAc,gBAAA,EAAA,CAAmBT;CAC1D,OAAO;EACH,MAAMU,WAAW3B,2BAAAA;EACjB,IAAI,CAAC2B,UACD,MAAM,IAAI5C,cACN,kFAAA;EAIRgC,OAAQb,eAAe,MAAMf,GAAGkC,SAASC,SACrClC,KAAKmC,KAAKI,UAAU,UAAU,YAAA,GAC9B,OAAA;EAEJX,WAAYb,mBAAmByB,KAAKC,MAAM,MAAM1C,GAAGkC,SAASC,SACxDlC,KAAKmC,KAAKI,UAAU,UAAU,SAAS,mBAAA,GACvC,OAAA,CAAA;EAEJV,SAAUb,kBAAkB,MAAMlB,KAC9BE,KAAKmC,KAAKI,UAAU,UAAU,WAAA,CAAA,EAAA,CAC/BV;CACP;CAEA,MAAMa,oBAAoBxB,MAAMc,MAAM7B;CAEtC,IAAIwC;CACJ,IAAIC;CAEJ,IAAI;EACA,CAACD,SAASC,gBAAgB,MAAMf,OAAO;GACnCQ,KAAKlB,IAAIkB;GACTT;GACAL,SAASJ,IAAII;GACbsB,YAAYH,oBAAoBA,kBAAAA,IAAsBI,KAAAA;EAC1D,CAAA;CACJ,SAASC,GAAG;EAIR,IAAIjB,QAAQlC,QAAQmD,CAAAA,GAChBjB,KAAKkB,iBAAiBD,CAAAA;EAG1B,MAAMA;CACV;CAEA,IAAIE,OAAOxC,sBAAsBkB,MAAM,wBAAwBiB,YAAAA;CAC/DK,OAAOxC,sBAAsBwC,MAAM,mBAAmBN,OAAAA;CAEtDM,OAAOvC,oBAAoBuC,MAAM3B,WAAAA;CAKjC,MAAM4B,WAAWrD,eAAesB,IAAII,QAAQC,OAAO2B,OAAO;CAC1DF,OAAOzC,gBAAgByC,MAAMC,UAAU,UAAA;CAEvCD,OAAO,MAAMtC,WAAWsC,MAAM5C,gBAAgBa,KAAAA,GAAQgC,QAAAA;CAEtD5C,mBAAmBY,KAAAA;CAEnB,OAAO+B;AACX"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Point the resolution at a substituted package (config `authConsolePath`)
|
|
3
|
+
* instead of the node_modules walk. Called once at boot.
|
|
4
|
+
*/
|
|
5
|
+
export declare function setAuthConsolePackagePath(value: string | undefined): void;
|
|
6
|
+
/**
|
|
7
|
+
* Locate the auth console package. The SSR auth workflow UI ships as
|
|
8
|
+
* `@authup/client-auth-console` (a server-core dependency), so the
|
|
9
|
+
* node_modules ancestor walk from server-core's own package root (locter's
|
|
10
|
+
* `locateUp`) finds it for the workspace (symlink onto
|
|
11
|
+
* apps/client-auth-console) and for a published install alike. Only a
|
|
12
|
+
* positive result is cached.
|
|
13
|
+
*/
|
|
14
|
+
export declare function resolveAuthConsolePackagePath(): string | undefined;
|
|
15
|
+
/**
|
|
16
|
+
* Locate the BUILT auth console bundle (`dist/client` template + assets,
|
|
17
|
+
* `dist/server/server.js` render entry). Only a positive result is cached —
|
|
18
|
+
* a dev building the package after boot is picked up on the next request.
|
|
19
|
+
*/
|
|
20
|
+
export declare function resolveAuthConsoleDistPath(): string | undefined;
|
|
21
|
+
//# sourceMappingURL=resolve.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../../../../src/adapters/http/ui/auth-console/resolve.ts"],"names":[],"mappings":"AAgBA;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAI,IAAI,CAI1E;AAED;;;;;;;GAOG;AACH,wBAAgB,6BAA6B,IAAK,MAAM,GAAG,SAAS,CAoBnE;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,IAAK,MAAM,GAAG,SAAS,CAehE"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import "node:path";
|
|
2
|
+
import "node:url";
|
|
3
|
+
import.meta.url;
|
|
4
|
+
import { PACKAGE_PATH } from "../../../../path.mjs";
|
|
5
|
+
import path from "node:path";
|
|
6
|
+
import { locateUpSync } from "locter";
|
|
7
|
+
import fs from "node:fs";
|
|
8
|
+
//#region src/adapters/http/ui/auth-console/resolve.ts
|
|
9
|
+
let cachedPackagePath;
|
|
10
|
+
let cachedDistPath;
|
|
11
|
+
let overridePackagePath;
|
|
12
|
+
/**
|
|
13
|
+
* Point the resolution at a substituted package (config `authConsolePath`)
|
|
14
|
+
* instead of the node_modules walk. Called once at boot.
|
|
15
|
+
*/ function setAuthConsolePackagePath(value) {
|
|
16
|
+
overridePackagePath = value || void 0;
|
|
17
|
+
cachedPackagePath = void 0;
|
|
18
|
+
cachedDistPath = void 0;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Locate the auth console package. The SSR auth workflow UI ships as
|
|
22
|
+
* `@authup/client-auth-console` (a server-core dependency), so the
|
|
23
|
+
* node_modules ancestor walk from server-core's own package root (locter's
|
|
24
|
+
* `locateUp`) finds it for the workspace (symlink onto
|
|
25
|
+
* apps/client-auth-console) and for a published install alike. Only a
|
|
26
|
+
* positive result is cached.
|
|
27
|
+
*/ function resolveAuthConsolePackagePath() {
|
|
28
|
+
if (cachedPackagePath) return cachedPackagePath;
|
|
29
|
+
if (overridePackagePath) {
|
|
30
|
+
cachedPackagePath = overridePackagePath;
|
|
31
|
+
return cachedPackagePath;
|
|
32
|
+
}
|
|
33
|
+
const manifest = locateUpSync("node_modules/@authup/client-auth-console/package.json", { cwd: PACKAGE_PATH });
|
|
34
|
+
if (manifest) cachedPackagePath = manifest.directory;
|
|
35
|
+
return cachedPackagePath;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Locate the BUILT auth console bundle (`dist/client` template + assets,
|
|
39
|
+
* `dist/server/server.js` render entry). Only a positive result is cached —
|
|
40
|
+
* a dev building the package after boot is picked up on the next request.
|
|
41
|
+
*/ function resolveAuthConsoleDistPath() {
|
|
42
|
+
if (cachedDistPath) return cachedDistPath;
|
|
43
|
+
const packagePath = resolveAuthConsolePackagePath();
|
|
44
|
+
if (packagePath) {
|
|
45
|
+
const distPath = path.join(packagePath, "dist");
|
|
46
|
+
if (fs.existsSync(path.join(distPath, "client", "index.html"))) cachedDistPath = distPath;
|
|
47
|
+
}
|
|
48
|
+
return cachedDistPath;
|
|
49
|
+
}
|
|
50
|
+
//#endregion
|
|
51
|
+
export { resolveAuthConsoleDistPath, resolveAuthConsolePackagePath, setAuthConsolePackagePath };
|
|
52
|
+
|
|
53
|
+
//# sourceMappingURL=resolve.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.mjs","names":["locateUpSync","fs","path","PACKAGE_PATH","cachedPackagePath","cachedDistPath","overridePackagePath","setAuthConsolePackagePath","value","undefined","resolveAuthConsolePackagePath","manifest","cwd","directory","resolveAuthConsoleDistPath","packagePath","distPath","join","existsSync"],"sources":["../../../../../src/adapters/http/ui/auth-console/resolve.ts"],"sourcesContent":["/*\n * Copyright (c) 2026.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { locateUpSync } from 'locter';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { PACKAGE_PATH } from '../../../../path.ts';\n\nlet cachedPackagePath: string | undefined;\nlet cachedDistPath: string | undefined;\nlet overridePackagePath: string | undefined;\n\n/**\n * Point the resolution at a substituted package (config `authConsolePath`)\n * instead of the node_modules walk. Called once at boot.\n */\nexport function setAuthConsolePackagePath(value: string | undefined) : void {\n overridePackagePath = value || undefined;\n cachedPackagePath = undefined;\n cachedDistPath = undefined;\n}\n\n/**\n * Locate the auth console package. The SSR auth workflow UI ships as\n * `@authup/client-auth-console` (a server-core dependency), so the\n * node_modules ancestor walk from server-core's own package root (locter's\n * `locateUp`) finds it for the workspace (symlink onto\n * apps/client-auth-console) and for a published install alike. Only a\n * positive result is cached.\n */\nexport function resolveAuthConsolePackagePath() : string | undefined {\n if (cachedPackagePath) {\n return cachedPackagePath;\n }\n\n if (overridePackagePath) {\n cachedPackagePath = overridePackagePath;\n\n return cachedPackagePath;\n }\n\n const manifest = locateUpSync(\n 'node_modules/@authup/client-auth-console/package.json',\n { cwd: PACKAGE_PATH },\n );\n if (manifest) {\n cachedPackagePath = manifest.directory;\n }\n\n return cachedPackagePath;\n}\n\n/**\n * Locate the BUILT auth console bundle (`dist/client` template + assets,\n * `dist/server/server.js` render entry). Only a positive result is cached —\n * a dev building the package after boot is picked up on the next request.\n */\nexport function resolveAuthConsoleDistPath() : string | undefined {\n if (cachedDistPath) {\n return cachedDistPath;\n }\n\n const packagePath = resolveAuthConsolePackagePath();\n if (packagePath) {\n const distPath = path.join(packagePath, 'dist');\n\n if (fs.existsSync(path.join(distPath, 'client', 'index.html'))) {\n cachedDistPath = distPath;\n }\n }\n\n return cachedDistPath;\n}\n"],"mappings":";;;;;;;;AAYA,IAAII;AACJ,IAAIC;AACJ,IAAIC;;;;GAMJ,SAAgBC,0BAA0BC,OAAyB;CAC/DF,sBAAsBE,SAASC,KAAAA;CAC/BL,oBAAoBK,KAAAA;CACpBJ,iBAAiBI,KAAAA;AACrB;;;;;;;;GAUA,SAAgBC,gCAAAA;CACZ,IAAIN,mBACA,OAAOA;CAGX,IAAIE,qBAAqB;EACrBF,oBAAoBE;EAEpB,OAAOF;CACX;CAEA,MAAMO,WAAWX,aACb,yDACA,EAAEY,KAAKT,aAAa,CAAA;CAExB,IAAIQ,UACAP,oBAAoBO,SAASE;CAGjC,OAAOT;AACX;;;;;GAOA,SAAgBU,6BAAAA;CACZ,IAAIT,gBACA,OAAOA;CAGX,MAAMU,cAAcL,8BAAAA;CACpB,IAAIK,aAAa;EACb,MAAMC,WAAWd,KAAKe,KAAKF,aAAa,MAAA;EAExC,IAAId,GAAGiB,WAAWhB,KAAKe,KAAKD,UAAU,UAAU,YAAA,CAAA,GAC5CX,iBAAiBW;CAEzB;CAEA,OAAOX;AACX"}
|
|
@@ -1,12 +1,5 @@
|
|
|
1
|
-
import type { StatusResponseFeatures } from '@authup/core-http-kit';
|
|
2
1
|
import type { IAppEvent } from 'routup';
|
|
3
|
-
|
|
4
|
-
url: string;
|
|
5
|
-
baseURL: string;
|
|
6
|
-
features: StatusResponseFeatures;
|
|
7
|
-
realmAware?: boolean;
|
|
8
|
-
tokenAware?: boolean;
|
|
9
|
-
};
|
|
2
|
+
import type { ServeWorkflowPageOptions } from './types.ts';
|
|
10
3
|
/**
|
|
11
4
|
* Single SSR payload-assembly path for the auth workflow GET routes:
|
|
12
5
|
* whitelists query params, applies the open-redirect guard, and renders.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../../../../src/adapters/http/ui/auth-console/serve.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAGxC,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAE3D;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC7B,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,wBAAwB,GAClC,OAAO,CAAC,MAAM,CAAC,CAwBjB"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import "node:path";
|
|
2
2
|
import "node:url";
|
|
3
3
|
import.meta.url;
|
|
4
|
-
import { sanitizeRelativeRedirect } from "
|
|
5
|
-
import "
|
|
6
|
-
import {
|
|
4
|
+
import { sanitizeRelativeRedirect } from "../../request/helpers/redirect.mjs";
|
|
5
|
+
import "../../request/index.mjs";
|
|
6
|
+
import { renderAuthConsolePage } from "./module.mjs";
|
|
7
7
|
import { useRequestQuery } from "@routup/basic/query";
|
|
8
|
-
//#region src/adapters/http/ui/serve.ts
|
|
8
|
+
//#region src/adapters/http/ui/auth-console/serve.ts
|
|
9
9
|
/**
|
|
10
10
|
* Single SSR payload-assembly path for the auth workflow GET routes:
|
|
11
11
|
* whitelists query params, applies the open-redirect guard, and renders.
|
|
@@ -21,7 +21,7 @@ import { useRequestQuery } from "@routup/basic/query";
|
|
|
21
21
|
data.realmId = typeof realmId === "string" ? realmId : void 0;
|
|
22
22
|
}
|
|
23
23
|
if (options.tokenAware) data.token = typeof query.token === "string" ? query.token : void 0;
|
|
24
|
-
return
|
|
24
|
+
return renderAuthConsolePage(event, {
|
|
25
25
|
url: options.url,
|
|
26
26
|
payload: {
|
|
27
27
|
config: { baseURL: options.baseURL },
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serve.mjs","names":["useRequestQuery","sanitizeRelativeRedirect","renderAuthConsolePage","serveWorkflowPage","event","options","query","data","features","redirect","realmAware","realmId","realm_id","undefined","tokenAware","token","url","payload","config","baseURL"],"sources":["../../../../../src/adapters/http/ui/auth-console/serve.ts"],"sourcesContent":["/*\n * Copyright (c) 2026.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { useRequestQuery } from '@routup/basic/query';\nimport type { IAppEvent } from 'routup';\nimport { sanitizeRelativeRedirect } from '../../request/index.ts';\nimport { renderAuthConsolePage } from './module.ts';\nimport type { ServeWorkflowPageOptions } from './types.ts';\n\n/**\n * Single SSR payload-assembly path for the auth workflow GET routes:\n * whitelists query params, applies the open-redirect guard, and renders.\n * Keeps the four workflow controllers as thin POST adapters.\n */\nexport function serveWorkflowPage(\n event: IAppEvent,\n options: ServeWorkflowPageOptions,\n): Promise<string> {\n const query = useRequestQuery(event);\n\n const data: Record<string, any> = {\n features: options.features,\n redirect: sanitizeRelativeRedirect(query.redirect),\n };\n\n if (options.realmAware) {\n const realmId = typeof query.realmId === 'string' ? query.realmId : query.realm_id;\n data.realmId = typeof realmId === 'string' ? realmId : undefined;\n }\n\n if (options.tokenAware) {\n data.token = typeof query.token === 'string' ? query.token : undefined;\n }\n\n return renderAuthConsolePage(event, {\n url: options.url,\n payload: {\n config: { baseURL: options.baseURL },\n data,\n },\n });\n}\n"],"mappings":";;;;;;;;;;;;GAkBA,SAAgBG,kBACZC,OACAC,SAAiC;CAEjC,MAAMC,QAAQN,gBAAgBI,KAAAA;CAE9B,MAAMG,OAA4B;EAC9BC,UAAUH,QAAQG;EAClBC,UAAUR,yBAAyBK,MAAMG,QAAQ;CACrD;CAEA,IAAIJ,QAAQK,YAAY;EACpB,MAAMC,UAAU,OAAOL,MAAMK,YAAY,WAAWL,MAAMK,UAAUL,MAAMM;EAC1EL,KAAKI,UAAU,OAAOA,YAAY,WAAWA,UAAUE,KAAAA;CAC3D;CAEA,IAAIR,QAAQS,YACRP,KAAKQ,QAAQ,OAAOT,MAAMS,UAAU,WAAWT,MAAMS,QAAQF,KAAAA;CAGjE,OAAOX,sBAAsBE,OAAO;EAChCY,KAAKX,QAAQW;EACbC,SAAS;GACLC,QAAQ,EAAEC,SAASd,QAAQc,QAAQ;GACnCZ;EACJ;CACJ,CAAA;AACJ"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { HydrationPayload } from '@authup/client-auth-console';
|
|
2
|
+
import type { StatusResponseFeatures } from '@authup/core-http-kit';
|
|
3
|
+
export type AuthConsoleRenderContext = {
|
|
4
|
+
url: string;
|
|
5
|
+
payload: HydrationPayload;
|
|
6
|
+
};
|
|
7
|
+
export type ServeWorkflowPageOptions = {
|
|
8
|
+
url: string;
|
|
9
|
+
baseURL: string;
|
|
10
|
+
features: StatusResponseFeatures;
|
|
11
|
+
realmAware?: boolean;
|
|
12
|
+
tokenAware?: boolean;
|
|
13
|
+
};
|
|
14
|
+
export type InternalUIHttpClientContext = {
|
|
15
|
+
/**
|
|
16
|
+
* The public base URL (config `publicUrl`) — stays the client's
|
|
17
|
+
* `baseURL` so URLs rendered into the HTML remain user-facing.
|
|
18
|
+
*/
|
|
19
|
+
publicURL: string;
|
|
20
|
+
/**
|
|
21
|
+
* The server's own listen address (e.g. http://localhost:3010/) —
|
|
22
|
+
* where the transport actually dispatches requests.
|
|
23
|
+
*/
|
|
24
|
+
internalURL: string;
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/adapters/http/ui/auth-console/types.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAEpE,MAAM,MAAM,wBAAwB,GAAG;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,gBAAgB,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,sBAAsB,CAAC;IAIjC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACtC;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAC;CACvB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/adapters/http/ui/console-packages/index.ts"],"names":[],"mappings":"AAOA,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
|