@atlasauth/cli 0.11.0 → 0.13.0
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/CHANGELOG.md +15 -0
- package/dist/args.d.ts +121 -0
- package/dist/args.js +45 -0
- package/dist/args.js.map +1 -1
- package/dist/commands/config.js +71 -6
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/dev.d.ts +8 -0
- package/dist/commands/dev.js +84 -0
- package/dist/commands/dev.js.map +1 -0
- package/dist/commands/init.js +13 -8
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/migrate.d.ts +6 -2
- package/dist/commands/migrate.js +13 -3
- package/dist/commands/migrate.js.map +1 -1
- package/dist/commands/pages.d.ts +14 -0
- package/dist/commands/pages.js +113 -0
- package/dist/commands/pages.js.map +1 -0
- package/dist/context.d.ts +1 -1
- package/dist/help.d.ts +1 -1
- package/dist/help.js +96 -2
- package/dist/help.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/migrate/appwrite/plugin.d.ts +2 -0
- package/dist/migrate/appwrite/plugin.js +103 -0
- package/dist/migrate/appwrite/plugin.js.map +1 -0
- package/dist/migrate/auth0/plugin.d.ts +2 -0
- package/dist/migrate/auth0/plugin.js +126 -0
- package/dist/migrate/auth0/plugin.js.map +1 -0
- package/dist/migrate/authentik/plugin.d.ts +2 -0
- package/dist/migrate/authentik/plugin.js +135 -0
- package/dist/migrate/authentik/plugin.js.map +1 -0
- package/dist/migrate/azure-ad-b2c/plugin.d.ts +8 -0
- package/dist/migrate/azure-ad-b2c/plugin.js +165 -0
- package/dist/migrate/azure-ad-b2c/plugin.js.map +1 -0
- package/dist/migrate/clerk/plugin.d.ts +2 -0
- package/dist/migrate/clerk/plugin.js +76 -0
- package/dist/migrate/clerk/plugin.js.map +1 -0
- package/dist/migrate/cognito/plugin.d.ts +5 -0
- package/dist/migrate/cognito/plugin.js +170 -0
- package/dist/migrate/cognito/plugin.js.map +1 -0
- package/dist/migrate/corbado/plugin.d.ts +2 -0
- package/dist/migrate/corbado/plugin.js +63 -0
- package/dist/migrate/corbado/plugin.js.map +1 -0
- package/dist/migrate/descope/plugin.d.ts +2 -0
- package/dist/migrate/descope/plugin.js +83 -0
- package/dist/migrate/descope/plugin.js.map +1 -0
- package/dist/migrate/entra-external-id/plugin.d.ts +8 -0
- package/dist/migrate/entra-external-id/plugin.js +12 -0
- package/dist/migrate/entra-external-id/plugin.js.map +1 -0
- package/dist/migrate/export/appwrite-config.d.ts +28 -0
- package/dist/migrate/export/appwrite-config.js +170 -0
- package/dist/migrate/export/appwrite-config.js.map +1 -0
- package/dist/migrate/export/appwrite.d.ts +51 -0
- package/dist/migrate/export/appwrite.js +288 -0
- package/dist/migrate/export/appwrite.js.map +1 -0
- package/dist/migrate/export/auth0-config.d.ts +29 -0
- package/dist/migrate/export/auth0-config.js +249 -0
- package/dist/migrate/export/auth0-config.js.map +1 -0
- package/dist/migrate/export/auth0.d.ts +62 -0
- package/dist/migrate/export/auth0.js +575 -0
- package/dist/migrate/export/auth0.js.map +1 -0
- package/dist/migrate/export/authentik-config.d.ts +45 -0
- package/dist/migrate/export/authentik-config.js +357 -0
- package/dist/migrate/export/authentik-config.js.map +1 -0
- package/dist/migrate/export/authentik.d.ts +110 -0
- package/dist/migrate/export/authentik.js +838 -0
- package/dist/migrate/export/authentik.js.map +1 -0
- package/dist/migrate/export/azure-config.d.ts +58 -0
- package/dist/migrate/export/azure-config.js +344 -0
- package/dist/migrate/export/azure-config.js.map +1 -0
- package/dist/migrate/export/azure.d.ts +85 -0
- package/dist/migrate/export/azure.js +373 -0
- package/dist/migrate/export/azure.js.map +1 -0
- package/dist/migrate/export/clerk-config.d.ts +26 -0
- package/dist/migrate/export/clerk-config.js +227 -0
- package/dist/migrate/export/clerk-config.js.map +1 -0
- package/dist/migrate/export/clerk.d.ts +46 -0
- package/dist/migrate/export/clerk.js +486 -0
- package/dist/migrate/export/clerk.js.map +1 -0
- package/dist/migrate/export/cognito-config.d.ts +25 -0
- package/dist/migrate/export/cognito-config.js +273 -0
- package/dist/migrate/export/cognito-config.js.map +1 -0
- package/dist/migrate/export/cognito.d.ts +103 -0
- package/dist/migrate/export/cognito.js +441 -0
- package/dist/migrate/export/cognito.js.map +1 -0
- package/dist/migrate/export/corbado-config.d.ts +20 -0
- package/dist/migrate/export/corbado-config.js +63 -0
- package/dist/migrate/export/corbado-config.js.map +1 -0
- package/dist/migrate/export/corbado.d.ts +37 -0
- package/dist/migrate/export/corbado.js +132 -0
- package/dist/migrate/export/corbado.js.map +1 -0
- package/dist/migrate/export/descope.d.ts +35 -0
- package/dist/migrate/export/descope.js +208 -0
- package/dist/migrate/export/descope.js.map +1 -0
- package/dist/migrate/export/fake-vendor.test-helper.d.ts +27 -0
- package/dist/migrate/export/fake-vendor.test-helper.js +41 -0
- package/dist/migrate/export/fake-vendor.test-helper.js.map +1 -0
- package/dist/migrate/export/firebase-config.d.ts +24 -0
- package/dist/migrate/export/firebase-config.js +215 -0
- package/dist/migrate/export/firebase-config.js.map +1 -0
- package/dist/migrate/export/firebase.d.ts +102 -0
- package/dist/migrate/export/firebase.js +464 -0
- package/dist/migrate/export/firebase.js.map +1 -0
- package/dist/migrate/export/frameworks/app-users.d.ts +42 -0
- package/dist/migrate/export/frameworks/app-users.js +161 -0
- package/dist/migrate/export/frameworks/app-users.js.map +1 -0
- package/dist/migrate/export/frameworks/authjs.d.ts +41 -0
- package/dist/migrate/export/frameworks/authjs.js +146 -0
- package/dist/migrate/export/frameworks/authjs.js.map +1 -0
- package/dist/migrate/export/frameworks/devise.d.ts +39 -0
- package/dist/migrate/export/frameworks/devise.js +218 -0
- package/dist/migrate/export/frameworks/devise.js.map +1 -0
- package/dist/migrate/export/frameworks/django.d.ts +45 -0
- package/dist/migrate/export/frameworks/django.js +315 -0
- package/dist/migrate/export/frameworks/django.js.map +1 -0
- package/dist/migrate/export/frameworks/lucia.d.ts +42 -0
- package/dist/migrate/export/frameworks/lucia.js +263 -0
- package/dist/migrate/export/frameworks/lucia.js.map +1 -0
- package/dist/migrate/export/frameworks/tables.d.ts +90 -0
- package/dist/migrate/export/frameworks/tables.js +325 -0
- package/dist/migrate/export/frameworks/tables.js.map +1 -0
- package/dist/migrate/export/frameworks/webauthn.d.ts +25 -0
- package/dist/migrate/export/frameworks/webauthn.js +130 -0
- package/dist/migrate/export/frameworks/webauthn.js.map +1 -0
- package/dist/migrate/export/frontegg-config.d.ts +29 -0
- package/dist/migrate/export/frontegg-config.js +238 -0
- package/dist/migrate/export/frontegg-config.js.map +1 -0
- package/dist/migrate/export/frontegg.d.ts +67 -0
- package/dist/migrate/export/frontegg.js +410 -0
- package/dist/migrate/export/frontegg.js.map +1 -0
- package/dist/migrate/export/fusionauth-config.d.ts +26 -0
- package/dist/migrate/export/fusionauth-config.js +226 -0
- package/dist/migrate/export/fusionauth-config.js.map +1 -0
- package/dist/migrate/export/fusionauth.d.ts +99 -0
- package/dist/migrate/export/fusionauth.js +642 -0
- package/dist/migrate/export/fusionauth.js.map +1 -0
- package/dist/migrate/export/hanko-config.d.ts +27 -0
- package/dist/migrate/export/hanko-config.js +265 -0
- package/dist/migrate/export/hanko-config.js.map +1 -0
- package/dist/migrate/export/hanko.d.ts +52 -0
- package/dist/migrate/export/hanko.js +605 -0
- package/dist/migrate/export/hanko.js.map +1 -0
- package/dist/migrate/export/keycloak-config.d.ts +19 -0
- package/dist/migrate/export/keycloak-config.js +219 -0
- package/dist/migrate/export/keycloak-config.js.map +1 -0
- package/dist/migrate/export/keycloak.d.ts +155 -0
- package/dist/migrate/export/keycloak.js +878 -0
- package/dist/migrate/export/keycloak.js.map +1 -0
- package/dist/migrate/export/kinde-descope-config.d.ts +38 -0
- package/dist/migrate/export/kinde-descope-config.js +172 -0
- package/dist/migrate/export/kinde-descope-config.js.map +1 -0
- package/dist/migrate/export/kinde.d.ts +57 -0
- package/dist/migrate/export/kinde.js +333 -0
- package/dist/migrate/export/kinde.js.map +1 -0
- package/dist/migrate/export/ldap.d.ts +53 -0
- package/dist/migrate/export/ldap.js +277 -0
- package/dist/migrate/export/ldap.js.map +1 -0
- package/dist/migrate/export/logto-config.d.ts +27 -0
- package/dist/migrate/export/logto-config.js +264 -0
- package/dist/migrate/export/logto-config.js.map +1 -0
- package/dist/migrate/export/logto.d.ts +150 -0
- package/dist/migrate/export/logto.js +809 -0
- package/dist/migrate/export/logto.js.map +1 -0
- package/dist/migrate/export/magic-config.d.ts +14 -0
- package/dist/migrate/export/magic-config.js +28 -0
- package/dist/migrate/export/magic-config.js.map +1 -0
- package/dist/migrate/export/magic.d.ts +31 -0
- package/dist/migrate/export/magic.js +93 -0
- package/dist/migrate/export/magic.js.map +1 -0
- package/dist/migrate/export/mini-yaml.d.ts +19 -0
- package/dist/migrate/export/mini-yaml.js +581 -0
- package/dist/migrate/export/mini-yaml.js.map +1 -0
- package/dist/migrate/export/nhost-config.d.ts +26 -0
- package/dist/migrate/export/nhost-config.js +360 -0
- package/dist/migrate/export/nhost-config.js.map +1 -0
- package/dist/migrate/export/nhost.d.ts +64 -0
- package/dist/migrate/export/nhost.js +304 -0
- package/dist/migrate/export/nhost.js.map +1 -0
- package/dist/migrate/export/okta-config.d.ts +30 -0
- package/dist/migrate/export/okta-config.js +205 -0
- package/dist/migrate/export/okta-config.js.map +1 -0
- package/dist/migrate/export/okta.d.ts +43 -0
- package/dist/migrate/export/okta.js +337 -0
- package/dist/migrate/export/okta.js.map +1 -0
- package/dist/migrate/export/onelogin.d.ts +22 -0
- package/dist/migrate/export/onelogin.js +123 -0
- package/dist/migrate/export/onelogin.js.map +1 -0
- package/dist/migrate/export/ory-config.d.ts +58 -0
- package/dist/migrate/export/ory-config.js +451 -0
- package/dist/migrate/export/ory-config.js.map +1 -0
- package/dist/migrate/export/ory.d.ts +81 -0
- package/dist/migrate/export/ory.js +555 -0
- package/dist/migrate/export/ory.js.map +1 -0
- package/dist/migrate/export/password-detect.d.ts +29 -0
- package/dist/migrate/export/password-detect.js +81 -0
- package/dist/migrate/export/password-detect.js.map +1 -0
- package/dist/migrate/export/pingone.d.ts +36 -0
- package/dist/migrate/export/pingone.js +218 -0
- package/dist/migrate/export/pingone.js.map +1 -0
- package/dist/migrate/export/plugin-kit.d.ts +25 -0
- package/dist/migrate/export/plugin-kit.js +82 -0
- package/dist/migrate/export/plugin-kit.js.map +1 -0
- package/dist/migrate/export/pocketbase-config.d.ts +28 -0
- package/dist/migrate/export/pocketbase-config.js +180 -0
- package/dist/migrate/export/pocketbase-config.js.map +1 -0
- package/dist/migrate/export/pocketbase.d.ts +52 -0
- package/dist/migrate/export/pocketbase.js +243 -0
- package/dist/migrate/export/pocketbase.js.map +1 -0
- package/dist/migrate/export/project-files.d.ts +15 -0
- package/dist/migrate/export/project-files.js +43 -0
- package/dist/migrate/export/project-files.js.map +1 -0
- package/dist/migrate/export/propelauth-config.d.ts +18 -0
- package/dist/migrate/export/propelauth-config.js +58 -0
- package/dist/migrate/export/propelauth-config.js.map +1 -0
- package/dist/migrate/export/propelauth-harness.test-helper.d.ts +62 -0
- package/dist/migrate/export/propelauth-harness.test-helper.js +109 -0
- package/dist/migrate/export/propelauth-harness.test-helper.js.map +1 -0
- package/dist/migrate/export/propelauth.d.ts +48 -0
- package/dist/migrate/export/propelauth.js +255 -0
- package/dist/migrate/export/propelauth.js.map +1 -0
- package/dist/migrate/export/record-set.d.ts +44 -0
- package/dist/migrate/export/record-set.js +98 -0
- package/dist/migrate/export/record-set.js.map +1 -0
- package/dist/migrate/export/source-lines.d.ts +17 -0
- package/dist/migrate/export/source-lines.js +43 -0
- package/dist/migrate/export/source-lines.js.map +1 -0
- package/dist/migrate/export/sso-metadata.d.ts +47 -0
- package/dist/migrate/export/sso-metadata.js +180 -0
- package/dist/migrate/export/sso-metadata.js.map +1 -0
- package/dist/migrate/export/stytch-config.d.ts +22 -0
- package/dist/migrate/export/stytch-config.js +102 -0
- package/dist/migrate/export/stytch-config.js.map +1 -0
- package/dist/migrate/export/stytch.d.ts +68 -0
- package/dist/migrate/export/stytch.js +510 -0
- package/dist/migrate/export/stytch.js.map +1 -0
- package/dist/migrate/export/supabase-config.d.ts +48 -0
- package/dist/migrate/export/supabase-config.js +408 -0
- package/dist/migrate/export/supabase-config.js.map +1 -0
- package/dist/migrate/export/supabase.d.ts +86 -0
- package/dist/migrate/export/supabase.js +524 -0
- package/dist/migrate/export/supabase.js.map +1 -0
- package/dist/migrate/export/supertokens-config.d.ts +20 -0
- package/dist/migrate/export/supertokens-config.js +150 -0
- package/dist/migrate/export/supertokens-config.js.map +1 -0
- package/dist/migrate/export/supertokens.d.ts +125 -0
- package/dist/migrate/export/supertokens.js +464 -0
- package/dist/migrate/export/supertokens.js.map +1 -0
- package/dist/migrate/export/table.d.ts +35 -0
- package/dist/migrate/export/table.js +248 -0
- package/dist/migrate/export/table.js.map +1 -0
- package/dist/migrate/export/translate-kit.d.ts +46 -0
- package/dist/migrate/export/translate-kit.js +148 -0
- package/dist/migrate/export/translate-kit.js.map +1 -0
- package/dist/migrate/export/userfront-config.d.ts +15 -0
- package/dist/migrate/export/userfront-config.js +49 -0
- package/dist/migrate/export/userfront-config.js.map +1 -0
- package/dist/migrate/export/userfront.d.ts +38 -0
- package/dist/migrate/export/userfront.js +189 -0
- package/dist/migrate/export/userfront.js.map +1 -0
- package/dist/migrate/export/vendor-http.d.ts +46 -0
- package/dist/migrate/export/vendor-http.js +138 -0
- package/dist/migrate/export/vendor-http.js.map +1 -0
- package/dist/migrate/export/workos-config.d.ts +23 -0
- package/dist/migrate/export/workos-config.js +125 -0
- package/dist/migrate/export/workos-config.js.map +1 -0
- package/dist/migrate/export/workos.d.ts +46 -0
- package/dist/migrate/export/workos.js +272 -0
- package/dist/migrate/export/workos.js.map +1 -0
- package/dist/migrate/export/zip.d.ts +8 -0
- package/dist/migrate/export/zip.js +66 -0
- package/dist/migrate/export/zip.js.map +1 -0
- package/dist/migrate/export/zitadel-config.d.ts +37 -0
- package/dist/migrate/export/zitadel-config.js +279 -0
- package/dist/migrate/export/zitadel-config.js.map +1 -0
- package/dist/migrate/export/zitadel.d.ts +82 -0
- package/dist/migrate/export/zitadel.js +447 -0
- package/dist/migrate/export/zitadel.js.map +1 -0
- package/dist/migrate/firebase/plugin.d.ts +2 -0
- package/dist/migrate/firebase/plugin.js +152 -0
- package/dist/migrate/firebase/plugin.js.map +1 -0
- package/dist/migrate/framework/builtins.d.ts +2 -0
- package/dist/migrate/framework/builtins.js +52 -0
- package/dist/migrate/framework/builtins.js.map +1 -0
- package/dist/migrate/framework/commands.d.ts +20 -0
- package/dist/migrate/framework/commands.js +58 -0
- package/dist/migrate/framework/commands.js.map +1 -0
- package/dist/migrate/framework/custom.d.ts +12 -0
- package/dist/migrate/framework/custom.js +96 -0
- package/dist/migrate/framework/custom.js.map +1 -0
- package/dist/migrate/framework/orchestrator.d.ts +113 -0
- package/dist/migrate/framework/orchestrator.js +532 -0
- package/dist/migrate/framework/orchestrator.js.map +1 -0
- package/dist/migrate/framework/plugin.d.ts +167 -0
- package/dist/migrate/framework/plugin.js +3 -0
- package/dist/migrate/framework/plugin.js.map +1 -0
- package/dist/migrate/framework/registry.d.ts +11 -0
- package/dist/migrate/framework/registry.js +44 -0
- package/dist/migrate/framework/registry.js.map +1 -0
- package/dist/migrate/framework/report.d.ts +17 -0
- package/dist/migrate/framework/report.js +103 -0
- package/dist/migrate/framework/report.js.map +1 -0
- package/dist/migrate/frameworks/plugins.d.ts +29 -0
- package/dist/migrate/frameworks/plugins.js +402 -0
- package/dist/migrate/frameworks/plugins.js.map +1 -0
- package/dist/migrate/frameworks/report.d.ts +92 -0
- package/dist/migrate/frameworks/report.js +207 -0
- package/dist/migrate/frameworks/report.js.map +1 -0
- package/dist/migrate/frameworks/translate-js.d.ts +5 -0
- package/dist/migrate/frameworks/translate-js.js +503 -0
- package/dist/migrate/frameworks/translate-js.js.map +1 -0
- package/dist/migrate/frameworks/translate-rails-django.d.ts +3 -0
- package/dist/migrate/frameworks/translate-rails-django.js +1391 -0
- package/dist/migrate/frameworks/translate-rails-django.js.map +1 -0
- package/dist/migrate/frontegg/plugin.d.ts +2 -0
- package/dist/migrate/frontegg/plugin.js +78 -0
- package/dist/migrate/frontegg/plugin.js.map +1 -0
- package/dist/migrate/fusionauth/plugin.d.ts +2 -0
- package/dist/migrate/fusionauth/plugin.js +109 -0
- package/dist/migrate/fusionauth/plugin.js.map +1 -0
- package/dist/migrate/hanko/plugin.d.ts +2 -0
- package/dist/migrate/hanko/plugin.js +100 -0
- package/dist/migrate/hanko/plugin.js.map +1 -0
- package/dist/migrate/keycloak/plugin.d.ts +2 -0
- package/dist/migrate/keycloak/plugin.js +148 -0
- package/dist/migrate/keycloak/plugin.js.map +1 -0
- package/dist/migrate/kinde/plugin.d.ts +2 -0
- package/dist/migrate/kinde/plugin.js +105 -0
- package/dist/migrate/kinde/plugin.js.map +1 -0
- package/dist/migrate/ldap/plugin.d.ts +2 -0
- package/dist/migrate/ldap/plugin.js +73 -0
- package/dist/migrate/ldap/plugin.js.map +1 -0
- package/dist/migrate/logto/plugin.d.ts +2 -0
- package/dist/migrate/logto/plugin.js +131 -0
- package/dist/migrate/logto/plugin.js.map +1 -0
- package/dist/migrate/magic/plugin.d.ts +2 -0
- package/dist/migrate/magic/plugin.js +56 -0
- package/dist/migrate/magic/plugin.js.map +1 -0
- package/dist/migrate/nhost/plugin.d.ts +2 -0
- package/dist/migrate/nhost/plugin.js +115 -0
- package/dist/migrate/nhost/plugin.js.map +1 -0
- package/dist/migrate/oidc/plugin.d.ts +2 -0
- package/dist/migrate/oidc/plugin.js +73 -0
- package/dist/migrate/oidc/plugin.js.map +1 -0
- package/dist/migrate/okta/plugin.d.ts +2 -0
- package/dist/migrate/okta/plugin.js +105 -0
- package/dist/migrate/okta/plugin.js.map +1 -0
- package/dist/migrate/onelogin/plugin.d.ts +2 -0
- package/dist/migrate/onelogin/plugin.js +61 -0
- package/dist/migrate/onelogin/plugin.js.map +1 -0
- package/dist/migrate/ory/plugin.d.ts +2 -0
- package/dist/migrate/ory/plugin.js +186 -0
- package/dist/migrate/ory/plugin.js.map +1 -0
- package/dist/migrate/ping-identity/plugin.d.ts +2 -0
- package/dist/migrate/ping-identity/plugin.js +100 -0
- package/dist/migrate/ping-identity/plugin.js.map +1 -0
- package/dist/migrate/pocketbase/plugin.d.ts +2 -0
- package/dist/migrate/pocketbase/plugin.js +99 -0
- package/dist/migrate/pocketbase/plugin.js.map +1 -0
- package/dist/migrate/propelauth/plugin.d.ts +2 -0
- package/dist/migrate/propelauth/plugin.js +65 -0
- package/dist/migrate/propelauth/plugin.js.map +1 -0
- package/dist/migrate/saml/plugin.d.ts +2 -0
- package/dist/migrate/saml/plugin.js +79 -0
- package/dist/migrate/saml/plugin.js.map +1 -0
- package/dist/migrate/stytch/plugin.d.ts +2 -0
- package/dist/migrate/stytch/plugin.js +97 -0
- package/dist/migrate/stytch/plugin.js.map +1 -0
- package/dist/migrate/supabase/plugin.d.ts +2 -0
- package/dist/migrate/supabase/plugin.js +149 -0
- package/dist/migrate/supabase/plugin.js.map +1 -0
- package/dist/migrate/supertokens/plugin.d.ts +2 -0
- package/dist/migrate/supertokens/plugin.js +114 -0
- package/dist/migrate/supertokens/plugin.js.map +1 -0
- package/dist/migrate/user-table/plugin.d.ts +2 -0
- package/dist/migrate/user-table/plugin.js +62 -0
- package/dist/migrate/user-table/plugin.js.map +1 -0
- package/dist/migrate/userfront/plugin.d.ts +2 -0
- package/dist/migrate/userfront/plugin.js +60 -0
- package/dist/migrate/userfront/plugin.js.map +1 -0
- package/dist/migrate/workos/plugin.d.ts +2 -0
- package/dist/migrate/workos/plugin.js +81 -0
- package/dist/migrate/workos/plugin.js.map +1 -0
- package/dist/migrate/zitadel/plugin.d.ts +2 -0
- package/dist/migrate/zitadel/plugin.js +114 -0
- package/dist/migrate/zitadel/plugin.js.map +1 -0
- package/dist/run.js +4 -0
- package/dist/run.js.map +1 -1
- package/package.json +7 -5
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GraphqlError = void 0;
|
|
4
|
+
exports.exportNhost = exportNhost;
|
|
5
|
+
exports.refreshTokenHash = refreshTokenHash;
|
|
6
|
+
exports.decryptTotp = decryptTotp;
|
|
7
|
+
exports.byteaToBase64url = byteaToBase64url;
|
|
8
|
+
exports.nhostGraphqlUrl = nhostGraphqlUrl;
|
|
9
|
+
exports.fetchNhostRows = fetchNhostRows;
|
|
10
|
+
exports.readNhostDump = readNhostDump;
|
|
11
|
+
const node_crypto_1 = require("node:crypto");
|
|
12
|
+
const node_fs_1 = require("node:fs");
|
|
13
|
+
const node_path_1 = require("node:path");
|
|
14
|
+
const pocketbase_1 = require("./pocketbase");
|
|
15
|
+
const record_set_1 = require("./record-set");
|
|
16
|
+
const translate_kit_1 = require("./translate-kit");
|
|
17
|
+
const vendor_http_1 = require("./vendor-http");
|
|
18
|
+
/** Roles every Nhost user has implicitly: not carried as Atlas roles. */
|
|
19
|
+
const IMPLICIT_ROLES = new Set(['user', 'me', 'anonymous', 'public']);
|
|
20
|
+
function exportNhost(rows, opts = {}) {
|
|
21
|
+
const set = new record_set_1.RecordSet();
|
|
22
|
+
const now = (opts.now ?? Date.now)();
|
|
23
|
+
const key = opts.encryptionKey ? parseKey(opts.encryptionKey) : undefined;
|
|
24
|
+
const rolesOf = new Map();
|
|
25
|
+
for (const r of rows.userRoles) {
|
|
26
|
+
const userId = (0, record_set_1.str)(r.userId);
|
|
27
|
+
const role = (0, record_set_1.str)(r.role);
|
|
28
|
+
if (!userId || !role || IMPLICIT_ROLES.has(role))
|
|
29
|
+
continue;
|
|
30
|
+
(rolesOf.get(userId) ?? rolesOf.set(userId, new Set()).get(userId)).add((0, translate_kit_1.keyOf)(role));
|
|
31
|
+
}
|
|
32
|
+
const ids = new Set();
|
|
33
|
+
const allRoles = new Set();
|
|
34
|
+
let totpLocked = 0;
|
|
35
|
+
let totpBroken = 0;
|
|
36
|
+
for (const u of rows.users) {
|
|
37
|
+
const id = (0, record_set_1.str)(u.id);
|
|
38
|
+
if (!id)
|
|
39
|
+
continue;
|
|
40
|
+
const user = mapUser(u, rolesOf.get(id));
|
|
41
|
+
if (!user) {
|
|
42
|
+
set.omit('user', 'user without an email or phone number who is not anonymous');
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
ids.add(id);
|
|
46
|
+
for (const r of user.roles ?? [])
|
|
47
|
+
allRoles.add(r);
|
|
48
|
+
set.add('user', (0, record_set_1.compact)(user));
|
|
49
|
+
const mfa = (0, record_set_1.str)(u.activeMfaType);
|
|
50
|
+
const secret = (0, record_set_1.str)(u.totpSecret);
|
|
51
|
+
if (mfa === 'totp' && secret) {
|
|
52
|
+
const plain = secret.length < 64 ? secret : key ? decryptTotp(secret, key) : undefined;
|
|
53
|
+
if (plain && /^[A-Z2-7]+=*$/i.test(plain))
|
|
54
|
+
set.add('mfa_factor', { user_id: id, type: 'totp', secret_base32: plain.toUpperCase().replace(/=+$/, ''), digits: 6, period: 30, algorithm: 'SHA1', verified: true });
|
|
55
|
+
else if (secret.length >= 64 && !key)
|
|
56
|
+
totpLocked++;
|
|
57
|
+
else
|
|
58
|
+
totpBroken++;
|
|
59
|
+
}
|
|
60
|
+
else if (mfa === 'sms') {
|
|
61
|
+
const phone = (0, record_set_1.e164)(u.phoneNumber);
|
|
62
|
+
if (phone)
|
|
63
|
+
set.add('mfa_factor', { user_id: id, type: 'phone', phone, verified: truthy(u.phoneNumberVerified) });
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
for (const r of [...allRoles].sort())
|
|
67
|
+
set.add('role', { key: r, name: r, scope: 'app' }, r);
|
|
68
|
+
if (totpLocked)
|
|
69
|
+
set.omit('mfa_factor', 'TOTP secret encrypted with AUTH_ENCRYPTION_KEY: pass --set nhost-encryption-key=<hex> to carry it, else those users enrol again', totpLocked);
|
|
70
|
+
if (totpBroken)
|
|
71
|
+
set.omit('mfa_factor', 'TOTP secret that does not decrypt with the given AUTH_ENCRYPTION_KEY', totpBroken);
|
|
72
|
+
for (const p of rows.providers) {
|
|
73
|
+
const userId = (0, record_set_1.str)(p.userId);
|
|
74
|
+
const provider = (0, record_set_1.str)(p.providerId);
|
|
75
|
+
const providerUserId = (0, record_set_1.str)(p.providerUserId);
|
|
76
|
+
if (!userId || !provider || !providerUserId || !ids.has(userId))
|
|
77
|
+
continue;
|
|
78
|
+
set.add('identity', (0, record_set_1.compact)({ id: (0, record_set_1.str)(p.id), user_id: userId, provider, provider_user_id: providerUserId, kind: 'oauth' }), `${provider}:${providerUserId}`);
|
|
79
|
+
}
|
|
80
|
+
const keys = rows.securityKeys.filter((k) => ids.has((0, record_set_1.str)(k.userId) ?? ''));
|
|
81
|
+
if (keys.length && !opts.rpId) {
|
|
82
|
+
set.omit('passkey', 'security key without a relying-party id: pass --set rp-id=<your WebAuthn rp id> (nhost.toml auth.method.webauthn.relyingParty.id)', keys.length);
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
for (const k of keys) {
|
|
86
|
+
const credentialId = (0, record_set_1.str)(k.credentialId);
|
|
87
|
+
const publicKey = byteaToBase64url(k.credentialPublicKey);
|
|
88
|
+
if (!credentialId || !publicKey) {
|
|
89
|
+
set.omit('passkey', 'security key without its credential id or public key');
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
const transports = ((0, record_set_1.str)(k.transports) ?? '').split(',').map((t) => t.trim()).filter(Boolean);
|
|
93
|
+
set.add('passkey', (0, record_set_1.compact)({ id: (0, record_set_1.str)(k.id), user_id: (0, record_set_1.str)(k.userId), credential_id: credentialId, public_key: publicKey, sign_count: num(k.counter), rp_id: opts.rpId, transports, name: (0, record_set_1.str)(k.nickname) }));
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
let pats = 0;
|
|
97
|
+
let expired = 0;
|
|
98
|
+
for (const t of rows.refreshTokens) {
|
|
99
|
+
const userId = (0, record_set_1.str)(t.userId);
|
|
100
|
+
if (!userId || !ids.has(userId))
|
|
101
|
+
continue;
|
|
102
|
+
if (((0, record_set_1.str)(t.type) ?? 'regular') !== 'regular') {
|
|
103
|
+
pats++;
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
const expires = Date.parse((0, record_set_1.str)(t.expiresAt) ?? '');
|
|
107
|
+
if (!Number.isFinite(expires) || expires <= now) {
|
|
108
|
+
expired++;
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
const hash = refreshTokenHash(t);
|
|
112
|
+
if (!hash) {
|
|
113
|
+
set.omit('session', 'refresh token row without a readable hash');
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
116
|
+
set.add('session', (0, record_set_1.compact)({ id: (0, record_set_1.str)(t.id) ?? hash.slice(0, 32), user_id: userId, token_hash: hash, expires_at: (0, record_set_1.str)(t.expiresAt), created_at: (0, record_set_1.str)(t.createdAt) }));
|
|
117
|
+
}
|
|
118
|
+
if (pats)
|
|
119
|
+
set.omit('session', 'personal access token (reissue it as an Atlas API key)', pats);
|
|
120
|
+
if (expired)
|
|
121
|
+
set.omit('session', 'expired refresh token', expired);
|
|
122
|
+
const providers = new Set(set.list('identity').map((i) => i.provider));
|
|
123
|
+
set.manifest = { ...set.manifest, origin: opts.origin ?? 'nhost', providers: [...providers].sort(), ...(opts.rpId ? { rpId: opts.rpId } : {}) };
|
|
124
|
+
return set;
|
|
125
|
+
}
|
|
126
|
+
function mapUser(u, roles) {
|
|
127
|
+
const email = (0, record_set_1.str)(u.email)?.toLowerCase();
|
|
128
|
+
const phone = (0, record_set_1.e164)(u.phoneNumber);
|
|
129
|
+
const anonymous = truthy(u.isAnonymous);
|
|
130
|
+
if (!email && !phone && !anonymous)
|
|
131
|
+
return null;
|
|
132
|
+
const all = new Set(roles ?? []);
|
|
133
|
+
const def = (0, record_set_1.str)(u.defaultRole);
|
|
134
|
+
if (def && !IMPLICIT_ROLES.has(def))
|
|
135
|
+
all.add((0, translate_kit_1.keyOf)(def));
|
|
136
|
+
const hash = (0, record_set_1.str)(u.passwordHash);
|
|
137
|
+
const meta = (0, record_set_1.isObj)(u.metadata) ? u.metadata : typeof u.metadata === 'string' ? safeJson(u.metadata) : undefined;
|
|
138
|
+
const locale = (0, record_set_1.str)(u.locale);
|
|
139
|
+
const user = {
|
|
140
|
+
id: (0, record_set_1.str)(u.id),
|
|
141
|
+
emails: email ? [{ email, verified: truthy(u.emailVerified), primary: true }] : undefined,
|
|
142
|
+
phones: phone ? [{ phone, verified: truthy(u.phoneNumberVerified), primary: !email }] : undefined,
|
|
143
|
+
name: (0, record_set_1.str)(u.displayName),
|
|
144
|
+
image_url: (0, record_set_1.str)(u.avatarUrl),
|
|
145
|
+
password: hash && /^\$2[aby]\$\d{2}\$/.test(hash) ? { algorithm: 'auto', hash } : undefined,
|
|
146
|
+
roles: all.size ? [...all].sort() : undefined,
|
|
147
|
+
banned: truthy(u.disabled) ? true : undefined,
|
|
148
|
+
anonymous: anonymous && !email && !phone ? true : undefined,
|
|
149
|
+
public_metadata: (0, record_set_1.bag)({ ...((0, record_set_1.isObj)(meta) ? meta : {}), ...(locale ? { locale } : {}) }),
|
|
150
|
+
created_at: (0, record_set_1.str)(u.createdAt),
|
|
151
|
+
last_sign_in_at: (0, record_set_1.str)(u.lastSeen),
|
|
152
|
+
};
|
|
153
|
+
return user;
|
|
154
|
+
}
|
|
155
|
+
/** `\x` + hex(sha256(token)) as Nhost stores it → the bundle's lowercase hex. */
|
|
156
|
+
function refreshTokenHash(t) {
|
|
157
|
+
const raw = (0, record_set_1.str)(t.refreshTokenHash);
|
|
158
|
+
if (!raw) {
|
|
159
|
+
// Legacy hasura-auth kept the token itself (a UUID) in refresh_token.
|
|
160
|
+
const plain = (0, record_set_1.str)(t.refreshToken);
|
|
161
|
+
return plain ? (0, node_crypto_1.createHash)('sha256').update(plain, 'utf8').digest('hex') : undefined;
|
|
162
|
+
}
|
|
163
|
+
const hex = raw.replace(/^\\x/i, '').toLowerCase();
|
|
164
|
+
return /^[0-9a-f]{64}$/.test(hex) ? hex : undefined;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Current Nhost encrypts TOTP secrets: AES-256-GCM, stored as
|
|
168
|
+
* hex(nonce(12) || ciphertext || tag(16)), key = AUTH_ENCRYPTION_KEY (hex).
|
|
169
|
+
*/
|
|
170
|
+
function decryptTotp(stored, key) {
|
|
171
|
+
try {
|
|
172
|
+
const raw = Buffer.from(stored, 'hex');
|
|
173
|
+
if (raw.length < 12 + 16 + 1)
|
|
174
|
+
return undefined;
|
|
175
|
+
const decipher = (0, node_crypto_1.createDecipheriv)('aes-256-gcm', key, raw.subarray(0, 12));
|
|
176
|
+
decipher.setAuthTag(raw.subarray(raw.length - 16));
|
|
177
|
+
return Buffer.concat([decipher.update(raw.subarray(12, raw.length - 16)), decipher.final()]).toString('utf8');
|
|
178
|
+
}
|
|
179
|
+
catch {
|
|
180
|
+
return undefined;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
function parseKey(hex) {
|
|
184
|
+
const k = Buffer.from(hex.trim(), 'hex');
|
|
185
|
+
if (k.length !== 32)
|
|
186
|
+
throw new Error('The Nhost encryption key (AUTH_ENCRYPTION_KEY) must be 32 bytes as 64 hex characters.');
|
|
187
|
+
return k;
|
|
188
|
+
}
|
|
189
|
+
/** Postgres bytea as Hasura / psql print it (`\x…` hex), or base64 → base64url. */
|
|
190
|
+
function byteaToBase64url(v) {
|
|
191
|
+
const s = (0, record_set_1.str)(v);
|
|
192
|
+
if (!s)
|
|
193
|
+
return undefined;
|
|
194
|
+
if (/^\\x[0-9a-f]*$/i.test(s))
|
|
195
|
+
return Buffer.from(s.slice(2), 'hex').toString('base64url');
|
|
196
|
+
return Buffer.from(s, 'base64').toString('base64url');
|
|
197
|
+
}
|
|
198
|
+
const truthy = (v) => v === true || v === 1 || v === '1' || v === 't' || v === 'true';
|
|
199
|
+
const num = (v) => (typeof v === 'number' ? v : typeof v === 'string' && /^\d+$/.test(v) ? Number(v) : undefined);
|
|
200
|
+
function safeJson(s) {
|
|
201
|
+
try {
|
|
202
|
+
return JSON.parse(s);
|
|
203
|
+
}
|
|
204
|
+
catch {
|
|
205
|
+
return undefined;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
// ── readers ─────────────────────────────────────────────────────────────────
|
|
209
|
+
/** Nhost Cloud's GraphQL endpoint for a subdomain and region. */
|
|
210
|
+
function nhostGraphqlUrl(o) {
|
|
211
|
+
return `https://${o.subdomain}.graphql.${o.region}.nhost.run/v1`;
|
|
212
|
+
}
|
|
213
|
+
const PAGE = 1000;
|
|
214
|
+
const QUERIES = {
|
|
215
|
+
users: 'id createdAt lastSeen disabled displayName avatarUrl locale email phoneNumber passwordHash emailVerified phoneNumberVerified defaultRole isAnonymous totpSecret activeMfaType metadata',
|
|
216
|
+
authUserProviders: 'id userId providerId providerUserId',
|
|
217
|
+
authUserSecurityKeys: 'id userId credentialId credentialPublicKey counter transports nickname',
|
|
218
|
+
authUserRoles: 'userId role',
|
|
219
|
+
authRefreshTokens: 'id userId createdAt expiresAt refreshTokenHash type',
|
|
220
|
+
};
|
|
221
|
+
/** The auth tables through Hasura with the admin secret (sent only to the project). */
|
|
222
|
+
async function fetchNhostRows(opts) {
|
|
223
|
+
const http = new vendor_http_1.VendorHttp({ vendor: 'Nhost', baseUrl: opts.graphqlUrl, headers: { 'x-hasura-admin-secret': opts.adminSecret }, fetchImpl: opts.fetchImpl, sleep: opts.sleep });
|
|
224
|
+
const progress = opts.onProgress ?? (() => undefined);
|
|
225
|
+
const list = async (root, fields, order) => {
|
|
226
|
+
const out = [];
|
|
227
|
+
for (let offset = 0;; offset += PAGE) {
|
|
228
|
+
const query = `query { ${root}(limit: ${PAGE}, offset: ${offset}, order_by: { ${order}: asc }) { ${fields} } }`;
|
|
229
|
+
const { body } = await http.post(opts.graphqlUrl, { query });
|
|
230
|
+
const errors = (0, record_set_1.isObj)(body) ? (0, record_set_1.objs)(body.errors) : [];
|
|
231
|
+
if (errors.length)
|
|
232
|
+
throw new GraphqlError((0, record_set_1.str)(errors[0].message) ?? 'GraphQL error');
|
|
233
|
+
const rows = (0, record_set_1.isObj)(body) && (0, record_set_1.isObj)(body.data) ? (0, record_set_1.objs)(body.data[root]) : [];
|
|
234
|
+
out.push(...rows);
|
|
235
|
+
if (rows.length < PAGE)
|
|
236
|
+
return out;
|
|
237
|
+
}
|
|
238
|
+
};
|
|
239
|
+
progress('users');
|
|
240
|
+
const users = await list('users', QUERIES.users, 'createdAt');
|
|
241
|
+
progress('social links');
|
|
242
|
+
const providers = await list('authUserProviders', QUERIES.authUserProviders, 'id');
|
|
243
|
+
progress('security keys');
|
|
244
|
+
const securityKeys = await list('authUserSecurityKeys', QUERIES.authUserSecurityKeys, 'id');
|
|
245
|
+
progress('roles');
|
|
246
|
+
const userRoles = await list('authUserRoles', QUERIES.authUserRoles, 'userId');
|
|
247
|
+
progress('refresh tokens');
|
|
248
|
+
let refreshTokens;
|
|
249
|
+
try {
|
|
250
|
+
refreshTokens = await list('authRefreshTokens', QUERIES.authRefreshTokens, 'createdAt');
|
|
251
|
+
}
|
|
252
|
+
catch (err) {
|
|
253
|
+
// Projects older than personal access tokens have no `type` column.
|
|
254
|
+
if (!(err instanceof GraphqlError) || !/type/.test(err.message))
|
|
255
|
+
throw err;
|
|
256
|
+
refreshTokens = await list('authRefreshTokens', 'id userId createdAt expiresAt refreshTokenHash', 'createdAt');
|
|
257
|
+
}
|
|
258
|
+
return { users, providers, securityKeys, userRoles, refreshTokens };
|
|
259
|
+
}
|
|
260
|
+
class GraphqlError extends Error {
|
|
261
|
+
}
|
|
262
|
+
exports.GraphqlError = GraphqlError;
|
|
263
|
+
/** Table names a dump may use for each auth table (`auth.users.csv`, `users.json`, `auth_users.ndjson` …). */
|
|
264
|
+
const DUMP_TABLES = {
|
|
265
|
+
users: ['auth.users', 'auth_users', 'users'],
|
|
266
|
+
providers: ['auth.user_providers', 'auth_user_providers', 'user_providers'],
|
|
267
|
+
securityKeys: ['auth.user_security_keys', 'auth_user_security_keys', 'user_security_keys', 'auth.user_authenticators', 'user_authenticators'],
|
|
268
|
+
userRoles: ['auth.user_roles', 'auth_user_roles', 'user_roles'],
|
|
269
|
+
refreshTokens: ['auth.refresh_tokens', 'auth_refresh_tokens', 'refresh_tokens'],
|
|
270
|
+
};
|
|
271
|
+
/** A folder of `auth.*` table dumps (JSON, NDJSON or CSV with a header; snake_case columns). */
|
|
272
|
+
function readNhostDump(dir) {
|
|
273
|
+
const byName = new Map();
|
|
274
|
+
for (const file of (0, node_fs_1.readdirSync)(dir).sort()) {
|
|
275
|
+
const path = (0, node_path_1.join)(dir, file);
|
|
276
|
+
const ext = (0, node_path_1.extname)(file).toLowerCase();
|
|
277
|
+
if (!(0, node_fs_1.statSync)(path).isFile() || !['.json', '.ndjson', '.jsonl', '.csv'].includes(ext))
|
|
278
|
+
continue;
|
|
279
|
+
byName.set((0, node_path_1.basename)(file, (0, node_path_1.extname)(file)).toLowerCase(), (0, pocketbase_1.parseTable)((0, node_fs_1.readFileSync)(path, 'utf8'), ext).map(camelRow));
|
|
280
|
+
}
|
|
281
|
+
const pick = (k) => {
|
|
282
|
+
for (const n of DUMP_TABLES[k]) {
|
|
283
|
+
const rows = byName.get(n);
|
|
284
|
+
if (rows)
|
|
285
|
+
return rows;
|
|
286
|
+
}
|
|
287
|
+
return [];
|
|
288
|
+
};
|
|
289
|
+
const rows = { users: pick('users'), providers: pick('providers'), securityKeys: pick('securityKeys'), userRoles: pick('userRoles'), refreshTokens: pick('refreshTokens') };
|
|
290
|
+
if (!rows.users.length)
|
|
291
|
+
throw new Error(`No auth.users table in ${dir} (expected users.json, auth.users.csv, …).`);
|
|
292
|
+
return rows;
|
|
293
|
+
}
|
|
294
|
+
/** `phone_number_verified` → `phoneNumberVerified`; empty CSV cells drop out. */
|
|
295
|
+
function camelRow(r) {
|
|
296
|
+
const out = {};
|
|
297
|
+
for (const [k, v] of Object.entries(r)) {
|
|
298
|
+
if (v === '' || v === null)
|
|
299
|
+
continue;
|
|
300
|
+
out[k.replace(/_([a-z])/g, (_, c) => c.toUpperCase())] = v;
|
|
301
|
+
}
|
|
302
|
+
return out;
|
|
303
|
+
}
|
|
304
|
+
//# sourceMappingURL=nhost.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nhost.js","sourceRoot":"","sources":["../../../src/migrate/export/nhost.ts"],"names":[],"mappings":";;;AAmDA,kCAgGC;AA+BD,4CASC;AAMD,kCAUC;AASD,4CAKC;AAeD,0CAEC;AAaD,wCAiCC;AAcD,sCAkBC;AAxTD,6CAA2D;AAC3D,qCAA8D;AAC9D,yCAAoD;AAEpD,6CAA0C;AAC1C,6CAAyF;AACzF,mDAAwC;AACxC,+CAA2C;AAyC3C,yEAAyE;AACzE,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC;AAEtE,SAAgB,WAAW,CAAC,IAAe,EAAE,OAA2B,EAAE;IACxE,MAAM,GAAG,GAAG,IAAI,sBAAS,EAAE,CAAC;IAC5B,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IACrC,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAE1E,MAAM,OAAO,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC/C,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,IAAA,gBAAG,EAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAC7B,MAAM,IAAI,GAAG,IAAA,gBAAG,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACzB,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,SAAS;QAC3D,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC,CAAC,GAAG,CAAC,IAAA,qBAAK,EAAC,IAAI,CAAC,CAAC,CAAC;IACxF,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAC3B,MAAM,EAAE,GAAG,IAAA,gBAAG,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACrB,IAAI,CAAC,EAAE;YAAE,SAAS;QAClB,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,4DAA4D,CAAC,CAAC;YAC/E,SAAS;QACX,CAAC;QACD,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACZ,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE;YAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAClD,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,IAAA,oBAAO,EAAC,IAAI,CAAC,CAAC,CAAC;QAE/B,MAAM,GAAG,GAAG,IAAA,gBAAG,EAAC,CAAC,CAAC,aAAa,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG,IAAA,gBAAG,EAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QACjC,IAAI,GAAG,KAAK,MAAM,IAAI,MAAM,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACvF,IAAI,KAAK,IAAI,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;gBAAE,GAAG,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;iBAC5M,IAAI,MAAM,CAAC,MAAM,IAAI,EAAE,IAAI,CAAC,GAAG;gBAAE,UAAU,EAAE,CAAC;;gBAC9C,UAAU,EAAE,CAAC;QACpB,CAAC;aAAM,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,IAAA,iBAAI,EAAC,CAAC,CAAC,WAAW,CAAC,CAAC;YAClC,IAAI,KAAK;gBAAE,GAAG,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;QACnH,CAAC;IACH,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,EAAE;QAAE,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;IAC5F,IAAI,UAAU;QAAE,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,iIAAiI,EAAE,UAAU,CAAC,CAAC;IACtL,IAAI,UAAU;QAAE,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,sEAAsE,EAAE,UAAU,CAAC,CAAC;IAE3H,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,IAAA,gBAAG,EAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAC7B,MAAM,QAAQ,GAAG,IAAA,gBAAG,EAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QACnC,MAAM,cAAc,GAAG,IAAA,gBAAG,EAAC,CAAC,CAAC,cAAc,CAAC,CAAC;QAC7C,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,IAAI,CAAC,cAAc,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,SAAS;QAC1E,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,IAAA,oBAAO,EAAC,EAAE,EAAE,EAAE,IAAA,gBAAG,EAAC,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,cAAc,EAAE,IAAI,EAAE,OAAgB,EAAE,CAAC,EAAE,GAAG,QAAQ,IAAI,cAAc,EAAE,CAAC,CAAC;IACxK,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,IAAA,gBAAG,EAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC3E,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAC9B,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,mIAAmI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACxK,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YACrB,MAAM,YAAY,GAAG,IAAA,gBAAG,EAAC,CAAC,CAAC,YAAY,CAAC,CAAC;YACzC,MAAM,SAAS,GAAG,gBAAgB,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;YAC1D,IAAI,CAAC,YAAY,IAAI,CAAC,SAAS,EAAE,CAAC;gBAChC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,sDAAsD,CAAC,CAAC;gBAC5E,SAAS;YACX,CAAC;YACD,MAAM,UAAU,GAAG,CAAC,IAAA,gBAAG,EAAC,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC7F,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,IAAA,oBAAO,EAAC,EAAE,EAAE,EAAE,IAAA,gBAAG,EAAC,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,IAAA,gBAAG,EAAC,CAAC,CAAC,MAAM,CAAE,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,IAAK,EAAE,UAAU,EAAE,IAAI,EAAE,IAAA,gBAAG,EAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;QAChN,CAAC;IACH,CAAC;IAED,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,IAAA,gBAAG,EAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAC7B,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,SAAS;QAC1C,IAAI,CAAC,IAAA,gBAAG,EAAC,CAAC,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,KAAK,SAAS,EAAE,CAAC;YAC7C,IAAI,EAAE,CAAC;YACP,SAAS;QACX,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,gBAAG,EAAC,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC;YAChD,OAAO,EAAE,CAAC;YACV,SAAS;QACX,CAAC;QACD,MAAM,IAAI,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,2CAA2C,CAAC,CAAC;YACjE,SAAS;QACX,CAAC;QACD,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,IAAA,oBAAO,EAAC,EAAE,EAAE,EAAE,IAAA,gBAAG,EAAC,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,IAAA,gBAAG,EAAC,CAAC,CAAC,SAAS,CAAE,EAAE,UAAU,EAAE,IAAA,gBAAG,EAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;IACtK,CAAC;IACD,IAAI,IAAI;QAAE,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,wDAAwD,EAAE,IAAI,CAAC,CAAC;IAC9F,IAAI,OAAO;QAAE,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,uBAAuB,EAAE,OAAO,CAAC,CAAC;IAEnE,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;IACvE,GAAG,CAAC,QAAQ,GAAG,EAAE,GAAG,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,OAAO,EAAE,SAAS,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IAChJ,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,OAAO,CAAC,CAAM,EAAE,KAA8B;IACrD,MAAM,KAAK,GAAG,IAAA,gBAAG,EAAC,CAAC,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,CAAC;IAC1C,MAAM,KAAK,GAAG,IAAA,iBAAI,EAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IAClC,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAChD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IACjC,MAAM,GAAG,GAAG,IAAA,gBAAG,EAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IAC/B,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,GAAG,CAAC,GAAG,CAAC,IAAA,qBAAK,EAAC,GAAG,CAAC,CAAC,CAAC;IACzD,MAAM,IAAI,GAAG,IAAA,gBAAG,EAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IACjC,MAAM,IAAI,GAAG,IAAA,kBAAK,EAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAChH,MAAM,MAAM,GAAG,IAAA,gBAAG,EAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC7B,MAAM,IAAI,GAAe;QACvB,EAAE,EAAE,IAAA,gBAAG,EAAC,CAAC,CAAC,EAAE,CAAE;QACd,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;QACzF,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;QACjG,IAAI,EAAE,IAAA,gBAAG,EAAC,CAAC,CAAC,WAAW,CAAC;QACxB,SAAS,EAAE,IAAA,gBAAG,EAAC,CAAC,CAAC,SAAS,CAAC;QAC3B,QAAQ,EAAE,IAAI,IAAI,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS;QAC3F,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS;QAC7C,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;QAC7C,SAAS,EAAE,SAAS,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;QAC3D,eAAe,EAAE,IAAA,gBAAG,EAAC,EAAE,GAAG,CAAC,IAAA,kBAAK,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QACrF,UAAU,EAAE,IAAA,gBAAG,EAAC,CAAC,CAAC,SAAS,CAAC;QAC5B,eAAe,EAAE,IAAA,gBAAG,EAAC,CAAC,CAAC,QAAQ,CAAC;KACjC,CAAC;IACF,OAAO,IAAI,CAAC;AACd,CAAC;AAED,iFAAiF;AACjF,SAAgB,gBAAgB,CAAC,CAAM;IACrC,MAAM,GAAG,GAAG,IAAA,gBAAG,EAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;IACpC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,sEAAsE;QACtE,MAAM,KAAK,GAAG,IAAA,gBAAG,EAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QAClC,OAAO,KAAK,CAAC,CAAC,CAAC,IAAA,wBAAU,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACtF,CAAC;IACD,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACnD,OAAO,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;AACtD,CAAC;AAED;;;GAGG;AACH,SAAgB,WAAW,CAAC,MAAc,EAAE,GAAW;IACrD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACvC,IAAI,GAAG,CAAC,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;YAAE,OAAO,SAAS,CAAC;QAC/C,MAAM,QAAQ,GAAG,IAAA,8BAAgB,EAAC,aAAa,EAAE,GAAG,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAC3E,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC;QACnD,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAChH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,GAAW;IAC3B,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC;IACzC,IAAI,CAAC,CAAC,MAAM,KAAK,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,uFAAuF,CAAC,CAAC;IAC9H,OAAO,CAAC,CAAC;AACX,CAAC;AAED,mFAAmF;AACnF,SAAgB,gBAAgB,CAAC,CAAU;IACzC,MAAM,CAAC,GAAG,IAAA,gBAAG,EAAC,CAAC,CAAC,CAAC;IACjB,IAAI,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IACzB,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC3F,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,MAAM,GAAG,CAAC,CAAU,EAAW,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,MAAM,CAAC;AACxG,MAAM,GAAG,GAAG,CAAC,CAAU,EAAsB,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;AAC/I,SAAS,QAAQ,CAAC,CAAS;IACzB,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAY,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,+EAA+E;AAE/E,iEAAiE;AACjE,SAAgB,eAAe,CAAC,CAAwC;IACtE,OAAO,WAAW,CAAC,CAAC,SAAS,YAAY,CAAC,CAAC,MAAM,eAAe,CAAC;AACnE,CAAC;AAED,MAAM,IAAI,GAAG,IAAI,CAAC;AAElB,MAAM,OAAO,GAAG;IACd,KAAK,EAAE,wLAAwL;IAC/L,iBAAiB,EAAE,qCAAqC;IACxD,oBAAoB,EAAE,wEAAwE;IAC9F,aAAa,EAAE,aAAa;IAC5B,iBAAiB,EAAE,qDAAqD;CAChE,CAAC;AAEX,uFAAuF;AAChF,KAAK,UAAU,cAAc,CAAC,IAAoJ;IACvL,MAAM,IAAI,GAAG,IAAI,wBAAU,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,uBAAuB,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IACjL,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IACtD,MAAM,IAAI,GAAG,KAAK,EAAE,IAA0B,EAAE,MAAc,EAAE,KAAa,EAAkB,EAAE;QAC/F,MAAM,GAAG,GAAU,EAAE,CAAC;QACtB,KAAK,IAAI,MAAM,GAAG,CAAC,GAAI,MAAM,IAAI,IAAI,EAAE,CAAC;YACtC,MAAM,KAAK,GAAG,WAAW,IAAI,WAAW,IAAI,aAAa,MAAM,iBAAiB,KAAK,cAAc,MAAM,MAAM,CAAC;YAChH,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAM,IAAI,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YAClE,MAAM,MAAM,GAAG,IAAA,kBAAK,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAA,iBAAI,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACpD,IAAI,MAAM,CAAC,MAAM;gBAAE,MAAM,IAAI,YAAY,CAAC,IAAA,gBAAG,EAAC,MAAM,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,IAAI,eAAe,CAAC,CAAC;YACtF,MAAM,IAAI,GAAG,IAAA,kBAAK,EAAC,IAAI,CAAC,IAAI,IAAA,kBAAK,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAA,iBAAI,EAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1E,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;YAClB,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI;gBAAE,OAAO,GAAG,CAAC;QACrC,CAAC;IACH,CAAC,CAAC;IACF,QAAQ,CAAC,OAAO,CAAC,CAAC;IAClB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAC9D,QAAQ,CAAC,cAAc,CAAC,CAAC;IACzB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,mBAAmB,EAAE,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;IACnF,QAAQ,CAAC,eAAe,CAAC,CAAC;IAC1B,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,sBAAsB,EAAE,OAAO,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC;IAC5F,QAAQ,CAAC,OAAO,CAAC,CAAC;IAClB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IAC/E,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAC3B,IAAI,aAAoB,CAAC;IACzB,IAAI,CAAC;QACH,aAAa,GAAG,MAAM,IAAI,CAAC,mBAAmB,EAAE,OAAO,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC;IAC1F,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,oEAAoE;QACpE,IAAI,CAAC,CAAC,GAAG,YAAY,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;YAAE,MAAM,GAAG,CAAC;QAC3E,aAAa,GAAG,MAAM,IAAI,CAAC,mBAAmB,EAAE,gDAAgD,EAAE,WAAW,CAAC,CAAC;IACjH,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC;AACtE,CAAC;AAED,MAAa,YAAa,SAAQ,KAAK;CAAG;AAA1C,oCAA0C;AAE1C,8GAA8G;AAC9G,MAAM,WAAW,GAAsC;IACrD,KAAK,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,OAAO,CAAC;IAC5C,SAAS,EAAE,CAAC,qBAAqB,EAAE,qBAAqB,EAAE,gBAAgB,CAAC;IAC3E,YAAY,EAAE,CAAC,yBAAyB,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,0BAA0B,EAAE,qBAAqB,CAAC;IAC7I,SAAS,EAAE,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,YAAY,CAAC;IAC/D,aAAa,EAAE,CAAC,qBAAqB,EAAE,qBAAqB,EAAE,gBAAgB,CAAC;CAChF,CAAC;AAEF,gGAAgG;AAChG,SAAgB,aAAa,CAAC,GAAW;IACvC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAiB,CAAC;IACxC,KAAK,MAAM,IAAI,IAAI,IAAA,qBAAW,EAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,IAAA,gBAAI,EAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC7B,MAAM,GAAG,GAAG,IAAA,mBAAO,EAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;QACxC,IAAI,CAAC,IAAA,kBAAQ,EAAC,IAAI,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,SAAS;QAChG,MAAM,CAAC,GAAG,CAAC,IAAA,oBAAQ,EAAC,IAAI,EAAE,IAAA,mBAAO,EAAC,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,IAAA,uBAAU,EAAC,IAAA,sBAAY,EAAC,IAAI,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;IACrH,CAAC;IACD,MAAM,IAAI,GAAG,CAAC,CAAkB,EAAE,EAAE;QAClC,KAAK,MAAM,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC3B,IAAI,IAAI;gBAAE,OAAO,IAAI,CAAC;QACxB,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;IACF,MAAM,IAAI,GAAc,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,cAAc,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;IACvL,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,GAAG,4CAA4C,CAAC,CAAC;IACnH,OAAO,IAAI,CAAC;AACd,CAAC;AAED,iFAAiF;AACjF,SAAS,QAAQ,CAAC,CAAM;IACtB,MAAM,GAAG,GAAQ,EAAE,CAAC;IACpB,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACvC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI;YAAE,SAAS;QACrC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { TranslationResult } from '../framework/plugin';
|
|
2
|
+
import { type Obj } from './record-set';
|
|
3
|
+
import { VendorHttp } from './vendor-http';
|
|
4
|
+
/**
|
|
5
|
+
* `atlas migrate okta config` — an Okta org's policies and integrations →
|
|
6
|
+
* Atlas config, read with an API token on this machine: password policies,
|
|
7
|
+
* global session policy (lifetimes), authenticator enrollment (which second
|
|
8
|
+
* factors), social identity providers, custom authorization servers (APIs and
|
|
9
|
+
* scopes), OIDC apps (redirect URIs) and groups (roles). Sign-on rules beyond
|
|
10
|
+
* MFA, network zones, hooks and the sign-in widget are reported as manual.
|
|
11
|
+
*/
|
|
12
|
+
export interface OktaConfigSnapshot {
|
|
13
|
+
domain: string;
|
|
14
|
+
passwordPolicies: Obj[];
|
|
15
|
+
signOnPolicies: Array<Obj & {
|
|
16
|
+
rules?: Obj[];
|
|
17
|
+
}>;
|
|
18
|
+
authenticators: Obj[];
|
|
19
|
+
idps: Obj[];
|
|
20
|
+
authorizationServers: Array<Obj & {
|
|
21
|
+
scopes?: Obj[];
|
|
22
|
+
}>;
|
|
23
|
+
apps: Obj[];
|
|
24
|
+
groups: Obj[];
|
|
25
|
+
inlineHooks: Obj[];
|
|
26
|
+
}
|
|
27
|
+
export declare function fetchOktaConfig(http: VendorHttp, domain: string): Promise<OktaConfigSnapshot>;
|
|
28
|
+
export declare function translateOktaConfig(snap: OktaConfigSnapshot, opts?: {
|
|
29
|
+
groupsAs?: 'roles' | 'organizations' | 'skip';
|
|
30
|
+
}): TranslationResult;
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.fetchOktaConfig = fetchOktaConfig;
|
|
4
|
+
exports.translateOktaConfig = translateOktaConfig;
|
|
5
|
+
const record_set_1 = require("./record-set");
|
|
6
|
+
const translate_kit_1 = require("./translate-kit");
|
|
7
|
+
const vendor_http_1 = require("./vendor-http");
|
|
8
|
+
async function fetchOktaConfig(http, domain) {
|
|
9
|
+
const all = async (path) => {
|
|
10
|
+
const out = [];
|
|
11
|
+
let next = path;
|
|
12
|
+
try {
|
|
13
|
+
while (next) {
|
|
14
|
+
const res = await http.get(next);
|
|
15
|
+
out.push(...(0, record_set_1.objs)(res.body));
|
|
16
|
+
next = (0, vendor_http_1.nextLink)(res.headers.get('link'));
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
catch (err) {
|
|
20
|
+
if (err instanceof vendor_http_1.VendorApiError && [403, 404].includes(err.status))
|
|
21
|
+
return out;
|
|
22
|
+
throw err;
|
|
23
|
+
}
|
|
24
|
+
return out;
|
|
25
|
+
};
|
|
26
|
+
const signOn = (await all('/policies?type=OKTA_SIGN_ON'));
|
|
27
|
+
for (const p of signOn)
|
|
28
|
+
p.rules = await all(`/policies/${(0, record_set_1.str)(p.id)}/rules`);
|
|
29
|
+
const servers = (await all('/authorizationServers'));
|
|
30
|
+
for (const s of servers)
|
|
31
|
+
s.scopes = await all(`/authorizationServers/${(0, record_set_1.str)(s.id)}/scopes`);
|
|
32
|
+
return {
|
|
33
|
+
domain,
|
|
34
|
+
passwordPolicies: await all('/policies?type=PASSWORD'),
|
|
35
|
+
signOnPolicies: signOn,
|
|
36
|
+
authenticators: await all('/authenticators'),
|
|
37
|
+
idps: await all('/idps'),
|
|
38
|
+
authorizationServers: servers,
|
|
39
|
+
apps: await all('/apps?limit=200&filter=status%20eq%20%22ACTIVE%22'),
|
|
40
|
+
groups: (await all('/groups?limit=200')).filter((g) => (0, record_set_1.str)(g.type) !== 'BUILT_IN'),
|
|
41
|
+
inlineHooks: await all('/inlineHooks'),
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
function translateOktaConfig(snap, opts = {}) {
|
|
45
|
+
const b = new translate_kit_1.ConfigBuilder();
|
|
46
|
+
b.set('strategies.password', true);
|
|
47
|
+
b.add('differs', 'authentication', 'password', 'Password sign-in. Okta never exports password hashes: the okta lazy-migration preset checks each password against Okta on first sign-in.', 'auth_config.strategies.password');
|
|
48
|
+
// ── password policy: the default (lowest priority) policy is the org baseline ──
|
|
49
|
+
const pwPolicy = [...snap.passwordPolicies].sort((a, c) => Number(c.priority ?? 0) - Number(a.priority ?? 0))[0];
|
|
50
|
+
if (pwPolicy) {
|
|
51
|
+
const name = (0, record_set_1.str)(pwPolicy.name) ?? 'password policy';
|
|
52
|
+
const settings = (0, record_set_1.isObj)(pwPolicy.settings) && (0, record_set_1.isObj)(pwPolicy.settings.password) ? pwPolicy.settings.password : {};
|
|
53
|
+
const complexity = (0, record_set_1.isObj)(settings.complexity) ? settings.complexity : {};
|
|
54
|
+
const min = typeof complexity.minLength === 'number' ? complexity.minLength : 8;
|
|
55
|
+
b.set('passwordPolicy.minLength', Math.max(8, min));
|
|
56
|
+
b.add(min < 8 ? 'differs' : 'mapped', `policies ${name}`, 'settings.password.complexity.minLength', `${min}${min < 8 ? ' (Atlas requires at least 8; existing passwords still sign in)' : ''}.`, 'auth_config.passwordPolicy.minLength');
|
|
57
|
+
if (['minLowerCase', 'minUpperCase', 'minNumber', 'minSymbol'].some((k) => Number(complexity[k] ?? 0) > 0)) {
|
|
58
|
+
b.add('differs', `policies ${name}`, 'settings.password.complexity (character classes)', 'Atlas follows NIST 800-63B: length and breached-password checks, no character-class rules.', 'auth_config.passwordPolicy');
|
|
59
|
+
}
|
|
60
|
+
if ((0, record_set_1.isObj)(complexity.dictionary) && (0, record_set_1.isObj)(complexity.dictionary.common) && complexity.dictionary.common.exclude === true) {
|
|
61
|
+
b.set('passwordPolicy.checkBreaches', true);
|
|
62
|
+
b.add('mapped', `policies ${name}`, 'settings.password.complexity.dictionary.common.exclude', 'Common / breached passwords are refused.', 'auth_config.passwordPolicy.checkBreaches');
|
|
63
|
+
}
|
|
64
|
+
const age = (0, record_set_1.isObj)(settings.age) ? settings.age : {};
|
|
65
|
+
if (Number(age.maxAgeDays ?? 0) > 0)
|
|
66
|
+
b.add('manual', `policies ${name}`, 'settings.password.age.maxAgeDays', 'Atlas does not expire passwords (NIST 800-63B).');
|
|
67
|
+
if (Number(age.historyCount ?? 0) > 0)
|
|
68
|
+
b.add('manual', `policies ${name}`, 'settings.password.age.historyCount', 'Atlas does not keep a password history.');
|
|
69
|
+
const lockout = (0, record_set_1.isObj)(settings.lockout) ? settings.lockout : {};
|
|
70
|
+
if (Number(lockout.maxAttempts ?? 0) > 0)
|
|
71
|
+
b.add('mapped', `policies ${name}`, 'settings.password.lockout.maxAttempts', `Okta locks after ${lockout.maxAttempts} attempts; Atlas throttles failed sign-ins per account and IP.`, 'auth_config.rateLimit');
|
|
72
|
+
}
|
|
73
|
+
if (snap.passwordPolicies.length > 1)
|
|
74
|
+
b.add('differs', 'policies', 'password policies', `${snap.passwordPolicies.length} password policies by group: Atlas has one instance-wide policy (the default one was used).`, 'auth_config.passwordPolicy');
|
|
75
|
+
// ── global session policy ──
|
|
76
|
+
const defaultSignOn = snap.signOnPolicies.find((p) => p.system === true) ?? snap.signOnPolicies[snap.signOnPolicies.length - 1];
|
|
77
|
+
const rule = (defaultSignOn?.rules ?? []).find((r) => r.system !== true && (0, record_set_1.str)(r.status) === 'ACTIVE') ?? defaultSignOn?.rules?.[0];
|
|
78
|
+
const session = rule && (0, record_set_1.isObj)(rule.actions) && (0, record_set_1.isObj)(rule.actions.signon) && (0, record_set_1.isObj)(rule.actions.signon.session) ? rule.actions.signon.session : undefined;
|
|
79
|
+
if (session) {
|
|
80
|
+
const area = `policies ${(0, record_set_1.str)(defaultSignOn?.name) ?? 'global session'}`;
|
|
81
|
+
const life = Number(session.maxSessionLifetimeMinutes ?? 0);
|
|
82
|
+
const idle = Number(session.maxSessionIdleMinutes ?? 0);
|
|
83
|
+
if (life > 0) {
|
|
84
|
+
b.set('session.absoluteMs', (0, translate_kit_1.clampSessionMs)(life * 60_000));
|
|
85
|
+
b.add('mapped', area, 'actions.signon.session.maxSessionLifetimeMinutes', `${life} minutes.`, 'auth_config.session.absoluteMs');
|
|
86
|
+
}
|
|
87
|
+
if (idle > 0) {
|
|
88
|
+
b.set('session.idleMs', (0, translate_kit_1.clampSessionMs)(idle * 60_000));
|
|
89
|
+
b.add('mapped', area, 'actions.signon.session.maxSessionIdleMinutes', `${idle} minutes idle.`, 'auth_config.session.idleMs');
|
|
90
|
+
}
|
|
91
|
+
if (rule && (0, record_set_1.isObj)(rule.actions) && (0, record_set_1.isObj)(rule.actions.signon) && rule.actions.signon.requireFactor === true) {
|
|
92
|
+
b.set('mfaPolicy', 'required');
|
|
93
|
+
b.add('mapped', area, 'actions.signon.requireFactor', 'A second factor on every sign-in.', 'auth_config.mfaPolicy');
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
if (snap.signOnPolicies.length > 1)
|
|
97
|
+
b.add('manual', 'policies', 'sign-on policies by group / network zone', 'Okta applies different sign-on rules per group and network zone; Atlas has instance-wide session settings plus step-up. Review the per-group rules by hand.', 'auth_config.stepUp');
|
|
98
|
+
// ── authenticators ──
|
|
99
|
+
for (const a of snap.authenticators) {
|
|
100
|
+
if ((0, record_set_1.str)(a.status) !== 'ACTIVE')
|
|
101
|
+
continue;
|
|
102
|
+
const key = (0, record_set_1.str)(a.key);
|
|
103
|
+
const name = (0, record_set_1.str)(a.name) ?? key ?? '?';
|
|
104
|
+
if (key === 'google_otp' || key === 'okta_verify') {
|
|
105
|
+
b.set('mfa.factors.totp', true);
|
|
106
|
+
b.add(key === 'okta_verify' ? 'differs' : 'mapped', 'authenticators', `${name} (${key})`, key === 'okta_verify' ? 'Okta Verify push / number challenge has no Atlas counterpart; its TOTP mode maps to authenticator apps (seeds do not move: users re-enrol).' : 'Authenticator apps (users re-enrol: Okta does not export seeds).', 'auth_config.mfa.factors.totp');
|
|
107
|
+
}
|
|
108
|
+
else if (key === 'webauthn') {
|
|
109
|
+
b.set('mfa.factors.passkey', true);
|
|
110
|
+
b.set('strategies.passkey', true);
|
|
111
|
+
b.add('differs', 'authenticators', `${name} (webauthn)`, 'Security keys and biometrics. Okta does not export WebAuthn credentials: users register again.', 'auth_config.mfa.factors.passkey');
|
|
112
|
+
}
|
|
113
|
+
else if (key === 'okta_email') {
|
|
114
|
+
b.set('mfa.factors.emailCode', true);
|
|
115
|
+
b.add('mapped', 'authenticators', `${name} (okta_email)`, 'Email code.', 'auth_config.mfa.factors.emailCode');
|
|
116
|
+
}
|
|
117
|
+
else if (key === 'phone_number') {
|
|
118
|
+
b.add('differs', 'authenticators', `${name} (phone_number)`, 'SMS / voice: phone factors move with --factors; Atlas recommends TOTP or passkeys as the second factor.', 'auth_config.mfa');
|
|
119
|
+
}
|
|
120
|
+
else if (key && key !== 'okta_password') {
|
|
121
|
+
b.add('manual', 'authenticators', `${name} (${key})`, 'No Atlas counterpart (security question, Duo, RSA, YubiKey OTP, smart card…): those users enrol an Atlas factor.');
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
// ── social identity providers ──
|
|
125
|
+
for (const idp of snap.idps) {
|
|
126
|
+
if ((0, record_set_1.str)(idp.status) === 'INACTIVE')
|
|
127
|
+
continue;
|
|
128
|
+
const type = (0, record_set_1.str)(idp.type) ?? '';
|
|
129
|
+
const name = (0, record_set_1.str)(idp.name) ?? type;
|
|
130
|
+
if (type === 'SAML2' || type === 'OIDC') {
|
|
131
|
+
b.add('mapped', 'identity providers', `${name} (${type})`, 'Enterprise IdP: moves with the data export as an Atlas SSO connection; update the IdP with Atlas\'s ACS URL / redirect URI, and replace Okta routing rules with the connection\'s domains.', 'sso_connections');
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
const key = (0, translate_kit_1.socialKey)(type);
|
|
135
|
+
if (!key) {
|
|
136
|
+
b.add('manual', 'identity providers', `${name} (${type})`, 'No built-in Atlas provider: add it as a custom OAuth provider.', 'custom_oauth_providers');
|
|
137
|
+
continue;
|
|
138
|
+
}
|
|
139
|
+
const protocol = (0, record_set_1.isObj)(idp.protocol) ? idp.protocol : {};
|
|
140
|
+
const client = (0, record_set_1.isObj)(protocol.credentials) && (0, record_set_1.isObj)(protocol.credentials.client) ? protocol.credentials.client : {};
|
|
141
|
+
b.socialProvider({ atlasKey: key, vendorName: name, area: 'identity providers', setting: `${name} (${type})`, clientId: (0, record_set_1.str)(client.client_id), scopes: (0, record_set_1.strs)(protocol.scopes) });
|
|
142
|
+
}
|
|
143
|
+
// ── authorization servers → APIs ──
|
|
144
|
+
for (const s of snap.authorizationServers) {
|
|
145
|
+
if ((0, record_set_1.str)(s.status) === 'INACTIVE')
|
|
146
|
+
continue;
|
|
147
|
+
const audiences = (0, record_set_1.strs)(s.audiences);
|
|
148
|
+
const scopes = (s.scopes ?? []).filter((sc) => sc.system !== true).map((sc) => (0, record_set_1.str)(sc.name)).filter((sc) => !!sc);
|
|
149
|
+
for (const aud of audiences) {
|
|
150
|
+
b.push('resource_servers', { identifier: aud, name: (0, record_set_1.str)(s.name) ?? aud, scopes });
|
|
151
|
+
b.add('mapped', `authorization servers ${(0, record_set_1.str)(s.name) ?? (0, record_set_1.str)(s.id)}`, `audiences ${aud}`, `An API with ${scopes.length} custom scope(s); Atlas access tokens for it keep "aud": "${aud}".`, `resource_servers ${aud}`);
|
|
152
|
+
}
|
|
153
|
+
if ((0, record_set_1.objs)(s.claims).length)
|
|
154
|
+
b.add('manual', `authorization servers ${(0, record_set_1.str)(s.name) ?? (0, record_set_1.str)(s.id)}`, 'claims', 'Custom token claims: recreate them as an Atlas JWT template / session claims.', 'jwt_templates');
|
|
155
|
+
}
|
|
156
|
+
// ── OIDC apps → redirect URLs ──
|
|
157
|
+
const redirects = new Set();
|
|
158
|
+
for (const app of snap.apps) {
|
|
159
|
+
const oauth = (0, record_set_1.isObj)(app.settings) && (0, record_set_1.isObj)(app.settings.oauthClient) ? app.settings.oauthClient : undefined;
|
|
160
|
+
if (!oauth)
|
|
161
|
+
continue;
|
|
162
|
+
for (const u of (0, record_set_1.strs)(oauth.redirect_uris))
|
|
163
|
+
redirects.add(u);
|
|
164
|
+
const grants = (0, record_set_1.strs)(oauth.grant_types);
|
|
165
|
+
if (grants.includes('client_credentials'))
|
|
166
|
+
b.add('manual', `apps ${(0, record_set_1.str)(app.label) ?? (0, record_set_1.str)(app.name)}`, 'grant_types client_credentials', 'A service app: create an Atlas M2M client for it.', 'oauth_clients');
|
|
167
|
+
}
|
|
168
|
+
let exact = 0;
|
|
169
|
+
for (const url of redirects) {
|
|
170
|
+
if (url.includes('*')) {
|
|
171
|
+
b.add('differs', 'apps', `redirect_uris ${url}`, 'Atlas redirect URLs are exact (no wildcards).', 'redirect_urls');
|
|
172
|
+
continue;
|
|
173
|
+
}
|
|
174
|
+
b.push('redirect_urls', { url });
|
|
175
|
+
exact++;
|
|
176
|
+
}
|
|
177
|
+
if (exact)
|
|
178
|
+
b.add('mapped', 'apps', 'redirect_uris', `${exact} redirect URI(s).`, 'redirect_urls');
|
|
179
|
+
// ── groups ──
|
|
180
|
+
const groupsAs = opts.groupsAs ?? 'roles';
|
|
181
|
+
if (groupsAs === 'roles') {
|
|
182
|
+
for (const g of snap.groups) {
|
|
183
|
+
const name = (0, record_set_1.str)((0, record_set_1.isObj)(g.profile) ? g.profile.name : undefined);
|
|
184
|
+
if (!name)
|
|
185
|
+
continue;
|
|
186
|
+
const key = (0, translate_kit_1.keyOf)(name);
|
|
187
|
+
b.roles[name] = key;
|
|
188
|
+
b.push('roles', { key, name, description: (0, record_set_1.str)((0, record_set_1.isObj)(g.profile) ? g.profile.description : undefined) ?? '', permissions: [] });
|
|
189
|
+
}
|
|
190
|
+
if (snap.groups.length)
|
|
191
|
+
b.add('differs', 'groups', 'groups', `${snap.groups.length} group(s) become Atlas app roles (memberships move with the data export). Group rules and app assignments are not translated.`, 'roles');
|
|
192
|
+
}
|
|
193
|
+
else if (groupsAs === 'organizations' && snap.groups.length) {
|
|
194
|
+
b.add('differs', 'groups', 'groups', 'Groups become organizations with the data export (--groups-as organizations).', 'organizations');
|
|
195
|
+
}
|
|
196
|
+
for (const h of snap.inlineHooks) {
|
|
197
|
+
if ((0, record_set_1.str)(h.status) === 'ACTIVE')
|
|
198
|
+
b.add('manual', 'inline hooks', `${(0, record_set_1.str)(h.name) ?? '?'} (${(0, record_set_1.str)(h.type) ?? '?'})`, 'Okta inline hook: port it to an Atlas action or webhook.', 'actions');
|
|
199
|
+
}
|
|
200
|
+
return b.result(`Okta org ${snap.domain}`, {
|
|
201
|
+
bridge: { preset: 'okta', vars: { domain: snap.domain } },
|
|
202
|
+
lazy: { preset: 'okta', config: { domain: snap.domain } },
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
//# sourceMappingURL=okta-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"okta-config.js","sourceRoot":"","sources":["../../../src/migrate/export/okta-config.ts"],"names":[],"mappings":"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"}
|