@rockcarver/frodo-cli 2.0.0-5 → 2.0.0-51
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +365 -6
- package/esm/app.js +20 -3
- package/esm/app.js.map +1 -1
- package/esm/cli/FrodoCommand.js +33 -7
- package/esm/cli/FrodoCommand.js.map +1 -1
- package/esm/cli/_template/something-delete.js +4 -5
- package/esm/cli/_template/something-delete.js.map +1 -1
- package/esm/cli/_template/something-describe.js +4 -5
- package/esm/cli/_template/something-describe.js.map +1 -1
- package/esm/cli/_template/something-else-delete.js +4 -5
- package/esm/cli/_template/something-else-delete.js.map +1 -1
- package/esm/cli/_template/something-else-describe.js +4 -5
- package/esm/cli/_template/something-else-describe.js.map +1 -1
- package/esm/cli/_template/something-else-export.js +5 -6
- package/esm/cli/_template/something-else-export.js.map +1 -1
- package/esm/cli/_template/something-else-import.js +4 -5
- package/esm/cli/_template/something-else-import.js.map +1 -1
- package/esm/cli/_template/something-else-list.js +4 -5
- package/esm/cli/_template/something-else-list.js.map +1 -1
- package/esm/cli/_template/something-else.js +1 -1
- package/esm/cli/_template/something-else.js.map +1 -1
- package/esm/cli/_template/something-export.js +5 -6
- package/esm/cli/_template/something-export.js.map +1 -1
- package/esm/cli/_template/something-import.js +4 -5
- package/esm/cli/_template/something-import.js.map +1 -1
- package/esm/cli/_template/something-list.js +4 -5
- package/esm/cli/_template/something-list.js.map +1 -1
- package/esm/cli/_template/something-other-delete.js +4 -5
- package/esm/cli/_template/something-other-delete.js.map +1 -1
- package/esm/cli/_template/something-other-describe.js +4 -5
- package/esm/cli/_template/something-other-describe.js.map +1 -1
- package/esm/cli/_template/something-other-export.js +5 -6
- package/esm/cli/_template/something-other-export.js.map +1 -1
- package/esm/cli/_template/something-other-import.js +4 -5
- package/esm/cli/_template/something-other-import.js.map +1 -1
- package/esm/cli/_template/something-other-list.js +4 -5
- package/esm/cli/_template/something-other-list.js.map +1 -1
- package/esm/cli/_template/something-other.js +1 -1
- package/esm/cli/_template/something-other.js.map +1 -1
- package/esm/cli/_template/something.js +2 -2
- package/esm/cli/_template/something.js.map +1 -1
- package/esm/cli/admin/admin-add-autoid-static-user-mapping.js +8 -5
- 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 +12 -8
- package/esm/cli/admin/admin-create-oauth2-client-with-admin-privileges.js.map +1 -1
- package/esm/cli/admin/admin-execute-rfc7523-authz-grant-flow.js +38 -0
- package/esm/cli/admin/admin-execute-rfc7523-authz-grant-flow.js.map +1 -0
- package/esm/cli/admin/admin-federation-export.js +41 -0
- package/esm/cli/admin/admin-federation-export.js.map +1 -0
- package/esm/cli/admin/admin-federation-import.js +45 -0
- package/esm/cli/admin/admin-federation-import.js.map +1 -0
- package/esm/cli/admin/admin-federation-list.js +25 -0
- package/esm/cli/admin/admin-federation-list.js.map +1 -0
- package/esm/cli/admin/admin-federation.js +13 -0
- package/esm/cli/admin/admin-federation.js.map +1 -0
- package/esm/cli/admin/admin-generate-rfc7523-authz-grant-artefacts.js +41 -0
- package/esm/cli/admin/admin-generate-rfc7523-authz-grant-artefacts.js.map +1 -0
- package/esm/cli/admin/admin-get-access-token.js +10 -7
- package/esm/cli/admin/admin-get-access-token.js.map +1 -1
- package/esm/cli/admin/admin-grant-oauth2-client-admin-privileges.js +11 -8
- package/esm/cli/admin/admin-grant-oauth2-client-admin-privileges.js.map +1 -1
- package/esm/cli/admin/admin-hide-generic-extension-attributes.js +9 -6
- 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 +9 -6
- 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 +9 -6
- 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 +10 -7
- package/esm/cli/admin/admin-list-static-user-mappings.js.map +1 -1
- package/esm/cli/admin/admin-remove-static-user-mapping.js +10 -6
- package/esm/cli/admin/admin-remove-static-user-mapping.js.map +1 -1
- package/esm/cli/admin/admin-repair-org-model.js +9 -6
- package/esm/cli/admin/admin-repair-org-model.js.map +1 -1
- package/esm/cli/admin/admin-revoke-oauth2-client-admin-privileges.js +10 -7
- package/esm/cli/admin/admin-revoke-oauth2-client-admin-privileges.js.map +1 -1
- package/esm/cli/admin/admin-show-generic-extension-attributes.js +9 -6
- package/esm/cli/admin/admin-show-generic-extension-attributes.js.map +1 -1
- package/esm/cli/admin/admin-train-auto-access-model.js +30 -0
- package/esm/cli/admin/admin-train-auto-access-model.js.map +1 -0
- package/esm/cli/admin/admin.js +8 -2
- package/esm/cli/admin/admin.js.map +1 -1
- package/esm/cli/agent/agent-delete.js +11 -7
- package/esm/cli/agent/agent-delete.js.map +1 -1
- package/esm/cli/agent/agent-describe.js +4 -5
- package/esm/cli/agent/agent-describe.js.map +1 -1
- package/esm/cli/agent/agent-export.js +9 -10
- package/esm/cli/agent/agent-export.js.map +1 -1
- package/esm/cli/agent/agent-gateway-delete.js +11 -7
- package/esm/cli/agent/agent-gateway-delete.js.map +1 -1
- package/esm/cli/agent/agent-gateway-describe.js +4 -5
- package/esm/cli/agent/agent-gateway-describe.js.map +1 -1
- package/esm/cli/agent/agent-gateway-export.js +9 -10
- package/esm/cli/agent/agent-gateway-export.js.map +1 -1
- package/esm/cli/agent/agent-gateway-import.js +5 -6
- package/esm/cli/agent/agent-gateway-import.js.map +1 -1
- package/esm/cli/agent/agent-gateway-list.js +4 -5
- package/esm/cli/agent/agent-gateway-list.js.map +1 -1
- package/esm/cli/agent/agent-gateway.js +1 -1
- package/esm/cli/agent/agent-gateway.js.map +1 -1
- package/esm/cli/agent/agent-import.js +5 -6
- package/esm/cli/agent/agent-import.js.map +1 -1
- package/esm/cli/agent/agent-java-delete.js +11 -7
- package/esm/cli/agent/agent-java-delete.js.map +1 -1
- package/esm/cli/agent/agent-java-describe.js +4 -5
- package/esm/cli/agent/agent-java-describe.js.map +1 -1
- package/esm/cli/agent/agent-java-export.js +9 -10
- package/esm/cli/agent/agent-java-export.js.map +1 -1
- package/esm/cli/agent/agent-java-import.js +5 -6
- package/esm/cli/agent/agent-java-import.js.map +1 -1
- package/esm/cli/agent/agent-java-list.js +4 -5
- package/esm/cli/agent/agent-java-list.js.map +1 -1
- package/esm/cli/agent/agent-java.js +1 -1
- package/esm/cli/agent/agent-java.js.map +1 -1
- package/esm/cli/agent/agent-list.js +4 -5
- package/esm/cli/agent/agent-list.js.map +1 -1
- package/esm/cli/agent/agent-web-delete.js +11 -7
- package/esm/cli/agent/agent-web-delete.js.map +1 -1
- package/esm/cli/agent/agent-web-describe.js +4 -5
- package/esm/cli/agent/agent-web-describe.js.map +1 -1
- package/esm/cli/agent/agent-web-export.js +9 -10
- package/esm/cli/agent/agent-web-export.js.map +1 -1
- package/esm/cli/agent/agent-web-import.js +5 -6
- package/esm/cli/agent/agent-web-import.js.map +1 -1
- package/esm/cli/agent/agent-web-list.js +4 -5
- package/esm/cli/agent/agent-web-list.js.map +1 -1
- package/esm/cli/agent/agent-web.js +3 -3
- package/esm/cli/agent/agent-web.js.map +1 -1
- package/esm/cli/agent/agent.js +2 -2
- package/esm/cli/agent/agent.js.map +1 -1
- package/esm/cli/app/app-delete.js +24 -9
- package/esm/cli/app/app-delete.js.map +1 -1
- package/esm/cli/app/app-describe.js +6 -6
- package/esm/cli/app/app-describe.js.map +1 -1
- package/esm/cli/app/app-export.js +14 -14
- package/esm/cli/app/app-export.js.map +1 -1
- package/esm/cli/app/app-import.js +18 -18
- package/esm/cli/app/app-import.js.map +1 -1
- package/esm/cli/app/app-list.js +9 -9
- package/esm/cli/app/app-list.js.map +1 -1
- package/esm/cli/app/app.js +8 -12
- package/esm/cli/app/app.js.map +1 -1
- package/esm/cli/authn/authn-describe.js +26 -0
- package/esm/cli/authn/authn-describe.js.map +1 -0
- package/esm/cli/authn/authn-export.js +22 -0
- package/esm/cli/authn/authn-export.js.map +1 -0
- package/esm/cli/authn/authn-import.js +22 -0
- package/esm/cli/authn/authn-import.js.map +1 -0
- package/esm/cli/authn/authn.js +12 -0
- package/esm/cli/authn/authn.js.map +1 -0
- package/esm/cli/authz/authz-policy-delete.js +8 -9
- package/esm/cli/authz/authz-policy-delete.js.map +1 -1
- package/esm/cli/authz/authz-policy-describe.js +5 -6
- package/esm/cli/authz/authz-policy-describe.js.map +1 -1
- package/esm/cli/authz/authz-policy-export.js +15 -16
- package/esm/cli/authz/authz-policy-export.js.map +1 -1
- package/esm/cli/authz/authz-policy-import.js +8 -9
- package/esm/cli/authz/authz-policy-import.js.map +1 -1
- package/esm/cli/authz/authz-policy-list.js +8 -9
- package/esm/cli/authz/authz-policy-list.js.map +1 -1
- package/esm/cli/authz/authz-policy.js +1 -1
- package/esm/cli/authz/authz-policy.js.map +1 -1
- package/esm/cli/authz/authz-set-delete.js +8 -9
- package/esm/cli/authz/authz-set-delete.js.map +1 -1
- package/esm/cli/authz/authz-set-describe.js +5 -6
- package/esm/cli/authz/authz-set-describe.js.map +1 -1
- package/esm/cli/authz/authz-set-export.js +11 -12
- package/esm/cli/authz/authz-set-export.js.map +1 -1
- package/esm/cli/authz/authz-set-import.js +8 -9
- package/esm/cli/authz/authz-set-import.js.map +1 -1
- package/esm/cli/authz/authz-set-list.js +6 -7
- package/esm/cli/authz/authz-set-list.js.map +1 -1
- package/esm/cli/authz/authz-set.js +1 -1
- package/esm/cli/authz/authz-set.js.map +1 -1
- package/esm/cli/authz/authz-type-delete.js +10 -11
- package/esm/cli/authz/authz-type-delete.js.map +1 -1
- package/esm/cli/authz/authz-type-describe.js +6 -7
- package/esm/cli/authz/authz-type-describe.js.map +1 -1
- package/esm/cli/authz/authz-type-export.js +13 -14
- package/esm/cli/authz/authz-type-export.js.map +1 -1
- package/esm/cli/authz/authz-type-import.js +11 -12
- package/esm/cli/authz/authz-type-import.js.map +1 -1
- package/esm/cli/authz/authz-type-list.js +6 -7
- package/esm/cli/authz/authz-type-list.js.map +1 -1
- package/esm/cli/authz/authz-type.js +1 -1
- package/esm/cli/authz/authz-type.js.map +1 -1
- package/esm/cli/authz/authz.js +2 -2
- package/esm/cli/authz/authz.js.map +1 -1
- package/esm/cli/config/config-delete.js +18 -0
- package/esm/cli/config/config-delete.js.map +1 -0
- package/esm/cli/config/config-describe.js +18 -0
- package/esm/cli/config/config-describe.js.map +1 -0
- package/esm/cli/config/config-export.js +45 -0
- package/esm/cli/config/config-export.js.map +1 -0
- package/esm/cli/config/config-import.js +54 -0
- package/esm/cli/config/config-import.js.map +1 -0
- package/esm/cli/config/config-list.js +18 -0
- package/esm/cli/config/config-list.js.map +1 -0
- package/esm/cli/config/config.js +19 -0
- package/esm/cli/config/config.js.map +1 -0
- package/esm/cli/conn/conn-delete.js +2 -3
- package/esm/cli/conn/conn-delete.js.map +1 -1
- package/esm/cli/conn/conn-describe.js +2 -3
- package/esm/cli/conn/conn-describe.js.map +1 -1
- package/esm/cli/conn/conn-list.js +2 -3
- package/esm/cli/conn/conn-list.js.map +1 -1
- package/esm/cli/conn/conn-save.js +25 -15
- package/esm/cli/conn/conn-save.js.map +1 -1
- package/esm/cli/conn/conn.js +2 -2
- package/esm/cli/conn/conn.js.map +1 -1
- package/esm/cli/email/email-template-export.js +12 -12
- package/esm/cli/email/email-template-export.js.map +1 -1
- package/esm/cli/email/email-template-import.js +12 -13
- package/esm/cli/email/email-template-import.js.map +1 -1
- package/esm/cli/email/email-template-list.js +6 -7
- package/esm/cli/email/email-template-list.js.map +1 -1
- package/esm/cli/email/email-template.js +1 -1
- package/esm/cli/email/email-template.js.map +1 -1
- package/esm/cli/email/email.js +2 -2
- package/esm/cli/email/email.js.map +1 -1
- package/esm/cli/esv/esv-apply.js +16 -9
- package/esm/cli/esv/esv-apply.js.map +1 -1
- package/esm/cli/esv/esv-secret-create.js +13 -8
- package/esm/cli/esv/esv-secret-create.js.map +1 -1
- package/esm/cli/esv/esv-secret-delete.js +10 -10
- package/esm/cli/esv/esv-secret-delete.js.map +1 -1
- package/esm/cli/esv/esv-secret-describe.js +7 -7
- package/esm/cli/esv/esv-secret-describe.js.map +1 -1
- package/esm/cli/esv/esv-secret-export.js +20 -7
- package/esm/cli/esv/esv-secret-export.js.map +1 -1
- package/esm/cli/esv/esv-secret-import.js +4 -5
- package/esm/cli/esv/esv-secret-import.js.map +1 -1
- package/esm/cli/esv/esv-secret-list.js +8 -8
- package/esm/cli/esv/esv-secret-list.js.map +1 -1
- package/esm/cli/esv/esv-secret-set.js +7 -7
- package/esm/cli/esv/esv-secret-set.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-activate.js +7 -8
- package/esm/cli/esv/esv-secret-version-activate.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-create.js +13 -8
- package/esm/cli/esv/esv-secret-version-create.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-deactivate.js +7 -8
- package/esm/cli/esv/esv-secret-version-deactivate.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-delete.js +10 -10
- package/esm/cli/esv/esv-secret-version-delete.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-list.js +7 -7
- package/esm/cli/esv/esv-secret-version-list.js.map +1 -1
- package/esm/cli/esv/esv-secret-version.js +1 -1
- package/esm/cli/esv/esv-secret-version.js.map +1 -1
- package/esm/cli/esv/esv-secret.js +2 -3
- package/esm/cli/esv/esv-secret.js.map +1 -1
- package/esm/cli/esv/esv-variable-create.js +9 -8
- package/esm/cli/esv/esv-variable-create.js.map +1 -1
- package/esm/cli/esv/esv-variable-delete.js +10 -9
- package/esm/cli/esv/esv-variable-delete.js.map +1 -1
- package/esm/cli/esv/esv-variable-describe.js +8 -8
- package/esm/cli/esv/esv-variable-describe.js.map +1 -1
- package/esm/cli/esv/esv-variable-export.js +21 -7
- package/esm/cli/esv/esv-variable-export.js.map +1 -1
- package/esm/cli/esv/esv-variable-import.js +4 -5
- package/esm/cli/esv/esv-variable-import.js.map +1 -1
- package/esm/cli/esv/esv-variable-list.js +8 -8
- package/esm/cli/esv/esv-variable-list.js.map +1 -1
- package/esm/cli/esv/esv-variable-set.js +10 -9
- package/esm/cli/esv/esv-variable-set.js.map +1 -1
- package/esm/cli/esv/esv-variable.js +2 -3
- package/esm/cli/esv/esv-variable.js.map +1 -1
- package/esm/cli/esv/esv.js +2 -2
- package/esm/cli/esv/esv.js.map +1 -1
- package/esm/cli/idm/idm-count.js +7 -8
- package/esm/cli/idm/idm-count.js.map +1 -1
- package/esm/cli/idm/idm-export.js +22 -16
- package/esm/cli/idm/idm-export.js.map +1 -1
- package/esm/cli/idm/idm-import.js +20 -14
- package/esm/cli/idm/idm-import.js.map +1 -1
- package/esm/cli/idm/idm-list.js +7 -8
- package/esm/cli/idm/idm-list.js.map +1 -1
- package/esm/cli/idm/idm.js +2 -2
- package/esm/cli/idm/idm.js.map +1 -1
- package/esm/cli/idp/idp-export.js +10 -10
- package/esm/cli/idp/idp-export.js.map +1 -1
- package/esm/cli/idp/idp-import.js +22 -14
- package/esm/cli/idp/idp-import.js.map +1 -1
- package/esm/cli/idp/idp-list.js +7 -7
- package/esm/cli/idp/idp-list.js.map +1 -1
- package/esm/cli/idp/idp.js +2 -2
- package/esm/cli/idp/idp.js.map +1 -1
- package/esm/cli/info/info.js +11 -7
- package/esm/cli/info/info.js.map +1 -1
- package/esm/cli/journey/journey-delete.js +12 -8
- package/esm/cli/journey/journey-delete.js.map +1 -1
- package/esm/cli/journey/journey-describe.js +20 -12
- package/esm/cli/journey/journey-describe.js.map +1 -1
- package/esm/cli/journey/journey-disable.js +8 -12
- package/esm/cli/journey/journey-disable.js.map +1 -1
- package/esm/cli/journey/journey-enable.js +8 -12
- package/esm/cli/journey/journey-enable.js.map +1 -1
- package/esm/cli/journey/journey-export.js +27 -16
- package/esm/cli/journey/journey-export.js.map +1 -1
- package/esm/cli/journey/journey-import.js +12 -13
- package/esm/cli/journey/journey-import.js.map +1 -1
- package/esm/cli/journey/journey-list.js +6 -6
- package/esm/cli/journey/journey-list.js.map +1 -1
- package/esm/cli/journey/journey-prune.js +21 -13
- package/esm/cli/journey/journey-prune.js.map +1 -1
- package/esm/cli/journey/journey.js +2 -2
- package/esm/cli/journey/journey.js.map +1 -1
- package/esm/cli/log/log-fetch.js +65 -35
- package/esm/cli/log/log-fetch.js.map +1 -1
- package/esm/cli/log/log-key-delete.js +6 -7
- package/esm/cli/log/log-key-delete.js.map +1 -1
- package/esm/cli/log/log-key-describe.js +4 -5
- package/esm/cli/log/log-key-describe.js.map +1 -1
- package/esm/cli/log/log-key-list.js +4 -5
- package/esm/cli/log/log-key-list.js.map +1 -1
- package/esm/cli/log/log-key.js +1 -1
- package/esm/cli/log/log-key.js.map +1 -1
- package/esm/cli/log/log-list.js +62 -33
- package/esm/cli/log/log-list.js.map +1 -1
- package/esm/cli/log/log-tail.js +63 -34
- package/esm/cli/log/log-tail.js.map +1 -1
- package/esm/cli/log/log.js +2 -2
- package/esm/cli/log/log.js.map +1 -1
- package/esm/cli/oauth/oauth-client-delete.js +18 -0
- package/esm/cli/oauth/oauth-client-delete.js.map +1 -0
- package/esm/cli/oauth/oauth-client-describe.js +18 -0
- package/esm/cli/oauth/oauth-client-describe.js.map +1 -0
- package/esm/cli/oauth/oauth-client-export.js +48 -0
- package/esm/cli/oauth/oauth-client-export.js.map +1 -0
- package/esm/cli/oauth/oauth-client-import.js +53 -0
- package/esm/cli/oauth/oauth-client-import.js.map +1 -0
- package/esm/cli/oauth/oauth-client-list.js +21 -0
- package/esm/cli/oauth/oauth-client-list.js.map +1 -0
- package/esm/cli/oauth/oauth-client.js +14 -0
- package/esm/cli/oauth/oauth-client.js.map +1 -0
- package/esm/cli/oauth/oauth.js +13 -0
- package/esm/cli/oauth/oauth.js.map +1 -0
- package/esm/cli/realm/realm-add-custom-domain.js +6 -6
- package/esm/cli/realm/realm-add-custom-domain.js.map +1 -1
- package/esm/cli/realm/realm-describe.js +6 -6
- package/esm/cli/realm/realm-describe.js.map +1 -1
- package/esm/cli/realm/realm-list.js +5 -6
- package/esm/cli/realm/realm-list.js.map +1 -1
- package/esm/cli/realm/realm-remove-custom-domain.js +9 -6
- package/esm/cli/realm/realm-remove-custom-domain.js.map +1 -1
- package/esm/cli/realm/realm.js +2 -2
- package/esm/cli/realm/realm.js.map +1 -1
- package/esm/cli/saml/saml-cot-export.js +12 -12
- package/esm/cli/saml/saml-cot-export.js.map +1 -1
- package/esm/cli/saml/saml-cot-import.js +13 -13
- package/esm/cli/saml/saml-cot-import.js.map +1 -1
- package/esm/cli/saml/saml-cot-list.js +7 -7
- package/esm/cli/saml/saml-cot-list.js.map +1 -1
- package/esm/cli/saml/saml-cot.js +1 -1
- package/esm/cli/saml/saml-cot.js.map +1 -1
- package/esm/cli/saml/saml-delete.js +12 -8
- package/esm/cli/saml/saml-delete.js.map +1 -1
- package/esm/cli/saml/saml-describe.js +7 -7
- package/esm/cli/saml/saml-describe.js.map +1 -1
- package/esm/cli/saml/saml-export.js +18 -12
- package/esm/cli/saml/saml-export.js.map +1 -1
- package/esm/cli/saml/saml-import.js +22 -14
- package/esm/cli/saml/saml-import.js.map +1 -1
- package/esm/cli/saml/saml-list.js +7 -7
- package/esm/cli/saml/saml-list.js.map +1 -1
- package/esm/cli/saml/saml-metadata-export.js +8 -8
- package/esm/cli/saml/saml-metadata-export.js.map +1 -1
- package/esm/cli/saml/saml-metadata.js +1 -1
- package/esm/cli/saml/saml-metadata.js.map +1 -1
- package/esm/cli/saml/saml.js +2 -2
- package/esm/cli/saml/saml.js.map +1 -1
- package/esm/cli/script/script-delete.js +19 -8
- package/esm/cli/script/script-delete.js.map +1 -1
- package/esm/cli/script/script-describe.js +4 -5
- package/esm/cli/script/script-describe.js.map +1 -1
- package/esm/cli/script/script-export.js +10 -15
- package/esm/cli/script/script-export.js.map +1 -1
- package/esm/cli/script/script-import.js +16 -10
- package/esm/cli/script/script-import.js.map +1 -1
- package/esm/cli/script/script-list.js +8 -8
- package/esm/cli/script/script-list.js.map +1 -1
- package/esm/cli/script/script.js +3 -5
- package/esm/cli/script/script.js.map +1 -1
- package/esm/cli/service/service-delete.js +5 -5
- package/esm/cli/service/service-delete.js.map +1 -1
- package/esm/cli/service/service-export.js +10 -11
- package/esm/cli/service/service-export.js.map +1 -1
- package/esm/cli/service/service-import.js +29 -14
- package/esm/cli/service/service-import.js.map +1 -1
- package/esm/cli/service/service-list.js +4 -4
- package/esm/cli/service/service-list.js.map +1 -1
- package/esm/cli/service/service.js +2 -2
- package/esm/cli/service/service.js.map +1 -1
- package/esm/cli/shell/shell.js +55 -0
- package/esm/cli/shell/shell.js.map +1 -0
- package/esm/cli/theme/theme-delete.js +11 -11
- package/esm/cli/theme/theme-delete.js.map +1 -1
- package/esm/cli/theme/theme-export.js +14 -14
- package/esm/cli/theme/theme-export.js.map +1 -1
- package/esm/cli/theme/theme-import.js +14 -14
- package/esm/cli/theme/theme-import.js.map +1 -1
- package/esm/cli/theme/theme-list.js +6 -6
- package/esm/cli/theme/theme-list.js.map +1 -1
- package/esm/cli/theme/theme.js +2 -2
- package/esm/cli/theme/theme.js.map +1 -1
- package/esm/help/SampleData.js +1 -1
- package/esm/help/SampleData.js.map +1 -1
- package/esm/launch.js +1 -1
- package/esm/launch.js.map +1 -1
- package/esm/loader.js +2 -2
- package/esm/loader.js.map +1 -1
- package/esm/ops/AdminFederationOps.js +231 -0
- package/esm/ops/AdminFederationOps.js.map +1 -0
- package/esm/ops/AdminOps.js +151 -0
- package/esm/ops/AdminOps.js.map +1 -0
- package/esm/ops/AgentOps.js +213 -150
- package/esm/ops/AgentOps.js.map +1 -1
- package/esm/ops/ApplicationOps.js +324 -0
- package/esm/ops/ApplicationOps.js.map +1 -0
- package/esm/ops/AuthenticateOps.js +28 -0
- package/esm/ops/AuthenticateOps.js.map +1 -0
- package/esm/ops/AuthenticationSettingsOps.js +90 -0
- package/esm/ops/AuthenticationSettingsOps.js.map +1 -0
- package/esm/ops/CirclesOfTrustOps.js +98 -78
- package/esm/ops/CirclesOfTrustOps.js.map +1 -1
- package/esm/ops/ConfigOps.js +168 -0
- package/esm/ops/ConfigOps.js.map +1 -0
- package/esm/ops/ConnectionProfileOps.js +13 -6
- package/esm/ops/ConnectionProfileOps.js.map +1 -1
- package/esm/ops/EmailTemplateOps.js +122 -127
- package/esm/ops/EmailTemplateOps.js.map +1 -1
- package/esm/ops/IdmOps.js +101 -182
- package/esm/ops/IdmOps.js.map +1 -1
- package/esm/ops/IdpOps.js +108 -75
- package/esm/ops/IdpOps.js.map +1 -1
- package/esm/ops/JourneyOps.js +182 -116
- package/esm/ops/JourneyOps.js.map +1 -1
- package/esm/ops/LogOps.js +22 -12
- package/esm/ops/LogOps.js.map +1 -1
- package/esm/ops/NodeOps.js +14 -3
- package/esm/ops/NodeOps.js.map +1 -1
- package/esm/ops/OAuth2ClientOps.js +71 -49
- package/esm/ops/OAuth2ClientOps.js.map +1 -1
- package/esm/ops/OrganizationOps.js +14 -22
- package/esm/ops/OrganizationOps.js.map +1 -1
- package/esm/ops/PolicyOps.js +127 -86
- package/esm/ops/PolicyOps.js.map +1 -1
- package/esm/ops/PolicySetOps.js +108 -76
- package/esm/ops/PolicySetOps.js.map +1 -1
- package/esm/ops/RealmOps.js +15 -10
- package/esm/ops/RealmOps.js.map +1 -1
- package/esm/ops/ResourceTypeOps.js +105 -87
- package/esm/ops/ResourceTypeOps.js.map +1 -1
- package/esm/ops/Saml2Ops.js +138 -91
- package/esm/ops/Saml2Ops.js.map +1 -1
- package/esm/ops/Saml2Ops.test_.js.map +1 -1
- package/esm/ops/ScriptOps.js +222 -90
- package/esm/ops/ScriptOps.js.map +1 -1
- package/esm/ops/SecretsOps.js +333 -79
- package/esm/ops/SecretsOps.js.map +1 -1
- package/esm/ops/ServiceOps.js +97 -54
- package/esm/ops/ServiceOps.js.map +1 -1
- package/esm/ops/ThemeOps.js +164 -158
- package/esm/ops/ThemeOps.js.map +1 -1
- package/esm/ops/VariablesOps.js +252 -65
- package/esm/ops/VariablesOps.js.map +1 -1
- package/esm/ops/utils/OpsUtils.js +1 -1
- package/esm/ops/utils/OpsUtils.js.map +1 -1
- package/esm/ops/utils/Wordwrap.js +1 -1
- package/esm/ops/utils/Wordwrap.js.map +1 -1
- package/esm/storage/StaticStorage.js +1 -1
- package/esm/storage/StaticStorage.js.map +1 -1
- package/esm/utils/Config.js +164 -4
- package/esm/utils/Config.js.map +1 -1
- package/esm/utils/Console.js +78 -35
- package/esm/utils/Console.js.map +1 -1
- package/esm/utils/Version.js +20 -17
- package/esm/utils/Version.js.map +1 -1
- package/global-jest-setup.js +5 -0
- package/package.json +56 -37
- package/esm/cli/theme/theme-delete.e2e.test_.js.map +0 -1
- package/esm/cli/theme/theme-list.e2e.test_.js.map +0 -1
- package/esm/utils/ExportImportUtils.js +0 -90
- package/esm/utils/ExportImportUtils.js.map +0 -1
package/esm/ops/SecretsOps.js
CHANGED
|
@@ -1,130 +1,243 @@
|
|
|
1
|
-
import { frodo } from '@rockcarver/frodo-lib';
|
|
2
|
-
import
|
|
1
|
+
import { frodo, state } from '@rockcarver/frodo-lib';
|
|
2
|
+
import fs from 'fs';
|
|
3
|
+
import { getFullExportConfig, isIdUsed } from '../utils/Config';
|
|
4
|
+
import { createKeyValueTable, createProgressIndicator, createTable, debugMessage, printMessage, stopProgressIndicator, updateProgressIndicator } from '../utils/Console';
|
|
3
5
|
import wordwrap from './utils/Wordwrap';
|
|
6
|
+
const {
|
|
7
|
+
resolveUserName
|
|
8
|
+
} = frodo.idm.managed;
|
|
9
|
+
const {
|
|
10
|
+
readSecrets,
|
|
11
|
+
createSecret: _createSecret,
|
|
12
|
+
readVersionsOfSecret,
|
|
13
|
+
readSecret,
|
|
14
|
+
exportSecret,
|
|
15
|
+
exportSecrets,
|
|
16
|
+
enableVersionOfSecret,
|
|
17
|
+
disableVersionOfSecret,
|
|
18
|
+
createVersionOfSecret: _createVersionOfSecret,
|
|
19
|
+
updateSecretDescription,
|
|
20
|
+
deleteSecret: _deleteSecret,
|
|
21
|
+
deleteVersionOfSecret: _deleteVersionOfSecret
|
|
22
|
+
} = frodo.cloud.secret;
|
|
23
|
+
const {
|
|
24
|
+
getFilePath,
|
|
25
|
+
getTypedFilename,
|
|
26
|
+
saveJsonToFile,
|
|
27
|
+
saveToFile,
|
|
28
|
+
titleCase
|
|
29
|
+
} = frodo.utils;
|
|
4
30
|
|
|
5
31
|
/**
|
|
6
32
|
* List secrets
|
|
7
|
-
* @param {boolean} long Long version, all the fields
|
|
33
|
+
* @param {boolean} long Long version, all the fields besides usage
|
|
34
|
+
* @param {boolean} usage Display usage field
|
|
35
|
+
* @param {String | null} file Optional filename to determine usage
|
|
36
|
+
* @returns {Promise<boolean>} true if successful, false otherwise
|
|
8
37
|
*/
|
|
9
|
-
export async function listSecrets(long) {
|
|
38
|
+
export async function listSecrets(long = false, usage = false, file = null) {
|
|
39
|
+
let spinnerId;
|
|
10
40
|
let secrets = [];
|
|
11
41
|
try {
|
|
12
|
-
|
|
42
|
+
spinnerId = createProgressIndicator('indeterminate', 0, `Reading secrets...`);
|
|
43
|
+
secrets = await readSecrets();
|
|
13
44
|
secrets.sort((a, b) => a._id.localeCompare(b._id));
|
|
45
|
+
stopProgressIndicator(spinnerId, `Successfully read ${secrets.length} secrets.`, 'success');
|
|
14
46
|
} catch (error) {
|
|
15
|
-
|
|
16
|
-
|
|
47
|
+
var _error$response;
|
|
48
|
+
stopProgressIndicator(spinnerId, `Error reading secrets: ${((_error$response = error.response) === null || _error$response === void 0 ? void 0 : _error$response.data) || error.message}`, 'fail');
|
|
49
|
+
return false;
|
|
17
50
|
}
|
|
18
|
-
if (long) {
|
|
19
|
-
|
|
51
|
+
if (!long && !usage) {
|
|
52
|
+
secrets.forEach(variable => {
|
|
53
|
+
printMessage(variable._id, 'data');
|
|
54
|
+
});
|
|
55
|
+
return true;
|
|
56
|
+
}
|
|
57
|
+
let fullExport = null;
|
|
58
|
+
const headers = long ? ['Id'['brightCyan'], {
|
|
59
|
+
hAlign: 'right',
|
|
60
|
+
content: 'Active\nVersion'['brightCyan']
|
|
61
|
+
}, {
|
|
62
|
+
hAlign: 'right',
|
|
63
|
+
content: 'Loaded\nVersion'['brightCyan']
|
|
64
|
+
}, 'Status'['brightCyan'], 'Description'['brightCyan'], 'Modifier'['brightCyan'], 'Modified (UTC)'['brightCyan']] : ['Id'['brightCyan']];
|
|
65
|
+
if (usage) {
|
|
66
|
+
try {
|
|
67
|
+
fullExport = await getFullExportConfig(file);
|
|
68
|
+
} catch (error) {
|
|
69
|
+
var _error$response2;
|
|
70
|
+
printMessage(`Error getting full export: ${((_error$response2 = error.response) === null || _error$response2 === void 0 ? void 0 : _error$response2.data) || error.message}`, 'error');
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
//Delete secrets from full export so they aren't mistakenly used for determining usage
|
|
74
|
+
delete fullExport.secrets;
|
|
75
|
+
headers.push('Used'['brightCyan']);
|
|
76
|
+
}
|
|
77
|
+
const table = createTable(headers);
|
|
78
|
+
for (const secret of secrets) {
|
|
79
|
+
let lastChangedBy = secret.lastChangedBy;
|
|
80
|
+
if (long) {
|
|
81
|
+
try {
|
|
82
|
+
lastChangedBy = state.getUseBearerTokenForAmApis() ? secret.lastChangedBy : await resolveUserName('teammember', secret.lastChangedBy);
|
|
83
|
+
} catch (error) {
|
|
84
|
+
// ignore
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
const values = long ? [secret._id, {
|
|
20
88
|
hAlign: 'right',
|
|
21
|
-
content:
|
|
89
|
+
content: secret.activeVersion
|
|
22
90
|
}, {
|
|
23
91
|
hAlign: 'right',
|
|
24
|
-
content:
|
|
25
|
-
}, '
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
content: secret.activeVersion
|
|
30
|
-
}, {
|
|
31
|
-
hAlign: 'right',
|
|
32
|
-
content: secret.loadedVersion
|
|
33
|
-
}, secret.loaded ? 'loaded'['brightGreen'] : 'unloaded'['brightRed'], wordwrap(secret.description, 40), await frodo.idm.managed.resolveUserName('teammember', secret.lastChangedBy), new Date(secret.lastChangeDate).toLocaleString()]);
|
|
92
|
+
content: secret.loadedVersion
|
|
93
|
+
}, secret.loaded ? 'loaded'['brightGreen'] : 'unloaded'['brightRed'], wordwrap(secret.description, 40), lastChangedBy, new Date(secret.lastChangeDate).toUTCString()] : [secret._id];
|
|
94
|
+
if (usage) {
|
|
95
|
+
const isEsvUsed = isIdUsed(fullExport, secret._id, true);
|
|
96
|
+
values.push(isEsvUsed.used ? `${'yes'['brightGreen']} (at ${isEsvUsed.location})` : 'no'['brightRed']);
|
|
34
97
|
}
|
|
35
|
-
|
|
36
|
-
} else {
|
|
37
|
-
secrets.forEach(secret => {
|
|
38
|
-
printMessage(secret._id, 'data');
|
|
39
|
-
});
|
|
98
|
+
table.push(values);
|
|
40
99
|
}
|
|
100
|
+
printMessage(table.toString(), 'data');
|
|
101
|
+
return true;
|
|
41
102
|
}
|
|
42
103
|
|
|
43
104
|
/**
|
|
44
105
|
* Create secret
|
|
45
|
-
* @param {
|
|
46
|
-
* @param {
|
|
47
|
-
* @param {
|
|
48
|
-
* @param {
|
|
106
|
+
* @param {string} id secret id
|
|
107
|
+
* @param {string} value secret value
|
|
108
|
+
* @param {string} description secret description
|
|
109
|
+
* @param {SecretEncodingType} encoding secret encoding
|
|
49
110
|
* @param {boolean} useInPlaceholders use secret in placeholders
|
|
111
|
+
* @returns {Promise<boolean>} true if successful, false otherwise
|
|
50
112
|
*/
|
|
51
113
|
export async function createSecret(id, value, description, encoding, useInPlaceholders) {
|
|
52
|
-
|
|
114
|
+
let outcome = false;
|
|
115
|
+
const spinnerId = createProgressIndicator('indeterminate', 0, `Creating secret ${id}...`);
|
|
53
116
|
try {
|
|
54
|
-
await
|
|
55
|
-
|
|
117
|
+
await _createSecret(id, value, description, encoding, useInPlaceholders);
|
|
118
|
+
stopProgressIndicator(spinnerId, `Created secret ${id}`, 'success');
|
|
119
|
+
outcome = true;
|
|
56
120
|
} catch (error) {
|
|
57
|
-
|
|
121
|
+
stopProgressIndicator(spinnerId, error.response ? `Error: ${error.response.data.code} - ${error.response.data.message}` : error, 'fail');
|
|
58
122
|
}
|
|
123
|
+
return outcome;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Create secret from file (pem / base64hmac)
|
|
128
|
+
* @param {string} id secret id
|
|
129
|
+
* @param {string} file certificate file name
|
|
130
|
+
* @param {string} description secret description
|
|
131
|
+
* @param {SecretEncodingType} encoding secret encoding
|
|
132
|
+
* @param {boolean} useInPlaceholders use secret in placeholders
|
|
133
|
+
* @returns {Promise<boolean>} true if successful, false otherwise
|
|
134
|
+
*/
|
|
135
|
+
export async function createSecretFromFile(id, file, description, encoding, useInPlaceholders) {
|
|
136
|
+
let outcome = false;
|
|
137
|
+
const value = fs.readFileSync(getFilePath(file), 'utf8');
|
|
138
|
+
const spinnerId = createProgressIndicator('indeterminate', 0, `Creating secret ${id}...`);
|
|
139
|
+
try {
|
|
140
|
+
await _createSecret(id, value, description, encoding, useInPlaceholders);
|
|
141
|
+
stopProgressIndicator(spinnerId, `Created secret ${id}`, 'success');
|
|
142
|
+
outcome = true;
|
|
143
|
+
} catch (error) {
|
|
144
|
+
stopProgressIndicator(spinnerId, error.response ? `Error: ${error.response.data.code} - ${error.response.data.message}` : error, 'fail');
|
|
145
|
+
}
|
|
146
|
+
return outcome;
|
|
59
147
|
}
|
|
60
148
|
|
|
61
149
|
/**
|
|
62
150
|
* Set description of secret
|
|
63
|
-
* @param {
|
|
64
|
-
* @param {
|
|
151
|
+
* @param {string} secretId secret id
|
|
152
|
+
* @param {string} description secret description
|
|
153
|
+
* @returns {Promise<boolean>} true if successful, false otherwise
|
|
65
154
|
*/
|
|
66
155
|
export async function setSecretDescription(secretId, description) {
|
|
67
|
-
|
|
156
|
+
let outcome = false;
|
|
157
|
+
const spinnerId = createProgressIndicator('indeterminate', 0, `Setting description of secret ${secretId}...`);
|
|
68
158
|
try {
|
|
69
|
-
await
|
|
70
|
-
|
|
159
|
+
await updateSecretDescription(secretId, description);
|
|
160
|
+
stopProgressIndicator(spinnerId, `Set description of secret ${secretId}`, 'success');
|
|
161
|
+
outcome = true;
|
|
71
162
|
} catch (error) {
|
|
72
|
-
|
|
163
|
+
stopProgressIndicator(spinnerId, `Error: ${error.response.data.code} - ${error.response.data.message}`, 'fail');
|
|
73
164
|
}
|
|
165
|
+
return outcome;
|
|
74
166
|
}
|
|
75
167
|
|
|
76
168
|
/**
|
|
77
169
|
* Delete a secret
|
|
78
|
-
* @param {
|
|
170
|
+
* @param {string} secretId secret id
|
|
171
|
+
* @returns {Promise<boolean>} true if successful, false otherwise
|
|
79
172
|
*/
|
|
80
173
|
export async function deleteSecret(secretId) {
|
|
81
|
-
|
|
174
|
+
let outcome = false;
|
|
175
|
+
const spinnerId = createProgressIndicator('indeterminate', 0, `Deleting secret ${secretId}...`);
|
|
82
176
|
try {
|
|
83
|
-
await
|
|
84
|
-
|
|
177
|
+
await _deleteSecret(secretId);
|
|
178
|
+
stopProgressIndicator(spinnerId, `Deleted secret ${secretId}`, 'success');
|
|
179
|
+
outcome = true;
|
|
85
180
|
} catch (error) {
|
|
86
|
-
|
|
181
|
+
stopProgressIndicator(spinnerId, `Error: ${error.response.data.code} - ${error.response.data.message}`, 'fail');
|
|
87
182
|
}
|
|
183
|
+
return outcome;
|
|
88
184
|
}
|
|
89
185
|
|
|
90
186
|
/**
|
|
91
187
|
* Delete all secrets
|
|
188
|
+
* @returns {Promise<boolean>} true if successful, false otherwise
|
|
92
189
|
*/
|
|
93
190
|
export async function deleteSecrets() {
|
|
191
|
+
let outcome = false;
|
|
192
|
+
let secrets = [];
|
|
193
|
+
const spinnerId = createProgressIndicator('indeterminate', 0, `Reading secrets...`);
|
|
194
|
+
try {
|
|
195
|
+
secrets = await readSecrets();
|
|
196
|
+
secrets.sort((a, b) => a._id.localeCompare(b._id));
|
|
197
|
+
stopProgressIndicator(spinnerId, `Successfully read ${secrets.length} secrets.`, 'success');
|
|
198
|
+
} catch (error) {
|
|
199
|
+
var _error$response3;
|
|
200
|
+
stopProgressIndicator(spinnerId, `Error reading secrets: ${((_error$response3 = error.response) === null || _error$response3 === void 0 ? void 0 : _error$response3.data) || error.message}`, 'fail');
|
|
201
|
+
}
|
|
202
|
+
const indicatorId = createProgressIndicator('determinate', secrets.length, `Deleting secrets...`);
|
|
94
203
|
try {
|
|
95
|
-
const secrets = (await frodo.cloud.secret.getSecrets()).result;
|
|
96
|
-
createProgressBar(secrets.length, `Deleting secrets...`);
|
|
97
204
|
for (const secret of secrets) {
|
|
98
205
|
try {
|
|
99
|
-
await
|
|
100
|
-
|
|
206
|
+
await _deleteSecret(secret._id);
|
|
207
|
+
updateProgressIndicator(indicatorId, `Deleted secret ${secret._id}`);
|
|
101
208
|
} catch (error) {
|
|
102
209
|
printMessage(`Error: ${error.response.data.code} - ${error.response.data.message}`, 'error');
|
|
103
210
|
}
|
|
104
211
|
}
|
|
105
|
-
|
|
212
|
+
stopProgressIndicator(indicatorId, `Secrets deleted.`);
|
|
213
|
+
outcome = true;
|
|
106
214
|
} catch (error) {
|
|
107
215
|
printMessage(`Error: ${error.response.data.code} - ${error.response.data.message}`, 'error');
|
|
108
216
|
}
|
|
217
|
+
return outcome;
|
|
109
218
|
}
|
|
110
219
|
|
|
111
220
|
/**
|
|
112
221
|
* List all the versions of the secret
|
|
113
222
|
* @param {String} secretId secret id
|
|
223
|
+
* @returns {Promise<boolean>} true if successful, false otherwise
|
|
114
224
|
*/
|
|
115
225
|
export async function listSecretVersions(secretId) {
|
|
226
|
+
let outcome = false;
|
|
227
|
+
let spinnerId;
|
|
116
228
|
let versions = [];
|
|
117
229
|
try {
|
|
118
|
-
|
|
230
|
+
spinnerId = createProgressIndicator('indeterminate', 0, `Reading secret versions...`);
|
|
231
|
+
versions = await readVersionsOfSecret(secretId);
|
|
232
|
+
stopProgressIndicator(spinnerId, `Successfully read ${versions.length} secret versions.`, 'success');
|
|
119
233
|
} catch (error) {
|
|
120
|
-
|
|
121
|
-
|
|
234
|
+
var _error$response4;
|
|
235
|
+
stopProgressIndicator(spinnerId, `Error reading secret versions: ${((_error$response4 = error.response) === null || _error$response4 === void 0 ? void 0 : _error$response4.data) || error.message}`, 'fail');
|
|
122
236
|
}
|
|
123
237
|
const table = createTable([{
|
|
124
238
|
hAlign: 'right',
|
|
125
239
|
content: 'Version'['brightCyan']
|
|
126
240
|
}, 'Status'['brightCyan'], 'Loaded'['brightCyan'], 'Created'['brightCyan']]);
|
|
127
|
-
// versions.sort((a, b) => a._id.localeCompare(b._id));
|
|
128
241
|
const statusMap = {
|
|
129
242
|
ENABLED: 'active'['brightGreen'],
|
|
130
243
|
DISABLED: 'inactive'['brightRed'],
|
|
@@ -136,15 +249,28 @@ export async function listSecretVersions(secretId) {
|
|
|
136
249
|
content: version.version
|
|
137
250
|
}, statusMap[version.status], version.loaded ? 'loaded'['brightGreen'] : 'unloaded'['brightRed'], new Date(version.createDate).toLocaleString()]);
|
|
138
251
|
}
|
|
139
|
-
printMessage(table.toString());
|
|
252
|
+
printMessage(table.toString(), 'data');
|
|
253
|
+
outcome = true;
|
|
254
|
+
return outcome;
|
|
140
255
|
}
|
|
141
256
|
|
|
142
257
|
/**
|
|
143
258
|
* Describe a secret
|
|
144
|
-
* @param {
|
|
259
|
+
* @param {string} secretId Secret id
|
|
260
|
+
* @returns {Promise<boolean>} true if successful, false otherwise
|
|
145
261
|
*/
|
|
146
262
|
export async function describeSecret(secretId) {
|
|
147
|
-
|
|
263
|
+
let outcome = false;
|
|
264
|
+
let spinnerId;
|
|
265
|
+
let secret = null;
|
|
266
|
+
try {
|
|
267
|
+
spinnerId = createProgressIndicator('indeterminate', 0, `Reading secret ${secretId}...`);
|
|
268
|
+
secret = await readSecret(secretId);
|
|
269
|
+
stopProgressIndicator(spinnerId, `Successfully read secret ${secretId}.`, 'success');
|
|
270
|
+
} catch (error) {
|
|
271
|
+
var _error$response5;
|
|
272
|
+
stopProgressIndicator(spinnerId, `Error reading secret ${secretId}: ${((_error$response5 = error.response) === null || _error$response5 === void 0 ? void 0 : _error$response5.data) || error.message}`, 'fail');
|
|
273
|
+
}
|
|
148
274
|
const table = createKeyValueTable();
|
|
149
275
|
table.push(['Name'['brightCyan'], secret._id]);
|
|
150
276
|
table.push(['Active Version'['brightCyan'], secret.activeVersion]);
|
|
@@ -152,72 +278,200 @@ export async function describeSecret(secretId) {
|
|
|
152
278
|
table.push(['Status'['brightCyan'], secret.loaded ? 'loaded'['brightGreen'] : 'unloaded'['brightRed']]);
|
|
153
279
|
table.push(['Description'['brightCyan'], wordwrap(secret.description, 60)]);
|
|
154
280
|
table.push(['Modified'['brightCyan'], new Date(secret.lastChangeDate).toLocaleString()]);
|
|
155
|
-
|
|
281
|
+
let lastChangedBy = secret.lastChangedBy;
|
|
282
|
+
try {
|
|
283
|
+
lastChangedBy = state.getUseBearerTokenForAmApis() ? secret.lastChangedBy : await resolveUserName('teammember', secret.lastChangedBy);
|
|
284
|
+
} catch (error) {
|
|
285
|
+
// ignore
|
|
286
|
+
}
|
|
287
|
+
table.push(['Modifier'['brightCyan'], lastChangedBy]);
|
|
156
288
|
table.push(['Modifier UUID'['brightCyan'], secret.lastChangedBy]);
|
|
157
289
|
table.push(['Encoding'['brightCyan'], secret.encoding]);
|
|
158
290
|
table.push(['Use In Placeholders'['brightCyan'], secret.useInPlaceholders]);
|
|
159
|
-
printMessage(table.toString());
|
|
160
|
-
printMessage('\nSecret Versions:');
|
|
291
|
+
printMessage(table.toString(), 'data');
|
|
292
|
+
printMessage('\nSecret Versions:', 'data');
|
|
161
293
|
await listSecretVersions(secretId);
|
|
294
|
+
outcome = true;
|
|
295
|
+
return outcome;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
/**
|
|
299
|
+
* Export a single secret to file
|
|
300
|
+
* @param {String} secretId Secret id
|
|
301
|
+
* @param {String} file Optional filename
|
|
302
|
+
* @param {boolean} includeMeta true to include metadata, false otherwise. Default: true
|
|
303
|
+
* @returns {Promise<boolean>} true if successful, false otherwise
|
|
304
|
+
*/
|
|
305
|
+
export async function exportSecretToFile(secretId, file, includeMeta) {
|
|
306
|
+
debugMessage(`Cli.SecretsOps.exportSecretToFile: start [secretId=${secretId}, file=${file}]`);
|
|
307
|
+
let outcome = false;
|
|
308
|
+
let fileName = file;
|
|
309
|
+
if (!fileName) {
|
|
310
|
+
fileName = getTypedFilename(secretId, 'secret');
|
|
311
|
+
}
|
|
312
|
+
const filePath = getFilePath(fileName, true);
|
|
313
|
+
let spinnerId;
|
|
314
|
+
try {
|
|
315
|
+
spinnerId = createProgressIndicator('indeterminate', 0, `Exporting secret ${secretId}`);
|
|
316
|
+
const fileData = await exportSecret(secretId);
|
|
317
|
+
saveJsonToFile(fileData, filePath, includeMeta);
|
|
318
|
+
stopProgressIndicator(spinnerId, `Exported ${secretId['brightCyan']} to ${filePath['brightCyan']}.`, 'success');
|
|
319
|
+
outcome = true;
|
|
320
|
+
} catch (error) {
|
|
321
|
+
var _error$response6;
|
|
322
|
+
stopProgressIndicator(spinnerId, `Error exporting secret: ${((_error$response6 = error.response) === null || _error$response6 === void 0 ? void 0 : _error$response6.data) || error.message}`, 'fail');
|
|
323
|
+
}
|
|
324
|
+
debugMessage(`Cli.SecretsOps.exportSecretToFile: end [outcome=${outcome}, secretId=${secretId}, file=${file}]`);
|
|
325
|
+
return outcome;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
/**
|
|
329
|
+
* Export all secrets to single file
|
|
330
|
+
* @param {string} file Optional filename
|
|
331
|
+
* @param {boolean} includeMeta true to include metadata, false otherwise. Default: true
|
|
332
|
+
* @returns {Promise<boolean>} true if successful, false otherwise
|
|
333
|
+
*/
|
|
334
|
+
export async function exportSecretsToFile(file, includeMeta) {
|
|
335
|
+
debugMessage(`Cli.SecretsOps.exportSecretsToFile: start [file=${file}]`);
|
|
336
|
+
let outcome = false;
|
|
337
|
+
let fileName = file;
|
|
338
|
+
if (!fileName) {
|
|
339
|
+
fileName = getTypedFilename(`all${titleCase(state.getRealm())}Secrets`, 'secret');
|
|
340
|
+
}
|
|
341
|
+
try {
|
|
342
|
+
const secretsExport = await exportSecrets();
|
|
343
|
+
saveJsonToFile(secretsExport, getFilePath(fileName, true), includeMeta);
|
|
344
|
+
outcome = true;
|
|
345
|
+
} catch (error) {
|
|
346
|
+
var _error$response7;
|
|
347
|
+
printMessage(error.message, 'error');
|
|
348
|
+
printMessage(`exportSecretsToFile: ${(_error$response7 = error.response) === null || _error$response7 === void 0 ? void 0 : _error$response7.status}`, 'error');
|
|
349
|
+
}
|
|
350
|
+
debugMessage(`Cli.SecretsOps.exportSecretsToFile: end [file=${file}]`);
|
|
351
|
+
return outcome;
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
/**
|
|
355
|
+
* Export all secrets to individual files
|
|
356
|
+
* @param {boolean} includeMeta true to include metadata, false otherwise. Default: true
|
|
357
|
+
* @returns {Promise<boolean>} true if successful, false otherwise
|
|
358
|
+
*/
|
|
359
|
+
export async function exportSecretsToFiles(includeMeta) {
|
|
360
|
+
let outcome = false;
|
|
361
|
+
let secrets = [];
|
|
362
|
+
const spinnerId = createProgressIndicator('indeterminate', 0, `Reading secrets...`);
|
|
363
|
+
try {
|
|
364
|
+
secrets = await readSecrets();
|
|
365
|
+
secrets.sort((a, b) => a._id.localeCompare(b._id));
|
|
366
|
+
stopProgressIndicator(spinnerId, `Successfully read ${secrets.length} secrets.`, 'success');
|
|
367
|
+
} catch (error) {
|
|
368
|
+
var _error$response8;
|
|
369
|
+
stopProgressIndicator(spinnerId, `Error reading secrets: ${((_error$response8 = error.response) === null || _error$response8 === void 0 ? void 0 : _error$response8.data) || error.message}`, 'fail');
|
|
370
|
+
}
|
|
371
|
+
const indicatorId = createProgressIndicator('determinate', secrets.length, 'Exporting secrets');
|
|
372
|
+
for (const secret of secrets) {
|
|
373
|
+
updateProgressIndicator(indicatorId, `Writing secret ${secret._id}`);
|
|
374
|
+
const fileName = getTypedFilename(secret._id, 'secret');
|
|
375
|
+
saveToFile('secret', secret, '_id', getFilePath(fileName, true), includeMeta);
|
|
376
|
+
}
|
|
377
|
+
stopProgressIndicator(indicatorId, `${secrets.length} secrets exported.`);
|
|
378
|
+
outcome = true;
|
|
379
|
+
return outcome;
|
|
162
380
|
}
|
|
163
381
|
|
|
164
382
|
/**
|
|
165
383
|
* Create new version of secret
|
|
166
|
-
* @param {
|
|
167
|
-
* @param {
|
|
384
|
+
* @param {string} secretId secret id
|
|
385
|
+
* @param {string} value secret value
|
|
386
|
+
* @returns {Promise<boolean>} true if successful, false otherwise
|
|
387
|
+
*/
|
|
388
|
+
export async function createVersionOfSecret(secretId, value) {
|
|
389
|
+
let outcome = false;
|
|
390
|
+
const spinnerId = createProgressIndicator('indeterminate', 0, `Creating new version of secret ${secretId}...`);
|
|
391
|
+
try {
|
|
392
|
+
const version = await _createVersionOfSecret(secretId, value);
|
|
393
|
+
stopProgressIndicator(spinnerId, `Created version ${version.version} of secret ${secretId}`, 'success');
|
|
394
|
+
outcome = true;
|
|
395
|
+
} catch (error) {
|
|
396
|
+
stopProgressIndicator(spinnerId, `Error: ${error.response.data.code} - ${error.response.data.message}`, 'fail');
|
|
397
|
+
}
|
|
398
|
+
return outcome;
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
/**
|
|
402
|
+
* Create new version of secret from file
|
|
403
|
+
* @param {string} secretId secret id
|
|
404
|
+
* @param {string} file filename
|
|
405
|
+
* @returns {Promise<boolean>} true if successful, false otherwise
|
|
168
406
|
*/
|
|
169
|
-
export async function
|
|
170
|
-
|
|
407
|
+
export async function createVersionOfSecretFromFile(secretId, file) {
|
|
408
|
+
let outcome = false;
|
|
409
|
+
const value = fs.readFileSync(getFilePath(file), 'utf8');
|
|
410
|
+
const spinnerId = createProgressIndicator('indeterminate', 0, `Creating new version of secret ${secretId}...`);
|
|
171
411
|
try {
|
|
172
|
-
const version = await
|
|
173
|
-
|
|
412
|
+
const version = await _createVersionOfSecret(secretId, value);
|
|
413
|
+
stopProgressIndicator(spinnerId, `Created version ${version.version} of secret ${secretId}`, 'success');
|
|
414
|
+
outcome = true;
|
|
174
415
|
} catch (error) {
|
|
175
|
-
|
|
416
|
+
stopProgressIndicator(spinnerId, `Error: ${error.response.data.code} - ${error.response.data.message}`, 'fail');
|
|
176
417
|
}
|
|
418
|
+
return outcome;
|
|
177
419
|
}
|
|
178
420
|
|
|
179
421
|
/**
|
|
180
422
|
* Activate a version of a secret
|
|
181
423
|
* @param {String} secretId secret id
|
|
182
424
|
* @param {Number} version version of secret
|
|
425
|
+
* @returns {Promise<boolean>} true if successful, false otherwise
|
|
183
426
|
*/
|
|
184
427
|
export async function activateVersionOfSecret(secretId, version) {
|
|
185
|
-
|
|
428
|
+
let outcome = false;
|
|
429
|
+
const spinnerId = createProgressIndicator('indeterminate', 0, `Activating version ${version} of secret ${secretId}...`);
|
|
186
430
|
try {
|
|
187
|
-
await
|
|
188
|
-
|
|
431
|
+
await enableVersionOfSecret(secretId, version);
|
|
432
|
+
stopProgressIndicator(spinnerId, `Activated version ${version} of secret ${secretId}`, 'success');
|
|
433
|
+
outcome = true;
|
|
189
434
|
} catch (error) {
|
|
190
|
-
|
|
435
|
+
stopProgressIndicator(spinnerId, `Error: ${error.response.data.code} - ${error.response.data.message}`, 'fail');
|
|
191
436
|
}
|
|
437
|
+
return outcome;
|
|
192
438
|
}
|
|
193
439
|
|
|
194
440
|
/**
|
|
195
441
|
* Deactivate a version of a secret
|
|
196
442
|
* @param {String} secretId secret id
|
|
197
443
|
* @param {Number} version version of secret
|
|
444
|
+
* @returns {Promise<boolean>} true if successful, false otherwise
|
|
198
445
|
*/
|
|
199
446
|
export async function deactivateVersionOfSecret(secretId, version) {
|
|
200
|
-
|
|
447
|
+
let outcome = false;
|
|
448
|
+
const spinnerId = createProgressIndicator('indeterminate', 0, `Deactivating version ${version} of secret ${secretId}...`);
|
|
201
449
|
try {
|
|
202
|
-
await
|
|
203
|
-
|
|
450
|
+
await disableVersionOfSecret(secretId, version);
|
|
451
|
+
stopProgressIndicator(spinnerId, `Deactivated version ${version} of secret ${secretId}`, 'success');
|
|
452
|
+
outcome = true;
|
|
204
453
|
} catch (error) {
|
|
205
|
-
|
|
454
|
+
stopProgressIndicator(spinnerId, `Error: ${error.response.data.code} - ${error.response.data.message}`, 'fail');
|
|
206
455
|
}
|
|
456
|
+
return outcome;
|
|
207
457
|
}
|
|
208
458
|
|
|
209
459
|
/**
|
|
210
460
|
* Delete version of secret
|
|
211
461
|
* @param {String} secretId secret id
|
|
212
462
|
* @param {Number} version version of secret
|
|
463
|
+
* @returns {Promise<boolean>} true if successful, false otherwise
|
|
213
464
|
*/
|
|
214
465
|
export async function deleteVersionOfSecret(secretId, version) {
|
|
215
|
-
|
|
466
|
+
let outcome = false;
|
|
467
|
+
const spinnerId = createProgressIndicator('indeterminate', 0, `Deleting version ${version} of secret ${secretId}...`);
|
|
216
468
|
try {
|
|
217
|
-
await
|
|
218
|
-
|
|
469
|
+
await _deleteVersionOfSecret(secretId, version);
|
|
470
|
+
stopProgressIndicator(spinnerId, `Deleted version ${version} of secret ${secretId}`, 'success');
|
|
471
|
+
outcome = true;
|
|
219
472
|
} catch (error) {
|
|
220
|
-
|
|
473
|
+
stopProgressIndicator(spinnerId, `Error: ${error.response.data.code} - ${error.response.data.message}`, 'fail');
|
|
221
474
|
}
|
|
475
|
+
return outcome;
|
|
222
476
|
}
|
|
223
|
-
//# sourceMappingURL=SecretsOps.js.map
|
|
477
|
+
//# sourceMappingURL=SecretsOps.js.map
|