@rockcarver/frodo-cli 2.0.0-3 → 2.0.0-31
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 +275 -4
- package/esm/app.js +20 -5
- package/esm/app.js.map +1 -1
- package/esm/cli/FrodoCommand.js +28 -6
- package/esm/cli/FrodoCommand.js.map +1 -1
- package/esm/cli/_template/something-delete.js +7 -4
- package/esm/cli/_template/something-delete.js.map +1 -1
- package/esm/cli/_template/something-describe.js +7 -4
- package/esm/cli/_template/something-describe.js.map +1 -1
- package/esm/cli/_template/something-else-delete.js +7 -4
- package/esm/cli/_template/something-else-delete.js.map +1 -1
- package/esm/cli/_template/something-else-describe.js +7 -4
- package/esm/cli/_template/something-else-describe.js.map +1 -1
- package/esm/cli/_template/something-else-export.js +7 -4
- package/esm/cli/_template/something-else-export.js.map +1 -1
- package/esm/cli/_template/something-else-import.js +7 -4
- package/esm/cli/_template/something-else-import.js.map +1 -1
- package/esm/cli/_template/something-else-list.js +7 -4
- package/esm/cli/_template/something-else-list.js.map +1 -1
- package/esm/cli/_template/something-else.js +1 -1
- package/esm/cli/_template/something-else.js.map +1 -1
- package/esm/cli/_template/something-export.js +7 -4
- package/esm/cli/_template/something-export.js.map +1 -1
- package/esm/cli/_template/something-import.js +7 -4
- package/esm/cli/_template/something-import.js.map +1 -1
- package/esm/cli/_template/something-list.js +7 -4
- package/esm/cli/_template/something-list.js.map +1 -1
- package/esm/cli/_template/something-other-delete.js +7 -4
- package/esm/cli/_template/something-other-delete.js.map +1 -1
- package/esm/cli/_template/something-other-describe.js +7 -4
- package/esm/cli/_template/something-other-describe.js.map +1 -1
- package/esm/cli/_template/something-other-export.js +7 -4
- package/esm/cli/_template/something-other-export.js.map +1 -1
- package/esm/cli/_template/something-other-import.js +7 -4
- package/esm/cli/_template/something-other-import.js.map +1 -1
- package/esm/cli/_template/something-other-list.js +7 -4
- package/esm/cli/_template/something-other-list.js.map +1 -1
- package/esm/cli/_template/something-other.js +1 -1
- package/esm/cli/_template/something-other.js.map +1 -1
- package/esm/cli/_template/something.js +2 -2
- package/esm/cli/_template/something.js.map +1 -1
- package/esm/cli/admin/admin-add-autoid-static-user-mapping.js +10 -4
- package/esm/cli/admin/admin-add-autoid-static-user-mapping.js.map +1 -1
- package/esm/cli/admin/admin-create-oauth2-client-with-admin-privileges.js +14 -7
- package/esm/cli/admin/admin-create-oauth2-client-with-admin-privileges.js.map +1 -1
- package/esm/cli/admin/admin-federation-export.js +45 -0
- package/esm/cli/admin/admin-federation-export.js.map +1 -0
- package/esm/cli/admin/admin-federation-import.js +49 -0
- package/esm/cli/admin/admin-federation-import.js.map +1 -0
- package/esm/cli/admin/admin-federation-list.js +29 -0
- package/esm/cli/admin/admin-federation-list.js.map +1 -0
- package/esm/cli/admin/admin-federation.js +13 -0
- package/esm/cli/admin/admin-federation.js.map +1 -0
- package/esm/cli/admin/admin-get-access-token.js +12 -6
- package/esm/cli/admin/admin-get-access-token.js.map +1 -1
- package/esm/cli/admin/admin-grant-oauth2-client-admin-privileges.js +13 -7
- package/esm/cli/admin/admin-grant-oauth2-client-admin-privileges.js.map +1 -1
- package/esm/cli/admin/admin-hide-generic-extension-attributes.js +11 -5
- package/esm/cli/admin/admin-hide-generic-extension-attributes.js.map +1 -1
- package/esm/cli/admin/admin-list-oauth2-clients-with-admin-privileges.js +11 -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 +11 -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 +12 -6
- package/esm/cli/admin/admin-list-static-user-mappings.js.map +1 -1
- package/esm/cli/admin/admin-remove-static-user-mapping.js +12 -5
- package/esm/cli/admin/admin-remove-static-user-mapping.js.map +1 -1
- package/esm/cli/admin/admin-repair-org-model.js +11 -5
- package/esm/cli/admin/admin-repair-org-model.js.map +1 -1
- package/esm/cli/admin/admin-revoke-oauth2-client-admin-privileges.js +12 -6
- package/esm/cli/admin/admin-revoke-oauth2-client-admin-privileges.js.map +1 -1
- package/esm/cli/admin/admin-show-generic-extension-attributes.js +11 -5
- package/esm/cli/admin/admin-show-generic-extension-attributes.js.map +1 -1
- package/esm/cli/admin/admin-train-auto-access-model.js +33 -0
- package/esm/cli/admin/admin-train-auto-access-model.js.map +1 -0
- package/esm/cli/admin/admin.js +6 -2
- package/esm/cli/admin/admin.js.map +1 -1
- package/esm/cli/agent/agent-delete.js +13 -6
- package/esm/cli/agent/agent-delete.js.map +1 -1
- package/esm/cli/agent/agent-describe.js +7 -4
- package/esm/cli/agent/agent-describe.js.map +1 -1
- package/esm/cli/agent/agent-export.js +8 -5
- package/esm/cli/agent/agent-export.js.map +1 -1
- package/esm/cli/agent/agent-gateway-delete.js +13 -6
- package/esm/cli/agent/agent-gateway-delete.js.map +1 -1
- package/esm/cli/agent/agent-gateway-describe.js +7 -4
- package/esm/cli/agent/agent-gateway-describe.js.map +1 -1
- package/esm/cli/agent/agent-gateway-export.js +8 -5
- package/esm/cli/agent/agent-gateway-export.js.map +1 -1
- package/esm/cli/agent/agent-gateway-import.js +8 -5
- package/esm/cli/agent/agent-gateway-import.js.map +1 -1
- package/esm/cli/agent/agent-gateway-list.js +7 -4
- package/esm/cli/agent/agent-gateway-list.js.map +1 -1
- package/esm/cli/agent/agent-gateway.js +1 -1
- package/esm/cli/agent/agent-gateway.js.map +1 -1
- package/esm/cli/agent/agent-import.js +8 -5
- package/esm/cli/agent/agent-import.js.map +1 -1
- package/esm/cli/agent/agent-java-delete.js +13 -6
- package/esm/cli/agent/agent-java-delete.js.map +1 -1
- package/esm/cli/agent/agent-java-describe.js +7 -4
- package/esm/cli/agent/agent-java-describe.js.map +1 -1
- package/esm/cli/agent/agent-java-export.js +8 -5
- package/esm/cli/agent/agent-java-export.js.map +1 -1
- package/esm/cli/agent/agent-java-import.js +8 -5
- package/esm/cli/agent/agent-java-import.js.map +1 -1
- package/esm/cli/agent/agent-java-list.js +7 -4
- package/esm/cli/agent/agent-java-list.js.map +1 -1
- package/esm/cli/agent/agent-java.js +1 -1
- package/esm/cli/agent/agent-java.js.map +1 -1
- package/esm/cli/agent/agent-list.js +7 -4
- package/esm/cli/agent/agent-list.js.map +1 -1
- package/esm/cli/agent/agent-web-delete.js +13 -6
- package/esm/cli/agent/agent-web-delete.js.map +1 -1
- package/esm/cli/agent/agent-web-describe.js +7 -4
- package/esm/cli/agent/agent-web-describe.js.map +1 -1
- package/esm/cli/agent/agent-web-export.js +8 -5
- package/esm/cli/agent/agent-web-export.js.map +1 -1
- package/esm/cli/agent/agent-web-import.js +8 -5
- package/esm/cli/agent/agent-web-import.js.map +1 -1
- package/esm/cli/agent/agent-web-list.js +7 -4
- package/esm/cli/agent/agent-web-list.js.map +1 -1
- package/esm/cli/agent/agent-web.js +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 +27 -8
- package/esm/cli/app/app-delete.js.map +1 -1
- package/esm/cli/app/app-describe.js +9 -5
- package/esm/cli/app/app-describe.js.map +1 -1
- package/esm/cli/app/app-export.js +17 -13
- package/esm/cli/app/app-export.js.map +1 -1
- package/esm/cli/app/app-import.js +21 -17
- package/esm/cli/app/app-import.js.map +1 -1
- package/esm/cli/app/app-list.js +12 -8
- package/esm/cli/app/app-list.js.map +1 -1
- package/esm/cli/app/app.js +8 -12
- package/esm/cli/app/app.js.map +1 -1
- package/esm/cli/authn/authn-describe.js +30 -0
- package/esm/cli/authn/authn-describe.js.map +1 -0
- package/esm/cli/authn/authn-export.js +26 -0
- package/esm/cli/authn/authn-export.js.map +1 -0
- package/esm/cli/authn/authn-import.js +26 -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 +11 -8
- package/esm/cli/authz/authz-policy-delete.js.map +1 -1
- package/esm/cli/authz/authz-policy-describe.js +8 -5
- package/esm/cli/authz/authz-policy-describe.js.map +1 -1
- package/esm/cli/authz/authz-policy-export.js +12 -9
- package/esm/cli/authz/authz-policy-export.js.map +1 -1
- package/esm/cli/authz/authz-policy-import.js +10 -7
- package/esm/cli/authz/authz-policy-import.js.map +1 -1
- package/esm/cli/authz/authz-policy-list.js +9 -6
- package/esm/cli/authz/authz-policy-list.js.map +1 -1
- package/esm/cli/authz/authz-policy.js +1 -1
- package/esm/cli/authz/authz-policy.js.map +1 -1
- package/esm/cli/authz/authz-set-delete.js +10 -7
- package/esm/cli/authz/authz-set-delete.js.map +1 -1
- package/esm/cli/authz/authz-set-describe.js +8 -5
- package/esm/cli/authz/authz-set-describe.js.map +1 -1
- package/esm/cli/authz/authz-set-export.js +10 -7
- package/esm/cli/authz/authz-set-export.js.map +1 -1
- package/esm/cli/authz/authz-set-import.js +10 -7
- package/esm/cli/authz/authz-set-import.js.map +1 -1
- package/esm/cli/authz/authz-set-list.js +7 -4
- package/esm/cli/authz/authz-set-list.js.map +1 -1
- package/esm/cli/authz/authz-set.js +1 -1
- package/esm/cli/authz/authz-set.js.map +1 -1
- package/esm/cli/authz/authz-type-delete.js +12 -9
- package/esm/cli/authz/authz-type-delete.js.map +1 -1
- package/esm/cli/authz/authz-type-describe.js +9 -6
- package/esm/cli/authz/authz-type-describe.js.map +1 -1
- package/esm/cli/authz/authz-type-export.js +11 -8
- package/esm/cli/authz/authz-type-export.js.map +1 -1
- package/esm/cli/authz/authz-type-import.js +12 -9
- package/esm/cli/authz/authz-type-import.js.map +1 -1
- package/esm/cli/authz/authz-type-list.js +8 -5
- package/esm/cli/authz/authz-type-list.js.map +1 -1
- package/esm/cli/authz/authz-type.js +1 -1
- package/esm/cli/authz/authz-type.js.map +1 -1
- package/esm/cli/authz/authz.js +2 -2
- package/esm/cli/authz/authz.js.map +1 -1
- package/esm/cli/conn/conn-delete.js +2 -2
- package/esm/cli/conn/conn-delete.js.map +1 -1
- package/esm/cli/conn/conn-describe.js +2 -2
- package/esm/cli/conn/conn-describe.js.map +1 -1
- package/esm/cli/conn/conn-list.js +2 -2
- package/esm/cli/conn/conn-list.js.map +1 -1
- package/esm/cli/conn/conn-save.js +31 -15
- package/esm/cli/conn/conn-save.js.map +1 -1
- package/esm/cli/conn/conn.js +2 -2
- package/esm/cli/conn/conn.js.map +1 -1
- package/esm/cli/email/email-template-export.js +10 -7
- package/esm/cli/email/email-template-export.js.map +1 -1
- package/esm/cli/email/email-template-import.js +11 -8
- package/esm/cli/email/email-template-import.js.map +1 -1
- package/esm/cli/email/email-template-list.js +8 -5
- package/esm/cli/email/email-template-list.js.map +1 -1
- package/esm/cli/email/email-template.js +1 -1
- package/esm/cli/email/email-template.js.map +1 -1
- package/esm/cli/email/email.js +2 -2
- package/esm/cli/email/email.js.map +1 -1
- package/esm/cli/esv/esv-apply.js +18 -8
- package/esm/cli/esv/esv-apply.js.map +1 -1
- package/esm/cli/esv/esv-secret-create.js +8 -5
- package/esm/cli/esv/esv-secret-create.js.map +1 -1
- package/esm/cli/esv/esv-secret-delete.js +9 -6
- package/esm/cli/esv/esv-secret-delete.js.map +1 -1
- package/esm/cli/esv/esv-secret-describe.js +8 -5
- package/esm/cli/esv/esv-secret-describe.js.map +1 -1
- package/esm/cli/esv/esv-secret-export.js +19 -5
- package/esm/cli/esv/esv-secret-export.js.map +1 -1
- package/esm/cli/esv/esv-secret-import.js +7 -4
- package/esm/cli/esv/esv-secret-import.js.map +1 -1
- package/esm/cli/esv/esv-secret-list.js +8 -5
- package/esm/cli/esv/esv-secret-list.js.map +1 -1
- package/esm/cli/esv/esv-secret-set.js +8 -5
- package/esm/cli/esv/esv-secret-set.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-activate.js +8 -5
- package/esm/cli/esv/esv-secret-version-activate.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-create.js +9 -6
- package/esm/cli/esv/esv-secret-version-create.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-deactivate.js +8 -5
- package/esm/cli/esv/esv-secret-version-deactivate.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-delete.js +9 -6
- package/esm/cli/esv/esv-secret-version-delete.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-list.js +8 -5
- package/esm/cli/esv/esv-secret-version-list.js.map +1 -1
- package/esm/cli/esv/esv-secret-version.js +1 -1
- package/esm/cli/esv/esv-secret-version.js.map +1 -1
- package/esm/cli/esv/esv-secret.js +2 -3
- package/esm/cli/esv/esv-secret.js.map +1 -1
- package/esm/cli/esv/esv-variable-create.js +10 -6
- package/esm/cli/esv/esv-variable-create.js.map +1 -1
- package/esm/cli/esv/esv-variable-delete.js +10 -7
- package/esm/cli/esv/esv-variable-delete.js.map +1 -1
- package/esm/cli/esv/esv-variable-describe.js +10 -7
- package/esm/cli/esv/esv-variable-describe.js.map +1 -1
- package/esm/cli/esv/esv-variable-export.js +20 -6
- package/esm/cli/esv/esv-variable-export.js.map +1 -1
- package/esm/cli/esv/esv-variable-import.js +7 -4
- package/esm/cli/esv/esv-variable-import.js.map +1 -1
- package/esm/cli/esv/esv-variable-list.js +8 -5
- package/esm/cli/esv/esv-variable-list.js.map +1 -1
- package/esm/cli/esv/esv-variable-set.js +8 -5
- package/esm/cli/esv/esv-variable-set.js.map +1 -1
- package/esm/cli/esv/esv-variable.js +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 +9 -6
- package/esm/cli/idm/idm-count.js.map +1 -1
- package/esm/cli/idm/idm-export.js +21 -12
- package/esm/cli/idm/idm-export.js.map +1 -1
- package/esm/cli/idm/idm-import.js +22 -13
- package/esm/cli/idm/idm-import.js.map +1 -1
- package/esm/cli/idm/idm-list.js +7 -4
- package/esm/cli/idm/idm-list.js.map +1 -1
- package/esm/cli/idm/idm.js +2 -2
- package/esm/cli/idm/idm.js.map +1 -1
- package/esm/cli/idp/idp-export.js +11 -8
- package/esm/cli/idp/idp-export.js.map +1 -1
- package/esm/cli/idp/idp-import.js +15 -12
- package/esm/cli/idp/idp-import.js.map +1 -1
- package/esm/cli/idp/idp-list.js +7 -4
- package/esm/cli/idp/idp-list.js.map +1 -1
- package/esm/cli/idp/idp.js +2 -2
- package/esm/cli/idp/idp.js.map +1 -1
- package/esm/cli/info/info.js +16 -10
- package/esm/cli/info/info.js.map +1 -1
- package/esm/cli/journey/journey-delete.js +8 -5
- package/esm/cli/journey/journey-delete.js.map +1 -1
- package/esm/cli/journey/journey-describe.js +19 -10
- package/esm/cli/journey/journey-describe.js.map +1 -1
- package/esm/cli/journey/journey-disable.js +12 -6
- package/esm/cli/journey/journey-disable.js.map +1 -1
- package/esm/cli/journey/journey-enable.js +12 -6
- package/esm/cli/journey/journey-enable.js.map +1 -1
- package/esm/cli/journey/journey-export.js +21 -9
- package/esm/cli/journey/journey-export.js.map +1 -1
- package/esm/cli/journey/journey-import.js +11 -8
- package/esm/cli/journey/journey-import.js.map +1 -1
- package/esm/cli/journey/journey-list.js +6 -3
- package/esm/cli/journey/journey-list.js.map +1 -1
- package/esm/cli/journey/journey-prune.js +23 -12
- package/esm/cli/journey/journey-prune.js.map +1 -1
- package/esm/cli/journey/journey.js +2 -2
- package/esm/cli/journey/journey.js.map +1 -1
- package/esm/cli/{logging/logs-fetch.js → log/log-fetch.js} +68 -36
- package/esm/cli/log/log-fetch.js.map +1 -0
- package/esm/cli/log/log-key-delete.js +35 -0
- package/esm/cli/log/log-key-delete.js.map +1 -0
- package/esm/cli/log/log-key-describe.js +22 -0
- package/esm/cli/log/log-key-describe.js.map +1 -0
- package/esm/cli/log/log-key-list.js +26 -0
- package/esm/cli/log/log-key-list.js.map +1 -0
- package/esm/cli/log/log-key.js +8 -0
- package/esm/cli/log/log-key.js.map +1 -0
- package/esm/cli/log/log-list.js +80 -0
- package/esm/cli/log/log-list.js.map +1 -0
- package/esm/cli/log/log-tail.js +77 -0
- package/esm/cli/log/log-tail.js.map +1 -0
- package/esm/cli/{logging/logs.js → log/log.js} +6 -3
- package/esm/cli/log/log.js.map +1 -0
- package/esm/cli/oauth/oauth-client-delete.js +22 -0
- package/esm/cli/oauth/oauth-client-delete.js.map +1 -0
- package/esm/cli/oauth/oauth-client-describe.js +22 -0
- package/esm/cli/oauth/oauth-client-describe.js.map +1 -0
- package/esm/cli/oauth/oauth-client-export.js +52 -0
- package/esm/cli/oauth/oauth-client-export.js.map +1 -0
- package/esm/cli/oauth/oauth-client-import.js +57 -0
- package/esm/cli/oauth/oauth-client-import.js.map +1 -0
- package/esm/cli/oauth/oauth-client-list.js +25 -0
- package/esm/cli/oauth/oauth-client-list.js.map +1 -0
- package/esm/cli/oauth/oauth-client.js +14 -0
- package/esm/cli/oauth/oauth-client.js.map +1 -0
- package/esm/cli/oauth/oauth.js +13 -0
- package/esm/cli/oauth/oauth.js.map +1 -0
- package/esm/cli/realm/realm-add-custom-domain.js +8 -5
- package/esm/cli/realm/realm-add-custom-domain.js.map +1 -1
- package/esm/cli/realm/realm-describe.js +8 -5
- package/esm/cli/realm/realm-describe.js.map +1 -1
- package/esm/cli/realm/realm-list.js +8 -5
- package/esm/cli/realm/realm-list.js.map +1 -1
- package/esm/cli/realm/realm-remove-custom-domain.js +11 -5
- package/esm/cli/realm/realm-remove-custom-domain.js.map +1 -1
- package/esm/cli/realm/realm.js +2 -2
- package/esm/cli/realm/realm.js.map +1 -1
- package/esm/cli/saml/saml-cot-export.js +10 -7
- package/esm/cli/saml/saml-cot-export.js.map +1 -1
- package/esm/cli/saml/saml-cot-import.js +15 -12
- package/esm/cli/saml/saml-cot-import.js.map +1 -1
- package/esm/cli/saml/saml-cot-list.js +8 -5
- package/esm/cli/saml/saml-cot-list.js.map +1 -1
- package/esm/cli/saml/saml-cot.js +1 -1
- package/esm/cli/saml/saml-cot.js.map +1 -1
- package/esm/cli/saml/saml-delete.js +14 -7
- package/esm/cli/saml/saml-delete.js.map +1 -1
- package/esm/cli/saml/saml-describe.js +8 -5
- package/esm/cli/saml/saml-describe.js.map +1 -1
- package/esm/cli/saml/saml-export.js +10 -7
- package/esm/cli/saml/saml-export.js.map +1 -1
- package/esm/cli/saml/saml-import.js +11 -8
- package/esm/cli/saml/saml-import.js.map +1 -1
- package/esm/cli/saml/saml-list.js +8 -5
- package/esm/cli/saml/saml-list.js.map +1 -1
- package/esm/cli/saml/saml-metadata-export.js +9 -6
- package/esm/cli/saml/saml-metadata-export.js.map +1 -1
- package/esm/cli/saml/saml-metadata.js +1 -1
- package/esm/cli/saml/saml-metadata.js.map +1 -1
- package/esm/cli/saml/saml.js +2 -2
- package/esm/cli/saml/saml.js.map +1 -1
- package/esm/cli/script/script-delete.js +7 -4
- package/esm/cli/script/script-delete.js.map +1 -1
- package/esm/cli/script/script-describe.js +7 -4
- package/esm/cli/script/script-describe.js.map +1 -1
- package/esm/cli/script/script-export.js +8 -5
- package/esm/cli/script/script-export.js.map +1 -1
- package/esm/cli/script/script-import.js +9 -6
- package/esm/cli/script/script-import.js.map +1 -1
- package/esm/cli/script/script-list.js +8 -5
- package/esm/cli/script/script-list.js.map +1 -1
- package/esm/cli/script/script.js +2 -2
- package/esm/cli/script/script.js.map +1 -1
- package/esm/cli/service/service-delete.js +8 -5
- package/esm/cli/service/service-delete.js.map +1 -1
- package/esm/cli/service/service-export.js +9 -6
- package/esm/cli/service/service-export.js.map +1 -1
- package/esm/cli/service/service-import.js +11 -9
- package/esm/cli/service/service-import.js.map +1 -1
- package/esm/cli/service/service-list.js +7 -4
- package/esm/cli/service/service-list.js.map +1 -1
- package/esm/cli/service/service.js +2 -2
- package/esm/cli/service/service.js.map +1 -1
- package/esm/cli/shell/shell.js +57 -0
- package/esm/cli/shell/shell.js.map +1 -0
- package/esm/cli/theme/theme-delete.js +10 -7
- package/esm/cli/theme/theme-delete.js.map +1 -1
- package/esm/cli/theme/theme-export.js +11 -8
- package/esm/cli/theme/theme-export.js.map +1 -1
- package/esm/cli/theme/theme-import.js +12 -9
- package/esm/cli/theme/theme-import.js.map +1 -1
- package/esm/cli/theme/theme-list.js +7 -4
- package/esm/cli/theme/theme-list.js.map +1 -1
- package/esm/cli/theme/theme.js +2 -2
- package/esm/cli/theme/theme.js.map +1 -1
- package/esm/help/SampleData.js +7 -0
- package/esm/help/SampleData.js.map +1 -0
- package/esm/launch.js +1 -1
- package/esm/launch.js.map +1 -1
- package/esm/loader.js +2 -2
- package/esm/loader.js.map +1 -1
- package/esm/ops/AdminFederationOps.js +225 -0
- package/esm/ops/AdminFederationOps.js.map +1 -0
- package/esm/ops/AgentOps.js +128 -87
- package/esm/ops/AgentOps.js.map +1 -1
- package/esm/ops/ApplicationOps.js +315 -0
- package/esm/ops/ApplicationOps.js.map +1 -0
- package/esm/ops/AuthenticationSettingsOps.js +89 -0
- package/esm/ops/AuthenticationSettingsOps.js.map +1 -0
- package/esm/ops/CirclesOfTrustOps.js +72 -59
- package/esm/ops/CirclesOfTrustOps.js.map +1 -1
- package/esm/ops/ConnectionProfileOps.js +13 -6
- package/esm/ops/ConnectionProfileOps.js.map +1 -1
- package/esm/ops/EmailTemplateOps.js +76 -64
- package/esm/ops/EmailTemplateOps.js.map +1 -1
- package/esm/ops/IdmOps.js +70 -84
- package/esm/ops/IdmOps.js.map +1 -1
- package/esm/ops/IdpOps.js +74 -43
- package/esm/ops/IdpOps.js.map +1 -1
- package/esm/ops/JourneyOps.js +99 -67
- package/esm/ops/JourneyOps.js.map +1 -1
- package/esm/ops/LogOps.js +92 -30
- package/esm/ops/LogOps.js.map +1 -1
- package/esm/ops/NodeOps.js +6 -3
- package/esm/ops/NodeOps.js.map +1 -1
- package/esm/ops/OAuth2ClientOps.js +51 -32
- 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 +84 -55
- package/esm/ops/PolicyOps.js.map +1 -1
- package/esm/ops/PolicySetOps.js +67 -43
- package/esm/ops/PolicySetOps.js.map +1 -1
- package/esm/ops/RealmOps.js +18 -11
- package/esm/ops/RealmOps.js.map +1 -1
- package/esm/ops/ResourceTypeOps.js +75 -66
- package/esm/ops/ResourceTypeOps.js.map +1 -1
- package/esm/ops/Saml2Ops.js +76 -54
- package/esm/ops/Saml2Ops.js.map +1 -1
- package/esm/ops/Saml2Ops.test_.js.map +1 -1
- package/esm/ops/ScriptOps.js +92 -31
- package/esm/ops/ScriptOps.js.map +1 -1
- package/esm/ops/SecretsOps.js +106 -23
- package/esm/ops/SecretsOps.js.map +1 -1
- package/esm/ops/ServiceOps.js +67 -41
- package/esm/ops/ServiceOps.js.map +1 -1
- package/esm/ops/ThemeOps.js +62 -36
- package/esm/ops/ThemeOps.js.map +1 -1
- package/esm/ops/VariablesOps.js +132 -41
- package/esm/ops/VariablesOps.js.map +1 -1
- package/esm/ops/utils/OpsUtils.js +1 -1
- package/esm/ops/utils/OpsUtils.js.map +1 -1
- package/esm/ops/utils/Wordwrap.js +1 -1
- package/esm/ops/utils/Wordwrap.js.map +1 -1
- package/esm/storage/StaticStorage.js +1 -1
- package/esm/storage/StaticStorage.js.map +1 -1
- package/esm/utils/Config.js +7 -4
- package/esm/utils/Config.js.map +1 -1
- package/esm/utils/Console.js +9 -5
- package/esm/utils/Console.js.map +1 -1
- package/esm/utils/ExportImportUtils.js +32 -66
- package/esm/utils/ExportImportUtils.js.map +1 -1
- package/esm/utils/Version.js +19 -16
- package/esm/utils/Version.js.map +1 -1
- package/global-jest-setup.js +4 -0
- package/package.json +46 -35
- package/esm/cli/logging/logs-fetch.js.map +0 -1
- package/esm/cli/logging/logs-list.js +0 -49
- package/esm/cli/logging/logs-list.js.map +0 -1
- package/esm/cli/logging/logs-tail.js +0 -46
- package/esm/cli/logging/logs-tail.js.map +0 -1
- package/esm/cli/logging/logs.js.map +0 -1
- package/esm/cli/theme/theme-delete.e2e.test_.js.map +0 -1
- package/esm/cli/theme/theme-list.e2e.test_.js.map +0 -1
|
@@ -2,6 +2,26 @@ import { frodo, state } from '@rockcarver/frodo-lib';
|
|
|
2
2
|
import fs from 'fs';
|
|
3
3
|
import { createObjectTable, createProgressBar, createTable, debugMessage, failSpinner, printMessage, showSpinner, stopProgressBar, succeedSpinner, updateProgressBar } from '../utils/Console';
|
|
4
4
|
import { getTypedFilename, saveJsonToFile, titleCase } from '../utils/ExportImportUtils';
|
|
5
|
+
const {
|
|
6
|
+
getRealmName,
|
|
7
|
+
getFilePath,
|
|
8
|
+
getWorkingDirectory
|
|
9
|
+
} = frodo.utils;
|
|
10
|
+
const {
|
|
11
|
+
readResourceTypes,
|
|
12
|
+
readResourceType,
|
|
13
|
+
readResourceTypeByName,
|
|
14
|
+
exportResourceType,
|
|
15
|
+
exportResourceTypeByName,
|
|
16
|
+
exportResourceTypes,
|
|
17
|
+
importResourceType,
|
|
18
|
+
importResourceTypeByName,
|
|
19
|
+
importFirstResourceType,
|
|
20
|
+
importResourceTypes,
|
|
21
|
+
deleteResourceType,
|
|
22
|
+
deleteResourceTypeByName
|
|
23
|
+
} = frodo.authz.resourceType;
|
|
24
|
+
|
|
5
25
|
/**
|
|
6
26
|
* List resource types
|
|
7
27
|
* @param {boolean} long more fields
|
|
@@ -10,7 +30,7 @@ import { getTypedFilename, saveJsonToFile, titleCase } from '../utils/ExportImpo
|
|
|
10
30
|
export async function listResourceTypes(long = false) {
|
|
11
31
|
let outcome = false;
|
|
12
32
|
try {
|
|
13
|
-
const resourceTypes = await
|
|
33
|
+
const resourceTypes = await readResourceTypes();
|
|
14
34
|
resourceTypes.sort((a, b) => a.name.localeCompare(b.name));
|
|
15
35
|
if (long) {
|
|
16
36
|
const table = createTable(['Name', 'Description', 'Uuid']);
|
|
@@ -40,7 +60,7 @@ export async function listResourceTypes(long = false) {
|
|
|
40
60
|
export async function describeResourceType(resourceTypeUuid, json = false) {
|
|
41
61
|
let outcome = false;
|
|
42
62
|
try {
|
|
43
|
-
const resourceType = await
|
|
63
|
+
const resourceType = await readResourceType(resourceTypeUuid);
|
|
44
64
|
if (json) {
|
|
45
65
|
printMessage(resourceType, 'data');
|
|
46
66
|
} else {
|
|
@@ -53,8 +73,8 @@ export async function describeResourceType(resourceTypeUuid, json = false) {
|
|
|
53
73
|
if (((_error$response = error.response) === null || _error$response === void 0 ? void 0 : _error$response.status) === 404) {
|
|
54
74
|
printMessage(`Resource Type with uuid ${resourceTypeUuid} does not exist in realm ${state.getRealm()}`, 'error');
|
|
55
75
|
} else {
|
|
56
|
-
var _error$response2
|
|
57
|
-
printMessage(((_error$response2 = error.response) === null || _error$response2 === void 0
|
|
76
|
+
var _error$response2;
|
|
77
|
+
printMessage(((_error$response2 = error.response) === null || _error$response2 === void 0 || (_error$response2 = _error$response2.data) === null || _error$response2 === void 0 ? void 0 : _error$response2.message) || error.message, 'error');
|
|
58
78
|
}
|
|
59
79
|
}
|
|
60
80
|
return outcome;
|
|
@@ -69,7 +89,7 @@ export async function describeResourceType(resourceTypeUuid, json = false) {
|
|
|
69
89
|
export async function describeResourceTypeByName(resourceTypeName, json = false) {
|
|
70
90
|
let outcome = false;
|
|
71
91
|
try {
|
|
72
|
-
const resourceType = await
|
|
92
|
+
const resourceType = await readResourceTypeByName(resourceTypeName);
|
|
73
93
|
if (json) {
|
|
74
94
|
printMessage(resourceType, 'data');
|
|
75
95
|
} else {
|
|
@@ -82,8 +102,8 @@ export async function describeResourceTypeByName(resourceTypeName, json = false)
|
|
|
82
102
|
if (((_error$response3 = error.response) === null || _error$response3 === void 0 ? void 0 : _error$response3.status) === 404) {
|
|
83
103
|
printMessage(`Resource Type with name ${resourceTypeName} does not exist in realm ${state.getRealm()}`, 'error');
|
|
84
104
|
} else {
|
|
85
|
-
var _error$response4
|
|
86
|
-
printMessage(((_error$response4 = error.response) === null || _error$response4 === void 0
|
|
105
|
+
var _error$response4;
|
|
106
|
+
printMessage(((_error$response4 = error.response) === null || _error$response4 === void 0 || (_error$response4 = _error$response4.data) === null || _error$response4 === void 0 ? void 0 : _error$response4.message) || error.message, 'error');
|
|
87
107
|
}
|
|
88
108
|
}
|
|
89
109
|
return outcome;
|
|
@@ -94,26 +114,18 @@ export async function describeResourceTypeByName(resourceTypeName, json = false)
|
|
|
94
114
|
* @param {string} resourceTypeUuid resource type uuid
|
|
95
115
|
* @returns {Promise<boolean>} true if successful, false otherwise
|
|
96
116
|
*/
|
|
97
|
-
export async function
|
|
117
|
+
export async function deleteResourceTypeById(resourceTypeUuid) {
|
|
98
118
|
debugMessage(`cli.ResourceTypeOps.deleteResourceType: begin`);
|
|
99
119
|
showSpinner(`Deleting ${resourceTypeUuid}...`);
|
|
100
120
|
let outcome = false;
|
|
101
|
-
const errors = [];
|
|
102
121
|
try {
|
|
103
122
|
debugMessage(`Deleting resource type ${resourceTypeUuid}`);
|
|
104
|
-
await
|
|
105
|
-
} catch (error) {
|
|
106
|
-
errors.push(error);
|
|
107
|
-
}
|
|
108
|
-
if (errors.length) {
|
|
109
|
-
const errorMessages = errors.map(error => {
|
|
110
|
-
var _error$response5, _error$response5$data;
|
|
111
|
-
return ((_error$response5 = error.response) === null || _error$response5 === void 0 ? void 0 : (_error$response5$data = _error$response5.data) === null || _error$response5$data === void 0 ? void 0 : _error$response5$data.message) || error.message;
|
|
112
|
-
}).join('\n');
|
|
113
|
-
failSpinner(`Error deleting ${resourceTypeUuid}: ${errorMessages}`);
|
|
114
|
-
} else {
|
|
123
|
+
await deleteResourceType(resourceTypeUuid);
|
|
115
124
|
succeedSpinner(`Deleted ${resourceTypeUuid}.`);
|
|
116
125
|
outcome = true;
|
|
126
|
+
} catch (error) {
|
|
127
|
+
var _error$response5;
|
|
128
|
+
failSpinner(`Error deleting ${resourceTypeUuid}: ${((_error$response5 = error.response) === null || _error$response5 === void 0 || (_error$response5 = _error$response5.data) === null || _error$response5 === void 0 ? void 0 : _error$response5.message) || error.message}`);
|
|
117
129
|
}
|
|
118
130
|
debugMessage(`cli.ResourceTypeOps.deleteResourceType: end [outcome=${outcome}]`);
|
|
119
131
|
return outcome;
|
|
@@ -124,26 +136,18 @@ export async function deleteResourceType(resourceTypeUuid) {
|
|
|
124
136
|
* @param {string} resourceTypeName resource type name
|
|
125
137
|
* @returns {Promise<boolean>} true if successful, false otherwise
|
|
126
138
|
*/
|
|
127
|
-
export async function
|
|
139
|
+
export async function deleteResourceTypeUsingName(resourceTypeName) {
|
|
128
140
|
debugMessage(`cli.ResourceTypeOps.deleteResourceTypeByName: begin`);
|
|
129
141
|
showSpinner(`Deleting ${resourceTypeName}...`);
|
|
130
142
|
let outcome = false;
|
|
131
|
-
const errors = [];
|
|
132
143
|
try {
|
|
133
144
|
debugMessage(`Deleting resource type ${resourceTypeName}`);
|
|
134
|
-
await
|
|
135
|
-
} catch (error) {
|
|
136
|
-
errors.push(error);
|
|
137
|
-
}
|
|
138
|
-
if (errors.length) {
|
|
139
|
-
const errorMessages = errors.map(error => {
|
|
140
|
-
var _error$response6, _error$response6$data;
|
|
141
|
-
return ((_error$response6 = error.response) === null || _error$response6 === void 0 ? void 0 : (_error$response6$data = _error$response6.data) === null || _error$response6$data === void 0 ? void 0 : _error$response6$data.message) || error.message;
|
|
142
|
-
}).join('\n');
|
|
143
|
-
failSpinner(`Error deleting ${resourceTypeName}: ${errorMessages}`);
|
|
144
|
-
} else {
|
|
145
|
+
await deleteResourceTypeByName(resourceTypeName);
|
|
145
146
|
succeedSpinner(`Deleted ${resourceTypeName}.`);
|
|
146
147
|
outcome = true;
|
|
148
|
+
} catch (error) {
|
|
149
|
+
var _error$response6;
|
|
150
|
+
failSpinner(`Error deleting ${resourceTypeName}: ${((_error$response6 = error.response) === null || _error$response6 === void 0 || (_error$response6 = _error$response6.data) === null || _error$response6 === void 0 ? void 0 : _error$response6.message) || error.message}`);
|
|
147
151
|
}
|
|
148
152
|
debugMessage(`cli.ResourceTypeOps.deleteResourceTypeByName: end [outcome=${outcome}]`);
|
|
149
153
|
return outcome;
|
|
@@ -161,7 +165,7 @@ export async function deleteResourceTypes() {
|
|
|
161
165
|
try {
|
|
162
166
|
showSpinner(`Retrieving all resource types...`);
|
|
163
167
|
try {
|
|
164
|
-
resourceTypes = await
|
|
168
|
+
resourceTypes = await readResourceTypes();
|
|
165
169
|
succeedSpinner(`Found ${resourceTypes.length} resource types.`);
|
|
166
170
|
} catch (error) {
|
|
167
171
|
error.message = `Error retrieving all resource types: ${error.message}`;
|
|
@@ -173,7 +177,7 @@ export async function deleteResourceTypes() {
|
|
|
173
177
|
const resourceTypeId = resourceType.uuid;
|
|
174
178
|
try {
|
|
175
179
|
debugMessage(`Deleting resource type ${resourceTypeId}`);
|
|
176
|
-
await
|
|
180
|
+
await deleteResourceType(resourceTypeId);
|
|
177
181
|
updateProgressBar(`Deleted ${resourceTypeId}`);
|
|
178
182
|
} catch (error) {
|
|
179
183
|
error.message = `Error deleting resource type ${resourceTypeId}: ${error}`;
|
|
@@ -212,9 +216,10 @@ export async function exportResourceTypeToFile(resourceTypeUuid, file) {
|
|
|
212
216
|
if (file) {
|
|
213
217
|
fileName = file;
|
|
214
218
|
}
|
|
215
|
-
const
|
|
216
|
-
|
|
217
|
-
|
|
219
|
+
const filePath = getFilePath(fileName, true);
|
|
220
|
+
const exportData = await exportResourceType(resourceTypeUuid);
|
|
221
|
+
saveJsonToFile(exportData, filePath);
|
|
222
|
+
succeedSpinner(`Exported ${resourceTypeUuid} to ${filePath}.`);
|
|
218
223
|
outcome = true;
|
|
219
224
|
} catch (error) {
|
|
220
225
|
failSpinner(`Error exporting ${resourceTypeUuid}: ${error.message}`);
|
|
@@ -238,9 +243,10 @@ export async function exportResourceTypeByNameToFile(resourceTypeName, file) {
|
|
|
238
243
|
if (file) {
|
|
239
244
|
fileName = file;
|
|
240
245
|
}
|
|
241
|
-
const
|
|
242
|
-
|
|
243
|
-
|
|
246
|
+
const filePath = getFilePath(fileName, true);
|
|
247
|
+
const exportData = await exportResourceTypeByName(resourceTypeName);
|
|
248
|
+
saveJsonToFile(exportData, filePath);
|
|
249
|
+
succeedSpinner(`Exported ${resourceTypeName} to ${filePath}.`);
|
|
244
250
|
outcome = true;
|
|
245
251
|
} catch (error) {
|
|
246
252
|
failSpinner(`Error exporting ${resourceTypeName}: ${error.message}`);
|
|
@@ -259,13 +265,14 @@ export async function exportResourceTypesToFile(file) {
|
|
|
259
265
|
debugMessage(`cli.ResourceTypeOps.exportResourceTypesToFile: begin`);
|
|
260
266
|
showSpinner(`Exporting all resource types...`);
|
|
261
267
|
try {
|
|
262
|
-
let fileName = getTypedFilename(`all${titleCase(
|
|
268
|
+
let fileName = getTypedFilename(`all${titleCase(getRealmName(state.getRealm()))}ResourceTypes`, 'resourcetype.authz');
|
|
263
269
|
if (file) {
|
|
264
270
|
fileName = file;
|
|
265
271
|
}
|
|
266
|
-
const
|
|
267
|
-
|
|
268
|
-
|
|
272
|
+
const filePath = getFilePath(fileName, true);
|
|
273
|
+
const exportData = await exportResourceTypes();
|
|
274
|
+
saveJsonToFile(exportData, filePath);
|
|
275
|
+
succeedSpinner(`Exported all resource types to ${filePath}.`);
|
|
269
276
|
outcome = true;
|
|
270
277
|
} catch (error) {
|
|
271
278
|
failSpinner(`Error exporting resource types: ${error.message}`);
|
|
@@ -282,13 +289,13 @@ export async function exportResourceTypesToFiles() {
|
|
|
282
289
|
debugMessage(`cli.ResourceTypeOps.exportResourceTypesToFiles: begin`);
|
|
283
290
|
const errors = [];
|
|
284
291
|
try {
|
|
285
|
-
const resourceTypes = await
|
|
292
|
+
const resourceTypes = await readResourceTypes();
|
|
286
293
|
createProgressBar(resourceTypes.length, 'Exporting resource types...');
|
|
287
294
|
for (const resourceType of resourceTypes) {
|
|
288
295
|
const file = getTypedFilename(resourceType.name, 'resourcetype.authz');
|
|
289
296
|
try {
|
|
290
|
-
const exportData = await
|
|
291
|
-
saveJsonToFile(exportData, file);
|
|
297
|
+
const exportData = await exportResourceType(resourceType.uuid);
|
|
298
|
+
saveJsonToFile(exportData, getFilePath(file, true));
|
|
292
299
|
updateProgressBar(`Exported ${resourceType.name}.`);
|
|
293
300
|
} catch (error) {
|
|
294
301
|
errors.push(error);
|
|
@@ -315,9 +322,9 @@ export async function importResourceTypeFromFile(resourceTypeId, file) {
|
|
|
315
322
|
debugMessage(`cli.ResourceTypeOps.importResourceTypeFromFile: begin`);
|
|
316
323
|
showSpinner(`Importing ${resourceTypeId}...`);
|
|
317
324
|
try {
|
|
318
|
-
const data = fs.readFileSync(file, 'utf8');
|
|
325
|
+
const data = fs.readFileSync(getFilePath(file), 'utf8');
|
|
319
326
|
const fileData = JSON.parse(data);
|
|
320
|
-
await
|
|
327
|
+
await importResourceType(resourceTypeId, fileData);
|
|
321
328
|
outcome = true;
|
|
322
329
|
succeedSpinner(`Imported ${resourceTypeId}.`);
|
|
323
330
|
} catch (error) {
|
|
@@ -339,9 +346,9 @@ export async function importResourceTypeByNameFromFile(resourceTypeName, file) {
|
|
|
339
346
|
debugMessage(`cli.ResourceTypeOps.importResourceTypeByNameFromFile: begin`);
|
|
340
347
|
showSpinner(`Importing ${resourceTypeName}...`);
|
|
341
348
|
try {
|
|
342
|
-
const data = fs.readFileSync(file, 'utf8');
|
|
349
|
+
const data = fs.readFileSync(getFilePath(file), 'utf8');
|
|
343
350
|
const fileData = JSON.parse(data);
|
|
344
|
-
await
|
|
351
|
+
await importResourceTypeByName(resourceTypeName, fileData);
|
|
345
352
|
outcome = true;
|
|
346
353
|
succeedSpinner(`Imported ${resourceTypeName}.`);
|
|
347
354
|
} catch (error) {
|
|
@@ -360,15 +367,16 @@ export async function importResourceTypeByNameFromFile(resourceTypeName, file) {
|
|
|
360
367
|
export async function importFirstResourceTypeFromFile(file) {
|
|
361
368
|
let outcome = false;
|
|
362
369
|
debugMessage(`cli.ResourceTypeOps.importFirstResourceTypeFromFile: begin`);
|
|
363
|
-
|
|
370
|
+
const filePath = getFilePath(file);
|
|
371
|
+
showSpinner(`Importing ${filePath}...`);
|
|
364
372
|
try {
|
|
365
|
-
const data = fs.readFileSync(
|
|
373
|
+
const data = fs.readFileSync(filePath, 'utf8');
|
|
366
374
|
const fileData = JSON.parse(data);
|
|
367
|
-
await
|
|
375
|
+
await importFirstResourceType(fileData);
|
|
368
376
|
outcome = true;
|
|
369
|
-
succeedSpinner(`Imported ${
|
|
377
|
+
succeedSpinner(`Imported ${filePath}.`);
|
|
370
378
|
} catch (error) {
|
|
371
|
-
failSpinner(`Error importing ${
|
|
379
|
+
failSpinner(`Error importing ${filePath}.`);
|
|
372
380
|
printMessage(error, 'error');
|
|
373
381
|
}
|
|
374
382
|
debugMessage(`cli.ResourceTypeOps.importFirstResourceTypeFromFile: end`);
|
|
@@ -383,15 +391,16 @@ export async function importFirstResourceTypeFromFile(file) {
|
|
|
383
391
|
export async function importResourceTypesFromFile(file) {
|
|
384
392
|
let outcome = false;
|
|
385
393
|
debugMessage(`cli.ResourceTypeOps.importResourceTypesFromFile: begin`);
|
|
386
|
-
|
|
394
|
+
const filePath = getFilePath(file);
|
|
395
|
+
showSpinner(`Importing ${filePath}...`);
|
|
387
396
|
try {
|
|
388
|
-
const data = fs.readFileSync(
|
|
397
|
+
const data = fs.readFileSync(filePath, 'utf8');
|
|
389
398
|
const fileData = JSON.parse(data);
|
|
390
|
-
await
|
|
399
|
+
await importResourceTypes(fileData);
|
|
391
400
|
outcome = true;
|
|
392
|
-
succeedSpinner(`Imported ${
|
|
401
|
+
succeedSpinner(`Imported ${filePath}.`);
|
|
393
402
|
} catch (error) {
|
|
394
|
-
failSpinner(`Error importing ${
|
|
403
|
+
failSpinner(`Error importing ${filePath}.`);
|
|
395
404
|
printMessage(error, 'error');
|
|
396
405
|
}
|
|
397
406
|
debugMessage(`cli.ResourceTypeOps.importResourceTypesFromFile: end`);
|
|
@@ -406,8 +415,8 @@ export async function importResourceTypesFromFiles() {
|
|
|
406
415
|
const errors = [];
|
|
407
416
|
try {
|
|
408
417
|
debugMessage(`cli.ResourceTypeOps.importResourceTypesFromFiles: begin`);
|
|
409
|
-
const names = fs.readdirSync(
|
|
410
|
-
const files = names.filter(name => name.toLowerCase().endsWith('.resourcetype.authz.json'));
|
|
418
|
+
const names = fs.readdirSync(getWorkingDirectory());
|
|
419
|
+
const files = names.filter(name => name.toLowerCase().endsWith('.resourcetype.authz.json')).map(name => getFilePath(name));
|
|
411
420
|
createProgressBar(files.length, 'Importing resource types...');
|
|
412
421
|
let total = 0;
|
|
413
422
|
for (const file of files) {
|
|
@@ -416,7 +425,7 @@ export async function importResourceTypesFromFiles() {
|
|
|
416
425
|
const fileData = JSON.parse(data);
|
|
417
426
|
const count = Object.keys(fileData.resourcetype).length;
|
|
418
427
|
total += count;
|
|
419
|
-
await
|
|
428
|
+
await importResourceTypes(fileData);
|
|
420
429
|
updateProgressBar(`Imported ${count} resource types from ${file}`);
|
|
421
430
|
} catch (error) {
|
|
422
431
|
errors.push(error);
|
|
@@ -433,4 +442,4 @@ export async function importResourceTypesFromFiles() {
|
|
|
433
442
|
debugMessage(`cli.ResourceTypeOps.importResourceTypesFromFiles: end`);
|
|
434
443
|
return 0 === errors.length;
|
|
435
444
|
}
|
|
436
|
-
//# sourceMappingURL=ResourceTypeOps.js.map
|
|
445
|
+
//# sourceMappingURL=ResourceTypeOps.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ResourceTypeOps.js","names":["frodo","state","fs","createObjectTable","createProgressBar","createTable","debugMessage","failSpinner","printMessage","showSpinner","stopProgressBar","succeedSpinner","updateProgressBar","getTypedFilename","saveJsonToFile","titleCase","listResourceTypes","long","outcome","resourceTypes","authz","resourceType","getResourceTypes","sort","a","b","name","localeCompare","table","push","description","uuid","toString","err","message","describeResourceType","resourceTypeUuid","json","getResourceType","error","_error$response","response","status","getRealm","_error$response2","_error$response2$data","data","describeResourceTypeByName","resourceTypeName","getResourceTypeByName","_error$response3","_error$response4","_error$response4$data","deleteResourceType","errors","length","errorMessages","map","_error$response5","_error$response5$data","join","deleteResourceTypeByName","_error$response6","_error$response6$data","deleteResourceTypes","resourceTypeId","exportResourceTypeToFile","file","fileName","exportData","exportResourceType","exportResourceTypeByNameToFile","exportResourceTypeByName","exportResourceTypesToFile","helper","utils","getRealmName","exportResourceTypes","exportResourceTypesToFiles","importResourceTypeFromFile","readFileSync","fileData","JSON","parse","importResourceType","importResourceTypeByNameFromFile","importResourceTypeByName","importFirstResourceTypeFromFile","importFirstResourceType","importResourceTypesFromFile","importResourceTypes","importResourceTypesFromFiles","names","readdirSync","files","filter","toLowerCase","endsWith","total","count","Object","keys","resourcetype"],"sources":["ops/ResourceTypeOps.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport fs from 'fs';\nimport type { ResourceTypeSkeleton } from '@rockcarver/frodo-lib/types/api/ApiTypes';\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 {\n getTypedFilename,\n saveJsonToFile,\n titleCase,\n} from '../utils/ExportImportUtils';\nimport { ResourceTypeExportInterface } from '@rockcarver/frodo-lib/types/ops/ResourceTypeOps';\n\n/**\n * List resource types\n * @param {boolean} long more fields\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function listResourceTypes(long = false): Promise<boolean> {\n let outcome = false;\n try {\n const resourceTypes = await frodo.authz.resourceType.getResourceTypes();\n resourceTypes.sort((a, b) => a.name.localeCompare(b.name));\n if (long) {\n const table = createTable(['Name', 'Description', 'Uuid']);\n for (const resourceType of resourceTypes) {\n table.push([\n `${resourceType.name}`,\n `${resourceType.description}`,\n `${resourceType.uuid}`,\n ]);\n }\n printMessage(table.toString(), 'data');\n } else {\n for (const resourceType of resourceTypes) {\n printMessage(`${resourceType.name}`, 'data');\n }\n }\n outcome = true;\n } catch (err) {\n printMessage(`listResourceTypes ERROR: ${err.message}`, 'error');\n printMessage(err, 'error');\n }\n return outcome;\n}\n\n/**\n * Describe resource type by uuid\n * @param {string} resourceTypeUuid resource type uuid\n * @param {boolean} json JSON output\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function describeResourceType(\n resourceTypeUuid: string,\n json = false\n): Promise<boolean> {\n let outcome = false;\n try {\n const resourceType = await frodo.authz.resourceType.getResourceType(\n resourceTypeUuid\n );\n if (json) {\n printMessage(resourceType, 'data');\n } else {\n const table = createObjectTable(resourceType);\n printMessage(table.toString(), 'data');\n }\n outcome = true;\n } catch (error) {\n if (error.response?.status === 404) {\n printMessage(\n `Resource Type with uuid ${resourceTypeUuid} does not exist in realm ${state.getRealm()}`,\n 'error'\n );\n } else {\n printMessage(error.response?.data?.message || error.message, 'error');\n }\n }\n return outcome;\n}\n\n/**\n * Describe resource type by name\n * @param {string} resourceTypeName resource type name\n * @param {boolean} json JSON output\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function describeResourceTypeByName(\n resourceTypeName: string,\n json = false\n): Promise<boolean> {\n let outcome = false;\n try {\n const resourceType = await frodo.authz.resourceType.getResourceTypeByName(\n resourceTypeName\n );\n if (json) {\n printMessage(resourceType, 'data');\n } else {\n const table = createObjectTable(resourceType);\n printMessage(table.toString(), 'data');\n }\n outcome = true;\n } catch (error) {\n if (error.response?.status === 404) {\n printMessage(\n `Resource Type with name ${resourceTypeName} does not exist in realm ${state.getRealm()}`,\n 'error'\n );\n } else {\n printMessage(error.response?.data?.message || error.message, 'error');\n }\n }\n return outcome;\n}\n\n/**\n * Delete resource type by uuid\n * @param {string} resourceTypeUuid resource type uuid\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function deleteResourceType(\n resourceTypeUuid: string\n): Promise<boolean | ResourceTypeSkeleton> {\n debugMessage(`cli.ResourceTypeOps.deleteResourceType: begin`);\n showSpinner(`Deleting ${resourceTypeUuid}...`);\n let outcome = false;\n const errors = [];\n try {\n debugMessage(`Deleting resource type ${resourceTypeUuid}`);\n await frodo.authz.resourceType.deleteResourceType(resourceTypeUuid);\n } catch (error) {\n errors.push(error);\n }\n if (errors.length) {\n const errorMessages = errors\n .map((error) => error.response?.data?.message || error.message)\n .join('\\n');\n failSpinner(`Error deleting ${resourceTypeUuid}: ${errorMessages}`);\n } else {\n succeedSpinner(`Deleted ${resourceTypeUuid}.`);\n outcome = true;\n }\n debugMessage(\n `cli.ResourceTypeOps.deleteResourceType: end [outcome=${outcome}]`\n );\n return outcome;\n}\n\n/**\n * Delete resource type by name\n * @param {string} resourceTypeName resource type name\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function deleteResourceTypeByName(\n resourceTypeName: string\n): Promise<boolean | ResourceTypeSkeleton> {\n debugMessage(`cli.ResourceTypeOps.deleteResourceTypeByName: begin`);\n showSpinner(`Deleting ${resourceTypeName}...`);\n let outcome = false;\n const errors = [];\n try {\n debugMessage(`Deleting resource type ${resourceTypeName}`);\n await frodo.authz.resourceType.deleteResourceTypeByName(resourceTypeName);\n } catch (error) {\n errors.push(error);\n }\n if (errors.length) {\n const errorMessages = errors\n .map((error) => error.response?.data?.message || error.message)\n .join('\\n');\n failSpinner(`Error deleting ${resourceTypeName}: ${errorMessages}`);\n } else {\n succeedSpinner(`Deleted ${resourceTypeName}.`);\n outcome = true;\n }\n debugMessage(\n `cli.ResourceTypeOps.deleteResourceTypeByName: end [outcome=${outcome}]`\n );\n return outcome;\n}\n\n/**\n * Delete all resource types\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function deleteResourceTypes(): Promise<\n boolean | ResourceTypeSkeleton\n> {\n debugMessage(`cli.ResourceTypeOps.deleteResourceTypes: begin`);\n let outcome = false;\n const errors = [];\n let resourceTypes: ResourceTypeSkeleton[] = [];\n try {\n showSpinner(`Retrieving all resource types...`);\n try {\n resourceTypes = await frodo.authz.resourceType.getResourceTypes();\n succeedSpinner(`Found ${resourceTypes.length} resource types.`);\n } catch (error) {\n error.message = `Error retrieving all resource types: ${error.message}`;\n failSpinner(error.message);\n throw error;\n }\n if (resourceTypes.length)\n createProgressBar(\n resourceTypes.length,\n `Deleting ${resourceTypes.length} resource types...`\n );\n for (const resourceType of resourceTypes) {\n const resourceTypeId = resourceType.uuid;\n try {\n debugMessage(`Deleting resource type ${resourceTypeId}`);\n await frodo.authz.resourceType.deleteResourceType(resourceTypeId);\n updateProgressBar(`Deleted ${resourceTypeId}`);\n } catch (error) {\n error.message = `Error deleting resource type ${resourceTypeId}: ${error}`;\n updateProgressBar(error.message);\n errors.push(error);\n }\n }\n } catch (error) {\n error.message = `Error deleting resource types: ${error}`;\n errors.push(error);\n } finally {\n if (errors.length) {\n const errorMessages = errors.map((error) => error.message).join('\\n');\n if (resourceTypes.length)\n stopProgressBar(`Error deleting all resource types: ${errorMessages}`);\n } else {\n if (resourceTypes.length)\n stopProgressBar(`Deleted ${resourceTypes.length} resource types.`);\n outcome = true;\n }\n }\n debugMessage(\n `cli.ResourceTypeOps.deleteResourceTypes: end [outcome=${outcome}]`\n );\n return outcome;\n}\n\n/**\n * Export resource type to file\n * @param {string} resourceTypeUuid resource type uuid\n * @param {string} file file name\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportResourceTypeToFile(\n resourceTypeUuid: string,\n file: string\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.ResourceTypeOps.exportResourceTypeToFile: begin`);\n showSpinner(`Exporting ${resourceTypeUuid}...`);\n try {\n let fileName = getTypedFilename(resourceTypeUuid, 'resourcetype.authz');\n if (file) {\n fileName = file;\n }\n const exportData = await frodo.authz.resourceType.exportResourceType(\n resourceTypeUuid\n );\n saveJsonToFile(exportData, fileName);\n succeedSpinner(`Exported ${resourceTypeUuid} to ${fileName}.`);\n outcome = true;\n } catch (error) {\n failSpinner(`Error exporting ${resourceTypeUuid}: ${error.message}`);\n }\n debugMessage(`cli.ResourceTypeOps.exportResourceTypeToFile: end`);\n return outcome;\n}\n\n/**\n * Export resource type by name to file\n * @param {string} resourceTypeName resource type name\n * @param {string} file file name\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportResourceTypeByNameToFile(\n resourceTypeName: string,\n file: string\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.ResourceTypeOps.exportResourceTypeByNameToFile: begin`);\n showSpinner(`Exporting ${resourceTypeName}...`);\n try {\n let fileName = getTypedFilename(resourceTypeName, 'resourcetype.authz');\n if (file) {\n fileName = file;\n }\n const exportData = await frodo.authz.resourceType.exportResourceTypeByName(\n resourceTypeName\n );\n saveJsonToFile(exportData, fileName);\n succeedSpinner(`Exported ${resourceTypeName} to ${fileName}.`);\n outcome = true;\n } catch (error) {\n failSpinner(`Error exporting ${resourceTypeName}: ${error.message}`);\n }\n debugMessage(`cli.ResourceTypeOps.exportResourceTypeByNameToFile: end`);\n return outcome;\n}\n\n/**\n * Export resource types to file\n * @param {string} file file name\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportResourceTypesToFile(\n file: string\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.ResourceTypeOps.exportResourceTypesToFile: begin`);\n showSpinner(`Exporting all resource types...`);\n try {\n let fileName = getTypedFilename(\n `all${titleCase(\n frodo.helper.utils.getRealmName(state.getRealm())\n )}ResourceTypes`,\n 'resourcetype.authz'\n );\n if (file) {\n fileName = file;\n }\n const exportData = await frodo.authz.resourceType.exportResourceTypes();\n saveJsonToFile(exportData, fileName);\n succeedSpinner(`Exported all resource types to ${fileName}.`);\n outcome = true;\n } catch (error) {\n failSpinner(`Error exporting resource types: ${error.message}`);\n }\n debugMessage(`cli.ResourceTypeOps.exportResourceTypesToFile: end`);\n return outcome;\n}\n\n/**\n * Export all resource types to separate files\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportResourceTypesToFiles(): Promise<boolean> {\n debugMessage(`cli.ResourceTypeOps.exportResourceTypesToFiles: begin`);\n const errors = [];\n try {\n const resourceTypes: ResourceTypeSkeleton[] =\n await frodo.authz.resourceType.getResourceTypes();\n createProgressBar(resourceTypes.length, 'Exporting resource types...');\n for (const resourceType of resourceTypes) {\n const file = getTypedFilename(resourceType.name, 'resourcetype.authz');\n try {\n const exportData: ResourceTypeExportInterface =\n await frodo.authz.resourceType.exportResourceType(resourceType.uuid);\n saveJsonToFile(exportData, file);\n updateProgressBar(`Exported ${resourceType.name}.`);\n } catch (error) {\n errors.push(error);\n updateProgressBar(`Error exporting ${resourceType.name}.`);\n }\n }\n stopProgressBar(`Export complete.`);\n } catch (error) {\n errors.push(error);\n stopProgressBar(`Error exporting resource types to files`);\n }\n debugMessage(`cli.ResourceTypeOps.exportResourceTypesToFiles: end`);\n return 0 === errors.length;\n}\n\n/**\n * Import resource type from file\n * @param {string} resourceTypeId resource type id\n * @param {string} file file name\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importResourceTypeFromFile(\n resourceTypeId: string,\n file: string\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.ResourceTypeOps.importResourceTypeFromFile: begin`);\n showSpinner(`Importing ${resourceTypeId}...`);\n try {\n const data = fs.readFileSync(file, 'utf8');\n const fileData = JSON.parse(data);\n await frodo.authz.resourceType.importResourceType(resourceTypeId, fileData);\n outcome = true;\n succeedSpinner(`Imported ${resourceTypeId}.`);\n } catch (error) {\n failSpinner(`Error importing ${resourceTypeId}: ${error.message}`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.ResourceTypeOps.importResourceTypeFromFile: end`);\n return outcome;\n}\n\n/**\n * Import resource type by name from file\n * @param {string} resourceTypeName resource type name\n * @param {string} file file name\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importResourceTypeByNameFromFile(\n resourceTypeName: string,\n file: string\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.ResourceTypeOps.importResourceTypeByNameFromFile: begin`);\n showSpinner(`Importing ${resourceTypeName}...`);\n try {\n const data = fs.readFileSync(file, 'utf8');\n const fileData = JSON.parse(data);\n await frodo.authz.resourceType.importResourceTypeByName(\n resourceTypeName,\n fileData\n );\n outcome = true;\n succeedSpinner(`Imported ${resourceTypeName}.`);\n } catch (error) {\n failSpinner(`Error importing ${resourceTypeName}: ${error.message}`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.ResourceTypeOps.importResourceTypeByNameFromFile: end`);\n return outcome;\n}\n\n/**\n * Import first resource type from file\n * @param {string} file file name\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importFirstResourceTypeFromFile(\n file: string\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.ResourceTypeOps.importFirstResourceTypeFromFile: begin`);\n showSpinner(`Importing ${file}...`);\n try {\n const data = fs.readFileSync(file, 'utf8');\n const fileData = JSON.parse(data);\n await frodo.authz.resourceType.importFirstResourceType(fileData);\n outcome = true;\n succeedSpinner(`Imported ${file}.`);\n } catch (error) {\n failSpinner(`Error importing ${file}.`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.ResourceTypeOps.importFirstResourceTypeFromFile: end`);\n return outcome;\n}\n\n/**\n * Import resource types from file\n * @param {string} file file name\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importResourceTypesFromFile(\n file: string\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.ResourceTypeOps.importResourceTypesFromFile: begin`);\n showSpinner(`Importing ${file}...`);\n try {\n const data = fs.readFileSync(file, 'utf8');\n const fileData = JSON.parse(data);\n await frodo.authz.resourceType.importResourceTypes(fileData);\n outcome = true;\n succeedSpinner(`Imported ${file}.`);\n } catch (error) {\n failSpinner(`Error importing ${file}.`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.ResourceTypeOps.importResourceTypesFromFile: end`);\n return outcome;\n}\n\n/**\n * Import resource types from files\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importResourceTypesFromFiles(): Promise<boolean> {\n const errors = [];\n try {\n debugMessage(`cli.ResourceTypeOps.importResourceTypesFromFiles: begin`);\n const names = fs.readdirSync('.');\n const files = names.filter((name) =>\n name.toLowerCase().endsWith('.resourcetype.authz.json')\n );\n createProgressBar(files.length, 'Importing resource types...');\n let total = 0;\n for (const file of files) {\n try {\n const data = fs.readFileSync(file, 'utf8');\n const fileData: ResourceTypeExportInterface = JSON.parse(data);\n const count = Object.keys(fileData.resourcetype).length;\n total += count;\n await frodo.authz.resourceType.importResourceTypes(fileData);\n updateProgressBar(`Imported ${count} resource types from ${file}`);\n } catch (error) {\n errors.push(error);\n updateProgressBar(`Error importing resource types from ${file}`);\n printMessage(error, 'error');\n }\n }\n stopProgressBar(\n `Finished importing ${total} resource types from ${files.length} files.`\n );\n } catch (error) {\n errors.push(error);\n stopProgressBar(`Error importing resource types from files.`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.ResourceTypeOps.importResourceTypesFromFiles: end`);\n return 0 === errors.length;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ResourceTypeOps.js","names":["frodo","state","fs","createObjectTable","createProgressBar","createTable","debugMessage","failSpinner","printMessage","showSpinner","stopProgressBar","succeedSpinner","updateProgressBar","getTypedFilename","saveJsonToFile","titleCase","getRealmName","getFilePath","getWorkingDirectory","utils","readResourceTypes","readResourceType","readResourceTypeByName","exportResourceType","exportResourceTypeByName","exportResourceTypes","importResourceType","importResourceTypeByName","importFirstResourceType","importResourceTypes","deleteResourceType","deleteResourceTypeByName","authz","resourceType","listResourceTypes","long","outcome","resourceTypes","sort","a","b","name","localeCompare","table","push","description","uuid","toString","err","message","describeResourceType","resourceTypeUuid","json","error","_error$response","response","status","getRealm","_error$response2","data","describeResourceTypeByName","resourceTypeName","_error$response3","_error$response4","deleteResourceTypeById","_error$response5","deleteResourceTypeUsingName","_error$response6","deleteResourceTypes","errors","length","resourceTypeId","errorMessages","map","join","exportResourceTypeToFile","file","fileName","filePath","exportData","exportResourceTypeByNameToFile","exportResourceTypesToFile","exportResourceTypesToFiles","importResourceTypeFromFile","readFileSync","fileData","JSON","parse","importResourceTypeByNameFromFile","importFirstResourceTypeFromFile","importResourceTypesFromFile","importResourceTypesFromFiles","names","readdirSync","files","filter","toLowerCase","endsWith","total","count","Object","keys","resourcetype"],"sources":["../../src/ops/ResourceTypeOps.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport { type ResourceTypeSkeleton } from '@rockcarver/frodo-lib/types/api/ResourceTypesApi';\nimport { type ResourceTypeExportInterface } from '@rockcarver/frodo-lib/types/ops/ResourceTypeOps';\nimport fs from 'fs';\n\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 {\n getTypedFilename,\n saveJsonToFile,\n titleCase,\n} from '../utils/ExportImportUtils';\n\nconst { getRealmName, getFilePath, getWorkingDirectory } = frodo.utils;\nconst {\n readResourceTypes,\n readResourceType,\n readResourceTypeByName,\n exportResourceType,\n exportResourceTypeByName,\n exportResourceTypes,\n importResourceType,\n importResourceTypeByName,\n importFirstResourceType,\n importResourceTypes,\n deleteResourceType,\n deleteResourceTypeByName,\n} = frodo.authz.resourceType;\n\n/**\n * List resource types\n * @param {boolean} long more fields\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function listResourceTypes(long = false): Promise<boolean> {\n let outcome = false;\n try {\n const resourceTypes = await readResourceTypes();\n resourceTypes.sort((a, b) => a.name.localeCompare(b.name));\n if (long) {\n const table = createTable(['Name', 'Description', 'Uuid']);\n for (const resourceType of resourceTypes) {\n table.push([\n `${resourceType.name}`,\n `${resourceType.description}`,\n `${resourceType.uuid}`,\n ]);\n }\n printMessage(table.toString(), 'data');\n } else {\n for (const resourceType of resourceTypes) {\n printMessage(`${resourceType.name}`, 'data');\n }\n }\n outcome = true;\n } catch (err) {\n printMessage(`listResourceTypes ERROR: ${err.message}`, 'error');\n printMessage(err, 'error');\n }\n return outcome;\n}\n\n/**\n * Describe resource type by uuid\n * @param {string} resourceTypeUuid resource type uuid\n * @param {boolean} json JSON output\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function describeResourceType(\n resourceTypeUuid: string,\n json = false\n): Promise<boolean> {\n let outcome = false;\n try {\n const resourceType = await readResourceType(resourceTypeUuid);\n if (json) {\n printMessage(resourceType, 'data');\n } else {\n const table = createObjectTable(resourceType);\n printMessage(table.toString(), 'data');\n }\n outcome = true;\n } catch (error) {\n if (error.response?.status === 404) {\n printMessage(\n `Resource Type with uuid ${resourceTypeUuid} does not exist in realm ${state.getRealm()}`,\n 'error'\n );\n } else {\n printMessage(error.response?.data?.message || error.message, 'error');\n }\n }\n return outcome;\n}\n\n/**\n * Describe resource type by name\n * @param {string} resourceTypeName resource type name\n * @param {boolean} json JSON output\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function describeResourceTypeByName(\n resourceTypeName: string,\n json = false\n): Promise<boolean> {\n let outcome = false;\n try {\n const resourceType = await readResourceTypeByName(resourceTypeName);\n if (json) {\n printMessage(resourceType, 'data');\n } else {\n const table = createObjectTable(resourceType);\n printMessage(table.toString(), 'data');\n }\n outcome = true;\n } catch (error) {\n if (error.response?.status === 404) {\n printMessage(\n `Resource Type with name ${resourceTypeName} does not exist in realm ${state.getRealm()}`,\n 'error'\n );\n } else {\n printMessage(error.response?.data?.message || error.message, 'error');\n }\n }\n return outcome;\n}\n\n/**\n * Delete resource type by uuid\n * @param {string} resourceTypeUuid resource type uuid\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function deleteResourceTypeById(\n resourceTypeUuid: string\n): Promise<boolean | ResourceTypeSkeleton> {\n debugMessage(`cli.ResourceTypeOps.deleteResourceType: begin`);\n showSpinner(`Deleting ${resourceTypeUuid}...`);\n let outcome = false;\n try {\n debugMessage(`Deleting resource type ${resourceTypeUuid}`);\n await deleteResourceType(resourceTypeUuid);\n succeedSpinner(`Deleted ${resourceTypeUuid}.`);\n outcome = true;\n } catch (error) {\n failSpinner(\n `Error deleting ${resourceTypeUuid}: ${\n error.response?.data?.message || error.message\n }`\n );\n }\n debugMessage(\n `cli.ResourceTypeOps.deleteResourceType: end [outcome=${outcome}]`\n );\n return outcome;\n}\n\n/**\n * Delete resource type by name\n * @param {string} resourceTypeName resource type name\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function deleteResourceTypeUsingName(\n resourceTypeName: string\n): Promise<boolean | ResourceTypeSkeleton> {\n debugMessage(`cli.ResourceTypeOps.deleteResourceTypeByName: begin`);\n showSpinner(`Deleting ${resourceTypeName}...`);\n let outcome = false;\n try {\n debugMessage(`Deleting resource type ${resourceTypeName}`);\n await deleteResourceTypeByName(resourceTypeName);\n succeedSpinner(`Deleted ${resourceTypeName}.`);\n outcome = true;\n } catch (error) {\n failSpinner(\n `Error deleting ${resourceTypeName}: ${\n error.response?.data?.message || error.message\n }`\n );\n }\n debugMessage(\n `cli.ResourceTypeOps.deleteResourceTypeByName: end [outcome=${outcome}]`\n );\n return outcome;\n}\n\n/**\n * Delete all resource types\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function deleteResourceTypes(): Promise<\n boolean | ResourceTypeSkeleton\n> {\n debugMessage(`cli.ResourceTypeOps.deleteResourceTypes: begin`);\n let outcome = false;\n const errors = [];\n let resourceTypes: ResourceTypeSkeleton[] = [];\n try {\n showSpinner(`Retrieving all resource types...`);\n try {\n resourceTypes = await readResourceTypes();\n succeedSpinner(`Found ${resourceTypes.length} resource types.`);\n } catch (error) {\n error.message = `Error retrieving all resource types: ${error.message}`;\n failSpinner(error.message);\n throw error;\n }\n if (resourceTypes.length)\n createProgressBar(\n resourceTypes.length,\n `Deleting ${resourceTypes.length} resource types...`\n );\n for (const resourceType of resourceTypes) {\n const resourceTypeId = resourceType.uuid;\n try {\n debugMessage(`Deleting resource type ${resourceTypeId}`);\n await deleteResourceType(resourceTypeId);\n updateProgressBar(`Deleted ${resourceTypeId}`);\n } catch (error) {\n error.message = `Error deleting resource type ${resourceTypeId}: ${error}`;\n updateProgressBar(error.message);\n errors.push(error);\n }\n }\n } catch (error) {\n error.message = `Error deleting resource types: ${error}`;\n errors.push(error);\n } finally {\n if (errors.length) {\n const errorMessages = errors.map((error) => error.message).join('\\n');\n if (resourceTypes.length)\n stopProgressBar(`Error deleting all resource types: ${errorMessages}`);\n } else {\n if (resourceTypes.length)\n stopProgressBar(`Deleted ${resourceTypes.length} resource types.`);\n outcome = true;\n }\n }\n debugMessage(\n `cli.ResourceTypeOps.deleteResourceTypes: end [outcome=${outcome}]`\n );\n return outcome;\n}\n\n/**\n * Export resource type to file\n * @param {string} resourceTypeUuid resource type uuid\n * @param {string} file file name\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportResourceTypeToFile(\n resourceTypeUuid: string,\n file: string\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.ResourceTypeOps.exportResourceTypeToFile: begin`);\n showSpinner(`Exporting ${resourceTypeUuid}...`);\n try {\n let fileName = getTypedFilename(resourceTypeUuid, 'resourcetype.authz');\n if (file) {\n fileName = file;\n }\n const filePath = getFilePath(fileName, true);\n const exportData = await exportResourceType(resourceTypeUuid);\n saveJsonToFile(exportData, filePath);\n succeedSpinner(`Exported ${resourceTypeUuid} to ${filePath}.`);\n outcome = true;\n } catch (error) {\n failSpinner(`Error exporting ${resourceTypeUuid}: ${error.message}`);\n }\n debugMessage(`cli.ResourceTypeOps.exportResourceTypeToFile: end`);\n return outcome;\n}\n\n/**\n * Export resource type by name to file\n * @param {string} resourceTypeName resource type name\n * @param {string} file file name\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportResourceTypeByNameToFile(\n resourceTypeName: string,\n file: string\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.ResourceTypeOps.exportResourceTypeByNameToFile: begin`);\n showSpinner(`Exporting ${resourceTypeName}...`);\n try {\n let fileName = getTypedFilename(resourceTypeName, 'resourcetype.authz');\n if (file) {\n fileName = file;\n }\n const filePath = getFilePath(fileName, true);\n const exportData = await exportResourceTypeByName(resourceTypeName);\n saveJsonToFile(exportData, filePath);\n succeedSpinner(`Exported ${resourceTypeName} to ${filePath}.`);\n outcome = true;\n } catch (error) {\n failSpinner(`Error exporting ${resourceTypeName}: ${error.message}`);\n }\n debugMessage(`cli.ResourceTypeOps.exportResourceTypeByNameToFile: end`);\n return outcome;\n}\n\n/**\n * Export resource types to file\n * @param {string} file file name\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportResourceTypesToFile(\n file: string\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.ResourceTypeOps.exportResourceTypesToFile: begin`);\n showSpinner(`Exporting all resource types...`);\n try {\n let fileName = getTypedFilename(\n `all${titleCase(getRealmName(state.getRealm()))}ResourceTypes`,\n 'resourcetype.authz'\n );\n if (file) {\n fileName = file;\n }\n const filePath = getFilePath(fileName, true);\n const exportData = await exportResourceTypes();\n saveJsonToFile(exportData, filePath);\n succeedSpinner(`Exported all resource types to ${filePath}.`);\n outcome = true;\n } catch (error) {\n failSpinner(`Error exporting resource types: ${error.message}`);\n }\n debugMessage(`cli.ResourceTypeOps.exportResourceTypesToFile: end`);\n return outcome;\n}\n\n/**\n * Export all resource types to separate files\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportResourceTypesToFiles(): Promise<boolean> {\n debugMessage(`cli.ResourceTypeOps.exportResourceTypesToFiles: begin`);\n const errors = [];\n try {\n const resourceTypes: ResourceTypeSkeleton[] = await readResourceTypes();\n createProgressBar(resourceTypes.length, 'Exporting resource types...');\n for (const resourceType of resourceTypes) {\n const file = getTypedFilename(resourceType.name, 'resourcetype.authz');\n try {\n const exportData: ResourceTypeExportInterface =\n await exportResourceType(resourceType.uuid);\n saveJsonToFile(exportData, getFilePath(file, true));\n updateProgressBar(`Exported ${resourceType.name}.`);\n } catch (error) {\n errors.push(error);\n updateProgressBar(`Error exporting ${resourceType.name}.`);\n }\n }\n stopProgressBar(`Export complete.`);\n } catch (error) {\n errors.push(error);\n stopProgressBar(`Error exporting resource types to files`);\n }\n debugMessage(`cli.ResourceTypeOps.exportResourceTypesToFiles: end`);\n return 0 === errors.length;\n}\n\n/**\n * Import resource type from file\n * @param {string} resourceTypeId resource type id\n * @param {string} file file name\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importResourceTypeFromFile(\n resourceTypeId: string,\n file: string\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.ResourceTypeOps.importResourceTypeFromFile: begin`);\n showSpinner(`Importing ${resourceTypeId}...`);\n try {\n const data = fs.readFileSync(getFilePath(file), 'utf8');\n const fileData = JSON.parse(data);\n await importResourceType(resourceTypeId, fileData);\n outcome = true;\n succeedSpinner(`Imported ${resourceTypeId}.`);\n } catch (error) {\n failSpinner(`Error importing ${resourceTypeId}: ${error.message}`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.ResourceTypeOps.importResourceTypeFromFile: end`);\n return outcome;\n}\n\n/**\n * Import resource type by name from file\n * @param {string} resourceTypeName resource type name\n * @param {string} file file name\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importResourceTypeByNameFromFile(\n resourceTypeName: string,\n file: string\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.ResourceTypeOps.importResourceTypeByNameFromFile: begin`);\n showSpinner(`Importing ${resourceTypeName}...`);\n try {\n const data = fs.readFileSync(getFilePath(file), 'utf8');\n const fileData = JSON.parse(data);\n await importResourceTypeByName(resourceTypeName, fileData);\n outcome = true;\n succeedSpinner(`Imported ${resourceTypeName}.`);\n } catch (error) {\n failSpinner(`Error importing ${resourceTypeName}: ${error.message}`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.ResourceTypeOps.importResourceTypeByNameFromFile: end`);\n return outcome;\n}\n\n/**\n * Import first resource type from file\n * @param {string} file file name\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importFirstResourceTypeFromFile(\n file: string\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.ResourceTypeOps.importFirstResourceTypeFromFile: begin`);\n const filePath = getFilePath(file);\n showSpinner(`Importing ${filePath}...`);\n try {\n const data = fs.readFileSync(filePath, 'utf8');\n const fileData = JSON.parse(data);\n await importFirstResourceType(fileData);\n outcome = true;\n succeedSpinner(`Imported ${filePath}.`);\n } catch (error) {\n failSpinner(`Error importing ${filePath}.`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.ResourceTypeOps.importFirstResourceTypeFromFile: end`);\n return outcome;\n}\n\n/**\n * Import resource types from file\n * @param {string} file file name\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importResourceTypesFromFile(\n file: string\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.ResourceTypeOps.importResourceTypesFromFile: begin`);\n const filePath = getFilePath(file);\n showSpinner(`Importing ${filePath}...`);\n try {\n const data = fs.readFileSync(filePath, 'utf8');\n const fileData = JSON.parse(data);\n await importResourceTypes(fileData);\n outcome = true;\n succeedSpinner(`Imported ${filePath}.`);\n } catch (error) {\n failSpinner(`Error importing ${filePath}.`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.ResourceTypeOps.importResourceTypesFromFile: end`);\n return outcome;\n}\n\n/**\n * Import resource types from files\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importResourceTypesFromFiles(): Promise<boolean> {\n const errors = [];\n try {\n debugMessage(`cli.ResourceTypeOps.importResourceTypesFromFiles: begin`);\n const names = fs.readdirSync(getWorkingDirectory());\n const files = names\n .filter((name) => name.toLowerCase().endsWith('.resourcetype.authz.json'))\n .map((name) => getFilePath(name));\n createProgressBar(files.length, 'Importing resource types...');\n let total = 0;\n for (const file of files) {\n try {\n const data = fs.readFileSync(file, 'utf8');\n const fileData: ResourceTypeExportInterface = JSON.parse(data);\n const count = Object.keys(fileData.resourcetype).length;\n total += count;\n await importResourceTypes(fileData);\n updateProgressBar(`Imported ${count} resource types from ${file}`);\n } catch (error) {\n errors.push(error);\n updateProgressBar(`Error importing resource types from ${file}`);\n printMessage(error, 'error');\n }\n }\n stopProgressBar(\n `Finished importing ${total} resource types from ${files.length} files.`\n );\n } catch (error) {\n errors.push(error);\n stopProgressBar(`Error importing resource types from files.`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.ResourceTypeOps.importResourceTypesFromFiles: end`);\n return 0 === errors.length;\n}\n"],"mappings":"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"}
|