@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
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@authup/server-core",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "1.0.0-beta.
|
|
4
|
+
"version": "1.0.0-beta.59",
|
|
5
5
|
"description": "This is a standalone application.",
|
|
6
6
|
"license": "AGPL-3.0-only",
|
|
7
7
|
"main": "dist/index.mjs",
|
|
@@ -15,14 +15,11 @@
|
|
|
15
15
|
"cli-dev": "npm run build:server && npm run cli",
|
|
16
16
|
"cli-dev-src": "nodemon --watch src --exec \"npm run build:server && node dist/cli/index.mjs\"",
|
|
17
17
|
"cli-dev-dist": "nodemon --watch dist --exec \"node dist/cli/index.mjs\"",
|
|
18
|
-
"build:ui:client": "vite build --config ui/vite.config.ts --ssrManifest .vite/ssr-manifest.json --outDir ../dist/ui/client ui",
|
|
19
|
-
"build:ui:server": "vite build --config ui/vite.config.ts --ssr src/server.ts --outDir ../dist/ui/server ui",
|
|
20
|
-
"build:ui": "npm run build:ui:server && npm run build:ui:client",
|
|
21
18
|
"build:server:types": "tsc --emitDeclarationOnly -p tsconfig.build.json",
|
|
22
19
|
"build:server:js": "tsdown",
|
|
23
20
|
"build:server": "npm run build:server:js && npm run build:server:types && npm run build:swagger",
|
|
24
21
|
"build:swagger": "trapi generate",
|
|
25
|
-
"build": "rimraf ./dist && npm run build:server
|
|
22
|
+
"build": "rimraf ./dist && npm run build:server",
|
|
26
23
|
"test": "cross-env NODE_ENV=test vitest run --config test/vitest.config.ts",
|
|
27
24
|
"test:mysql": "cross-env DB_TYPE=mysql DB_HOST=127.0.0.1 DB_USERNAME=root DB_PASSWORD=start123 DB_DATABASE=app vitest run --config test/vitest.config.ts",
|
|
28
25
|
"test:psql": "cross-env DB_TYPE=postgres DB_HOST=127.0.0.1 DB_USERNAME=postgres DB_PASSWORD=start123 DB_DATABASE=app vitest run --config test/vitest.config.ts",
|
|
@@ -68,22 +65,24 @@
|
|
|
68
65
|
},
|
|
69
66
|
"homepage": "https://github.com/authup/authup#readme",
|
|
70
67
|
"dependencies": {
|
|
71
|
-
"@authup/access": "^1.0.0-beta.
|
|
72
|
-
"@authup/
|
|
73
|
-
"@authup/
|
|
74
|
-
"@authup/
|
|
75
|
-
"@authup/
|
|
76
|
-
"@authup/
|
|
77
|
-
"@authup/
|
|
78
|
-
"@authup/
|
|
68
|
+
"@authup/access": "^1.0.0-beta.59",
|
|
69
|
+
"@authup/client-account-console": "^1.0.0-beta.59",
|
|
70
|
+
"@authup/client-auth-console": "^1.0.0-beta.59",
|
|
71
|
+
"@authup/core-http-kit": "^1.0.0-beta.59",
|
|
72
|
+
"@authup/core-kit": "^1.0.0-beta.59",
|
|
73
|
+
"@authup/errors": "^1.0.0-beta.59",
|
|
74
|
+
"@authup/i18n": "^1.0.0-beta.59",
|
|
75
|
+
"@authup/kit": "^1.0.0-beta.59",
|
|
76
|
+
"@authup/server-kit": "^1.0.0-beta.59",
|
|
77
|
+
"@authup/specs": "^1.0.0-beta.59",
|
|
79
78
|
"@ebec/http": "^4.2.0",
|
|
80
79
|
"@hapic/oauth2": "^4.0.1",
|
|
81
80
|
"@peculiar/x509": "^2.0.0",
|
|
82
|
-
"@rapiq/adapter-memory": "^2.0.0-beta.
|
|
83
|
-
"@rapiq/adapter-sql": "^2.0.0-beta.
|
|
84
|
-
"@rapiq/adapter-typeorm": "^2.0.0-beta.
|
|
85
|
-
"@rapiq/codec-url": "^2.0.0-beta.
|
|
86
|
-
"@rapiq/core": "^2.0.0-beta.
|
|
81
|
+
"@rapiq/adapter-memory": "^2.0.0-beta.15",
|
|
82
|
+
"@rapiq/adapter-sql": "^2.0.0-beta.15",
|
|
83
|
+
"@rapiq/adapter-typeorm": "^2.0.0-beta.15",
|
|
84
|
+
"@rapiq/codec-url": "^2.0.0-beta.15",
|
|
85
|
+
"@rapiq/core": "^2.0.0-beta.15",
|
|
87
86
|
"@routup/assets": "^5.0.0",
|
|
88
87
|
"@routup/basic": "^3.0.0",
|
|
89
88
|
"@routup/cors": "^2.0.0",
|
|
@@ -93,17 +92,17 @@
|
|
|
93
92
|
"@routup/rate-limit": "^4.0.0",
|
|
94
93
|
"@routup/swagger-ui": "^4.0.0",
|
|
95
94
|
"@simplewebauthn/server": "^13.3.2",
|
|
96
|
-
"@validup/zod": "^0.
|
|
97
|
-
"better-sqlite3": "^13.0.
|
|
95
|
+
"@validup/zod": "^1.0.0",
|
|
96
|
+
"better-sqlite3": "^13.0.2",
|
|
98
97
|
"change-case": "^5.4.4",
|
|
99
98
|
"citty": "^0.2.2",
|
|
100
|
-
"confinity": "^2.0.
|
|
99
|
+
"confinity": "^2.0.1",
|
|
101
100
|
"dotenv": "^17.4.1",
|
|
102
101
|
"dycraft": "^1.1.0",
|
|
103
|
-
"eldin": "^1.
|
|
102
|
+
"eldin": "^1.3.0",
|
|
104
103
|
"envix": "^1.5.0",
|
|
105
104
|
"hapic": "^3.0.1",
|
|
106
|
-
"ilingo": "^6.
|
|
105
|
+
"ilingo": "^6.1.0",
|
|
107
106
|
"ldapjs": "^3.0.7",
|
|
108
107
|
"locter": "^4.0.0",
|
|
109
108
|
"mysql2": "^3.23.2",
|
|
@@ -121,61 +120,25 @@
|
|
|
121
120
|
"typeorm": "1.1.0",
|
|
122
121
|
"typeorm-extension": "^4.0.0-beta.1",
|
|
123
122
|
"uncrypto": "^0.1.3",
|
|
124
|
-
"validup": "^0.
|
|
123
|
+
"validup": "^1.0.0",
|
|
125
124
|
"zod": "^4.4.3"
|
|
126
125
|
},
|
|
127
126
|
"devDependencies": {
|
|
128
|
-
"@authup/
|
|
129
|
-
"@authup/client-web-kit-theme": "^1.0.0-beta.57",
|
|
130
|
-
"@authup/client-web-theme": "^1.0.0-beta.57",
|
|
131
|
-
"@authup/server-test-kit": "^1.0.0-beta.57",
|
|
127
|
+
"@authup/server-test-kit": "^1.0.0-beta.59",
|
|
132
128
|
"@faker-js/faker": "^10.5.0",
|
|
133
|
-
"@
|
|
134
|
-
"@fontsource/nunito": "^5.3.0",
|
|
135
|
-
"@iconify-json/fa6-brands": "^1.2.0",
|
|
136
|
-
"@iconify-json/fa6-solid": "^1.2.0",
|
|
137
|
-
"@iconify/vue": "^5.0.0",
|
|
138
|
-
"@ilingo/validup": "^1.0.1",
|
|
139
|
-
"@ilingo/validup-vue": "^1.0.1",
|
|
140
|
-
"@ilingo/vue": "^6.0.0",
|
|
141
|
-
"@tailwindcss/vite": "^4.3.3",
|
|
142
|
-
"@trapi/cli": "^2.0.3",
|
|
129
|
+
"@trapi/cli": "^2.0.4",
|
|
143
130
|
"@types/ldapjs": "^3.0.6",
|
|
144
131
|
"@types/nodemailer": "^8.0.0",
|
|
145
132
|
"@types/qrcode": "^1.5.6",
|
|
146
133
|
"@types/supertest": "^7.2.1",
|
|
147
|
-
"@validup/vue": "^0.3.3",
|
|
148
|
-
"@vitejs/plugin-vue": "^6.0.8",
|
|
149
|
-
"@vuecs/button": "^1.4.0",
|
|
150
|
-
"@vuecs/core": "^3.5.0",
|
|
151
|
-
"@vuecs/countdown": "^2.1.0",
|
|
152
|
-
"@vuecs/design": "^1.1.0",
|
|
153
|
-
"@vuecs/elements": "^1.5.0",
|
|
154
|
-
"@vuecs/forms": "^5.4.0",
|
|
155
|
-
"@vuecs/icon": "^1.1.0",
|
|
156
|
-
"@vuecs/icons-font-awesome": "^1.3.0",
|
|
157
|
-
"@vuecs/link": "^2.1.0",
|
|
158
|
-
"@vuecs/list": "^1.2.0",
|
|
159
|
-
"@vuecs/locale": "^1.1.0",
|
|
160
|
-
"@vuecs/navigation": "^4.4.0",
|
|
161
|
-
"@vuecs/overlays": "^1.3.0",
|
|
162
|
-
"@vuecs/pagination": "^2.2.0",
|
|
163
|
-
"@vuecs/placeholder": "^1.1.0",
|
|
164
|
-
"@vuecs/table": "^1.6.0",
|
|
165
|
-
"@vuecs/theme-tailwind": "^6.4.0",
|
|
166
|
-
"@vuecs/timeago": "^2.2.0",
|
|
167
134
|
"jest-serial-runner": "^1.2.1",
|
|
168
135
|
"nodemon": "^3.1.14",
|
|
169
|
-
"pinia": "^3.0.0",
|
|
170
136
|
"supertest": "^7.2.2",
|
|
171
|
-
"tailwindcss": "^4.3.1",
|
|
172
137
|
"testcontainers": "^12.0.4",
|
|
173
138
|
"ts-node": "^10.8.2",
|
|
174
139
|
"unplugin-swc": "^1.5.9",
|
|
175
140
|
"vite": "^8.1.3",
|
|
176
|
-
"vitest": "^4.0.14"
|
|
177
|
-
"vue": "^3.5.40",
|
|
178
|
-
"vue-router": "^5.0.7"
|
|
141
|
+
"vitest": "^4.0.14"
|
|
179
142
|
},
|
|
180
143
|
"publishConfig": {
|
|
181
144
|
"access": "public"
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Rewrite root-absolute /public/ asset references (script/link/preload tags
|
|
3
|
-
* emitted with the fixed vite base) so they carry the path prefix under which
|
|
4
|
-
* authup is publicly served (e.g. /auth/public/...). The reverse proxy is
|
|
5
|
-
* expected to strip the prefix before the request reaches authup, so the
|
|
6
|
-
* assets middleware keeps serving at /public.
|
|
7
|
-
*/
|
|
8
|
-
export declare function rebasePublicAssetURLs(html: string, basePath: string): string;
|
|
9
|
-
//# sourceMappingURL=base-path.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"base-path.d.ts","sourceRoot":"","sources":["../../../../src/adapters/http/ui/base-path.ts"],"names":[],"mappings":"AAOA;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAI,MAAM,CAM7E"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import "node:path";
|
|
2
|
-
import "node:url";
|
|
3
|
-
import.meta.url;
|
|
4
|
-
//#region src/adapters/http/ui/base-path.ts
|
|
5
|
-
/**
|
|
6
|
-
* Rewrite root-absolute /public/ asset references (script/link/preload tags
|
|
7
|
-
* emitted with the fixed vite base) so they carry the path prefix under which
|
|
8
|
-
* authup is publicly served (e.g. /auth/public/...). The reverse proxy is
|
|
9
|
-
* expected to strip the prefix before the request reaches authup, so the
|
|
10
|
-
* assets middleware keeps serving at /public.
|
|
11
|
-
*/ function rebasePublicAssetURLs(html, basePath) {
|
|
12
|
-
if (!basePath) return html;
|
|
13
|
-
return html.replace(/(src|href)="\/public\//g, `$1="${basePath}/public/`);
|
|
14
|
-
}
|
|
15
|
-
//#endregion
|
|
16
|
-
export { rebasePublicAssetURLs };
|
|
17
|
-
|
|
18
|
-
//# sourceMappingURL=base-path.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"base-path.mjs","names":["rebasePublicAssetURLs","html","basePath","replace"],"sources":["../../../../src/adapters/http/ui/base-path.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\n/**\n * Rewrite root-absolute /public/ asset references (script/link/preload tags\n * emitted with the fixed vite base) so they carry the path prefix under which\n * authup is publicly served (e.g. /auth/public/...). The reverse proxy is\n * expected to strip the prefix before the request reaches authup, so the\n * assets middleware keeps serving at /public.\n */\nexport function rebasePublicAssetURLs(html: string, basePath: string) : string {\n if (!basePath) {\n return html;\n }\n\n return html.replace(/(src|href)=\"\\/public\\//g, `$1=\"${basePath}/public/`);\n}\n"],"mappings":";;;;;;;;;;GAcA,SAAgBA,sBAAsBC,MAAcC,UAAgB;CAChE,IAAI,CAACA,UACD,OAAOD;CAGX,OAAOA,KAAKE,QAAQ,2BAA2B,OAAOD,SAAS,SAAS;AAC5E"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"internal-http-client.d.ts","sourceRoot":"","sources":["../../../../src/adapters/http/ui/internal-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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"internal-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/internal-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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../../../src/adapters/http/ui/render.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAQxC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAYlD,wBAAsB,YAAY,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAqF1F"}
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import "node:path";
|
|
2
|
-
import "node:url";
|
|
3
|
-
import.meta.url;
|
|
4
|
-
import { LOCALE_COOKIE } from "../request/helpers/locale.mjs";
|
|
5
|
-
import { rebasePublicAssetURLs } from "./base-path.mjs";
|
|
6
|
-
import { UI_DIST_PATH, UI_SOURCE_PATH } from "../../../path.mjs";
|
|
7
|
-
import { VITE_SERVER_STORE_KEY } from "../middleware/built-in/assets.mjs";
|
|
8
|
-
import { UI_HTTP_CLIENT_FACTORY_STORE_KEY } from "../middleware/built-in/ui-http-client.mjs";
|
|
9
|
-
import "../middleware/index.mjs";
|
|
10
|
-
import { getURLBasePath } from "@authup/kit";
|
|
11
|
-
import path from "node:path";
|
|
12
|
-
import { useRequestCookie } from "@routup/basic/cookie";
|
|
13
|
-
import { CodeTransformation, isCodeTransformation } from "typeorm-extension";
|
|
14
|
-
import { read } from "locter";
|
|
15
|
-
import fs from "node:fs";
|
|
16
|
-
//#region src/adapters/http/ui/render.ts
|
|
17
|
-
const COLOR_MODE_COOKIE = "vc-color-mode";
|
|
18
|
-
let cachedHtml;
|
|
19
|
-
let cachedManifest;
|
|
20
|
-
let cachedRender;
|
|
21
|
-
async function renderUIPage(event, ctx) {
|
|
22
|
-
const isJIT = isCodeTransformation(CodeTransformation.JUST_IN_TIME);
|
|
23
|
-
const colorMode = useRequestCookie(event, COLOR_MODE_COOKIE);
|
|
24
|
-
ctx.payload.config.colorMode = colorMode;
|
|
25
|
-
const locale = useRequestCookie(event, LOCALE_COOKIE);
|
|
26
|
-
ctx.payload.config.locale = locale;
|
|
27
|
-
let html;
|
|
28
|
-
let manifest;
|
|
29
|
-
let render;
|
|
30
|
-
if (isJIT) {
|
|
31
|
-
const vite = event.store[VITE_SERVER_STORE_KEY];
|
|
32
|
-
html = await fs.promises.readFile(path.join(UI_SOURCE_PATH, "index.html"), "utf-8");
|
|
33
|
-
html = await vite.transformIndexHtml("/", html);
|
|
34
|
-
manifest = {};
|
|
35
|
-
render = (await vite.ssrLoadModule("/src/server.ts")).render;
|
|
36
|
-
} else {
|
|
37
|
-
html = cachedHtml ??= await fs.promises.readFile(path.join(UI_DIST_PATH, "client", "index.html"), "utf-8");
|
|
38
|
-
manifest = cachedManifest ??= JSON.parse(await fs.promises.readFile(path.join(UI_DIST_PATH, "client", ".vite", "ssr-manifest.json"), "utf-8"));
|
|
39
|
-
render = cachedRender ??= (await read(path.join(UI_DIST_PATH, "server", "server.js"))).render;
|
|
40
|
-
}
|
|
41
|
-
const httpClientFactory = event.store[UI_HTTP_CLIENT_FACTORY_STORE_KEY];
|
|
42
|
-
const [appHtml, preloadLinks] = await render({
|
|
43
|
-
url: ctx.url,
|
|
44
|
-
manifest,
|
|
45
|
-
payload: ctx.payload,
|
|
46
|
-
httpClient: httpClientFactory ? httpClientFactory() : void 0
|
|
47
|
-
});
|
|
48
|
-
let body = html.replace("<!--preload-links-->", preloadLinks).replace("<!--app-html-->", appHtml);
|
|
49
|
-
let htmlAttrs = "lang=\"en\"";
|
|
50
|
-
if (locale && /^[a-zA-Z]{2,3}(-[a-zA-Z0-9]+)*$/.test(locale)) htmlAttrs = `lang="${locale}"`;
|
|
51
|
-
if (colorMode === "dark" || colorMode === "light") htmlAttrs += ` class="${colorMode}"`;
|
|
52
|
-
body = body.replace(/<html\b[^>]*>/i, `<html ${htmlAttrs}>`);
|
|
53
|
-
body = rebasePublicAssetURLs(body, getURLBasePath(ctx.payload.config.baseURL));
|
|
54
|
-
event.response.headers.set("content-type", "text/html; charset=utf-8");
|
|
55
|
-
event.response.headers.set("content-security-policy", "frame-ancestors 'none'");
|
|
56
|
-
event.response.headers.set("x-frame-options", "DENY");
|
|
57
|
-
event.response.headers.set("referrer-policy", "no-referrer");
|
|
58
|
-
return body;
|
|
59
|
-
}
|
|
60
|
-
//#endregion
|
|
61
|
-
export { renderUIPage };
|
|
62
|
-
|
|
63
|
-
//# sourceMappingURL=render.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"render.mjs","names":["getURLBasePath","useRequestCookie","read","fs","path","CodeTransformation","isCodeTransformation","UI_DIST_PATH","UI_SOURCE_PATH","UI_HTTP_CLIENT_FACTORY_STORE_KEY","VITE_SERVER_STORE_KEY","LOCALE_COOKIE","rebasePublicAssetURLs","COLOR_MODE_COOKIE","cachedHtml","cachedManifest","cachedRender","renderUIPage","event","ctx","isJIT","JUST_IN_TIME","colorMode","payload","config","locale","html","manifest","render","vite","store","promises","readFile","join","transformIndexHtml","ssrLoadModule","JSON","parse","httpClientFactory","appHtml","preloadLinks","url","httpClient","undefined","body","replace","htmlAttrs","test","baseURL","response","headers","set"],"sources":["../../../../src/adapters/http/ui/render.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 { getURLBasePath } from '@authup/kit';\nimport { useRequestCookie } from '@routup/basic/cookie';\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_DIST_PATH, UI_SOURCE_PATH } from '../../../path.ts';\nimport { UI_HTTP_CLIENT_FACTORY_STORE_KEY, VITE_SERVER_STORE_KEY } from '../middleware/index.ts';\nimport { LOCALE_COOKIE } from '../request/helpers/locale.ts';\nimport { rebasePublicAssetURLs } from './base-path.ts';\nimport type { UIRenderContext } from './types.ts';\n\nconst COLOR_MODE_COOKIE = 'vc-color-mode';\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: CallableFunction | undefined;\n\nexport async function renderUIPage(event: IAppEvent, ctx: UIRenderContext): Promise<string> {\n const isJIT = isCodeTransformation(CodeTransformation.JUST_IN_TIME);\n\n // Mirror @vuecs/nuxt's SSR plugins: resolve the cookies server-side so\n // the HTML shell already carries the `.dark`/`.light` class and lang\n // attribute (no flash) and the client app hydrates from the same values.\n const colorMode = useRequestCookie(event, COLOR_MODE_COOKIE);\n ctx.payload.config.colorMode = colorMode;\n\n const locale = useRequestCookie(event, LOCALE_COOKIE);\n ctx.payload.config.locale = locale;\n\n let html : string;\n let manifest : Record<string, any>;\n let render : CallableFunction;\n\n if (isJIT) {\n const vite = event.store[VITE_SERVER_STORE_KEY] as ViteDevServer;\n\n html = await fs.promises.readFile(\n path.join(UI_SOURCE_PATH, 'index.html'),\n 'utf-8',\n );\n html = await vite.transformIndexHtml('/', html);\n manifest = {};\n render = (await vite.ssrLoadModule('/src/server.ts')).render;\n } else {\n html = (cachedHtml ??= await fs.promises.readFile(\n path.join(UI_DIST_PATH, 'client', 'index.html'),\n 'utf-8',\n ));\n manifest = (cachedManifest ??= JSON.parse(await fs.promises.readFile(\n path.join(UI_DIST_PATH, 'client', '.vite', 'ssr-manifest.json'),\n 'utf-8',\n )));\n render = (cachedRender ??= (await read(\n path.join(UI_DIST_PATH, 'server', 'server.js'),\n )).render);\n }\n\n const httpClientFactory = event.store[UI_HTTP_CLIENT_FACTORY_STORE_KEY] as (() => IClient) | undefined;\n\n const [appHtml, preloadLinks] = await render({\n url: ctx.url,\n manifest,\n payload: ctx.payload,\n httpClient: httpClientFactory ? httpClientFactory() : undefined,\n });\n\n let body = html\n .replace('<!--preload-links-->', preloadLinks)\n .replace('<!--app-html-->', appHtml);\n\n let htmlAttrs = 'lang=\"en\"';\n if (locale && /^[a-zA-Z]{2,3}(-[a-zA-Z0-9]+)*$/.test(locale)) {\n htmlAttrs = `lang=\"${locale}\"`;\n }\n if (colorMode === 'dark' || colorMode === 'light') {\n htmlAttrs += ` class=\"${colorMode}\"`;\n }\n // Match the opening <html> tag by pattern rather than an exact literal,\n // so a reformatted tag / dev-mode transformIndexHtml rewrite still gets\n // the lang + color-mode attributes (no silent FOUC).\n body = body.replace(/<html\\b[^>]*>/i, `<html ${htmlAttrs}>`);\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 body = rebasePublicAssetURLs(body, getURLBasePath(ctx.payload.config.baseURL));\n\n event.response.headers.set('content-type', 'text/html; charset=utf-8');\n\n // Clickjacking guard: the SSR auth pages (login, consent, realm-mismatch,\n // logout) mutate state behind explicit clicks and hydrate the logged-in\n // session from first-party cookies. Framing them would make click-gating\n // defeatable via overlay attacks, so deny embedding entirely. (Iframe-based\n // silent renew is therefore unsupported — auth state is JS-readable anyway.)\n event.response.headers.set('content-security-policy', \"frame-ancestors 'none'\");\n event.response.headers.set('x-frame-options', 'DENY');\n\n // The auth pages' URLs routinely carry sensitive query params\n // (id_token_hint, code, redirect, state) — never leak them via Referer.\n event.response.headers.set('referrer-policy', 'no-referrer');\n\n return body;\n}\n\n"],"mappings":";;;;;;;;;;;;;;;;AAsBA,MAAMa,oBAAoB;AAM1B,IAAIC;AACJ,IAAIC;AACJ,IAAIC;AAEJ,eAAsBC,aAAaC,OAAkBC,KAAoB;CACrE,MAAMC,QAAQd,qBAAqBD,mBAAmBgB,YAAY;CAKlE,MAAMC,YAAYrB,iBAAiBiB,OAAOL,iBAAAA;CAC1CM,IAAII,QAAQC,OAAOF,YAAYA;CAE/B,MAAMG,SAASxB,iBAAiBiB,OAAOP,aAAAA;CACvCQ,IAAII,QAAQC,OAAOC,SAASA;CAE5B,IAAIC;CACJ,IAAIC;CACJ,IAAIC;CAEJ,IAAIR,OAAO;EACP,MAAMS,OAAOX,MAAMY,MAAMpB;EAEzBgB,OAAO,MAAMvB,GAAG4B,SAASC,SACrB5B,KAAK6B,KAAKzB,gBAAgB,YAAA,GAC1B,OAAA;EAEJkB,OAAO,MAAMG,KAAKK,mBAAmB,KAAKR,IAAAA;EAC1CC,WAAW,CAAC;EACZC,UAAU,MAAMC,KAAKM,cAAc,gBAAA,EAAA,CAAmBP;CAC1D,OAAO;EACHF,OAAQZ,eAAe,MAAMX,GAAG4B,SAASC,SACrC5B,KAAK6B,KAAK1B,cAAc,UAAU,YAAA,GAClC,OAAA;EAEJoB,WAAYZ,mBAAmBqB,KAAKC,MAAM,MAAMlC,GAAG4B,SAASC,SACxD5B,KAAK6B,KAAK1B,cAAc,UAAU,SAAS,mBAAA,GAC3C,OAAA,CAAA;EAEJqB,SAAUZ,kBAAkB,MAAMd,KAC9BE,KAAK6B,KAAK1B,cAAc,UAAU,WAAA,CAAA,EAAA,CACnCqB;CACP;CAEA,MAAMU,oBAAoBpB,MAAMY,MAAMrB;CAEtC,MAAM,CAAC8B,SAASC,gBAAgB,MAAMZ,OAAO;EACzCa,KAAKtB,IAAIsB;EACTd;EACAJ,SAASJ,IAAII;EACbmB,YAAYJ,oBAAoBA,kBAAAA,IAAsBK,KAAAA;CAC1D,CAAA;CAEA,IAAIC,OAAOlB,KACNmB,QAAQ,wBAAwBL,YAAAA,CAAAA,CAChCK,QAAQ,mBAAmBN,OAAAA;CAEhC,IAAIO,YAAY;CAChB,IAAIrB,UAAU,kCAAkCsB,KAAKtB,MAAAA,GACjDqB,YAAY,SAASrB,OAAO;CAEhC,IAAIH,cAAc,UAAUA,cAAc,SACtCwB,aAAa,WAAWxB,UAAU;CAKtCsB,OAAOA,KAAKC,QAAQ,kBAAkB,SAASC,UAAU,EAAE;CAK3DF,OAAOhC,sBAAsBgC,MAAM5C,eAAemB,IAAII,QAAQC,OAAOwB,OAAO,CAAA;CAE5E9B,MAAM+B,SAASC,QAAQC,IAAI,gBAAgB,0BAAA;CAO3CjC,MAAM+B,SAASC,QAAQC,IAAI,2BAA2B,wBAAA;CACtDjC,MAAM+B,SAASC,QAAQC,IAAI,mBAAmB,MAAA;CAI9CjC,MAAM+B,SAASC,QAAQC,IAAI,mBAAmB,aAAA;CAE9C,OAAOP;AACX"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../../../src/adapters/http/ui/serve.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAEpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAIxC,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;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC7B,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,wBAAwB,GAClC,OAAO,CAAC,MAAM,CAAC,CAwBjB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"serve.mjs","names":["useRequestQuery","sanitizeRelativeRedirect","renderUIPage","serveWorkflowPage","event","options","query","data","features","redirect","realmAware","realmId","realm_id","undefined","tokenAware","token","url","payload","config","baseURL"],"sources":["../../../../src/adapters/http/ui/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 type { StatusResponseFeatures } from '@authup/core-http-kit';\nimport { useRequestQuery } from '@routup/basic/query';\nimport type { IAppEvent } from 'routup';\nimport { sanitizeRelativeRedirect } from '../request/index.ts';\nimport { renderUIPage } from './render.ts';\n\nexport type ServeWorkflowPageOptions = {\n url: string,\n baseURL: string,\n features: StatusResponseFeatures,\n // Whether the page consumes the `realmId` (legacy `realm_id`) / `token`\n // query params (e.g. prefill from an email deep link). Off by default so\n // a page never reflects a param it doesn't use.\n realmAware?: boolean,\n tokenAware?: boolean,\n};\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 renderUIPage(event, {\n url: options.url,\n payload: {\n config: { baseURL: options.baseURL },\n data,\n },\n });\n}\n"],"mappings":";;;;;;;;;;;;GA6BA,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,aAAaE,OAAO;EACvBY,KAAKX,QAAQW;EACbC,SAAS;GACLC,QAAQ,EAAEC,SAASd,QAAQc,QAAQ;GACnCZ;EACJ;CACJ,CAAA;AACJ"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
export type UIRenderContext = {
|
|
2
|
-
url: string;
|
|
3
|
-
payload: {
|
|
4
|
-
config: Record<string, any>;
|
|
5
|
-
data: Record<string, any>;
|
|
6
|
-
};
|
|
7
|
-
};
|
|
8
|
-
export type InternalUIHttpClientContext = {
|
|
9
|
-
/**
|
|
10
|
-
* The public base URL (config `publicUrl`) — stays the client's
|
|
11
|
-
* `baseURL` so URLs rendered into the HTML remain user-facing.
|
|
12
|
-
*/
|
|
13
|
-
publicURL: string;
|
|
14
|
-
/**
|
|
15
|
-
* The server's own listen address (e.g. http://localhost:3010/) —
|
|
16
|
-
* where the transport actually dispatches requests.
|
|
17
|
-
*/
|
|
18
|
-
internalURL: string;
|
|
19
|
-
};
|
|
20
|
-
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/adapters/http/ui/types.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,eAAe,GAAG;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE;QACL,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC5B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KAC7B,CAAC;CACL,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACtC;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAC;CACvB,CAAC"}
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
import type { Client, Realm } from '@authup/core-kit';
|
|
2
|
-
import type { Logger } from '@authup/server-kit';
|
|
3
|
-
import type { IClientScopeRepository } from '../client-scope/types.ts';
|
|
4
|
-
import type { IScopeRepository } from '../scope/types.ts';
|
|
5
|
-
import type { IClientRepository, IWebClientProvisioner } from './types.ts';
|
|
6
|
-
export type WebClientProvisionerContext = {
|
|
7
|
-
clientRepository: IClientRepository;
|
|
8
|
-
scopeRepository: IScopeRepository;
|
|
9
|
-
clientScopeRepository: IClientScopeRepository;
|
|
10
|
-
appOrigins: string[];
|
|
11
|
-
logger?: Logger;
|
|
12
|
-
};
|
|
13
|
-
/**
|
|
14
|
-
* The scopes a realm's public `web` client is granted.
|
|
15
|
-
*
|
|
16
|
-
* `global` lets the issued token drive the management API (parity with the
|
|
17
|
-
* legacy password-grant admin login); `openid` yields the id-token.
|
|
18
|
-
*/
|
|
19
|
-
export declare const WEB_CLIENT_SCOPE_NAMES: string[];
|
|
20
|
-
/**
|
|
21
|
-
* Build the attribute set for a realm's public `web` client.
|
|
22
|
-
*
|
|
23
|
-
* Public (PKCE) client used by authup's own client-web and any downstream
|
|
24
|
-
* UI embedding client-web-kit. `builtIn` makes it auto-consent in the
|
|
25
|
-
* /authorize flow and protects it from the API reserved-name guard.
|
|
26
|
-
*
|
|
27
|
-
* `grantTypes` is an enforced allowlist (`assertClientGrantAllowed` at the
|
|
28
|
-
* /token grants and the /authorize code-request verifier; null = allow-all),
|
|
29
|
-
* so it must list every flow the client uses. `redirectUri` and
|
|
30
|
-
* `postLogoutRedirectUri` are each one `<origin>/**` wildcard per trusted
|
|
31
|
-
* origin (matched by isSimpleMatch).
|
|
32
|
-
*
|
|
33
|
-
* The `scope` column is descriptive only. Scope authorization resolves
|
|
34
|
-
* through the `auth_client_scopes` junction, which
|
|
35
|
-
* `WebClientProvisioner.ensureForRealm` fills from
|
|
36
|
-
* {@see WEB_CLIENT_SCOPE_NAMES}.
|
|
37
|
-
*/
|
|
38
|
-
export declare function buildWebClientAttributes(realm: Realm | {
|
|
39
|
-
id: string;
|
|
40
|
-
}, appOrigins: string[]): Partial<Client>;
|
|
41
|
-
export declare class WebClientProvisioner implements IWebClientProvisioner {
|
|
42
|
-
protected clientRepository: IClientRepository;
|
|
43
|
-
protected scopeRepository: IScopeRepository;
|
|
44
|
-
protected clientScopeRepository: IClientScopeRepository;
|
|
45
|
-
protected appOrigins: string[];
|
|
46
|
-
protected logger?: Logger;
|
|
47
|
-
constructor(ctx: WebClientProvisionerContext);
|
|
48
|
-
ensureForRealm(realm: Realm | {
|
|
49
|
-
id: string;
|
|
50
|
-
}): Promise<void>;
|
|
51
|
-
/**
|
|
52
|
-
* Upsert the client row itself.
|
|
53
|
-
*
|
|
54
|
-
* `web` is a reserved client name (`CLIENT_RESERVED_NAMES`), so the row
|
|
55
|
-
* belongs to the system whatever state it is in. A non-built-in one
|
|
56
|
-
* predates the reservation and is taken over rather than left to shadow
|
|
57
|
-
* the realm's login client.
|
|
58
|
-
*/
|
|
59
|
-
protected ensureClient(realm: Realm | {
|
|
60
|
-
id: string;
|
|
61
|
-
}): Promise<Client>;
|
|
62
|
-
/**
|
|
63
|
-
* Bind the built-in global scopes through `auth_client_scopes`. That
|
|
64
|
-
* junction is the only source the /authorize code-request verifier reads
|
|
65
|
-
* scopes from.
|
|
66
|
-
*
|
|
67
|
-
* Additive like the attribute MERGE above: an extra scope an admin bound
|
|
68
|
-
* by hand is left in place.
|
|
69
|
-
*/
|
|
70
|
-
protected ensureScopes(client: Client): Promise<void>;
|
|
71
|
-
}
|
|
72
|
-
//# sourceMappingURL=web-client.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"web-client.d.ts","sourceRoot":"","sources":["../../../../src/core/entities/client/web-client.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAE3E,MAAM,MAAM,2BAA2B,GAAG;IACtC,gBAAgB,EAAE,iBAAiB,CAAC;IACpC,eAAe,EAAE,gBAAgB,CAAC;IAClC,qBAAqB,EAAE,sBAAsB,CAAC;IAC9C,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,EAAE,MAAM,EAG1C,CAAC;AAEF;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,wBAAwB,CACpC,KAAK,EAAE,KAAK,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,EAC7B,UAAU,EAAE,MAAM,EAAE,GACrB,OAAO,CAAC,MAAM,CAAC,CAejB;AAED,qBAAa,oBAAqB,YAAW,qBAAqB;IAC9D,SAAS,CAAC,gBAAgB,EAAE,iBAAiB,CAAC;IAE9C,SAAS,CAAC,eAAe,EAAE,gBAAgB,CAAC;IAE5C,SAAS,CAAC,qBAAqB,EAAE,sBAAsB,CAAC;IAExD,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;IAE/B,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;gBAEd,GAAG,EAAE,2BAA2B;IAQtC,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IASlE;;;;;;;OAOG;cACa,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAsD5E;;;;;;;OAOG;cACa,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAiC9D"}
|
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
import "node:path";
|
|
2
|
-
import "node:url";
|
|
3
|
-
import.meta.url;
|
|
4
|
-
import { CLIENT_WEB_NAME, ClientAuthMethod, ClientTokenBindingMethod, ScopeName } from "@authup/core-kit";
|
|
5
|
-
//#region src/core/entities/client/web-client.ts
|
|
6
|
-
/**
|
|
7
|
-
* The scopes a realm's public `web` client is granted.
|
|
8
|
-
*
|
|
9
|
-
* `global` lets the issued token drive the management API (parity with the
|
|
10
|
-
* legacy password-grant admin login); `openid` yields the id-token.
|
|
11
|
-
*/ const WEB_CLIENT_SCOPE_NAMES = [ScopeName.GLOBAL, ScopeName.OPEN_ID];
|
|
12
|
-
/**
|
|
13
|
-
* Build the attribute set for a realm's public `web` client.
|
|
14
|
-
*
|
|
15
|
-
* Public (PKCE) client used by authup's own client-web and any downstream
|
|
16
|
-
* UI embedding client-web-kit. `builtIn` makes it auto-consent in the
|
|
17
|
-
* /authorize flow and protects it from the API reserved-name guard.
|
|
18
|
-
*
|
|
19
|
-
* `grantTypes` is an enforced allowlist (`assertClientGrantAllowed` at the
|
|
20
|
-
* /token grants and the /authorize code-request verifier; null = allow-all),
|
|
21
|
-
* so it must list every flow the client uses. `redirectUri` and
|
|
22
|
-
* `postLogoutRedirectUri` are each one `<origin>/**` wildcard per trusted
|
|
23
|
-
* origin (matched by isSimpleMatch).
|
|
24
|
-
*
|
|
25
|
-
* The `scope` column is descriptive only. Scope authorization resolves
|
|
26
|
-
* through the `auth_client_scopes` junction, which
|
|
27
|
-
* `WebClientProvisioner.ensureForRealm` fills from
|
|
28
|
-
* {@see WEB_CLIENT_SCOPE_NAMES}.
|
|
29
|
-
*/ function buildWebClientAttributes(realm, appOrigins) {
|
|
30
|
-
const originPatterns = appOrigins.map((origin) => `${origin}/**`).join(",");
|
|
31
|
-
return {
|
|
32
|
-
name: CLIENT_WEB_NAME,
|
|
33
|
-
realmId: realm.id,
|
|
34
|
-
authMethod: ClientAuthMethod.NONE,
|
|
35
|
-
tokenBindingMethod: ClientTokenBindingMethod.NONE,
|
|
36
|
-
builtIn: true,
|
|
37
|
-
active: true,
|
|
38
|
-
grantTypes: "authorization_code refresh_token",
|
|
39
|
-
scope: WEB_CLIENT_SCOPE_NAMES.join(" "),
|
|
40
|
-
redirectUri: originPatterns,
|
|
41
|
-
postLogoutRedirectUri: originPatterns
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
|
-
var WebClientProvisioner = class {
|
|
45
|
-
clientRepository;
|
|
46
|
-
scopeRepository;
|
|
47
|
-
clientScopeRepository;
|
|
48
|
-
appOrigins;
|
|
49
|
-
logger;
|
|
50
|
-
constructor(ctx) {
|
|
51
|
-
this.clientRepository = ctx.clientRepository;
|
|
52
|
-
this.scopeRepository = ctx.scopeRepository;
|
|
53
|
-
this.clientScopeRepository = ctx.clientScopeRepository;
|
|
54
|
-
this.appOrigins = ctx.appOrigins;
|
|
55
|
-
this.logger = ctx.logger;
|
|
56
|
-
}
|
|
57
|
-
async ensureForRealm(realm) {
|
|
58
|
-
const client = await this.ensureClient(realm);
|
|
59
|
-
await this.ensureScopes(client);
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Upsert the client row itself.
|
|
63
|
-
*
|
|
64
|
-
* `web` is a reserved client name (`CLIENT_RESERVED_NAMES`), so the row
|
|
65
|
-
* belongs to the system whatever state it is in. A non-built-in one
|
|
66
|
-
* predates the reservation and is taken over rather than left to shadow
|
|
67
|
-
* the realm's login client.
|
|
68
|
-
*/ async ensureClient(realm) {
|
|
69
|
-
const attributes = buildWebClientAttributes(realm, this.appOrigins);
|
|
70
|
-
const existing = await this.clientRepository.findOneBy({
|
|
71
|
-
name: CLIENT_WEB_NAME,
|
|
72
|
-
realmId: realm.id
|
|
73
|
-
});
|
|
74
|
-
if (existing) {
|
|
75
|
-
if (!Object.keys(attributes).some((key) => existing[key] !== attributes[key])) return existing;
|
|
76
|
-
let target = existing;
|
|
77
|
-
if (!existing.builtIn) {
|
|
78
|
-
if (this.logger) this.logger.warn(`Taking over the non-built-in client named '${CLIENT_WEB_NAME}' in realm ${realm.id}: the name is reserved for the built-in web client.`);
|
|
79
|
-
target = await this.clientRepository.findOneWithSecret({ id: existing.id }) || existing;
|
|
80
|
-
target.secret = null;
|
|
81
|
-
target.secretHashed = false;
|
|
82
|
-
target.secretEncrypted = false;
|
|
83
|
-
}
|
|
84
|
-
const merged = this.clientRepository.merge(target, attributes);
|
|
85
|
-
return this.clientRepository.save(merged);
|
|
86
|
-
}
|
|
87
|
-
const entity = this.clientRepository.create(attributes);
|
|
88
|
-
return this.clientRepository.save(entity);
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* Bind the built-in global scopes through `auth_client_scopes`. That
|
|
92
|
-
* junction is the only source the /authorize code-request verifier reads
|
|
93
|
-
* scopes from.
|
|
94
|
-
*
|
|
95
|
-
* Additive like the attribute MERGE above: an extra scope an admin bound
|
|
96
|
-
* by hand is left in place.
|
|
97
|
-
*/ async ensureScopes(client) {
|
|
98
|
-
for (const name of WEB_CLIENT_SCOPE_NAMES) {
|
|
99
|
-
const scope = await this.scopeRepository.findOneBy({
|
|
100
|
-
name,
|
|
101
|
-
realmId: null
|
|
102
|
-
});
|
|
103
|
-
if (!scope) {
|
|
104
|
-
if (this.logger) this.logger.warn(`Skipping scope '${name}' for the web client of realm ${client.realmId}: the scope is not provisioned.`);
|
|
105
|
-
continue;
|
|
106
|
-
}
|
|
107
|
-
if (await this.clientScopeRepository.findOneBy({
|
|
108
|
-
clientId: client.id,
|
|
109
|
-
scopeId: scope.id
|
|
110
|
-
})) continue;
|
|
111
|
-
await this.clientScopeRepository.save(this.clientScopeRepository.create({
|
|
112
|
-
clientId: client.id,
|
|
113
|
-
clientRealmId: client.realmId,
|
|
114
|
-
scopeId: scope.id,
|
|
115
|
-
scopeRealmId: scope.realmId
|
|
116
|
-
}));
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
};
|
|
120
|
-
//#endregion
|
|
121
|
-
export { WEB_CLIENT_SCOPE_NAMES, WebClientProvisioner, buildWebClientAttributes };
|
|
122
|
-
|
|
123
|
-
//# sourceMappingURL=web-client.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"web-client.mjs","names":["CLIENT_WEB_NAME","ClientAuthMethod","ClientTokenBindingMethod","ScopeName","WEB_CLIENT_SCOPE_NAMES","GLOBAL","OPEN_ID","buildWebClientAttributes","realm","appOrigins","originPatterns","map","origin","join","name","realmId","id","authMethod","NONE","tokenBindingMethod","builtIn","active","grantTypes","scope","redirectUri","postLogoutRedirectUri","WebClientProvisioner","clientRepository","scopeRepository","clientScopeRepository","logger","ctx","ensureForRealm","client","ensureClient","ensureScopes","attributes","existing","findOneBy","isDirty","Object","keys","some","key","target","warn","findOneWithSecret","secret","secretHashed","secretEncrypted","merged","merge","save","entity","create","clientId","scopeId","clientRealmId","scopeRealmId"],"sources":["../../../../src/core/entities/client/web-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 {\n CLIENT_WEB_NAME,\n ClientAuthMethod,\n ClientTokenBindingMethod,\n ScopeName,\n} from '@authup/core-kit';\nimport type { Client, Realm } from '@authup/core-kit';\nimport type { Logger } from '@authup/server-kit';\nimport type { IClientScopeRepository } from '../client-scope/types.ts';\nimport type { IScopeRepository } from '../scope/types.ts';\nimport type { IClientRepository, IWebClientProvisioner } from './types.ts';\n\nexport type WebClientProvisionerContext = {\n clientRepository: IClientRepository;\n scopeRepository: IScopeRepository;\n clientScopeRepository: IClientScopeRepository;\n appOrigins: string[];\n logger?: Logger;\n};\n\n/**\n * The scopes a realm's public `web` client is granted.\n *\n * `global` lets the issued token drive the management API (parity with the\n * legacy password-grant admin login); `openid` yields the id-token.\n */\nexport const WEB_CLIENT_SCOPE_NAMES: string[] = [\n ScopeName.GLOBAL,\n ScopeName.OPEN_ID,\n];\n\n/**\n * Build the attribute set for a realm's public `web` client.\n *\n * Public (PKCE) client used by authup's own client-web and any downstream\n * UI embedding client-web-kit. `builtIn` makes it auto-consent in the\n * /authorize flow and protects it from the API reserved-name guard.\n *\n * `grantTypes` is an enforced allowlist (`assertClientGrantAllowed` at the\n * /token grants and the /authorize code-request verifier; null = allow-all),\n * so it must list every flow the client uses. `redirectUri` and\n * `postLogoutRedirectUri` are each one `<origin>/**` wildcard per trusted\n * origin (matched by isSimpleMatch).\n *\n * The `scope` column is descriptive only. Scope authorization resolves\n * through the `auth_client_scopes` junction, which\n * `WebClientProvisioner.ensureForRealm` fills from\n * {@see WEB_CLIENT_SCOPE_NAMES}.\n */\nexport function buildWebClientAttributes(\n realm: Realm | { id: string },\n appOrigins: string[],\n): Partial<Client> {\n const originPatterns = appOrigins.map((origin) => `${origin}/**`).join(',');\n\n return {\n name: CLIENT_WEB_NAME,\n realmId: realm.id,\n authMethod: ClientAuthMethod.NONE,\n tokenBindingMethod: ClientTokenBindingMethod.NONE,\n builtIn: true,\n active: true,\n grantTypes: 'authorization_code refresh_token',\n scope: WEB_CLIENT_SCOPE_NAMES.join(' '),\n redirectUri: originPatterns,\n postLogoutRedirectUri: originPatterns,\n };\n}\n\nexport class WebClientProvisioner implements IWebClientProvisioner {\n protected clientRepository: IClientRepository;\n\n protected scopeRepository: IScopeRepository;\n\n protected clientScopeRepository: IClientScopeRepository;\n\n protected appOrigins: string[];\n\n protected logger?: Logger;\n\n constructor(ctx: WebClientProvisionerContext) {\n this.clientRepository = ctx.clientRepository;\n this.scopeRepository = ctx.scopeRepository;\n this.clientScopeRepository = ctx.clientScopeRepository;\n this.appOrigins = ctx.appOrigins;\n this.logger = ctx.logger;\n }\n\n async ensureForRealm(realm: Realm | { id: string }): Promise<void> {\n const client = await this.ensureClient(realm);\n\n // Always run, even when the attributes were already up to date: an\n // instance provisioned before the junction rows existed carries a\n // steady-state client with no scopes at all.\n await this.ensureScopes(client);\n }\n\n /**\n * Upsert the client row itself.\n *\n * `web` is a reserved client name (`CLIENT_RESERVED_NAMES`), so the row\n * belongs to the system whatever state it is in. A non-built-in one\n * predates the reservation and is taken over rather than left to shadow\n * the realm's login client.\n */\n protected async ensureClient(realm: Realm | { id: string }): Promise<Client> {\n const attributes = buildWebClientAttributes(realm, this.appOrigins);\n\n const existing = await this.clientRepository.findOneBy({\n name: CLIENT_WEB_NAME,\n realmId: realm.id,\n });\n\n if (existing) {\n // MERGE: refresh attributes (e.g. redirectUri) when config\n // changes. Dirty-check first — the attributes are deterministic\n // from config, so a steady-state boot would otherwise issue one\n // redundant UPDATE (bumping updatedAt) per realm.\n const isDirty = (Object.keys(attributes) as (keyof Client)[])\n .some((key) => existing[key] !== attributes[key]);\n if (!isDirty) {\n return existing;\n }\n\n let target = existing;\n\n if (!existing.builtIn) {\n if (this.logger) {\n this.logger.warn(\n `Taking over the non-built-in client named '${CLIENT_WEB_NAME}' in realm ${realm.id}: the name is reserved for the built-in web client.`,\n );\n }\n\n // The takeover makes the client public, so a secret it carried\n // as a confidential client can never authenticate it again.\n // Drop it instead of leaving the material at rest.\n //\n // The row has to be re-read WITH the secret for that: `secret`\n // is a `select: false` column, so the loaded entity carries no\n // value for it and typeorm's changed-column diff would not\n // emit the null. Re-reading is confined to this branch, and\n // the secret stays out of `buildWebClientAttributes` for the\n // same reason (an undefined-vs-null compare would read as\n // dirty on every boot).\n target = await this.clientRepository.findOneWithSecret({ id: existing.id }) || existing;\n target.secret = null;\n target.secretHashed = false;\n target.secretEncrypted = false;\n }\n\n const merged = this.clientRepository.merge(target, attributes);\n\n return this.clientRepository.save(merged);\n }\n\n const entity = this.clientRepository.create(attributes);\n return this.clientRepository.save(entity);\n }\n\n /**\n * Bind the built-in global scopes through `auth_client_scopes`. That\n * junction is the only source the /authorize code-request verifier reads\n * scopes from.\n *\n * Additive like the attribute MERGE above: an extra scope an admin bound\n * by hand is left in place.\n */\n protected async ensureScopes(client: Client): Promise<void> {\n for (const name of WEB_CLIENT_SCOPE_NAMES) {\n const scope = await this.scopeRepository.findOneBy({\n name,\n realmId: null,\n });\n\n if (!scope) {\n if (this.logger) {\n this.logger.warn(\n `Skipping scope '${name}' for the web client of realm ${client.realmId}: the scope is not provisioned.`,\n );\n }\n continue;\n }\n\n const existing = await this.clientScopeRepository.findOneBy({\n clientId: client.id,\n scopeId: scope.id,\n });\n\n if (existing) {\n continue;\n }\n\n await this.clientScopeRepository.save(this.clientScopeRepository.create({\n clientId: client.id,\n clientRealmId: client.realmId,\n scopeId: scope.id,\n scopeRealmId: scope.realmId,\n }));\n }\n }\n}\n"],"mappings":";;;;;;;;;;GAiCA,MAAaI,yBAAmC,CAC5CD,UAAUE,QACVF,UAAUG,OACb;;;;;;;;;;;;;;;;;;GAoBD,SAAgBC,yBACZC,OACAC,YAAoB;CAEpB,MAAMC,iBAAiBD,WAAWE,KAAKC,WAAW,GAAGA,OAAO,IAAI,CAAA,CAAEC,KAAK,GAAA;CAEvE,OAAO;EACHC,MAAMd;EACNe,SAASP,MAAMQ;EACfC,YAAYhB,iBAAiBiB;EAC7BC,oBAAoBjB,yBAAyBgB;EAC7CE,SAAS;EACTC,QAAQ;EACRC,YAAY;EACZC,OAAOnB,uBAAuBS,KAAK,GAAA;EACnCW,aAAad;EACbe,uBAAuBf;CAC3B;AACJ;AAEA,IAAagB,uBAAb,MAAaA;CACCC;CAEAC;CAEAC;CAEApB;CAEAqB;CAEV,YAAYC,KAAkC;EAC1C,KAAKJ,mBAAmBI,IAAIJ;EAC5B,KAAKC,kBAAkBG,IAAIH;EAC3B,KAAKC,wBAAwBE,IAAIF;EACjC,KAAKpB,aAAasB,IAAItB;EACtB,KAAKqB,SAASC,IAAID;CACtB;CAEA,MAAME,eAAexB,OAA8C;EAC/D,MAAMyB,SAAS,MAAM,KAAKC,aAAa1B,KAAAA;EAKvC,MAAM,KAAK2B,aAAaF,MAAAA;CAC5B;;;;;;;;IAUA,MAAgBC,aAAa1B,OAAgD;EACzE,MAAM4B,aAAa7B,yBAAyBC,OAAO,KAAKC,UAAU;EAElE,MAAM4B,WAAW,MAAM,KAAKV,iBAAiBW,UAAU;GACnDxB,MAAMd;GACNe,SAASP,MAAMQ;EACnB,CAAA;EAEA,IAAIqB,UAAU;GAOV,IAAI,CAFY,OAAQI,KAAKL,UAAAA,CAAAA,CACxBM,MAAMC,QAAQN,SAASM,SAASP,WAAWO,IAC3CJ,GACD,OAAOF;GAGX,IAAIO,SAASP;GAEb,IAAI,CAACA,SAASjB,SAAS;IACnB,IAAI,KAAKU,QACL,KAAKA,OAAOe,KACR,8CAA8C7C,gBAAgB,aAAaQ,MAAMQ,GAAG,oDAAoD;IAehJ4B,SAAS,MAAM,KAAKjB,iBAAiBmB,kBAAkB,EAAE9B,IAAIqB,SAASrB,GAAG,CAAA,KAAMqB;IAC/EO,OAAOG,SAAS;IAChBH,OAAOI,eAAe;IACtBJ,OAAOK,kBAAkB;GAC7B;GAEA,MAAMC,SAAS,KAAKvB,iBAAiBwB,MAAMP,QAAQR,UAAAA;GAEnD,OAAO,KAAKT,iBAAiByB,KAAKF,MAAAA;EACtC;EAEA,MAAMG,SAAS,KAAK1B,iBAAiB2B,OAAOlB,UAAAA;EAC5C,OAAO,KAAKT,iBAAiByB,KAAKC,MAAAA;CACtC;;;;;;;;IAUA,MAAgBlB,aAAaF,QAA+B;EACxD,KAAK,MAAMnB,QAAQV,wBAAwB;GACvC,MAAMmB,QAAQ,MAAM,KAAKK,gBAAgBU,UAAU;IAC/CxB;IACAC,SAAS;GACb,CAAA;GAEA,IAAI,CAACQ,OAAO;IACR,IAAI,KAAKO,QACL,KAAKA,OAAOe,KACR,mBAAmB/B,KAAK,gCAAgCmB,OAAOlB,QAAQ,gCAAgC;IAG/G;GACJ;GAOA,IAAIsB,MALmB,KAAKR,sBAAsBS,UAAU;IACxDiB,UAAUtB,OAAOjB;IACjBwC,SAASjC,MAAMP;GACnB,CAAA,GAGI;GAGJ,MAAM,KAAKa,sBAAsBuB,KAAK,KAAKvB,sBAAsByB,OAAO;IACpEC,UAAUtB,OAAOjB;IACjByC,eAAexB,OAAOlB;IACtByC,SAASjC,MAAMP;IACf0C,cAAcnC,MAAMR;GACxB,CAAA,CAAA;EACJ;CACJ;AACJ"}
|