@kensio/yulin 1.12.0 → 1.12.1
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/serve/controller/host/sim-aws-service-hosts.d.ts +27 -0
- package/dist/serve/controller/host/sim-aws-service-hosts.d.ts.map +1 -0
- package/dist/serve/controller/host/sim-aws-service-hosts.js +13 -0
- package/dist/serve/controller/host/sim-aws-service-hosts.js.map +1 -0
- package/dist/serve/http/url/sim-aws-local-url.d.ts.map +1 -1
- package/dist/serve/http/url/sim-aws-local-url.js +1 -0
- package/dist/serve/http/url/sim-aws-local-url.js.map +1 -1
- package/dist/service/aws/factory/sim-aws-account-region-service-builder.d.ts.map +1 -1
- package/dist/service/aws/factory/sim-aws-account-region-service-builder.js +1 -0
- package/dist/service/aws/factory/sim-aws-account-region-service-builder.js.map +1 -1
- package/dist/service/aws/factory/sim-aws-account-service-cache.d.ts +3 -0
- package/dist/service/aws/factory/sim-aws-account-service-cache.d.ts.map +1 -1
- package/dist/service/aws/factory/sim-aws-account-service-cache.js +3 -0
- package/dist/service/aws/factory/sim-aws-account-service-cache.js.map +1 -1
- package/dist/service/aws/factory/sim-aws-scoped-service-registries.d.ts +8 -0
- package/dist/service/aws/factory/sim-aws-scoped-service-registries.d.ts.map +1 -1
- package/dist/service/aws/factory/sim-aws-scoped-service-registries.js +8 -0
- package/dist/service/aws/factory/sim-aws-scoped-service-registries.js.map +1 -1
- package/dist/service/aws/factory/sim-aws-service-factory.d.ts.map +1 -1
- package/dist/service/aws/factory/sim-aws-service-factory.js +3 -0
- package/dist/service/aws/factory/sim-aws-service-factory.js.map +1 -1
- package/dist/service/cloudformation/resource/cfn/cognito/sim-cognito-cfn-value-adapter.d.ts.map +1 -1
- package/dist/service/cloudformation/resource/cfn/cognito/sim-cognito-cfn-value-adapter.js +14 -0
- package/dist/service/cloudformation/resource/cfn/cognito/sim-cognito-cfn-value-adapter.js.map +1 -1
- package/dist/service/cloudformation/resource/cfn/cognito/sim-cognito-idp-cfn.d.ts +26 -0
- package/dist/service/cloudformation/resource/cfn/cognito/sim-cognito-idp-cfn.d.ts.map +1 -0
- package/dist/service/cloudformation/resource/cfn/cognito/sim-cognito-idp-cfn.js +25 -0
- package/dist/service/cloudformation/resource/cfn/cognito/sim-cognito-idp-cfn.js.map +1 -0
- package/dist/service/cloudformation/resource/cfn/cognito/sim-cognito-user-pool-domain-cfn.d.ts +31 -0
- package/dist/service/cloudformation/resource/cfn/cognito/sim-cognito-user-pool-domain-cfn.d.ts.map +1 -0
- package/dist/service/cloudformation/resource/cfn/cognito/sim-cognito-user-pool-domain-cfn.js +33 -0
- package/dist/service/cloudformation/resource/cfn/cognito/sim-cognito-user-pool-domain-cfn.js.map +1 -0
- package/dist/service/cognito/cfn/client/sim-cfn-cognito-client-properties.d.ts +1 -0
- package/dist/service/cognito/cfn/client/sim-cfn-cognito-client-properties.d.ts.map +1 -1
- package/dist/service/cognito/cfn/client/sim-cfn-cognito-client-properties.js +20 -9
- package/dist/service/cognito/cfn/client/sim-cfn-cognito-client-properties.js.map +1 -1
- package/dist/service/cognito/cfn/domain/sim-cfn-cognito-domain-creator.d.ts +26 -0
- package/dist/service/cognito/cfn/domain/sim-cfn-cognito-domain-creator.d.ts.map +1 -0
- package/dist/service/cognito/cfn/domain/sim-cfn-cognito-domain-creator.js +34 -0
- package/dist/service/cognito/cfn/domain/sim-cfn-cognito-domain-creator.js.map +1 -0
- package/dist/service/cognito/cfn/domain/sim-cfn-cognito-domain-properties.d.ts +37 -0
- package/dist/service/cognito/cfn/domain/sim-cfn-cognito-domain-properties.d.ts.map +1 -0
- package/dist/service/cognito/cfn/domain/sim-cfn-cognito-domain-properties.js +67 -0
- package/dist/service/cognito/cfn/domain/sim-cfn-cognito-domain-properties.js.map +1 -0
- package/dist/service/cognito/cfn/idp/sim-cfn-cognito-idp-creator.d.ts +26 -0
- package/dist/service/cognito/cfn/idp/sim-cfn-cognito-idp-creator.d.ts.map +1 -0
- package/dist/service/cognito/cfn/idp/sim-cfn-cognito-idp-creator.js +37 -0
- package/dist/service/cognito/cfn/idp/sim-cfn-cognito-idp-creator.js.map +1 -0
- package/dist/service/cognito/cfn/idp/sim-cfn-cognito-idp-properties.d.ts +40 -0
- package/dist/service/cognito/cfn/idp/sim-cfn-cognito-idp-properties.d.ts.map +1 -0
- package/dist/service/cognito/cfn/idp/sim-cfn-cognito-idp-properties.js +74 -0
- package/dist/service/cognito/cfn/idp/sim-cfn-cognito-idp-properties.js.map +1 -0
- package/dist/service/cognito/cfn/sim-cfn-cognito-resource-deleter.d.ts +29 -3
- package/dist/service/cognito/cfn/sim-cfn-cognito-resource-deleter.d.ts.map +1 -1
- package/dist/service/cognito/cfn/sim-cfn-cognito-resource-deleter.js +88 -26
- package/dist/service/cognito/cfn/sim-cfn-cognito-resource-deleter.js.map +1 -1
- package/dist/service/cognito/cfn/sim-cfn-cognito-resource-factory.d.ts +5 -3
- package/dist/service/cognito/cfn/sim-cfn-cognito-resource-factory.d.ts.map +1 -1
- package/dist/service/cognito/cfn/sim-cfn-cognito-resource-factory.js +15 -3
- package/dist/service/cognito/cfn/sim-cfn-cognito-resource-factory.js.map +1 -1
- package/dist/service/cognito/command/auth/sim-cognito-auth-commands.d.ts +6 -0
- package/dist/service/cognito/command/auth/sim-cognito-auth-commands.d.ts.map +1 -1
- package/dist/service/cognito/command/auth/sim-cognito-auth-commands.js +1 -3
- package/dist/service/cognito/command/auth/sim-cognito-auth-commands.js.map +1 -1
- package/dist/service/cognito/command/client/sim-cognito-unsimulated-client-options.d.ts +0 -1
- package/dist/service/cognito/command/client/sim-cognito-unsimulated-client-options.d.ts.map +1 -1
- package/dist/service/cognito/command/client/sim-cognito-unsimulated-client-options.js +0 -4
- package/dist/service/cognito/command/client/sim-cognito-unsimulated-client-options.js.map +1 -1
- package/dist/service/cognito/command/client/sim-cognito-user-pool-client-view.d.ts +2 -3
- package/dist/service/cognito/command/client/sim-cognito-user-pool-client-view.d.ts.map +1 -1
- package/dist/service/cognito/command/client/sim-cognito-user-pool-client-view.js +3 -4
- package/dist/service/cognito/command/client/sim-cognito-user-pool-client-view.js.map +1 -1
- package/dist/service/cognito/command/client/user-pool-client.command.d.ts +5 -6
- package/dist/service/cognito/command/client/user-pool-client.command.d.ts.map +1 -1
- package/dist/service/cognito/command/domain/sim-cognito-domain-commands.d.ts +62 -0
- package/dist/service/cognito/command/domain/sim-cognito-domain-commands.d.ts.map +1 -0
- package/dist/service/cognito/command/domain/sim-cognito-domain-commands.js +87 -0
- package/dist/service/cognito/command/domain/sim-cognito-domain-commands.js.map +1 -0
- package/dist/service/cognito/command/domain/sim-cognito-domain-view.d.ts +19 -0
- package/dist/service/cognito/command/domain/sim-cognito-domain-view.d.ts.map +1 -0
- package/dist/service/cognito/command/domain/sim-cognito-domain-view.js +38 -0
- package/dist/service/cognito/command/domain/sim-cognito-domain-view.js.map +1 -0
- package/dist/service/cognito/command/domain/user-pool-domain.command.d.ts +72 -0
- package/dist/service/cognito/command/domain/user-pool-domain.command.d.ts.map +1 -0
- package/dist/service/cognito/command/domain/user-pool-domain.command.js +2 -0
- package/dist/service/cognito/command/domain/user-pool-domain.command.js.map +1 -0
- package/dist/service/cognito/command/hosted/hosted-auth.command.d.ts +69 -0
- package/dist/service/cognito/command/hosted/hosted-auth.command.d.ts.map +1 -0
- package/dist/service/cognito/command/hosted/hosted-auth.command.js +2 -0
- package/dist/service/cognito/command/hosted/hosted-auth.command.js.map +1 -0
- package/dist/service/cognito/command/hosted/sim-cognito-authorize-endpoint.d.ts +38 -0
- package/dist/service/cognito/command/hosted/sim-cognito-authorize-endpoint.d.ts.map +1 -0
- package/dist/service/cognito/command/hosted/sim-cognito-authorize-endpoint.js +72 -0
- package/dist/service/cognito/command/hosted/sim-cognito-authorize-endpoint.js.map +1 -0
- package/dist/service/cognito/command/hosted/sim-cognito-authorize-request.d.ts +37 -0
- package/dist/service/cognito/command/hosted/sim-cognito-authorize-request.d.ts.map +1 -0
- package/dist/service/cognito/command/hosted/sim-cognito-authorize-request.js +123 -0
- package/dist/service/cognito/command/hosted/sim-cognito-authorize-request.js.map +1 -0
- package/dist/service/cognito/command/hosted/sim-cognito-granted-scopes.d.ts +16 -0
- package/dist/service/cognito/command/hosted/sim-cognito-granted-scopes.d.ts.map +1 -0
- package/dist/service/cognito/command/hosted/sim-cognito-granted-scopes.js +34 -0
- package/dist/service/cognito/command/hosted/sim-cognito-granted-scopes.js.map +1 -0
- package/dist/service/cognito/command/hosted/sim-cognito-granted-tokens.d.ts +16 -0
- package/dist/service/cognito/command/hosted/sim-cognito-granted-tokens.d.ts.map +1 -0
- package/dist/service/cognito/command/hosted/sim-cognito-granted-tokens.js +32 -0
- package/dist/service/cognito/command/hosted/sim-cognito-granted-tokens.js.map +1 -0
- package/dist/service/cognito/command/hosted/sim-cognito-hosted-client.d.ts +49 -0
- package/dist/service/cognito/command/hosted/sim-cognito-hosted-client.d.ts.map +1 -0
- package/dist/service/cognito/command/hosted/sim-cognito-hosted-client.js +98 -0
- package/dist/service/cognito/command/hosted/sim-cognito-hosted-client.js.map +1 -0
- package/dist/service/cognito/command/hosted/sim-cognito-hosted-commands.d.ts +28 -0
- package/dist/service/cognito/command/hosted/sim-cognito-hosted-commands.d.ts.map +1 -0
- package/dist/service/cognito/command/hosted/sim-cognito-hosted-commands.js +27 -0
- package/dist/service/cognito/command/hosted/sim-cognito-hosted-commands.js.map +1 -0
- package/dist/service/cognito/command/hosted/sim-cognito-logout-endpoint.d.ts +22 -0
- package/dist/service/cognito/command/hosted/sim-cognito-logout-endpoint.d.ts.map +1 -0
- package/dist/service/cognito/command/hosted/sim-cognito-logout-endpoint.js +43 -0
- package/dist/service/cognito/command/hosted/sim-cognito-logout-endpoint.js.map +1 -0
- package/dist/service/cognito/command/hosted/sim-cognito-presented-grant.d.ts +47 -0
- package/dist/service/cognito/command/hosted/sim-cognito-presented-grant.d.ts.map +1 -0
- package/dist/service/cognito/command/hosted/sim-cognito-presented-grant.js +92 -0
- package/dist/service/cognito/command/hosted/sim-cognito-presented-grant.js.map +1 -0
- package/dist/service/cognito/command/hosted/sim-cognito-token-endpoint.d.ts +33 -0
- package/dist/service/cognito/command/hosted/sim-cognito-token-endpoint.d.ts.map +1 -0
- package/dist/service/cognito/command/hosted/sim-cognito-token-endpoint.js +58 -0
- package/dist/service/cognito/command/hosted/sim-cognito-token-endpoint.js.map +1 -0
- package/dist/service/cognito/command/hosted/sim-cognito-token-grants.d.ts +42 -0
- package/dist/service/cognito/command/hosted/sim-cognito-token-grants.d.ts.map +1 -0
- package/dist/service/cognito/command/hosted/sim-cognito-token-grants.js +70 -0
- package/dist/service/cognito/command/hosted/sim-cognito-token-grants.js.map +1 -0
- package/dist/service/cognito/command/idp/identity-provider.command.d.ts +118 -0
- package/dist/service/cognito/command/idp/identity-provider.command.d.ts.map +1 -0
- package/dist/service/cognito/command/idp/identity-provider.command.js +2 -0
- package/dist/service/cognito/command/idp/identity-provider.command.js.map +1 -0
- package/dist/service/cognito/command/idp/sim-cognito-identity-provider-commands.d.ts +54 -0
- package/dist/service/cognito/command/idp/sim-cognito-identity-provider-commands.d.ts.map +1 -0
- package/dist/service/cognito/command/idp/sim-cognito-identity-provider-commands.js +94 -0
- package/dist/service/cognito/command/idp/sim-cognito-identity-provider-commands.js.map +1 -0
- package/dist/service/cognito/command/idp/sim-cognito-identity-provider-view.d.ts +22 -0
- package/dist/service/cognito/command/idp/sim-cognito-identity-provider-view.d.ts.map +1 -0
- package/dist/service/cognito/command/idp/sim-cognito-identity-provider-view.js +38 -0
- package/dist/service/cognito/command/idp/sim-cognito-identity-provider-view.js.map +1 -0
- package/dist/service/cognito/command/sim-cognito-command.types.d.ts +3 -0
- package/dist/service/cognito/command/sim-cognito-command.types.d.ts.map +1 -1
- package/dist/service/cognito/command/sim-cognito-commands.d.ts +8 -0
- package/dist/service/cognito/command/sim-cognito-commands.d.ts.map +1 -1
- package/dist/service/cognito/command/sim-cognito-commands.js +30 -1
- package/dist/service/cognito/command/sim-cognito-commands.js.map +1 -1
- package/dist/service/cognito/error/sim-cognito-oauth.error.d.ts +42 -0
- package/dist/service/cognito/error/sim-cognito-oauth.error.d.ts.map +1 -0
- package/dist/service/cognito/error/sim-cognito-oauth.error.js +29 -0
- package/dist/service/cognito/error/sim-cognito-oauth.error.js.map +1 -0
- package/dist/service/cognito/error/sim-cognito.error.d.ts +10 -0
- package/dist/service/cognito/error/sim-cognito.error.d.ts.map +1 -1
- package/dist/service/cognito/error/sim-cognito.error.js +12 -0
- package/dist/service/cognito/error/sim-cognito.error.js.map +1 -1
- package/dist/service/cognito/index.d.ts +15 -1
- package/dist/service/cognito/index.d.ts.map +1 -1
- package/dist/service/cognito/index.js +15 -1
- package/dist/service/cognito/index.js.map +1 -1
- package/dist/service/cognito/registry/sim-cognito-domain-registry.d.ts +49 -0
- package/dist/service/cognito/registry/sim-cognito-domain-registry.d.ts.map +1 -0
- package/dist/service/cognito/registry/sim-cognito-domain-registry.js +83 -0
- package/dist/service/cognito/registry/sim-cognito-domain-registry.js.map +1 -0
- package/dist/service/cognito/sdk/sim-cognito-sdk-command-router.d.ts +3 -2
- package/dist/service/cognito/sdk/sim-cognito-sdk-command-router.d.ts.map +1 -1
- package/dist/service/cognito/sdk/sim-cognito-sdk-command-router.js +5 -2
- package/dist/service/cognito/sdk/sim-cognito-sdk-command-router.js.map +1 -1
- package/dist/service/cognito/sdk/sim-cognito-sdk-federation-routes.d.ts +7 -0
- package/dist/service/cognito/sdk/sim-cognito-sdk-federation-routes.d.ts.map +1 -0
- package/dist/service/cognito/sdk/sim-cognito-sdk-federation-routes.js +41 -0
- package/dist/service/cognito/sdk/sim-cognito-sdk-federation-routes.js.map +1 -0
- package/dist/service/cognito/serve/sim-cognito-controller.d.ts +5 -0
- package/dist/service/cognito/serve/sim-cognito-controller.d.ts.map +1 -1
- package/dist/service/cognito/serve/sim-cognito-controller.js +12 -2
- package/dist/service/cognito/serve/sim-cognito-controller.js.map +1 -1
- package/dist/service/cognito/serve/sim-cognito-domain-controller.d.ts +48 -0
- package/dist/service/cognito/serve/sim-cognito-domain-controller.d.ts.map +1 -0
- package/dist/service/cognito/serve/sim-cognito-domain-controller.js +79 -0
- package/dist/service/cognito/serve/sim-cognito-domain-controller.js.map +1 -0
- package/dist/service/cognito/serve/sim-cognito-domain-endpoints.d.ts +49 -0
- package/dist/service/cognito/serve/sim-cognito-domain-endpoints.d.ts.map +1 -0
- package/dist/service/cognito/serve/sim-cognito-domain-endpoints.js +91 -0
- package/dist/service/cognito/serve/sim-cognito-domain-endpoints.js.map +1 -0
- package/dist/service/cognito/serve/sim-cognito-oauth-response.d.ts +57 -0
- package/dist/service/cognito/serve/sim-cognito-oauth-response.d.ts.map +1 -0
- package/dist/service/cognito/serve/sim-cognito-oauth-response.js +113 -0
- package/dist/service/cognito/serve/sim-cognito-oauth-response.js.map +1 -0
- package/dist/service/cognito/serve/sim-cognito-openid-configuration.d.ts +15 -4
- package/dist/service/cognito/serve/sim-cognito-openid-configuration.d.ts.map +1 -1
- package/dist/service/cognito/serve/sim-cognito-openid-configuration.js +28 -4
- package/dist/service/cognito/serve/sim-cognito-openid-configuration.js.map +1 -1
- package/dist/service/cognito/serve/sim-cognito-token-request.d.ts +30 -0
- package/dist/service/cognito/serve/sim-cognito-token-request.d.ts.map +1 -0
- package/dist/service/cognito/serve/sim-cognito-token-request.js +66 -0
- package/dist/service/cognito/serve/sim-cognito-token-request.js.map +1 -0
- package/dist/service/cognito/sim-cognito-federation.d.ts +74 -0
- package/dist/service/cognito/sim-cognito-federation.d.ts.map +1 -0
- package/dist/service/cognito/sim-cognito-federation.js +99 -0
- package/dist/service/cognito/sim-cognito-federation.js.map +1 -0
- package/dist/service/cognito/sim-cognito-identity-provider.d.ts +21 -2
- package/dist/service/cognito/sim-cognito-identity-provider.d.ts.map +1 -1
- package/dist/service/cognito/sim-cognito-identity-provider.js +21 -4
- package/dist/service/cognito/sim-cognito-identity-provider.js.map +1 -1
- package/dist/service/cognito/user-pool/auth/sim-cognito-authorization-code-store.d.ts +28 -0
- package/dist/service/cognito/user-pool/auth/sim-cognito-authorization-code-store.d.ts.map +1 -0
- package/dist/service/cognito/user-pool/auth/sim-cognito-authorization-code-store.js +52 -0
- package/dist/service/cognito/user-pool/auth/sim-cognito-authorization-code-store.js.map +1 -0
- package/dist/service/cognito/user-pool/auth/sim-cognito-authorization-code.d.ts +57 -0
- package/dist/service/cognito/user-pool/auth/sim-cognito-authorization-code.d.ts.map +1 -0
- package/dist/service/cognito/user-pool/auth/sim-cognito-authorization-code.js +75 -0
- package/dist/service/cognito/user-pool/auth/sim-cognito-authorization-code.js.map +1 -0
- package/dist/service/cognito/user-pool/auth/sim-cognito-issued-token-store.d.ts +8 -0
- package/dist/service/cognito/user-pool/auth/sim-cognito-issued-token-store.d.ts.map +1 -1
- package/dist/service/cognito/user-pool/auth/sim-cognito-issued-token-store.js +13 -0
- package/dist/service/cognito/user-pool/auth/sim-cognito-issued-token-store.js.map +1 -1
- package/dist/service/cognito/user-pool/auth/sim-cognito-issued-token.d.ts +10 -0
- package/dist/service/cognito/user-pool/auth/sim-cognito-issued-token.d.ts.map +1 -1
- package/dist/service/cognito/user-pool/auth/sim-cognito-issued-token.js +6 -0
- package/dist/service/cognito/user-pool/auth/sim-cognito-issued-token.js.map +1 -1
- package/dist/service/cognito/user-pool/auth/sim-cognito-pool-auth.d.ts +47 -4
- package/dist/service/cognito/user-pool/auth/sim-cognito-pool-auth.d.ts.map +1 -1
- package/dist/service/cognito/user-pool/auth/sim-cognito-pool-auth.js +58 -4
- package/dist/service/cognito/user-pool/auth/sim-cognito-pool-auth.js.map +1 -1
- package/dist/service/cognito/user-pool/client/sim-cognito-oauth-grants.d.ts +18 -0
- package/dist/service/cognito/user-pool/client/sim-cognito-oauth-grants.d.ts.map +1 -0
- package/dist/service/cognito/user-pool/client/sim-cognito-oauth-grants.js +61 -0
- package/dist/service/cognito/user-pool/client/sim-cognito-oauth-grants.js.map +1 -0
- package/dist/service/cognito/user-pool/client/sim-cognito-oauth-settings.d.ts +60 -0
- package/dist/service/cognito/user-pool/client/sim-cognito-oauth-settings.d.ts.map +1 -0
- package/dist/service/cognito/user-pool/client/sim-cognito-oauth-settings.js +83 -0
- package/dist/service/cognito/user-pool/client/sim-cognito-oauth-settings.js.map +1 -0
- package/dist/service/cognito/user-pool/client/sim-cognito-redirect-urls.d.ts +22 -0
- package/dist/service/cognito/user-pool/client/sim-cognito-redirect-urls.d.ts.map +1 -0
- package/dist/service/cognito/user-pool/client/sim-cognito-redirect-urls.js +47 -0
- package/dist/service/cognito/user-pool/client/sim-cognito-redirect-urls.js.map +1 -0
- package/dist/service/cognito/user-pool/client/sim-cognito-requested-oauth.d.ts +29 -0
- package/dist/service/cognito/user-pool/client/sim-cognito-requested-oauth.d.ts.map +1 -0
- package/dist/service/cognito/user-pool/client/sim-cognito-requested-oauth.js +64 -0
- package/dist/service/cognito/user-pool/client/sim-cognito-requested-oauth.js.map +1 -0
- package/dist/service/cognito/user-pool/client/sim-cognito-user-pool-client-settings.d.ts +4 -5
- package/dist/service/cognito/user-pool/client/sim-cognito-user-pool-client-settings.d.ts.map +1 -1
- package/dist/service/cognito/user-pool/client/sim-cognito-user-pool-client-settings.js +4 -5
- package/dist/service/cognito/user-pool/client/sim-cognito-user-pool-client-settings.js.map +1 -1
- package/dist/service/cognito/user-pool/client/sim-cognito-user-pool-client.d.ts +4 -4
- package/dist/service/cognito/user-pool/client/sim-cognito-user-pool-client.d.ts.map +1 -1
- package/dist/service/cognito/user-pool/client/sim-cognito-user-pool-client.js +4 -4
- package/dist/service/cognito/user-pool/client/sim-cognito-user-pool-client.js.map +1 -1
- package/dist/service/cognito/user-pool/domain/sim-cognito-custom-domain-config.d.ts +30 -0
- package/dist/service/cognito/user-pool/domain/sim-cognito-custom-domain-config.d.ts.map +1 -0
- package/dist/service/cognito/user-pool/domain/sim-cognito-custom-domain-config.js +37 -0
- package/dist/service/cognito/user-pool/domain/sim-cognito-custom-domain-config.js.map +1 -0
- package/dist/service/cognito/user-pool/domain/sim-cognito-domain-name.d.ts +58 -0
- package/dist/service/cognito/user-pool/domain/sim-cognito-domain-name.d.ts.map +1 -0
- package/dist/service/cognito/user-pool/domain/sim-cognito-domain-name.js +123 -0
- package/dist/service/cognito/user-pool/domain/sim-cognito-domain-name.js.map +1 -0
- package/dist/service/cognito/user-pool/domain/sim-cognito-pool-domains.d.ts +33 -0
- package/dist/service/cognito/user-pool/domain/sim-cognito-pool-domains.d.ts.map +1 -0
- package/dist/service/cognito/user-pool/domain/sim-cognito-pool-domains.js +66 -0
- package/dist/service/cognito/user-pool/domain/sim-cognito-pool-domains.js.map +1 -0
- package/dist/service/cognito/user-pool/domain/sim-cognito-user-pool-domain.d.ts +58 -0
- package/dist/service/cognito/user-pool/domain/sim-cognito-user-pool-domain.d.ts.map +1 -0
- package/dist/service/cognito/user-pool/domain/sim-cognito-user-pool-domain.js +70 -0
- package/dist/service/cognito/user-pool/domain/sim-cognito-user-pool-domain.js.map +1 -0
- package/dist/service/cognito/user-pool/idp/sim-cognito-attribute-mapping.d.ts +40 -0
- package/dist/service/cognito/user-pool/idp/sim-cognito-attribute-mapping.d.ts.map +1 -0
- package/dist/service/cognito/user-pool/idp/sim-cognito-attribute-mapping.js +56 -0
- package/dist/service/cognito/user-pool/idp/sim-cognito-attribute-mapping.js.map +1 -0
- package/dist/service/cognito/user-pool/idp/sim-cognito-external-user.d.ts +37 -0
- package/dist/service/cognito/user-pool/idp/sim-cognito-external-user.d.ts.map +1 -0
- package/dist/service/cognito/user-pool/idp/sim-cognito-external-user.js +28 -0
- package/dist/service/cognito/user-pool/idp/sim-cognito-external-user.js.map +1 -0
- package/dist/service/cognito/user-pool/idp/sim-cognito-federated-identity.d.ts +64 -0
- package/dist/service/cognito/user-pool/idp/sim-cognito-federated-identity.d.ts.map +1 -0
- package/dist/service/cognito/user-pool/idp/sim-cognito-federated-identity.js +50 -0
- package/dist/service/cognito/user-pool/idp/sim-cognito-federated-identity.js.map +1 -0
- package/dist/service/cognito/user-pool/idp/sim-cognito-federated-sign-in.d.ts +47 -0
- package/dist/service/cognito/user-pool/idp/sim-cognito-federated-sign-in.d.ts.map +1 -0
- package/dist/service/cognito/user-pool/idp/sim-cognito-federated-sign-in.js +72 -0
- package/dist/service/cognito/user-pool/idp/sim-cognito-federated-sign-in.js.map +1 -0
- package/dist/service/cognito/user-pool/idp/sim-cognito-identity-provider-settings.d.ts +37 -0
- package/dist/service/cognito/user-pool/idp/sim-cognito-identity-provider-settings.d.ts.map +1 -0
- package/dist/service/cognito/user-pool/idp/sim-cognito-identity-provider-settings.js +55 -0
- package/dist/service/cognito/user-pool/idp/sim-cognito-identity-provider-settings.js.map +1 -0
- package/dist/service/cognito/user-pool/idp/sim-cognito-identity-provider-store.d.ts +39 -0
- package/dist/service/cognito/user-pool/idp/sim-cognito-identity-provider-store.d.ts.map +1 -0
- package/dist/service/cognito/user-pool/idp/sim-cognito-identity-provider-store.js +58 -0
- package/dist/service/cognito/user-pool/idp/sim-cognito-identity-provider-store.js.map +1 -0
- package/dist/service/cognito/user-pool/idp/sim-cognito-provider-details.d.ts +29 -0
- package/dist/service/cognito/user-pool/idp/sim-cognito-provider-details.d.ts.map +1 -0
- package/dist/service/cognito/user-pool/idp/sim-cognito-provider-details.js +52 -0
- package/dist/service/cognito/user-pool/idp/sim-cognito-provider-details.js.map +1 -0
- package/dist/service/cognito/user-pool/idp/sim-cognito-provider-type.d.ts +24 -0
- package/dist/service/cognito/user-pool/idp/sim-cognito-provider-type.d.ts.map +1 -0
- package/dist/service/cognito/user-pool/idp/sim-cognito-provider-type.js +67 -0
- package/dist/service/cognito/user-pool/idp/sim-cognito-provider-type.js.map +1 -0
- package/dist/service/cognito/user-pool/idp/sim-cognito-user-pool-identity-provider.d.ts +82 -0
- package/dist/service/cognito/user-pool/idp/sim-cognito-user-pool-identity-provider.d.ts.map +1 -0
- package/dist/service/cognito/user-pool/idp/sim-cognito-user-pool-identity-provider.js +108 -0
- package/dist/service/cognito/user-pool/idp/sim-cognito-user-pool-identity-provider.js.map +1 -0
- package/dist/service/cognito/user-pool/sim-cognito-user-pool-store.d.ts +11 -1
- package/dist/service/cognito/user-pool/sim-cognito-user-pool-store.d.ts.map +1 -1
- package/dist/service/cognito/user-pool/sim-cognito-user-pool-store.js +11 -1
- package/dist/service/cognito/user-pool/sim-cognito-user-pool-store.js.map +1 -1
- package/dist/service/cognito/user-pool/token/sim-cognito-access-token.d.ts +5 -0
- package/dist/service/cognito/user-pool/token/sim-cognito-access-token.d.ts.map +1 -1
- package/dist/service/cognito/user-pool/token/sim-cognito-access-token.js +16 -5
- package/dist/service/cognito/user-pool/token/sim-cognito-access-token.js.map +1 -1
- package/dist/service/cognito/user-pool/token/sim-cognito-id-token.d.ts +7 -0
- package/dist/service/cognito/user-pool/token/sim-cognito-id-token.d.ts.map +1 -1
- package/dist/service/cognito/user-pool/token/sim-cognito-id-token.js +14 -0
- package/dist/service/cognito/user-pool/token/sim-cognito-id-token.js.map +1 -1
- package/dist/service/cognito/user-pool/token/sim-cognito-token-claims.d.ts +10 -1
- package/dist/service/cognito/user-pool/token/sim-cognito-token-claims.d.ts.map +1 -1
- package/dist/service/cognito/user-pool/token/sim-cognito-token-claims.js.map +1 -1
- package/dist/service/cognito/user-pool/token/sim-cognito-token-issuer.d.ts +5 -0
- package/dist/service/cognito/user-pool/token/sim-cognito-token-issuer.d.ts.map +1 -1
- package/dist/service/cognito/user-pool/token/sim-cognito-token-issuer.js +3 -0
- package/dist/service/cognito/user-pool/token/sim-cognito-token-issuer.js.map +1 -1
- package/dist/service/cognito/user-pool/user/sim-cognito-standard-attributes.d.ts +9 -0
- package/dist/service/cognito/user-pool/user/sim-cognito-standard-attributes.d.ts.map +1 -0
- package/dist/service/cognito/user-pool/user/sim-cognito-standard-attributes.js +39 -0
- package/dist/service/cognito/user-pool/user/sim-cognito-standard-attributes.js.map +1 -0
- package/dist/service/cognito/user-pool/user/sim-cognito-user-attributes.d.ts.map +1 -1
- package/dist/service/cognito/user-pool/user/sim-cognito-user-attributes.js +2 -29
- package/dist/service/cognito/user-pool/user/sim-cognito-user-attributes.js.map +1 -1
- package/dist/service/cognito/user-pool/user/sim-cognito-user-factory.d.ts +15 -0
- package/dist/service/cognito/user-pool/user/sim-cognito-user-factory.d.ts.map +1 -1
- package/dist/service/cognito/user-pool/user/sim-cognito-user-factory.js +17 -0
- package/dist/service/cognito/user-pool/user/sim-cognito-user-factory.js.map +1 -1
- package/dist/service/cognito/user-pool/user/sim-cognito-user-status.d.ts +14 -4
- package/dist/service/cognito/user-pool/user/sim-cognito-user-status.d.ts.map +1 -1
- package/dist/service/cognito/user-pool/user/sim-cognito-user-status.js +13 -3
- package/dist/service/cognito/user-pool/user/sim-cognito-user-status.js.map +1 -1
- package/dist/service/cognito/user-pool/user/sim-cognito-user.d.ts +20 -0
- package/dist/service/cognito/user-pool/user/sim-cognito-user.d.ts.map +1 -1
- package/dist/service/cognito/user-pool/user/sim-cognito-user.js +29 -1
- package/dist/service/cognito/user-pool/user/sim-cognito-user.js.map +1 -1
- package/dist/service/route53/resolve/sim-r53-service-target-resolver.d.ts +1 -0
- package/dist/service/route53/resolve/sim-r53-service-target-resolver.d.ts.map +1 -1
- package/dist/service/route53/resolve/sim-r53-service-target-resolver.js +1 -0
- package/dist/service/route53/resolve/sim-r53-service-target-resolver.js.map +1 -1
- package/dist/service/route53/resolve/sim-route53-resolver.d.ts +7 -0
- package/dist/service/route53/resolve/sim-route53-resolver.d.ts.map +1 -1
- package/dist/service/route53/resolve/sim-route53-resolver.js +12 -4
- package/dist/service/route53/resolve/sim-route53-resolver.js.map +1 -1
- package/dist/service/route53/sim-route53.d.ts +8 -0
- package/dist/service/route53/sim-route53.d.ts.map +1 -1
- package/dist/service/route53/sim-route53.js +1 -0
- package/dist/service/route53/sim-route53.js.map +1 -1
- package/package.json +1 -1
- package/dist/service/cognito/command/client/sim-cognito-unsimulated-managed-login.d.ts +0 -24
- package/dist/service/cognito/command/client/sim-cognito-unsimulated-managed-login.d.ts.map +0 -1
- package/dist/service/cognito/command/client/sim-cognito-unsimulated-managed-login.js +0 -51
- package/dist/service/cognito/command/client/sim-cognito-unsimulated-managed-login.js.map +0 -1
- package/dist/service/cognito/user-pool/client/sim-cognito-unsimulated-client-settings.d.ts +0 -42
- package/dist/service/cognito/user-pool/client/sim-cognito-unsimulated-client-settings.d.ts.map +0 -1
- package/dist/service/cognito/user-pool/client/sim-cognito-unsimulated-client-settings.js +0 -44
- package/dist/service/cognito/user-pool/client/sim-cognito-unsimulated-client-settings.js.map +0 -1
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { SimCognitoOAuthError } from "../../error/sim-cognito-oauth.error.js";
|
|
2
|
+
/**
|
|
3
|
+
* Resolves the app client a request to a hosted endpoint names.
|
|
4
|
+
*
|
|
5
|
+
* The two endpoints refuse an unknown client differently, because they are
|
|
6
|
+
* answering different callers: the authorize endpoint is answering a browser
|
|
7
|
+
* and says the request was bad, and the token endpoint is answering an
|
|
8
|
+
* application and says its client authentication failed.
|
|
9
|
+
*/
|
|
10
|
+
export class SimCognitoHostedClient {
|
|
11
|
+
/**
|
|
12
|
+
* The app client an authorize request names, or a refusal the browser sees.
|
|
13
|
+
*
|
|
14
|
+
* Nothing is redirected here. The request has not yet shown that it knows a
|
|
15
|
+
* redirect URI this client registered, so sending the error to the URI it
|
|
16
|
+
* asked for would send it anywhere it liked.
|
|
17
|
+
*/
|
|
18
|
+
forAuthorize(pool, clientId) {
|
|
19
|
+
const client = this.find(pool, clientId);
|
|
20
|
+
if (client === undefined) {
|
|
21
|
+
throw new SimCognitoOAuthError({
|
|
22
|
+
code: "invalid_request",
|
|
23
|
+
description: `client_id '${String(clientId)}' is not an app client of user ` +
|
|
24
|
+
`pool ${pool.id}`,
|
|
25
|
+
redirectable: false,
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
return client;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* The app client a token request names, having authenticated it.
|
|
32
|
+
*
|
|
33
|
+
* A client with a secret has to present it, either in the body or in a basic
|
|
34
|
+
* authorization header. A public client has none to present, and presenting
|
|
35
|
+
* one for it fails rather than being ignored: the request believes it is
|
|
36
|
+
* talking to a client that does not exist.
|
|
37
|
+
*/
|
|
38
|
+
forToken(pool, clientId, clientSecret) {
|
|
39
|
+
const client = this.find(pool, clientId);
|
|
40
|
+
if (client === undefined || client.secret !== clientSecret) {
|
|
41
|
+
throw new SimCognitoOAuthError({
|
|
42
|
+
code: "invalid_client",
|
|
43
|
+
description: "The app client this request authenticated as does not exist, or " +
|
|
44
|
+
"its client secret is not the one it was given",
|
|
45
|
+
redirectable: false,
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
return client;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* The URI the browser is sent back to.
|
|
52
|
+
*
|
|
53
|
+
* A request naming none is sent to the app client's `DefaultRedirectURI`,
|
|
54
|
+
* which is what real Cognito falls back to. One naming a URI the client did
|
|
55
|
+
* not register is refused without redirecting anywhere, because that URI is
|
|
56
|
+
* exactly what cannot be trusted.
|
|
57
|
+
*/
|
|
58
|
+
requiredRedirectUri(client, requested) {
|
|
59
|
+
const redirectUri = requested ?? client.oauth.defaultRedirectUri;
|
|
60
|
+
if (redirectUri === undefined ||
|
|
61
|
+
!client.oauth.allowsRedirectTo(redirectUri)) {
|
|
62
|
+
throw new SimCognitoOAuthError({
|
|
63
|
+
code: "invalid_request",
|
|
64
|
+
description: `redirect_uri '${String(redirectUri)}' is not one of app client ` +
|
|
65
|
+
`${client.id}'s CallbackURLs`,
|
|
66
|
+
redirectable: false,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
return redirectUri;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Refuse a client that cannot complete an authorization code grant.
|
|
73
|
+
*
|
|
74
|
+
* A client is only an authorization server client once
|
|
75
|
+
* `AllowedOAuthFlowsUserPoolClient` is true and `code` is among its
|
|
76
|
+
* `AllowedOAuthFlows`, so one configured for the API alone is refused at the
|
|
77
|
+
* hosted endpoints, as it is on real Cognito.
|
|
78
|
+
*/
|
|
79
|
+
requireCodeGrant(client, redirectable) {
|
|
80
|
+
if (client.oauth.allowsCodeGrant) {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
throw new SimCognitoOAuthError({
|
|
84
|
+
code: "unauthorized_client",
|
|
85
|
+
description: `App client ${client.id} is not allowed the authorization code ` +
|
|
86
|
+
`grant: set AllowedOAuthFlowsUserPoolClient and an AllowedOAuthFlows ` +
|
|
87
|
+
`of 'code' on it`,
|
|
88
|
+
redirectable,
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
find(pool, clientId) {
|
|
92
|
+
if (clientId === undefined || clientId === "") {
|
|
93
|
+
return undefined;
|
|
94
|
+
}
|
|
95
|
+
return pool.findClient(clientId);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=sim-cognito-hosted-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sim-cognito-hosted-client.js","sourceRoot":"","sources":["../../../../../src/service/cognito/command/hosted/sim-cognito-hosted-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAI9E;;;;;;;GAOG;AACH,MAAM,OAAO,sBAAsB;IACjC;;;;;;OAMG;IACH,YAAY,CACV,IAAwB,EACxB,QAA4B;QAE5B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAEzC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,IAAI,oBAAoB,CAAC;gBAC7B,IAAI,EAAE,iBAAiB;gBACvB,WAAW,EACT,cAAc,MAAM,CAAC,QAAQ,CAAC,iCAAiC;oBAC/D,QAAQ,IAAI,CAAC,EAAE,EAAE;gBACnB,YAAY,EAAE,KAAK;aACpB,CAAC,CAAC;QACL,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;;;;OAOG;IACH,QAAQ,CACN,IAAwB,EACxB,QAA4B,EAC5B,YAAgC;QAEhC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAEzC,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;YAC3D,MAAM,IAAI,oBAAoB,CAAC;gBAC7B,IAAI,EAAE,gBAAgB;gBACtB,WAAW,EACT,kEAAkE;oBAClE,+CAA+C;gBACjD,YAAY,EAAE,KAAK;aACpB,CAAC,CAAC;QACL,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;;;;OAOG;IACH,mBAAmB,CACjB,MAAgC,EAChC,SAA6B;QAE7B,MAAM,WAAW,GAAG,SAAS,IAAI,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC;QAEjE,IACE,WAAW,KAAK,SAAS;YACzB,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,WAAW,CAAC,EAC3C,CAAC;YACD,MAAM,IAAI,oBAAoB,CAAC;gBAC7B,IAAI,EAAE,iBAAiB;gBACvB,WAAW,EACT,iBAAiB,MAAM,CAAC,WAAW,CAAC,6BAA6B;oBACjE,GAAG,MAAM,CAAC,EAAE,iBAAiB;gBAC/B,YAAY,EAAE,KAAK;aACpB,CAAC,CAAC;QACL,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;IAED;;;;;;;OAOG;IACH,gBAAgB,CACd,MAAgC,EAChC,YAAqB;QAErB,IAAI,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;YACjC,OAAO;QACT,CAAC;QAED,MAAM,IAAI,oBAAoB,CAAC;YAC7B,IAAI,EAAE,qBAAqB;YAC3B,WAAW,EACT,cAAc,MAAM,CAAC,EAAE,yCAAyC;gBAChE,sEAAsE;gBACtE,iBAAiB;YACnB,YAAY;SACb,CAAC,CAAC;IACL,CAAC;IAEO,IAAI,CACV,IAAwB,EACxB,QAA4B;QAE5B,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,EAAE,EAAE,CAAC;YAC9C,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC;CACF"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { SimClock } from "../../../../util/clock/sim-clock.js";
|
|
2
|
+
import type { SimCognitoTokenIssuer } from "../../user-pool/token/sim-cognito-token-issuer.js";
|
|
3
|
+
import type { SimCognitoUserFactory } from "../../user-pool/user/sim-cognito-user-factory.js";
|
|
4
|
+
import { SimCognitoAuthorizeEndpoint } from "./sim-cognito-authorize-endpoint.js";
|
|
5
|
+
import { SimCognitoLogoutEndpoint } from "./sim-cognito-logout-endpoint.js";
|
|
6
|
+
import { SimCognitoTokenEndpoint } from "./sim-cognito-token-endpoint.js";
|
|
7
|
+
interface SimCognitoHostedCommandsProperties {
|
|
8
|
+
readonly tokenIssuer: SimCognitoTokenIssuer;
|
|
9
|
+
readonly userFactory: SimCognitoUserFactory;
|
|
10
|
+
readonly clock: SimClock;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* The endpoints a pool's hosted domain serves.
|
|
14
|
+
*
|
|
15
|
+
* These are not SDK commands, and nothing authorizes an IAM caller for them:
|
|
16
|
+
* they are what a browser and an application's own server reach over HTTP,
|
|
17
|
+
* holding no AWS credentials at all, in the same way `InitiateAuth` holds
|
|
18
|
+
* none. They are built here with the token issuer the API sign-ins use, so a
|
|
19
|
+
* hosted sign-in and an API sign-in hand out the same kind of token.
|
|
20
|
+
*/
|
|
21
|
+
export declare class SimCognitoHostedCommands {
|
|
22
|
+
readonly authorize: SimCognitoAuthorizeEndpoint;
|
|
23
|
+
readonly token: SimCognitoTokenEndpoint;
|
|
24
|
+
readonly logout: SimCognitoLogoutEndpoint;
|
|
25
|
+
constructor(properties: SimCognitoHostedCommandsProperties);
|
|
26
|
+
}
|
|
27
|
+
export {};
|
|
28
|
+
//# sourceMappingURL=sim-cognito-hosted-commands.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sim-cognito-hosted-commands.d.ts","sourceRoot":"","sources":["../../../../../src/service/cognito/command/hosted/sim-cognito-hosted-commands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAEpE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mDAAmD,CAAC;AAC/F,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kDAAkD,CAAC;AAC9F,OAAO,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAC;AAClF,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAE1E,UAAU,kCAAkC;IAC1C,QAAQ,CAAC,WAAW,EAAE,qBAAqB,CAAC;IAC5C,QAAQ,CAAC,WAAW,EAAE,qBAAqB,CAAC;IAC5C,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;CAC1B;AAED;;;;;;;;GAQG;AACH,qBAAa,wBAAwB;IACnC,SAAgB,SAAS,EAAE,2BAA2B,CAAC;IACvD,SAAgB,KAAK,EAAE,uBAAuB,CAAC;IAC/C,SAAgB,MAAM,2BAAkC;IAExD,YAAY,UAAU,EAAE,kCAAkC,EAQzD;CACF"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { SimCognitoFederatedSignIn } from "../../user-pool/idp/sim-cognito-federated-sign-in.js";
|
|
2
|
+
import { SimCognitoAuthorizeEndpoint } from "./sim-cognito-authorize-endpoint.js";
|
|
3
|
+
import { SimCognitoLogoutEndpoint } from "./sim-cognito-logout-endpoint.js";
|
|
4
|
+
import { SimCognitoTokenEndpoint } from "./sim-cognito-token-endpoint.js";
|
|
5
|
+
/**
|
|
6
|
+
* The endpoints a pool's hosted domain serves.
|
|
7
|
+
*
|
|
8
|
+
* These are not SDK commands, and nothing authorizes an IAM caller for them:
|
|
9
|
+
* they are what a browser and an application's own server reach over HTTP,
|
|
10
|
+
* holding no AWS credentials at all, in the same way `InitiateAuth` holds
|
|
11
|
+
* none. They are built here with the token issuer the API sign-ins use, so a
|
|
12
|
+
* hosted sign-in and an API sign-in hand out the same kind of token.
|
|
13
|
+
*/
|
|
14
|
+
export class SimCognitoHostedCommands {
|
|
15
|
+
authorize;
|
|
16
|
+
token;
|
|
17
|
+
logout = new SimCognitoLogoutEndpoint();
|
|
18
|
+
constructor(properties) {
|
|
19
|
+
const { tokenIssuer, userFactory, clock } = properties;
|
|
20
|
+
this.authorize = new SimCognitoAuthorizeEndpoint({
|
|
21
|
+
federatedSignIn: new SimCognitoFederatedSignIn({ userFactory }),
|
|
22
|
+
clock,
|
|
23
|
+
});
|
|
24
|
+
this.token = new SimCognitoTokenEndpoint({ tokenIssuer, clock });
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=sim-cognito-hosted-commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sim-cognito-hosted-commands.js","sourceRoot":"","sources":["../../../../../src/service/cognito/command/hosted/sim-cognito-hosted-commands.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,sDAAsD,CAAC;AAGjG,OAAO,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAC;AAClF,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAQ1E;;;;;;;;GAQG;AACH,MAAM,OAAO,wBAAwB;IACnB,SAAS,CAA8B;IACvC,KAAK,CAA0B;IAC/B,MAAM,GAAG,IAAI,wBAAwB,EAAE,CAAC;IAExD,YAAY,UAA8C;QACxD,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,UAAU,CAAC;QAEvD,IAAI,CAAC,SAAS,GAAG,IAAI,2BAA2B,CAAC;YAC/C,eAAe,EAAE,IAAI,yBAAyB,CAAC,EAAE,WAAW,EAAE,CAAC;YAC/D,KAAK;SACN,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,GAAG,IAAI,uBAAuB,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;IACnE,CAAC;CACF"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { SimCognitoUserPool } from "../../user-pool/sim-cognito-user-pool.js";
|
|
2
|
+
import type { SimCognitoHostedRedirect, SimCognitoLogoutInput } from "./hosted-auth.command.js";
|
|
3
|
+
/**
|
|
4
|
+
* The `/logout` endpoint of a pool's hosted domain.
|
|
5
|
+
*
|
|
6
|
+
* Real Cognito ends the managed login session in the browser's cookie and
|
|
7
|
+
* sends the user to one of the app client's sign-out URLs. There is no such
|
|
8
|
+
* session here, because every authorize request signs in afresh at the
|
|
9
|
+
* identity provider rather than reusing a cookie, so what is left is the
|
|
10
|
+
* redirect and the check that the URL is one the app client registered.
|
|
11
|
+
*
|
|
12
|
+
* It signs nobody out at the identity provider either, which real Cognito also
|
|
13
|
+
* does not do: a user signed out here is still signed in at Google.
|
|
14
|
+
*/
|
|
15
|
+
export declare class SimCognitoLogoutEndpoint {
|
|
16
|
+
private readonly hostedClient;
|
|
17
|
+
/**
|
|
18
|
+
* Send the browser to the application's sign-out page.
|
|
19
|
+
*/
|
|
20
|
+
handle(pool: SimCognitoUserPool, input: SimCognitoLogoutInput): SimCognitoHostedRedirect;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=sim-cognito-logout-endpoint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sim-cognito-logout-endpoint.d.ts","sourceRoot":"","sources":["../../../../../src/service/cognito/command/hosted/sim-cognito-logout-endpoint.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AAEnF,OAAO,KAAK,EACV,wBAAwB,EACxB,qBAAqB,EACtB,MAAM,0BAA0B,CAAC;AAElC;;;;;;;;;;;GAWG;AACH,qBAAa,wBAAwB;IACnC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAgC;IAE7D;;OAEG;IACH,MAAM,CACJ,IAAI,EAAE,kBAAkB,EACxB,KAAK,EAAE,qBAAqB,GAC3B,wBAAwB,CA0B1B;CACF"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { SimCognitoOAuthError } from "../../error/sim-cognito-oauth.error.js";
|
|
2
|
+
import { SimCognitoHostedClient } from "./sim-cognito-hosted-client.js";
|
|
3
|
+
/**
|
|
4
|
+
* The `/logout` endpoint of a pool's hosted domain.
|
|
5
|
+
*
|
|
6
|
+
* Real Cognito ends the managed login session in the browser's cookie and
|
|
7
|
+
* sends the user to one of the app client's sign-out URLs. There is no such
|
|
8
|
+
* session here, because every authorize request signs in afresh at the
|
|
9
|
+
* identity provider rather than reusing a cookie, so what is left is the
|
|
10
|
+
* redirect and the check that the URL is one the app client registered.
|
|
11
|
+
*
|
|
12
|
+
* It signs nobody out at the identity provider either, which real Cognito also
|
|
13
|
+
* does not do: a user signed out here is still signed in at Google.
|
|
14
|
+
*/
|
|
15
|
+
export class SimCognitoLogoutEndpoint {
|
|
16
|
+
hostedClient = new SimCognitoHostedClient();
|
|
17
|
+
/**
|
|
18
|
+
* Send the browser to the application's sign-out page.
|
|
19
|
+
*/
|
|
20
|
+
handle(pool, input) {
|
|
21
|
+
const client = this.hostedClient.forAuthorize(pool, input.client_id);
|
|
22
|
+
const { logout_uri: logoutUri } = input;
|
|
23
|
+
if (logoutUri === undefined) {
|
|
24
|
+
throw new SimCognitoOAuthError({
|
|
25
|
+
code: "invalid_request",
|
|
26
|
+
description: "logout_uri is required here. A logout request without one sends " +
|
|
27
|
+
"the user to managed login to sign in again, which is a page " +
|
|
28
|
+
"rather than anything this simulation can answer.",
|
|
29
|
+
redirectable: false,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
if (!client.oauth.allowsSignOutTo(logoutUri)) {
|
|
33
|
+
throw new SimCognitoOAuthError({
|
|
34
|
+
code: "invalid_request",
|
|
35
|
+
description: `logout_uri '${logoutUri}' is not one of app client ${client.id}'s ` +
|
|
36
|
+
`LogoutURLs`,
|
|
37
|
+
redirectable: false,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
return { location: logoutUri };
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=sim-cognito-logout-endpoint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sim-cognito-logout-endpoint.js","sourceRoot":"","sources":["../../../../../src/service/cognito/command/hosted/sim-cognito-logout-endpoint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAE9E,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAMxE;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,wBAAwB;IAClB,YAAY,GAAG,IAAI,sBAAsB,EAAE,CAAC;IAE7D;;OAEG;IACH,MAAM,CACJ,IAAwB,EACxB,KAA4B;QAE5B,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QACrE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;QAExC,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,MAAM,IAAI,oBAAoB,CAAC;gBAC7B,IAAI,EAAE,iBAAiB;gBACvB,WAAW,EACT,kEAAkE;oBAClE,8DAA8D;oBAC9D,kDAAkD;gBACpD,YAAY,EAAE,KAAK;aACpB,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7C,MAAM,IAAI,oBAAoB,CAAC;gBAC7B,IAAI,EAAE,iBAAiB;gBACvB,WAAW,EACT,eAAe,SAAS,8BAA8B,MAAM,CAAC,EAAE,KAAK;oBACpE,YAAY;gBACd,YAAY,EAAE,KAAK;aACpB,CAAC,CAAC;QACL,CAAC;QAED,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;IACjC,CAAC;CACF"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { SimCognitoAuthorizationCode } from "../../user-pool/auth/sim-cognito-authorization-code.js";
|
|
2
|
+
import type { SimCognitoIssuedToken } from "../../user-pool/auth/sim-cognito-issued-token.js";
|
|
3
|
+
import type { SimCognitoUserPoolClient } from "../../user-pool/client/sim-cognito-user-pool-client.js";
|
|
4
|
+
import type { SimCognitoUserPool } from "../../user-pool/sim-cognito-user-pool.js";
|
|
5
|
+
import type { SimCognitoUser } from "../../user-pool/user/sim-cognito-user.js";
|
|
6
|
+
import type { SimCognitoTokenInput } from "./hosted-auth.command.js";
|
|
7
|
+
interface SimCognitoPresentedGrantRequest {
|
|
8
|
+
readonly pool: SimCognitoUserPool;
|
|
9
|
+
readonly client: SimCognitoUserPoolClient;
|
|
10
|
+
readonly input: SimCognitoTokenInput;
|
|
11
|
+
readonly now: Date;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* What a token request presented, once everything that could be wrong with it
|
|
15
|
+
* has been checked.
|
|
16
|
+
*
|
|
17
|
+
* This is where a grant most often fails, and each way of failing has its own
|
|
18
|
+
* answer, so the checking lives here rather than among the token issuing.
|
|
19
|
+
*/
|
|
20
|
+
export declare class SimCognitoPresentedGrant {
|
|
21
|
+
/**
|
|
22
|
+
* Take the authorization code a request carries, or refuse.
|
|
23
|
+
*
|
|
24
|
+
* The code is spent whether or not the rest of the request turns out to be
|
|
25
|
+
* right, as real Cognito spends one, so nothing can be retried with a code
|
|
26
|
+
* that has already been presented.
|
|
27
|
+
*/
|
|
28
|
+
code(request: SimCognitoPresentedGrantRequest): SimCognitoAuthorizationCode;
|
|
29
|
+
/**
|
|
30
|
+
* Take the refresh token a request carries, or refuse.
|
|
31
|
+
*/
|
|
32
|
+
refreshToken(request: SimCognitoPresentedGrantRequest): SimCognitoIssuedToken;
|
|
33
|
+
/**
|
|
34
|
+
* The user a grant was made for, which the pool may no longer hold.
|
|
35
|
+
*/
|
|
36
|
+
user(pool: SimCognitoUserPool, username: string): SimCognitoUser;
|
|
37
|
+
/**
|
|
38
|
+
* Refuse a redirect URI that is not the one the code was issued for.
|
|
39
|
+
*
|
|
40
|
+
* Real Cognito answers this with `unauthorized_client` rather than with
|
|
41
|
+
* `invalid_grant`, and says `invalid_redirect` in the description.
|
|
42
|
+
*/
|
|
43
|
+
private requireMatchingRedirect;
|
|
44
|
+
private requireVerifier;
|
|
45
|
+
}
|
|
46
|
+
export {};
|
|
47
|
+
//# sourceMappingURL=sim-cognito-presented-grant.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sim-cognito-presented-grant.d.ts","sourceRoot":"","sources":["../../../../../src/service/cognito/command/hosted/sim-cognito-presented-grant.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,wDAAwD,CAAC;AAC1G,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kDAAkD,CAAC;AAC9F,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,wDAAwD,CAAC;AACvG,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AACnF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAC/E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAErE,UAAU,+BAA+B;IACvC,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,wBAAwB,CAAC;IAC1C,QAAQ,CAAC,KAAK,EAAE,oBAAoB,CAAC;IACrC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;CACpB;AAED;;;;;;GAMG;AACH,qBAAa,wBAAwB;IACnC;;;;;;OAMG;IACH,IAAI,CAAC,OAAO,EAAE,+BAA+B,GAAG,2BAA2B,CAkB1E;IAED;;OAEG;IACH,YAAY,CACV,OAAO,EAAE,+BAA+B,GACvC,qBAAqB,CAmBvB;IAED;;OAEG;IACH,IAAI,CAAC,IAAI,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,GAAG,cAAc,CAc/D;IAED;;;;;OAKG;IACH,OAAO,CAAC,uBAAuB;IAe/B,OAAO,CAAC,eAAe;CAcxB"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { SimCognitoOAuthError } from "../../error/sim-cognito-oauth.error.js";
|
|
2
|
+
/**
|
|
3
|
+
* What a token request presented, once everything that could be wrong with it
|
|
4
|
+
* has been checked.
|
|
5
|
+
*
|
|
6
|
+
* This is where a grant most often fails, and each way of failing has its own
|
|
7
|
+
* answer, so the checking lives here rather than among the token issuing.
|
|
8
|
+
*/
|
|
9
|
+
export class SimCognitoPresentedGrant {
|
|
10
|
+
/**
|
|
11
|
+
* Take the authorization code a request carries, or refuse.
|
|
12
|
+
*
|
|
13
|
+
* The code is spent whether or not the rest of the request turns out to be
|
|
14
|
+
* right, as real Cognito spends one, so nothing can be retried with a code
|
|
15
|
+
* that has already been presented.
|
|
16
|
+
*/
|
|
17
|
+
code(request) {
|
|
18
|
+
const { pool, client, input, now } = request;
|
|
19
|
+
const code = pool.auth.spendAuthorizationCode(input.code, now);
|
|
20
|
+
if (code === undefined || !code.isFor(client.id)) {
|
|
21
|
+
throw new SimCognitoOAuthError({
|
|
22
|
+
code: "invalid_grant",
|
|
23
|
+
description: "The authorization code has been used already, has run out, or " +
|
|
24
|
+
"was not issued to this app client",
|
|
25
|
+
redirectable: false,
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
this.requireMatchingRedirect(code, input.redirect_uri);
|
|
29
|
+
this.requireVerifier(code, input.code_verifier);
|
|
30
|
+
return code;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Take the refresh token a request carries, or refuse.
|
|
34
|
+
*/
|
|
35
|
+
refreshToken(request) {
|
|
36
|
+
const { pool, client, input, now } = request;
|
|
37
|
+
const found = pool.auth.findRefreshToken(input.refresh_token);
|
|
38
|
+
if (found === undefined ||
|
|
39
|
+
!found.isFor(client.id) ||
|
|
40
|
+
found.isExpiredAt(now)) {
|
|
41
|
+
throw new SimCognitoOAuthError({
|
|
42
|
+
code: "invalid_grant",
|
|
43
|
+
description: "The refresh token has been revoked, has run out, or was not " +
|
|
44
|
+
"issued to this app client",
|
|
45
|
+
redirectable: false,
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
return found;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* The user a grant was made for, which the pool may no longer hold.
|
|
52
|
+
*/
|
|
53
|
+
user(pool, username) {
|
|
54
|
+
const user = pool.findUser(username);
|
|
55
|
+
if (user === undefined || !user.enabled) {
|
|
56
|
+
throw new SimCognitoOAuthError({
|
|
57
|
+
code: "invalid_grant",
|
|
58
|
+
description: `The user this grant was made for is disabled or no longer in ` +
|
|
59
|
+
`user pool ${pool.id}`,
|
|
60
|
+
redirectable: false,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
return user;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Refuse a redirect URI that is not the one the code was issued for.
|
|
67
|
+
*
|
|
68
|
+
* Real Cognito answers this with `unauthorized_client` rather than with
|
|
69
|
+
* `invalid_grant`, and says `invalid_redirect` in the description.
|
|
70
|
+
*/
|
|
71
|
+
requireMatchingRedirect(code, redirectUri) {
|
|
72
|
+
if (!code.isForRedirect(redirectUri)) {
|
|
73
|
+
throw new SimCognitoOAuthError({
|
|
74
|
+
code: "unauthorized_client",
|
|
75
|
+
description: "invalid_redirect: redirect_uri is not the one the authorization " +
|
|
76
|
+
"code was issued for",
|
|
77
|
+
redirectable: false,
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
requireVerifier(code, codeVerifier) {
|
|
82
|
+
if (!code.matchesVerifier(codeVerifier)) {
|
|
83
|
+
throw new SimCognitoOAuthError({
|
|
84
|
+
code: "invalid_grant",
|
|
85
|
+
description: "code_verifier is not the verifier the authorization request's " +
|
|
86
|
+
"code_challenge was derived from",
|
|
87
|
+
redirectable: false,
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=sim-cognito-presented-grant.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sim-cognito-presented-grant.js","sourceRoot":"","sources":["../../../../../src/service/cognito/command/hosted/sim-cognito-presented-grant.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAe9E;;;;;;GAMG;AACH,MAAM,OAAO,wBAAwB;IACnC;;;;;;OAMG;IACH,IAAI,CAAC,OAAwC;QAC3C,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;QAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAE/D,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;YACjD,MAAM,IAAI,oBAAoB,CAAC;gBAC7B,IAAI,EAAE,eAAe;gBACrB,WAAW,EACT,gEAAgE;oBAChE,mCAAmC;gBACrC,YAAY,EAAE,KAAK;aACpB,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;QACvD,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;QAEhD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,YAAY,CACV,OAAwC;QAExC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAE9D,IACE,KAAK,KAAK,SAAS;YACnB,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;YACvB,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,EACtB,CAAC;YACD,MAAM,IAAI,oBAAoB,CAAC;gBAC7B,IAAI,EAAE,eAAe;gBACrB,WAAW,EACT,8DAA8D;oBAC9D,2BAA2B;gBAC7B,YAAY,EAAE,KAAK;aACpB,CAAC,CAAC;QACL,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,IAAwB,EAAE,QAAgB;QAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAErC,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACxC,MAAM,IAAI,oBAAoB,CAAC;gBAC7B,IAAI,EAAE,eAAe;gBACrB,WAAW,EACT,+DAA+D;oBAC/D,aAAa,IAAI,CAAC,EAAE,EAAE;gBACxB,YAAY,EAAE,KAAK;aACpB,CAAC,CAAC;QACL,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;OAKG;IACK,uBAAuB,CAC7B,IAAiC,EACjC,WAA+B;QAE/B,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,oBAAoB,CAAC;gBAC7B,IAAI,EAAE,qBAAqB;gBAC3B,WAAW,EACT,kEAAkE;oBAClE,qBAAqB;gBACvB,YAAY,EAAE,KAAK;aACpB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAEO,eAAe,CACrB,IAAiC,EACjC,YAAgC;QAEhC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,EAAE,CAAC;YACxC,MAAM,IAAI,oBAAoB,CAAC;gBAC7B,IAAI,EAAE,eAAe;gBACrB,WAAW,EACT,gEAAgE;oBAChE,iCAAiC;gBACnC,YAAY,EAAE,KAAK;aACpB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { SimClock } from "../../../../util/clock/sim-clock.js";
|
|
2
|
+
import type { SimCognitoUserPool } from "../../user-pool/sim-cognito-user-pool.js";
|
|
3
|
+
import type { SimCognitoTokenIssuer } from "../../user-pool/token/sim-cognito-token-issuer.js";
|
|
4
|
+
import type { SimCognitoTokenInput, SimCognitoTokenOutput } from "./hosted-auth.command.js";
|
|
5
|
+
interface SimCognitoTokenEndpointProperties {
|
|
6
|
+
readonly tokenIssuer: SimCognitoTokenIssuer;
|
|
7
|
+
readonly clock: SimClock;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* The `/oauth2/token` endpoint of a pool's hosted domain.
|
|
11
|
+
*
|
|
12
|
+
* This is the half of an authorization code grant that happens on the
|
|
13
|
+
* application's own server: the browser carried the code back, and the
|
|
14
|
+
* application exchanges it here for the tokens, authenticating as the app
|
|
15
|
+
* client while it does.
|
|
16
|
+
*
|
|
17
|
+
* The tokens come from the pool's own token issuer rather than from anything
|
|
18
|
+
* here, so a token from a hosted sign-in is the same token an API sign-in
|
|
19
|
+
* issues, runs the same `PreTokenGeneration` trigger, and is remembered by the
|
|
20
|
+
* pool the same way.
|
|
21
|
+
*/
|
|
22
|
+
export declare class SimCognitoTokenEndpoint {
|
|
23
|
+
private readonly hostedClient;
|
|
24
|
+
private readonly grants;
|
|
25
|
+
constructor(properties: SimCognitoTokenEndpointProperties);
|
|
26
|
+
/**
|
|
27
|
+
* Exchange an authorization code or a refresh token for tokens.
|
|
28
|
+
*/
|
|
29
|
+
handle(pool: SimCognitoUserPool, input: SimCognitoTokenInput): Promise<SimCognitoTokenOutput>;
|
|
30
|
+
private unsupportedGrantDescription;
|
|
31
|
+
}
|
|
32
|
+
export {};
|
|
33
|
+
//# sourceMappingURL=sim-cognito-token-endpoint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sim-cognito-token-endpoint.d.ts","sourceRoot":"","sources":["../../../../../src/service/cognito/command/hosted/sim-cognito-token-endpoint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAEpE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AACnF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mDAAmD,CAAC;AAG/F,OAAO,KAAK,EACV,oBAAoB,EACpB,qBAAqB,EACtB,MAAM,0BAA0B,CAAC;AASlC,UAAU,iCAAiC;IACzC,QAAQ,CAAC,WAAW,EAAE,qBAAqB,CAAC;IAC5C,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;CAC1B;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,uBAAuB;IAClC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAgC;IAC7D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwB;IAE/C,YAAY,UAAU,EAAE,iCAAiC,EAExD;IAED;;OAEG;IACG,MAAM,CACV,IAAI,EAAE,kBAAkB,EACxB,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,qBAAqB,CAAC,CAsBhC;IAED,OAAO,CAAC,2BAA2B;CAepC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { SimCognitoOAuthError } from "../../error/sim-cognito-oauth.error.js";
|
|
2
|
+
import { SimCognitoHostedClient } from "./sim-cognito-hosted-client.js";
|
|
3
|
+
import { SimCognitoTokenGrants } from "./sim-cognito-token-grants.js";
|
|
4
|
+
/**
|
|
5
|
+
* The grants this endpoint answers.
|
|
6
|
+
*/
|
|
7
|
+
const authorizationCodeGrant = "authorization_code";
|
|
8
|
+
const refreshTokenGrant = "refresh_token";
|
|
9
|
+
const clientCredentialsGrant = "client_credentials";
|
|
10
|
+
/**
|
|
11
|
+
* The `/oauth2/token` endpoint of a pool's hosted domain.
|
|
12
|
+
*
|
|
13
|
+
* This is the half of an authorization code grant that happens on the
|
|
14
|
+
* application's own server: the browser carried the code back, and the
|
|
15
|
+
* application exchanges it here for the tokens, authenticating as the app
|
|
16
|
+
* client while it does.
|
|
17
|
+
*
|
|
18
|
+
* The tokens come from the pool's own token issuer rather than from anything
|
|
19
|
+
* here, so a token from a hosted sign-in is the same token an API sign-in
|
|
20
|
+
* issues, runs the same `PreTokenGeneration` trigger, and is remembered by the
|
|
21
|
+
* pool the same way.
|
|
22
|
+
*/
|
|
23
|
+
export class SimCognitoTokenEndpoint {
|
|
24
|
+
hostedClient = new SimCognitoHostedClient();
|
|
25
|
+
grants;
|
|
26
|
+
constructor(properties) {
|
|
27
|
+
this.grants = new SimCognitoTokenGrants(properties);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Exchange an authorization code or a refresh token for tokens.
|
|
31
|
+
*/
|
|
32
|
+
async handle(pool, input) {
|
|
33
|
+
const client = this.hostedClient.forToken(pool, input.client_id, input.client_secret);
|
|
34
|
+
this.hostedClient.requireCodeGrant(client, false);
|
|
35
|
+
if (input.grant_type === authorizationCodeGrant) {
|
|
36
|
+
return await this.grants.exchangeCode(pool, client, input);
|
|
37
|
+
}
|
|
38
|
+
if (input.grant_type === refreshTokenGrant) {
|
|
39
|
+
return await this.grants.refresh(pool, client, input);
|
|
40
|
+
}
|
|
41
|
+
throw new SimCognitoOAuthError({
|
|
42
|
+
code: "unsupported_grant_type",
|
|
43
|
+
description: this.unsupportedGrantDescription(input.grant_type),
|
|
44
|
+
redirectable: false,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
unsupportedGrantDescription(grantType) {
|
|
48
|
+
if (grantType === clientCredentialsGrant) {
|
|
49
|
+
return ("grant_type 'client_credentials' is not simulated: it issues a " +
|
|
50
|
+
"token for the custom scopes of a resource server, and resource " +
|
|
51
|
+
"servers are not simulated");
|
|
52
|
+
}
|
|
53
|
+
return (`grant_type '${String(grantType)}' is not a grant this endpoint ` +
|
|
54
|
+
`answers: it answers '${authorizationCodeGrant}' and ` +
|
|
55
|
+
`'${refreshTokenGrant}'`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=sim-cognito-token-endpoint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sim-cognito-token-endpoint.js","sourceRoot":"","sources":["../../../../../src/service/cognito/command/hosted/sim-cognito-token-endpoint.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAG9E,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAMtE;;GAEG;AACH,MAAM,sBAAsB,GAAG,oBAAoB,CAAC;AACpD,MAAM,iBAAiB,GAAG,eAAe,CAAC;AAC1C,MAAM,sBAAsB,GAAG,oBAAoB,CAAC;AAOpD;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,uBAAuB;IACjB,YAAY,GAAG,IAAI,sBAAsB,EAAE,CAAC;IAC5C,MAAM,CAAwB;IAE/C,YAAY,UAA6C;QACvD,IAAI,CAAC,MAAM,GAAG,IAAI,qBAAqB,CAAC,UAAU,CAAC,CAAC;IACtD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CACV,IAAwB,EACxB,KAA2B;QAE3B,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CACvC,IAAI,EACJ,KAAK,CAAC,SAAS,EACf,KAAK,CAAC,aAAa,CACpB,CAAC;QAEF,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAElD,IAAI,KAAK,CAAC,UAAU,KAAK,sBAAsB,EAAE,CAAC;YAChD,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QAC7D,CAAC;QAED,IAAI,KAAK,CAAC,UAAU,KAAK,iBAAiB,EAAE,CAAC;YAC3C,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QACxD,CAAC;QAED,MAAM,IAAI,oBAAoB,CAAC;YAC7B,IAAI,EAAE,wBAAwB;YAC9B,WAAW,EAAE,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC,UAAU,CAAC;YAC/D,YAAY,EAAE,KAAK;SACpB,CAAC,CAAC;IACL,CAAC;IAEO,2BAA2B,CAAC,SAA6B;QAC/D,IAAI,SAAS,KAAK,sBAAsB,EAAE,CAAC;YACzC,OAAO,CACL,gEAAgE;gBAChE,iEAAiE;gBACjE,2BAA2B,CAC5B,CAAC;QACJ,CAAC;QAED,OAAO,CACL,eAAe,MAAM,CAAC,SAAS,CAAC,iCAAiC;YACjE,wBAAwB,sBAAsB,QAAQ;YACtD,IAAI,iBAAiB,GAAG,CACzB,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { SimClock } from "../../../../util/clock/sim-clock.js";
|
|
2
|
+
import type { SimCognitoUserPoolClient } from "../../user-pool/client/sim-cognito-user-pool-client.js";
|
|
3
|
+
import type { SimCognitoUserPool } from "../../user-pool/sim-cognito-user-pool.js";
|
|
4
|
+
import type { SimCognitoTokenIssuer } from "../../user-pool/token/sim-cognito-token-issuer.js";
|
|
5
|
+
import type { SimCognitoTokenInput, SimCognitoTokenOutput } from "./hosted-auth.command.js";
|
|
6
|
+
interface SimCognitoTokenGrantsProperties {
|
|
7
|
+
readonly tokenIssuer: SimCognitoTokenIssuer;
|
|
8
|
+
readonly clock: SimClock;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* The two grants the token endpoint answers.
|
|
12
|
+
*
|
|
13
|
+
* The tokens come from the pool's own token issuer rather than from anything
|
|
14
|
+
* here, so a token from a hosted sign-in is the same token an API sign-in
|
|
15
|
+
* issues, runs the same `PreTokenGeneration` trigger, and is remembered by the
|
|
16
|
+
* pool the same way.
|
|
17
|
+
*/
|
|
18
|
+
export declare class SimCognitoTokenGrants {
|
|
19
|
+
private readonly tokenIssuer;
|
|
20
|
+
private readonly clock;
|
|
21
|
+
private readonly presented;
|
|
22
|
+
private readonly granted;
|
|
23
|
+
constructor(properties: SimCognitoTokenGrantsProperties);
|
|
24
|
+
/**
|
|
25
|
+
* Exchange an authorization code for tokens.
|
|
26
|
+
*
|
|
27
|
+
* The code is spent whether or not the rest of the request turns out to be
|
|
28
|
+
* right, as real Cognito spends one, so nothing can be retried with a code
|
|
29
|
+
* that has already been presented.
|
|
30
|
+
*/
|
|
31
|
+
exchangeCode(pool: SimCognitoUserPool, client: SimCognitoUserPoolClient, input: SimCognitoTokenInput): Promise<SimCognitoTokenOutput>;
|
|
32
|
+
/**
|
|
33
|
+
* Sign fresh tokens for an application that presented a refresh token.
|
|
34
|
+
*
|
|
35
|
+
* No new refresh token comes back, as none does from real Cognito with
|
|
36
|
+
* refresh token rotation off, and the access token keeps the scopes the
|
|
37
|
+
* sign-in it came from was granted.
|
|
38
|
+
*/
|
|
39
|
+
refresh(pool: SimCognitoUserPool, client: SimCognitoUserPoolClient, input: SimCognitoTokenInput): Promise<SimCognitoTokenOutput>;
|
|
40
|
+
}
|
|
41
|
+
export {};
|
|
42
|
+
//# sourceMappingURL=sim-cognito-token-grants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sim-cognito-token-grants.d.ts","sourceRoot":"","sources":["../../../../../src/service/cognito/command/hosted/sim-cognito-token-grants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,wDAAwD,CAAC;AACvG,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AACnF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mDAAmD,CAAC;AAI/F,OAAO,KAAK,EACV,oBAAoB,EACpB,qBAAqB,EACtB,MAAM,0BAA0B,CAAC;AAElC,UAAU,+BAA+B;IACvC,QAAQ,CAAC,WAAW,EAAE,qBAAqB,CAAC;IAC5C,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;CAC1B;AAED;;;;;;;GAOG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAwB;IACpD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAW;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkC;IAC5D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiC;IAEzD,YAAY,UAAU,EAAE,+BAA+B,EAGtD;IAED;;;;;;OAMG;IACG,YAAY,CAChB,IAAI,EAAE,kBAAkB,EACxB,MAAM,EAAE,wBAAwB,EAChC,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,qBAAqB,CAAC,CAiBhC;IAED;;;;;;OAMG;IACG,OAAO,CACX,IAAI,EAAE,kBAAkB,EACxB,MAAM,EAAE,wBAAwB,EAChC,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,qBAAqB,CAAC,CAiBhC;CACF"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { SimCognitoTriggerOccasion } from "../../user-pool/trigger/sim-cognito-trigger-occasion.js";
|
|
2
|
+
import { SimCognitoGrantedTokens } from "./sim-cognito-granted-tokens.js";
|
|
3
|
+
import { SimCognitoPresentedGrant } from "./sim-cognito-presented-grant.js";
|
|
4
|
+
/**
|
|
5
|
+
* The two grants the token endpoint answers.
|
|
6
|
+
*
|
|
7
|
+
* The tokens come from the pool's own token issuer rather than from anything
|
|
8
|
+
* here, so a token from a hosted sign-in is the same token an API sign-in
|
|
9
|
+
* issues, runs the same `PreTokenGeneration` trigger, and is remembered by the
|
|
10
|
+
* pool the same way.
|
|
11
|
+
*/
|
|
12
|
+
export class SimCognitoTokenGrants {
|
|
13
|
+
tokenIssuer;
|
|
14
|
+
clock;
|
|
15
|
+
presented = new SimCognitoPresentedGrant();
|
|
16
|
+
granted = new SimCognitoGrantedTokens();
|
|
17
|
+
constructor(properties) {
|
|
18
|
+
this.tokenIssuer = properties.tokenIssuer;
|
|
19
|
+
this.clock = properties.clock;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Exchange an authorization code for tokens.
|
|
23
|
+
*
|
|
24
|
+
* The code is spent whether or not the rest of the request turns out to be
|
|
25
|
+
* right, as real Cognito spends one, so nothing can be retried with a code
|
|
26
|
+
* that has already been presented.
|
|
27
|
+
*/
|
|
28
|
+
async exchangeCode(pool, client, input) {
|
|
29
|
+
const code = this.presented.code({
|
|
30
|
+
pool,
|
|
31
|
+
client,
|
|
32
|
+
input,
|
|
33
|
+
now: this.clock.now(),
|
|
34
|
+
});
|
|
35
|
+
const user = this.presented.user(pool, code.username);
|
|
36
|
+
const issued = await this.tokenIssuer.issue({
|
|
37
|
+
pool,
|
|
38
|
+
client,
|
|
39
|
+
user,
|
|
40
|
+
occasion: SimCognitoTriggerOccasion.tokenGeneration,
|
|
41
|
+
scopes: code.scopes,
|
|
42
|
+
});
|
|
43
|
+
return this.granted.body(issued, code.scopes);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Sign fresh tokens for an application that presented a refresh token.
|
|
47
|
+
*
|
|
48
|
+
* No new refresh token comes back, as none does from real Cognito with
|
|
49
|
+
* refresh token rotation off, and the access token keeps the scopes the
|
|
50
|
+
* sign-in it came from was granted.
|
|
51
|
+
*/
|
|
52
|
+
async refresh(pool, client, input) {
|
|
53
|
+
const refreshToken = this.presented.refreshToken({
|
|
54
|
+
pool,
|
|
55
|
+
client,
|
|
56
|
+
input,
|
|
57
|
+
now: this.clock.now(),
|
|
58
|
+
});
|
|
59
|
+
const user = this.presented.user(pool, refreshToken.username);
|
|
60
|
+
const issued = await this.tokenIssuer.reissue({
|
|
61
|
+
pool,
|
|
62
|
+
client,
|
|
63
|
+
user,
|
|
64
|
+
occasion: SimCognitoTriggerOccasion.refreshTokenGeneration,
|
|
65
|
+
scopes: refreshToken.scopes,
|
|
66
|
+
});
|
|
67
|
+
return this.granted.body(issued, refreshToken.scopes);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=sim-cognito-token-grants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sim-cognito-token-grants.js","sourceRoot":"","sources":["../../../../../src/service/cognito/command/hosted/sim-cognito-token-grants.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,yBAAyB,EAAE,MAAM,yDAAyD,CAAC;AACpG,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAW5E;;;;;;;GAOG;AACH,MAAM,OAAO,qBAAqB;IACf,WAAW,CAAwB;IACnC,KAAK,CAAW;IAChB,SAAS,GAAG,IAAI,wBAAwB,EAAE,CAAC;IAC3C,OAAO,GAAG,IAAI,uBAAuB,EAAE,CAAC;IAEzD,YAAY,UAA2C;QACrD,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,WAAW,CAAC;QAC1C,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC;IAChC,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,YAAY,CAChB,IAAwB,EACxB,MAAgC,EAChC,KAA2B;QAE3B,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAC/B,IAAI;YACJ,MAAM;YACN,KAAK;YACL,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;SACtB,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;YAC1C,IAAI;YACJ,MAAM;YACN,IAAI;YACJ,QAAQ,EAAE,yBAAyB,CAAC,eAAe;YACnD,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAChD,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,OAAO,CACX,IAAwB,EACxB,MAAgC,EAChC,KAA2B;QAE3B,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC;YAC/C,IAAI;YACJ,MAAM;YACN,KAAK;YACL,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;SACtB,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC9D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;YAC5C,IAAI;YACJ,MAAM;YACN,IAAI;YACJ,QAAQ,EAAE,yBAAyB,CAAC,sBAAsB;YAC1D,MAAM,EAAE,YAAY,CAAC,MAAM;SAC5B,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;IACxD,CAAC;CACF"}
|