@rockcarver/frodo-cli 2.0.0-13 → 2.0.0-14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +9 -1
- package/esm/app.js +1 -1
- package/esm/app.js.map +1 -1
- package/esm/cli/FrodoCommand.js +3 -3
- package/esm/cli/FrodoCommand.js.map +1 -1
- package/esm/cli/_template/something-delete.js +2 -2
- package/esm/cli/_template/something-delete.js.map +1 -1
- package/esm/cli/_template/something-describe.js +2 -2
- package/esm/cli/_template/something-describe.js.map +1 -1
- package/esm/cli/_template/something-else-delete.js +2 -2
- package/esm/cli/_template/something-else-delete.js.map +1 -1
- package/esm/cli/_template/something-else-describe.js +2 -2
- package/esm/cli/_template/something-else-describe.js.map +1 -1
- package/esm/cli/_template/something-else-export.js +2 -2
- package/esm/cli/_template/something-else-export.js.map +1 -1
- package/esm/cli/_template/something-else-import.js +2 -2
- package/esm/cli/_template/something-else-import.js.map +1 -1
- package/esm/cli/_template/something-else-list.js +2 -2
- package/esm/cli/_template/something-else-list.js.map +1 -1
- package/esm/cli/_template/something-export.js +2 -2
- package/esm/cli/_template/something-export.js.map +1 -1
- package/esm/cli/_template/something-import.js +2 -2
- package/esm/cli/_template/something-import.js.map +1 -1
- package/esm/cli/_template/something-list.js +2 -2
- package/esm/cli/_template/something-list.js.map +1 -1
- package/esm/cli/_template/something-other-delete.js +2 -2
- package/esm/cli/_template/something-other-delete.js.map +1 -1
- package/esm/cli/_template/something-other-describe.js +2 -2
- package/esm/cli/_template/something-other-describe.js.map +1 -1
- package/esm/cli/_template/something-other-export.js +2 -2
- package/esm/cli/_template/something-other-export.js.map +1 -1
- package/esm/cli/_template/something-other-import.js +2 -2
- package/esm/cli/_template/something-other-import.js.map +1 -1
- package/esm/cli/_template/something-other-list.js +2 -2
- package/esm/cli/_template/something-other-list.js.map +1 -1
- package/esm/cli/_template/something.js +1 -1
- package/esm/cli/_template/something.js.map +1 -1
- package/esm/cli/admin/admin-add-autoid-static-user-mapping.js +1 -1
- 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 +3 -3
- package/esm/cli/admin/admin-create-oauth2-client-with-admin-privileges.js.map +1 -1
- package/esm/cli/admin/admin-federation-export.js +2 -2
- package/esm/cli/admin/admin-federation-export.js.map +1 -1
- package/esm/cli/admin/admin-federation-import.js +2 -2
- package/esm/cli/admin/admin-federation-import.js.map +1 -1
- package/esm/cli/admin/admin-federation-list.js +2 -2
- package/esm/cli/admin/admin-federation-list.js.map +1 -1
- package/esm/cli/admin/admin-get-access-token.js +2 -2
- package/esm/cli/admin/admin-get-access-token.js.map +1 -1
- package/esm/cli/admin/admin-grant-oauth2-client-admin-privileges.js +2 -2
- package/esm/cli/admin/admin-grant-oauth2-client-admin-privileges.js.map +1 -1
- package/esm/cli/admin/admin-hide-generic-extension-attributes.js +2 -2
- 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 +1 -1
- 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 +1 -1
- 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 +2 -2
- package/esm/cli/admin/admin-list-static-user-mappings.js.map +1 -1
- package/esm/cli/admin/admin-remove-static-user-mapping.js +1 -1
- package/esm/cli/admin/admin-remove-static-user-mapping.js.map +1 -1
- package/esm/cli/admin/admin-repair-org-model.js +2 -2
- package/esm/cli/admin/admin-repair-org-model.js.map +1 -1
- package/esm/cli/admin/admin-revoke-oauth2-client-admin-privileges.js +2 -2
- package/esm/cli/admin/admin-revoke-oauth2-client-admin-privileges.js.map +1 -1
- package/esm/cli/admin/admin-show-generic-extension-attributes.js +2 -2
- package/esm/cli/admin/admin-show-generic-extension-attributes.js.map +1 -1
- package/esm/cli/admin/admin.js +1 -1
- package/esm/cli/admin/admin.js.map +1 -1
- package/esm/cli/agent/agent-delete.js +2 -2
- package/esm/cli/agent/agent-delete.js.map +1 -1
- package/esm/cli/agent/agent-describe.js +2 -2
- package/esm/cli/agent/agent-describe.js.map +1 -1
- package/esm/cli/agent/agent-export.js +3 -3
- package/esm/cli/agent/agent-export.js.map +1 -1
- package/esm/cli/agent/agent-gateway-delete.js +2 -2
- package/esm/cli/agent/agent-gateway-delete.js.map +1 -1
- package/esm/cli/agent/agent-gateway-describe.js +2 -2
- package/esm/cli/agent/agent-gateway-describe.js.map +1 -1
- package/esm/cli/agent/agent-gateway-export.js +3 -3
- package/esm/cli/agent/agent-gateway-export.js.map +1 -1
- package/esm/cli/agent/agent-gateway-import.js +3 -3
- package/esm/cli/agent/agent-gateway-import.js.map +1 -1
- package/esm/cli/agent/agent-gateway-list.js +2 -2
- package/esm/cli/agent/agent-gateway-list.js.map +1 -1
- package/esm/cli/agent/agent-import.js +3 -3
- package/esm/cli/agent/agent-import.js.map +1 -1
- package/esm/cli/agent/agent-java-delete.js +2 -2
- package/esm/cli/agent/agent-java-delete.js.map +1 -1
- package/esm/cli/agent/agent-java-describe.js +2 -2
- package/esm/cli/agent/agent-java-describe.js.map +1 -1
- package/esm/cli/agent/agent-java-export.js +3 -3
- package/esm/cli/agent/agent-java-export.js.map +1 -1
- package/esm/cli/agent/agent-java-import.js +3 -3
- package/esm/cli/agent/agent-java-import.js.map +1 -1
- package/esm/cli/agent/agent-java-list.js +2 -2
- package/esm/cli/agent/agent-java-list.js.map +1 -1
- package/esm/cli/agent/agent-list.js +2 -2
- package/esm/cli/agent/agent-list.js.map +1 -1
- package/esm/cli/agent/agent-web-delete.js +2 -2
- package/esm/cli/agent/agent-web-delete.js.map +1 -1
- package/esm/cli/agent/agent-web-describe.js +2 -2
- package/esm/cli/agent/agent-web-describe.js.map +1 -1
- package/esm/cli/agent/agent-web-export.js +3 -3
- package/esm/cli/agent/agent-web-export.js.map +1 -1
- package/esm/cli/agent/agent-web-import.js +3 -3
- package/esm/cli/agent/agent-web-import.js.map +1 -1
- package/esm/cli/agent/agent-web-list.js +2 -2
- package/esm/cli/agent/agent-web-list.js.map +1 -1
- package/esm/cli/agent/agent.js +1 -1
- package/esm/cli/agent/agent.js.map +1 -1
- package/esm/cli/app/app-delete.js +2 -2
- package/esm/cli/app/app-delete.js.map +1 -1
- package/esm/cli/app/app-describe.js +2 -2
- package/esm/cli/app/app-describe.js.map +1 -1
- package/esm/cli/app/app-export.js +3 -3
- package/esm/cli/app/app-export.js.map +1 -1
- package/esm/cli/app/app-import.js +3 -3
- package/esm/cli/app/app-import.js.map +1 -1
- package/esm/cli/app/app-list.js +3 -3
- package/esm/cli/app/app-list.js.map +1 -1
- package/esm/cli/app/app.js +1 -1
- package/esm/cli/app/app.js.map +1 -1
- package/esm/cli/authz/authz-policy-delete.js +3 -3
- package/esm/cli/authz/authz-policy-delete.js.map +1 -1
- package/esm/cli/authz/authz-policy-describe.js +3 -3
- package/esm/cli/authz/authz-policy-describe.js.map +1 -1
- package/esm/cli/authz/authz-policy-export.js +3 -3
- package/esm/cli/authz/authz-policy-export.js.map +1 -1
- package/esm/cli/authz/authz-policy-import.js +2 -2
- package/esm/cli/authz/authz-policy-import.js.map +1 -1
- package/esm/cli/authz/authz-policy-list.js +3 -3
- package/esm/cli/authz/authz-policy-list.js.map +1 -1
- package/esm/cli/authz/authz-set-delete.js +3 -3
- package/esm/cli/authz/authz-set-delete.js.map +1 -1
- package/esm/cli/authz/authz-set-describe.js +3 -3
- package/esm/cli/authz/authz-set-describe.js.map +1 -1
- package/esm/cli/authz/authz-set-export.js +3 -3
- package/esm/cli/authz/authz-set-export.js.map +1 -1
- package/esm/cli/authz/authz-set-import.js +2 -2
- package/esm/cli/authz/authz-set-import.js.map +1 -1
- package/esm/cli/authz/authz-set-list.js +2 -2
- package/esm/cli/authz/authz-set-list.js.map +1 -1
- package/esm/cli/authz/authz-type-delete.js +3 -3
- package/esm/cli/authz/authz-type-delete.js.map +1 -1
- package/esm/cli/authz/authz-type-describe.js +3 -3
- package/esm/cli/authz/authz-type-describe.js.map +1 -1
- package/esm/cli/authz/authz-type-export.js +3 -3
- package/esm/cli/authz/authz-type-export.js.map +1 -1
- package/esm/cli/authz/authz-type-import.js +3 -3
- package/esm/cli/authz/authz-type-import.js.map +1 -1
- package/esm/cli/authz/authz-type-list.js +3 -3
- package/esm/cli/authz/authz-type-list.js.map +1 -1
- package/esm/cli/authz/authz.js +1 -1
- package/esm/cli/authz/authz.js.map +1 -1
- package/esm/cli/conn/conn-delete.js +1 -1
- package/esm/cli/conn/conn-delete.js.map +1 -1
- package/esm/cli/conn/conn-describe.js +1 -1
- package/esm/cli/conn/conn-describe.js.map +1 -1
- package/esm/cli/conn/conn-list.js +1 -1
- package/esm/cli/conn/conn-list.js.map +1 -1
- package/esm/cli/conn/conn-save.js +4 -4
- package/esm/cli/conn/conn-save.js.map +1 -1
- package/esm/cli/conn/conn.js +1 -1
- package/esm/cli/conn/conn.js.map +1 -1
- package/esm/cli/email/email-template-export.js +3 -3
- package/esm/cli/email/email-template-export.js.map +1 -1
- package/esm/cli/email/email-template-import.js +3 -3
- package/esm/cli/email/email-template-import.js.map +1 -1
- package/esm/cli/email/email-template-list.js +3 -3
- package/esm/cli/email/email-template-list.js.map +1 -1
- package/esm/cli/email/email.js +1 -1
- package/esm/cli/email/email.js.map +1 -1
- package/esm/cli/esv/esv-apply.js +2 -2
- package/esm/cli/esv/esv-apply.js.map +1 -1
- package/esm/cli/esv/esv-secret-create.js +3 -3
- package/esm/cli/esv/esv-secret-create.js.map +1 -1
- package/esm/cli/esv/esv-secret-delete.js +3 -3
- package/esm/cli/esv/esv-secret-delete.js.map +1 -1
- package/esm/cli/esv/esv-secret-describe.js +3 -3
- package/esm/cli/esv/esv-secret-describe.js.map +1 -1
- package/esm/cli/esv/esv-secret-export.js +2 -2
- package/esm/cli/esv/esv-secret-export.js.map +1 -1
- package/esm/cli/esv/esv-secret-import.js +2 -2
- package/esm/cli/esv/esv-secret-import.js.map +1 -1
- package/esm/cli/esv/esv-secret-list.js +3 -3
- package/esm/cli/esv/esv-secret-list.js.map +1 -1
- package/esm/cli/esv/esv-secret-set.js +3 -3
- package/esm/cli/esv/esv-secret-set.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-activate.js +3 -3
- package/esm/cli/esv/esv-secret-version-activate.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-create.js +4 -4
- package/esm/cli/esv/esv-secret-version-create.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-deactivate.js +3 -3
- package/esm/cli/esv/esv-secret-version-deactivate.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-delete.js +3 -3
- package/esm/cli/esv/esv-secret-version-delete.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-list.js +3 -3
- package/esm/cli/esv/esv-secret-version-list.js.map +1 -1
- package/esm/cli/esv/esv-variable-create.js +3 -3
- package/esm/cli/esv/esv-variable-create.js.map +1 -1
- package/esm/cli/esv/esv-variable-delete.js +3 -3
- package/esm/cli/esv/esv-variable-delete.js.map +1 -1
- package/esm/cli/esv/esv-variable-describe.js +3 -3
- package/esm/cli/esv/esv-variable-describe.js.map +1 -1
- package/esm/cli/esv/esv-variable-export.js +2 -2
- package/esm/cli/esv/esv-variable-export.js.map +1 -1
- package/esm/cli/esv/esv-variable-import.js +2 -2
- package/esm/cli/esv/esv-variable-import.js.map +1 -1
- package/esm/cli/esv/esv-variable-list.js +3 -3
- package/esm/cli/esv/esv-variable-list.js.map +1 -1
- package/esm/cli/esv/esv-variable-set.js +2 -2
- package/esm/cli/esv/esv-variable-set.js.map +1 -1
- package/esm/cli/esv/esv.js +1 -1
- package/esm/cli/esv/esv.js.map +1 -1
- package/esm/cli/idm/idm-count.js +3 -3
- package/esm/cli/idm/idm-count.js.map +1 -1
- package/esm/cli/idm/idm-export.js +3 -3
- package/esm/cli/idm/idm-export.js.map +1 -1
- package/esm/cli/idm/idm-import.js +3 -3
- package/esm/cli/idm/idm-import.js.map +1 -1
- package/esm/cli/idm/idm-list.js +2 -2
- package/esm/cli/idm/idm-list.js.map +1 -1
- package/esm/cli/idm/idm.js +1 -1
- package/esm/cli/idm/idm.js.map +1 -1
- package/esm/cli/idp/idp-export.js +6 -6
- package/esm/cli/idp/idp-export.js.map +1 -1
- package/esm/cli/idp/idp-import.js +7 -7
- package/esm/cli/idp/idp-import.js.map +1 -1
- package/esm/cli/idp/idp-list.js +2 -2
- package/esm/cli/idp/idp-list.js.map +1 -1
- package/esm/cli/idp/idp.js +1 -1
- package/esm/cli/idp/idp.js.map +1 -1
- package/esm/cli/info/info.js +3 -3
- package/esm/cli/info/info.js.map +1 -1
- package/esm/cli/journey/journey-delete.js +2 -2
- package/esm/cli/journey/journey-delete.js.map +1 -1
- package/esm/cli/journey/journey-describe.js +5 -5
- package/esm/cli/journey/journey-describe.js.map +1 -1
- package/esm/cli/journey/journey-disable.js +3 -3
- package/esm/cli/journey/journey-disable.js.map +1 -1
- package/esm/cli/journey/journey-enable.js +3 -3
- package/esm/cli/journey/journey-enable.js.map +1 -1
- package/esm/cli/journey/journey-export.js +3 -3
- package/esm/cli/journey/journey-export.js.map +1 -1
- package/esm/cli/journey/journey-import.js +3 -3
- package/esm/cli/journey/journey-import.js.map +1 -1
- package/esm/cli/journey/journey-list.js +1 -1
- package/esm/cli/journey/journey-list.js.map +1 -1
- package/esm/cli/journey/journey-prune.js +15 -11
- package/esm/cli/journey/journey-prune.js.map +1 -1
- package/esm/cli/journey/journey.js +1 -1
- package/esm/cli/journey/journey.js.map +1 -1
- package/esm/cli/log/log-fetch.js +4 -4
- package/esm/cli/log/log-fetch.js.map +1 -1
- package/esm/cli/log/log-key-delete.js +3 -3
- package/esm/cli/log/log-key-delete.js.map +1 -1
- package/esm/cli/log/log-key-describe.js +2 -2
- package/esm/cli/log/log-key-describe.js.map +1 -1
- package/esm/cli/log/log-key-list.js +2 -2
- package/esm/cli/log/log-key-list.js.map +1 -1
- package/esm/cli/log/log-list.js +2 -2
- package/esm/cli/log/log-list.js.map +1 -1
- package/esm/cli/log/log-tail.js +4 -4
- package/esm/cli/log/log-tail.js.map +1 -1
- package/esm/cli/log/log.js +1 -1
- package/esm/cli/log/log.js.map +1 -1
- package/esm/cli/realm/realm-add-custom-domain.js +3 -3
- package/esm/cli/realm/realm-add-custom-domain.js.map +1 -1
- package/esm/cli/realm/realm-describe.js +2 -2
- package/esm/cli/realm/realm-describe.js.map +1 -1
- package/esm/cli/realm/realm-list.js +3 -3
- package/esm/cli/realm/realm-list.js.map +1 -1
- package/esm/cli/realm/realm-remove-custom-domain.js +2 -2
- package/esm/cli/realm/realm-remove-custom-domain.js.map +1 -1
- package/esm/cli/realm/realm.js +1 -1
- package/esm/cli/realm/realm.js.map +1 -1
- package/esm/cli/saml/saml-cot-export.js +3 -3
- package/esm/cli/saml/saml-cot-export.js.map +1 -1
- package/esm/cli/saml/saml-cot-import.js +3 -3
- package/esm/cli/saml/saml-cot-import.js.map +1 -1
- package/esm/cli/saml/saml-cot-list.js +3 -3
- package/esm/cli/saml/saml-cot-list.js.map +1 -1
- package/esm/cli/saml/saml-delete.js +2 -2
- package/esm/cli/saml/saml-delete.js.map +1 -1
- package/esm/cli/saml/saml-describe.js +3 -3
- package/esm/cli/saml/saml-describe.js.map +1 -1
- package/esm/cli/saml/saml-export.js +3 -3
- package/esm/cli/saml/saml-export.js.map +1 -1
- package/esm/cli/saml/saml-import.js +3 -3
- package/esm/cli/saml/saml-import.js.map +1 -1
- package/esm/cli/saml/saml-list.js +3 -3
- package/esm/cli/saml/saml-list.js.map +1 -1
- package/esm/cli/saml/saml-metadata-export.js +3 -3
- package/esm/cli/saml/saml-metadata-export.js.map +1 -1
- package/esm/cli/saml/saml.js +1 -1
- package/esm/cli/saml/saml.js.map +1 -1
- package/esm/cli/script/script-delete.js +2 -2
- package/esm/cli/script/script-delete.js.map +1 -1
- package/esm/cli/script/script-describe.js +2 -2
- package/esm/cli/script/script-describe.js.map +1 -1
- package/esm/cli/script/script-export.js +3 -3
- package/esm/cli/script/script-export.js.map +1 -1
- package/esm/cli/script/script-import.js +3 -3
- package/esm/cli/script/script-import.js.map +1 -1
- package/esm/cli/script/script-list.js +3 -3
- package/esm/cli/script/script-list.js.map +1 -1
- package/esm/cli/script/script.js +1 -1
- package/esm/cli/script/script.js.map +1 -1
- package/esm/cli/service/service-delete.js +2 -2
- package/esm/cli/service/service-delete.js.map +1 -1
- package/esm/cli/service/service-export.js +2 -2
- package/esm/cli/service/service-export.js.map +1 -1
- package/esm/cli/service/service-import.js +2 -2
- package/esm/cli/service/service-import.js.map +1 -1
- package/esm/cli/service/service-list.js +2 -2
- package/esm/cli/service/service-list.js.map +1 -1
- package/esm/cli/service/service.js +1 -1
- package/esm/cli/service/service.js.map +1 -1
- package/esm/cli/shell/shell.js +7 -7
- package/esm/cli/shell/shell.js.map +1 -1
- package/esm/cli/theme/theme-delete.js +3 -3
- package/esm/cli/theme/theme-delete.js.map +1 -1
- package/esm/cli/theme/theme-export.js +3 -3
- package/esm/cli/theme/theme-export.js.map +1 -1
- package/esm/cli/theme/theme-import.js +3 -3
- package/esm/cli/theme/theme-import.js.map +1 -1
- package/esm/cli/theme/theme-list.js +2 -2
- package/esm/cli/theme/theme-list.js.map +1 -1
- package/esm/cli/theme/theme.js +1 -1
- package/esm/cli/theme/theme.js.map +1 -1
- package/esm/loader.js +1 -1
- package/esm/loader.js.map +1 -1
- package/esm/ops/AdminFederationOps.js +3 -3
- package/esm/ops/AdminFederationOps.js.map +1 -1
- package/esm/ops/AgentOps.js +13 -13
- package/esm/ops/AgentOps.js.map +1 -1
- package/esm/ops/CirclesOfTrustOps.js +4 -4
- package/esm/ops/CirclesOfTrustOps.js.map +1 -1
- package/esm/ops/ConnectionProfileOps.js +1 -1
- package/esm/ops/ConnectionProfileOps.js.map +1 -1
- package/esm/ops/EmailTemplateOps.js +42 -44
- package/esm/ops/EmailTemplateOps.js.map +1 -1
- package/esm/ops/IdmOps.js +40 -56
- package/esm/ops/IdmOps.js.map +1 -1
- package/esm/ops/IdpOps.js +29 -26
- package/esm/ops/IdpOps.js.map +1 -1
- package/esm/ops/JourneyOps.js +42 -17
- package/esm/ops/JourneyOps.js.map +1 -1
- package/esm/ops/LogOps.js.map +1 -1
- package/esm/ops/NodeOps.js.map +1 -1
- package/esm/ops/OAuth2ClientOps.js +3 -3
- package/esm/ops/OAuth2ClientOps.js.map +1 -1
- package/esm/ops/OrganizationOps.js +9 -23
- package/esm/ops/OrganizationOps.js.map +1 -1
- package/esm/ops/PolicyOps.js +10 -10
- package/esm/ops/PolicyOps.js.map +1 -1
- package/esm/ops/PolicySetOps.js +9 -9
- package/esm/ops/PolicySetOps.js.map +1 -1
- package/esm/ops/RealmOps.js +9 -9
- package/esm/ops/RealmOps.js.map +1 -1
- package/esm/ops/ResourceTypeOps.js +8 -8
- package/esm/ops/ResourceTypeOps.js.map +1 -1
- package/esm/ops/Saml2Ops.js +25 -30
- package/esm/ops/Saml2Ops.js.map +1 -1
- package/esm/ops/ScriptOps.js +6 -5
- package/esm/ops/ScriptOps.js.map +1 -1
- package/esm/ops/SecretsOps.js +18 -17
- package/esm/ops/SecretsOps.js.map +1 -1
- package/esm/ops/ServiceOps.js +1 -1
- package/esm/ops/ServiceOps.js.map +1 -1
- package/esm/ops/ThemeOps.js +18 -18
- package/esm/ops/ThemeOps.js.map +1 -1
- package/esm/ops/VariablesOps.js +9 -12
- package/esm/ops/VariablesOps.js.map +1 -1
- package/esm/utils/Config.js.map +1 -1
- package/esm/utils/Console.js +3 -2
- package/esm/utils/Console.js.map +1 -1
- package/esm/utils/ExportImportUtils.js +2 -2
- 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 +5 -3
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import { frodo } from '@rockcarver/frodo-lib';
|
|
2
2
|
import fs from 'fs';
|
|
3
|
-
import { getTypedFilename, saveJsonToFile } from '../utils/ExportImportUtils';
|
|
4
|
-
import { createProgressIndicator, updateProgressIndicator, stopProgressIndicator, printMessage, createTable, showSpinner, succeedSpinner, failSpinner, debugMessage } from '../utils/Console';
|
|
5
|
-
import wordwrap from './utils/Wordwrap';
|
|
6
3
|
import path from 'path';
|
|
4
|
+
import { createProgressIndicator, createTable, debugMessage, failSpinner, printMessage, showSpinner, stopProgressIndicator, succeedSpinner, updateProgressIndicator } from '../utils/Console';
|
|
5
|
+
import { getTypedFilename, saveJsonToFile } from '../utils/ExportImportUtils';
|
|
7
6
|
import { cloneDeep } from './utils/OpsUtils';
|
|
7
|
+
import wordwrap from './utils/Wordwrap';
|
|
8
8
|
const {
|
|
9
9
|
validateImport
|
|
10
10
|
} = frodo.utils;
|
|
11
11
|
const {
|
|
12
12
|
EMAIL_TEMPLATE_TYPE,
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
readEmailTemplates,
|
|
14
|
+
readEmailTemplate,
|
|
15
|
+
updateEmailTemplate
|
|
16
16
|
} = frodo.email.template;
|
|
17
17
|
const EMAIL_TEMPLATE_FILE_TYPE = 'template.email';
|
|
18
18
|
const regexEmailTemplateType = new RegExp(`${EMAIL_TEMPLATE_TYPE}/`, 'g');
|
|
@@ -66,7 +66,7 @@ export function getTableRowMd(templateObj) {
|
|
|
66
66
|
export async function listEmailTemplates(long = false) {
|
|
67
67
|
let emailTemplates = [];
|
|
68
68
|
try {
|
|
69
|
-
emailTemplates =
|
|
69
|
+
emailTemplates = await readEmailTemplates();
|
|
70
70
|
} catch (error) {
|
|
71
71
|
printMessage(`Error retrieving email templates: ${error.message}`, 'error');
|
|
72
72
|
}
|
|
@@ -109,7 +109,7 @@ export async function exportEmailTemplateToFile(templateId, file) {
|
|
|
109
109
|
}
|
|
110
110
|
createProgressIndicator('determinate', 1, `Exporting ${templateId}`);
|
|
111
111
|
try {
|
|
112
|
-
const templateData = await
|
|
112
|
+
const templateData = await readEmailTemplate(templateId);
|
|
113
113
|
updateProgressIndicator(`Writing file ${fileName}`);
|
|
114
114
|
const fileData = getFileDataTemplate();
|
|
115
115
|
fileData.emailTemplate[templateId] = templateData;
|
|
@@ -132,16 +132,15 @@ export async function exportEmailTemplatesToFile(file) {
|
|
|
132
132
|
}
|
|
133
133
|
try {
|
|
134
134
|
const fileData = getFileDataTemplate();
|
|
135
|
-
const
|
|
136
|
-
|
|
137
|
-
createProgressIndicator('determinate', response.resultCount, 'Exporting email templates');
|
|
135
|
+
const templates = await readEmailTemplates();
|
|
136
|
+
createProgressIndicator('determinate', templates.length, 'Exporting email templates');
|
|
138
137
|
for (const template of templates) {
|
|
139
138
|
const templateId = template._id.replace(`${EMAIL_TEMPLATE_TYPE}/`, '');
|
|
140
139
|
updateProgressIndicator(`Exporting ${templateId}`);
|
|
141
140
|
fileData.emailTemplate[templateId] = template;
|
|
142
141
|
}
|
|
143
142
|
saveJsonToFile(fileData, fileName);
|
|
144
|
-
stopProgressIndicator(`${
|
|
143
|
+
stopProgressIndicator(`${templates.length} templates exported to ${fileName}.`);
|
|
145
144
|
} catch (err) {
|
|
146
145
|
stopProgressIndicator(`${err}`);
|
|
147
146
|
printMessage(err, 'error');
|
|
@@ -153,9 +152,8 @@ export async function exportEmailTemplatesToFile(file) {
|
|
|
153
152
|
*/
|
|
154
153
|
export async function exportEmailTemplatesToFiles() {
|
|
155
154
|
try {
|
|
156
|
-
const
|
|
157
|
-
|
|
158
|
-
createProgressIndicator('determinate', response.resultCount, 'Exporting email templates');
|
|
155
|
+
const templates = await readEmailTemplates();
|
|
156
|
+
createProgressIndicator('determinate', templates.length, 'Exporting email templates');
|
|
159
157
|
for (const template of templates) {
|
|
160
158
|
const templateId = template._id.replace(`${EMAIL_TEMPLATE_TYPE}/`, '');
|
|
161
159
|
const fileName = getTypedFilename(templateId, EMAIL_TEMPLATE_FILE_TYPE);
|
|
@@ -164,7 +162,7 @@ export async function exportEmailTemplatesToFiles() {
|
|
|
164
162
|
fileData.emailTemplate[templateId] = template;
|
|
165
163
|
saveJsonToFile(fileData, fileName);
|
|
166
164
|
}
|
|
167
|
-
stopProgressIndicator(`${
|
|
165
|
+
stopProgressIndicator(`${templates.length} templates exported.`);
|
|
168
166
|
} catch (err) {
|
|
169
167
|
stopProgressIndicator(`${err}`);
|
|
170
168
|
printMessage(err, 'error');
|
|
@@ -188,12 +186,12 @@ export async function importEmailTemplateFromFile(templateId, file, raw = false)
|
|
|
188
186
|
if (fileData.emailTemplate[templateId] || raw && fileData._id === templateId) {
|
|
189
187
|
try {
|
|
190
188
|
const emailTemplateData = raw ? s2sConvert(fileData) : fileData.emailTemplate[templateId];
|
|
191
|
-
await
|
|
189
|
+
await updateEmailTemplate(templateId, emailTemplateData);
|
|
192
190
|
updateProgressIndicator(`Importing ${templateId}`);
|
|
193
191
|
stopProgressIndicator(`Imported ${templateId}`);
|
|
194
|
-
} catch (
|
|
195
|
-
stopProgressIndicator(`${
|
|
196
|
-
printMessage(
|
|
192
|
+
} catch (updateEmailTemplateError) {
|
|
193
|
+
stopProgressIndicator(`${updateEmailTemplateError}`);
|
|
194
|
+
printMessage(updateEmailTemplateError, 'error');
|
|
197
195
|
}
|
|
198
196
|
} else {
|
|
199
197
|
stopProgressIndicator(`Email template ${templateId} not found in ${file}!`);
|
|
@@ -219,11 +217,11 @@ export async function importEmailTemplatesFromFile(file) {
|
|
|
219
217
|
if ({}.hasOwnProperty.call(fileData.emailTemplate, id)) {
|
|
220
218
|
const templateId = id.replace(regexEmailTemplateType, '');
|
|
221
219
|
try {
|
|
222
|
-
await
|
|
220
|
+
await updateEmailTemplate(templateId, fileData.emailTemplate[templateId]);
|
|
223
221
|
updateProgressIndicator(`Imported ${templateId}`);
|
|
224
|
-
} catch (
|
|
222
|
+
} catch (updateEmailTemplateError) {
|
|
225
223
|
printMessage(`\nError importing ${templateId}`, 'error');
|
|
226
|
-
printMessage(
|
|
224
|
+
printMessage(updateEmailTemplateError.response.data, 'error');
|
|
227
225
|
}
|
|
228
226
|
}
|
|
229
227
|
}
|
|
@@ -239,11 +237,11 @@ export async function importEmailTemplatesFromFile(file) {
|
|
|
239
237
|
* @param {string} file file name
|
|
240
238
|
* @returns {string} email template id/name
|
|
241
239
|
*/
|
|
242
|
-
function
|
|
243
|
-
debugMessage(`cli.EmailTemplateOps.
|
|
240
|
+
function readEmailTemplateIdFromFile(file) {
|
|
241
|
+
debugMessage(`cli.EmailTemplateOps.readEmailTemplateIdFromFile: file=${file}`);
|
|
244
242
|
const fileName = path.basename(file);
|
|
245
243
|
const templateId = fileName.substring(14, fileName.indexOf('.'));
|
|
246
|
-
debugMessage(`cli.EmailTemplateOps.
|
|
244
|
+
debugMessage(`cli.EmailTemplateOps.readEmailTemplateIdFromFile: templateId=${templateId}`);
|
|
247
245
|
return templateId;
|
|
248
246
|
}
|
|
249
247
|
|
|
@@ -282,16 +280,16 @@ export async function importEmailTemplatesFromFiles(raw = false) {
|
|
|
282
280
|
let errors = 0;
|
|
283
281
|
if (raw) {
|
|
284
282
|
total++;
|
|
285
|
-
const templateId =
|
|
283
|
+
const templateId = readEmailTemplateIdFromFile(file);
|
|
286
284
|
try {
|
|
287
285
|
const templateData = s2sConvert(fileData);
|
|
288
|
-
await
|
|
289
|
-
} catch (
|
|
290
|
-
var
|
|
286
|
+
await updateEmailTemplate(templateId, templateData);
|
|
287
|
+
} catch (updateEmailTemplateError) {
|
|
288
|
+
var _updateEmailTemplateE;
|
|
291
289
|
errors += 1;
|
|
292
290
|
printMessage(`\nError importing ${templateId}`, 'error');
|
|
293
|
-
printMessage(
|
|
294
|
-
printMessage((
|
|
291
|
+
printMessage(updateEmailTemplateError, 'error');
|
|
292
|
+
printMessage((_updateEmailTemplateE = updateEmailTemplateError.response) === null || _updateEmailTemplateE === void 0 ? void 0 : _updateEmailTemplateE.data, 'error');
|
|
295
293
|
}
|
|
296
294
|
} else {
|
|
297
295
|
total += Object.keys(fileData.emailTemplate).length;
|
|
@@ -299,11 +297,11 @@ export async function importEmailTemplatesFromFiles(raw = false) {
|
|
|
299
297
|
if ({}.hasOwnProperty.call(fileData.emailTemplate, id)) {
|
|
300
298
|
const templateId = id.replace(regexEmailTemplateType, '');
|
|
301
299
|
try {
|
|
302
|
-
await
|
|
303
|
-
} catch (
|
|
300
|
+
await updateEmailTemplate(templateId, fileData.emailTemplate[templateId]);
|
|
301
|
+
} catch (updateEmailTemplateError) {
|
|
304
302
|
errors += 1;
|
|
305
303
|
printMessage(`\nError importing ${templateId}`, 'error');
|
|
306
|
-
printMessage(
|
|
304
|
+
printMessage(updateEmailTemplateError.response.data, 'error');
|
|
307
305
|
}
|
|
308
306
|
}
|
|
309
307
|
}
|
|
@@ -328,26 +326,26 @@ export async function importFirstEmailTemplateFromFile(file, raw = false) {
|
|
|
328
326
|
if (raw && file.startsWith('emailTemplate-') || validateImport(fileData.meta)) {
|
|
329
327
|
showSpinner(`Importing first email template`);
|
|
330
328
|
if (raw) {
|
|
331
|
-
const templateId =
|
|
329
|
+
const templateId = readEmailTemplateIdFromFile(file);
|
|
332
330
|
try {
|
|
333
331
|
const templateData = s2sConvert(fileData);
|
|
334
|
-
await
|
|
332
|
+
await updateEmailTemplate(templateId, templateData);
|
|
335
333
|
succeedSpinner(`Imported ${templateId}`);
|
|
336
|
-
} catch (
|
|
337
|
-
var
|
|
334
|
+
} catch (updateEmailTemplateError) {
|
|
335
|
+
var _updateEmailTemplateE2;
|
|
338
336
|
failSpinner(`Error importing ${templateId}`);
|
|
339
|
-
printMessage((
|
|
337
|
+
printMessage((_updateEmailTemplateE2 = updateEmailTemplateError.response) === null || _updateEmailTemplateE2 === void 0 ? void 0 : _updateEmailTemplateE2.data, 'error');
|
|
340
338
|
}
|
|
341
339
|
} else {
|
|
342
340
|
for (const id in fileData.emailTemplate) {
|
|
343
341
|
if ({}.hasOwnProperty.call(fileData.emailTemplate, id)) {
|
|
344
342
|
try {
|
|
345
|
-
await
|
|
343
|
+
await updateEmailTemplate(id.replace(regexEmailTemplateType, ''), fileData.emailTemplate[id]);
|
|
346
344
|
succeedSpinner(`Imported ${id}`);
|
|
347
|
-
} catch (
|
|
348
|
-
var
|
|
345
|
+
} catch (updateEmailTemplateError) {
|
|
346
|
+
var _updateEmailTemplateE3;
|
|
349
347
|
failSpinner(`Error importing ${id}`);
|
|
350
|
-
printMessage((
|
|
348
|
+
printMessage((_updateEmailTemplateE3 = updateEmailTemplateError.response) === null || _updateEmailTemplateE3 === void 0 ? void 0 : _updateEmailTemplateE3.data, 'error');
|
|
351
349
|
}
|
|
352
350
|
break;
|
|
353
351
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EmailTemplateOps.js","names":["frodo","fs","getTypedFilename","saveJsonToFile","createProgressIndicator","updateProgressIndicator","stopProgressIndicator","printMessage","createTable","showSpinner","succeedSpinner","failSpinner","debugMessage","wordwrap","path","cloneDeep","validateImport","utils","EMAIL_TEMPLATE_TYPE","getEmailTemplates","getEmailTemplate","putEmailTemplate","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","result","error","message","sort","a","b","localeCompare","entries","table","push","enabled","from","toString","exportEmailTemplateToFile","file","fileName","templateData","fileData","err","exportEmailTemplatesToFile","response","templates","resultCount","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":["../../src/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 { validateImport } = frodo.utils;\nconst {\n EMAIL_TEMPLATE_TYPE,\n getEmailTemplates,\n getEmailTemplate,\n putEmailTemplate,\n} = frodo.email.template;\n\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 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 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","path","createProgressIndicator","createTable","debugMessage","failSpinner","printMessage","showSpinner","stopProgressIndicator","succeedSpinner","updateProgressIndicator","getTypedFilename","saveJsonToFile","cloneDeep","wordwrap","validateImport","utils","EMAIL_TEMPLATE_TYPE","readEmailTemplates","readEmailTemplate","updateEmailTemplate","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","error","message","sort","a","b","localeCompare","entries","table","push","enabled","from","toString","exportEmailTemplateToFile","file","fileName","templateData","fileData","err","exportEmailTemplatesToFile","templates","exportEmailTemplatesToFiles","importEmailTemplateFromFile","raw","replaceAll","readFile","data","JSON","parse","emailTemplateData","s2sConvert","updateEmailTemplateError","importEmailTemplatesFromFile","id","hasOwnProperty","call","response","readEmailTemplateIdFromFile","basename","substring","indexOf","html","convertedData","importEmailTemplatesFromFiles","names","readdirSync","jsonFiles","startsWith","endsWith","toLowerCase","total","totalErrors","readFileSync","errors","_updateEmailTemplateE","importFirstEmailTemplateFromFile","_updateEmailTemplateE2","_updateEmailTemplateE3"],"sources":["../../src/ops/EmailTemplateOps.ts"],"sourcesContent":["import { frodo } from '@rockcarver/frodo-lib';\nimport { EmailTemplateSkeleton } from '@rockcarver/frodo-lib/types/ops/EmailTemplateOps';\nimport fs from 'fs';\nimport path from 'path';\n\nimport {\n createProgressIndicator,\n createTable,\n debugMessage,\n failSpinner,\n printMessage,\n showSpinner,\n stopProgressIndicator,\n succeedSpinner,\n updateProgressIndicator,\n} from '../utils/Console';\nimport { getTypedFilename, saveJsonToFile } from '../utils/ExportImportUtils';\nimport { cloneDeep } from './utils/OpsUtils';\nimport wordwrap from './utils/Wordwrap';\n\nconst { validateImport } = frodo.utils;\nconst {\n EMAIL_TEMPLATE_TYPE,\n readEmailTemplates,\n readEmailTemplate,\n updateEmailTemplate,\n} = frodo.email.template;\n\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 readEmailTemplates();\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 readEmailTemplate(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 templates = await readEmailTemplates();\n createProgressIndicator(\n 'determinate',\n templates.length,\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 `${templates.length} 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 templates = await readEmailTemplates();\n createProgressIndicator(\n 'determinate',\n templates.length,\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(`${templates.length} 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 updateEmailTemplate(templateId, emailTemplateData);\n updateProgressIndicator(`Importing ${templateId}`);\n stopProgressIndicator(`Imported ${templateId}`);\n } catch (updateEmailTemplateError) {\n stopProgressIndicator(`${updateEmailTemplateError}`);\n printMessage(updateEmailTemplateError, '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 await updateEmailTemplate(\n templateId,\n fileData.emailTemplate[templateId]\n );\n updateProgressIndicator(`Imported ${templateId}`);\n } catch (updateEmailTemplateError) {\n printMessage(`\\nError importing ${templateId}`, 'error');\n printMessage(updateEmailTemplateError.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 readEmailTemplateIdFromFile(file: string) {\n debugMessage(\n `cli.EmailTemplateOps.readEmailTemplateIdFromFile: file=${file}`\n );\n const fileName = path.basename(file);\n const templateId = fileName.substring(14, fileName.indexOf('.'));\n debugMessage(\n `cli.EmailTemplateOps.readEmailTemplateIdFromFile: 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 = readEmailTemplateIdFromFile(file);\n try {\n const templateData = s2sConvert(fileData);\n await updateEmailTemplate(templateId, templateData);\n } catch (updateEmailTemplateError) {\n errors += 1;\n printMessage(`\\nError importing ${templateId}`, 'error');\n printMessage(updateEmailTemplateError, 'error');\n printMessage(updateEmailTemplateError.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 updateEmailTemplate(\n templateId,\n fileData.emailTemplate[templateId]\n );\n } catch (updateEmailTemplateError) {\n errors += 1;\n printMessage(`\\nError importing ${templateId}`, 'error');\n printMessage(updateEmailTemplateError.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 = readEmailTemplateIdFromFile(file);\n try {\n const templateData = s2sConvert(fileData);\n await updateEmailTemplate(templateId, templateData);\n succeedSpinner(`Imported ${templateId}`);\n } catch (updateEmailTemplateError) {\n failSpinner(`Error importing ${templateId}`);\n printMessage(updateEmailTemplateError.response?.data, 'error');\n }\n } else {\n for (const id in fileData.emailTemplate) {\n if ({}.hasOwnProperty.call(fileData.emailTemplate, id)) {\n try {\n await updateEmailTemplate(\n id.replace(regexEmailTemplateType, ''),\n fileData.emailTemplate[id]\n );\n succeedSpinner(`Imported ${id}`);\n } catch (updateEmailTemplateError) {\n failSpinner(`Error importing ${id}`);\n printMessage(updateEmailTemplateError.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
|
@@ -12,11 +12,13 @@ const {
|
|
|
12
12
|
} = frodo.utils;
|
|
13
13
|
const {
|
|
14
14
|
testConnectorServers,
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
queryAllManagedObjectsByType
|
|
15
|
+
readConfigEntities,
|
|
16
|
+
readConfigEntity,
|
|
17
|
+
updateConfigEntity
|
|
19
18
|
} = frodo.idm.config;
|
|
19
|
+
const {
|
|
20
|
+
queryManagedObjects
|
|
21
|
+
} = frodo.idm.managed;
|
|
20
22
|
|
|
21
23
|
/**
|
|
22
24
|
* Warn about and list offline remote connector servers
|
|
@@ -39,15 +41,13 @@ export async function warnAboutOfflineConnectorServers() {
|
|
|
39
41
|
*/
|
|
40
42
|
export async function listAllConfigEntities() {
|
|
41
43
|
try {
|
|
42
|
-
const
|
|
43
|
-
configurations
|
|
44
|
-
} = await getAllConfigEntities();
|
|
44
|
+
const configurations = await readConfigEntities();
|
|
45
45
|
for (const configEntity of configurations) {
|
|
46
46
|
printMessage(`${configEntity._id}`, 'data');
|
|
47
47
|
}
|
|
48
|
-
} catch (
|
|
49
|
-
printMessage(
|
|
50
|
-
printMessage(`Error getting config entities: ${
|
|
48
|
+
} catch (readConfigEntitiesError) {
|
|
49
|
+
printMessage(readConfigEntitiesError, 'error');
|
|
50
|
+
printMessage(`Error getting config entities: ${readConfigEntitiesError}`, 'error');
|
|
51
51
|
}
|
|
52
52
|
}
|
|
53
53
|
|
|
@@ -61,7 +61,7 @@ export async function exportConfigEntity(id, file) {
|
|
|
61
61
|
if (!fileName) {
|
|
62
62
|
fileName = getTypedFilename(`${id}`, 'idm');
|
|
63
63
|
}
|
|
64
|
-
const configEntity = await
|
|
64
|
+
const configEntity = await readConfigEntity(id);
|
|
65
65
|
fs.writeFile(fileName, JSON.stringify(configEntity, null, 2), err => {
|
|
66
66
|
if (err) {
|
|
67
67
|
return printMessage(`ERROR - can't save ${id} export to file`, 'error');
|
|
@@ -76,26 +76,24 @@ export async function exportConfigEntity(id, file) {
|
|
|
76
76
|
*/
|
|
77
77
|
export async function exportAllRawConfigEntities(directory) {
|
|
78
78
|
try {
|
|
79
|
-
const
|
|
80
|
-
configurations
|
|
81
|
-
} = await getAllConfigEntities();
|
|
79
|
+
const configurations = await readConfigEntities();
|
|
82
80
|
if (!fs.existsSync(directory)) {
|
|
83
81
|
fs.mkdirSync(directory);
|
|
84
82
|
}
|
|
85
83
|
createProgressIndicator('indeterminate', undefined, 'Exporting config objects...');
|
|
86
84
|
const entityPromises = [];
|
|
87
85
|
for (const configEntity of configurations) {
|
|
88
|
-
entityPromises.push(
|
|
89
|
-
var
|
|
90
|
-
if (!(((
|
|
86
|
+
entityPromises.push(readConfigEntity(configEntity._id).catch(readConfigEntityError => {
|
|
87
|
+
var _readConfigEntityErro, _readConfigEntityErro2, _readConfigEntityErro3, _readConfigEntityErro4, _readConfigEntityErro5, _readConfigEntityErro6, _readConfigEntityErro7, _readConfigEntityErro8, _readConfigEntityErro9;
|
|
88
|
+
if (!(((_readConfigEntityErro = readConfigEntityError.response) === null || _readConfigEntityErro === void 0 ? void 0 : _readConfigEntityErro.status) === 403 && ((_readConfigEntityErro2 = readConfigEntityError.response) === null || _readConfigEntityErro2 === void 0 ? void 0 : (_readConfigEntityErro3 = _readConfigEntityErro2.data) === null || _readConfigEntityErro3 === void 0 ? void 0 : _readConfigEntityErro3.message) === 'This operation is not available in ForgeRock Identity Cloud.') && !(
|
|
91
89
|
// list of config entities, which do not exist by default or ever.
|
|
92
90
|
|
|
93
|
-
['script', 'notificationFactory', 'apiVersion', 'metrics', 'repo.init', 'endpoint/validateQueryFilter', 'endpoint/oauthproxy', 'external.rest', 'scheduler', 'org.apache.felix.fileinstall/openidm', 'cluster', 'endpoint/mappingDetails', 'fieldPolicy/teammember'].includes(configEntity._id) && ((
|
|
91
|
+
['script', 'notificationFactory', 'apiVersion', 'metrics', 'repo.init', 'endpoint/validateQueryFilter', 'endpoint/oauthproxy', 'external.rest', 'scheduler', 'org.apache.felix.fileinstall/openidm', 'cluster', 'endpoint/mappingDetails', 'fieldPolicy/teammember'].includes(configEntity._id) && ((_readConfigEntityErro4 = readConfigEntityError.response) === null || _readConfigEntityErro4 === void 0 ? void 0 : _readConfigEntityErro4.status) === 404 && ((_readConfigEntityErro5 = readConfigEntityError.response) === null || _readConfigEntityErro5 === void 0 ? void 0 : (_readConfigEntityErro6 = _readConfigEntityErro5.data) === null || _readConfigEntityErro6 === void 0 ? void 0 : _readConfigEntityErro6.reason) === 'Not Found') &&
|
|
94
92
|
// https://bugster.forgerock.org/jira/browse/OPENIDM-18270
|
|
95
|
-
!(((
|
|
96
|
-
var
|
|
97
|
-
printMessage((
|
|
98
|
-
printMessage(`Error getting config entity ${configEntity._id}: ${
|
|
93
|
+
!(((_readConfigEntityErro7 = readConfigEntityError.response) === null || _readConfigEntityErro7 === void 0 ? void 0 : _readConfigEntityErro7.status) === 404 && ((_readConfigEntityErro8 = readConfigEntityError.response) === null || _readConfigEntityErro8 === void 0 ? void 0 : (_readConfigEntityErro9 = _readConfigEntityErro8.data) === null || _readConfigEntityErro9 === void 0 ? void 0 : _readConfigEntityErro9.message) === 'No configuration exists for id org.apache.felix.fileinstall/openidm')) {
|
|
94
|
+
var _readConfigEntityErro10;
|
|
95
|
+
printMessage((_readConfigEntityErro10 = readConfigEntityError.response) === null || _readConfigEntityErro10 === void 0 ? void 0 : _readConfigEntityErro10.data, 'error');
|
|
96
|
+
printMessage(`Error getting config entity ${configEntity._id}: ${readConfigEntityError}`, 'error');
|
|
99
97
|
}
|
|
100
98
|
}));
|
|
101
99
|
}
|
|
@@ -110,9 +108,9 @@ export async function exportAllRawConfigEntities(directory) {
|
|
|
110
108
|
}
|
|
111
109
|
}
|
|
112
110
|
stopProgressIndicator('Exported config objects.', 'success');
|
|
113
|
-
} catch (
|
|
114
|
-
printMessage(
|
|
115
|
-
printMessage(`Error getting config entities: ${
|
|
111
|
+
} catch (readConfigEntitiesError) {
|
|
112
|
+
printMessage(readConfigEntitiesError, 'error');
|
|
113
|
+
printMessage(`Error getting config entities: ${readConfigEntitiesError}`, 'error');
|
|
116
114
|
}
|
|
117
115
|
}
|
|
118
116
|
|
|
@@ -134,9 +132,7 @@ export async function exportAllConfigEntities(directory, entitiesFile, envFile)
|
|
|
134
132
|
// read list of configs to parameterize for environment specific values
|
|
135
133
|
const envParams = propertiesReader(envFile);
|
|
136
134
|
try {
|
|
137
|
-
const
|
|
138
|
-
configurations
|
|
139
|
-
} = await getAllConfigEntities();
|
|
135
|
+
const configurations = await readConfigEntities();
|
|
140
136
|
// create export directory if not exist
|
|
141
137
|
if (!fs.existsSync(directory)) {
|
|
142
138
|
fs.mkdirSync(directory);
|
|
@@ -145,7 +141,7 @@ export async function exportAllConfigEntities(directory, entitiesFile, envFile)
|
|
|
145
141
|
const entityPromises = [];
|
|
146
142
|
for (const configEntity of configurations) {
|
|
147
143
|
if (entriesToExport.includes(configEntity._id)) {
|
|
148
|
-
entityPromises.push(
|
|
144
|
+
entityPromises.push(readConfigEntity(configEntity._id));
|
|
149
145
|
}
|
|
150
146
|
}
|
|
151
147
|
const results = await Promise.all(entityPromises);
|
|
@@ -163,9 +159,9 @@ export async function exportAllConfigEntities(directory, entitiesFile, envFile)
|
|
|
163
159
|
}
|
|
164
160
|
}
|
|
165
161
|
stopProgressIndicator(null, 'success');
|
|
166
|
-
} catch (
|
|
167
|
-
printMessage(
|
|
168
|
-
printMessage(`Error getting config entities: ${
|
|
162
|
+
} catch (readConfigEntitiesError) {
|
|
163
|
+
printMessage(readConfigEntitiesError, 'error');
|
|
164
|
+
printMessage(`Error getting config entities: ${readConfigEntitiesError}`, 'error');
|
|
169
165
|
}
|
|
170
166
|
});
|
|
171
167
|
}
|
|
@@ -188,10 +184,10 @@ export async function importConfigEntityByIdFromFile(entityId, file, validate) {
|
|
|
188
184
|
return;
|
|
189
185
|
}
|
|
190
186
|
try {
|
|
191
|
-
await
|
|
192
|
-
} catch (
|
|
193
|
-
printMessage(
|
|
194
|
-
printMessage(`Error: ${
|
|
187
|
+
await updateConfigEntity(entityId, entityData);
|
|
188
|
+
} catch (updateConfigEntityError) {
|
|
189
|
+
printMessage(updateConfigEntityError, 'error');
|
|
190
|
+
printMessage(`Error: ${updateConfigEntityError}`, 'error');
|
|
195
191
|
}
|
|
196
192
|
}
|
|
197
193
|
|
|
@@ -210,10 +206,10 @@ export async function importConfigEntityFromFile(file, validate) {
|
|
|
210
206
|
return;
|
|
211
207
|
}
|
|
212
208
|
try {
|
|
213
|
-
await
|
|
214
|
-
} catch (
|
|
215
|
-
printMessage(
|
|
216
|
-
printMessage(`Error: ${
|
|
209
|
+
await updateConfigEntity(entityId, entityData);
|
|
210
|
+
} catch (updateConfigEntityError) {
|
|
211
|
+
printMessage(updateConfigEntityError, 'error');
|
|
212
|
+
printMessage(`Error: ${updateConfigEntityError}`, 'error');
|
|
217
213
|
}
|
|
218
214
|
}
|
|
219
215
|
|
|
@@ -252,7 +248,7 @@ export async function importAllRawConfigEntities(baseDirectory, validate) {
|
|
|
252
248
|
}
|
|
253
249
|
createProgressIndicator('indeterminate', undefined, 'Importing config objects...');
|
|
254
250
|
const entityPromises = jsonFiles.map(file => {
|
|
255
|
-
return
|
|
251
|
+
return updateConfigEntity(file.entityId, JSON.parse(file.content));
|
|
256
252
|
});
|
|
257
253
|
const results = await Promise.allSettled(entityPromises);
|
|
258
254
|
const errors = results.filter(result => result.status === 'rejected');
|
|
@@ -314,7 +310,7 @@ export async function importAllConfigEntities(baseDirectory, entitiesFile, envFi
|
|
|
314
310
|
content
|
|
315
311
|
}) => {
|
|
316
312
|
const unsubstituted = unSubstituteEnvParams(content, envReader);
|
|
317
|
-
return
|
|
313
|
+
return updateConfigEntity(entityId, JSON.parse(unsubstituted));
|
|
318
314
|
});
|
|
319
315
|
const results = await Promise.allSettled(entityPromises);
|
|
320
316
|
const errors = results.filter(result => result.status === 'rejected');
|
|
@@ -334,21 +330,9 @@ export async function importAllConfigEntities(baseDirectory, entitiesFile, envFi
|
|
|
334
330
|
* @param {String} type managed object type, e.g. alpha_user
|
|
335
331
|
*/
|
|
336
332
|
export async function countManagedObjects(type) {
|
|
337
|
-
let count = 0;
|
|
338
|
-
let result = {
|
|
339
|
-
result: [],
|
|
340
|
-
resultCount: 0,
|
|
341
|
-
pagedResultsCookie: null,
|
|
342
|
-
totalPagedResultsPolicy: 'NONE',
|
|
343
|
-
totalPagedResults: -1,
|
|
344
|
-
remainingPagedResults: -1
|
|
345
|
-
};
|
|
346
333
|
try {
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
count += result.resultCount;
|
|
350
|
-
} while (result.pagedResultsCookie);
|
|
351
|
-
printMessage(`${type}: ${count}`);
|
|
334
|
+
const result = await queryManagedObjects(type);
|
|
335
|
+
printMessage(`${type}: ${result.length}`);
|
|
352
336
|
} catch (error) {
|
|
353
337
|
printMessage(error.response.data, 'error');
|
|
354
338
|
printMessage(`Error querying managed objects by type: ${error}`, 'error');
|