@rockcarver/frodo-cli 1.0.1 → 2.0.0-10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.vscode/launch.json +15 -0
- package/CHANGELOG.md +49 -4
- package/esm/app.js +4 -4
- package/esm/app.js.map +1 -1
- package/esm/cli/FrodoCommand.js +13 -10
- package/esm/cli/FrodoCommand.js.map +1 -1
- package/esm/cli/_template/something-delete.js +2 -2
- package/esm/cli/_template/something-delete.js.map +1 -1
- package/esm/cli/_template/something-describe.js +2 -2
- package/esm/cli/_template/something-describe.js.map +1 -1
- package/esm/cli/_template/something-else-delete.js +2 -2
- package/esm/cli/_template/something-else-delete.js.map +1 -1
- package/esm/cli/_template/something-else-describe.js +2 -2
- package/esm/cli/_template/something-else-describe.js.map +1 -1
- package/esm/cli/_template/something-else-export.js +2 -2
- package/esm/cli/_template/something-else-export.js.map +1 -1
- package/esm/cli/_template/something-else-import.js +2 -2
- package/esm/cli/_template/something-else-import.js.map +1 -1
- package/esm/cli/_template/something-else-list.js +2 -2
- package/esm/cli/_template/something-else-list.js.map +1 -1
- package/esm/cli/_template/something-export.js +2 -2
- package/esm/cli/_template/something-export.js.map +1 -1
- package/esm/cli/_template/something-import.js +2 -2
- package/esm/cli/_template/something-import.js.map +1 -1
- package/esm/cli/_template/something-list.js +2 -2
- package/esm/cli/_template/something-list.js.map +1 -1
- package/esm/cli/_template/something-other-delete.js +2 -2
- package/esm/cli/_template/something-other-delete.js.map +1 -1
- package/esm/cli/_template/something-other-describe.js +2 -2
- package/esm/cli/_template/something-other-describe.js.map +1 -1
- package/esm/cli/_template/something-other-export.js +2 -2
- package/esm/cli/_template/something-other-export.js.map +1 -1
- package/esm/cli/_template/something-other-import.js +2 -2
- package/esm/cli/_template/something-other-import.js.map +1 -1
- package/esm/cli/_template/something-other-list.js +2 -2
- package/esm/cli/_template/something-other-list.js.map +1 -1
- package/esm/cli/admin/admin-add-autoid-static-user-mapping.js +3 -3
- 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 +5 -5
- package/esm/cli/admin/admin-create-oauth2-client-with-admin-privileges.js.map +1 -1
- package/esm/cli/admin/admin-federation-export.js +2 -2
- package/esm/cli/admin/admin-federation-export.js.map +1 -1
- package/esm/cli/admin/admin-federation-import.js +2 -2
- package/esm/cli/admin/admin-federation-import.js.map +1 -1
- package/esm/cli/admin/admin-federation-list.js +2 -2
- package/esm/cli/admin/admin-federation-list.js.map +1 -1
- package/esm/cli/admin/admin-get-access-token.js +6 -6
- package/esm/cli/admin/admin-get-access-token.js.map +1 -1
- package/esm/cli/admin/admin-grant-oauth2-client-admin-privileges.js +3 -3
- package/esm/cli/admin/admin-grant-oauth2-client-admin-privileges.js.map +1 -1
- package/esm/cli/admin/admin-hide-generic-extension-attributes.js +3 -3
- 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 +5 -5
- 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 +5 -5
- package/esm/cli/admin/admin-list-oauth2-clients-with-custom-privileges.js.map +1 -1
- package/esm/cli/admin/admin-list-static-user-mappings.js +3 -3
- package/esm/cli/admin/admin-list-static-user-mappings.js.map +1 -1
- package/esm/cli/admin/admin-remove-static-user-mapping.js +3 -3
- package/esm/cli/admin/admin-remove-static-user-mapping.js.map +1 -1
- package/esm/cli/admin/admin-repair-org-model.js +3 -3
- package/esm/cli/admin/admin-repair-org-model.js.map +1 -1
- package/esm/cli/admin/admin-revoke-oauth2-client-admin-privileges.js +3 -3
- package/esm/cli/admin/admin-revoke-oauth2-client-admin-privileges.js.map +1 -1
- package/esm/cli/admin/admin-show-generic-extension-attributes.js +5 -5
- package/esm/cli/admin/admin-show-generic-extension-attributes.js.map +1 -1
- package/esm/cli/agent/agent-delete.js +5 -5
- package/esm/cli/agent/agent-delete.js.map +1 -1
- package/esm/cli/agent/agent-describe.js +2 -2
- package/esm/cli/agent/agent-describe.js.map +1 -1
- package/esm/cli/agent/agent-export.js +2 -2
- package/esm/cli/agent/agent-export.js.map +1 -1
- package/esm/cli/agent/agent-gateway-delete.js +3 -3
- package/esm/cli/agent/agent-gateway-delete.js.map +1 -1
- package/esm/cli/agent/agent-gateway-describe.js +2 -2
- package/esm/cli/agent/agent-gateway-describe.js.map +1 -1
- package/esm/cli/agent/agent-gateway-export.js +2 -2
- package/esm/cli/agent/agent-gateway-export.js.map +1 -1
- package/esm/cli/agent/agent-gateway-import.js +2 -2
- package/esm/cli/agent/agent-gateway-import.js.map +1 -1
- package/esm/cli/agent/agent-gateway-list.js +2 -2
- package/esm/cli/agent/agent-gateway-list.js.map +1 -1
- package/esm/cli/agent/agent-import.js +2 -2
- package/esm/cli/agent/agent-import.js.map +1 -1
- package/esm/cli/agent/agent-java-delete.js +3 -3
- package/esm/cli/agent/agent-java-delete.js.map +1 -1
- package/esm/cli/agent/agent-java-describe.js +2 -2
- package/esm/cli/agent/agent-java-describe.js.map +1 -1
- package/esm/cli/agent/agent-java-export.js +2 -2
- package/esm/cli/agent/agent-java-export.js.map +1 -1
- package/esm/cli/agent/agent-java-import.js +2 -2
- package/esm/cli/agent/agent-java-import.js.map +1 -1
- package/esm/cli/agent/agent-java-list.js +2 -2
- package/esm/cli/agent/agent-java-list.js.map +1 -1
- package/esm/cli/agent/agent-list.js +2 -2
- package/esm/cli/agent/agent-list.js.map +1 -1
- package/esm/cli/agent/agent-web-delete.js +3 -3
- package/esm/cli/agent/agent-web-delete.js.map +1 -1
- package/esm/cli/agent/agent-web-describe.js +2 -2
- package/esm/cli/agent/agent-web-describe.js.map +1 -1
- package/esm/cli/agent/agent-web-export.js +2 -2
- package/esm/cli/agent/agent-web-export.js.map +1 -1
- package/esm/cli/agent/agent-web-import.js +2 -2
- package/esm/cli/agent/agent-web-import.js.map +1 -1
- package/esm/cli/agent/agent-web-list.js +2 -2
- package/esm/cli/agent/agent-web-list.js.map +1 -1
- package/esm/cli/app/app-delete.js +2 -2
- package/esm/cli/app/app-delete.js.map +1 -1
- package/esm/cli/app/app-describe.js +2 -2
- package/esm/cli/app/app-describe.js.map +1 -1
- package/esm/cli/app/app-export.js +2 -2
- package/esm/cli/app/app-export.js.map +1 -1
- package/esm/cli/app/app-import.js +2 -2
- package/esm/cli/app/app-import.js.map +1 -1
- package/esm/cli/app/app-list.js +3 -3
- package/esm/cli/app/app-list.js.map +1 -1
- package/esm/cli/authz/authz-policy-delete.js +2 -2
- package/esm/cli/authz/authz-policy-delete.js.map +1 -1
- package/esm/cli/authz/authz-policy-describe.js +2 -2
- package/esm/cli/authz/authz-policy-describe.js.map +1 -1
- package/esm/cli/authz/authz-policy-export.js +2 -2
- package/esm/cli/authz/authz-policy-export.js.map +1 -1
- package/esm/cli/authz/authz-policy-import.js +2 -2
- package/esm/cli/authz/authz-policy-import.js.map +1 -1
- package/esm/cli/authz/authz-policy-list.js +2 -2
- package/esm/cli/authz/authz-policy-list.js.map +1 -1
- package/esm/cli/authz/authz-set-delete.js +2 -2
- package/esm/cli/authz/authz-set-delete.js.map +1 -1
- package/esm/cli/authz/authz-set-describe.js +2 -2
- package/esm/cli/authz/authz-set-describe.js.map +1 -1
- package/esm/cli/authz/authz-set-export.js +2 -2
- package/esm/cli/authz/authz-set-export.js.map +1 -1
- package/esm/cli/authz/authz-set-import.js +2 -2
- package/esm/cli/authz/authz-set-import.js.map +1 -1
- package/esm/cli/authz/authz-set-list.js +2 -2
- package/esm/cli/authz/authz-set-list.js.map +1 -1
- package/esm/cli/authz/authz-type-delete.js +2 -2
- package/esm/cli/authz/authz-type-delete.js.map +1 -1
- package/esm/cli/authz/authz-type-describe.js +2 -2
- package/esm/cli/authz/authz-type-describe.js.map +1 -1
- package/esm/cli/authz/authz-type-export.js +2 -2
- package/esm/cli/authz/authz-type-export.js.map +1 -1
- package/esm/cli/authz/authz-type-import.js +2 -2
- package/esm/cli/authz/authz-type-import.js.map +1 -1
- package/esm/cli/authz/authz-type-list.js +2 -2
- package/esm/cli/authz/authz-type-list.js.map +1 -1
- package/esm/cli/conn/conn-delete.js +2 -5
- package/esm/cli/conn/conn-delete.js.map +1 -1
- package/esm/cli/conn/conn-describe.js +1 -4
- package/esm/cli/conn/conn-describe.js.map +1 -1
- package/esm/cli/conn/conn-list.js +1 -4
- package/esm/cli/conn/conn-list.js.map +1 -1
- package/esm/cli/conn/conn-save.js +13 -9
- package/esm/cli/conn/conn-save.js.map +1 -1
- package/esm/cli/email/email-template-export.js +2 -2
- package/esm/cli/email/email-template-export.js.map +1 -1
- package/esm/cli/email/email-template-import.js +2 -2
- package/esm/cli/email/email-template-import.js.map +1 -1
- package/esm/cli/email/email-template-list.js +2 -2
- package/esm/cli/email/email-template-list.js.map +1 -1
- package/esm/cli/esv/esv-apply.js +6 -6
- package/esm/cli/esv/esv-apply.js.map +1 -1
- package/esm/cli/esv/esv-secret-create.js +3 -5
- package/esm/cli/esv/esv-secret-create.js.map +1 -1
- package/esm/cli/esv/esv-secret-delete.js +5 -8
- package/esm/cli/esv/esv-secret-delete.js.map +1 -1
- package/esm/cli/esv/esv-secret-describe.js +3 -5
- package/esm/cli/esv/esv-secret-describe.js.map +1 -1
- package/esm/cli/esv/esv-secret-export.js +2 -2
- package/esm/cli/esv/esv-secret-export.js.map +1 -1
- package/esm/cli/esv/esv-secret-import.js +2 -2
- package/esm/cli/esv/esv-secret-import.js.map +1 -1
- package/esm/cli/esv/esv-secret-list.js +3 -5
- package/esm/cli/esv/esv-secret-list.js.map +1 -1
- package/esm/cli/esv/esv-secret-set.js +4 -6
- package/esm/cli/esv/esv-secret-set.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-activate.js +3 -5
- package/esm/cli/esv/esv-secret-version-activate.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-create.js +4 -6
- package/esm/cli/esv/esv-secret-version-create.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-deactivate.js +3 -5
- package/esm/cli/esv/esv-secret-version-deactivate.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-delete.js +4 -6
- package/esm/cli/esv/esv-secret-version-delete.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-list.js +4 -6
- package/esm/cli/esv/esv-secret-version-list.js.map +1 -1
- package/esm/cli/esv/esv-variable-create.js +3 -5
- package/esm/cli/esv/esv-variable-create.js.map +1 -1
- package/esm/cli/esv/esv-variable-delete.js +5 -8
- package/esm/cli/esv/esv-variable-delete.js.map +1 -1
- package/esm/cli/esv/esv-variable-describe.js +3 -5
- package/esm/cli/esv/esv-variable-describe.js.map +1 -1
- package/esm/cli/esv/esv-variable-export.js +2 -2
- package/esm/cli/esv/esv-variable-export.js.map +1 -1
- package/esm/cli/esv/esv-variable-import.js +2 -2
- package/esm/cli/esv/esv-variable-import.js.map +1 -1
- package/esm/cli/esv/esv-variable-list.js +3 -5
- package/esm/cli/esv/esv-variable-list.js.map +1 -1
- package/esm/cli/esv/esv-variable-set.js +4 -7
- package/esm/cli/esv/esv-variable-set.js.map +1 -1
- package/esm/cli/idm/idm-count.js +2 -2
- package/esm/cli/idm/idm-count.js.map +1 -1
- package/esm/cli/idm/idm-export.js +2 -2
- package/esm/cli/idm/idm-export.js.map +1 -1
- package/esm/cli/idm/idm-import.js +2 -2
- package/esm/cli/idm/idm-import.js.map +1 -1
- package/esm/cli/idm/idm-list.js +2 -2
- package/esm/cli/idm/idm-list.js.map +1 -1
- package/esm/cli/idp/idp-export.js +2 -2
- package/esm/cli/idp/idp-export.js.map +1 -1
- package/esm/cli/idp/idp-import.js +2 -2
- package/esm/cli/idp/idp-import.js.map +1 -1
- package/esm/cli/idp/idp-list.js +2 -2
- package/esm/cli/idp/idp-list.js.map +1 -1
- package/esm/cli/info/info.js +8 -8
- package/esm/cli/info/info.js.map +1 -1
- package/esm/cli/journey/journey-delete.js +4 -8
- package/esm/cli/journey/journey-delete.js.map +1 -1
- package/esm/cli/journey/journey-describe.js +5 -5
- package/esm/cli/journey/journey-describe.js.map +1 -1
- package/esm/cli/journey/journey-disable.js +3 -3
- package/esm/cli/journey/journey-disable.js.map +1 -1
- package/esm/cli/journey/journey-enable.js +3 -3
- package/esm/cli/journey/journey-enable.js.map +1 -1
- package/esm/cli/journey/journey-export.js +2 -2
- package/esm/cli/journey/journey-export.js.map +1 -1
- package/esm/cli/journey/journey-import.js +2 -2
- package/esm/cli/journey/journey-import.js.map +1 -1
- package/esm/cli/journey/journey-list.js +2 -2
- package/esm/cli/journey/journey-list.js.map +1 -1
- package/esm/cli/journey/journey-prune.js +3 -3
- package/esm/cli/journey/journey-prune.js.map +1 -1
- package/esm/cli/{logging/logs-fetch.js → log/log-fetch.js} +9 -9
- 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/{logging/logs-list.js → log/log-list.js} +8 -8
- package/esm/cli/log/log-list.js.map +1 -0
- package/esm/cli/{logging/logs-tail.js → log/log-tail.js} +9 -9
- package/esm/cli/log/log-tail.js.map +1 -0
- package/esm/cli/{logging/logs.js → log/log.js} +5 -2
- package/esm/cli/log/log.js.map +1 -0
- package/esm/cli/realm/realm-add-custom-domain.js +3 -5
- package/esm/cli/realm/realm-add-custom-domain.js.map +1 -1
- package/esm/cli/realm/realm-describe.js +4 -9
- package/esm/cli/realm/realm-describe.js.map +1 -1
- package/esm/cli/realm/realm-list.js +3 -5
- package/esm/cli/realm/realm-list.js.map +1 -1
- package/esm/cli/realm/realm-remove-custom-domain.js +3 -3
- package/esm/cli/realm/realm-remove-custom-domain.js.map +1 -1
- package/esm/cli/saml/saml-cot-export.js +9 -10
- package/esm/cli/saml/saml-cot-export.js.map +1 -1
- package/esm/cli/saml/saml-cot-import.js +12 -13
- package/esm/cli/saml/saml-cot-import.js.map +1 -1
- package/esm/cli/saml/saml-cot-list.js +5 -6
- package/esm/cli/saml/saml-cot-list.js.map +1 -1
- package/esm/cli/saml/saml-delete.js +3 -3
- package/esm/cli/saml/saml-delete.js.map +1 -1
- package/esm/cli/saml/saml-describe.js +2 -2
- package/esm/cli/saml/saml-describe.js.map +1 -1
- package/esm/cli/saml/saml-export.js +10 -25
- package/esm/cli/saml/saml-export.js.map +1 -1
- package/esm/cli/saml/saml-import.js +12 -30
- package/esm/cli/saml/saml-import.js.map +1 -1
- package/esm/cli/saml/saml-list.js +6 -11
- package/esm/cli/saml/saml-list.js.map +1 -1
- package/esm/cli/saml/saml-metadata-export.js +2 -2
- package/esm/cli/saml/saml-metadata-export.js.map +1 -1
- package/esm/cli/script/script-delete.js +2 -2
- package/esm/cli/script/script-delete.js.map +1 -1
- package/esm/cli/script/script-describe.js +2 -2
- package/esm/cli/script/script-describe.js.map +1 -1
- package/esm/cli/script/script-export.js +2 -2
- package/esm/cli/script/script-export.js.map +1 -1
- package/esm/cli/script/script-import.js +4 -3
- package/esm/cli/script/script-import.js.map +1 -1
- package/esm/cli/script/script-list.js +4 -3
- package/esm/cli/script/script-list.js.map +1 -1
- package/esm/cli/service/service-delete.js +2 -2
- package/esm/cli/service/service-delete.js.map +1 -1
- package/esm/cli/service/service-export.js +2 -2
- package/esm/cli/service/service-export.js.map +1 -1
- package/esm/cli/service/service-import.js +2 -2
- package/esm/cli/service/service-import.js.map +1 -1
- package/esm/cli/service/service-list.js +2 -2
- package/esm/cli/service/service-list.js.map +1 -1
- package/esm/cli/theme/theme-delete.js +2 -2
- package/esm/cli/theme/theme-delete.js.map +1 -1
- package/esm/cli/theme/theme-export.js +2 -2
- package/esm/cli/theme/theme-export.js.map +1 -1
- package/esm/cli/theme/theme-import.js +2 -2
- package/esm/cli/theme/theme-import.js.map +1 -1
- package/esm/cli/theme/theme-list.js +2 -2
- package/esm/cli/theme/theme-list.js.map +1 -1
- package/esm/help/SampleData.js +7 -0
- package/esm/help/SampleData.js.map +1 -0
- package/esm/launch.js +4 -3
- package/esm/launch.js.map +1 -1
- package/esm/ops/AdminFederationOps.js +4 -4
- package/esm/ops/AdminFederationOps.js.map +1 -1
- package/esm/ops/AgentOps.js +26 -33
- package/esm/ops/AgentOps.js.map +1 -1
- package/esm/ops/CirclesOfTrustOps.js +228 -1
- package/esm/ops/CirclesOfTrustOps.js.map +1 -1
- package/esm/ops/ConnectionProfileOps.js +101 -5
- package/esm/ops/ConnectionProfileOps.js.map +1 -1
- package/esm/ops/EmailTemplateOps.js +7 -8
- package/esm/ops/EmailTemplateOps.js.map +1 -1
- package/esm/ops/IdmOps.js +16 -17
- package/esm/ops/IdmOps.js.map +1 -1
- package/esm/ops/IdpOps.js +25 -13
- package/esm/ops/IdpOps.js.map +1 -1
- package/esm/ops/JourneyOps.js +40 -40
- package/esm/ops/JourneyOps.js.map +1 -1
- package/esm/ops/LogOps.js +85 -31
- package/esm/ops/LogOps.js.map +1 -1
- package/esm/ops/NodeOps.js +14 -11
- package/esm/ops/NodeOps.js.map +1 -1
- package/esm/ops/OAuth2ClientOps.js +5 -8
- package/esm/ops/OAuth2ClientOps.js.map +1 -1
- package/esm/ops/OrganizationOps.js +34 -0
- package/esm/ops/OrganizationOps.js.map +1 -0
- package/esm/ops/PolicyOps.js +9 -10
- package/esm/ops/PolicyOps.js.map +1 -1
- package/esm/ops/PolicySetOps.js +11 -12
- package/esm/ops/PolicySetOps.js.map +1 -1
- package/esm/ops/RealmOps.js +116 -0
- package/esm/ops/RealmOps.js.map +1 -0
- package/esm/ops/ResourceTypeOps.js +8 -10
- package/esm/ops/ResourceTypeOps.js.map +1 -1
- package/esm/ops/Saml2Ops.js +22 -223
- package/esm/ops/Saml2Ops.js.map +1 -1
- package/esm/ops/ScriptOps.js +6 -5
- package/esm/ops/ScriptOps.js.map +1 -1
- package/esm/ops/SecretsOps.js +237 -0
- package/esm/ops/SecretsOps.js.map +1 -0
- package/esm/ops/ServiceOps.js +19 -19
- package/esm/ops/ServiceOps.js.map +1 -1
- package/esm/ops/ThemeOps.js +8 -7
- package/esm/ops/ThemeOps.js.map +1 -1
- package/esm/ops/VariablesOps.js +144 -0
- package/esm/ops/VariablesOps.js.map +1 -0
- package/esm/utils/Config.js +2 -2
- package/esm/utils/Config.js.map +1 -1
- package/esm/utils/Console.js +2 -2
- package/esm/utils/Console.js.map +1 -1
- package/esm/utils/ExportImportUtils.js +3 -2
- 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
- package/esm/cli/logging/logs-fetch.js.map +0 -1
- package/esm/cli/logging/logs-list.js.map +0 -1
- package/esm/cli/logging/logs-tail.js.map +0 -1
- package/esm/cli/logging/logs.js.map +0 -1
package/esm/ops/Saml2Ops.js
CHANGED
|
@@ -1,30 +1,33 @@
|
|
|
1
|
+
import { frodo } from '@rockcarver/frodo-lib';
|
|
1
2
|
import fs from 'fs';
|
|
2
|
-
import path from 'path';
|
|
3
|
-
import { Saml2, ExportImportUtils, Base64 } from '@rockcarver/frodo-lib';
|
|
4
3
|
import { createObjectTable, createProgressBar, createTable, debugMessage, failSpinner, printMessage, showSpinner, stopProgressBar, succeedSpinner, updateProgressBar } from '../utils/Console';
|
|
5
4
|
import { saveTextToFile } from '../utils/ExportImportUtils';
|
|
6
5
|
const {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
exportSaml2Providers,
|
|
10
|
-
getSaml2ProviderStubs,
|
|
11
|
-
getProviderByLocationAndId,
|
|
12
|
-
getProviderMetadata,
|
|
13
|
-
getProviderMetadataUrl,
|
|
14
|
-
getSaml2ProviderStub,
|
|
15
|
-
getRawSaml2Providers,
|
|
16
|
-
getRawSaml2Provider,
|
|
17
|
-
importSaml2Provider,
|
|
18
|
-
importSaml2Providers,
|
|
19
|
-
putRawSaml2Provider
|
|
20
|
-
} = Saml2;
|
|
6
|
+
decode
|
|
7
|
+
} = frodo.helper.base64;
|
|
21
8
|
const {
|
|
22
9
|
getTypedFilename,
|
|
23
10
|
saveJsonToFile,
|
|
24
11
|
getRealmString,
|
|
25
|
-
saveToFile,
|
|
26
12
|
validateImport
|
|
27
|
-
} =
|
|
13
|
+
} = frodo.utils.impex;
|
|
14
|
+
const {
|
|
15
|
+
getSaml2ProviderStubs,
|
|
16
|
+
getProviderByLocationAndId,
|
|
17
|
+
getSaml2ProviderStub,
|
|
18
|
+
getProviderMetadataUrl,
|
|
19
|
+
getProviderMetadata,
|
|
20
|
+
exportSaml2Provider,
|
|
21
|
+
exportSaml2Providers,
|
|
22
|
+
importSaml2Provider,
|
|
23
|
+
importSaml2Providers
|
|
24
|
+
} = frodo.saml2.entityProvider;
|
|
25
|
+
const roleMap = {
|
|
26
|
+
identityProvider: 'IDP',
|
|
27
|
+
serviceProvider: 'SP',
|
|
28
|
+
attributeQueryProvider: 'AttrQuery',
|
|
29
|
+
xacmlPolicyEnforcementPoint: 'XACML PEP'
|
|
30
|
+
};
|
|
28
31
|
|
|
29
32
|
/**
|
|
30
33
|
* Get a one-line description of the saml2 provider object
|
|
@@ -231,7 +234,7 @@ export async function importFirstSaml2ProviderFromFile(file) {
|
|
|
231
234
|
const fileData = JSON.parse(data);
|
|
232
235
|
// pick the first provider and run with it
|
|
233
236
|
const entityId64 = Object.keys(fileData.saml.remote)[0] || Object.keys(fileData.saml.hosted)[0];
|
|
234
|
-
const entityId =
|
|
237
|
+
const entityId = decode(entityId64);
|
|
235
238
|
showSpinner(`Importing ${entityId}...`);
|
|
236
239
|
try {
|
|
237
240
|
await importSaml2Provider(entityId, fileData);
|
|
@@ -287,208 +290,4 @@ export async function importSaml2ProvidersFromFiles() {
|
|
|
287
290
|
}
|
|
288
291
|
stopProgressBar(`Imported ${totalStatus.successes} of ${totalStatus.total} provider(s) from ${jsonFiles.length} file(s).`);
|
|
289
292
|
}
|
|
290
|
-
|
|
291
|
-
/**
|
|
292
|
-
* List entity providers
|
|
293
|
-
*/
|
|
294
|
-
export async function listRawSaml2Providers() {
|
|
295
|
-
const providerList = (await getRawSaml2Providers()).result;
|
|
296
|
-
providerList.sort((a, b) => a._id.localeCompare(b._id));
|
|
297
|
-
for (const provider of providerList) {
|
|
298
|
-
printMessage(`${provider._id}`, 'data');
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
/**
|
|
303
|
-
* Exports a RAW SAML entity, which means the raw xml is included.
|
|
304
|
-
* @param {string} entityId Reference to the entity for export
|
|
305
|
-
* @param {string} file Optional filename for the exported file
|
|
306
|
-
*/
|
|
307
|
-
export async function exportRawSaml2ProviderToFile(entityId, file = null) {
|
|
308
|
-
printMessage(`Exporting raw SAML entity provider ${entityId}`, 'info');
|
|
309
|
-
let fileName = file;
|
|
310
|
-
if (!file) {
|
|
311
|
-
fileName = getTypedFilename(`${entityId}`, 'raw.saml');
|
|
312
|
-
}
|
|
313
|
-
createProgressBar(1, `Exporting raw entity provider: ${entityId}`);
|
|
314
|
-
try {
|
|
315
|
-
const rawData = await getRawSaml2Provider(entityId);
|
|
316
|
-
updateProgressBar(`Writing file ${fileName}`);
|
|
317
|
-
saveTextToFile(JSON.stringify(rawData, null, 2), fileName);
|
|
318
|
-
stopProgressBar(`Exported raw entity provider ${entityId} to ${fileName}.`);
|
|
319
|
-
} catch (error) {
|
|
320
|
-
var _error$response2;
|
|
321
|
-
stopProgressBar(`Error exporting raw entity ${entityId}: ${error.message}`);
|
|
322
|
-
printMessage((_error$response2 = error.response) === null || _error$response2 === void 0 ? void 0 : _error$response2.data, 'error');
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
/**
|
|
327
|
-
* Export all entity providers raw to one file
|
|
328
|
-
* @param {String} file Optional filename
|
|
329
|
-
*/
|
|
330
|
-
export async function exportRawSaml2ProvidersToFile(file = null) {
|
|
331
|
-
let fileName = file;
|
|
332
|
-
if (!fileName) {
|
|
333
|
-
fileName = getTypedFilename(`all${getRealmString()}ProvidersRaw`, 'raw.saml');
|
|
334
|
-
}
|
|
335
|
-
try {
|
|
336
|
-
const samlApplicationList = (await getRawSaml2Providers()).result;
|
|
337
|
-
saveToFile('application', samlApplicationList, '_id', fileName);
|
|
338
|
-
printMessage(`All RAW saml entity providers exported to: ${fileName}`, 'info');
|
|
339
|
-
} catch (error) {
|
|
340
|
-
var _error$response3;
|
|
341
|
-
printMessage(error.message, 'error');
|
|
342
|
-
printMessage(`exportRawSaml2ProvidersToFile: ${(_error$response3 = error.response) === null || _error$response3 === void 0 ? void 0 : _error$response3.status}`, 'error');
|
|
343
|
-
}
|
|
344
|
-
}
|
|
345
|
-
|
|
346
|
-
/**
|
|
347
|
-
* Export all entity providers to individual files
|
|
348
|
-
*/
|
|
349
|
-
export async function exportRawSaml2ProvidersToFiles() {
|
|
350
|
-
const samlApplicationList = (await getRawSaml2Providers()).result;
|
|
351
|
-
let hasError = false;
|
|
352
|
-
createProgressBar(samlApplicationList.length, 'Exporting RAW providers');
|
|
353
|
-
let exportedAmount = 0;
|
|
354
|
-
for (const item of samlApplicationList) {
|
|
355
|
-
updateProgressBar(`Exporting provider ${item.entityId}`);
|
|
356
|
-
try {
|
|
357
|
-
const samlApplicationData = await getRawSaml2Provider(item._id);
|
|
358
|
-
const fileName = getTypedFilename(`${item._id}${getRealmString()}ProviderRaw`, 'raw.saml');
|
|
359
|
-
saveToFile('application', [samlApplicationData], '_id', fileName);
|
|
360
|
-
exportedAmount++;
|
|
361
|
-
} catch (error) {
|
|
362
|
-
hasError = true;
|
|
363
|
-
printMessage(`Unable to export: ${item._id}`, 'error');
|
|
364
|
-
}
|
|
365
|
-
}
|
|
366
|
-
stopProgressBar(`${exportedAmount} providers exported.`);
|
|
367
|
-
if (!hasError) {
|
|
368
|
-
printMessage('All entities exported.', 'info');
|
|
369
|
-
} else {
|
|
370
|
-
printMessage('All other entities exported.', 'info');
|
|
371
|
-
}
|
|
372
|
-
}
|
|
373
|
-
|
|
374
|
-
/**
|
|
375
|
-
* Imports a raw SAML export file (containing one entity).
|
|
376
|
-
* @param {string} file The import file
|
|
377
|
-
*/
|
|
378
|
-
export async function importRawSaml2ProviderFromFile(
|
|
379
|
-
// entityId: string,
|
|
380
|
-
file) {
|
|
381
|
-
printMessage(`Importing SAML Entity ${file}...`, 'info');
|
|
382
|
-
if (file.indexOf('.raw.saml.json') > -1) {
|
|
383
|
-
const samlEntityData = JSON.parse(fs.readFileSync(file, 'utf8'));
|
|
384
|
-
if (validateImport(samlEntityData.meta)) {
|
|
385
|
-
for (const id in samlEntityData.application) {
|
|
386
|
-
// remove the "_rev" data before PUT
|
|
387
|
-
delete samlEntityData.application[id]._rev;
|
|
388
|
-
try {
|
|
389
|
-
await putRawSaml2Provider(id, samlEntityData.application[id]);
|
|
390
|
-
} catch (error) {
|
|
391
|
-
printMessage(`Unable to import: ${id}`, 'error');
|
|
392
|
-
}
|
|
393
|
-
printMessage(`Imported ${id}`, 'info');
|
|
394
|
-
}
|
|
395
|
-
} else {
|
|
396
|
-
printMessage('Import validation failed...', 'error');
|
|
397
|
-
}
|
|
398
|
-
}
|
|
399
|
-
}
|
|
400
|
-
|
|
401
|
-
/**
|
|
402
|
-
* Import first raw SAML entity provider from file
|
|
403
|
-
* @param {String} file Import file name
|
|
404
|
-
*/
|
|
405
|
-
export async function importFirstRawSaml2ProviderFromFile(file) {
|
|
406
|
-
printMessage(`Importing SAML Entity ${file}...`, 'info');
|
|
407
|
-
if (file.indexOf('.raw.saml.json') > -1) {
|
|
408
|
-
const samlEntityData = JSON.parse(fs.readFileSync(file, 'utf8'));
|
|
409
|
-
if (validateImport(samlEntityData.meta)) {
|
|
410
|
-
for (const id in samlEntityData.application) {
|
|
411
|
-
// remove the "_rev" data before PUT
|
|
412
|
-
delete samlEntityData.application[id]._rev;
|
|
413
|
-
try {
|
|
414
|
-
await putRawSaml2Provider(id, samlEntityData.application[id]);
|
|
415
|
-
} catch (error) {
|
|
416
|
-
printMessage(`Unable to import: ${id}`, 'error');
|
|
417
|
-
}
|
|
418
|
-
printMessage(`Imported ${id}`, 'info');
|
|
419
|
-
return;
|
|
420
|
-
}
|
|
421
|
-
} else {
|
|
422
|
-
printMessage('Import validation failed...', 'error');
|
|
423
|
-
}
|
|
424
|
-
}
|
|
425
|
-
}
|
|
426
|
-
|
|
427
|
-
/**
|
|
428
|
-
* Imports the RAW provider info from a single file.
|
|
429
|
-
* @param file Import file name
|
|
430
|
-
*/
|
|
431
|
-
export async function importRawSaml2ProvidersFromFile(file) {
|
|
432
|
-
fs.readFile(file, 'utf8', async function (err, data) {
|
|
433
|
-
if (err) throw err;
|
|
434
|
-
const samlEntityData = JSON.parse(data);
|
|
435
|
-
let amountOfEntities = 0;
|
|
436
|
-
for (const id in samlEntityData.application) {
|
|
437
|
-
if (id.length) {
|
|
438
|
-
amountOfEntities++;
|
|
439
|
-
}
|
|
440
|
-
}
|
|
441
|
-
if (validateImport(samlEntityData.meta)) {
|
|
442
|
-
createProgressBar(amountOfEntities, 'Importing providers...');
|
|
443
|
-
for (const id in samlEntityData.application) {
|
|
444
|
-
// remove the "_rev" data before PUT
|
|
445
|
-
delete samlEntityData.application[id]._rev;
|
|
446
|
-
await putRawSaml2Provider(id, samlEntityData.application[id]).then(result => {
|
|
447
|
-
if (result === null) {
|
|
448
|
-
printMessage(`Import validation failed for ${id}`, 'error');
|
|
449
|
-
}
|
|
450
|
-
});
|
|
451
|
-
updateProgressBar(`Imported ${id}...`);
|
|
452
|
-
}
|
|
453
|
-
stopProgressBar(`Import done`);
|
|
454
|
-
} else {
|
|
455
|
-
printMessage('Import validation failed...', 'error');
|
|
456
|
-
}
|
|
457
|
-
});
|
|
458
|
-
}
|
|
459
|
-
|
|
460
|
-
/**
|
|
461
|
-
* Whenever the SAML RAW file were exported using the exportRAW functionality this function
|
|
462
|
-
* is used to read them back in. Only files with the .samlRaw.json extension will be imported.
|
|
463
|
-
* @param {string} directory The directory from which to import the files
|
|
464
|
-
*/
|
|
465
|
-
export async function importRawSaml2ProvidersFromFiles(directory) {
|
|
466
|
-
const files = fs.readdirSync(directory);
|
|
467
|
-
const filesToImport = files.filter(file => file.indexOf('.samlRaw.json') > -1);
|
|
468
|
-
if (filesToImport.length > 0) {
|
|
469
|
-
createProgressBar(filesToImport.length, 'Importing providers...');
|
|
470
|
-
filesToImport.forEach(async file => {
|
|
471
|
-
const filePathAbsolute = path.join(directory, file);
|
|
472
|
-
filesToImport.push(file);
|
|
473
|
-
const samlEntityData = JSON.parse(fs.readFileSync(filePathAbsolute, 'utf8'));
|
|
474
|
-
if (validateImport(samlEntityData.meta)) {
|
|
475
|
-
for (const id in samlEntityData.application) {
|
|
476
|
-
// remove the "_rev" data before PUT
|
|
477
|
-
delete samlEntityData.application[id]._rev;
|
|
478
|
-
await putRawSaml2Provider(id, samlEntityData.application[id]).then(result => {
|
|
479
|
-
if (result === null) {
|
|
480
|
-
printMessage(`Import validation failed for ${id}`, 'error');
|
|
481
|
-
}
|
|
482
|
-
});
|
|
483
|
-
updateProgressBar(`Imported ${id}...`);
|
|
484
|
-
}
|
|
485
|
-
} else {
|
|
486
|
-
printMessage('Import validation failed...', 'error');
|
|
487
|
-
}
|
|
488
|
-
});
|
|
489
|
-
stopProgressBar(`Import done`);
|
|
490
|
-
} else {
|
|
491
|
-
printMessage('Import failed, no files to import. (check extension to be .samlRaw.json)', 'warn');
|
|
492
|
-
}
|
|
493
|
-
}
|
|
494
293
|
//# sourceMappingURL=Saml2Ops.js.map
|
package/esm/ops/Saml2Ops.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Saml2Ops.js","names":["fs","path","Saml2","ExportImportUtils","Base64","createObjectTable","createProgressBar","createTable","debugMessage","failSpinner","printMessage","showSpinner","stopProgressBar","succeedSpinner","updateProgressBar","saveTextToFile","roleMap","exportSaml2Provider","exportSaml2Providers","getSaml2ProviderStubs","getProviderByLocationAndId","getProviderMetadata","getProviderMetadataUrl","getSaml2ProviderStub","getRawSaml2Providers","getRawSaml2Provider","importSaml2Provider","importSaml2Providers","putRawSaml2Provider","getTypedFilename","saveJsonToFile","getRealmString","saveToFile","validateImport","getOneLineDescription","saml2ProviderObj","roles","key","value","Object","entries","push","description","entityId","entityLocation","length","join","getTableHeaderMd","markdown","getTableRowMd","row","listSaml2Providers","long","providerList","sort","a","b","_id","localeCompare","provider","table","location","map","role","toString","describeSaml2Provider","stub","id","rawProviderData","_rev","metadataUrl","error","message","exportSaml2MetadataToFile","file","fileName","metaData","brightCyan","exportSaml2ProviderToFile","fileData","err","exportSaml2ProvidersToFile","exportData","_error$response","response","status","exportSaml2ProvidersToFiles","stubs","importSaml2ProviderFromFile","readFile","data","JSON","parse","importFirstSaml2ProviderFromFile","entityId64","keys","saml","remote","hosted","decode","importSaml2ProvidersFromFile","meta","importSaml2ProvidersFromFiles","names","readdirSync","jsonFiles","filter","name","toLowerCase","endsWith","totalStatus","total","successes","warnings","failures","readFileSync","myStatus","listRawSaml2Providers","result","exportRawSaml2ProviderToFile","rawData","stringify","_error$response2","exportRawSaml2ProvidersToFile","samlApplicationList","_error$response3","exportRawSaml2ProvidersToFiles","hasError","exportedAmount","item","samlApplicationData","importRawSaml2ProviderFromFile","indexOf","samlEntityData","application","importFirstRawSaml2ProviderFromFile","importRawSaml2ProvidersFromFile","amountOfEntities","then","importRawSaml2ProvidersFromFiles","directory","files","filesToImport","forEach","filePathAbsolute"],"sources":["../../src/ops/Saml2Ops.ts"],"sourcesContent":["import fs from 'fs';\nimport path from 'path';\nimport { Saml2ProviderSkeleton } from '@rockcarver/frodo-lib/types/api/ApiTypes';\nimport { Saml2, ExportImportUtils, Base64 } from '@rockcarver/frodo-lib';\nimport {\n MultiOpStatusInterface,\n Saml2ExportInterface,\n} from '@rockcarver/frodo-lib/types/ops/OpsTypes';\nimport {\n createObjectTable,\n createProgressBar,\n createTable,\n debugMessage,\n failSpinner,\n printMessage,\n showSpinner,\n stopProgressBar,\n succeedSpinner,\n updateProgressBar,\n} from '../utils/Console';\nimport { saveTextToFile } from '../utils/ExportImportUtils';\n\nconst {\n roleMap,\n exportSaml2Provider,\n exportSaml2Providers,\n getSaml2ProviderStubs,\n getProviderByLocationAndId,\n getProviderMetadata,\n getProviderMetadataUrl,\n getSaml2ProviderStub,\n getRawSaml2Providers,\n getRawSaml2Provider,\n importSaml2Provider,\n importSaml2Providers,\n putRawSaml2Provider,\n} = Saml2;\nconst {\n getTypedFilename,\n saveJsonToFile,\n getRealmString,\n saveToFile,\n validateImport,\n} = ExportImportUtils;\n\n/**\n * Get a one-line description of the saml2 provider object\n * @param {Saml2ProviderSkeleton} saml2ProviderObj saml2 provider object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescription(\n saml2ProviderObj: Saml2ProviderSkeleton\n): string {\n const roles: string[] = [];\n for (const [key, value] of Object.entries(roleMap)) {\n if (saml2ProviderObj[key]) {\n roles.push(value);\n }\n }\n const description = `[${saml2ProviderObj.entityId['brightCyan']}]${\n ' (' + saml2ProviderObj.entityLocation\n }${roles.length ? ' ' + roles.join(', ') + ')' : ')'}`;\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 += '| Entity Id | Location | Role(s) |\\n';\n markdown += '| --------- | -------- | ------- |';\n return markdown;\n}\n\n/**\n * Get a table-row of the saml2 provider in markdown\n * @param {Saml2ProviderSkeleton} saml2ProviderObj saml2 provider object to describe\n * @returns {string} a table-row of the saml2 provider in markdown\n */\nexport function getTableRowMd(saml2ProviderObj: Saml2ProviderSkeleton): string {\n const roles: string[] = [];\n for (const [key, value] of Object.entries(roleMap)) {\n if (saml2ProviderObj[key]) {\n roles.push(value);\n }\n }\n const row = `| ${saml2ProviderObj.entityId} | ${\n saml2ProviderObj.entityLocation\n } | ${roles.length ? roles.join(', ') : ''} |`;\n return row;\n}\n\n/**\n * List entity providers\n * @param {boolean} long Long list format with details\n */\nexport async function listSaml2Providers(long = false) {\n const providerList = await getSaml2ProviderStubs();\n providerList.sort((a, b) => a._id.localeCompare(b._id));\n if (!long) {\n for (const provider of providerList) {\n printMessage(`${provider.entityId}`, 'data');\n }\n } else {\n const table = createTable([\n 'Entity Id'['brightCyan'],\n 'Location'['brightCyan'],\n 'Role(s)'['brightCyan'],\n ]);\n for (const provider of providerList) {\n table.push([\n provider.entityId,\n provider.location,\n provider.roles.map((role) => roleMap[role]).join(', '),\n ]);\n }\n printMessage(table.toString());\n }\n}\n\n/**\n * Describe an entity provider's configuration\n * @param {String} entityId Provider entity id\n */\nexport async function describeSaml2Provider(entityId) {\n try {\n const stub = await getSaml2ProviderStub(entityId);\n printMessage(stub);\n const { location } = stub;\n const id = stub._id;\n const roles = stub.roles.map((role: string) => roleMap[role]).join(', ');\n const rawProviderData = await getProviderByLocationAndId(location, id);\n delete rawProviderData._id;\n delete rawProviderData._rev;\n rawProviderData.location = location;\n rawProviderData.roles = roles;\n rawProviderData.metadataUrl = getProviderMetadataUrl(entityId);\n const table = createObjectTable(rawProviderData);\n printMessage(table.toString());\n } catch (error) {\n printMessage(error.message, 'error');\n }\n}\n\n/**\n * Export provider metadata to file\n * @param {String} entityId Provider entity id\n * @param {String} file Optional filename\n */\nexport async function exportSaml2MetadataToFile(entityId, file = null) {\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(entityId, 'metadata', 'xml');\n }\n createProgressBar(1, `Exporting metadata for: ${entityId}`);\n try {\n updateProgressBar(`Writing file ${fileName}`);\n const metaData = await getProviderMetadata(entityId);\n saveTextToFile(metaData, fileName);\n updateProgressBar(`Exported provider ${entityId}`);\n stopProgressBar(\n `Exported ${entityId.brightCyan} metadata to ${fileName.brightCyan}.`\n );\n } catch (error) {\n stopProgressBar(`${error}`);\n printMessage(error, 'error');\n }\n}\n\n/**\n * Export a single entity provider to file\n * @param {String} entityId Provider entity id\n * @param {String} file Optional filename\n */\nexport async function exportSaml2ProviderToFile(entityId, file = null) {\n debugMessage(\n `cli.Saml2Ops.exportSaml2ProviderToFile: start [entityId=${entityId}, file=${file}]`\n );\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(entityId, 'saml');\n }\n try {\n createProgressBar(1, `Exporting provider ${entityId}`);\n const fileData = await exportSaml2Provider(entityId);\n saveJsonToFile(fileData, fileName);\n updateProgressBar(`Exported provider ${entityId}`);\n stopProgressBar(\n `Exported ${entityId.brightCyan} to ${fileName.brightCyan}.`\n );\n } catch (err) {\n stopProgressBar(`${err}`);\n printMessage(err, 'error');\n }\n debugMessage(\n `cli.Saml2Ops.exportSaml2ProviderToFile: end [entityId=${entityId}, file=${fileName}]`\n );\n}\n\n/**\n * Export all entity providers to one file\n * @param {String} file Optional filename\n */\nexport async function exportSaml2ProvidersToFile(file = null) {\n debugMessage(`cli.Saml2Ops.exportSaml2ProviderToFile: start [file=${file}]`);\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(`all${getRealmString()}Providers`, 'saml');\n }\n try {\n const exportData = await exportSaml2Providers();\n saveJsonToFile(exportData, fileName);\n } catch (error) {\n printMessage(error.message, 'error');\n printMessage(\n `exportSaml2ProvidersToFile: ${error.response?.status}`,\n 'error'\n );\n }\n debugMessage(`cli.Saml2Ops.exportSaml2ProviderToFile: end [file=${file}]`);\n}\n\n/**\n * Export all entity providers to individual files\n */\nexport async function exportSaml2ProvidersToFiles() {\n const stubs = await getSaml2ProviderStubs();\n if (stubs.length > 0) {\n createProgressBar(stubs.length, 'Exporting providers');\n for (const stub of stubs) {\n const fileName = getTypedFilename(stub.entityId, 'saml');\n const fileData = await exportSaml2Provider(stub.entityId);\n saveJsonToFile(fileData, fileName);\n updateProgressBar(`Exported provider ${stub.entityId}`);\n }\n stopProgressBar(`${stubs.length} providers exported.`);\n } else {\n printMessage('No entity providers found.', 'info');\n }\n}\n\n/**\n * Import a SAML entity provider by entity id from file\n * @param {String} entityId Provider entity id\n * @param {String} file Import file name\n */\nexport async function importSaml2ProviderFromFile(\n entityId: string,\n file: string\n) {\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data);\n showSpinner(`Importing ${entityId}...`);\n try {\n await importSaml2Provider(entityId, fileData);\n succeedSpinner(`Imported ${entityId}.`);\n } catch (error) {\n failSpinner(`Error importing ${entityId}: ${error.message}`);\n }\n });\n}\n\n/**\n * Import a SAML entity provider by entity id from file\n * @param {String} file Import file name\n */\nexport async function importFirstSaml2ProviderFromFile(file: string) {\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data) as Saml2ExportInterface;\n // pick the first provider and run with it\n const entityId64 =\n Object.keys(fileData.saml.remote)[0] ||\n Object.keys(fileData.saml.hosted)[0];\n const entityId = Base64.decode(entityId64);\n showSpinner(`Importing ${entityId}...`);\n try {\n await importSaml2Provider(entityId, fileData);\n succeedSpinner(`Imported ${entityId}.`);\n } catch (error) {\n failSpinner(`Error importing ${entityId}: ${error.message}`);\n }\n });\n}\n\n/**\n * Import all SAML entity providers from file\n * @param {String} file Import file name\n */\nexport async function importSaml2ProvidersFromFile(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 await importSaml2Providers(fileData);\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Import all SAML entity providers from all *.saml.json files in the current directory\n */\nexport async function importSaml2ProvidersFromFiles() {\n const names = fs.readdirSync('.');\n const jsonFiles = names.filter((name) =>\n name.toLowerCase().endsWith('.saml.json')\n );\n createProgressBar(jsonFiles.length, 'Importing providers...');\n const totalStatus: MultiOpStatusInterface = {\n total: 0,\n successes: 0,\n warnings: 0,\n failures: 0,\n };\n for (const file of jsonFiles) {\n const data = fs.readFileSync(file, 'utf8');\n const fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n const myStatus = await importSaml2Providers(fileData);\n totalStatus.total += myStatus.total;\n totalStatus.successes += myStatus.successes;\n totalStatus.warnings += myStatus.warnings;\n totalStatus.failures += myStatus.failures;\n updateProgressBar(\n `Imported ${myStatus.successes}/${myStatus.total} provider(s) from ${file}.`\n );\n } else {\n printMessage(`Validation of ${file} failed!`, 'error');\n }\n }\n stopProgressBar(\n `Imported ${totalStatus.successes} of ${totalStatus.total} provider(s) from ${jsonFiles.length} file(s).`\n );\n}\n\n/**\n * List entity providers\n */\nexport async function listRawSaml2Providers() {\n const providerList = (await getRawSaml2Providers()).result;\n providerList.sort((a, b) => a._id.localeCompare(b._id));\n for (const provider of providerList) {\n printMessage(`${provider._id}`, 'data');\n }\n}\n\n/**\n * Exports a RAW SAML entity, which means the raw xml is included.\n * @param {string} entityId Reference to the entity for export\n * @param {string} file Optional filename for the exported file\n */\nexport async function exportRawSaml2ProviderToFile(entityId, file = null) {\n printMessage(`Exporting raw SAML entity provider ${entityId}`, 'info');\n let fileName = file;\n if (!file) {\n fileName = getTypedFilename(`${entityId}`, 'raw.saml');\n }\n createProgressBar(1, `Exporting raw entity provider: ${entityId}`);\n try {\n const rawData = await getRawSaml2Provider(entityId);\n updateProgressBar(`Writing file ${fileName}`);\n saveTextToFile(JSON.stringify(rawData, null, 2), fileName);\n stopProgressBar(`Exported raw entity provider ${entityId} to ${fileName}.`);\n } catch (error) {\n stopProgressBar(`Error exporting raw entity ${entityId}: ${error.message}`);\n printMessage(error.response?.data, 'error');\n }\n}\n\n/**\n * Export all entity providers raw to one file\n * @param {String} file Optional filename\n */\nexport async function exportRawSaml2ProvidersToFile(file = null) {\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(\n `all${getRealmString()}ProvidersRaw`,\n 'raw.saml'\n );\n }\n try {\n const samlApplicationList = (await getRawSaml2Providers()).result;\n\n saveToFile('application', samlApplicationList, '_id', fileName);\n printMessage(\n `All RAW saml entity providers exported to: ${fileName}`,\n 'info'\n );\n } catch (error) {\n printMessage(error.message, 'error');\n printMessage(\n `exportRawSaml2ProvidersToFile: ${error.response?.status}`,\n 'error'\n );\n }\n}\n\n/**\n * Export all entity providers to individual files\n */\nexport async function exportRawSaml2ProvidersToFiles() {\n const samlApplicationList = (await getRawSaml2Providers()).result;\n let hasError = false;\n createProgressBar(samlApplicationList.length, 'Exporting RAW providers');\n let exportedAmount = 0;\n for (const item of samlApplicationList) {\n updateProgressBar(`Exporting provider ${item.entityId}`);\n try {\n const samlApplicationData = await getRawSaml2Provider(item._id);\n const fileName = getTypedFilename(\n `${item._id}${getRealmString()}ProviderRaw`,\n 'raw.saml'\n );\n saveToFile('application', [samlApplicationData], '_id', fileName);\n exportedAmount++;\n } catch (error) {\n hasError = true;\n printMessage(`Unable to export: ${item._id}`, 'error');\n }\n }\n stopProgressBar(`${exportedAmount} providers exported.`);\n if (!hasError) {\n printMessage('All entities exported.', 'info');\n } else {\n printMessage('All other entities exported.', 'info');\n }\n}\n\n/**\n * Imports a raw SAML export file (containing one entity).\n * @param {string} file The import file\n */\nexport async function importRawSaml2ProviderFromFile(\n // entityId: string,\n file: string\n) {\n printMessage(`Importing SAML Entity ${file}...`, 'info');\n if (file.indexOf('.raw.saml.json') > -1) {\n const samlEntityData = JSON.parse(fs.readFileSync(file, 'utf8'));\n if (validateImport(samlEntityData.meta)) {\n for (const id in samlEntityData.application) {\n // remove the \"_rev\" data before PUT\n delete samlEntityData.application[id]._rev;\n try {\n await putRawSaml2Provider(id, samlEntityData.application[id]);\n } catch (error) {\n printMessage(`Unable to import: ${id}`, 'error');\n }\n printMessage(`Imported ${id}`, 'info');\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n }\n}\n\n/**\n * Import first raw SAML entity provider from file\n * @param {String} file Import file name\n */\nexport async function importFirstRawSaml2ProviderFromFile(file) {\n printMessage(`Importing SAML Entity ${file}...`, 'info');\n if (file.indexOf('.raw.saml.json') > -1) {\n const samlEntityData = JSON.parse(fs.readFileSync(file, 'utf8'));\n if (validateImport(samlEntityData.meta)) {\n for (const id in samlEntityData.application) {\n // remove the \"_rev\" data before PUT\n delete samlEntityData.application[id]._rev;\n try {\n await putRawSaml2Provider(id, samlEntityData.application[id]);\n } catch (error) {\n printMessage(`Unable to import: ${id}`, 'error');\n }\n printMessage(`Imported ${id}`, 'info');\n return;\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n }\n}\n\n/**\n * Imports the RAW provider info from a single file.\n * @param file Import file name\n */\nexport async function importRawSaml2ProvidersFromFile(file: string) {\n fs.readFile(file, 'utf8', async function (err, data) {\n if (err) throw err;\n const samlEntityData = JSON.parse(data);\n let amountOfEntities = 0;\n for (const id in samlEntityData.application) {\n if (id.length) {\n amountOfEntities++;\n }\n }\n if (validateImport(samlEntityData.meta)) {\n createProgressBar(amountOfEntities, 'Importing providers...');\n for (const id in samlEntityData.application) {\n // remove the \"_rev\" data before PUT\n delete samlEntityData.application[id]._rev;\n await putRawSaml2Provider(id, samlEntityData.application[id]).then(\n (result) => {\n if (result === null) {\n printMessage(`Import validation failed for ${id}`, 'error');\n }\n }\n );\n updateProgressBar(`Imported ${id}...`);\n }\n stopProgressBar(`Import done`);\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Whenever the SAML RAW file were exported using the exportRAW functionality this function\n * is used to read them back in. Only files with the .samlRaw.json extension will be imported.\n * @param {string} directory The directory from which to import the files\n */\nexport async function importRawSaml2ProvidersFromFiles(directory) {\n const files = fs.readdirSync(directory);\n const filesToImport = files.filter(\n (file) => file.indexOf('.samlRaw.json') > -1\n );\n\n if (filesToImport.length > 0) {\n createProgressBar(filesToImport.length, 'Importing providers...');\n filesToImport.forEach(async (file) => {\n const filePathAbsolute = path.join(directory, file);\n filesToImport.push(file);\n const samlEntityData = JSON.parse(\n fs.readFileSync(filePathAbsolute, 'utf8')\n );\n if (validateImport(samlEntityData.meta)) {\n for (const id in samlEntityData.application) {\n // remove the \"_rev\" data before PUT\n delete samlEntityData.application[id]._rev;\n await putRawSaml2Provider(id, samlEntityData.application[id]).then(\n (result) => {\n if (result === null) {\n printMessage(`Import validation failed for ${id}`, 'error');\n }\n }\n );\n updateProgressBar(`Imported ${id}...`);\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n stopProgressBar(`Import done`);\n } else {\n printMessage(\n 'Import failed, no files to import. (check extension to be .samlRaw.json)',\n 'warn'\n );\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Saml2Ops.js","names":["frodo","fs","createObjectTable","createProgressBar","createTable","debugMessage","failSpinner","printMessage","showSpinner","stopProgressBar","succeedSpinner","updateProgressBar","saveTextToFile","decode","helper","base64","getTypedFilename","saveJsonToFile","getRealmString","validateImport","utils","impex","getSaml2ProviderStubs","getProviderByLocationAndId","getSaml2ProviderStub","getProviderMetadataUrl","getProviderMetadata","exportSaml2Provider","exportSaml2Providers","importSaml2Provider","importSaml2Providers","saml2","entityProvider","roleMap","identityProvider","serviceProvider","attributeQueryProvider","xacmlPolicyEnforcementPoint","getOneLineDescription","saml2ProviderObj","roles","key","value","Object","entries","push","description","entityId","entityLocation","length","join","getTableHeaderMd","markdown","getTableRowMd","row","listSaml2Providers","long","providerList","sort","a","b","_id","localeCompare","provider","table","location","map","role","toString","describeSaml2Provider","stub","id","rawProviderData","_rev","metadataUrl","error","message","exportSaml2MetadataToFile","file","fileName","metaData","brightCyan","exportSaml2ProviderToFile","fileData","err","exportSaml2ProvidersToFile","exportData","_error$response","response","status","exportSaml2ProvidersToFiles","stubs","importSaml2ProviderFromFile","readFile","data","JSON","parse","importFirstSaml2ProviderFromFile","entityId64","keys","saml","remote","hosted","importSaml2ProvidersFromFile","meta","importSaml2ProvidersFromFiles","names","readdirSync","jsonFiles","filter","name","toLowerCase","endsWith","totalStatus","total","successes","warnings","failures","readFileSync","myStatus"],"sources":["../../src/ops/Saml2Ops.ts"],"sourcesContent":["import { frodo } from '@rockcarver/frodo-lib';\nimport fs from 'fs';\nimport {\n createObjectTable,\n createProgressBar,\n createTable,\n debugMessage,\n failSpinner,\n printMessage,\n showSpinner,\n stopProgressBar,\n succeedSpinner,\n updateProgressBar,\n} from '../utils/Console';\nimport { saveTextToFile } from '../utils/ExportImportUtils';\nimport type {\n MultiOpStatusInterface,\n Saml2ExportInterface,\n} from '@rockcarver/frodo-lib/types/ops/OpsTypes';\nimport type { Saml2ProviderSkeleton } from '@rockcarver/frodo-lib/types/api/ApiTypes';\n\nconst { decode } = frodo.helper.base64;\nconst { getTypedFilename, saveJsonToFile, getRealmString, validateImport } =\n frodo.utils.impex;\nconst {\n getSaml2ProviderStubs,\n getProviderByLocationAndId,\n getSaml2ProviderStub,\n getProviderMetadataUrl,\n getProviderMetadata,\n exportSaml2Provider,\n exportSaml2Providers,\n importSaml2Provider,\n importSaml2Providers,\n} = frodo.saml2.entityProvider;\n\nconst roleMap = {\n identityProvider: 'IDP',\n serviceProvider: 'SP',\n attributeQueryProvider: 'AttrQuery',\n xacmlPolicyEnforcementPoint: 'XACML PEP',\n};\n\n/**\n * Get a one-line description of the saml2 provider object\n * @param {Saml2ProviderSkeleton} saml2ProviderObj saml2 provider object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescription(\n saml2ProviderObj: Saml2ProviderSkeleton\n): string {\n const roles: string[] = [];\n for (const [key, value] of Object.entries(roleMap)) {\n if (saml2ProviderObj[key]) {\n roles.push(value);\n }\n }\n const description = `[${saml2ProviderObj.entityId['brightCyan']}]${\n ' (' + saml2ProviderObj.entityLocation\n }${roles.length ? ' ' + roles.join(', ') + ')' : ')'}`;\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 += '| Entity Id | Location | Role(s) |\\n';\n markdown += '| --------- | -------- | ------- |';\n return markdown;\n}\n\n/**\n * Get a table-row of the saml2 provider in markdown\n * @param {Saml2ProviderSkeleton} saml2ProviderObj saml2 provider object to describe\n * @returns {string} a table-row of the saml2 provider in markdown\n */\nexport function getTableRowMd(saml2ProviderObj: Saml2ProviderSkeleton): string {\n const roles: string[] = [];\n for (const [key, value] of Object.entries(roleMap)) {\n if (saml2ProviderObj[key]) {\n roles.push(value);\n }\n }\n const row = `| ${saml2ProviderObj.entityId} | ${\n saml2ProviderObj.entityLocation\n } | ${roles.length ? roles.join(', ') : ''} |`;\n return row;\n}\n\n/**\n * List entity providers\n * @param {boolean} long Long list format with details\n */\nexport async function listSaml2Providers(long = false) {\n const providerList = await getSaml2ProviderStubs();\n providerList.sort((a, b) => a._id.localeCompare(b._id));\n if (!long) {\n for (const provider of providerList) {\n printMessage(`${provider.entityId}`, 'data');\n }\n } else {\n const table = createTable([\n 'Entity Id'['brightCyan'],\n 'Location'['brightCyan'],\n 'Role(s)'['brightCyan'],\n ]);\n for (const provider of providerList) {\n table.push([\n provider.entityId,\n provider.location,\n provider.roles.map((role) => roleMap[role]).join(', '),\n ]);\n }\n printMessage(table.toString());\n }\n}\n\n/**\n * Describe an entity provider's configuration\n * @param {String} entityId Provider entity id\n */\nexport async function describeSaml2Provider(entityId) {\n try {\n const stub = await getSaml2ProviderStub(entityId);\n printMessage(stub);\n const { location } = stub;\n const id = stub._id;\n const roles = stub.roles.map((role: string) => roleMap[role]).join(', ');\n const rawProviderData = await getProviderByLocationAndId(location, id);\n delete rawProviderData._id;\n delete rawProviderData._rev;\n rawProviderData.location = location;\n rawProviderData.roles = roles;\n rawProviderData.metadataUrl = getProviderMetadataUrl(entityId);\n const table = createObjectTable(rawProviderData);\n printMessage(table.toString());\n } catch (error) {\n printMessage(error.message, 'error');\n }\n}\n\n/**\n * Export provider metadata to file\n * @param {String} entityId Provider entity id\n * @param {String} file Optional filename\n */\nexport async function exportSaml2MetadataToFile(entityId, file = null) {\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(entityId, 'metadata', 'xml');\n }\n createProgressBar(1, `Exporting metadata for: ${entityId}`);\n try {\n updateProgressBar(`Writing file ${fileName}`);\n const metaData = await getProviderMetadata(entityId);\n saveTextToFile(metaData, fileName);\n updateProgressBar(`Exported provider ${entityId}`);\n stopProgressBar(\n `Exported ${entityId.brightCyan} metadata to ${fileName.brightCyan}.`\n );\n } catch (error) {\n stopProgressBar(`${error}`);\n printMessage(error, 'error');\n }\n}\n\n/**\n * Export a single entity provider to file\n * @param {String} entityId Provider entity id\n * @param {String} file Optional filename\n */\nexport async function exportSaml2ProviderToFile(entityId, file = null) {\n debugMessage(\n `cli.Saml2Ops.exportSaml2ProviderToFile: start [entityId=${entityId}, file=${file}]`\n );\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(entityId, 'saml');\n }\n try {\n createProgressBar(1, `Exporting provider ${entityId}`);\n const fileData = await exportSaml2Provider(entityId);\n saveJsonToFile(fileData, fileName);\n updateProgressBar(`Exported provider ${entityId}`);\n stopProgressBar(\n `Exported ${entityId.brightCyan} to ${fileName.brightCyan}.`\n );\n } catch (err) {\n stopProgressBar(`${err}`);\n printMessage(err, 'error');\n }\n debugMessage(\n `cli.Saml2Ops.exportSaml2ProviderToFile: end [entityId=${entityId}, file=${fileName}]`\n );\n}\n\n/**\n * Export all entity providers to one file\n * @param {String} file Optional filename\n */\nexport async function exportSaml2ProvidersToFile(file = null) {\n debugMessage(`cli.Saml2Ops.exportSaml2ProviderToFile: start [file=${file}]`);\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(`all${getRealmString()}Providers`, 'saml');\n }\n try {\n const exportData = await exportSaml2Providers();\n saveJsonToFile(exportData, fileName);\n } catch (error) {\n printMessage(error.message, 'error');\n printMessage(\n `exportSaml2ProvidersToFile: ${error.response?.status}`,\n 'error'\n );\n }\n debugMessage(`cli.Saml2Ops.exportSaml2ProviderToFile: end [file=${file}]`);\n}\n\n/**\n * Export all entity providers to individual files\n */\nexport async function exportSaml2ProvidersToFiles() {\n const stubs = await getSaml2ProviderStubs();\n if (stubs.length > 0) {\n createProgressBar(stubs.length, 'Exporting providers');\n for (const stub of stubs) {\n const fileName = getTypedFilename(stub.entityId, 'saml');\n const fileData = await exportSaml2Provider(stub.entityId);\n saveJsonToFile(fileData, fileName);\n updateProgressBar(`Exported provider ${stub.entityId}`);\n }\n stopProgressBar(`${stubs.length} providers exported.`);\n } else {\n printMessage('No entity providers found.', 'info');\n }\n}\n\n/**\n * Import a SAML entity provider by entity id from file\n * @param {String} entityId Provider entity id\n * @param {String} file Import file name\n */\nexport async function importSaml2ProviderFromFile(\n entityId: string,\n file: string\n) {\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data);\n showSpinner(`Importing ${entityId}...`);\n try {\n await importSaml2Provider(entityId, fileData);\n succeedSpinner(`Imported ${entityId}.`);\n } catch (error) {\n failSpinner(`Error importing ${entityId}: ${error.message}`);\n }\n });\n}\n\n/**\n * Import a SAML entity provider by entity id from file\n * @param {String} file Import file name\n */\nexport async function importFirstSaml2ProviderFromFile(file: string) {\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data) as Saml2ExportInterface;\n // pick the first provider and run with it\n const entityId64 =\n Object.keys(fileData.saml.remote)[0] ||\n Object.keys(fileData.saml.hosted)[0];\n const entityId = decode(entityId64);\n showSpinner(`Importing ${entityId}...`);\n try {\n await importSaml2Provider(entityId, fileData);\n succeedSpinner(`Imported ${entityId}.`);\n } catch (error) {\n failSpinner(`Error importing ${entityId}: ${error.message}`);\n }\n });\n}\n\n/**\n * Import all SAML entity providers from file\n * @param {String} file Import file name\n */\nexport async function importSaml2ProvidersFromFile(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 await importSaml2Providers(fileData);\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Import all SAML entity providers from all *.saml.json files in the current directory\n */\nexport async function importSaml2ProvidersFromFiles() {\n const names = fs.readdirSync('.');\n const jsonFiles = names.filter((name) =>\n name.toLowerCase().endsWith('.saml.json')\n );\n createProgressBar(jsonFiles.length, 'Importing providers...');\n const totalStatus: MultiOpStatusInterface = {\n total: 0,\n successes: 0,\n warnings: 0,\n failures: 0,\n };\n for (const file of jsonFiles) {\n const data = fs.readFileSync(file, 'utf8');\n const fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n const myStatus = await importSaml2Providers(fileData);\n totalStatus.total += myStatus.total;\n totalStatus.successes += myStatus.successes;\n totalStatus.warnings += myStatus.warnings;\n totalStatus.failures += myStatus.failures;\n updateProgressBar(\n `Imported ${myStatus.successes}/${myStatus.total} provider(s) from ${file}.`\n );\n } else {\n printMessage(`Validation of ${file} failed!`, 'error');\n }\n }\n stopProgressBar(\n `Imported ${totalStatus.successes} of ${totalStatus.total} provider(s) from ${jsonFiles.length} file(s).`\n );\n}\n"],"mappings":"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"}
|
package/esm/ops/ScriptOps.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { frodo, state } from '@rockcarver/frodo-lib';
|
|
2
2
|
import chokidar from 'chokidar';
|
|
3
3
|
import fs from 'fs';
|
|
4
4
|
import { createProgressBar, createTable, debugMessage, failSpinner, printMessage, showSpinner, spinSpinner, stopProgressBar, succeedSpinner, updateProgressBar } from '../utils/Console';
|
|
@@ -6,15 +6,15 @@ import { getTypedFilename, saveJsonToFile, saveTextToFile, titleCase } from '../
|
|
|
6
6
|
import wordwrap from './utils/Wordwrap';
|
|
7
7
|
const {
|
|
8
8
|
getScripts,
|
|
9
|
-
exportScripts,
|
|
10
9
|
exportScript,
|
|
11
10
|
exportScriptByName,
|
|
11
|
+
exportScripts,
|
|
12
12
|
importScripts
|
|
13
|
-
} =
|
|
13
|
+
} = frodo.script;
|
|
14
14
|
|
|
15
15
|
/**
|
|
16
16
|
* Get a one-line description of the script object
|
|
17
|
-
* @param {
|
|
17
|
+
* @param {ScriptSkeleton} scriptObj script object to describe
|
|
18
18
|
* @returns {string} a one-line description
|
|
19
19
|
*/
|
|
20
20
|
export function getOneLineDescription(scriptObj) {
|
|
@@ -43,7 +43,7 @@ export function getTableRowMd(scriptObj) {
|
|
|
43
43
|
JAVASCRIPT: 'JavaSscript',
|
|
44
44
|
GROOVY: 'Groovy'
|
|
45
45
|
};
|
|
46
|
-
const description = `| ${scriptObj.name} | ${langMap[scriptObj.language]} | ${
|
|
46
|
+
const description = `| ${scriptObj.name} | ${langMap[scriptObj.language]} | ${titleCase(scriptObj.context.split('_').join(' '))} | \`${scriptObj._id}\` |`;
|
|
47
47
|
return description;
|
|
48
48
|
}
|
|
49
49
|
|
|
@@ -251,6 +251,7 @@ export async function importScriptsFromFiles(watch, reUuid, validateScripts) {
|
|
|
251
251
|
/**
|
|
252
252
|
* Run on file change detection, as well as on initial run.
|
|
253
253
|
*/
|
|
254
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
254
255
|
function onChange(path, _stats) {
|
|
255
256
|
handleScriptFileImport(path, reUuid, validateScripts).catch(error => {
|
|
256
257
|
printMessage(`Error importing script: ${error.message}`, 'error');
|
package/esm/ops/ScriptOps.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScriptOps.js","names":["ExportImportUtils","Script","state","chokidar","fs","createProgressBar","createTable","debugMessage","failSpinner","printMessage","showSpinner","spinSpinner","stopProgressBar","succeedSpinner","updateProgressBar","getTypedFilename","saveJsonToFile","saveTextToFile","titleCase","wordwrap","getScripts","exportScripts","exportScript","exportScriptByName","importScripts","getOneLineDescription","scriptObj","description","_id","context","name","getTableHeaderMd","markdown","getTableRowMd","langMap","JAVASCRIPT","GROOVY","language","split","join","listScripts","long","outcome","scripts","sort","a","b","localeCompare","table","forEach","script","push","toString","error","message","exportScriptToFile","scriptId","file","fileName","scriptExport","exportScriptByNameToFile","exportScriptsToFile","getRealm","exportScriptsToFiles","scriptList","length","exportScriptsToFilesExtract","fileExtension","scriptFileName","scriptSkeleton","getScriptSkeleton","scriptText","Array","isArray","importScriptsFromFile","reUuid","readFile","err","data","importData","JSON","parse","importScriptsFromFiles","watch","validateScripts","onChange","path","_stats","handleScriptFileImport","catch","process","exit","watcher","persistent","on","close","scriptFile","getScriptFile","getScriptExportByScriptFile","success","endsWith","replace","getScriptExport","extractFile","getExtractFile","scriptRaw","readFileSync","startsWith","scriptExportRaw","getScriptId","scriptIds","Object","keys","Error"],"sources":["../../src/ops/ScriptOps.ts"],"sourcesContent":["import {\n ExportImportUtils,\n Script,\n state,\n Types,\n TypesRaw,\n} from '@rockcarver/frodo-lib';\nimport chokidar from 'chokidar';\nimport fs from 'fs';\nimport {\n createProgressBar,\n createTable,\n debugMessage,\n failSpinner,\n printMessage,\n showSpinner,\n spinSpinner,\n stopProgressBar,\n succeedSpinner,\n updateProgressBar,\n} from '../utils/Console';\nimport {\n getTypedFilename,\n saveJsonToFile,\n saveTextToFile,\n titleCase,\n} from '../utils/ExportImportUtils';\nimport wordwrap from './utils/Wordwrap';\n\nconst {\n getScripts,\n exportScripts,\n exportScript,\n exportScriptByName,\n importScripts,\n} = Script;\n\n/**\n * Get a one-line description of the script object\n * @param {TypesRaw.ScriptSkeleton} scriptObj script object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescription(\n scriptObj: TypesRaw.ScriptSkeleton\n): string {\n const description = `[${scriptObj._id['brightCyan']}] ${scriptObj.context} - ${scriptObj.name}`;\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 | Language | Type | Id |\\n';\n markdown += '| ---- | -------- | ---- | ---|';\n return markdown;\n}\n\n/**\n * Get a one-line description of the script object in markdown\n * @param {TypesRaw.ScriptSkeleton} scriptObj script object to describe\n * @returns {string} markdown table row\n */\nexport function getTableRowMd(scriptObj: TypesRaw.ScriptSkeleton): string {\n const langMap = { JAVASCRIPT: 'JavaSscript', GROOVY: 'Groovy' };\n const description = `| ${scriptObj.name} | ${\n langMap[scriptObj.language]\n } | ${ExportImportUtils.titleCase(\n scriptObj.context.split('_').join(' ')\n )} | \\`${scriptObj._id}\\` |`;\n return description;\n}\n\n/**\n * List scripts\n * @param {boolean} long detail list\n * @returns {Promise<boolean>} true if no errors occurred during export, false otherwise\n */\nexport async function listScripts(long = false): Promise<boolean> {\n let outcome = true;\n debugMessage(`Cli.ScriptOps.listScripts: start`);\n try {\n const scripts = await getScripts();\n scripts.sort((a, b) => a.name.localeCompare(b.name));\n if (long) {\n const table = createTable([\n 'Name',\n 'UUID',\n 'Language',\n 'Context',\n 'Description',\n ]);\n const langMap = { JAVASCRIPT: 'JS', GROOVY: 'Groovy' };\n scripts.forEach((script) => {\n table.push([\n wordwrap(script.name, 25, ' '),\n script._id,\n langMap[script.language],\n wordwrap(titleCase(script.context.split('_').join(' ')), 25),\n wordwrap(script.description, 30),\n ]);\n });\n printMessage(table.toString(), 'data');\n } else {\n scripts.forEach((script) => {\n printMessage(`${script.name}`, 'data');\n });\n }\n } catch (error) {\n outcome = false;\n printMessage(`Error listing scripts: ${error.message}`, 'error');\n debugMessage(error);\n }\n debugMessage(`Cli.ScriptOps.listScripts: end [${outcome}]`);\n return outcome;\n}\n\n/**\n * Export script by id to file\n * @param {string} scriptId script uuid\n * @param {string} file file name\n * @returns {Promise<boolean>} true if no errors occurred during export, false otherwise\n */\nexport async function exportScriptToFile(\n scriptId: string,\n file: string\n): Promise<boolean> {\n debugMessage(`Cli.ScriptOps.exportScriptToFile: start`);\n try {\n showSpinner(`Exporting script '${scriptId}'...`);\n let fileName = getTypedFilename(scriptId, 'script');\n if (file) {\n fileName = file;\n }\n spinSpinner(`Exporting script '${scriptId}' to '${fileName}'...`);\n const scriptExport = await exportScript(scriptId);\n saveJsonToFile(scriptExport, fileName);\n succeedSpinner(`Exported script '${scriptId}' to '${fileName}'.`);\n debugMessage(`Cli.ScriptOps.exportScriptToFile: end [true]`);\n return true;\n } catch (error) {\n failSpinner(`Error exporting script '${scriptId}': ${error.message}`);\n debugMessage(error);\n }\n debugMessage(`Cli.ScriptOps.exportScriptToFile: end [false]`);\n return false;\n}\n\n/**\n * Export script by name to file\n * @param {string} name script name\n * @param {string} file file name\n * @returns {Promise<boolean>} true if no errors occurred during export, false otherwise\n */\nexport async function exportScriptByNameToFile(\n name: string,\n file: string\n): Promise<boolean> {\n debugMessage(`Cli.ScriptOps.exportScriptByNameToFile: start`);\n try {\n showSpinner(`Exporting script '${name}'...`);\n let fileName = getTypedFilename(name, 'script');\n if (file) {\n fileName = file;\n }\n spinSpinner(`Exporting script '${name}' to '${fileName}'...`);\n const scriptExport = await exportScriptByName(name);\n saveJsonToFile(scriptExport, fileName);\n succeedSpinner(`Exported script '${name}' to '${fileName}'.`);\n debugMessage(`Cli.ScriptOps.exportScriptByNameToFile: end [true]`);\n return true;\n } catch (error) {\n failSpinner(`Error exporting script '${name}': ${error.message}`);\n debugMessage(error);\n }\n debugMessage(`Cli.ScriptOps.exportScriptByNameToFile: end [false]`);\n return false;\n}\n\n/**\n * Export all scripts to single file\n * @param {string} file file name\n * @returns {Promise<boolean>} true if no errors occurred during export, false otherwise\n */\nexport async function exportScriptsToFile(file: string): Promise<boolean> {\n debugMessage(`Cli.ScriptOps.exportScriptsToFile: start`);\n try {\n let fileName = getTypedFilename(\n `all${titleCase(state.getRealm())}Scripts`,\n 'script'\n );\n if (file) {\n fileName = file;\n }\n const scriptExport = await exportScripts();\n saveJsonToFile(scriptExport, fileName);\n debugMessage(`Cli.ScriptOps.exportScriptsToFile: end [true]`);\n return true;\n } catch (error) {\n printMessage(`Error exporting scripts: ${error.message}`, 'error');\n debugMessage(error);\n }\n debugMessage(`Cli.ScriptOps.exportScriptsToFile: end [false]`);\n return false;\n}\n\n/**\n * Export all scripts to individual files\n * @returns {Promise<boolean>} true if no errors occurred during export, false otherwise\n */\nexport async function exportScriptsToFiles(): Promise<boolean> {\n let outcome = true;\n debugMessage(`Cli.ScriptOps.exportScriptsToFiles: start`);\n const scriptList = await getScripts();\n createProgressBar(\n scriptList.length,\n 'Exporting scripts to individual files...'\n );\n for (const script of scriptList) {\n try {\n updateProgressBar(`Reading script ${script.name}`);\n const fileName = getTypedFilename(script.name, 'script');\n const scriptExport = await exportScriptByName(script.name);\n saveJsonToFile(scriptExport, fileName);\n } catch (error) {\n outcome = false;\n printMessage(\n `Error exporting script '${script.name}': ${error.message}`,\n 'error'\n );\n debugMessage(error);\n }\n }\n stopProgressBar(`Exported ${scriptList.length} scripts to individual files.`);\n debugMessage(`Cli.ScriptOps.exportScriptsToFiles: end [${outcome}]`);\n return outcome;\n}\n\nexport async function exportScriptsToFilesExtract(): Promise<boolean> {\n let outcome = true;\n debugMessage(`Cli.ScriptOps.exportScriptsToFilesExtract: start`);\n const scriptList = await getScripts();\n createProgressBar(\n scriptList.length,\n 'Exporting scripts to individual files...'\n );\n for (const script of scriptList) {\n try {\n updateProgressBar(`Reading script ${script.name}`);\n const fileExtension = script.language === 'JAVASCRIPT' ? 'js' : 'groovy';\n const scriptFileName = getTypedFilename(\n script.name,\n 'script',\n fileExtension\n );\n const fileName = getTypedFilename(script.name, 'script');\n\n const scriptExport = await exportScriptByName(script.name);\n\n const scriptSkeleton = getScriptSkeleton(scriptExport);\n\n const scriptText = Array.isArray(scriptSkeleton.script)\n ? scriptSkeleton.script.join('\\n')\n : scriptSkeleton.script;\n\n scriptSkeleton.script = `file://${scriptFileName}`;\n\n saveTextToFile(scriptText, scriptFileName);\n saveJsonToFile(scriptExport, fileName);\n } catch (error) {\n outcome = false;\n printMessage(\n `Error exporting script '${script.name}': ${error.message}`,\n 'error'\n );\n debugMessage(error);\n }\n }\n stopProgressBar(`Exported ${scriptList.length} scripts to individual files.`);\n debugMessage(`Cli.ScriptOps.exportScriptsToFilesExtract: end [${outcome}]`);\n return outcome;\n}\n\n/**\n * Import script(s) from file\n * @param {string} name Optional name of script. If supplied, only the script of that name is imported\n * @param {string} file file name\n * @param {boolean} reUuid true to generate a new uuid for each script on import, false otherwise\n * @returns {Promise<boolean>} true if no errors occurred during import, false otherwise\n */\nexport async function importScriptsFromFile(\n name: string,\n file: string,\n reUuid = false\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`Cli.ScriptOps.importScriptsFromFile: start`);\n fs.readFile(file, 'utf8', async (err, data) => {\n try {\n if (err) throw err;\n const importData = JSON.parse(data);\n outcome = await importScripts(name, importData, reUuid);\n } catch (error) {\n printMessage(\n `Error exporting script '${name}': ${error.message}`,\n 'error'\n );\n debugMessage(error);\n }\n });\n debugMessage(`Cli.ScriptOps.importScriptsFromFile: end [${outcome}]`);\n return outcome;\n}\n\n/**\n * Import extracted scripts.\n *\n * @param watch whether or not to watch for file changes\n */\nexport async function importScriptsFromFiles(\n watch: boolean,\n reUuid: boolean,\n validateScripts: boolean\n) {\n // If watch is true, it doesn't make sense to reUuid.\n reUuid = watch ? false : reUuid;\n\n /**\n * Run on file change detection, as well as on initial run.\n */\n function onChange(path: string, _stats?: fs.Stats): void {\n handleScriptFileImport(path, reUuid, validateScripts).catch((error) => {\n printMessage(`Error importing script: ${error.message}`, 'error');\n debugMessage(error);\n process.exit(1);\n });\n }\n\n // We watch json files and script files.\n const watcher = chokidar.watch(\n [`./**/*.script.json`, `./**/*.script.js`, `./**/*.script.groovy`],\n {\n persistent: watch,\n }\n );\n\n watcher\n .on('add', onChange)\n .on('change', onChange)\n .on('error', (error) => {\n printMessage(`Watcher error: ${error}`, 'error');\n watcher.close();\n })\n .on('ready', () => {\n if (watch) {\n printMessage('Watching for changes...');\n } else {\n watcher.close();\n printMessage('Done.');\n }\n });\n}\n\n/**\n * Handle a script file import.\n *\n * @param file Either a script file or an extract file\n * @param reUuid whether or not to generate a new uuid for each script on import\n */\nasync function handleScriptFileImport(\n file: string,\n reUuid: boolean,\n validateScripts: boolean\n) {\n debugMessage(`Cli.ScriptOps.handleScriptFileImport: start`);\n const scriptFile = getScriptFile(file);\n const script = getScriptExportByScriptFile(scriptFile);\n\n const success = await importScripts('', script, reUuid, validateScripts);\n if (success) {\n printMessage(`Imported '${scriptFile}'`);\n }\n debugMessage(`Cli.ScriptOps.handleScriptFileImport: end`);\n}\n\n/**\n * Get a script file from a file.\n *\n * @param file Either a script file or an extract file\n * @returns The script file\n */\nfunction getScriptFile(file: string) {\n if (file.endsWith('.script.json')) {\n return file;\n }\n return file.replace(/\\.script\\.(js|groovy)/, '.script.json');\n}\n\n/**\n * Get a script export from a script file.\n *\n * @param scriptFile The path to the script file\n * @returns The script export\n */\nfunction getScriptExportByScriptFile(\n scriptFile: string\n): Types.ScriptExportInterface {\n const scriptExport = getScriptExport(scriptFile);\n const scriptSkeleton = getScriptSkeleton(scriptExport);\n\n const extractFile = getExtractFile(scriptSkeleton);\n if (!extractFile) {\n return scriptExport;\n }\n\n const scriptRaw = fs.readFileSync(extractFile, 'utf8');\n scriptSkeleton.script = scriptRaw.split('\\n');\n\n return scriptExport;\n}\n\n/**\n * Get an extract file from a script skeleton.\n *\n * @param scriptSkeleton The script skeleton\n * @returns The extract file or null if there is no extract file\n */\nfunction getExtractFile(\n scriptSkeleton: TypesRaw.ScriptSkeleton\n): string | null {\n const extractFile = scriptSkeleton.script;\n if (Array.isArray(extractFile)) {\n return null;\n }\n if (\n extractFile.startsWith('file://') &&\n (extractFile.endsWith('.js') || extractFile.endsWith('.groovy'))\n ) {\n return extractFile.replace('file://', '');\n }\n return null;\n}\n\n/**\n * Get a script export from a file.\n *\n * @param file The path to a script export file\n * @returns The script export\n */\nfunction getScriptExport(file: string): Types.ScriptExportInterface {\n const scriptExportRaw = fs.readFileSync(file, 'utf8');\n const scriptExport = JSON.parse(\n scriptExportRaw\n ) as Types.ScriptExportInterface;\n\n return scriptExport;\n}\n\n/**\n * Get the main script skeleton from a script export. If there is more than one\n * script, an error is thrown.\n *\n * @param script Get the main script skeleton from a script export\n * @returns The main script skeleton\n */\nfunction getScriptSkeleton(\n script: Types.ScriptExportInterface\n): TypesRaw.ScriptSkeleton {\n const scriptId = getScriptId(script);\n return script.script[scriptId];\n}\n\n/**\n * Get the main script ID from a script export. If there is more than one\n * script, an error is thrown.\n *\n * @param script The script export\n * @returns The main script ID\n */\nfunction getScriptId(script: Types.ScriptExportInterface): string {\n const scriptIds = Object.keys(script.script);\n if (scriptIds.length !== 1) {\n throw new Error(`Expected 1 script, found ${scriptIds.length}`);\n }\n return scriptIds[0];\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ScriptOps.js","names":["frodo","state","chokidar","fs","createProgressBar","createTable","debugMessage","failSpinner","printMessage","showSpinner","spinSpinner","stopProgressBar","succeedSpinner","updateProgressBar","getTypedFilename","saveJsonToFile","saveTextToFile","titleCase","wordwrap","getScripts","exportScript","exportScriptByName","exportScripts","importScripts","script","getOneLineDescription","scriptObj","description","_id","context","name","getTableHeaderMd","markdown","getTableRowMd","langMap","JAVASCRIPT","GROOVY","language","split","join","listScripts","long","outcome","scripts","sort","a","b","localeCompare","table","forEach","push","toString","error","message","exportScriptToFile","scriptId","file","fileName","scriptExport","exportScriptByNameToFile","exportScriptsToFile","getRealm","exportScriptsToFiles","scriptList","length","exportScriptsToFilesExtract","fileExtension","scriptFileName","scriptSkeleton","getScriptSkeleton","scriptText","Array","isArray","importScriptsFromFile","reUuid","readFile","err","data","importData","JSON","parse","importScriptsFromFiles","watch","validateScripts","onChange","path","_stats","handleScriptFileImport","catch","process","exit","watcher","persistent","on","close","scriptFile","getScriptFile","getScriptExportByScriptFile","success","endsWith","replace","getScriptExport","extractFile","getExtractFile","scriptRaw","readFileSync","startsWith","scriptExportRaw","getScriptId","scriptIds","Object","keys","Error"],"sources":["../../src/ops/ScriptOps.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport chokidar from 'chokidar';\nimport fs from 'fs';\nimport {\n createProgressBar,\n createTable,\n debugMessage,\n failSpinner,\n printMessage,\n showSpinner,\n spinSpinner,\n stopProgressBar,\n succeedSpinner,\n updateProgressBar,\n} from '../utils/Console';\nimport {\n getTypedFilename,\n saveJsonToFile,\n saveTextToFile,\n titleCase,\n} from '../utils/ExportImportUtils';\nimport wordwrap from './utils/Wordwrap';\nimport type { ScriptSkeleton } from '@rockcarver/frodo-lib/types/api/ApiTypes';\nimport type { ScriptExportInterface } from '@rockcarver/frodo-lib/types/ops/OpsTypes';\n\nconst {\n getScripts,\n exportScript,\n exportScriptByName,\n exportScripts,\n importScripts,\n} = frodo.script;\n\n/**\n * Get a one-line description of the script object\n * @param {ScriptSkeleton} scriptObj script object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescription(scriptObj: ScriptSkeleton): string {\n const description = `[${scriptObj._id['brightCyan']}] ${scriptObj.context} - ${scriptObj.name}`;\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 | Language | Type | Id |\\n';\n markdown += '| ---- | -------- | ---- | ---|';\n return markdown;\n}\n\n/**\n * Get a one-line description of the script object in markdown\n * @param {TypesRaw.ScriptSkeleton} scriptObj script object to describe\n * @returns {string} markdown table row\n */\nexport function getTableRowMd(scriptObj: ScriptSkeleton): string {\n const langMap = { JAVASCRIPT: 'JavaSscript', GROOVY: 'Groovy' };\n const description = `| ${scriptObj.name} | ${\n langMap[scriptObj.language]\n } | ${titleCase(scriptObj.context.split('_').join(' '))} | \\`${\n scriptObj._id\n }\\` |`;\n return description;\n}\n\n/**\n * List scripts\n * @param {boolean} long detail list\n * @returns {Promise<boolean>} true if no errors occurred during export, false otherwise\n */\nexport async function listScripts(long = false): Promise<boolean> {\n let outcome = true;\n debugMessage(`Cli.ScriptOps.listScripts: start`);\n try {\n const scripts = await getScripts();\n scripts.sort((a, b) => a.name.localeCompare(b.name));\n if (long) {\n const table = createTable([\n 'Name',\n 'UUID',\n 'Language',\n 'Context',\n 'Description',\n ]);\n const langMap = { JAVASCRIPT: 'JS', GROOVY: 'Groovy' };\n scripts.forEach((script) => {\n table.push([\n wordwrap(script.name, 25, ' '),\n script._id,\n langMap[script.language],\n wordwrap(titleCase(script.context.split('_').join(' ')), 25),\n wordwrap(script.description, 30),\n ]);\n });\n printMessage(table.toString(), 'data');\n } else {\n scripts.forEach((script) => {\n printMessage(`${script.name}`, 'data');\n });\n }\n } catch (error) {\n outcome = false;\n printMessage(`Error listing scripts: ${error.message}`, 'error');\n debugMessage(error);\n }\n debugMessage(`Cli.ScriptOps.listScripts: end [${outcome}]`);\n return outcome;\n}\n\n/**\n * Export script by id to file\n * @param {string} scriptId script uuid\n * @param {string} file file name\n * @returns {Promise<boolean>} true if no errors occurred during export, false otherwise\n */\nexport async function exportScriptToFile(\n scriptId: string,\n file: string\n): Promise<boolean> {\n debugMessage(`Cli.ScriptOps.exportScriptToFile: start`);\n try {\n showSpinner(`Exporting script '${scriptId}'...`);\n let fileName = getTypedFilename(scriptId, 'script');\n if (file) {\n fileName = file;\n }\n spinSpinner(`Exporting script '${scriptId}' to '${fileName}'...`);\n const scriptExport = await exportScript(scriptId);\n saveJsonToFile(scriptExport, fileName);\n succeedSpinner(`Exported script '${scriptId}' to '${fileName}'.`);\n debugMessage(`Cli.ScriptOps.exportScriptToFile: end [true]`);\n return true;\n } catch (error) {\n failSpinner(`Error exporting script '${scriptId}': ${error.message}`);\n debugMessage(error);\n }\n debugMessage(`Cli.ScriptOps.exportScriptToFile: end [false]`);\n return false;\n}\n\n/**\n * Export script by name to file\n * @param {string} name script name\n * @param {string} file file name\n * @returns {Promise<boolean>} true if no errors occurred during export, false otherwise\n */\nexport async function exportScriptByNameToFile(\n name: string,\n file: string\n): Promise<boolean> {\n debugMessage(`Cli.ScriptOps.exportScriptByNameToFile: start`);\n try {\n showSpinner(`Exporting script '${name}'...`);\n let fileName = getTypedFilename(name, 'script');\n if (file) {\n fileName = file;\n }\n spinSpinner(`Exporting script '${name}' to '${fileName}'...`);\n const scriptExport = await exportScriptByName(name);\n saveJsonToFile(scriptExport, fileName);\n succeedSpinner(`Exported script '${name}' to '${fileName}'.`);\n debugMessage(`Cli.ScriptOps.exportScriptByNameToFile: end [true]`);\n return true;\n } catch (error) {\n failSpinner(`Error exporting script '${name}': ${error.message}`);\n debugMessage(error);\n }\n debugMessage(`Cli.ScriptOps.exportScriptByNameToFile: end [false]`);\n return false;\n}\n\n/**\n * Export all scripts to single file\n * @param {string} file file name\n * @returns {Promise<boolean>} true if no errors occurred during export, false otherwise\n */\nexport async function exportScriptsToFile(file: string): Promise<boolean> {\n debugMessage(`Cli.ScriptOps.exportScriptsToFile: start`);\n try {\n let fileName = getTypedFilename(\n `all${titleCase(state.getRealm())}Scripts`,\n 'script'\n );\n if (file) {\n fileName = file;\n }\n const scriptExport = await exportScripts();\n saveJsonToFile(scriptExport, fileName);\n debugMessage(`Cli.ScriptOps.exportScriptsToFile: end [true]`);\n return true;\n } catch (error) {\n printMessage(`Error exporting scripts: ${error.message}`, 'error');\n debugMessage(error);\n }\n debugMessage(`Cli.ScriptOps.exportScriptsToFile: end [false]`);\n return false;\n}\n\n/**\n * Export all scripts to individual files\n * @returns {Promise<boolean>} true if no errors occurred during export, false otherwise\n */\nexport async function exportScriptsToFiles(): Promise<boolean> {\n let outcome = true;\n debugMessage(`Cli.ScriptOps.exportScriptsToFiles: start`);\n const scriptList = await getScripts();\n createProgressBar(\n scriptList.length,\n 'Exporting scripts to individual files...'\n );\n for (const script of scriptList) {\n try {\n updateProgressBar(`Reading script ${script.name}`);\n const fileName = getTypedFilename(script.name, 'script');\n const scriptExport = await exportScriptByName(script.name);\n saveJsonToFile(scriptExport, fileName);\n } catch (error) {\n outcome = false;\n printMessage(\n `Error exporting script '${script.name}': ${error.message}`,\n 'error'\n );\n debugMessage(error);\n }\n }\n stopProgressBar(`Exported ${scriptList.length} scripts to individual files.`);\n debugMessage(`Cli.ScriptOps.exportScriptsToFiles: end [${outcome}]`);\n return outcome;\n}\n\nexport async function exportScriptsToFilesExtract(): Promise<boolean> {\n let outcome = true;\n debugMessage(`Cli.ScriptOps.exportScriptsToFilesExtract: start`);\n const scriptList = await getScripts();\n createProgressBar(\n scriptList.length,\n 'Exporting scripts to individual files...'\n );\n for (const script of scriptList) {\n try {\n updateProgressBar(`Reading script ${script.name}`);\n const fileExtension = script.language === 'JAVASCRIPT' ? 'js' : 'groovy';\n const scriptFileName = getTypedFilename(\n script.name,\n 'script',\n fileExtension\n );\n const fileName = getTypedFilename(script.name, 'script');\n\n const scriptExport = await exportScriptByName(script.name);\n\n const scriptSkeleton = getScriptSkeleton(scriptExport);\n\n const scriptText = Array.isArray(scriptSkeleton.script)\n ? scriptSkeleton.script.join('\\n')\n : scriptSkeleton.script;\n\n scriptSkeleton.script = `file://${scriptFileName}`;\n\n saveTextToFile(scriptText, scriptFileName);\n saveJsonToFile(scriptExport, fileName);\n } catch (error) {\n outcome = false;\n printMessage(\n `Error exporting script '${script.name}': ${error.message}`,\n 'error'\n );\n debugMessage(error);\n }\n }\n stopProgressBar(`Exported ${scriptList.length} scripts to individual files.`);\n debugMessage(`Cli.ScriptOps.exportScriptsToFilesExtract: end [${outcome}]`);\n return outcome;\n}\n\n/**\n * Import script(s) from file\n * @param {string} name Optional name of script. If supplied, only the script of that name is imported\n * @param {string} file file name\n * @param {boolean} reUuid true to generate a new uuid for each script on import, false otherwise\n * @returns {Promise<boolean>} true if no errors occurred during import, false otherwise\n */\nexport async function importScriptsFromFile(\n name: string,\n file: string,\n reUuid = false\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`Cli.ScriptOps.importScriptsFromFile: start`);\n fs.readFile(file, 'utf8', async (err, data) => {\n try {\n if (err) throw err;\n const importData = JSON.parse(data);\n outcome = await importScripts(name, importData, reUuid);\n } catch (error) {\n printMessage(\n `Error exporting script '${name}': ${error.message}`,\n 'error'\n );\n debugMessage(error);\n }\n });\n debugMessage(`Cli.ScriptOps.importScriptsFromFile: end [${outcome}]`);\n return outcome;\n}\n\n/**\n * Import extracted scripts.\n *\n * @param watch whether or not to watch for file changes\n */\nexport async function importScriptsFromFiles(\n watch: boolean,\n reUuid: boolean,\n validateScripts: boolean\n) {\n // If watch is true, it doesn't make sense to reUuid.\n reUuid = watch ? false : reUuid;\n\n /**\n * Run on file change detection, as well as on initial run.\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n function onChange(path: string, _stats?: fs.Stats): void {\n handleScriptFileImport(path, reUuid, validateScripts).catch((error) => {\n printMessage(`Error importing script: ${error.message}`, 'error');\n debugMessage(error);\n process.exit(1);\n });\n }\n\n // We watch json files and script files.\n const watcher = chokidar.watch(\n [`./**/*.script.json`, `./**/*.script.js`, `./**/*.script.groovy`],\n {\n persistent: watch,\n }\n );\n\n watcher\n .on('add', onChange)\n .on('change', onChange)\n .on('error', (error) => {\n printMessage(`Watcher error: ${error}`, 'error');\n watcher.close();\n })\n .on('ready', () => {\n if (watch) {\n printMessage('Watching for changes...');\n } else {\n watcher.close();\n printMessage('Done.');\n }\n });\n}\n\n/**\n * Handle a script file import.\n *\n * @param file Either a script file or an extract file\n * @param reUuid whether or not to generate a new uuid for each script on import\n */\nasync function handleScriptFileImport(\n file: string,\n reUuid: boolean,\n validateScripts: boolean\n) {\n debugMessage(`Cli.ScriptOps.handleScriptFileImport: start`);\n const scriptFile = getScriptFile(file);\n const script = getScriptExportByScriptFile(scriptFile);\n\n const success = await importScripts('', script, reUuid, validateScripts);\n if (success) {\n printMessage(`Imported '${scriptFile}'`);\n }\n debugMessage(`Cli.ScriptOps.handleScriptFileImport: end`);\n}\n\n/**\n * Get a script file from a file.\n *\n * @param file Either a script file or an extract file\n * @returns The script file\n */\nfunction getScriptFile(file: string) {\n if (file.endsWith('.script.json')) {\n return file;\n }\n return file.replace(/\\.script\\.(js|groovy)/, '.script.json');\n}\n\n/**\n * Get a script export from a script file.\n *\n * @param scriptFile The path to the script file\n * @returns The script export\n */\nfunction getScriptExportByScriptFile(\n scriptFile: string\n): ScriptExportInterface {\n const scriptExport = getScriptExport(scriptFile);\n const scriptSkeleton = getScriptSkeleton(scriptExport);\n\n const extractFile = getExtractFile(scriptSkeleton);\n if (!extractFile) {\n return scriptExport;\n }\n\n const scriptRaw = fs.readFileSync(extractFile, 'utf8');\n scriptSkeleton.script = scriptRaw.split('\\n');\n\n return scriptExport;\n}\n\n/**\n * Get an extract file from a script skeleton.\n *\n * @param scriptSkeleton The script skeleton\n * @returns The extract file or null if there is no extract file\n */\nfunction getExtractFile(scriptSkeleton: ScriptSkeleton): string | null {\n const extractFile = scriptSkeleton.script;\n if (Array.isArray(extractFile)) {\n return null;\n }\n if (\n extractFile.startsWith('file://') &&\n (extractFile.endsWith('.js') || extractFile.endsWith('.groovy'))\n ) {\n return extractFile.replace('file://', '');\n }\n return null;\n}\n\n/**\n * Get a script export from a file.\n *\n * @param file The path to a script export file\n * @returns The script export\n */\nfunction getScriptExport(file: string): ScriptExportInterface {\n const scriptExportRaw = fs.readFileSync(file, 'utf8');\n const scriptExport = JSON.parse(scriptExportRaw) as ScriptExportInterface;\n\n return scriptExport;\n}\n\n/**\n * Get the main script skeleton from a script export. If there is more than one\n * script, an error is thrown.\n *\n * @param script Get the main script skeleton from a script export\n * @returns The main script skeleton\n */\nfunction getScriptSkeleton(script: ScriptExportInterface): ScriptSkeleton {\n const scriptId = getScriptId(script);\n return script.script[scriptId];\n}\n\n/**\n * Get the main script ID from a script export. If there is more than one\n * script, an error is thrown.\n *\n * @param script The script export\n * @returns The main script ID\n */\nfunction getScriptId(script: ScriptExportInterface): string {\n const scriptIds = Object.keys(script.script);\n if (scriptIds.length !== 1) {\n throw new Error(`Expected 1 script, found ${scriptIds.length}`);\n }\n return scriptIds[0];\n}\n"],"mappings":"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"}
|