@rockcarver/frodo-cli 0.24.5 → 2.0.0-2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.vscode/launch.json +15 -0
- package/CHANGELOG.md +9 -1
- package/esm/app.js +2 -5
- package/esm/app.js.map +1 -1
- package/esm/cli/FrodoCommand.js +10 -10
- package/esm/cli/FrodoCommand.js.map +1 -1
- package/esm/cli/_template/something-delete.js +2 -5
- package/esm/cli/_template/something-delete.js.map +1 -1
- package/esm/cli/_template/something-describe.js +2 -5
- package/esm/cli/_template/something-describe.js.map +1 -1
- package/esm/cli/_template/something-else-delete.js +2 -5
- package/esm/cli/_template/something-else-delete.js.map +1 -1
- package/esm/cli/_template/something-else-describe.js +2 -5
- package/esm/cli/_template/something-else-describe.js.map +1 -1
- package/esm/cli/_template/something-else-export.js +2 -5
- package/esm/cli/_template/something-else-export.js.map +1 -1
- package/esm/cli/_template/something-else-import.js +2 -5
- package/esm/cli/_template/something-else-import.js.map +1 -1
- package/esm/cli/_template/something-else-list.js +2 -5
- package/esm/cli/_template/something-else-list.js.map +1 -1
- package/esm/cli/_template/something-export.js +2 -5
- package/esm/cli/_template/something-export.js.map +1 -1
- package/esm/cli/_template/something-import.js +2 -5
- package/esm/cli/_template/something-import.js.map +1 -1
- package/esm/cli/_template/something-list.js +2 -5
- package/esm/cli/_template/something-list.js.map +1 -1
- package/esm/cli/_template/something-other-delete.js +2 -5
- package/esm/cli/_template/something-other-delete.js.map +1 -1
- package/esm/cli/_template/something-other-describe.js +2 -5
- package/esm/cli/_template/something-other-describe.js.map +1 -1
- package/esm/cli/_template/something-other-export.js +2 -5
- package/esm/cli/_template/something-other-export.js.map +1 -1
- package/esm/cli/_template/something-other-import.js +2 -5
- package/esm/cli/_template/something-other-import.js.map +1 -1
- package/esm/cli/_template/something-other-list.js +2 -5
- package/esm/cli/_template/something-other-list.js.map +1 -1
- package/esm/cli/admin/admin-add-autoid-static-user-mapping.js +3 -9
- package/esm/cli/admin/admin-add-autoid-static-user-mapping.js.map +1 -1
- package/esm/cli/admin/admin-create-oauth2-client-with-admin-privileges.js +4 -11
- package/esm/cli/admin/admin-create-oauth2-client-with-admin-privileges.js.map +1 -1
- package/esm/cli/admin/admin-get-access-token.js +3 -9
- package/esm/cli/admin/admin-get-access-token.js.map +1 -1
- package/esm/cli/admin/admin-grant-oauth2-client-admin-privileges.js +3 -9
- package/esm/cli/admin/admin-grant-oauth2-client-admin-privileges.js.map +1 -1
- package/esm/cli/admin/admin-hide-generic-extension-attributes.js +3 -9
- package/esm/cli/admin/admin-hide-generic-extension-attributes.js.map +1 -1
- package/esm/cli/admin/admin-list-oauth2-clients-with-admin-privileges.js +3 -9
- package/esm/cli/admin/admin-list-oauth2-clients-with-admin-privileges.js.map +1 -1
- package/esm/cli/admin/admin-list-oauth2-clients-with-custom-privileges.js +3 -9
- package/esm/cli/admin/admin-list-oauth2-clients-with-custom-privileges.js.map +1 -1
- package/esm/cli/admin/admin-list-static-user-mappings.js +3 -9
- package/esm/cli/admin/admin-list-static-user-mappings.js.map +1 -1
- package/esm/cli/admin/admin-remove-static-user-mapping.js +3 -9
- package/esm/cli/admin/admin-remove-static-user-mapping.js.map +1 -1
- package/esm/cli/admin/admin-repair-org-model.js +3 -9
- package/esm/cli/admin/admin-repair-org-model.js.map +1 -1
- package/esm/cli/admin/admin-revoke-oauth2-client-admin-privileges.js +3 -9
- package/esm/cli/admin/admin-revoke-oauth2-client-admin-privileges.js.map +1 -1
- package/esm/cli/admin/admin-show-generic-extension-attributes.js +3 -9
- package/esm/cli/admin/admin-show-generic-extension-attributes.js.map +1 -1
- package/esm/cli/agent/agent-delete.js +4 -11
- package/esm/cli/agent/agent-delete.js.map +1 -1
- package/esm/cli/agent/agent-describe.js +2 -5
- package/esm/cli/agent/agent-describe.js.map +1 -1
- package/esm/cli/agent/agent-export.js +2 -5
- package/esm/cli/agent/agent-export.js.map +1 -1
- package/esm/cli/agent/agent-gateway-delete.js +4 -11
- package/esm/cli/agent/agent-gateway-delete.js.map +1 -1
- package/esm/cli/agent/agent-gateway-describe.js +2 -5
- package/esm/cli/agent/agent-gateway-describe.js.map +1 -1
- package/esm/cli/agent/agent-gateway-export.js +2 -5
- package/esm/cli/agent/agent-gateway-export.js.map +1 -1
- package/esm/cli/agent/agent-gateway-import.js +2 -5
- package/esm/cli/agent/agent-gateway-import.js.map +1 -1
- package/esm/cli/agent/agent-gateway-list.js +2 -5
- package/esm/cli/agent/agent-gateway-list.js.map +1 -1
- package/esm/cli/agent/agent-import.js +2 -5
- package/esm/cli/agent/agent-import.js.map +1 -1
- package/esm/cli/agent/agent-java-delete.js +4 -11
- package/esm/cli/agent/agent-java-delete.js.map +1 -1
- package/esm/cli/agent/agent-java-describe.js +2 -5
- package/esm/cli/agent/agent-java-describe.js.map +1 -1
- package/esm/cli/agent/agent-java-export.js +2 -5
- package/esm/cli/agent/agent-java-export.js.map +1 -1
- package/esm/cli/agent/agent-java-import.js +2 -5
- package/esm/cli/agent/agent-java-import.js.map +1 -1
- package/esm/cli/agent/agent-java-list.js +2 -5
- package/esm/cli/agent/agent-java-list.js.map +1 -1
- package/esm/cli/agent/agent-list.js +2 -5
- package/esm/cli/agent/agent-list.js.map +1 -1
- package/esm/cli/agent/agent-web-delete.js +4 -11
- package/esm/cli/agent/agent-web-delete.js.map +1 -1
- package/esm/cli/agent/agent-web-describe.js +2 -5
- package/esm/cli/agent/agent-web-describe.js.map +1 -1
- package/esm/cli/agent/agent-web-export.js +2 -5
- package/esm/cli/agent/agent-web-export.js.map +1 -1
- package/esm/cli/agent/agent-web-import.js +2 -5
- package/esm/cli/agent/agent-web-import.js.map +1 -1
- package/esm/cli/agent/agent-web-list.js +2 -5
- package/esm/cli/agent/agent-web-list.js.map +1 -1
- package/esm/cli/app/app-delete.js +2 -5
- package/esm/cli/app/app-delete.js.map +1 -1
- package/esm/cli/app/app-describe.js +2 -5
- package/esm/cli/app/app-describe.js.map +1 -1
- package/esm/cli/app/app-export.js +4 -7
- package/esm/cli/app/app-export.js.map +1 -1
- package/esm/cli/app/app-import.js +5 -8
- package/esm/cli/app/app-import.js.map +1 -1
- package/esm/cli/app/app-list.js +3 -6
- package/esm/cli/app/app-list.js.map +1 -1
- package/esm/cli/authz/authz-policy-delete.js +4 -7
- package/esm/cli/authz/authz-policy-delete.js.map +1 -1
- package/esm/cli/authz/authz-policy-describe.js +2 -5
- package/esm/cli/authz/authz-policy-describe.js.map +1 -1
- package/esm/cli/authz/authz-policy-export.js +6 -9
- package/esm/cli/authz/authz-policy-export.js.map +1 -1
- package/esm/cli/authz/authz-policy-import.js +5 -8
- package/esm/cli/authz/authz-policy-import.js.map +1 -1
- package/esm/cli/authz/authz-policy-list.js +3 -6
- package/esm/cli/authz/authz-policy-list.js.map +1 -1
- package/esm/cli/authz/authz-set-delete.js +3 -6
- package/esm/cli/authz/authz-set-delete.js.map +1 -1
- package/esm/cli/authz/authz-set-describe.js +2 -5
- package/esm/cli/authz/authz-set-describe.js.map +1 -1
- package/esm/cli/authz/authz-set-export.js +4 -7
- package/esm/cli/authz/authz-set-export.js.map +1 -1
- package/esm/cli/authz/authz-set-import.js +5 -8
- package/esm/cli/authz/authz-set-import.js.map +1 -1
- package/esm/cli/authz/authz-set-list.js +2 -5
- package/esm/cli/authz/authz-set-list.js.map +1 -1
- package/esm/cli/authz/authz-type-delete.js +4 -7
- package/esm/cli/authz/authz-type-delete.js.map +1 -1
- package/esm/cli/authz/authz-type-describe.js +3 -6
- package/esm/cli/authz/authz-type-describe.js.map +1 -1
- package/esm/cli/authz/authz-type-export.js +5 -8
- package/esm/cli/authz/authz-type-export.js.map +1 -1
- package/esm/cli/authz/authz-type-import.js +6 -9
- package/esm/cli/authz/authz-type-import.js.map +1 -1
- package/esm/cli/authz/authz-type-list.js +2 -5
- package/esm/cli/authz/authz-type-list.js.map +1 -1
- package/esm/cli/conn/conn-delete.js +2 -5
- package/esm/cli/conn/conn-delete.js.map +1 -1
- package/esm/cli/conn/conn-describe.js +1 -4
- package/esm/cli/conn/conn-describe.js.map +1 -1
- package/esm/cli/conn/conn-list.js +1 -4
- package/esm/cli/conn/conn-list.js.map +1 -1
- package/esm/cli/conn/conn-save.js +6 -16
- package/esm/cli/conn/conn-save.js.map +1 -1
- package/esm/cli/email/email-template-export.js +4 -7
- package/esm/cli/email/email-template-export.js.map +1 -1
- package/esm/cli/email/email-template-import.js +5 -8
- package/esm/cli/email/email-template-import.js.map +1 -1
- package/esm/cli/email/email-template-list.js +2 -5
- package/esm/cli/email/email-template-list.js.map +1 -1
- package/esm/cli/esv/esv-apply.js +6 -16
- package/esm/cli/esv/esv-apply.js.map +1 -1
- package/esm/cli/esv/esv-secret-create.js +3 -8
- package/esm/cli/esv/esv-secret-create.js.map +1 -1
- package/esm/cli/esv/esv-secret-delete.js +6 -12
- package/esm/cli/esv/esv-secret-delete.js.map +1 -1
- package/esm/cli/esv/esv-secret-describe.js +3 -8
- package/esm/cli/esv/esv-secret-describe.js.map +1 -1
- package/esm/cli/esv/esv-secret-export.js +2 -5
- package/esm/cli/esv/esv-secret-export.js.map +1 -1
- package/esm/cli/esv/esv-secret-import.js +2 -5
- package/esm/cli/esv/esv-secret-import.js.map +1 -1
- package/esm/cli/esv/esv-secret-list.js +3 -8
- package/esm/cli/esv/esv-secret-list.js.map +1 -1
- package/esm/cli/esv/esv-secret-set.js +4 -9
- package/esm/cli/esv/esv-secret-set.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-activate.js +3 -8
- package/esm/cli/esv/esv-secret-version-activate.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-create.js +4 -9
- package/esm/cli/esv/esv-secret-version-create.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-deactivate.js +3 -8
- package/esm/cli/esv/esv-secret-version-deactivate.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-delete.js +5 -10
- package/esm/cli/esv/esv-secret-version-delete.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-list.js +4 -9
- package/esm/cli/esv/esv-secret-version-list.js.map +1 -1
- package/esm/cli/esv/esv-variable-create.js +3 -8
- package/esm/cli/esv/esv-variable-create.js.map +1 -1
- package/esm/cli/esv/esv-variable-delete.js +6 -12
- package/esm/cli/esv/esv-variable-delete.js.map +1 -1
- package/esm/cli/esv/esv-variable-describe.js +3 -8
- package/esm/cli/esv/esv-variable-describe.js.map +1 -1
- package/esm/cli/esv/esv-variable-export.js +2 -5
- package/esm/cli/esv/esv-variable-export.js.map +1 -1
- package/esm/cli/esv/esv-variable-import.js +2 -5
- package/esm/cli/esv/esv-variable-import.js.map +1 -1
- package/esm/cli/esv/esv-variable-list.js +3 -8
- package/esm/cli/esv/esv-variable-list.js.map +1 -1
- package/esm/cli/esv/esv-variable-set.js +5 -11
- package/esm/cli/esv/esv-variable-set.js.map +1 -1
- package/esm/cli/idm/idm-count.js +2 -5
- package/esm/cli/idm/idm-count.js.map +1 -1
- package/esm/cli/idm/idm-export.js +4 -7
- package/esm/cli/idm/idm-export.js.map +1 -1
- package/esm/cli/idm/idm-import.js +5 -8
- package/esm/cli/idm/idm-import.js.map +1 -1
- package/esm/cli/idm/idm-list.js +2 -5
- package/esm/cli/idm/idm-list.js.map +1 -1
- package/esm/cli/idp/idp-export.js +2 -5
- package/esm/cli/idp/idp-export.js.map +1 -1
- package/esm/cli/idp/idp-import.js +5 -8
- package/esm/cli/idp/idp-import.js.map +1 -1
- package/esm/cli/idp/idp-list.js +2 -5
- package/esm/cli/idp/idp-list.js.map +1 -1
- package/esm/cli/info/info.js +3 -9
- package/esm/cli/info/info.js.map +1 -1
- package/esm/cli/journey/journey-delete.js +5 -12
- package/esm/cli/journey/journey-delete.js.map +1 -1
- package/esm/cli/journey/journey-describe.js +7 -15
- package/esm/cli/journey/journey-describe.js.map +1 -1
- package/esm/cli/journey/journey-disable.js +3 -9
- package/esm/cli/journey/journey-disable.js.map +1 -1
- package/esm/cli/journey/journey-enable.js +3 -9
- package/esm/cli/journey/journey-enable.js.map +1 -1
- package/esm/cli/journey/journey-export.js +4 -7
- package/esm/cli/journey/journey-export.js.map +1 -1
- package/esm/cli/journey/journey-import.js +5 -8
- package/esm/cli/journey/journey-import.js.map +1 -1
- package/esm/cli/journey/journey-list.js +2 -5
- package/esm/cli/journey/journey-list.js.map +1 -1
- package/esm/cli/journey/journey-prune.js +4 -11
- package/esm/cli/journey/journey-prune.js.map +1 -1
- package/esm/cli/logging/logs-fetch.js +7 -17
- package/esm/cli/logging/logs-fetch.js.map +1 -1
- package/esm/cli/logging/logs-list.js +5 -15
- package/esm/cli/logging/logs-list.js.map +1 -1
- package/esm/cli/logging/logs-tail.js +7 -17
- package/esm/cli/logging/logs-tail.js.map +1 -1
- package/esm/cli/realm/realm-add-custom-domain.js +3 -8
- package/esm/cli/realm/realm-add-custom-domain.js.map +1 -1
- package/esm/cli/realm/realm-describe.js +4 -12
- package/esm/cli/realm/realm-describe.js.map +1 -1
- package/esm/cli/realm/realm-list.js +3 -8
- package/esm/cli/realm/realm-list.js.map +1 -1
- package/esm/cli/realm/realm-remove-custom-domain.js +3 -9
- package/esm/cli/realm/realm-remove-custom-domain.js.map +1 -1
- package/esm/cli/saml/saml-cot-export.js +11 -15
- package/esm/cli/saml/saml-cot-export.js.map +1 -1
- package/esm/cli/saml/saml-cot-import.js +15 -19
- package/esm/cli/saml/saml-cot-import.js.map +1 -1
- package/esm/cli/saml/saml-cot-list.js +5 -9
- package/esm/cli/saml/saml-cot-list.js.map +1 -1
- package/esm/cli/saml/saml-delete.js +5 -12
- package/esm/cli/saml/saml-delete.js.map +1 -1
- package/esm/cli/saml/saml-describe.js +2 -5
- package/esm/cli/saml/saml-describe.js.map +1 -1
- package/esm/cli/saml/saml-export.js +12 -30
- package/esm/cli/saml/saml-export.js.map +1 -1
- package/esm/cli/saml/saml-import.js +15 -36
- package/esm/cli/saml/saml-import.js.map +1 -1
- package/esm/cli/saml/saml-list.js +6 -14
- package/esm/cli/saml/saml-list.js.map +1 -1
- package/esm/cli/saml/saml-metadata-export.js +3 -6
- package/esm/cli/saml/saml-metadata-export.js.map +1 -1
- package/esm/cli/script/script-delete.js +2 -5
- package/esm/cli/script/script-delete.js.map +1 -1
- package/esm/cli/script/script-describe.js +2 -5
- package/esm/cli/script/script-describe.js.map +1 -1
- package/esm/cli/script/script-export.js +2 -5
- package/esm/cli/script/script-export.js.map +1 -1
- package/esm/cli/script/script-import.js +4 -6
- package/esm/cli/script/script-import.js.map +1 -1
- package/esm/cli/script/script-list.js +4 -6
- package/esm/cli/script/script-list.js.map +1 -1
- package/esm/cli/service/service-delete.js +3 -6
- package/esm/cli/service/service-delete.js.map +1 -1
- package/esm/cli/service/service-export.js +4 -7
- package/esm/cli/service/service-export.js.map +1 -1
- package/esm/cli/service/service-import.js +5 -8
- package/esm/cli/service/service-import.js.map +1 -1
- package/esm/cli/service/service-list.js +2 -5
- package/esm/cli/service/service-list.js.map +1 -1
- package/esm/cli/theme/theme-delete.js +4 -7
- package/esm/cli/theme/theme-delete.js.map +1 -1
- package/esm/cli/theme/theme-export.js +5 -8
- package/esm/cli/theme/theme-export.js.map +1 -1
- package/esm/cli/theme/theme-import.js +6 -9
- package/esm/cli/theme/theme-import.js.map +1 -1
- package/esm/cli/theme/theme-list.js +2 -5
- package/esm/cli/theme/theme-list.js.map +1 -1
- package/esm/launch.js +4 -3
- package/esm/launch.js.map +1 -1
- package/esm/ops/AgentOps.js +49 -82
- package/esm/ops/AgentOps.js.map +1 -1
- package/esm/ops/CirclesOfTrustOps.js +217 -2
- package/esm/ops/CirclesOfTrustOps.js.map +1 -1
- package/esm/ops/ConnectionProfileOps.js +97 -8
- package/esm/ops/ConnectionProfileOps.js.map +1 -1
- package/esm/ops/EmailTemplateOps.js +16 -25
- package/esm/ops/EmailTemplateOps.js.map +1 -1
- package/esm/ops/IdmOps.js +25 -39
- package/esm/ops/IdmOps.js.map +1 -1
- package/esm/ops/IdpOps.js +10 -18
- package/esm/ops/IdpOps.js.map +1 -1
- package/esm/ops/JourneyOps.js +49 -65
- package/esm/ops/JourneyOps.js.map +1 -1
- package/esm/ops/LogOps.js +9 -17
- package/esm/ops/LogOps.js.map +1 -1
- package/esm/ops/NodeOps.js +11 -11
- package/esm/ops/NodeOps.js.map +1 -1
- package/esm/ops/OAuth2ClientOps.js +13 -29
- package/esm/ops/OAuth2ClientOps.js.map +1 -1
- package/esm/ops/OrganizationOps.js +28 -0
- package/esm/ops/OrganizationOps.js.map +1 -0
- package/esm/ops/PolicyOps.js +22 -38
- package/esm/ops/PolicyOps.js.map +1 -1
- package/esm/ops/PolicySetOps.js +19 -37
- package/esm/ops/PolicySetOps.js.map +1 -1
- package/esm/ops/RealmOps.js +109 -0
- package/esm/ops/RealmOps.js.map +1 -0
- package/esm/ops/ResourceTypeOps.js +19 -37
- package/esm/ops/ResourceTypeOps.js.map +1 -1
- package/esm/ops/Saml2Ops.js +30 -251
- package/esm/ops/Saml2Ops.js.map +1 -1
- package/esm/ops/ScriptOps.js +14 -21
- package/esm/ops/ScriptOps.js.map +1 -1
- package/esm/ops/SecretsOps.js +223 -0
- package/esm/ops/SecretsOps.js.map +1 -0
- package/esm/ops/ServiceOps.js +20 -41
- package/esm/ops/ServiceOps.js.map +1 -1
- package/esm/ops/ThemeOps.js +20 -35
- package/esm/ops/ThemeOps.js.map +1 -1
- package/esm/ops/VariablesOps.js +133 -0
- package/esm/ops/VariablesOps.js.map +1 -0
- package/esm/utils/Config.js +3 -6
- package/esm/utils/Config.js.map +1 -1
- package/esm/utils/Console.js +2 -5
- package/esm/utils/Console.js.map +1 -1
- package/esm/utils/ExportImportUtils.js +4 -6
- package/esm/utils/ExportImportUtils.js.map +1 -1
- package/esm/utils/Version.js +3 -3
- package/esm/utils/Version.js.map +1 -1
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EmailTemplateOps.js","names":["fs","EmailTemplate","ExportImportUtils","getTypedFilename","saveJsonToFile","createProgressIndicator","updateProgressIndicator","stopProgressIndicator","printMessage","createTable","showSpinner","succeedSpinner","failSpinner","debugMessage","wordwrap","path","cloneDeep","EMAIL_TEMPLATE_FILE_TYPE","EMAIL_TEMPLATE_TYPE","getEmailTemplate","getEmailTemplates","putEmailTemplate","validateImport","regexEmailTemplateType","RegExp","getFileDataTemplate","meta","emailTemplate","getOneLineDescription","templateObj","description","_id","split","displayName","defaultLocale","subject","Object","values","getTableHeaderMd","markdown","getTableRowMd","templateId","replace","locales","keys","length","filter","locale","join","row","name","listEmailTemplates","long","emailTemplates","result","error","message","sort","a","b","localeCompare","entries","table","push","enabled","from","toString","exportEmailTemplateToFile","file","fileName","templateData","fileData","err","exportEmailTemplatesToFile","response","templates","resultCount","template","exportEmailTemplatesToFiles","importEmailTemplateFromFile","raw","replaceAll","readFile","data","JSON","parse","emailTemplateData","s2sConvert","putEmailTemplateError","importEmailTemplatesFromFile","id","hasOwnProperty","call","getEmailTemplateIdFromFile","basename","substring","indexOf","html","convertedData","importEmailTemplatesFromFiles","names","readdirSync","jsonFiles","startsWith","endsWith","toLowerCase","total","totalErrors","readFileSync","errors","_putEmailTemplateErro","importFirstEmailTemplateFromFile","_putEmailTemplateErro2","_putEmailTemplateErro3"],"sources":["ops/EmailTemplateOps.ts"],"sourcesContent":["import fs from 'fs';\nimport { EmailTemplateSkeleton } from '@rockcarver/frodo-lib/types/api/ApiTypes';\nimport { EmailTemplate, ExportImportUtils } from '@rockcarver/frodo-lib';\nimport { getTypedFilename, saveJsonToFile } from '../utils/ExportImportUtils';\nimport {\n createProgressIndicator,\n updateProgressIndicator,\n stopProgressIndicator,\n printMessage,\n createTable,\n showSpinner,\n succeedSpinner,\n failSpinner,\n debugMessage,\n} from '../utils/Console';\nimport wordwrap from './utils/Wordwrap';\nimport path from 'path';\nimport { cloneDeep } from './utils/OpsUtils';\n\nconst EMAIL_TEMPLATE_FILE_TYPE = 'template.email';\nconst {\n EMAIL_TEMPLATE_TYPE,\n getEmailTemplate,\n getEmailTemplates,\n putEmailTemplate,\n} = EmailTemplate;\nconst { validateImport } = ExportImportUtils;\n\nconst regexEmailTemplateType = new RegExp(`${EMAIL_TEMPLATE_TYPE}/`, 'g');\n\n// use a function vs a template variable to avoid problems in loops\nfunction getFileDataTemplate() {\n return {\n meta: {},\n emailTemplate: {},\n };\n}\n\n/**\n * Get a one-line description of the email template\n * @param {EmailTemplateSkeleton} templateObj email template object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescription(\n templateObj: EmailTemplateSkeleton\n): string {\n const description = `[${templateObj._id.split('/')[1]['brightCyan']}] ${\n templateObj.displayName ? templateObj.displayName : ''\n } - ${\n templateObj.defaultLocale\n ? templateObj.subject[templateObj.defaultLocale]\n : Object.values(templateObj.subject)[0]\n }`;\n return description;\n}\n\n/**\n * Get markdown table header\n * @returns {string} markdown table header\n */\nexport function getTableHeaderMd(): string {\n let markdown = '';\n markdown += '| Display Name | Locale(s) | Subject | Id |\\n';\n markdown += '| ------------ | --------- | ------- | ---|';\n return markdown;\n}\n\n/**\n * Get a table-row of the email template in markdown\n * @param {EmailTemplateSkeleton} templateObj email template object to describe\n * @returns {string} a table-row of the email template in markdown\n */\nexport function getTableRowMd(templateObj: EmailTemplateSkeleton): string {\n const templateId = templateObj._id.replace(`${EMAIL_TEMPLATE_TYPE}/`, '');\n const locales = `${templateObj.defaultLocale}${\n Object.keys(templateObj.subject).length > 1\n ? ` (${Object.keys(templateObj.subject)\n .filter((locale) => locale !== templateObj.defaultLocale)\n .join(',')})`\n : ''\n }`;\n const row = `| ${\n templateObj.name ? templateObj.name : templateId\n } | ${locales} | ${\n templateObj.subject[templateObj.defaultLocale]\n } | \\`${templateId}\\` |`;\n return row;\n}\n\n/**\n * List email templates\n * @param {boolean} long Long list format with details\n * @return {Promise<unknown[]>} a promise that resolves to an array of email template objects\n */\nexport async function listEmailTemplates(long = false): Promise<unknown[]> {\n let emailTemplates = [];\n try {\n emailTemplates = (await getEmailTemplates()).result;\n } catch (error) {\n printMessage(`Error retrieving email templates: ${error.message}`, 'error');\n }\n emailTemplates.sort((a, b) => a._id.localeCompare(b._id));\n if (!long) {\n for (const [, emailTemplate] of emailTemplates.entries()) {\n printMessage(\n `${emailTemplate._id.replace(`${EMAIL_TEMPLATE_TYPE}/`, '')}`,\n 'data'\n );\n }\n } else {\n const table = createTable([\n 'Id'['brightCyan'],\n 'Name'['brightCyan'],\n 'Status'['brightCyan'],\n 'Locale(s)'['brightCyan'],\n 'From'['brightCyan'],\n 'Subject'['brightCyan'],\n ]);\n for (const emailTemplate of emailTemplates) {\n table.push([\n // Id\n `${emailTemplate._id.replace(`${EMAIL_TEMPLATE_TYPE}/`, '')}`,\n // Name\n `${emailTemplate.displayName ? emailTemplate.displayName : ''}`,\n // Status\n emailTemplate.enabled === false\n ? 'disabled'['brightRed']\n : 'enabled'['brightGreen'],\n // Locale(s)\n `${emailTemplate.defaultLocale}${\n Object.keys(emailTemplate.subject).length > 1\n ? ` (${Object.keys(emailTemplate.subject)\n .filter((locale) => locale !== emailTemplate.defaultLocale)\n .join(',')})`\n : ''\n }`,\n // From\n `${emailTemplate.from ? emailTemplate.from : ''}`,\n // Subject\n wordwrap(emailTemplate.subject[emailTemplate.defaultLocale], 40),\n ]);\n }\n printMessage(table.toString(), 'data');\n }\n return emailTemplates;\n}\n\n/**\n * Export single email template to a file\n * @param {string} templateId email template id to export\n * @param {string} file filename where to export the template data\n */\nexport async function exportEmailTemplateToFile(\n templateId: string,\n file: string\n) {\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(templateId, EMAIL_TEMPLATE_FILE_TYPE);\n }\n createProgressIndicator('determinate', 1, `Exporting ${templateId}`);\n try {\n const templateData = await getEmailTemplate(templateId);\n updateProgressIndicator(`Writing file ${fileName}`);\n const fileData = getFileDataTemplate();\n fileData.emailTemplate[templateId] = templateData;\n saveJsonToFile(fileData, fileName);\n stopProgressIndicator(\n `Exported ${templateId['brightCyan']} to ${fileName['brightCyan']}.`\n );\n } catch (err) {\n stopProgressIndicator(`${err}`);\n printMessage(err, 'error');\n }\n}\n\n/**\n * Export all email templates to file\n * @param {String} file optional filename\n */\nexport async function exportEmailTemplatesToFile(file) {\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(`allEmailTemplates`, EMAIL_TEMPLATE_FILE_TYPE);\n }\n try {\n const fileData = getFileDataTemplate();\n const response = await getEmailTemplates();\n const templates = response.result;\n createProgressIndicator(\n 'determinate',\n response.resultCount,\n 'Exporting email templates'\n );\n for (const template of templates) {\n const templateId = template._id.replace(`${EMAIL_TEMPLATE_TYPE}/`, '');\n updateProgressIndicator(`Exporting ${templateId}`);\n fileData.emailTemplate[templateId] = template;\n }\n saveJsonToFile(fileData, fileName);\n stopProgressIndicator(\n `${response.resultCount} templates exported to ${fileName}.`\n );\n } catch (err) {\n stopProgressIndicator(`${err}`);\n printMessage(err, 'error');\n }\n}\n\n/**\n * Export all email templates to separate files\n */\nexport async function exportEmailTemplatesToFiles() {\n try {\n const response = await getEmailTemplates();\n const templates = response.result;\n createProgressIndicator(\n 'determinate',\n response.resultCount,\n 'Exporting email templates'\n );\n for (const template of templates) {\n const templateId = template._id.replace(`${EMAIL_TEMPLATE_TYPE}/`, '');\n const fileName = getTypedFilename(templateId, EMAIL_TEMPLATE_FILE_TYPE);\n const fileData = getFileDataTemplate();\n updateProgressIndicator(`Exporting ${templateId}`);\n fileData.emailTemplate[templateId] = template;\n saveJsonToFile(fileData, fileName);\n }\n stopProgressIndicator(`${response.resultCount} templates exported.`);\n } catch (err) {\n stopProgressIndicator(`${err}`);\n printMessage(err, 'error');\n }\n}\n\n/**\n * Import email template by id from file\n * @param {string} templateId email template id\n * @param {string} file optional filename\n * @param {boolean} raw import raw data file lacking frodo export envelop\n */\nexport async function importEmailTemplateFromFile(\n templateId: string,\n file: string,\n raw = false\n) {\n // eslint-disable-next-line no-param-reassign\n templateId = templateId.replaceAll(`${EMAIL_TEMPLATE_TYPE}/`, '');\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data);\n if (raw || validateImport(fileData.meta)) {\n createProgressIndicator('determinate', 1, `Importing ${templateId}`);\n if (\n fileData.emailTemplate[templateId] ||\n (raw && fileData._id === templateId)\n ) {\n try {\n const emailTemplateData = raw\n ? s2sConvert(fileData)\n : fileData.emailTemplate[templateId];\n await putEmailTemplate(templateId, emailTemplateData);\n updateProgressIndicator(`Importing ${templateId}`);\n stopProgressIndicator(`Imported ${templateId}`);\n } catch (putEmailTemplateError) {\n stopProgressIndicator(`${putEmailTemplateError}`);\n printMessage(putEmailTemplateError, 'error');\n }\n } else {\n stopProgressIndicator(\n `Email template ${templateId} not found in ${file}!`\n );\n printMessage(\n `Email template ${templateId} not found in ${file}!`,\n 'error'\n );\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Import all email templates from file\n * @param {string} file optional filename\n */\nexport async function importEmailTemplatesFromFile(file: string) {\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n createProgressIndicator(\n 'determinate',\n Object.keys(fileData.emailTemplate).length,\n `Importing email templates`\n );\n for (const id in fileData.emailTemplate) {\n if ({}.hasOwnProperty.call(fileData.emailTemplate, id)) {\n const templateId = id.replace(regexEmailTemplateType, '');\n try {\n // eslint-disable-next-line no-await-in-loop\n await putEmailTemplate(\n templateId,\n fileData.emailTemplate[templateId]\n );\n updateProgressIndicator(`Imported ${templateId}`);\n } catch (putEmailTemplateError) {\n printMessage(`\\nError importing ${templateId}`, 'error');\n printMessage(putEmailTemplateError.response.data, 'error');\n }\n }\n }\n stopProgressIndicator(`Done.`);\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Helper function to get email template id from file name\n * @param {string} file file name\n * @returns {string} email template id/name\n */\nfunction getEmailTemplateIdFromFile(file: string) {\n debugMessage(`cli.EmailTemplateOps.getEmailTemplateIdFromFile: file=${file}`);\n const fileName = path.basename(file);\n const templateId = fileName.substring(14, fileName.indexOf('.'));\n debugMessage(\n `cli.EmailTemplateOps.getEmailTemplateIdFromFile: templateId=${templateId}`\n );\n return templateId;\n}\n\n/**\n * Convert template for s2s purposes (software-to-saas migration)\n * @param {EmailTemplateSkeleton} templateData template object\n * @returns {EmailTemplateSkeleton} converted template object\n */\nfunction s2sConvert(\n templateData: EmailTemplateSkeleton\n): EmailTemplateSkeleton {\n if (templateData.message && !templateData.html) {\n const convertedData = cloneDeep(templateData);\n convertedData.html = cloneDeep(templateData.message);\n debugMessage(`cli.EmailTemplateOps.s2sConvert: templateData:`);\n debugMessage(templateData);\n debugMessage(`cli.EmailTemplateOps.s2sConvert: convertedData:`);\n debugMessage(convertedData);\n return convertedData;\n }\n return templateData;\n}\n\n/**\n * Import all email templates from separate files\n * @param {boolean} raw import raw data file lacking frodo export envelop\n */\nexport async function importEmailTemplatesFromFiles(raw = false) {\n const names = fs.readdirSync('.');\n const jsonFiles = raw\n ? names.filter(\n (name) =>\n name.startsWith(`${EMAIL_TEMPLATE_TYPE}-`) && name.endsWith(`.json`)\n )\n : names.filter((name) =>\n name.toLowerCase().endsWith(`${EMAIL_TEMPLATE_FILE_TYPE}.json`)\n );\n createProgressIndicator(\n 'determinate',\n jsonFiles.length,\n 'Importing email templates...'\n );\n let total = 0;\n let totalErrors = 0;\n for (const file of jsonFiles) {\n const data = fs.readFileSync(file, 'utf8');\n const fileData = JSON.parse(data);\n if (\n (raw && file.startsWith('emailTemplate-')) ||\n validateImport(fileData.meta)\n ) {\n let errors = 0;\n if (raw) {\n total++;\n const templateId = getEmailTemplateIdFromFile(file);\n try {\n const templateData = s2sConvert(fileData);\n await putEmailTemplate(templateId, templateData);\n } catch (putEmailTemplateError) {\n errors += 1;\n printMessage(`\\nError importing ${templateId}`, 'error');\n printMessage(putEmailTemplateError, 'error');\n printMessage(putEmailTemplateError.response?.data, 'error');\n }\n } else {\n total += Object.keys(fileData.emailTemplate).length;\n for (const id in fileData.emailTemplate) {\n if ({}.hasOwnProperty.call(fileData.emailTemplate, id)) {\n const templateId = id.replace(regexEmailTemplateType, '');\n try {\n await putEmailTemplate(\n templateId,\n fileData.emailTemplate[templateId]\n );\n } catch (putEmailTemplateError) {\n errors += 1;\n printMessage(`\\nError importing ${templateId}`, 'error');\n printMessage(putEmailTemplateError.response.data, 'error');\n }\n }\n }\n }\n totalErrors += errors;\n updateProgressIndicator(`Imported ${file}`);\n } else {\n printMessage(`Validation of ${file} failed!`, 'error');\n }\n }\n stopProgressIndicator(\n `Imported ${total - totalErrors} of ${total} email template(s) from ${\n jsonFiles.length\n } file(s).`\n );\n}\n\n/**\n * Import first email template from file\n * @param {String} file optional filename\n */\nexport async function importFirstEmailTemplateFromFile(\n file: string,\n raw = false\n) {\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data);\n if (\n (raw && file.startsWith('emailTemplate-')) ||\n validateImport(fileData.meta)\n ) {\n showSpinner(`Importing first email template`);\n if (raw) {\n const templateId = getEmailTemplateIdFromFile(file);\n try {\n const templateData = s2sConvert(fileData);\n await putEmailTemplate(templateId, templateData);\n succeedSpinner(`Imported ${templateId}`);\n } catch (putEmailTemplateError) {\n failSpinner(`Error importing ${templateId}`);\n printMessage(putEmailTemplateError.response?.data, 'error');\n }\n } else {\n for (const id in fileData.emailTemplate) {\n if ({}.hasOwnProperty.call(fileData.emailTemplate, id)) {\n try {\n await putEmailTemplate(\n id.replace(regexEmailTemplateType, ''),\n fileData.emailTemplate[id]\n );\n succeedSpinner(`Imported ${id}`);\n } catch (putEmailTemplateError) {\n failSpinner(`Error importing ${id}`);\n printMessage(putEmailTemplateError.response?.data, 'error');\n }\n break;\n }\n }\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"EmailTemplateOps.js","names":["frodo","fs","getTypedFilename","saveJsonToFile","createProgressIndicator","updateProgressIndicator","stopProgressIndicator","printMessage","createTable","showSpinner","succeedSpinner","failSpinner","debugMessage","wordwrap","path","cloneDeep","EMAIL_TEMPLATE_TYPE","email","template","EMAIL_TEMPLATE_FILE_TYPE","regexEmailTemplateType","RegExp","getFileDataTemplate","meta","emailTemplate","getOneLineDescription","templateObj","description","_id","split","displayName","defaultLocale","subject","Object","values","getTableHeaderMd","markdown","getTableRowMd","templateId","replace","locales","keys","length","filter","locale","join","row","name","listEmailTemplates","long","emailTemplates","getEmailTemplates","result","error","message","sort","a","b","localeCompare","entries","table","push","enabled","from","toString","exportEmailTemplateToFile","file","fileName","templateData","getEmailTemplate","fileData","err","exportEmailTemplatesToFile","response","templates","resultCount","exportEmailTemplatesToFiles","importEmailTemplateFromFile","raw","replaceAll","readFile","data","JSON","parse","utils","impex","validateImport","emailTemplateData","s2sConvert","putEmailTemplate","putEmailTemplateError","importEmailTemplatesFromFile","id","hasOwnProperty","call","getEmailTemplateIdFromFile","basename","substring","indexOf","html","convertedData","importEmailTemplatesFromFiles","names","readdirSync","jsonFiles","startsWith","endsWith","toLowerCase","total","totalErrors","readFileSync","errors","_putEmailTemplateErro","importFirstEmailTemplateFromFile","_putEmailTemplateErro2","_putEmailTemplateErro3"],"sources":["ops/EmailTemplateOps.ts"],"sourcesContent":["import { frodo } from '@rockcarver/frodo-lib';\nimport fs from 'fs';\nimport type { EmailTemplateSkeleton } from '@rockcarver/frodo-lib/types/api/ApiTypes';\nimport { getTypedFilename, saveJsonToFile } from '../utils/ExportImportUtils';\nimport {\n createProgressIndicator,\n updateProgressIndicator,\n stopProgressIndicator,\n printMessage,\n createTable,\n showSpinner,\n succeedSpinner,\n failSpinner,\n debugMessage,\n} from '../utils/Console';\nimport wordwrap from './utils/Wordwrap';\nimport path from 'path';\nimport { cloneDeep } from './utils/OpsUtils';\n\nconst EMAIL_TEMPLATE_TYPE = frodo.email.template.EMAIL_TEMPLATE_TYPE;\nconst EMAIL_TEMPLATE_FILE_TYPE = 'template.email';\n\nconst regexEmailTemplateType = new RegExp(`${EMAIL_TEMPLATE_TYPE}/`, 'g');\n\n// use a function vs a template variable to avoid problems in loops\nfunction getFileDataTemplate() {\n return {\n meta: {},\n emailTemplate: {},\n };\n}\n\n/**\n * Get a one-line description of the email template\n * @param {EmailTemplateSkeleton} templateObj email template object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescription(\n templateObj: EmailTemplateSkeleton\n): string {\n const description = `[${templateObj._id.split('/')[1]['brightCyan']}] ${\n templateObj.displayName ? templateObj.displayName : ''\n } - ${\n templateObj.defaultLocale\n ? templateObj.subject[templateObj.defaultLocale]\n : Object.values(templateObj.subject)[0]\n }`;\n return description;\n}\n\n/**\n * Get markdown table header\n * @returns {string} markdown table header\n */\nexport function getTableHeaderMd(): string {\n let markdown = '';\n markdown += '| Display Name | Locale(s) | Subject | Id |\\n';\n markdown += '| ------------ | --------- | ------- | ---|';\n return markdown;\n}\n\n/**\n * Get a table-row of the email template in markdown\n * @param {EmailTemplateSkeleton} templateObj email template object to describe\n * @returns {string} a table-row of the email template in markdown\n */\nexport function getTableRowMd(templateObj: EmailTemplateSkeleton): string {\n const templateId = templateObj._id.replace(`${EMAIL_TEMPLATE_TYPE}/`, '');\n const locales = `${templateObj.defaultLocale}${\n Object.keys(templateObj.subject).length > 1\n ? ` (${Object.keys(templateObj.subject)\n .filter((locale) => locale !== templateObj.defaultLocale)\n .join(',')})`\n : ''\n }`;\n const row = `| ${\n templateObj.name ? templateObj.name : templateId\n } | ${locales} | ${\n templateObj.subject[templateObj.defaultLocale]\n } | \\`${templateId}\\` |`;\n return row;\n}\n\n/**\n * List email templates\n * @param {boolean} long Long list format with details\n * @return {Promise<unknown[]>} a promise that resolves to an array of email template objects\n */\nexport async function listEmailTemplates(long = false): Promise<unknown[]> {\n let emailTemplates = [];\n try {\n emailTemplates = (await frodo.email.template.getEmailTemplates()).result;\n } catch (error) {\n printMessage(`Error retrieving email templates: ${error.message}`, 'error');\n }\n emailTemplates.sort((a, b) => a._id.localeCompare(b._id));\n if (!long) {\n for (const [, emailTemplate] of emailTemplates.entries()) {\n printMessage(\n `${emailTemplate._id.replace(`${EMAIL_TEMPLATE_TYPE}/`, '')}`,\n 'data'\n );\n }\n } else {\n const table = createTable([\n 'Id'['brightCyan'],\n 'Name'['brightCyan'],\n 'Status'['brightCyan'],\n 'Locale(s)'['brightCyan'],\n 'From'['brightCyan'],\n 'Subject'['brightCyan'],\n ]);\n for (const emailTemplate of emailTemplates) {\n table.push([\n // Id\n `${emailTemplate._id.replace(`${EMAIL_TEMPLATE_TYPE}/`, '')}`,\n // Name\n `${emailTemplate.displayName ? emailTemplate.displayName : ''}`,\n // Status\n emailTemplate.enabled === false\n ? 'disabled'['brightRed']\n : 'enabled'['brightGreen'],\n // Locale(s)\n `${emailTemplate.defaultLocale}${\n Object.keys(emailTemplate.subject).length > 1\n ? ` (${Object.keys(emailTemplate.subject)\n .filter((locale) => locale !== emailTemplate.defaultLocale)\n .join(',')})`\n : ''\n }`,\n // From\n `${emailTemplate.from ? emailTemplate.from : ''}`,\n // Subject\n wordwrap(emailTemplate.subject[emailTemplate.defaultLocale], 40),\n ]);\n }\n printMessage(table.toString(), 'data');\n }\n return emailTemplates;\n}\n\n/**\n * Export single email template to a file\n * @param {string} templateId email template id to export\n * @param {string} file filename where to export the template data\n */\nexport async function exportEmailTemplateToFile(\n templateId: string,\n file: string\n) {\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(templateId, EMAIL_TEMPLATE_FILE_TYPE);\n }\n createProgressIndicator('determinate', 1, `Exporting ${templateId}`);\n try {\n const templateData = await frodo.email.template.getEmailTemplate(\n templateId\n );\n updateProgressIndicator(`Writing file ${fileName}`);\n const fileData = getFileDataTemplate();\n fileData.emailTemplate[templateId] = templateData;\n saveJsonToFile(fileData, fileName);\n stopProgressIndicator(\n `Exported ${templateId['brightCyan']} to ${fileName['brightCyan']}.`\n );\n } catch (err) {\n stopProgressIndicator(`${err}`);\n printMessage(err, 'error');\n }\n}\n\n/**\n * Export all email templates to file\n * @param {String} file optional filename\n */\nexport async function exportEmailTemplatesToFile(file) {\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(`allEmailTemplates`, EMAIL_TEMPLATE_FILE_TYPE);\n }\n try {\n const fileData = getFileDataTemplate();\n const response = await frodo.email.template.getEmailTemplates();\n const templates = response.result;\n createProgressIndicator(\n 'determinate',\n response.resultCount,\n 'Exporting email templates'\n );\n for (const template of templates) {\n const templateId = template._id.replace(`${EMAIL_TEMPLATE_TYPE}/`, '');\n updateProgressIndicator(`Exporting ${templateId}`);\n fileData.emailTemplate[templateId] = template;\n }\n saveJsonToFile(fileData, fileName);\n stopProgressIndicator(\n `${response.resultCount} templates exported to ${fileName}.`\n );\n } catch (err) {\n stopProgressIndicator(`${err}`);\n printMessage(err, 'error');\n }\n}\n\n/**\n * Export all email templates to separate files\n */\nexport async function exportEmailTemplatesToFiles() {\n try {\n const response = await frodo.email.template.getEmailTemplates();\n const templates = response.result;\n createProgressIndicator(\n 'determinate',\n response.resultCount,\n 'Exporting email templates'\n );\n for (const template of templates) {\n const templateId = template._id.replace(`${EMAIL_TEMPLATE_TYPE}/`, '');\n const fileName = getTypedFilename(templateId, EMAIL_TEMPLATE_FILE_TYPE);\n const fileData = getFileDataTemplate();\n updateProgressIndicator(`Exporting ${templateId}`);\n fileData.emailTemplate[templateId] = template;\n saveJsonToFile(fileData, fileName);\n }\n stopProgressIndicator(`${response.resultCount} templates exported.`);\n } catch (err) {\n stopProgressIndicator(`${err}`);\n printMessage(err, 'error');\n }\n}\n\n/**\n * Import email template by id from file\n * @param {string} templateId email template id\n * @param {string} file optional filename\n * @param {boolean} raw import raw data file lacking frodo export envelop\n */\nexport async function importEmailTemplateFromFile(\n templateId: string,\n file: string,\n raw = false\n) {\n // eslint-disable-next-line no-param-reassign\n templateId = templateId.replaceAll(`${EMAIL_TEMPLATE_TYPE}/`, '');\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data);\n if (raw || frodo.utils.impex.validateImport(fileData.meta)) {\n createProgressIndicator('determinate', 1, `Importing ${templateId}`);\n if (\n fileData.emailTemplate[templateId] ||\n (raw && fileData._id === templateId)\n ) {\n try {\n const emailTemplateData = raw\n ? s2sConvert(fileData)\n : fileData.emailTemplate[templateId];\n await frodo.email.template.putEmailTemplate(\n templateId,\n emailTemplateData\n );\n updateProgressIndicator(`Importing ${templateId}`);\n stopProgressIndicator(`Imported ${templateId}`);\n } catch (putEmailTemplateError) {\n stopProgressIndicator(`${putEmailTemplateError}`);\n printMessage(putEmailTemplateError, 'error');\n }\n } else {\n stopProgressIndicator(\n `Email template ${templateId} not found in ${file}!`\n );\n printMessage(\n `Email template ${templateId} not found in ${file}!`,\n 'error'\n );\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Import all email templates from file\n * @param {string} file optional filename\n */\nexport async function importEmailTemplatesFromFile(file: string) {\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data);\n if (frodo.utils.impex.validateImport(fileData.meta)) {\n createProgressIndicator(\n 'determinate',\n Object.keys(fileData.emailTemplate).length,\n `Importing email templates`\n );\n for (const id in fileData.emailTemplate) {\n if ({}.hasOwnProperty.call(fileData.emailTemplate, id)) {\n const templateId = id.replace(regexEmailTemplateType, '');\n try {\n await frodo.email.template.putEmailTemplate(\n templateId,\n fileData.emailTemplate[templateId]\n );\n updateProgressIndicator(`Imported ${templateId}`);\n } catch (putEmailTemplateError) {\n printMessage(`\\nError importing ${templateId}`, 'error');\n printMessage(putEmailTemplateError.response.data, 'error');\n }\n }\n }\n stopProgressIndicator(`Done.`);\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Helper function to get email template id from file name\n * @param {string} file file name\n * @returns {string} email template id/name\n */\nfunction getEmailTemplateIdFromFile(file: string) {\n debugMessage(`cli.EmailTemplateOps.getEmailTemplateIdFromFile: file=${file}`);\n const fileName = path.basename(file);\n const templateId = fileName.substring(14, fileName.indexOf('.'));\n debugMessage(\n `cli.EmailTemplateOps.getEmailTemplateIdFromFile: templateId=${templateId}`\n );\n return templateId;\n}\n\n/**\n * Convert template for s2s purposes (software-to-saas migration)\n * @param {EmailTemplateSkeleton} templateData template object\n * @returns {EmailTemplateSkeleton} converted template object\n */\nfunction s2sConvert(\n templateData: EmailTemplateSkeleton\n): EmailTemplateSkeleton {\n if (templateData.message && !templateData.html) {\n const convertedData = cloneDeep(templateData);\n convertedData.html = cloneDeep(templateData.message);\n debugMessage(`cli.EmailTemplateOps.s2sConvert: templateData:`);\n debugMessage(templateData);\n debugMessage(`cli.EmailTemplateOps.s2sConvert: convertedData:`);\n debugMessage(convertedData);\n return convertedData;\n }\n return templateData;\n}\n\n/**\n * Import all email templates from separate files\n * @param {boolean} raw import raw data file lacking frodo export envelop\n */\nexport async function importEmailTemplatesFromFiles(raw = false) {\n const names = fs.readdirSync('.');\n const jsonFiles = raw\n ? names.filter(\n (name) =>\n name.startsWith(`${EMAIL_TEMPLATE_TYPE}-`) && name.endsWith(`.json`)\n )\n : names.filter((name) =>\n name.toLowerCase().endsWith(`${EMAIL_TEMPLATE_FILE_TYPE}.json`)\n );\n createProgressIndicator(\n 'determinate',\n jsonFiles.length,\n 'Importing email templates...'\n );\n let total = 0;\n let totalErrors = 0;\n for (const file of jsonFiles) {\n const data = fs.readFileSync(file, 'utf8');\n const fileData = JSON.parse(data);\n if (\n (raw && file.startsWith('emailTemplate-')) ||\n frodo.utils.impex.validateImport(fileData.meta)\n ) {\n let errors = 0;\n if (raw) {\n total++;\n const templateId = getEmailTemplateIdFromFile(file);\n try {\n const templateData = s2sConvert(fileData);\n await frodo.email.template.putEmailTemplate(templateId, templateData);\n } catch (putEmailTemplateError) {\n errors += 1;\n printMessage(`\\nError importing ${templateId}`, 'error');\n printMessage(putEmailTemplateError, 'error');\n printMessage(putEmailTemplateError.response?.data, 'error');\n }\n } else {\n total += Object.keys(fileData.emailTemplate).length;\n for (const id in fileData.emailTemplate) {\n if ({}.hasOwnProperty.call(fileData.emailTemplate, id)) {\n const templateId = id.replace(regexEmailTemplateType, '');\n try {\n await frodo.email.template.putEmailTemplate(\n templateId,\n fileData.emailTemplate[templateId]\n );\n } catch (putEmailTemplateError) {\n errors += 1;\n printMessage(`\\nError importing ${templateId}`, 'error');\n printMessage(putEmailTemplateError.response.data, 'error');\n }\n }\n }\n }\n totalErrors += errors;\n updateProgressIndicator(`Imported ${file}`);\n } else {\n printMessage(`Validation of ${file} failed!`, 'error');\n }\n }\n stopProgressIndicator(\n `Imported ${total - totalErrors} of ${total} email template(s) from ${\n jsonFiles.length\n } file(s).`\n );\n}\n\n/**\n * Import first email template from file\n * @param {String} file optional filename\n */\nexport async function importFirstEmailTemplateFromFile(\n file: string,\n raw = false\n) {\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data);\n if (\n (raw && file.startsWith('emailTemplate-')) ||\n frodo.utils.impex.validateImport(fileData.meta)\n ) {\n showSpinner(`Importing first email template`);\n if (raw) {\n const templateId = getEmailTemplateIdFromFile(file);\n try {\n const templateData = s2sConvert(fileData);\n await frodo.email.template.putEmailTemplate(templateId, templateData);\n succeedSpinner(`Imported ${templateId}`);\n } catch (putEmailTemplateError) {\n failSpinner(`Error importing ${templateId}`);\n printMessage(putEmailTemplateError.response?.data, 'error');\n }\n } else {\n for (const id in fileData.emailTemplate) {\n if ({}.hasOwnProperty.call(fileData.emailTemplate, id)) {\n try {\n await frodo.email.template.putEmailTemplate(\n id.replace(regexEmailTemplateType, ''),\n fileData.emailTemplate[id]\n );\n succeedSpinner(`Imported ${id}`);\n } catch (putEmailTemplateError) {\n failSpinner(`Error importing ${id}`);\n printMessage(putEmailTemplateError.response?.data, 'error');\n }\n break;\n }\n }\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n"],"mappings":"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"}
|
package/esm/ops/IdmOps.js
CHANGED
|
@@ -4,30 +4,16 @@ import fse from 'fs-extra';
|
|
|
4
4
|
import path from 'path';
|
|
5
5
|
import propertiesReader from 'properties-reader';
|
|
6
6
|
import replaceall from 'replaceall';
|
|
7
|
-
import {
|
|
7
|
+
import { frodo } from '@rockcarver/frodo-lib';
|
|
8
8
|
import { createProgressIndicator, printMessage, stopProgressIndicator } from '../utils/Console';
|
|
9
9
|
import { getTypedFilename } from '../utils/ExportImportUtils';
|
|
10
|
-
const {
|
|
11
|
-
readFiles,
|
|
12
|
-
unSubstituteEnvParams
|
|
13
|
-
} = Utils;
|
|
14
|
-
const {
|
|
15
|
-
validateScriptHooks
|
|
16
|
-
} = ValidationUtils;
|
|
17
|
-
const {
|
|
18
|
-
getAllConfigEntities,
|
|
19
|
-
getConfigEntity,
|
|
20
|
-
putConfigEntity,
|
|
21
|
-
queryAllManagedObjectsByType,
|
|
22
|
-
testConnectorServers
|
|
23
|
-
} = Idm;
|
|
24
10
|
|
|
25
11
|
/**
|
|
26
12
|
* Warn about and list offline remote connector servers
|
|
27
13
|
*/
|
|
28
14
|
export async function warnAboutOfflineConnectorServers() {
|
|
29
15
|
try {
|
|
30
|
-
const all = await testConnectorServers();
|
|
16
|
+
const all = await frodo.idm.config.testConnectorServers();
|
|
31
17
|
const offline = all.filter(status => !status.ok).map(status => status.name);
|
|
32
18
|
if (offline.length) {
|
|
33
19
|
printMessage(`\nThe following connector server(s) are offline and their connectors and configuration unavailable:\n${offline.join('\n')}`, 'warn');
|
|
@@ -45,7 +31,7 @@ export async function listAllConfigEntities() {
|
|
|
45
31
|
try {
|
|
46
32
|
const {
|
|
47
33
|
configurations
|
|
48
|
-
} = await getAllConfigEntities();
|
|
34
|
+
} = await frodo.idm.config.getAllConfigEntities();
|
|
49
35
|
for (const configEntity of configurations) {
|
|
50
36
|
printMessage(`${configEntity._id}`, 'data');
|
|
51
37
|
}
|
|
@@ -65,7 +51,7 @@ export async function exportConfigEntity(id, file) {
|
|
|
65
51
|
if (!fileName) {
|
|
66
52
|
fileName = getTypedFilename(`${id}`, 'idm');
|
|
67
53
|
}
|
|
68
|
-
const configEntity = await getConfigEntity(id);
|
|
54
|
+
const configEntity = await frodo.idm.config.getConfigEntity(id);
|
|
69
55
|
fs.writeFile(fileName, JSON.stringify(configEntity, null, 2), err => {
|
|
70
56
|
if (err) {
|
|
71
57
|
return printMessage(`ERROR - can't save ${id} export to file`, 'error');
|
|
@@ -82,14 +68,14 @@ export async function exportAllRawConfigEntities(directory) {
|
|
|
82
68
|
try {
|
|
83
69
|
const {
|
|
84
70
|
configurations
|
|
85
|
-
} = await getAllConfigEntities();
|
|
71
|
+
} = await frodo.idm.config.getAllConfigEntities();
|
|
86
72
|
if (!fs.existsSync(directory)) {
|
|
87
73
|
fs.mkdirSync(directory);
|
|
88
74
|
}
|
|
89
75
|
createProgressIndicator('indeterminate', undefined, 'Exporting config objects...');
|
|
90
76
|
const entityPromises = [];
|
|
91
77
|
for (const configEntity of configurations) {
|
|
92
|
-
entityPromises.push(getConfigEntity(configEntity._id).catch(getConfigEntityError => {
|
|
78
|
+
entityPromises.push(frodo.idm.config.getConfigEntity(configEntity._id).catch(getConfigEntityError => {
|
|
93
79
|
var _getConfigEntityError, _getConfigEntityError2, _getConfigEntityError3, _getConfigEntityError4, _getConfigEntityError5, _getConfigEntityError6, _getConfigEntityError7, _getConfigEntityError8, _getConfigEntityError9;
|
|
94
80
|
if (!(((_getConfigEntityError = getConfigEntityError.response) === null || _getConfigEntityError === void 0 ? void 0 : _getConfigEntityError.status) === 403 && ((_getConfigEntityError2 = getConfigEntityError.response) === null || _getConfigEntityError2 === void 0 ? void 0 : (_getConfigEntityError3 = _getConfigEntityError2.data) === null || _getConfigEntityError3 === void 0 ? void 0 : _getConfigEntityError3.message) === 'This operation is not available in ForgeRock Identity Cloud.') && !(
|
|
95
81
|
// list of config entities, which do not exist by default or ever.
|
|
@@ -140,7 +126,7 @@ export async function exportAllConfigEntities(directory, entitiesFile, envFile)
|
|
|
140
126
|
try {
|
|
141
127
|
const {
|
|
142
128
|
configurations
|
|
143
|
-
} = await getAllConfigEntities();
|
|
129
|
+
} = await frodo.idm.config.getAllConfigEntities();
|
|
144
130
|
// create export directory if not exist
|
|
145
131
|
if (!fs.existsSync(directory)) {
|
|
146
132
|
fs.mkdirSync(directory);
|
|
@@ -149,7 +135,7 @@ export async function exportAllConfigEntities(directory, entitiesFile, envFile)
|
|
|
149
135
|
const entityPromises = [];
|
|
150
136
|
for (const configEntity of configurations) {
|
|
151
137
|
if (entriesToExport.includes(configEntity._id)) {
|
|
152
|
-
entityPromises.push(getConfigEntity(configEntity._id));
|
|
138
|
+
entityPromises.push(frodo.idm.config.getConfigEntity(configEntity._id));
|
|
153
139
|
}
|
|
154
140
|
}
|
|
155
141
|
const results = await Promise.all(entityPromises);
|
|
@@ -184,15 +170,15 @@ export async function importConfigEntityByIdFromFile(entityId, file, validate) {
|
|
|
184
170
|
if (!file) {
|
|
185
171
|
file = getTypedFilename(entityId, 'idm');
|
|
186
172
|
}
|
|
187
|
-
const
|
|
188
|
-
const
|
|
189
|
-
const isValid = validateScriptHooks(
|
|
173
|
+
const fileData = fs.readFileSync(path.resolve(process.cwd(), file), 'utf8');
|
|
174
|
+
const entityData = JSON.parse(fileData);
|
|
175
|
+
const isValid = frodo.helper.script.validateScriptHooks(entityData);
|
|
190
176
|
if (validate && !isValid) {
|
|
191
177
|
printMessage('Invalid IDM configuration object', 'error');
|
|
192
178
|
return;
|
|
193
179
|
}
|
|
194
180
|
try {
|
|
195
|
-
await putConfigEntity(entityId, entityData);
|
|
181
|
+
await frodo.idm.config.putConfigEntity(entityId, entityData);
|
|
196
182
|
} catch (putConfigEntityError) {
|
|
197
183
|
printMessage(putConfigEntityError, 'error');
|
|
198
184
|
printMessage(`Error: ${putConfigEntityError}`, 'error');
|
|
@@ -205,16 +191,16 @@ export async function importConfigEntityByIdFromFile(entityId, file, validate) {
|
|
|
205
191
|
* @param validate validate script hooks
|
|
206
192
|
*/
|
|
207
193
|
export async function importConfigEntityFromFile(file, validate) {
|
|
208
|
-
const
|
|
209
|
-
const
|
|
210
|
-
const entityId =
|
|
211
|
-
const isValid = validateScriptHooks(
|
|
194
|
+
const fileData = fs.readFileSync(path.resolve(process.cwd(), file), 'utf8');
|
|
195
|
+
const entityData = JSON.parse(fileData);
|
|
196
|
+
const entityId = entityData._id;
|
|
197
|
+
const isValid = frodo.helper.script.validateScriptHooks(entityData);
|
|
212
198
|
if (validate && !isValid) {
|
|
213
199
|
printMessage('Invalid IDM configuration object', 'error');
|
|
214
200
|
return;
|
|
215
201
|
}
|
|
216
202
|
try {
|
|
217
|
-
await putConfigEntity(entityId,
|
|
203
|
+
await frodo.idm.config.putConfigEntity(entityId, entityData);
|
|
218
204
|
} catch (putConfigEntityError) {
|
|
219
205
|
printMessage(putConfigEntityError, 'error');
|
|
220
206
|
printMessage(`Error: ${putConfigEntityError}`, 'error');
|
|
@@ -230,7 +216,7 @@ export async function importAllRawConfigEntities(baseDirectory, validate) {
|
|
|
230
216
|
if (!fs.existsSync(baseDirectory)) {
|
|
231
217
|
return;
|
|
232
218
|
}
|
|
233
|
-
const files = await readFiles(baseDirectory);
|
|
219
|
+
const files = await frodo.helper.utils.readFiles(baseDirectory);
|
|
234
220
|
const jsonFiles = files.filter(({
|
|
235
221
|
path
|
|
236
222
|
}) => path.toLowerCase().endsWith('.json')).map(({
|
|
@@ -245,7 +231,7 @@ export async function importAllRawConfigEntities(baseDirectory, validate) {
|
|
|
245
231
|
let everyScriptValid = true;
|
|
246
232
|
for (const file of jsonFiles) {
|
|
247
233
|
const jsObject = JSON.parse(file.content);
|
|
248
|
-
const isScriptValid = validateScriptHooks(jsObject);
|
|
234
|
+
const isScriptValid = frodo.helper.script.validateScriptHooks(jsObject);
|
|
249
235
|
if (!isScriptValid) {
|
|
250
236
|
printMessage(`Invalid script hook in ${file.path}`, 'error');
|
|
251
237
|
everyScriptValid = false;
|
|
@@ -256,7 +242,7 @@ export async function importAllRawConfigEntities(baseDirectory, validate) {
|
|
|
256
242
|
}
|
|
257
243
|
createProgressIndicator('indeterminate', undefined, 'Importing config objects...');
|
|
258
244
|
const entityPromises = jsonFiles.map(file => {
|
|
259
|
-
return putConfigEntity(file.entityId, file.content);
|
|
245
|
+
return frodo.idm.config.putConfigEntity(file.entityId, file.content);
|
|
260
246
|
});
|
|
261
247
|
const results = await Promise.allSettled(entityPromises);
|
|
262
248
|
const errors = results.filter(result => result.status === 'rejected');
|
|
@@ -284,7 +270,7 @@ export async function importAllConfigEntities(baseDirectory, entitiesFile, envFi
|
|
|
284
270
|
}
|
|
285
271
|
const entriesToImport = JSON.parse(fs.readFileSync(entitiesFile, 'utf8')).idm;
|
|
286
272
|
const envReader = propertiesReader(envFile);
|
|
287
|
-
const files = await readFiles(baseDirectory);
|
|
273
|
+
const files = await frodo.helper.utils.readFiles(baseDirectory);
|
|
288
274
|
const jsonFiles = files.filter(({
|
|
289
275
|
path
|
|
290
276
|
}) => path.toLowerCase().endsWith('.json')).map(({
|
|
@@ -299,7 +285,7 @@ export async function importAllConfigEntities(baseDirectory, entitiesFile, envFi
|
|
|
299
285
|
let everyScriptValid = true;
|
|
300
286
|
for (const file of jsonFiles) {
|
|
301
287
|
const jsObject = JSON.parse(file.content);
|
|
302
|
-
const isScriptValid = validateScriptHooks(jsObject);
|
|
288
|
+
const isScriptValid = frodo.helper.script.validateScriptHooks(jsObject);
|
|
303
289
|
if (!isScriptValid) {
|
|
304
290
|
printMessage(`Invalid script hook in ${file.path}`, 'error');
|
|
305
291
|
everyScriptValid = false;
|
|
@@ -317,8 +303,8 @@ export async function importAllConfigEntities(baseDirectory, entitiesFile, envFi
|
|
|
317
303
|
entityId,
|
|
318
304
|
content
|
|
319
305
|
}) => {
|
|
320
|
-
const unsubstituted = unSubstituteEnvParams(content, envReader);
|
|
321
|
-
return putConfigEntity(entityId, unsubstituted);
|
|
306
|
+
const unsubstituted = frodo.helper.utils.unSubstituteEnvParams(content, envReader);
|
|
307
|
+
return frodo.idm.config.putConfigEntity(entityId, unsubstituted);
|
|
322
308
|
});
|
|
323
309
|
const results = await Promise.allSettled(entityPromises);
|
|
324
310
|
const errors = results.filter(result => result.status === 'rejected');
|
|
@@ -349,7 +335,7 @@ export async function countManagedObjects(type) {
|
|
|
349
335
|
};
|
|
350
336
|
try {
|
|
351
337
|
do {
|
|
352
|
-
result = await queryAllManagedObjectsByType(type, [], result.pagedResultsCookie);
|
|
338
|
+
result = await frodo.idm.config.queryAllManagedObjectsByType(type, [], result.pagedResultsCookie);
|
|
353
339
|
count += result.resultCount;
|
|
354
340
|
} while (result.pagedResultsCookie);
|
|
355
341
|
printMessage(`${type}: ${count}`);
|
package/esm/ops/IdmOps.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IdmOps.js","names":["fs","fse","path","propertiesReader","replaceall","Idm","Utils","ValidationUtils","createProgressIndicator","printMessage","stopProgressIndicator","getTypedFilename","readFiles","unSubstituteEnvParams","validateScriptHooks","getAllConfigEntities","getConfigEntity","putConfigEntity","queryAllManagedObjectsByType","testConnectorServers","warnAboutOfflineConnectorServers","all","offline","filter","status","ok","map","name","length","join","error","message","listAllConfigEntities","configurations","configEntity","_id","getAllConfigEntitiesError","exportConfigEntity","id","file","fileName","writeFile","JSON","stringify","err","exportAllRawConfigEntities","directory","existsSync","mkdirSync","undefined","entityPromises","push","catch","getConfigEntityError","_getConfigEntityError","_getConfigEntityError2","_getConfigEntityError3","_getConfigEntityError4","_getConfigEntityError5","_getConfigEntityError6","_getConfigEntityError7","_getConfigEntityError8","_getConfigEntityError9","response","data","includes","reason","_getConfigEntityError10","results","Promise","item","outputFile","exportAllConfigEntities","entitiesFile","envFile","entriesToExport","readFile","entriesData","parse","idm","envParams","configEntityString","each","key","value","importConfigEntityByIdFromFile","entityId","validate","entityData","readFileSync","resolve","process","cwd","jsObject","isValid","putConfigEntityError","importConfigEntityFromFile","importData","importAllRawConfigEntities","baseDirectory","files","jsonFiles","toLowerCase","endsWith","content","substring","everyScriptValid","isScriptValid","allSettled","errors","result","importAllConfigEntities","entriesToImport","envReader","unsubstituted","countManagedObjects","type","count","resultCount","pagedResultsCookie","totalPagedResultsPolicy","totalPagedResults","remainingPagedResults"],"sources":["ops/IdmOps.ts"],"sourcesContent":["/* eslint-disable no-await-in-loop */\nimport fs from 'fs';\nimport fse from 'fs-extra';\nimport path from 'path';\nimport propertiesReader from 'properties-reader';\nimport replaceall from 'replaceall';\n\nimport { Idm, Utils, ValidationUtils } from '@rockcarver/frodo-lib';\nimport {\n createProgressIndicator,\n printMessage,\n stopProgressIndicator,\n} from '../utils/Console';\nimport { getTypedFilename } from '../utils/ExportImportUtils';\n\nconst { readFiles, unSubstituteEnvParams } = Utils;\nconst { validateScriptHooks } = ValidationUtils;\nconst {\n getAllConfigEntities,\n getConfigEntity,\n putConfigEntity,\n queryAllManagedObjectsByType,\n testConnectorServers,\n} = Idm;\n\n/**\n * Warn about and list offline remote connector servers\n */\nexport async function warnAboutOfflineConnectorServers() {\n try {\n const all = await testConnectorServers();\n const offline = all\n .filter((status) => !status.ok)\n .map((status) => status.name);\n if (offline.length) {\n printMessage(\n `\\nThe following connector server(s) are offline and their connectors and configuration unavailable:\\n${offline.join(\n '\\n'\n )}`,\n 'warn'\n );\n }\n } catch (error) {\n printMessage(error, 'error');\n printMessage(\n `Error getting offline connector servers: ${error.message}`,\n 'error'\n );\n }\n}\n\n/**\n * List all IDM configuration objects\n */\nexport async function listAllConfigEntities() {\n try {\n const { configurations } = await getAllConfigEntities();\n for (const configEntity of configurations) {\n printMessage(`${configEntity._id}`, 'data');\n }\n } catch (getAllConfigEntitiesError) {\n printMessage(getAllConfigEntitiesError, 'error');\n printMessage(\n `Error getting config entities: ${getAllConfigEntitiesError}`,\n 'error'\n );\n }\n}\n\n/**\n * Export an IDM configuration object.\n * @param {String} id the desired configuration object\n * @param {String} file optional export file\n */\nexport async function exportConfigEntity(id, file) {\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(`${id}`, 'idm');\n }\n const configEntity = await getConfigEntity(id);\n fs.writeFile(fileName, JSON.stringify(configEntity, null, 2), (err) => {\n if (err) {\n return printMessage(`ERROR - can't save ${id} export to file`, 'error');\n }\n return '';\n });\n}\n\n/**\n * Export all IDM configuration objects into separate JSON files in a directory specified by <directory>\n * @param {String} directory export directory\n */\nexport async function exportAllRawConfigEntities(directory) {\n try {\n const { configurations } = await getAllConfigEntities();\n if (!fs.existsSync(directory)) {\n fs.mkdirSync(directory);\n }\n createProgressIndicator(\n 'indeterminate',\n undefined,\n 'Exporting config objects...'\n );\n const entityPromises = [];\n for (const configEntity of configurations) {\n entityPromises.push(\n getConfigEntity(configEntity._id).catch((getConfigEntityError) => {\n if (\n !(\n getConfigEntityError.response?.status === 403 &&\n getConfigEntityError.response?.data?.message ===\n 'This operation is not available in ForgeRock Identity Cloud.'\n ) &&\n !(\n // list of config entities, which do not exist by default or ever.\n (\n [\n 'script',\n 'notificationFactory',\n 'apiVersion',\n 'metrics',\n 'repo.init',\n 'endpoint/validateQueryFilter',\n 'endpoint/oauthproxy',\n 'external.rest',\n 'scheduler',\n 'org.apache.felix.fileinstall/openidm',\n 'cluster',\n 'endpoint/mappingDetails',\n 'fieldPolicy/teammember',\n ].includes(configEntity._id) &&\n getConfigEntityError.response?.status === 404 &&\n getConfigEntityError.response?.data?.reason === 'Not Found'\n )\n ) &&\n // https://bugster.forgerock.org/jira/browse/OPENIDM-18270\n !(\n getConfigEntityError.response?.status === 404 &&\n getConfigEntityError.response?.data?.message ===\n 'No configuration exists for id org.apache.felix.fileinstall/openidm'\n )\n ) {\n printMessage(getConfigEntityError.response?.data, 'error');\n printMessage(\n `Error getting config entity ${configEntity._id}: ${getConfigEntityError}`,\n 'error'\n );\n }\n })\n );\n }\n const results = await Promise.all(entityPromises);\n for (const item of results) {\n if (item != null) {\n fse.outputFile(\n `${directory}/${item._id}.json`,\n JSON.stringify(item, null, 2),\n (err) => {\n if (err) {\n return printMessage(\n `ERROR - can't save config ${item._id} to file - ${err}`,\n 'error'\n );\n }\n }\n );\n }\n }\n stopProgressIndicator('Exported config objects.', 'success');\n } catch (getAllConfigEntitiesError) {\n printMessage(getAllConfigEntitiesError, 'error');\n printMessage(\n `Error getting config entities: ${getAllConfigEntitiesError}`,\n 'error'\n );\n }\n}\n\n/**\n * Export all IDM configuration objects\n * @param {String} directory export directory\n * @param {String} entitiesFile JSON file that specifies the config entities to export/import\n * @param {String} envFile File that defines environment specific variables for replacement during configuration export/import\n */\nexport async function exportAllConfigEntities(\n directory,\n entitiesFile,\n envFile\n) {\n let entriesToExport = [];\n // read list of entities to export\n fs.readFile(entitiesFile, 'utf8', async (err, data) => {\n if (err) throw err;\n const entriesData = JSON.parse(data);\n entriesToExport = entriesData.idm;\n // console.log(`entriesToExport ${entriesToExport}`);\n\n // read list of configs to parameterize for environment specific values\n const envParams = propertiesReader(envFile);\n\n try {\n const { configurations } = await getAllConfigEntities();\n // create export directory if not exist\n if (!fs.existsSync(directory)) {\n fs.mkdirSync(directory);\n }\n createProgressIndicator(\n 'indeterminate',\n undefined,\n 'Exporting config objects...'\n );\n const entityPromises = [];\n for (const configEntity of configurations) {\n if (entriesToExport.includes(configEntity._id)) {\n entityPromises.push(getConfigEntity(configEntity._id));\n }\n }\n const results = await Promise.all(entityPromises);\n for (const item of results) {\n if (item != null) {\n let configEntityString = JSON.stringify(item, null, 2);\n envParams.each((key, value) => {\n configEntityString = replaceall(\n value,\n `\\${${key}}`,\n configEntityString\n );\n });\n fse.outputFile(\n `${directory}/${item._id}.json`,\n configEntityString,\n (error) => {\n if (err) {\n return printMessage(\n `ERROR - can't save config ${item._id} to file - ${error}`,\n 'error'\n );\n }\n }\n );\n }\n }\n stopProgressIndicator(null, 'success');\n } catch (getAllConfigEntitiesError) {\n printMessage(getAllConfigEntitiesError, 'error');\n printMessage(\n `Error getting config entities: ${getAllConfigEntitiesError}`,\n 'error'\n );\n }\n });\n}\n\n/**\n * Import an IDM configuration object by id from file.\n * @param entityId the configuration object to import\n * @param file optional file to import\n * @param validate validate script hooks\n */\nexport async function importConfigEntityByIdFromFile(\n entityId: string,\n file?: string,\n validate?: boolean\n) {\n if (!file) {\n file = getTypedFilename(entityId, 'idm');\n }\n\n const entityData = fs.readFileSync(path.resolve(process.cwd(), file), 'utf8');\n\n const jsObject = JSON.parse(entityData);\n const isValid = validateScriptHooks(jsObject);\n if (validate && !isValid) {\n printMessage('Invalid IDM configuration object', 'error');\n return;\n }\n\n try {\n await putConfigEntity(entityId, entityData);\n } catch (putConfigEntityError) {\n printMessage(putConfigEntityError, 'error');\n printMessage(`Error: ${putConfigEntityError}`, 'error');\n }\n}\n\n/**\n * Import IDM configuration object from file.\n * @param file optional file to import\n * @param validate validate script hooks\n */\nexport async function importConfigEntityFromFile(\n file: string,\n validate?: boolean\n) {\n const importData = fs.readFileSync(path.resolve(process.cwd(), file), 'utf8');\n const jsObject = JSON.parse(importData);\n const entityId = jsObject._id;\n const isValid = validateScriptHooks(jsObject);\n if (validate && !isValid) {\n printMessage('Invalid IDM configuration object', 'error');\n return;\n }\n\n try {\n await putConfigEntity(entityId, importData);\n } catch (putConfigEntityError) {\n printMessage(putConfigEntityError, 'error');\n printMessage(`Error: ${putConfigEntityError}`, 'error');\n }\n}\n\n/**\n * Import all IDM configuration objects from separate JSON files in a directory specified by <directory>\n * @param baseDirectory export directory\n * @param validate validate script hooks\n */\nexport async function importAllRawConfigEntities(\n baseDirectory: string,\n validate?: boolean\n) {\n if (!fs.existsSync(baseDirectory)) {\n return;\n }\n const files = await readFiles(baseDirectory);\n const jsonFiles = files\n .filter(({ path }) => path.toLowerCase().endsWith('.json'))\n .map(({ path, content }) => ({\n // Remove .json extension\n entityId: path.substring(0, path.length - 5),\n content,\n path,\n }));\n\n let everyScriptValid = true;\n for (const file of jsonFiles) {\n const jsObject = JSON.parse(file.content);\n const isScriptValid = validateScriptHooks(jsObject);\n if (!isScriptValid) {\n printMessage(`Invalid script hook in ${file.path}`, 'error');\n everyScriptValid = false;\n }\n }\n\n if (validate && !everyScriptValid) {\n return;\n }\n\n createProgressIndicator(\n 'indeterminate',\n undefined,\n 'Importing config objects...'\n );\n\n const entityPromises = jsonFiles.map((file) => {\n return putConfigEntity(file.entityId, file.content);\n });\n\n const results = await Promise.allSettled(entityPromises);\n const errors = results.filter(\n (result): result is PromiseRejectedResult => result.status === 'rejected'\n );\n\n if (errors.length > 0) {\n printMessage(`Failed to import ${errors.length} config objects:`, 'error');\n for (const error of errors) {\n printMessage(`- ${error.reason}`, 'error');\n }\n stopProgressIndicator(\n `Failed to import ${errors.length} config objects`,\n 'error'\n );\n return;\n }\n\n stopProgressIndicator(`Imported ${results.length} config objects`, 'success');\n}\n\n/**\n * Import all IDM configuration objects\n * @param baseDirectory import directory\n * @param entitiesFile JSON file that specifies the config entities to export/import\n * @param envFile File that defines environment specific variables for replacement during configuration export/import\n * @param validate validate script hooks\n */\nexport async function importAllConfigEntities(\n baseDirectory: string,\n entitiesFile: string,\n envFile: string,\n validate?: boolean\n) {\n if (!fs.existsSync(baseDirectory)) {\n return;\n }\n const entriesToImport = JSON.parse(fs.readFileSync(entitiesFile, 'utf8')).idm;\n\n const envReader = propertiesReader(envFile);\n\n const files = await readFiles(baseDirectory);\n const jsonFiles = files\n .filter(({ path }) => path.toLowerCase().endsWith('.json'))\n .map(({ content, path }) => ({\n // Remove .json extension\n entityId: path.substring(0, path.length - 5),\n content,\n path,\n }));\n\n let everyScriptValid = true;\n for (const file of jsonFiles) {\n const jsObject = JSON.parse(file.content);\n const isScriptValid = validateScriptHooks(jsObject);\n if (!isScriptValid) {\n printMessage(`Invalid script hook in ${file.path}`, 'error');\n everyScriptValid = false;\n }\n }\n\n if (validate && !everyScriptValid) {\n return;\n }\n\n createProgressIndicator(\n 'indeterminate',\n undefined,\n 'Importing config objects...'\n );\n\n const entityPromises = jsonFiles\n .filter(({ entityId }) => {\n return entriesToImport.includes(entityId);\n })\n .map(({ entityId, content }) => {\n const unsubstituted = unSubstituteEnvParams(content, envReader);\n return putConfigEntity(entityId, unsubstituted);\n });\n\n const results = await Promise.allSettled(entityPromises);\n const errors = results.filter(\n (result): result is PromiseRejectedResult => result.status === 'rejected'\n );\n\n if (errors.length > 0) {\n printMessage(`Failed to import ${errors.length} config objects:`, 'error');\n for (const error of errors) {\n printMessage(`- ${error.reason}`, 'error');\n }\n stopProgressIndicator(\n `Failed to import ${errors.length} config objects`,\n 'error'\n );\n return;\n }\n\n stopProgressIndicator(`Imported ${results.length} config objects`, 'success');\n}\n\n/**\n * Count number of managed objects of a given type\n * @param {String} type managed object type, e.g. alpha_user\n */\nexport async function countManagedObjects(type) {\n let count = 0;\n let result = {\n result: [],\n resultCount: 0,\n pagedResultsCookie: null,\n totalPagedResultsPolicy: 'NONE',\n totalPagedResults: -1,\n remainingPagedResults: -1,\n };\n try {\n do {\n result = await queryAllManagedObjectsByType(\n type,\n [],\n result.pagedResultsCookie\n );\n count += result.resultCount;\n } while (result.pagedResultsCookie);\n printMessage(`${type}: ${count}`);\n } catch (error) {\n printMessage(error.response.data, 'error');\n printMessage(`Error querying managed objects by type: ${error}`, 'error');\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"IdmOps.js","names":["fs","fse","path","propertiesReader","replaceall","frodo","createProgressIndicator","printMessage","stopProgressIndicator","getTypedFilename","warnAboutOfflineConnectorServers","all","idm","config","testConnectorServers","offline","filter","status","ok","map","name","length","join","error","message","listAllConfigEntities","configurations","getAllConfigEntities","configEntity","_id","getAllConfigEntitiesError","exportConfigEntity","id","file","fileName","getConfigEntity","writeFile","JSON","stringify","err","exportAllRawConfigEntities","directory","existsSync","mkdirSync","undefined","entityPromises","push","catch","getConfigEntityError","_getConfigEntityError","_getConfigEntityError2","_getConfigEntityError3","_getConfigEntityError4","_getConfigEntityError5","_getConfigEntityError6","_getConfigEntityError7","_getConfigEntityError8","_getConfigEntityError9","response","data","includes","reason","_getConfigEntityError10","results","Promise","item","outputFile","exportAllConfigEntities","entitiesFile","envFile","entriesToExport","readFile","entriesData","parse","envParams","configEntityString","each","key","value","importConfigEntityByIdFromFile","entityId","validate","fileData","readFileSync","resolve","process","cwd","entityData","isValid","helper","script","validateScriptHooks","putConfigEntity","putConfigEntityError","importConfigEntityFromFile","importAllRawConfigEntities","baseDirectory","files","utils","readFiles","jsonFiles","toLowerCase","endsWith","content","substring","everyScriptValid","jsObject","isScriptValid","allSettled","errors","result","importAllConfigEntities","entriesToImport","envReader","unsubstituted","unSubstituteEnvParams","countManagedObjects","type","count","resultCount","pagedResultsCookie","totalPagedResultsPolicy","totalPagedResults","remainingPagedResults","queryAllManagedObjectsByType"],"sources":["ops/IdmOps.ts"],"sourcesContent":["/* eslint-disable no-await-in-loop */\nimport fs from 'fs';\nimport fse from 'fs-extra';\nimport path from 'path';\nimport propertiesReader from 'properties-reader';\nimport replaceall from 'replaceall';\n\nimport { frodo } from '@rockcarver/frodo-lib';\nimport {\n createProgressIndicator,\n printMessage,\n stopProgressIndicator,\n} from '../utils/Console';\nimport { getTypedFilename } from '../utils/ExportImportUtils';\n\n/**\n * Warn about and list offline remote connector servers\n */\nexport async function warnAboutOfflineConnectorServers() {\n try {\n const all = await frodo.idm.config.testConnectorServers();\n const offline = all\n .filter((status) => !status.ok)\n .map((status) => status.name);\n if (offline.length) {\n printMessage(\n `\\nThe following connector server(s) are offline and their connectors and configuration unavailable:\\n${offline.join(\n '\\n'\n )}`,\n 'warn'\n );\n }\n } catch (error) {\n printMessage(error, 'error');\n printMessage(\n `Error getting offline connector servers: ${error.message}`,\n 'error'\n );\n }\n}\n\n/**\n * List all IDM configuration objects\n */\nexport async function listAllConfigEntities() {\n try {\n const { configurations } = await frodo.idm.config.getAllConfigEntities();\n for (const configEntity of configurations) {\n printMessage(`${configEntity._id}`, 'data');\n }\n } catch (getAllConfigEntitiesError) {\n printMessage(getAllConfigEntitiesError, 'error');\n printMessage(\n `Error getting config entities: ${getAllConfigEntitiesError}`,\n 'error'\n );\n }\n}\n\n/**\n * Export an IDM configuration object.\n * @param {String} id the desired configuration object\n * @param {String} file optional export file\n */\nexport async function exportConfigEntity(id, file) {\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(`${id}`, 'idm');\n }\n const configEntity = await frodo.idm.config.getConfigEntity(id);\n fs.writeFile(fileName, JSON.stringify(configEntity, null, 2), (err) => {\n if (err) {\n return printMessage(`ERROR - can't save ${id} export to file`, 'error');\n }\n return '';\n });\n}\n\n/**\n * Export all IDM configuration objects into separate JSON files in a directory specified by <directory>\n * @param {String} directory export directory\n */\nexport async function exportAllRawConfigEntities(directory) {\n try {\n const { configurations } = await frodo.idm.config.getAllConfigEntities();\n if (!fs.existsSync(directory)) {\n fs.mkdirSync(directory);\n }\n createProgressIndicator(\n 'indeterminate',\n undefined,\n 'Exporting config objects...'\n );\n const entityPromises = [];\n for (const configEntity of configurations) {\n entityPromises.push(\n frodo.idm.config\n .getConfigEntity(configEntity._id)\n .catch((getConfigEntityError) => {\n if (\n !(\n getConfigEntityError.response?.status === 403 &&\n getConfigEntityError.response?.data?.message ===\n 'This operation is not available in ForgeRock Identity Cloud.'\n ) &&\n !(\n // list of config entities, which do not exist by default or ever.\n (\n [\n 'script',\n 'notificationFactory',\n 'apiVersion',\n 'metrics',\n 'repo.init',\n 'endpoint/validateQueryFilter',\n 'endpoint/oauthproxy',\n 'external.rest',\n 'scheduler',\n 'org.apache.felix.fileinstall/openidm',\n 'cluster',\n 'endpoint/mappingDetails',\n 'fieldPolicy/teammember',\n ].includes(configEntity._id) &&\n getConfigEntityError.response?.status === 404 &&\n getConfigEntityError.response?.data?.reason === 'Not Found'\n )\n ) &&\n // https://bugster.forgerock.org/jira/browse/OPENIDM-18270\n !(\n getConfigEntityError.response?.status === 404 &&\n getConfigEntityError.response?.data?.message ===\n 'No configuration exists for id org.apache.felix.fileinstall/openidm'\n )\n ) {\n printMessage(getConfigEntityError.response?.data, 'error');\n printMessage(\n `Error getting config entity ${configEntity._id}: ${getConfigEntityError}`,\n 'error'\n );\n }\n })\n );\n }\n const results = await Promise.all(entityPromises);\n for (const item of results) {\n if (item != null) {\n fse.outputFile(\n `${directory}/${item._id}.json`,\n JSON.stringify(item, null, 2),\n (err) => {\n if (err) {\n return printMessage(\n `ERROR - can't save config ${item._id} to file - ${err}`,\n 'error'\n );\n }\n }\n );\n }\n }\n stopProgressIndicator('Exported config objects.', 'success');\n } catch (getAllConfigEntitiesError) {\n printMessage(getAllConfigEntitiesError, 'error');\n printMessage(\n `Error getting config entities: ${getAllConfigEntitiesError}`,\n 'error'\n );\n }\n}\n\n/**\n * Export all IDM configuration objects\n * @param {String} directory export directory\n * @param {String} entitiesFile JSON file that specifies the config entities to export/import\n * @param {String} envFile File that defines environment specific variables for replacement during configuration export/import\n */\nexport async function exportAllConfigEntities(\n directory,\n entitiesFile,\n envFile\n) {\n let entriesToExport = [];\n // read list of entities to export\n fs.readFile(entitiesFile, 'utf8', async (err, data) => {\n if (err) throw err;\n const entriesData = JSON.parse(data);\n entriesToExport = entriesData.idm;\n // console.log(`entriesToExport ${entriesToExport}`);\n\n // read list of configs to parameterize for environment specific values\n const envParams = propertiesReader(envFile);\n\n try {\n const { configurations } = await frodo.idm.config.getAllConfigEntities();\n // create export directory if not exist\n if (!fs.existsSync(directory)) {\n fs.mkdirSync(directory);\n }\n createProgressIndicator(\n 'indeterminate',\n undefined,\n 'Exporting config objects...'\n );\n const entityPromises = [];\n for (const configEntity of configurations) {\n if (entriesToExport.includes(configEntity._id)) {\n entityPromises.push(\n frodo.idm.config.getConfigEntity(configEntity._id)\n );\n }\n }\n const results = await Promise.all(entityPromises);\n for (const item of results) {\n if (item != null) {\n let configEntityString = JSON.stringify(item, null, 2);\n envParams.each((key, value) => {\n configEntityString = replaceall(\n value,\n `\\${${key}}`,\n configEntityString\n );\n });\n fse.outputFile(\n `${directory}/${item._id}.json`,\n configEntityString,\n (error) => {\n if (err) {\n return printMessage(\n `ERROR - can't save config ${item._id} to file - ${error}`,\n 'error'\n );\n }\n }\n );\n }\n }\n stopProgressIndicator(null, 'success');\n } catch (getAllConfigEntitiesError) {\n printMessage(getAllConfigEntitiesError, 'error');\n printMessage(\n `Error getting config entities: ${getAllConfigEntitiesError}`,\n 'error'\n );\n }\n });\n}\n\n/**\n * Import an IDM configuration object by id from file.\n * @param entityId the configuration object to import\n * @param file optional file to import\n * @param validate validate script hooks\n */\nexport async function importConfigEntityByIdFromFile(\n entityId: string,\n file?: string,\n validate?: boolean\n) {\n if (!file) {\n file = getTypedFilename(entityId, 'idm');\n }\n\n const fileData = fs.readFileSync(path.resolve(process.cwd(), file), 'utf8');\n\n const entityData = JSON.parse(fileData);\n const isValid = frodo.helper.script.validateScriptHooks(entityData);\n if (validate && !isValid) {\n printMessage('Invalid IDM configuration object', 'error');\n return;\n }\n\n try {\n await frodo.idm.config.putConfigEntity(entityId, entityData);\n } catch (putConfigEntityError) {\n printMessage(putConfigEntityError, 'error');\n printMessage(`Error: ${putConfigEntityError}`, 'error');\n }\n}\n\n/**\n * Import IDM configuration object from file.\n * @param file optional file to import\n * @param validate validate script hooks\n */\nexport async function importConfigEntityFromFile(\n file: string,\n validate?: boolean\n) {\n const fileData = fs.readFileSync(path.resolve(process.cwd(), file), 'utf8');\n const entityData = JSON.parse(fileData);\n const entityId = entityData._id;\n const isValid = frodo.helper.script.validateScriptHooks(entityData);\n if (validate && !isValid) {\n printMessage('Invalid IDM configuration object', 'error');\n return;\n }\n\n try {\n await frodo.idm.config.putConfigEntity(entityId, entityData);\n } catch (putConfigEntityError) {\n printMessage(putConfigEntityError, 'error');\n printMessage(`Error: ${putConfigEntityError}`, 'error');\n }\n}\n\n/**\n * Import all IDM configuration objects from separate JSON files in a directory specified by <directory>\n * @param baseDirectory export directory\n * @param validate validate script hooks\n */\nexport async function importAllRawConfigEntities(\n baseDirectory: string,\n validate?: boolean\n) {\n if (!fs.existsSync(baseDirectory)) {\n return;\n }\n const files = await frodo.helper.utils.readFiles(baseDirectory);\n const jsonFiles = files\n .filter(({ path }) => path.toLowerCase().endsWith('.json'))\n .map(({ path, content }) => ({\n // Remove .json extension\n entityId: path.substring(0, path.length - 5),\n content,\n path,\n }));\n\n let everyScriptValid = true;\n for (const file of jsonFiles) {\n const jsObject = JSON.parse(file.content);\n const isScriptValid = frodo.helper.script.validateScriptHooks(jsObject);\n if (!isScriptValid) {\n printMessage(`Invalid script hook in ${file.path}`, 'error');\n everyScriptValid = false;\n }\n }\n\n if (validate && !everyScriptValid) {\n return;\n }\n\n createProgressIndicator(\n 'indeterminate',\n undefined,\n 'Importing config objects...'\n );\n\n const entityPromises = jsonFiles.map((file) => {\n return frodo.idm.config.putConfigEntity(file.entityId, file.content);\n });\n\n const results = await Promise.allSettled(entityPromises);\n const errors = results.filter(\n (result): result is PromiseRejectedResult => result.status === 'rejected'\n );\n\n if (errors.length > 0) {\n printMessage(`Failed to import ${errors.length} config objects:`, 'error');\n for (const error of errors) {\n printMessage(`- ${error.reason}`, 'error');\n }\n stopProgressIndicator(\n `Failed to import ${errors.length} config objects`,\n 'error'\n );\n return;\n }\n\n stopProgressIndicator(`Imported ${results.length} config objects`, 'success');\n}\n\n/**\n * Import all IDM configuration objects\n * @param baseDirectory import directory\n * @param entitiesFile JSON file that specifies the config entities to export/import\n * @param envFile File that defines environment specific variables for replacement during configuration export/import\n * @param validate validate script hooks\n */\nexport async function importAllConfigEntities(\n baseDirectory: string,\n entitiesFile: string,\n envFile: string,\n validate?: boolean\n) {\n if (!fs.existsSync(baseDirectory)) {\n return;\n }\n const entriesToImport = JSON.parse(fs.readFileSync(entitiesFile, 'utf8')).idm;\n\n const envReader = propertiesReader(envFile);\n\n const files = await frodo.helper.utils.readFiles(baseDirectory);\n const jsonFiles = files\n .filter(({ path }) => path.toLowerCase().endsWith('.json'))\n .map(({ content, path }) => ({\n // Remove .json extension\n entityId: path.substring(0, path.length - 5),\n content,\n path,\n }));\n\n let everyScriptValid = true;\n for (const file of jsonFiles) {\n const jsObject = JSON.parse(file.content);\n const isScriptValid = frodo.helper.script.validateScriptHooks(jsObject);\n if (!isScriptValid) {\n printMessage(`Invalid script hook in ${file.path}`, 'error');\n everyScriptValid = false;\n }\n }\n\n if (validate && !everyScriptValid) {\n return;\n }\n\n createProgressIndicator(\n 'indeterminate',\n undefined,\n 'Importing config objects...'\n );\n\n const entityPromises = jsonFiles\n .filter(({ entityId }) => {\n return entriesToImport.includes(entityId);\n })\n .map(({ entityId, content }) => {\n const unsubstituted = frodo.helper.utils.unSubstituteEnvParams(\n content,\n envReader\n );\n return frodo.idm.config.putConfigEntity(entityId, unsubstituted);\n });\n\n const results = await Promise.allSettled(entityPromises);\n const errors = results.filter(\n (result): result is PromiseRejectedResult => result.status === 'rejected'\n );\n\n if (errors.length > 0) {\n printMessage(`Failed to import ${errors.length} config objects:`, 'error');\n for (const error of errors) {\n printMessage(`- ${error.reason}`, 'error');\n }\n stopProgressIndicator(\n `Failed to import ${errors.length} config objects`,\n 'error'\n );\n return;\n }\n\n stopProgressIndicator(`Imported ${results.length} config objects`, 'success');\n}\n\n/**\n * Count number of managed objects of a given type\n * @param {String} type managed object type, e.g. alpha_user\n */\nexport async function countManagedObjects(type) {\n let count = 0;\n let result = {\n result: [],\n resultCount: 0,\n pagedResultsCookie: null,\n totalPagedResultsPolicy: 'NONE',\n totalPagedResults: -1,\n remainingPagedResults: -1,\n };\n try {\n do {\n result = await frodo.idm.config.queryAllManagedObjectsByType(\n type,\n [],\n result.pagedResultsCookie\n );\n count += result.resultCount;\n } while (result.pagedResultsCookie);\n printMessage(`${type}: ${count}`);\n } catch (error) {\n printMessage(error.response.data, 'error');\n printMessage(`Error querying managed objects by type: ${error}`, 'error');\n }\n}\n"],"mappings":"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"}
|
package/esm/ops/IdpOps.js
CHANGED
|
@@ -1,15 +1,7 @@
|
|
|
1
|
+
import { frodo } from '@rockcarver/frodo-lib';
|
|
1
2
|
import fs from 'fs';
|
|
2
|
-
import { Idp } from '@rockcarver/frodo-lib';
|
|
3
3
|
import { createProgressBar, failSpinner, printMessage, showSpinner, stopProgressBar, succeedSpinner, updateProgressBar } from '../utils/Console';
|
|
4
4
|
import { getRealmString, getTypedFilename, saveJsonToFile } from '../utils/ExportImportUtils';
|
|
5
|
-
const {
|
|
6
|
-
getSocialIdentityProviders,
|
|
7
|
-
exportSocialProvider,
|
|
8
|
-
exportSocialProviders,
|
|
9
|
-
importSocialProvider,
|
|
10
|
-
importFirstSocialProvider,
|
|
11
|
-
importSocialProviders
|
|
12
|
-
} = Idp;
|
|
13
5
|
|
|
14
6
|
/**
|
|
15
7
|
* Get a one-line description of the social idp object
|
|
@@ -47,7 +39,7 @@ export function getTableRowMd(socialIdpObj) {
|
|
|
47
39
|
*/
|
|
48
40
|
export async function listSocialProviders() {
|
|
49
41
|
try {
|
|
50
|
-
const providers = await getSocialIdentityProviders();
|
|
42
|
+
const providers = await frodo.oauth2oidc.external.getSocialIdentityProviders();
|
|
51
43
|
providers.sort((a, b) => a._id.localeCompare(b._id));
|
|
52
44
|
providers.forEach(socialIdentityProvider => {
|
|
53
45
|
printMessage(`${socialIdentityProvider._id}`, 'data');
|
|
@@ -71,7 +63,7 @@ export async function exportSocialProviderToFile(providerId, file = '') {
|
|
|
71
63
|
createProgressBar(1, `Exporting ${providerId}`);
|
|
72
64
|
try {
|
|
73
65
|
updateProgressBar(`Writing file ${fileName}`);
|
|
74
|
-
const fileData = await exportSocialProvider(providerId);
|
|
66
|
+
const fileData = await frodo.oauth2oidc.external.exportSocialProvider(providerId);
|
|
75
67
|
saveJsonToFile(fileData, fileName);
|
|
76
68
|
stopProgressBar(`Exported ${providerId['brightCyan']} to ${fileName['brightCyan']}.`);
|
|
77
69
|
} catch (err) {
|
|
@@ -89,7 +81,7 @@ export async function exportSocialProvidersToFile(file = '') {
|
|
|
89
81
|
if (!fileName) {
|
|
90
82
|
fileName = getTypedFilename(`all${getRealmString()}Providers`, 'idp');
|
|
91
83
|
}
|
|
92
|
-
const fileData = await exportSocialProviders();
|
|
84
|
+
const fileData = await frodo.oauth2oidc.external.exportSocialProviders();
|
|
93
85
|
saveJsonToFile(fileData, fileName);
|
|
94
86
|
}
|
|
95
87
|
|
|
@@ -97,13 +89,13 @@ export async function exportSocialProvidersToFile(file = '') {
|
|
|
97
89
|
* Export all providers to individual files
|
|
98
90
|
*/
|
|
99
91
|
export async function exportSocialProvidersToFiles() {
|
|
100
|
-
const allIdpsData = await getSocialIdentityProviders();
|
|
92
|
+
const allIdpsData = await frodo.oauth2oidc.external.getSocialIdentityProviders();
|
|
101
93
|
// printMessage(allIdpsData, 'data');
|
|
102
94
|
createProgressBar(allIdpsData.length, 'Exporting providers');
|
|
103
95
|
for (const idpData of allIdpsData) {
|
|
104
96
|
updateProgressBar(`Writing provider ${idpData._id}`);
|
|
105
97
|
const fileName = getTypedFilename(idpData._id, 'idp');
|
|
106
|
-
const fileData = await exportSocialProvider(idpData._id);
|
|
98
|
+
const fileData = await frodo.oauth2oidc.external.exportSocialProvider(idpData._id);
|
|
107
99
|
saveJsonToFile(fileData, fileName);
|
|
108
100
|
}
|
|
109
101
|
stopProgressBar(`${allIdpsData.length} providers exported.`);
|
|
@@ -122,7 +114,7 @@ export async function importSocialProviderFromFile(providerId, file) {
|
|
|
122
114
|
if (err) throw err;
|
|
123
115
|
try {
|
|
124
116
|
const fileData = JSON.parse(data);
|
|
125
|
-
outcome = await importSocialProvider(providerId, fileData);
|
|
117
|
+
outcome = await frodo.oauth2oidc.external.importSocialProvider(providerId, fileData);
|
|
126
118
|
succeedSpinner(`Successfully imported provider ${providerId} from ${file}.`);
|
|
127
119
|
} catch (error) {
|
|
128
120
|
var _error$response;
|
|
@@ -145,7 +137,7 @@ export async function importFirstSocialProviderFromFile(file) {
|
|
|
145
137
|
if (err) throw err;
|
|
146
138
|
try {
|
|
147
139
|
const fileData = JSON.parse(data);
|
|
148
|
-
outcome = await importFirstSocialProvider(fileData);
|
|
140
|
+
outcome = await frodo.oauth2oidc.external.importFirstSocialProvider(fileData);
|
|
149
141
|
succeedSpinner(`Successfully imported first provider from ${file}.`);
|
|
150
142
|
} catch (error) {
|
|
151
143
|
var _error$response2;
|
|
@@ -168,7 +160,7 @@ export async function importSocialProvidersFromFile(file) {
|
|
|
168
160
|
if (err) throw err;
|
|
169
161
|
try {
|
|
170
162
|
const fileData = JSON.parse(data);
|
|
171
|
-
outcome = await importSocialProviders(fileData);
|
|
163
|
+
outcome = await frodo.oauth2oidc.external.importSocialProviders(fileData);
|
|
172
164
|
succeedSpinner(`Successfully imported providers from ${file}.`);
|
|
173
165
|
} catch (error) {
|
|
174
166
|
var _error$response3;
|
|
@@ -192,7 +184,7 @@ export async function importSocialProvidersFromFiles() {
|
|
|
192
184
|
const fileData = JSON.parse(data);
|
|
193
185
|
const count = Object.keys(fileData.idp).length;
|
|
194
186
|
total += count;
|
|
195
|
-
await importSocialProviders(fileData);
|
|
187
|
+
await frodo.oauth2oidc.external.importSocialProviders(fileData);
|
|
196
188
|
updateProgressBar(`Imported ${count} provider(s) from ${file}`);
|
|
197
189
|
}
|
|
198
190
|
stopProgressBar(`Finished importing ${total} provider(s) from ${jsonFiles.length} file(s).`);
|