@rockcarver/frodo-cli 2.0.0-2 → 2.0.0-21
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 +186 -3
- package/esm/app.js +14 -5
- package/esm/app.js.map +1 -1
- package/esm/cli/FrodoCommand.js +18 -4
- package/esm/cli/FrodoCommand.js.map +1 -1
- package/esm/cli/_template/something-delete.js +7 -4
- package/esm/cli/_template/something-delete.js.map +1 -1
- package/esm/cli/_template/something-describe.js +7 -4
- package/esm/cli/_template/something-describe.js.map +1 -1
- package/esm/cli/_template/something-else-delete.js +7 -4
- package/esm/cli/_template/something-else-delete.js.map +1 -1
- package/esm/cli/_template/something-else-describe.js +7 -4
- package/esm/cli/_template/something-else-describe.js.map +1 -1
- package/esm/cli/_template/something-else-export.js +7 -4
- package/esm/cli/_template/something-else-export.js.map +1 -1
- package/esm/cli/_template/something-else-import.js +7 -4
- package/esm/cli/_template/something-else-import.js.map +1 -1
- package/esm/cli/_template/something-else-list.js +7 -4
- package/esm/cli/_template/something-else-list.js.map +1 -1
- package/esm/cli/_template/something-else.js +1 -1
- package/esm/cli/_template/something-else.js.map +1 -1
- package/esm/cli/_template/something-export.js +7 -4
- package/esm/cli/_template/something-export.js.map +1 -1
- package/esm/cli/_template/something-import.js +7 -4
- package/esm/cli/_template/something-import.js.map +1 -1
- package/esm/cli/_template/something-list.js +7 -4
- package/esm/cli/_template/something-list.js.map +1 -1
- package/esm/cli/_template/something-other-delete.js +7 -4
- package/esm/cli/_template/something-other-delete.js.map +1 -1
- package/esm/cli/_template/something-other-describe.js +7 -4
- package/esm/cli/_template/something-other-describe.js.map +1 -1
- package/esm/cli/_template/something-other-export.js +7 -4
- package/esm/cli/_template/something-other-export.js.map +1 -1
- package/esm/cli/_template/something-other-import.js +7 -4
- package/esm/cli/_template/something-other-import.js.map +1 -1
- package/esm/cli/_template/something-other-list.js +7 -4
- package/esm/cli/_template/something-other-list.js.map +1 -1
- package/esm/cli/_template/something-other.js +1 -1
- package/esm/cli/_template/something-other.js.map +1 -1
- package/esm/cli/_template/something.js +2 -2
- package/esm/cli/_template/something.js.map +1 -1
- package/esm/cli/admin/admin-add-autoid-static-user-mapping.js +10 -4
- 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 +14 -7
- package/esm/cli/admin/admin-create-oauth2-client-with-admin-privileges.js.map +1 -1
- package/esm/cli/admin/admin-federation-export.js +45 -0
- package/esm/cli/admin/admin-federation-export.js.map +1 -0
- package/esm/cli/admin/admin-federation-import.js +49 -0
- package/esm/cli/admin/admin-federation-import.js.map +1 -0
- package/esm/cli/admin/admin-federation-list.js +29 -0
- package/esm/cli/admin/admin-federation-list.js.map +1 -0
- package/esm/cli/admin/admin-federation.js +13 -0
- package/esm/cli/admin/admin-federation.js.map +1 -0
- package/esm/cli/admin/admin-get-access-token.js +12 -6
- package/esm/cli/admin/admin-get-access-token.js.map +1 -1
- package/esm/cli/admin/admin-grant-oauth2-client-admin-privileges.js +12 -6
- package/esm/cli/admin/admin-grant-oauth2-client-admin-privileges.js.map +1 -1
- package/esm/cli/admin/admin-hide-generic-extension-attributes.js +11 -5
- 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 +10 -4
- 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 +10 -4
- 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 +11 -5
- package/esm/cli/admin/admin-list-static-user-mappings.js.map +1 -1
- package/esm/cli/admin/admin-remove-static-user-mapping.js +12 -5
- package/esm/cli/admin/admin-remove-static-user-mapping.js.map +1 -1
- package/esm/cli/admin/admin-repair-org-model.js +11 -5
- package/esm/cli/admin/admin-repair-org-model.js.map +1 -1
- package/esm/cli/admin/admin-revoke-oauth2-client-admin-privileges.js +12 -6
- package/esm/cli/admin/admin-revoke-oauth2-client-admin-privileges.js.map +1 -1
- package/esm/cli/admin/admin-show-generic-extension-attributes.js +11 -5
- package/esm/cli/admin/admin-show-generic-extension-attributes.js.map +1 -1
- package/esm/cli/admin/admin.js +3 -2
- package/esm/cli/admin/admin.js.map +1 -1
- package/esm/cli/agent/agent-delete.js +13 -6
- package/esm/cli/agent/agent-delete.js.map +1 -1
- package/esm/cli/agent/agent-describe.js +7 -4
- package/esm/cli/agent/agent-describe.js.map +1 -1
- package/esm/cli/agent/agent-export.js +8 -5
- package/esm/cli/agent/agent-export.js.map +1 -1
- package/esm/cli/agent/agent-gateway-delete.js +13 -6
- package/esm/cli/agent/agent-gateway-delete.js.map +1 -1
- package/esm/cli/agent/agent-gateway-describe.js +7 -4
- package/esm/cli/agent/agent-gateway-describe.js.map +1 -1
- package/esm/cli/agent/agent-gateway-export.js +8 -5
- package/esm/cli/agent/agent-gateway-export.js.map +1 -1
- package/esm/cli/agent/agent-gateway-import.js +8 -5
- package/esm/cli/agent/agent-gateway-import.js.map +1 -1
- package/esm/cli/agent/agent-gateway-list.js +7 -4
- package/esm/cli/agent/agent-gateway-list.js.map +1 -1
- package/esm/cli/agent/agent-gateway.js +1 -1
- package/esm/cli/agent/agent-gateway.js.map +1 -1
- package/esm/cli/agent/agent-import.js +8 -5
- package/esm/cli/agent/agent-import.js.map +1 -1
- package/esm/cli/agent/agent-java-delete.js +13 -6
- package/esm/cli/agent/agent-java-delete.js.map +1 -1
- package/esm/cli/agent/agent-java-describe.js +7 -4
- package/esm/cli/agent/agent-java-describe.js.map +1 -1
- package/esm/cli/agent/agent-java-export.js +8 -5
- package/esm/cli/agent/agent-java-export.js.map +1 -1
- package/esm/cli/agent/agent-java-import.js +8 -5
- package/esm/cli/agent/agent-java-import.js.map +1 -1
- package/esm/cli/agent/agent-java-list.js +7 -4
- package/esm/cli/agent/agent-java-list.js.map +1 -1
- package/esm/cli/agent/agent-java.js +1 -1
- package/esm/cli/agent/agent-java.js.map +1 -1
- package/esm/cli/agent/agent-list.js +7 -4
- package/esm/cli/agent/agent-list.js.map +1 -1
- package/esm/cli/agent/agent-web-delete.js +13 -6
- package/esm/cli/agent/agent-web-delete.js.map +1 -1
- package/esm/cli/agent/agent-web-describe.js +7 -4
- package/esm/cli/agent/agent-web-describe.js.map +1 -1
- package/esm/cli/agent/agent-web-export.js +8 -5
- package/esm/cli/agent/agent-web-export.js.map +1 -1
- package/esm/cli/agent/agent-web-import.js +8 -5
- package/esm/cli/agent/agent-web-import.js.map +1 -1
- package/esm/cli/agent/agent-web-list.js +7 -4
- package/esm/cli/agent/agent-web-list.js.map +1 -1
- package/esm/cli/agent/agent-web.js +1 -1
- package/esm/cli/agent/agent-web.js.map +1 -1
- package/esm/cli/agent/agent.js +2 -2
- package/esm/cli/agent/agent.js.map +1 -1
- package/esm/cli/app/app-delete.js +27 -8
- package/esm/cli/app/app-delete.js.map +1 -1
- package/esm/cli/app/app-describe.js +9 -5
- package/esm/cli/app/app-describe.js.map +1 -1
- package/esm/cli/app/app-export.js +17 -13
- package/esm/cli/app/app-export.js.map +1 -1
- package/esm/cli/app/app-import.js +21 -17
- package/esm/cli/app/app-import.js.map +1 -1
- package/esm/cli/app/app-list.js +12 -8
- package/esm/cli/app/app-list.js.map +1 -1
- package/esm/cli/app/app.js +8 -12
- package/esm/cli/app/app.js.map +1 -1
- package/esm/cli/authz/authz-policy-delete.js +10 -7
- package/esm/cli/authz/authz-policy-delete.js.map +1 -1
- package/esm/cli/authz/authz-policy-describe.js +8 -5
- package/esm/cli/authz/authz-policy-describe.js.map +1 -1
- package/esm/cli/authz/authz-policy-export.js +12 -9
- package/esm/cli/authz/authz-policy-export.js.map +1 -1
- package/esm/cli/authz/authz-policy-import.js +10 -7
- package/esm/cli/authz/authz-policy-import.js.map +1 -1
- package/esm/cli/authz/authz-policy-list.js +9 -6
- package/esm/cli/authz/authz-policy-list.js.map +1 -1
- package/esm/cli/authz/authz-policy.js +1 -1
- package/esm/cli/authz/authz-policy.js.map +1 -1
- package/esm/cli/authz/authz-set-delete.js +9 -6
- package/esm/cli/authz/authz-set-delete.js.map +1 -1
- package/esm/cli/authz/authz-set-describe.js +8 -5
- package/esm/cli/authz/authz-set-describe.js.map +1 -1
- package/esm/cli/authz/authz-set-export.js +10 -7
- package/esm/cli/authz/authz-set-export.js.map +1 -1
- package/esm/cli/authz/authz-set-import.js +10 -7
- package/esm/cli/authz/authz-set-import.js.map +1 -1
- package/esm/cli/authz/authz-set-list.js +7 -4
- package/esm/cli/authz/authz-set-list.js.map +1 -1
- package/esm/cli/authz/authz-set.js +1 -1
- package/esm/cli/authz/authz-set.js.map +1 -1
- package/esm/cli/authz/authz-type-delete.js +10 -7
- package/esm/cli/authz/authz-type-delete.js.map +1 -1
- package/esm/cli/authz/authz-type-describe.js +9 -6
- package/esm/cli/authz/authz-type-describe.js.map +1 -1
- package/esm/cli/authz/authz-type-export.js +11 -8
- package/esm/cli/authz/authz-type-export.js.map +1 -1
- package/esm/cli/authz/authz-type-import.js +12 -9
- package/esm/cli/authz/authz-type-import.js.map +1 -1
- package/esm/cli/authz/authz-type-list.js +8 -5
- package/esm/cli/authz/authz-type-list.js.map +1 -1
- package/esm/cli/authz/authz-type.js +1 -1
- package/esm/cli/authz/authz-type.js.map +1 -1
- package/esm/cli/authz/authz.js +2 -2
- package/esm/cli/authz/authz.js.map +1 -1
- package/esm/cli/conn/conn-delete.js +2 -2
- package/esm/cli/conn/conn-delete.js.map +1 -1
- package/esm/cli/conn/conn-describe.js +2 -2
- package/esm/cli/conn/conn-describe.js.map +1 -1
- package/esm/cli/conn/conn-list.js +2 -2
- package/esm/cli/conn/conn-list.js.map +1 -1
- package/esm/cli/conn/conn-save.js +31 -15
- package/esm/cli/conn/conn-save.js.map +1 -1
- package/esm/cli/conn/conn.js +2 -2
- package/esm/cli/conn/conn.js.map +1 -1
- package/esm/cli/email/email-template-export.js +10 -7
- package/esm/cli/email/email-template-export.js.map +1 -1
- package/esm/cli/email/email-template-import.js +11 -8
- package/esm/cli/email/email-template-import.js.map +1 -1
- package/esm/cli/email/email-template-list.js +8 -5
- package/esm/cli/email/email-template-list.js.map +1 -1
- package/esm/cli/email/email-template.js +1 -1
- package/esm/cli/email/email-template.js.map +1 -1
- package/esm/cli/email/email.js +2 -2
- package/esm/cli/email/email.js.map +1 -1
- package/esm/cli/esv/esv-apply.js +18 -8
- package/esm/cli/esv/esv-apply.js.map +1 -1
- package/esm/cli/esv/esv-secret-create.js +8 -5
- package/esm/cli/esv/esv-secret-create.js.map +1 -1
- package/esm/cli/esv/esv-secret-delete.js +9 -6
- package/esm/cli/esv/esv-secret-delete.js.map +1 -1
- package/esm/cli/esv/esv-secret-describe.js +8 -5
- package/esm/cli/esv/esv-secret-describe.js.map +1 -1
- package/esm/cli/esv/esv-secret-export.js +7 -4
- package/esm/cli/esv/esv-secret-export.js.map +1 -1
- package/esm/cli/esv/esv-secret-import.js +7 -4
- package/esm/cli/esv/esv-secret-import.js.map +1 -1
- package/esm/cli/esv/esv-secret-list.js +8 -5
- package/esm/cli/esv/esv-secret-list.js.map +1 -1
- package/esm/cli/esv/esv-secret-set.js +8 -5
- package/esm/cli/esv/esv-secret-set.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-activate.js +8 -5
- package/esm/cli/esv/esv-secret-version-activate.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-create.js +9 -6
- package/esm/cli/esv/esv-secret-version-create.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-deactivate.js +8 -5
- package/esm/cli/esv/esv-secret-version-deactivate.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-delete.js +9 -6
- package/esm/cli/esv/esv-secret-version-delete.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-list.js +8 -5
- package/esm/cli/esv/esv-secret-version-list.js.map +1 -1
- package/esm/cli/esv/esv-secret-version.js +1 -1
- package/esm/cli/esv/esv-secret-version.js.map +1 -1
- package/esm/cli/esv/esv-secret.js +1 -1
- package/esm/cli/esv/esv-secret.js.map +1 -1
- package/esm/cli/esv/esv-variable-create.js +10 -6
- package/esm/cli/esv/esv-variable-create.js.map +1 -1
- package/esm/cli/esv/esv-variable-delete.js +9 -6
- package/esm/cli/esv/esv-variable-delete.js.map +1 -1
- package/esm/cli/esv/esv-variable-describe.js +8 -5
- package/esm/cli/esv/esv-variable-describe.js.map +1 -1
- package/esm/cli/esv/esv-variable-export.js +7 -4
- package/esm/cli/esv/esv-variable-export.js.map +1 -1
- package/esm/cli/esv/esv-variable-import.js +7 -4
- package/esm/cli/esv/esv-variable-import.js.map +1 -1
- package/esm/cli/esv/esv-variable-list.js +8 -5
- package/esm/cli/esv/esv-variable-list.js.map +1 -1
- package/esm/cli/esv/esv-variable-set.js +8 -5
- package/esm/cli/esv/esv-variable-set.js.map +1 -1
- package/esm/cli/esv/esv-variable.js +1 -1
- package/esm/cli/esv/esv-variable.js.map +1 -1
- package/esm/cli/esv/esv.js +2 -2
- package/esm/cli/esv/esv.js.map +1 -1
- package/esm/cli/idm/idm-count.js +9 -6
- package/esm/cli/idm/idm-count.js.map +1 -1
- package/esm/cli/idm/idm-export.js +10 -7
- package/esm/cli/idm/idm-export.js.map +1 -1
- package/esm/cli/idm/idm-import.js +11 -8
- package/esm/cli/idm/idm-import.js.map +1 -1
- package/esm/cli/idm/idm-list.js +7 -4
- package/esm/cli/idm/idm-list.js.map +1 -1
- package/esm/cli/idm/idm.js +2 -2
- package/esm/cli/idm/idm.js.map +1 -1
- package/esm/cli/idp/idp-export.js +11 -8
- package/esm/cli/idp/idp-export.js.map +1 -1
- package/esm/cli/idp/idp-import.js +15 -12
- package/esm/cli/idp/idp-import.js.map +1 -1
- package/esm/cli/idp/idp-list.js +7 -4
- package/esm/cli/idp/idp-list.js.map +1 -1
- package/esm/cli/idp/idp.js +2 -2
- package/esm/cli/idp/idp.js.map +1 -1
- package/esm/cli/info/info.js +16 -10
- package/esm/cli/info/info.js.map +1 -1
- package/esm/cli/journey/journey-delete.js +8 -5
- package/esm/cli/journey/journey-delete.js.map +1 -1
- package/esm/cli/journey/journey-describe.js +18 -10
- package/esm/cli/journey/journey-describe.js.map +1 -1
- package/esm/cli/journey/journey-disable.js +12 -6
- package/esm/cli/journey/journey-disable.js.map +1 -1
- package/esm/cli/journey/journey-enable.js +12 -6
- package/esm/cli/journey/journey-enable.js.map +1 -1
- package/esm/cli/journey/journey-export.js +10 -7
- package/esm/cli/journey/journey-export.js.map +1 -1
- package/esm/cli/journey/journey-import.js +11 -8
- package/esm/cli/journey/journey-import.js.map +1 -1
- package/esm/cli/journey/journey-list.js +6 -3
- package/esm/cli/journey/journey-list.js.map +1 -1
- package/esm/cli/journey/journey-prune.js +23 -12
- package/esm/cli/journey/journey-prune.js.map +1 -1
- package/esm/cli/journey/journey.js +2 -2
- package/esm/cli/journey/journey.js.map +1 -1
- package/esm/cli/{logging/logs-fetch.js → log/log-fetch.js} +68 -36
- package/esm/cli/log/log-fetch.js.map +1 -0
- package/esm/cli/log/log-key-delete.js +35 -0
- package/esm/cli/log/log-key-delete.js.map +1 -0
- package/esm/cli/log/log-key-describe.js +22 -0
- package/esm/cli/log/log-key-describe.js.map +1 -0
- package/esm/cli/log/log-key-list.js +26 -0
- package/esm/cli/log/log-key-list.js.map +1 -0
- package/esm/cli/log/log-key.js +8 -0
- package/esm/cli/log/log-key.js.map +1 -0
- package/esm/cli/log/log-list.js +80 -0
- package/esm/cli/log/log-list.js.map +1 -0
- package/esm/cli/log/log-tail.js +77 -0
- package/esm/cli/log/log-tail.js.map +1 -0
- package/esm/cli/{logging/logs.js → log/log.js} +6 -3
- package/esm/cli/log/log.js.map +1 -0
- package/esm/cli/oauth/oauth-client-delete.js +22 -0
- package/esm/cli/oauth/oauth-client-delete.js.map +1 -0
- package/esm/cli/oauth/oauth-client-describe.js +22 -0
- package/esm/cli/oauth/oauth-client-describe.js.map +1 -0
- package/esm/cli/oauth/oauth-client-export.js +52 -0
- package/esm/cli/oauth/oauth-client-export.js.map +1 -0
- package/esm/cli/oauth/oauth-client-import.js +57 -0
- package/esm/cli/oauth/oauth-client-import.js.map +1 -0
- package/esm/cli/oauth/oauth-client-list.js +25 -0
- package/esm/cli/oauth/oauth-client-list.js.map +1 -0
- package/esm/cli/oauth/oauth-client.js +14 -0
- package/esm/cli/oauth/oauth-client.js.map +1 -0
- package/esm/cli/oauth/oauth.js +13 -0
- package/esm/cli/oauth/oauth.js.map +1 -0
- package/esm/cli/realm/realm-add-custom-domain.js +8 -5
- package/esm/cli/realm/realm-add-custom-domain.js.map +1 -1
- package/esm/cli/realm/realm-describe.js +8 -5
- package/esm/cli/realm/realm-describe.js.map +1 -1
- package/esm/cli/realm/realm-list.js +8 -5
- package/esm/cli/realm/realm-list.js.map +1 -1
- package/esm/cli/realm/realm-remove-custom-domain.js +11 -5
- package/esm/cli/realm/realm-remove-custom-domain.js.map +1 -1
- package/esm/cli/realm/realm.js +2 -2
- package/esm/cli/realm/realm.js.map +1 -1
- package/esm/cli/saml/saml-cot-export.js +10 -7
- package/esm/cli/saml/saml-cot-export.js.map +1 -1
- package/esm/cli/saml/saml-cot-import.js +11 -8
- package/esm/cli/saml/saml-cot-import.js.map +1 -1
- package/esm/cli/saml/saml-cot-list.js +8 -5
- package/esm/cli/saml/saml-cot-list.js.map +1 -1
- package/esm/cli/saml/saml-cot.js +1 -1
- package/esm/cli/saml/saml-cot.js.map +1 -1
- package/esm/cli/saml/saml-delete.js +14 -7
- package/esm/cli/saml/saml-delete.js.map +1 -1
- package/esm/cli/saml/saml-describe.js +8 -5
- package/esm/cli/saml/saml-describe.js.map +1 -1
- package/esm/cli/saml/saml-export.js +10 -7
- package/esm/cli/saml/saml-export.js.map +1 -1
- package/esm/cli/saml/saml-import.js +11 -8
- package/esm/cli/saml/saml-import.js.map +1 -1
- package/esm/cli/saml/saml-list.js +8 -5
- package/esm/cli/saml/saml-list.js.map +1 -1
- package/esm/cli/saml/saml-metadata-export.js +9 -6
- package/esm/cli/saml/saml-metadata-export.js.map +1 -1
- package/esm/cli/saml/saml-metadata.js +1 -1
- package/esm/cli/saml/saml-metadata.js.map +1 -1
- package/esm/cli/saml/saml.js +2 -2
- package/esm/cli/saml/saml.js.map +1 -1
- package/esm/cli/script/script-delete.js +7 -4
- package/esm/cli/script/script-delete.js.map +1 -1
- package/esm/cli/script/script-describe.js +7 -4
- package/esm/cli/script/script-describe.js.map +1 -1
- package/esm/cli/script/script-export.js +8 -5
- package/esm/cli/script/script-export.js.map +1 -1
- package/esm/cli/script/script-import.js +9 -6
- package/esm/cli/script/script-import.js.map +1 -1
- package/esm/cli/script/script-list.js +8 -5
- package/esm/cli/script/script-list.js.map +1 -1
- package/esm/cli/script/script.js +2 -2
- package/esm/cli/script/script.js.map +1 -1
- package/esm/cli/service/service-delete.js +8 -5
- package/esm/cli/service/service-delete.js.map +1 -1
- package/esm/cli/service/service-export.js +9 -6
- package/esm/cli/service/service-export.js.map +1 -1
- package/esm/cli/service/service-import.js +10 -7
- package/esm/cli/service/service-import.js.map +1 -1
- package/esm/cli/service/service-list.js +7 -4
- package/esm/cli/service/service-list.js.map +1 -1
- package/esm/cli/service/service.js +2 -2
- package/esm/cli/service/service.js.map +1 -1
- package/esm/cli/shell/shell.js +57 -0
- package/esm/cli/shell/shell.js.map +1 -0
- package/esm/cli/theme/theme-delete.js +10 -7
- package/esm/cli/theme/theme-delete.js.map +1 -1
- package/esm/cli/theme/theme-export.js +11 -8
- package/esm/cli/theme/theme-export.js.map +1 -1
- package/esm/cli/theme/theme-import.js +12 -9
- package/esm/cli/theme/theme-import.js.map +1 -1
- package/esm/cli/theme/theme-list.js +7 -4
- package/esm/cli/theme/theme-list.js.map +1 -1
- package/esm/cli/theme/theme.js +2 -2
- package/esm/cli/theme/theme.js.map +1 -1
- package/esm/help/SampleData.js +7 -0
- package/esm/help/SampleData.js.map +1 -0
- package/esm/launch.js +1 -1
- package/esm/launch.js.map +1 -1
- package/esm/loader.js +2 -2
- package/esm/loader.js.map +1 -1
- package/esm/ops/AdminFederationOps.js +216 -0
- package/esm/ops/AdminFederationOps.js.map +1 -0
- package/esm/ops/AgentOps.js +88 -54
- package/esm/ops/AgentOps.js.map +1 -1
- package/esm/ops/ApplicationOps.js +309 -0
- package/esm/ops/ApplicationOps.js.map +1 -0
- package/esm/ops/CirclesOfTrustOps.js +25 -13
- package/esm/ops/CirclesOfTrustOps.js.map +1 -1
- package/esm/ops/ConnectionProfileOps.js +13 -6
- package/esm/ops/ConnectionProfileOps.js.map +1 -1
- package/esm/ops/EmailTemplateOps.js +53 -47
- package/esm/ops/EmailTemplateOps.js.map +1 -1
- package/esm/ops/IdmOps.js +58 -64
- package/esm/ops/IdmOps.js.map +1 -1
- package/esm/ops/IdpOps.js +48 -25
- package/esm/ops/IdpOps.js.map +1 -1
- package/esm/ops/JourneyOps.js +108 -43
- package/esm/ops/JourneyOps.js.map +1 -1
- package/esm/ops/LogOps.js +92 -30
- package/esm/ops/LogOps.js.map +1 -1
- package/esm/ops/NodeOps.js +6 -3
- package/esm/ops/NodeOps.js.map +1 -1
- package/esm/ops/OAuth2ClientOps.js +29 -16
- package/esm/ops/OAuth2ClientOps.js.map +1 -1
- package/esm/ops/OrganizationOps.js +14 -22
- package/esm/ops/OrganizationOps.js.map +1 -1
- package/esm/ops/PolicyOps.js +60 -28
- package/esm/ops/PolicyOps.js.map +1 -1
- package/esm/ops/PolicySetOps.js +39 -22
- package/esm/ops/PolicySetOps.js.map +1 -1
- package/esm/ops/RealmOps.js +15 -8
- package/esm/ops/RealmOps.js.map +1 -1
- package/esm/ops/ResourceTypeOps.js +43 -27
- package/esm/ops/ResourceTypeOps.js.map +1 -1
- package/esm/ops/Saml2Ops.js +56 -42
- package/esm/ops/Saml2Ops.js.map +1 -1
- package/esm/ops/Saml2Ops.test_.js.map +1 -1
- package/esm/ops/ScriptOps.js +72 -18
- package/esm/ops/ScriptOps.js.map +1 -1
- package/esm/ops/SecretsOps.js +33 -18
- package/esm/ops/SecretsOps.js.map +1 -1
- package/esm/ops/ServiceOps.js +49 -28
- package/esm/ops/ServiceOps.js.map +1 -1
- package/esm/ops/ThemeOps.js +42 -22
- package/esm/ops/ThemeOps.js.map +1 -1
- package/esm/ops/VariablesOps.js +37 -28
- package/esm/ops/VariablesOps.js.map +1 -1
- package/esm/ops/utils/OpsUtils.js +1 -1
- package/esm/ops/utils/OpsUtils.js.map +1 -1
- package/esm/ops/utils/Wordwrap.js +1 -1
- package/esm/ops/utils/Wordwrap.js.map +1 -1
- package/esm/storage/StaticStorage.js +1 -1
- package/esm/storage/StaticStorage.js.map +1 -1
- package/esm/utils/Config.js +7 -4
- package/esm/utils/Config.js.map +1 -1
- package/esm/utils/Console.js +9 -5
- package/esm/utils/Console.js.map +1 -1
- package/esm/utils/ExportImportUtils.js +32 -66
- package/esm/utils/ExportImportUtils.js.map +1 -1
- package/esm/utils/Version.js +19 -16
- package/esm/utils/Version.js.map +1 -1
- package/package.json +45 -35
- package/esm/cli/logging/logs-fetch.js.map +0 -1
- package/esm/cli/logging/logs-list.js +0 -49
- package/esm/cli/logging/logs-list.js.map +0 -1
- package/esm/cli/logging/logs-tail.js +0 -46
- package/esm/cli/logging/logs-tail.js.map +0 -1
- package/esm/cli/logging/logs.js.map +0 -1
- package/esm/cli/theme/theme-delete.e2e.test_.js.map +0 -1
- package/esm/cli/theme/theme-list.e2e.test_.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConnectionProfileOps.js","names":["
|
|
1
|
+
{"version":3,"file":"ConnectionProfileOps.js","names":["frodo","state","fs","createObjectTable","createTable","debugMessage","failSpinner","printMessage","showSpinner","succeedSpinner","getAccessTokenForServiceAccount","login","getConnectionProfilesPath","getConnectionProfileByHost","conn","listConnectionProfiles","long","filename","data","readFileSync","connectionsData","JSON","parse","Object","keys","length","table","forEach","c","push","svcacctName","svcacctId","username","logApiKey","toString","e","message","describeConnectionProfile","host","showSecrets","profile","present","jwk","svcacctJwk","password","logApiSecret","authenticationService","keyMap","tenant","authenticationHeaderOverrides","stringify","addExistingServiceAccount","serviceAccountId","privateKeyFile","validate","token","setServiceAccountId","setServiceAccountJwk","err"],"sources":["../../src/ops/ConnectionProfileOps.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport fs from 'fs';\n\nimport {\n createObjectTable,\n createTable,\n debugMessage,\n failSpinner,\n printMessage,\n showSpinner,\n succeedSpinner,\n} from '../utils/Console';\n\nconst { getAccessTokenForServiceAccount } = frodo.login;\nconst { getConnectionProfilesPath, getConnectionProfileByHost } = frodo.conn;\n\n/**\n * List connection profiles\n * @param {boolean} long Long list format with details\n * @param {State} state library state\n */\nexport function listConnectionProfiles(long = false) {\n const filename = getConnectionProfilesPath();\n try {\n const data = fs.readFileSync(filename, 'utf8');\n const connectionsData = JSON.parse(data);\n if (Object.keys(connectionsData).length < 1) {\n printMessage(`No connections defined yet in ${filename}`, 'info');\n } else {\n if (long) {\n const table = createTable([\n 'Host',\n 'Service Account',\n 'Username',\n 'Log API Key',\n ]);\n Object.keys(connectionsData).forEach((c) => {\n table.push([\n c,\n connectionsData[c].svcacctName || connectionsData[c].svcacctId,\n connectionsData[c].username,\n connectionsData[c].logApiKey,\n ]);\n });\n printMessage(table.toString(), 'data');\n } else {\n Object.keys(connectionsData).forEach((c) => {\n printMessage(`${c}`, 'data');\n });\n // getUniqueNames(5, Object.keys(connectionsData));\n }\n printMessage(\n 'Any unique substring of a saved host can be used as the value for host parameter in all commands',\n 'info'\n );\n }\n } catch (e) {\n printMessage(`No connections found in ${filename} (${e.message})`, 'error');\n }\n}\n\n/**\n * Describe connection profile\n * @param {string} host Host URL or unique substring\n * @param {boolean} showSecrets Whether secrets should be shown in clear text or not\n */\nexport async function describeConnectionProfile(\n host: string,\n showSecrets: boolean\n) {\n debugMessage(`ConnectionProfileOps.describeConnectionProfile: start`);\n const profile = await getConnectionProfileByHost(host);\n if (profile) {\n debugMessage(profile);\n const present = '[present]';\n const jwk = profile.svcacctJwk;\n if (!showSecrets) {\n if (profile.password) profile.password = present;\n if (profile.logApiSecret) profile.logApiSecret = present;\n if (profile.svcacctJwk) (profile as unknown)['svcacctJwk'] = present;\n }\n if (!profile.username) {\n delete profile.username;\n delete profile.password;\n }\n if (!profile.logApiKey) {\n delete profile.logApiKey;\n delete profile.logApiSecret;\n }\n if (!profile.svcacctId) {\n delete profile.svcacctId;\n delete profile.svcacctJwk;\n delete profile.svcacctName;\n }\n if (showSecrets && jwk) {\n (profile as unknown)['svcacctJwk'] = 'see below';\n }\n if (!profile.authenticationService) {\n delete profile.authenticationService;\n }\n const keyMap = {\n tenant: 'Host',\n username: 'Username',\n password: 'Password',\n logApiKey: 'Log API Key',\n logApiSecret: 'Log API Secret',\n authenticationService: 'Authentication Service',\n authenticationHeaderOverrides: 'Authentication Header Overrides',\n svcacctName: 'Service Account Name',\n svcacctId: 'Service Account Id',\n svcacctJwk: 'Service Account JWK',\n };\n const table = createObjectTable(profile, keyMap);\n printMessage(table.toString(), 'data');\n if (showSecrets && jwk) {\n printMessage(JSON.stringify(jwk), 'data');\n }\n } else {\n printMessage(`No connection profile ${host} found`);\n }\n debugMessage(`ConnectionProfileOps.describeConnectionProfile: end`);\n}\n\nexport async function addExistingServiceAccount(\n serviceAccountId: string,\n privateKeyFile: string,\n validate: boolean\n): Promise<boolean> {\n try {\n const data = fs.readFileSync(privateKeyFile);\n const jwk = JSON.parse(data.toString());\n if (validate) {\n showSpinner(`Validating service account ${serviceAccountId}...`);\n const token = await getAccessTokenForServiceAccount(\n serviceAccountId,\n jwk\n );\n if (token === null) {\n failSpinner(`Failed to validate service account ${serviceAccountId}.`);\n return false;\n } else {\n succeedSpinner(\n `Successfully validated service account ${serviceAccountId}.`\n );\n }\n }\n state.setServiceAccountId(serviceAccountId);\n state.setServiceAccountJwk(jwk);\n return true;\n } catch (err) {\n failSpinner(\n `Failed to validate service account ${serviceAccountId}: ${err}.`\n );\n }\n return false;\n}\n"],"mappings":"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"}
|
|
@@ -1,11 +1,19 @@
|
|
|
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';
|
|
8
|
-
|
|
7
|
+
import wordwrap from './utils/Wordwrap';
|
|
8
|
+
const {
|
|
9
|
+
validateImport
|
|
10
|
+
} = frodo.utils;
|
|
11
|
+
const {
|
|
12
|
+
EMAIL_TEMPLATE_TYPE,
|
|
13
|
+
readEmailTemplates,
|
|
14
|
+
readEmailTemplate,
|
|
15
|
+
updateEmailTemplate
|
|
16
|
+
} = frodo.email.template;
|
|
9
17
|
const EMAIL_TEMPLATE_FILE_TYPE = 'template.email';
|
|
10
18
|
const regexEmailTemplateType = new RegExp(`${EMAIL_TEMPLATE_TYPE}/`, 'g');
|
|
11
19
|
|
|
@@ -58,7 +66,7 @@ export function getTableRowMd(templateObj) {
|
|
|
58
66
|
export async function listEmailTemplates(long = false) {
|
|
59
67
|
let emailTemplates = [];
|
|
60
68
|
try {
|
|
61
|
-
emailTemplates =
|
|
69
|
+
emailTemplates = await readEmailTemplates();
|
|
62
70
|
} catch (error) {
|
|
63
71
|
printMessage(`Error retrieving email templates: ${error.message}`, 'error');
|
|
64
72
|
}
|
|
@@ -101,7 +109,7 @@ export async function exportEmailTemplateToFile(templateId, file) {
|
|
|
101
109
|
}
|
|
102
110
|
createProgressIndicator('determinate', 1, `Exporting ${templateId}`);
|
|
103
111
|
try {
|
|
104
|
-
const templateData = await
|
|
112
|
+
const templateData = await readEmailTemplate(templateId);
|
|
105
113
|
updateProgressIndicator(`Writing file ${fileName}`);
|
|
106
114
|
const fileData = getFileDataTemplate();
|
|
107
115
|
fileData.emailTemplate[templateId] = templateData;
|
|
@@ -124,16 +132,15 @@ export async function exportEmailTemplatesToFile(file) {
|
|
|
124
132
|
}
|
|
125
133
|
try {
|
|
126
134
|
const fileData = getFileDataTemplate();
|
|
127
|
-
const
|
|
128
|
-
|
|
129
|
-
createProgressIndicator('determinate', response.resultCount, 'Exporting email templates');
|
|
135
|
+
const templates = await readEmailTemplates();
|
|
136
|
+
createProgressIndicator('determinate', templates.length, 'Exporting email templates');
|
|
130
137
|
for (const template of templates) {
|
|
131
138
|
const templateId = template._id.replace(`${EMAIL_TEMPLATE_TYPE}/`, '');
|
|
132
139
|
updateProgressIndicator(`Exporting ${templateId}`);
|
|
133
140
|
fileData.emailTemplate[templateId] = template;
|
|
134
141
|
}
|
|
135
142
|
saveJsonToFile(fileData, fileName);
|
|
136
|
-
stopProgressIndicator(`${
|
|
143
|
+
stopProgressIndicator(`${templates.length} templates exported to ${fileName}.`);
|
|
137
144
|
} catch (err) {
|
|
138
145
|
stopProgressIndicator(`${err}`);
|
|
139
146
|
printMessage(err, 'error');
|
|
@@ -145,9 +152,8 @@ export async function exportEmailTemplatesToFile(file) {
|
|
|
145
152
|
*/
|
|
146
153
|
export async function exportEmailTemplatesToFiles() {
|
|
147
154
|
try {
|
|
148
|
-
const
|
|
149
|
-
|
|
150
|
-
createProgressIndicator('determinate', response.resultCount, 'Exporting email templates');
|
|
155
|
+
const templates = await readEmailTemplates();
|
|
156
|
+
createProgressIndicator('determinate', templates.length, 'Exporting email templates');
|
|
151
157
|
for (const template of templates) {
|
|
152
158
|
const templateId = template._id.replace(`${EMAIL_TEMPLATE_TYPE}/`, '');
|
|
153
159
|
const fileName = getTypedFilename(templateId, EMAIL_TEMPLATE_FILE_TYPE);
|
|
@@ -156,7 +162,7 @@ export async function exportEmailTemplatesToFiles() {
|
|
|
156
162
|
fileData.emailTemplate[templateId] = template;
|
|
157
163
|
saveJsonToFile(fileData, fileName);
|
|
158
164
|
}
|
|
159
|
-
stopProgressIndicator(`${
|
|
165
|
+
stopProgressIndicator(`${templates.length} templates exported.`);
|
|
160
166
|
} catch (err) {
|
|
161
167
|
stopProgressIndicator(`${err}`);
|
|
162
168
|
printMessage(err, 'error');
|
|
@@ -175,17 +181,17 @@ export async function importEmailTemplateFromFile(templateId, file, raw = false)
|
|
|
175
181
|
fs.readFile(file, 'utf8', async (err, data) => {
|
|
176
182
|
if (err) throw err;
|
|
177
183
|
const fileData = JSON.parse(data);
|
|
178
|
-
if (raw ||
|
|
184
|
+
if (raw || validateImport(fileData.meta)) {
|
|
179
185
|
createProgressIndicator('determinate', 1, `Importing ${templateId}`);
|
|
180
186
|
if (fileData.emailTemplate[templateId] || raw && fileData._id === templateId) {
|
|
181
187
|
try {
|
|
182
188
|
const emailTemplateData = raw ? s2sConvert(fileData) : fileData.emailTemplate[templateId];
|
|
183
|
-
await
|
|
189
|
+
await updateEmailTemplate(templateId, emailTemplateData);
|
|
184
190
|
updateProgressIndicator(`Importing ${templateId}`);
|
|
185
191
|
stopProgressIndicator(`Imported ${templateId}`);
|
|
186
|
-
} catch (
|
|
187
|
-
stopProgressIndicator(`${
|
|
188
|
-
printMessage(
|
|
192
|
+
} catch (updateEmailTemplateError) {
|
|
193
|
+
stopProgressIndicator(`${updateEmailTemplateError}`);
|
|
194
|
+
printMessage(updateEmailTemplateError, 'error');
|
|
189
195
|
}
|
|
190
196
|
} else {
|
|
191
197
|
stopProgressIndicator(`Email template ${templateId} not found in ${file}!`);
|
|
@@ -205,17 +211,17 @@ export async function importEmailTemplatesFromFile(file) {
|
|
|
205
211
|
fs.readFile(file, 'utf8', async (err, data) => {
|
|
206
212
|
if (err) throw err;
|
|
207
213
|
const fileData = JSON.parse(data);
|
|
208
|
-
if (
|
|
214
|
+
if (validateImport(fileData.meta)) {
|
|
209
215
|
createProgressIndicator('determinate', Object.keys(fileData.emailTemplate).length, `Importing email templates`);
|
|
210
216
|
for (const id in fileData.emailTemplate) {
|
|
211
217
|
if ({}.hasOwnProperty.call(fileData.emailTemplate, id)) {
|
|
212
218
|
const templateId = id.replace(regexEmailTemplateType, '');
|
|
213
219
|
try {
|
|
214
|
-
await
|
|
220
|
+
await updateEmailTemplate(templateId, fileData.emailTemplate[templateId]);
|
|
215
221
|
updateProgressIndicator(`Imported ${templateId}`);
|
|
216
|
-
} catch (
|
|
222
|
+
} catch (updateEmailTemplateError) {
|
|
217
223
|
printMessage(`\nError importing ${templateId}`, 'error');
|
|
218
|
-
printMessage(
|
|
224
|
+
printMessage(updateEmailTemplateError.response.data, 'error');
|
|
219
225
|
}
|
|
220
226
|
}
|
|
221
227
|
}
|
|
@@ -231,11 +237,11 @@ export async function importEmailTemplatesFromFile(file) {
|
|
|
231
237
|
* @param {string} file file name
|
|
232
238
|
* @returns {string} email template id/name
|
|
233
239
|
*/
|
|
234
|
-
function
|
|
235
|
-
debugMessage(`cli.EmailTemplateOps.
|
|
240
|
+
function readEmailTemplateIdFromFile(file) {
|
|
241
|
+
debugMessage(`cli.EmailTemplateOps.readEmailTemplateIdFromFile: file=${file}`);
|
|
236
242
|
const fileName = path.basename(file);
|
|
237
243
|
const templateId = fileName.substring(14, fileName.indexOf('.'));
|
|
238
|
-
debugMessage(`cli.EmailTemplateOps.
|
|
244
|
+
debugMessage(`cli.EmailTemplateOps.readEmailTemplateIdFromFile: templateId=${templateId}`);
|
|
239
245
|
return templateId;
|
|
240
246
|
}
|
|
241
247
|
|
|
@@ -270,20 +276,20 @@ export async function importEmailTemplatesFromFiles(raw = false) {
|
|
|
270
276
|
for (const file of jsonFiles) {
|
|
271
277
|
const data = fs.readFileSync(file, 'utf8');
|
|
272
278
|
const fileData = JSON.parse(data);
|
|
273
|
-
if (raw && file.startsWith('emailTemplate-') ||
|
|
279
|
+
if (raw && file.startsWith('emailTemplate-') || validateImport(fileData.meta)) {
|
|
274
280
|
let errors = 0;
|
|
275
281
|
if (raw) {
|
|
276
282
|
total++;
|
|
277
|
-
const templateId =
|
|
283
|
+
const templateId = readEmailTemplateIdFromFile(file);
|
|
278
284
|
try {
|
|
279
285
|
const templateData = s2sConvert(fileData);
|
|
280
|
-
await
|
|
281
|
-
} catch (
|
|
282
|
-
var
|
|
286
|
+
await updateEmailTemplate(templateId, templateData);
|
|
287
|
+
} catch (updateEmailTemplateError) {
|
|
288
|
+
var _updateEmailTemplateE;
|
|
283
289
|
errors += 1;
|
|
284
290
|
printMessage(`\nError importing ${templateId}`, 'error');
|
|
285
|
-
printMessage(
|
|
286
|
-
printMessage((
|
|
291
|
+
printMessage(updateEmailTemplateError, 'error');
|
|
292
|
+
printMessage((_updateEmailTemplateE = updateEmailTemplateError.response) === null || _updateEmailTemplateE === void 0 ? void 0 : _updateEmailTemplateE.data, 'error');
|
|
287
293
|
}
|
|
288
294
|
} else {
|
|
289
295
|
total += Object.keys(fileData.emailTemplate).length;
|
|
@@ -291,11 +297,11 @@ export async function importEmailTemplatesFromFiles(raw = false) {
|
|
|
291
297
|
if ({}.hasOwnProperty.call(fileData.emailTemplate, id)) {
|
|
292
298
|
const templateId = id.replace(regexEmailTemplateType, '');
|
|
293
299
|
try {
|
|
294
|
-
await
|
|
295
|
-
} catch (
|
|
300
|
+
await updateEmailTemplate(templateId, fileData.emailTemplate[templateId]);
|
|
301
|
+
} catch (updateEmailTemplateError) {
|
|
296
302
|
errors += 1;
|
|
297
303
|
printMessage(`\nError importing ${templateId}`, 'error');
|
|
298
|
-
printMessage(
|
|
304
|
+
printMessage(updateEmailTemplateError.response.data, 'error');
|
|
299
305
|
}
|
|
300
306
|
}
|
|
301
307
|
}
|
|
@@ -317,29 +323,29 @@ export async function importFirstEmailTemplateFromFile(file, raw = false) {
|
|
|
317
323
|
fs.readFile(file, 'utf8', async (err, data) => {
|
|
318
324
|
if (err) throw err;
|
|
319
325
|
const fileData = JSON.parse(data);
|
|
320
|
-
if (raw && file.startsWith('emailTemplate-') ||
|
|
326
|
+
if (raw && file.startsWith('emailTemplate-') || validateImport(fileData.meta)) {
|
|
321
327
|
showSpinner(`Importing first email template`);
|
|
322
328
|
if (raw) {
|
|
323
|
-
const templateId =
|
|
329
|
+
const templateId = readEmailTemplateIdFromFile(file);
|
|
324
330
|
try {
|
|
325
331
|
const templateData = s2sConvert(fileData);
|
|
326
|
-
await
|
|
332
|
+
await updateEmailTemplate(templateId, templateData);
|
|
327
333
|
succeedSpinner(`Imported ${templateId}`);
|
|
328
|
-
} catch (
|
|
329
|
-
var
|
|
334
|
+
} catch (updateEmailTemplateError) {
|
|
335
|
+
var _updateEmailTemplateE2;
|
|
330
336
|
failSpinner(`Error importing ${templateId}`);
|
|
331
|
-
printMessage((
|
|
337
|
+
printMessage((_updateEmailTemplateE2 = updateEmailTemplateError.response) === null || _updateEmailTemplateE2 === void 0 ? void 0 : _updateEmailTemplateE2.data, 'error');
|
|
332
338
|
}
|
|
333
339
|
} else {
|
|
334
340
|
for (const id in fileData.emailTemplate) {
|
|
335
341
|
if ({}.hasOwnProperty.call(fileData.emailTemplate, id)) {
|
|
336
342
|
try {
|
|
337
|
-
await
|
|
343
|
+
await updateEmailTemplate(id.replace(regexEmailTemplateType, ''), fileData.emailTemplate[id]);
|
|
338
344
|
succeedSpinner(`Imported ${id}`);
|
|
339
|
-
} catch (
|
|
340
|
-
var
|
|
345
|
+
} catch (updateEmailTemplateError) {
|
|
346
|
+
var _updateEmailTemplateE3;
|
|
341
347
|
failSpinner(`Error importing ${id}`);
|
|
342
|
-
printMessage((
|
|
348
|
+
printMessage((_updateEmailTemplateE3 = updateEmailTemplateError.response) === null || _updateEmailTemplateE3 === void 0 ? void 0 : _updateEmailTemplateE3.data, 'error');
|
|
343
349
|
}
|
|
344
350
|
break;
|
|
345
351
|
}
|
|
@@ -350,4 +356,4 @@ export async function importFirstEmailTemplateFromFile(file, raw = false) {
|
|
|
350
356
|
}
|
|
351
357
|
});
|
|
352
358
|
}
|
|
353
|
-
//# sourceMappingURL=EmailTemplateOps.js.map
|
|
359
|
+
//# sourceMappingURL=EmailTemplateOps.js.map
|
|
@@ -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","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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"}
|
|
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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"}
|