@rockcarver/frodo-cli 2.0.0-5 → 2.0.0-7
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 +39 -1
- package/esm/app.js +4 -1
- package/esm/app.js.map +1 -1
- package/esm/cli/_template/something-delete.js +4 -1
- package/esm/cli/_template/something-delete.js.map +1 -1
- package/esm/cli/_template/something-describe.js +4 -1
- package/esm/cli/_template/something-describe.js.map +1 -1
- package/esm/cli/_template/something-else-delete.js +4 -1
- package/esm/cli/_template/something-else-delete.js.map +1 -1
- package/esm/cli/_template/something-else-describe.js +4 -1
- package/esm/cli/_template/something-else-describe.js.map +1 -1
- package/esm/cli/_template/something-else-export.js +4 -1
- package/esm/cli/_template/something-else-export.js.map +1 -1
- package/esm/cli/_template/something-else-import.js +4 -1
- package/esm/cli/_template/something-else-import.js.map +1 -1
- package/esm/cli/_template/something-else-list.js +4 -1
- package/esm/cli/_template/something-else-list.js.map +1 -1
- package/esm/cli/_template/something-export.js +4 -1
- package/esm/cli/_template/something-export.js.map +1 -1
- package/esm/cli/_template/something-import.js +4 -1
- package/esm/cli/_template/something-import.js.map +1 -1
- package/esm/cli/_template/something-list.js +4 -1
- package/esm/cli/_template/something-list.js.map +1 -1
- package/esm/cli/_template/something-other-delete.js +4 -1
- package/esm/cli/_template/something-other-delete.js.map +1 -1
- package/esm/cli/_template/something-other-describe.js +4 -1
- package/esm/cli/_template/something-other-describe.js.map +1 -1
- package/esm/cli/_template/something-other-export.js +4 -1
- package/esm/cli/_template/something-other-export.js.map +1 -1
- package/esm/cli/_template/something-other-import.js +4 -1
- package/esm/cli/_template/something-other-import.js.map +1 -1
- package/esm/cli/_template/something-other-list.js +4 -1
- package/esm/cli/_template/something-other-list.js.map +1 -1
- package/esm/cli/admin/admin-add-autoid-static-user-mapping.js +8 -2
- 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 +10 -3
- 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 +8 -2
- package/esm/cli/admin/admin-get-access-token.js.map +1 -1
- package/esm/cli/admin/admin-grant-oauth2-client-admin-privileges.js +8 -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 +8 -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 +8 -2
- 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 +8 -2
- 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 +8 -2
- package/esm/cli/admin/admin-list-static-user-mappings.js.map +1 -1
- package/esm/cli/admin/admin-remove-static-user-mapping.js +8 -2
- package/esm/cli/admin/admin-remove-static-user-mapping.js.map +1 -1
- package/esm/cli/admin/admin-repair-org-model.js +8 -2
- package/esm/cli/admin/admin-repair-org-model.js.map +1 -1
- package/esm/cli/admin/admin-revoke-oauth2-client-admin-privileges.js +8 -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 +8 -2
- package/esm/cli/admin/admin-show-generic-extension-attributes.js.map +1 -1
- package/esm/cli/admin/admin.js +1 -0
- package/esm/cli/admin/admin.js.map +1 -1
- package/esm/cli/agent/agent-delete.js +10 -3
- package/esm/cli/agent/agent-delete.js.map +1 -1
- package/esm/cli/agent/agent-describe.js +4 -1
- package/esm/cli/agent/agent-describe.js.map +1 -1
- package/esm/cli/agent/agent-export.js +4 -1
- package/esm/cli/agent/agent-export.js.map +1 -1
- package/esm/cli/agent/agent-gateway-delete.js +10 -3
- package/esm/cli/agent/agent-gateway-delete.js.map +1 -1
- package/esm/cli/agent/agent-gateway-describe.js +4 -1
- package/esm/cli/agent/agent-gateway-describe.js.map +1 -1
- package/esm/cli/agent/agent-gateway-export.js +4 -1
- package/esm/cli/agent/agent-gateway-export.js.map +1 -1
- package/esm/cli/agent/agent-gateway-import.js +4 -1
- package/esm/cli/agent/agent-gateway-import.js.map +1 -1
- package/esm/cli/agent/agent-gateway-list.js +4 -1
- package/esm/cli/agent/agent-gateway-list.js.map +1 -1
- package/esm/cli/agent/agent-import.js +4 -1
- package/esm/cli/agent/agent-import.js.map +1 -1
- package/esm/cli/agent/agent-java-delete.js +10 -3
- package/esm/cli/agent/agent-java-delete.js.map +1 -1
- package/esm/cli/agent/agent-java-describe.js +4 -1
- package/esm/cli/agent/agent-java-describe.js.map +1 -1
- package/esm/cli/agent/agent-java-export.js +4 -1
- package/esm/cli/agent/agent-java-export.js.map +1 -1
- package/esm/cli/agent/agent-java-import.js +4 -1
- package/esm/cli/agent/agent-java-import.js.map +1 -1
- package/esm/cli/agent/agent-java-list.js +4 -1
- package/esm/cli/agent/agent-java-list.js.map +1 -1
- package/esm/cli/agent/agent-list.js +4 -1
- package/esm/cli/agent/agent-list.js.map +1 -1
- package/esm/cli/agent/agent-web-delete.js +10 -3
- package/esm/cli/agent/agent-web-delete.js.map +1 -1
- package/esm/cli/agent/agent-web-describe.js +4 -1
- package/esm/cli/agent/agent-web-describe.js.map +1 -1
- package/esm/cli/agent/agent-web-export.js +4 -1
- package/esm/cli/agent/agent-web-export.js.map +1 -1
- package/esm/cli/agent/agent-web-import.js +4 -1
- package/esm/cli/agent/agent-web-import.js.map +1 -1
- package/esm/cli/agent/agent-web-list.js +4 -1
- package/esm/cli/agent/agent-web-list.js.map +1 -1
- package/esm/cli/app/app-delete.js +4 -1
- package/esm/cli/app/app-delete.js.map +1 -1
- package/esm/cli/app/app-describe.js +4 -1
- package/esm/cli/app/app-describe.js.map +1 -1
- package/esm/cli/app/app-export.js +6 -3
- package/esm/cli/app/app-export.js.map +1 -1
- package/esm/cli/app/app-import.js +7 -4
- package/esm/cli/app/app-import.js.map +1 -1
- package/esm/cli/app/app-list.js +4 -1
- package/esm/cli/app/app-list.js.map +1 -1
- package/esm/cli/authz/authz-policy-delete.js +6 -3
- package/esm/cli/authz/authz-policy-delete.js.map +1 -1
- package/esm/cli/authz/authz-policy-describe.js +4 -1
- package/esm/cli/authz/authz-policy-describe.js.map +1 -1
- package/esm/cli/authz/authz-policy-export.js +8 -5
- package/esm/cli/authz/authz-policy-export.js.map +1 -1
- package/esm/cli/authz/authz-policy-import.js +7 -4
- package/esm/cli/authz/authz-policy-import.js.map +1 -1
- package/esm/cli/authz/authz-policy-list.js +5 -2
- package/esm/cli/authz/authz-policy-list.js.map +1 -1
- package/esm/cli/authz/authz-set-delete.js +5 -2
- package/esm/cli/authz/authz-set-delete.js.map +1 -1
- package/esm/cli/authz/authz-set-describe.js +4 -1
- package/esm/cli/authz/authz-set-describe.js.map +1 -1
- package/esm/cli/authz/authz-set-export.js +6 -3
- package/esm/cli/authz/authz-set-export.js.map +1 -1
- package/esm/cli/authz/authz-set-import.js +7 -4
- package/esm/cli/authz/authz-set-import.js.map +1 -1
- package/esm/cli/authz/authz-set-list.js +4 -1
- package/esm/cli/authz/authz-set-list.js.map +1 -1
- package/esm/cli/authz/authz-type-delete.js +6 -3
- package/esm/cli/authz/authz-type-delete.js.map +1 -1
- package/esm/cli/authz/authz-type-describe.js +5 -2
- package/esm/cli/authz/authz-type-describe.js.map +1 -1
- package/esm/cli/authz/authz-type-export.js +7 -4
- package/esm/cli/authz/authz-type-export.js.map +1 -1
- package/esm/cli/authz/authz-type-import.js +8 -5
- package/esm/cli/authz/authz-type-import.js.map +1 -1
- package/esm/cli/authz/authz-type-list.js +4 -1
- package/esm/cli/authz/authz-type-list.js.map +1 -1
- package/esm/cli/conn/conn-save.js +18 -5
- package/esm/cli/conn/conn-save.js.map +1 -1
- package/esm/cli/email/email-template-export.js +6 -3
- package/esm/cli/email/email-template-export.js.map +1 -1
- package/esm/cli/email/email-template-import.js +7 -4
- package/esm/cli/email/email-template-import.js.map +1 -1
- package/esm/cli/email/email-template-list.js +4 -1
- package/esm/cli/email/email-template-list.js.map +1 -1
- package/esm/cli/esv/esv-apply.js +15 -5
- package/esm/cli/esv/esv-apply.js.map +1 -1
- package/esm/cli/esv/esv-secret-create.js +4 -1
- package/esm/cli/esv/esv-secret-create.js.map +1 -1
- package/esm/cli/esv/esv-secret-delete.js +5 -2
- package/esm/cli/esv/esv-secret-delete.js.map +1 -1
- package/esm/cli/esv/esv-secret-describe.js +4 -1
- package/esm/cli/esv/esv-secret-describe.js.map +1 -1
- package/esm/cli/esv/esv-secret-export.js +4 -1
- package/esm/cli/esv/esv-secret-export.js.map +1 -1
- package/esm/cli/esv/esv-secret-import.js +4 -1
- package/esm/cli/esv/esv-secret-import.js.map +1 -1
- package/esm/cli/esv/esv-secret-list.js +4 -1
- package/esm/cli/esv/esv-secret-list.js.map +1 -1
- package/esm/cli/esv/esv-secret-set.js +4 -1
- package/esm/cli/esv/esv-secret-set.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-activate.js +4 -1
- package/esm/cli/esv/esv-secret-version-activate.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-create.js +4 -1
- package/esm/cli/esv/esv-secret-version-create.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-deactivate.js +4 -1
- package/esm/cli/esv/esv-secret-version-deactivate.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-delete.js +5 -2
- package/esm/cli/esv/esv-secret-version-delete.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-list.js +4 -1
- package/esm/cli/esv/esv-secret-version-list.js.map +1 -1
- package/esm/cli/esv/esv-variable-create.js +4 -1
- package/esm/cli/esv/esv-variable-create.js.map +1 -1
- package/esm/cli/esv/esv-variable-delete.js +5 -2
- package/esm/cli/esv/esv-variable-delete.js.map +1 -1
- package/esm/cli/esv/esv-variable-describe.js +4 -1
- package/esm/cli/esv/esv-variable-describe.js.map +1 -1
- package/esm/cli/esv/esv-variable-export.js +4 -1
- package/esm/cli/esv/esv-variable-export.js.map +1 -1
- package/esm/cli/esv/esv-variable-import.js +4 -1
- package/esm/cli/esv/esv-variable-import.js.map +1 -1
- package/esm/cli/esv/esv-variable-list.js +4 -1
- package/esm/cli/esv/esv-variable-list.js.map +1 -1
- package/esm/cli/esv/esv-variable-set.js +5 -2
- package/esm/cli/esv/esv-variable-set.js.map +1 -1
- package/esm/cli/idm/idm-count.js +4 -1
- package/esm/cli/idm/idm-count.js.map +1 -1
- package/esm/cli/idm/idm-export.js +6 -3
- package/esm/cli/idm/idm-export.js.map +1 -1
- package/esm/cli/idm/idm-import.js +7 -4
- package/esm/cli/idm/idm-import.js.map +1 -1
- package/esm/cli/idm/idm-list.js +4 -1
- package/esm/cli/idm/idm-list.js.map +1 -1
- package/esm/cli/idp/idp-export.js +4 -1
- package/esm/cli/idp/idp-export.js.map +1 -1
- package/esm/cli/idp/idp-import.js +7 -4
- package/esm/cli/idp/idp-import.js.map +1 -1
- package/esm/cli/idp/idp-list.js +4 -1
- package/esm/cli/idp/idp-list.js.map +1 -1
- package/esm/cli/info/info.js +8 -2
- package/esm/cli/info/info.js.map +1 -1
- package/esm/cli/journey/journey-delete.js +5 -2
- package/esm/cli/journey/journey-delete.js.map +1 -1
- package/esm/cli/journey/journey-describe.js +14 -6
- package/esm/cli/journey/journey-describe.js.map +1 -1
- package/esm/cli/journey/journey-disable.js +8 -2
- package/esm/cli/journey/journey-disable.js.map +1 -1
- package/esm/cli/journey/journey-enable.js +8 -2
- package/esm/cli/journey/journey-enable.js.map +1 -1
- package/esm/cli/journey/journey-export.js +6 -3
- package/esm/cli/journey/journey-export.js.map +1 -1
- package/esm/cli/journey/journey-import.js +7 -4
- package/esm/cli/journey/journey-import.js.map +1 -1
- package/esm/cli/journey/journey-list.js +4 -1
- package/esm/cli/journey/journey-list.js.map +1 -1
- package/esm/cli/journey/journey-prune.js +10 -3
- package/esm/cli/journey/journey-prune.js.map +1 -1
- package/esm/cli/log/log-fetch.js +16 -6
- package/esm/cli/log/log-fetch.js.map +1 -1
- package/esm/cli/log/log-key-delete.js +5 -2
- package/esm/cli/log/log-key-delete.js.map +1 -1
- package/esm/cli/log/log-key-describe.js +4 -1
- package/esm/cli/log/log-key-describe.js.map +1 -1
- package/esm/cli/log/log-key-list.js +4 -1
- package/esm/cli/log/log-key-list.js.map +1 -1
- package/esm/cli/log/log-list.js +14 -4
- package/esm/cli/log/log-list.js.map +1 -1
- package/esm/cli/log/log-tail.js +16 -6
- package/esm/cli/log/log-tail.js.map +1 -1
- package/esm/cli/realm/realm-add-custom-domain.js +4 -1
- package/esm/cli/realm/realm-add-custom-domain.js.map +1 -1
- package/esm/cli/realm/realm-describe.js +4 -1
- package/esm/cli/realm/realm-describe.js.map +1 -1
- package/esm/cli/realm/realm-list.js +4 -1
- package/esm/cli/realm/realm-list.js.map +1 -1
- package/esm/cli/realm/realm-remove-custom-domain.js +8 -2
- package/esm/cli/realm/realm-remove-custom-domain.js.map +1 -1
- package/esm/cli/saml/saml-cot-export.js +6 -3
- package/esm/cli/saml/saml-cot-export.js.map +1 -1
- package/esm/cli/saml/saml-cot-import.js +7 -4
- package/esm/cli/saml/saml-cot-import.js.map +1 -1
- package/esm/cli/saml/saml-cot-list.js +4 -1
- package/esm/cli/saml/saml-cot-list.js.map +1 -1
- package/esm/cli/saml/saml-delete.js +11 -4
- package/esm/cli/saml/saml-delete.js.map +1 -1
- package/esm/cli/saml/saml-describe.js +4 -1
- package/esm/cli/saml/saml-describe.js.map +1 -1
- package/esm/cli/saml/saml-export.js +6 -3
- package/esm/cli/saml/saml-export.js.map +1 -1
- package/esm/cli/saml/saml-import.js +7 -4
- package/esm/cli/saml/saml-import.js.map +1 -1
- package/esm/cli/saml/saml-list.js +4 -1
- package/esm/cli/saml/saml-list.js.map +1 -1
- package/esm/cli/saml/saml-metadata-export.js +5 -2
- package/esm/cli/saml/saml-metadata-export.js.map +1 -1
- package/esm/cli/script/script-delete.js +4 -1
- package/esm/cli/script/script-delete.js.map +1 -1
- package/esm/cli/script/script-describe.js +4 -1
- package/esm/cli/script/script-describe.js.map +1 -1
- package/esm/cli/script/script-export.js +4 -1
- package/esm/cli/script/script-export.js.map +1 -1
- package/esm/cli/script/script-import.js +4 -1
- package/esm/cli/script/script-import.js.map +1 -1
- package/esm/cli/script/script-list.js +4 -1
- package/esm/cli/script/script-list.js.map +1 -1
- package/esm/cli/service/service-delete.js +5 -2
- package/esm/cli/service/service-delete.js.map +1 -1
- package/esm/cli/service/service-export.js +6 -3
- package/esm/cli/service/service-export.js.map +1 -1
- package/esm/cli/service/service-import.js +7 -4
- package/esm/cli/service/service-import.js.map +1 -1
- package/esm/cli/service/service-list.js +4 -1
- package/esm/cli/service/service-list.js.map +1 -1
- package/esm/cli/theme/theme-delete.js +6 -3
- package/esm/cli/theme/theme-delete.js.map +1 -1
- package/esm/cli/theme/theme-export.js +7 -4
- package/esm/cli/theme/theme-export.js.map +1 -1
- package/esm/cli/theme/theme-import.js +8 -5
- package/esm/cli/theme/theme-import.js.map +1 -1
- package/esm/cli/theme/theme-list.js +4 -1
- package/esm/cli/theme/theme-list.js.map +1 -1
- package/esm/ops/AdminFederationOps.js +216 -0
- package/esm/ops/AdminFederationOps.js.map +1 -0
- package/esm/ops/AgentOps.js +62 -36
- package/esm/ops/AgentOps.js.map +1 -1
- package/esm/ops/CirclesOfTrustOps.js +22 -10
- package/esm/ops/CirclesOfTrustOps.js.map +1 -1
- package/esm/ops/ConnectionProfileOps.js +10 -3
- package/esm/ops/ConnectionProfileOps.js.map +1 -1
- package/esm/ops/EmailTemplateOps.js +23 -15
- package/esm/ops/EmailTemplateOps.js.map +1 -1
- package/esm/ops/IdmOps.js +34 -21
- package/esm/ops/IdmOps.js.map +1 -1
- package/esm/ops/IdpOps.js +17 -9
- package/esm/ops/IdpOps.js.map +1 -1
- package/esm/ops/JourneyOps.js +46 -30
- package/esm/ops/JourneyOps.js.map +1 -1
- package/esm/ops/LogOps.js +21 -11
- package/esm/ops/LogOps.js.map +1 -1
- package/esm/ops/NodeOps.js +5 -2
- package/esm/ops/NodeOps.js.map +1 -1
- package/esm/ops/OAuth2ClientOps.js +26 -13
- package/esm/ops/OAuth2ClientOps.js.map +1 -1
- package/esm/ops/OrganizationOps.js +8 -2
- package/esm/ops/OrganizationOps.js.map +1 -1
- package/esm/ops/PolicyOps.js +36 -21
- package/esm/ops/PolicyOps.js.map +1 -1
- package/esm/ops/PolicySetOps.js +35 -18
- package/esm/ops/PolicySetOps.js.map +1 -1
- package/esm/ops/RealmOps.js +11 -6
- package/esm/ops/RealmOps.js.map +1 -1
- package/esm/ops/ResourceTypeOps.js +34 -18
- package/esm/ops/ResourceTypeOps.js.map +1 -1
- package/esm/ops/Saml2Ops.js +43 -23
- package/esm/ops/Saml2Ops.js.map +1 -1
- package/esm/ops/ScriptOps.js +18 -10
- package/esm/ops/ScriptOps.js.map +1 -1
- package/esm/ops/SecretsOps.js +28 -14
- package/esm/ops/SecretsOps.js.map +1 -1
- package/esm/ops/ServiceOps.js +38 -17
- package/esm/ops/ServiceOps.js.map +1 -1
- package/esm/ops/ThemeOps.js +35 -19
- package/esm/ops/ThemeOps.js.map +1 -1
- package/esm/ops/VariablesOps.js +23 -12
- package/esm/ops/VariablesOps.js.map +1 -1
- package/esm/utils/Config.js +6 -3
- package/esm/utils/Config.js.map +1 -1
- package/esm/utils/Console.js +5 -2
- package/esm/utils/Console.js.map +1 -1
- package/esm/utils/ExportImportUtils.js +6 -3
- package/esm/utils/ExportImportUtils.js.map +1 -1
- package/esm/utils/Version.js +7 -3
- package/esm/utils/Version.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CirclesOfTrustOps.js","names":["frodo","state","fs","createProgressBar","createTable","debugMessage","failSpinner","printMessage","showSpinner","stopProgressBar","succeedSpinner","updateProgressBar","getTypedFilename","saveJsonToFile","titleCase","getOneLineDescription","cotObj","description","_id","getTableHeaderMd","markdown","getTableRowMd","row","status","trustedProviders","map","provider","split","join","listCirclesOfTrust","long","outcome","cotList","saml2","circlesOfTrust","getCirclesOfTrust","error","sort","a","b","localeCompare","forEach","cot","table","push","toString","exportCircleOfTrustToFile","cotId","file","fileName","exportData","exportCircleOfTrust","message","exportCirclesOfTrustToFile","helper","utils","getRealmName","getRealm","exportCirclesOfTrust","exportCirclesOfTrustToFiles","errors","cots","length","name","importCircleOfTrustFromFile","readFile","err","data","fileData","JSON","parse","importCircleOfTrust","_error$response","response","importFirstCircleOfTrustFromFile","importFirstCircleOfTrust","_error$response2","importCirclesOfTrustFromFile","importCirclesOfTrust","_error$response3","importCirclesOfTrustFromFiles","names","readdirSync","files","filter","toLowerCase","endsWith","total","readFileSync","count","Object","keys","saml"],"sources":["ops/CirclesOfTrustOps.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport fs from 'fs';\nimport {\n createProgressBar,\n createTable,\n debugMessage,\n failSpinner,\n printMessage,\n showSpinner,\n stopProgressBar,\n succeedSpinner,\n updateProgressBar,\n} from '../utils/Console';\nimport type { CircleOfTrustSkeleton } from '@rockcarver/frodo-lib/types/api/ApiTypes';\nimport {\n getTypedFilename,\n saveJsonToFile,\n titleCase,\n} from '../utils/ExportImportUtils';\nimport type { CirclesOfTrustExportInterface } from '@rockcarver/frodo-lib/types/ops/OpsTypes';\n\n/**\n * Get a one-line description of the circle of trust object\n * @param {CircleOfTrustSkeleton} cotObj circle of trust object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescription(cotObj: CircleOfTrustSkeleton): string {\n const description = `[${cotObj._id['brightCyan']}]`;\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 += '| Name/Id | Status | Trusted Providers |\\n';\n markdown += '| ------- | ------ | ----------------- |';\n return markdown;\n}\n\n/**\n * Get a table-row of the circle of trust in markdown\n * @param {SocialIdpSkeleton} cotObj circle of trust object to describe\n * @returns {string} a table-row of the circle of trust in markdown\n */\nexport function getTableRowMd(cotObj: CircleOfTrustSkeleton): string {\n const row = `| ${cotObj._id} | ${\n cotObj.status === 'active'\n ? ':white_check_mark: `active`'\n : ':o: `inactive`'\n } | ${cotObj.trustedProviders\n .map((provider) => provider.split('|')[0])\n .join('<br>')} |`;\n return row;\n}\n\n/**\n * List entity providers\n * @param {String} long Long list format with details\n */\nexport async function listCirclesOfTrust(long = false): Promise<boolean> {\n let outcome = false;\n let cotList = [];\n try {\n cotList = await frodo.saml2.circlesOfTrust.getCirclesOfTrust();\n } catch (error) {\n printMessage(`getCirclesOfTrust ERROR: ${error}`, 'error');\n printMessage(error, 'data');\n }\n cotList.sort((a, b) => a._id.localeCompare(b._id));\n if (!long) {\n cotList.forEach((cot) => {\n printMessage(`${cot._id}`, 'data');\n });\n outcome = true;\n } else {\n const table = createTable([\n 'Name'['brightCyan'],\n 'Description'['brightCyan'],\n 'Status'['brightCyan'],\n 'Trusted Providers'['brightCyan'],\n ]);\n cotList.forEach((cot) => {\n table.push([\n cot._id,\n cot.description,\n cot.status,\n cot.trustedProviders\n .map((provider) => provider.split('|')[0])\n .join('\\n'),\n ]);\n });\n printMessage(table.toString());\n outcome = true;\n }\n return outcome;\n}\n\n/**\n * Export a single circle of trust to file\n * @param {String} cotId circle of trust id/name\n * @param {String} file Optional filename\n */\nexport async function exportCircleOfTrustToFile(\n cotId: string,\n file: string = null\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.CirclesOfTrustOps.exportCircleOfTrustToFile: begin`);\n showSpinner(`Exporting ${cotId}...`);\n try {\n let fileName = getTypedFilename(cotId, 'cot.saml');\n if (file) {\n fileName = file;\n }\n const exportData = await frodo.saml2.circlesOfTrust.exportCircleOfTrust(\n cotId\n );\n saveJsonToFile(exportData, fileName);\n succeedSpinner(`Exported ${cotId} to ${fileName}.`);\n outcome = true;\n } catch (error) {\n failSpinner(`Error exporting ${cotId}: ${error.message}`);\n }\n debugMessage(`cli.CirclesOfTrustOps.exportCircleOfTrustToFile: end`);\n return outcome;\n}\n\n/**\n * Export all circles of trust to one file\n * @param {String} file Optional filename\n */\nexport async function exportCirclesOfTrustToFile(\n file: string = null\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.CirclesOfTrustOps.exportCirclesOfTrustToFile: begin`);\n showSpinner(`Exporting all circles of trust...`);\n try {\n let fileName = getTypedFilename(\n `all${titleCase(\n frodo.helper.utils.getRealmName(state.getRealm())\n )}CirclesOfTrust`,\n 'cot.saml'\n );\n if (file) {\n fileName = file;\n }\n const exportData = await frodo.saml2.circlesOfTrust.exportCirclesOfTrust();\n saveJsonToFile(exportData, fileName);\n succeedSpinner(`Exported all circles of trust to ${fileName}.`);\n outcome = true;\n } catch (error) {\n failSpinner(`Error exporting circles of trust: ${error.message}`);\n }\n debugMessage(`cli.CirclesOfTrustOps.exportCirclesOfTrustToFile: end`);\n return outcome;\n}\n\n/**\n * Export all circles of trust to individual files\n */\nexport async function exportCirclesOfTrustToFiles(): Promise<boolean> {\n debugMessage(`cli.CirclesOfTrustOps.exportCirclesOfTrustToFiles: begin`);\n const errors = [];\n try {\n const cots: CircleOfTrustSkeleton[] =\n await frodo.saml2.circlesOfTrust.getCirclesOfTrust();\n createProgressBar(cots.length, 'Exporting circles of trust...');\n for (const cot of cots) {\n const file = getTypedFilename(cot._id, 'cot.saml');\n try {\n const exportData: CirclesOfTrustExportInterface =\n await frodo.saml2.circlesOfTrust.exportCircleOfTrust(cot._id);\n saveJsonToFile(exportData, file);\n updateProgressBar(`Exported ${cot.name}.`);\n } catch (error) {\n errors.push(error);\n updateProgressBar(`Error exporting ${cot.name}.`);\n }\n }\n stopProgressBar(`Export complete.`);\n } catch (error) {\n errors.push(error);\n stopProgressBar(`Error exporting circles of trust to files`);\n }\n debugMessage(`cli.CirclesOfTrustOps.exportCirclesOfTrustToFiles: end`);\n return 0 === errors.length;\n}\n\n/**\n * Import a SAML circle of trust by id/name from file\n * @param {String} cotId Circle of trust id/name\n * @param {String} file Import file name\n */\nexport async function importCircleOfTrustFromFile(\n cotId: string,\n file: string\n): Promise<boolean> {\n let outcome = false;\n showSpinner(`Importing circle of trust ${cotId} from ${file}...`);\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n try {\n const fileData = JSON.parse(data);\n await frodo.saml2.circlesOfTrust.importCircleOfTrust(cotId, fileData);\n outcome = true;\n succeedSpinner(`Imported circle of trust ${cotId} from ${file}.`);\n } catch (error) {\n failSpinner(`Error importing circle of trust ${cotId} from ${file}.`);\n printMessage(error.response?.data || error, 'error');\n }\n });\n return outcome;\n}\n\n/**\n * Import first SAML circle of trust from file\n * @param {String} file Import file name\n */\nexport async function importFirstCircleOfTrustFromFile(\n file: string\n): Promise<boolean> {\n let outcome = false;\n showSpinner(`Importing first circle of trust from ${file}...`);\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n try {\n const fileData = JSON.parse(data);\n await frodo.saml2.circlesOfTrust.importFirstCircleOfTrust(fileData);\n outcome = true;\n succeedSpinner(`Imported first circle of trust from ${file}.`);\n } catch (error) {\n failSpinner(`Error importing first circle of trust from ${file}.`);\n printMessage(error.response?.data || error, 'error');\n }\n });\n return outcome;\n}\n\n/**\n * Import all SAML circles of trust from file\n * @param {String} file Import file name\n */\nexport async function importCirclesOfTrustFromFile(\n file: string\n): Promise<boolean> {\n let outcome = false;\n showSpinner(`Importing circles of trust from ${file}...`);\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n try {\n const fileData = JSON.parse(data);\n await frodo.saml2.circlesOfTrust.importCirclesOfTrust(fileData);\n outcome = true;\n succeedSpinner(`Imported circles of trust from ${file}.`);\n } catch (error) {\n failSpinner(`Error importing circles of trust from ${file}.`);\n printMessage(error.response?.data || error, 'error');\n }\n });\n return outcome;\n}\n\n/**\n * Import all SAML circles of trust from all *.cot.saml.json files in the current directory\n */\nexport async function importCirclesOfTrustFromFiles(): Promise<boolean> {\n const errors = [];\n try {\n debugMessage(`cli.CirclesOfTrustOps.importCirclesOfTrustFromFiles: begin`);\n const names = fs.readdirSync('.');\n const files = names.filter((name) =>\n name.toLowerCase().endsWith('.policy.authz.json')\n );\n createProgressBar(files.length, 'Importing circles of trust...');\n let total = 0;\n for (const file of files) {\n try {\n const data = fs.readFileSync(file, 'utf8');\n const fileData: CirclesOfTrustExportInterface = JSON.parse(data);\n const count = Object.keys(fileData.saml.cot).length;\n total += count;\n await frodo.saml2.circlesOfTrust.importCirclesOfTrust(fileData);\n updateProgressBar(`Imported ${count} circles of trust from ${file}`);\n } catch (error) {\n errors.push(error);\n updateProgressBar(`Error importing circles of trust from ${file}`);\n printMessage(error, 'error');\n }\n }\n stopProgressBar(\n `Imported ${total} circles of trust from ${files.length} files.`\n );\n } catch (error) {\n errors.push(error);\n stopProgressBar(`Error importing circles of trust from files.`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.CirclesOfTrustOps.importCirclesOfTrustFromFiles: end`);\n return 0 === errors.length;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CirclesOfTrustOps.js","names":["frodo","state","fs","createProgressBar","createTable","debugMessage","failSpinner","printMessage","showSpinner","stopProgressBar","succeedSpinner","updateProgressBar","getTypedFilename","saveJsonToFile","titleCase","getRealmName","helper","utils","getCirclesOfTrust","exportCircleOfTrust","exportCirclesOfTrust","importCircleOfTrust","importCirclesOfTrust","importFirstCircleOfTrust","saml2","circlesOfTrust","getOneLineDescription","cotObj","description","_id","getTableHeaderMd","markdown","getTableRowMd","row","status","trustedProviders","map","provider","split","join","listCirclesOfTrust","long","outcome","cotList","error","sort","a","b","localeCompare","forEach","cot","table","push","toString","exportCircleOfTrustToFile","cotId","file","fileName","exportData","message","exportCirclesOfTrustToFile","getRealm","exportCirclesOfTrustToFiles","errors","cots","length","name","importCircleOfTrustFromFile","readFile","err","data","fileData","JSON","parse","_error$response","response","importFirstCircleOfTrustFromFile","_error$response2","importCirclesOfTrustFromFile","_error$response3","importCirclesOfTrustFromFiles","names","readdirSync","files","filter","toLowerCase","endsWith","total","readFileSync","count","Object","keys","saml"],"sources":["ops/CirclesOfTrustOps.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport fs from 'fs';\nimport {\n createProgressBar,\n createTable,\n debugMessage,\n failSpinner,\n printMessage,\n showSpinner,\n stopProgressBar,\n succeedSpinner,\n updateProgressBar,\n} from '../utils/Console';\nimport type { CircleOfTrustSkeleton } from '@rockcarver/frodo-lib/types/api/ApiTypes';\nimport {\n getTypedFilename,\n saveJsonToFile,\n titleCase,\n} from '../utils/ExportImportUtils';\nimport type { CirclesOfTrustExportInterface } from '@rockcarver/frodo-lib/types/ops/OpsTypes';\n\nconst { getRealmName } = frodo.helper.utils;\nconst {\n getCirclesOfTrust,\n exportCircleOfTrust,\n exportCirclesOfTrust,\n importCircleOfTrust,\n importCirclesOfTrust,\n importFirstCircleOfTrust,\n} = frodo.saml2.circlesOfTrust;\n\n/**\n * Get a one-line description of the circle of trust object\n * @param {CircleOfTrustSkeleton} cotObj circle of trust object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescription(cotObj: CircleOfTrustSkeleton): string {\n const description = `[${cotObj._id['brightCyan']}]`;\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 += '| Name/Id | Status | Trusted Providers |\\n';\n markdown += '| ------- | ------ | ----------------- |';\n return markdown;\n}\n\n/**\n * Get a table-row of the circle of trust in markdown\n * @param {SocialIdpSkeleton} cotObj circle of trust object to describe\n * @returns {string} a table-row of the circle of trust in markdown\n */\nexport function getTableRowMd(cotObj: CircleOfTrustSkeleton): string {\n const row = `| ${cotObj._id} | ${\n cotObj.status === 'active'\n ? ':white_check_mark: `active`'\n : ':o: `inactive`'\n } | ${cotObj.trustedProviders\n .map((provider) => provider.split('|')[0])\n .join('<br>')} |`;\n return row;\n}\n\n/**\n * List entity providers\n * @param {String} long Long list format with details\n */\nexport async function listCirclesOfTrust(long = false): Promise<boolean> {\n let outcome = false;\n let cotList = [];\n try {\n cotList = await getCirclesOfTrust();\n } catch (error) {\n printMessage(`getCirclesOfTrust ERROR: ${error}`, 'error');\n printMessage(error, 'data');\n }\n cotList.sort((a, b) => a._id.localeCompare(b._id));\n if (!long) {\n cotList.forEach((cot) => {\n printMessage(`${cot._id}`, 'data');\n });\n outcome = true;\n } else {\n const table = createTable([\n 'Name'['brightCyan'],\n 'Description'['brightCyan'],\n 'Status'['brightCyan'],\n 'Trusted Providers'['brightCyan'],\n ]);\n cotList.forEach((cot) => {\n table.push([\n cot._id,\n cot.description,\n cot.status,\n cot.trustedProviders\n .map((provider) => provider.split('|')[0])\n .join('\\n'),\n ]);\n });\n printMessage(table.toString());\n outcome = true;\n }\n return outcome;\n}\n\n/**\n * Export a single circle of trust to file\n * @param {String} cotId circle of trust id/name\n * @param {String} file Optional filename\n */\nexport async function exportCircleOfTrustToFile(\n cotId: string,\n file: string = null\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.CirclesOfTrustOps.exportCircleOfTrustToFile: begin`);\n showSpinner(`Exporting ${cotId}...`);\n try {\n let fileName = getTypedFilename(cotId, 'cot.saml');\n if (file) {\n fileName = file;\n }\n const exportData = await exportCircleOfTrust(cotId);\n saveJsonToFile(exportData, fileName);\n succeedSpinner(`Exported ${cotId} to ${fileName}.`);\n outcome = true;\n } catch (error) {\n failSpinner(`Error exporting ${cotId}: ${error.message}`);\n }\n debugMessage(`cli.CirclesOfTrustOps.exportCircleOfTrustToFile: end`);\n return outcome;\n}\n\n/**\n * Export all circles of trust to one file\n * @param {String} file Optional filename\n */\nexport async function exportCirclesOfTrustToFile(\n file: string = null\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.CirclesOfTrustOps.exportCirclesOfTrustToFile: begin`);\n showSpinner(`Exporting all circles of trust...`);\n try {\n let fileName = getTypedFilename(\n `all${titleCase(getRealmName(state.getRealm()))}CirclesOfTrust`,\n 'cot.saml'\n );\n if (file) {\n fileName = file;\n }\n const exportData = await exportCirclesOfTrust();\n saveJsonToFile(exportData, fileName);\n succeedSpinner(`Exported all circles of trust to ${fileName}.`);\n outcome = true;\n } catch (error) {\n failSpinner(`Error exporting circles of trust: ${error.message}`);\n }\n debugMessage(`cli.CirclesOfTrustOps.exportCirclesOfTrustToFile: end`);\n return outcome;\n}\n\n/**\n * Export all circles of trust to individual files\n */\nexport async function exportCirclesOfTrustToFiles(): Promise<boolean> {\n debugMessage(`cli.CirclesOfTrustOps.exportCirclesOfTrustToFiles: begin`);\n const errors = [];\n try {\n const cots: CircleOfTrustSkeleton[] = await getCirclesOfTrust();\n createProgressBar(cots.length, 'Exporting circles of trust...');\n for (const cot of cots) {\n const file = getTypedFilename(cot._id, 'cot.saml');\n try {\n const exportData: CirclesOfTrustExportInterface =\n await exportCircleOfTrust(cot._id);\n saveJsonToFile(exportData, file);\n updateProgressBar(`Exported ${cot.name}.`);\n } catch (error) {\n errors.push(error);\n updateProgressBar(`Error exporting ${cot.name}.`);\n }\n }\n stopProgressBar(`Export complete.`);\n } catch (error) {\n errors.push(error);\n stopProgressBar(`Error exporting circles of trust to files`);\n }\n debugMessage(`cli.CirclesOfTrustOps.exportCirclesOfTrustToFiles: end`);\n return 0 === errors.length;\n}\n\n/**\n * Import a SAML circle of trust by id/name from file\n * @param {String} cotId Circle of trust id/name\n * @param {String} file Import file name\n */\nexport async function importCircleOfTrustFromFile(\n cotId: string,\n file: string\n): Promise<boolean> {\n let outcome = false;\n showSpinner(`Importing circle of trust ${cotId} from ${file}...`);\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n try {\n const fileData = JSON.parse(data);\n await importCircleOfTrust(cotId, fileData);\n outcome = true;\n succeedSpinner(`Imported circle of trust ${cotId} from ${file}.`);\n } catch (error) {\n failSpinner(`Error importing circle of trust ${cotId} from ${file}.`);\n printMessage(error.response?.data || error, 'error');\n }\n });\n return outcome;\n}\n\n/**\n * Import first SAML circle of trust from file\n * @param {String} file Import file name\n */\nexport async function importFirstCircleOfTrustFromFile(\n file: string\n): Promise<boolean> {\n let outcome = false;\n showSpinner(`Importing first circle of trust from ${file}...`);\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n try {\n const fileData = JSON.parse(data);\n await importFirstCircleOfTrust(fileData);\n outcome = true;\n succeedSpinner(`Imported first circle of trust from ${file}.`);\n } catch (error) {\n failSpinner(`Error importing first circle of trust from ${file}.`);\n printMessage(error.response?.data || error, 'error');\n }\n });\n return outcome;\n}\n\n/**\n * Import all SAML circles of trust from file\n * @param {String} file Import file name\n */\nexport async function importCirclesOfTrustFromFile(\n file: string\n): Promise<boolean> {\n let outcome = false;\n showSpinner(`Importing circles of trust from ${file}...`);\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n try {\n const fileData = JSON.parse(data);\n await importCirclesOfTrust(fileData);\n outcome = true;\n succeedSpinner(`Imported circles of trust from ${file}.`);\n } catch (error) {\n failSpinner(`Error importing circles of trust from ${file}.`);\n printMessage(error.response?.data || error, 'error');\n }\n });\n return outcome;\n}\n\n/**\n * Import all SAML circles of trust from all *.cot.saml.json files in the current directory\n */\nexport async function importCirclesOfTrustFromFiles(): Promise<boolean> {\n const errors = [];\n try {\n debugMessage(`cli.CirclesOfTrustOps.importCirclesOfTrustFromFiles: begin`);\n const names = fs.readdirSync('.');\n const files = names.filter((name) =>\n name.toLowerCase().endsWith('.policy.authz.json')\n );\n createProgressBar(files.length, 'Importing circles of trust...');\n let total = 0;\n for (const file of files) {\n try {\n const data = fs.readFileSync(file, 'utf8');\n const fileData: CirclesOfTrustExportInterface = JSON.parse(data);\n const count = Object.keys(fileData.saml.cot).length;\n total += count;\n await importCirclesOfTrust(fileData);\n updateProgressBar(`Imported ${count} circles of trust from ${file}`);\n } catch (error) {\n errors.push(error);\n updateProgressBar(`Error importing circles of trust from ${file}`);\n printMessage(error, 'error');\n }\n }\n stopProgressBar(\n `Imported ${total} circles of trust from ${files.length} files.`\n );\n } catch (error) {\n errors.push(error);\n stopProgressBar(`Error importing circles of trust from files.`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.CirclesOfTrustOps.importCirclesOfTrustFromFiles: end`);\n return 0 === errors.length;\n}\n"],"mappings":"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"}
|
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
import fs from 'fs';
|
|
2
2
|
import { frodo, state } from '@rockcarver/frodo-lib';
|
|
3
3
|
import { createObjectTable, createTable, debugMessage, failSpinner, printMessage, showSpinner, succeedSpinner } from '../utils/Console';
|
|
4
|
+
const {
|
|
5
|
+
getAccessTokenForServiceAccount
|
|
6
|
+
} = frodo.login;
|
|
7
|
+
const {
|
|
8
|
+
getConnectionProfilesPath,
|
|
9
|
+
getConnectionProfileByHost
|
|
10
|
+
} = frodo.conn;
|
|
4
11
|
|
|
5
12
|
/**
|
|
6
13
|
* List connection profiles
|
|
@@ -8,7 +15,7 @@ import { createObjectTable, createTable, debugMessage, failSpinner, printMessage
|
|
|
8
15
|
* @param {State} state library state
|
|
9
16
|
*/
|
|
10
17
|
export function listConnectionProfiles(long = false) {
|
|
11
|
-
const filename =
|
|
18
|
+
const filename = getConnectionProfilesPath();
|
|
12
19
|
try {
|
|
13
20
|
const data = fs.readFileSync(filename, 'utf8');
|
|
14
21
|
const connectionsData = JSON.parse(data);
|
|
@@ -42,7 +49,7 @@ export function listConnectionProfiles(long = false) {
|
|
|
42
49
|
*/
|
|
43
50
|
export async function describeConnectionProfile(host, showSecrets) {
|
|
44
51
|
debugMessage(`ConnectionProfileOps.describeConnectionProfile: start`);
|
|
45
|
-
const profile = await
|
|
52
|
+
const profile = await getConnectionProfileByHost(host);
|
|
46
53
|
if (profile) {
|
|
47
54
|
debugMessage(profile);
|
|
48
55
|
const present = '[present]';
|
|
@@ -99,7 +106,7 @@ export async function addExistingServiceAccount(serviceAccountId, privateKeyFile
|
|
|
99
106
|
const jwk = JSON.parse(data.toString());
|
|
100
107
|
if (validate) {
|
|
101
108
|
showSpinner(`Validating service account ${serviceAccountId}...`);
|
|
102
|
-
const token = await
|
|
109
|
+
const token = await getAccessTokenForServiceAccount(serviceAccountId, jwk);
|
|
103
110
|
if (token === null) {
|
|
104
111
|
failSpinner(`Failed to validate service account ${serviceAccountId}.`);
|
|
105
112
|
return false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConnectionProfileOps.js","names":["fs","frodo","state","createObjectTable","createTable","debugMessage","failSpinner","printMessage","showSpinner","succeedSpinner","
|
|
1
|
+
{"version":3,"file":"ConnectionProfileOps.js","names":["fs","frodo","state","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":["ops/ConnectionProfileOps.ts"],"sourcesContent":["import fs from 'fs';\nimport { frodo, state } from '@rockcarver/frodo-lib';\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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"}
|
|
@@ -5,7 +5,15 @@ import { createProgressIndicator, updateProgressIndicator, stopProgressIndicator
|
|
|
5
5
|
import wordwrap from './utils/Wordwrap';
|
|
6
6
|
import path from 'path';
|
|
7
7
|
import { cloneDeep } from './utils/OpsUtils';
|
|
8
|
-
const
|
|
8
|
+
const {
|
|
9
|
+
validateImport
|
|
10
|
+
} = frodo.utils.impex;
|
|
11
|
+
const {
|
|
12
|
+
EMAIL_TEMPLATE_TYPE,
|
|
13
|
+
getEmailTemplates,
|
|
14
|
+
getEmailTemplate,
|
|
15
|
+
putEmailTemplate
|
|
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 = (await
|
|
69
|
+
emailTemplates = (await getEmailTemplates()).result;
|
|
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 getEmailTemplate(templateId);
|
|
105
113
|
updateProgressIndicator(`Writing file ${fileName}`);
|
|
106
114
|
const fileData = getFileDataTemplate();
|
|
107
115
|
fileData.emailTemplate[templateId] = templateData;
|
|
@@ -124,7 +132,7 @@ export async function exportEmailTemplatesToFile(file) {
|
|
|
124
132
|
}
|
|
125
133
|
try {
|
|
126
134
|
const fileData = getFileDataTemplate();
|
|
127
|
-
const response = await
|
|
135
|
+
const response = await getEmailTemplates();
|
|
128
136
|
const templates = response.result;
|
|
129
137
|
createProgressIndicator('determinate', response.resultCount, 'Exporting email templates');
|
|
130
138
|
for (const template of templates) {
|
|
@@ -145,7 +153,7 @@ export async function exportEmailTemplatesToFile(file) {
|
|
|
145
153
|
*/
|
|
146
154
|
export async function exportEmailTemplatesToFiles() {
|
|
147
155
|
try {
|
|
148
|
-
const response = await
|
|
156
|
+
const response = await getEmailTemplates();
|
|
149
157
|
const templates = response.result;
|
|
150
158
|
createProgressIndicator('determinate', response.resultCount, 'Exporting email templates');
|
|
151
159
|
for (const template of templates) {
|
|
@@ -175,12 +183,12 @@ export async function importEmailTemplateFromFile(templateId, file, raw = false)
|
|
|
175
183
|
fs.readFile(file, 'utf8', async (err, data) => {
|
|
176
184
|
if (err) throw err;
|
|
177
185
|
const fileData = JSON.parse(data);
|
|
178
|
-
if (raw ||
|
|
186
|
+
if (raw || validateImport(fileData.meta)) {
|
|
179
187
|
createProgressIndicator('determinate', 1, `Importing ${templateId}`);
|
|
180
188
|
if (fileData.emailTemplate[templateId] || raw && fileData._id === templateId) {
|
|
181
189
|
try {
|
|
182
190
|
const emailTemplateData = raw ? s2sConvert(fileData) : fileData.emailTemplate[templateId];
|
|
183
|
-
await
|
|
191
|
+
await putEmailTemplate(templateId, emailTemplateData);
|
|
184
192
|
updateProgressIndicator(`Importing ${templateId}`);
|
|
185
193
|
stopProgressIndicator(`Imported ${templateId}`);
|
|
186
194
|
} catch (putEmailTemplateError) {
|
|
@@ -205,13 +213,13 @@ export async function importEmailTemplatesFromFile(file) {
|
|
|
205
213
|
fs.readFile(file, 'utf8', async (err, data) => {
|
|
206
214
|
if (err) throw err;
|
|
207
215
|
const fileData = JSON.parse(data);
|
|
208
|
-
if (
|
|
216
|
+
if (validateImport(fileData.meta)) {
|
|
209
217
|
createProgressIndicator('determinate', Object.keys(fileData.emailTemplate).length, `Importing email templates`);
|
|
210
218
|
for (const id in fileData.emailTemplate) {
|
|
211
219
|
if ({}.hasOwnProperty.call(fileData.emailTemplate, id)) {
|
|
212
220
|
const templateId = id.replace(regexEmailTemplateType, '');
|
|
213
221
|
try {
|
|
214
|
-
await
|
|
222
|
+
await putEmailTemplate(templateId, fileData.emailTemplate[templateId]);
|
|
215
223
|
updateProgressIndicator(`Imported ${templateId}`);
|
|
216
224
|
} catch (putEmailTemplateError) {
|
|
217
225
|
printMessage(`\nError importing ${templateId}`, 'error');
|
|
@@ -270,14 +278,14 @@ export async function importEmailTemplatesFromFiles(raw = false) {
|
|
|
270
278
|
for (const file of jsonFiles) {
|
|
271
279
|
const data = fs.readFileSync(file, 'utf8');
|
|
272
280
|
const fileData = JSON.parse(data);
|
|
273
|
-
if (raw && file.startsWith('emailTemplate-') ||
|
|
281
|
+
if (raw && file.startsWith('emailTemplate-') || validateImport(fileData.meta)) {
|
|
274
282
|
let errors = 0;
|
|
275
283
|
if (raw) {
|
|
276
284
|
total++;
|
|
277
285
|
const templateId = getEmailTemplateIdFromFile(file);
|
|
278
286
|
try {
|
|
279
287
|
const templateData = s2sConvert(fileData);
|
|
280
|
-
await
|
|
288
|
+
await putEmailTemplate(templateId, templateData);
|
|
281
289
|
} catch (putEmailTemplateError) {
|
|
282
290
|
var _putEmailTemplateErro;
|
|
283
291
|
errors += 1;
|
|
@@ -291,7 +299,7 @@ export async function importEmailTemplatesFromFiles(raw = false) {
|
|
|
291
299
|
if ({}.hasOwnProperty.call(fileData.emailTemplate, id)) {
|
|
292
300
|
const templateId = id.replace(regexEmailTemplateType, '');
|
|
293
301
|
try {
|
|
294
|
-
await
|
|
302
|
+
await putEmailTemplate(templateId, fileData.emailTemplate[templateId]);
|
|
295
303
|
} catch (putEmailTemplateError) {
|
|
296
304
|
errors += 1;
|
|
297
305
|
printMessage(`\nError importing ${templateId}`, 'error');
|
|
@@ -317,13 +325,13 @@ export async function importFirstEmailTemplateFromFile(file, raw = false) {
|
|
|
317
325
|
fs.readFile(file, 'utf8', async (err, data) => {
|
|
318
326
|
if (err) throw err;
|
|
319
327
|
const fileData = JSON.parse(data);
|
|
320
|
-
if (raw && file.startsWith('emailTemplate-') ||
|
|
328
|
+
if (raw && file.startsWith('emailTemplate-') || validateImport(fileData.meta)) {
|
|
321
329
|
showSpinner(`Importing first email template`);
|
|
322
330
|
if (raw) {
|
|
323
331
|
const templateId = getEmailTemplateIdFromFile(file);
|
|
324
332
|
try {
|
|
325
333
|
const templateData = s2sConvert(fileData);
|
|
326
|
-
await
|
|
334
|
+
await putEmailTemplate(templateId, templateData);
|
|
327
335
|
succeedSpinner(`Imported ${templateId}`);
|
|
328
336
|
} catch (putEmailTemplateError) {
|
|
329
337
|
var _putEmailTemplateErro2;
|
|
@@ -334,7 +342,7 @@ export async function importFirstEmailTemplateFromFile(file, raw = false) {
|
|
|
334
342
|
for (const id in fileData.emailTemplate) {
|
|
335
343
|
if ({}.hasOwnProperty.call(fileData.emailTemplate, id)) {
|
|
336
344
|
try {
|
|
337
|
-
await
|
|
345
|
+
await putEmailTemplate(id.replace(regexEmailTemplateType, ''), fileData.emailTemplate[id]);
|
|
338
346
|
succeedSpinner(`Imported ${id}`);
|
|
339
347
|
} catch (putEmailTemplateError) {
|
|
340
348
|
var _putEmailTemplateErro3;
|
|
@@ -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","getTypedFilename","saveJsonToFile","createProgressIndicator","updateProgressIndicator","stopProgressIndicator","printMessage","createTable","showSpinner","succeedSpinner","failSpinner","debugMessage","wordwrap","path","cloneDeep","validateImport","utils","impex","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":["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.impex;\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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"}
|