@rockcarver/frodo-cli 2.0.0-51 → 2.0.0-52

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.
Files changed (250) hide show
  1. package/CHANGELOG.md +10 -1
  2. package/esm/app.js +7 -2
  3. package/esm/app.js.map +1 -1
  4. package/esm/cli/admin/admin-add-autoid-static-user-mapping.js +3 -6
  5. package/esm/cli/admin/admin-add-autoid-static-user-mapping.js.map +1 -1
  6. package/esm/cli/admin/admin-create-oauth2-client-with-admin-privileges.js +46 -51
  7. package/esm/cli/admin/admin-create-oauth2-client-with-admin-privileges.js.map +1 -1
  8. package/esm/cli/admin/admin-federation-export.js +1 -1
  9. package/esm/cli/admin/admin-federation-export.js.map +1 -1
  10. package/esm/cli/admin/admin-federation-import.js +1 -1
  11. package/esm/cli/admin/admin-federation-import.js.map +1 -1
  12. package/esm/cli/admin/admin-federation-list.js +1 -1
  13. package/esm/cli/admin/admin-federation-list.js.map +1 -1
  14. package/esm/cli/admin/admin-grant-oauth2-client-admin-privileges.js +4 -6
  15. package/esm/cli/admin/admin-grant-oauth2-client-admin-privileges.js.map +1 -1
  16. package/esm/cli/admin/admin-hide-generic-extension-attributes.js +4 -6
  17. package/esm/cli/admin/admin-hide-generic-extension-attributes.js.map +1 -1
  18. package/esm/cli/admin/admin-list-oauth2-clients-with-admin-privileges.js +4 -9
  19. package/esm/cli/admin/admin-list-oauth2-clients-with-admin-privileges.js.map +1 -1
  20. package/esm/cli/admin/admin-list-oauth2-clients-with-custom-privileges.js +4 -9
  21. package/esm/cli/admin/admin-list-oauth2-clients-with-custom-privileges.js.map +1 -1
  22. package/esm/cli/admin/admin-list-static-user-mappings.js +3 -9
  23. package/esm/cli/admin/admin-list-static-user-mappings.js.map +1 -1
  24. package/esm/cli/admin/admin-remove-static-user-mapping.js +3 -6
  25. package/esm/cli/admin/admin-remove-static-user-mapping.js.map +1 -1
  26. package/esm/cli/admin/admin-repair-org-model.js +4 -6
  27. package/esm/cli/admin/admin-repair-org-model.js.map +1 -1
  28. package/esm/cli/admin/admin-revoke-oauth2-client-admin-privileges.js +4 -6
  29. package/esm/cli/admin/admin-revoke-oauth2-client-admin-privileges.js.map +1 -1
  30. package/esm/cli/admin/admin-show-generic-extension-attributes.js +4 -6
  31. package/esm/cli/admin/admin-show-generic-extension-attributes.js.map +1 -1
  32. package/esm/cli/agent/agent-delete.js +8 -21
  33. package/esm/cli/agent/agent-delete.js.map +1 -1
  34. package/esm/cli/agent/agent-export.js +6 -3
  35. package/esm/cli/agent/agent-export.js.map +1 -1
  36. package/esm/cli/agent/agent-gateway-delete.js +7 -20
  37. package/esm/cli/agent/agent-gateway-delete.js.map +1 -1
  38. package/esm/cli/agent/agent-gateway-export.js +6 -3
  39. package/esm/cli/agent/agent-gateway-export.js.map +1 -1
  40. package/esm/cli/agent/agent-gateway-import.js +8 -4
  41. package/esm/cli/agent/agent-gateway-import.js.map +1 -1
  42. package/esm/cli/agent/agent-gateway-list.js +2 -1
  43. package/esm/cli/agent/agent-gateway-list.js.map +1 -1
  44. package/esm/cli/agent/agent-import.js +8 -4
  45. package/esm/cli/agent/agent-import.js.map +1 -1
  46. package/esm/cli/agent/agent-java-delete.js +7 -20
  47. package/esm/cli/agent/agent-java-delete.js.map +1 -1
  48. package/esm/cli/agent/agent-java-export.js +6 -3
  49. package/esm/cli/agent/agent-java-export.js.map +1 -1
  50. package/esm/cli/agent/agent-java-import.js +8 -4
  51. package/esm/cli/agent/agent-java-import.js.map +1 -1
  52. package/esm/cli/agent/agent-java-list.js +2 -1
  53. package/esm/cli/agent/agent-java-list.js.map +1 -1
  54. package/esm/cli/agent/agent-list.js +2 -1
  55. package/esm/cli/agent/agent-list.js.map +1 -1
  56. package/esm/cli/agent/agent-web-delete.js +7 -20
  57. package/esm/cli/agent/agent-web-delete.js.map +1 -1
  58. package/esm/cli/agent/agent-web-export.js +6 -3
  59. package/esm/cli/agent/agent-web-export.js.map +1 -1
  60. package/esm/cli/agent/agent-web-import.js +8 -4
  61. package/esm/cli/agent/agent-web-import.js.map +1 -1
  62. package/esm/cli/agent/agent-web-list.js +2 -1
  63. package/esm/cli/agent/agent-web-list.js.map +1 -1
  64. package/esm/cli/app/app-delete.js +4 -4
  65. package/esm/cli/app/app-delete.js.map +1 -1
  66. package/esm/cli/app/app-export.js +6 -6
  67. package/esm/cli/app/app-export.js.map +1 -1
  68. package/esm/cli/app/app-import.js +8 -8
  69. package/esm/cli/app/app-import.js.map +1 -1
  70. package/esm/cli/app/app-list.js +2 -1
  71. package/esm/cli/app/app-list.js.map +1 -1
  72. package/esm/cli/conn/conn-delete.js +7 -1
  73. package/esm/cli/conn/conn-delete.js.map +1 -1
  74. package/esm/cli/conn/conn-save.js +9 -9
  75. package/esm/cli/conn/conn-save.js.map +1 -1
  76. package/esm/cli/email/email-template-export.js +6 -3
  77. package/esm/cli/email/email-template-export.js.map +1 -1
  78. package/esm/cli/email/email-template-import.js +8 -4
  79. package/esm/cli/email/email-template-import.js.map +1 -1
  80. package/esm/cli/email/email-template-list.js +2 -1
  81. package/esm/cli/email/email-template-list.js.map +1 -1
  82. package/esm/cli/esv/esv-secret-create.js +1 -1
  83. package/esm/cli/esv/esv-secret-create.js.map +1 -1
  84. package/esm/cli/esv/esv-secret-delete.js +1 -1
  85. package/esm/cli/esv/esv-secret-delete.js.map +1 -1
  86. package/esm/cli/esv/esv-secret-describe.js +1 -1
  87. package/esm/cli/esv/esv-secret-describe.js.map +1 -1
  88. package/esm/cli/esv/esv-secret-export.js +1 -1
  89. package/esm/cli/esv/esv-secret-export.js.map +1 -1
  90. package/esm/cli/esv/esv-secret-list.js +1 -1
  91. package/esm/cli/esv/esv-secret-list.js.map +1 -1
  92. package/esm/cli/esv/esv-secret-set.js +1 -1
  93. package/esm/cli/esv/esv-secret-set.js.map +1 -1
  94. package/esm/cli/esv/esv-secret-version-activate.js +1 -1
  95. package/esm/cli/esv/esv-secret-version-activate.js.map +1 -1
  96. package/esm/cli/esv/esv-secret-version-create.js +1 -1
  97. package/esm/cli/esv/esv-secret-version-create.js.map +1 -1
  98. package/esm/cli/esv/esv-secret-version-deactivate.js +1 -1
  99. package/esm/cli/esv/esv-secret-version-deactivate.js.map +1 -1
  100. package/esm/cli/esv/esv-secret-version-delete.js +1 -1
  101. package/esm/cli/esv/esv-secret-version-delete.js.map +1 -1
  102. package/esm/cli/esv/esv-secret-version-list.js +1 -1
  103. package/esm/cli/esv/esv-secret-version-list.js.map +1 -1
  104. package/esm/cli/esv/esv-variable-create.js +1 -1
  105. package/esm/cli/esv/esv-variable-create.js.map +1 -1
  106. package/esm/cli/esv/esv-variable-delete.js +1 -1
  107. package/esm/cli/esv/esv-variable-delete.js.map +1 -1
  108. package/esm/cli/esv/esv-variable-describe.js +1 -1
  109. package/esm/cli/esv/esv-variable-describe.js.map +1 -1
  110. package/esm/cli/esv/esv-variable-export.js +1 -1
  111. package/esm/cli/esv/esv-variable-export.js.map +1 -1
  112. package/esm/cli/esv/esv-variable-list.js +1 -1
  113. package/esm/cli/esv/esv-variable-list.js.map +1 -1
  114. package/esm/cli/esv/esv-variable-set.js +1 -1
  115. package/esm/cli/esv/esv-variable-set.js.map +1 -1
  116. package/esm/cli/idm/idm-count.js +2 -1
  117. package/esm/cli/idm/idm-count.js.map +1 -1
  118. package/esm/cli/idm/idm-export.js +6 -3
  119. package/esm/cli/idm/idm-export.js.map +1 -1
  120. package/esm/cli/idm/idm-import.js +8 -4
  121. package/esm/cli/idm/idm-import.js.map +1 -1
  122. package/esm/cli/idm/idm-list.js +2 -1
  123. package/esm/cli/idm/idm-list.js.map +1 -1
  124. package/esm/cli/idp/idp-export.js +6 -3
  125. package/esm/cli/idp/idp-export.js.map +1 -1
  126. package/esm/cli/idp/idp-import.js +8 -4
  127. package/esm/cli/idp/idp-import.js.map +1 -1
  128. package/esm/cli/idp/idp-list.js +2 -1
  129. package/esm/cli/idp/idp-list.js.map +1 -1
  130. package/esm/cli/journey/journey-delete.js +6 -7
  131. package/esm/cli/journey/journey-delete.js.map +1 -1
  132. package/esm/cli/journey/journey-describe.js +15 -9
  133. package/esm/cli/journey/journey-describe.js.map +1 -1
  134. package/esm/cli/journey/journey-export.js +6 -3
  135. package/esm/cli/journey/journey-export.js.map +1 -1
  136. package/esm/cli/journey/journey-import.js +8 -4
  137. package/esm/cli/journey/journey-import.js.map +1 -1
  138. package/esm/cli/journey/journey-list.js +2 -1
  139. package/esm/cli/journey/journey-list.js.map +1 -1
  140. package/esm/cli/journey/journey-prune.js +3 -2
  141. package/esm/cli/journey/journey-prune.js.map +1 -1
  142. package/esm/cli/log/log-fetch.js +6 -2
  143. package/esm/cli/log/log-fetch.js.map +1 -1
  144. package/esm/cli/log/log-list.js +12 -3
  145. package/esm/cli/log/log-list.js.map +1 -1
  146. package/esm/cli/log/log-tail.js +6 -2
  147. package/esm/cli/log/log-tail.js.map +1 -1
  148. package/esm/cli/oauth/oauth-client-export.js +6 -6
  149. package/esm/cli/oauth/oauth-client-export.js.map +1 -1
  150. package/esm/cli/oauth/oauth-client-import.js +8 -8
  151. package/esm/cli/oauth/oauth-client-import.js.map +1 -1
  152. package/esm/cli/oauth/oauth-client-list.js +2 -1
  153. package/esm/cli/oauth/oauth-client-list.js.map +1 -1
  154. package/esm/cli/saml/saml-describe.js +2 -1
  155. package/esm/cli/saml/saml-describe.js.map +1 -1
  156. package/esm/cli/saml/saml-export.js +6 -3
  157. package/esm/cli/saml/saml-export.js.map +1 -1
  158. package/esm/cli/saml/saml-import.js +8 -4
  159. package/esm/cli/saml/saml-import.js.map +1 -1
  160. package/esm/cli/saml/saml-list.js +2 -1
  161. package/esm/cli/saml/saml-list.js.map +1 -1
  162. package/esm/cli/saml/saml-metadata-export.js +10 -2
  163. package/esm/cli/saml/saml-metadata-export.js.map +1 -1
  164. package/esm/cli/script/script-delete.js +10 -4
  165. package/esm/cli/script/script-delete.js.map +1 -1
  166. package/esm/cli/script/script-export.js +9 -13
  167. package/esm/cli/script/script-export.js.map +1 -1
  168. package/esm/cli/script/script-import.js +19 -14
  169. package/esm/cli/script/script-import.js.map +1 -1
  170. package/esm/cli/service/service-delete.js +4 -2
  171. package/esm/cli/service/service-delete.js.map +1 -1
  172. package/esm/cli/service/service-export.js +6 -3
  173. package/esm/cli/service/service-export.js.map +1 -1
  174. package/esm/cli/service/service-import.js +8 -4
  175. package/esm/cli/service/service-import.js.map +1 -1
  176. package/esm/cli/service/service-list.js +2 -1
  177. package/esm/cli/service/service-list.js.map +1 -1
  178. package/esm/cli/shell/shell.js +2 -4
  179. package/esm/cli/shell/shell.js.map +1 -1
  180. package/esm/cli/theme/theme-delete.js +7 -4
  181. package/esm/cli/theme/theme-delete.js.map +1 -1
  182. package/esm/cli/theme/theme-export.js +8 -4
  183. package/esm/cli/theme/theme-export.js.map +1 -1
  184. package/esm/cli/theme/theme-import.js +10 -5
  185. package/esm/cli/theme/theme-import.js.map +1 -1
  186. package/esm/cli/theme/theme-list.js +2 -1
  187. package/esm/cli/theme/theme-list.js.map +1 -1
  188. package/esm/ops/AdminOps.js +790 -3
  189. package/esm/ops/AdminOps.js.map +1 -1
  190. package/esm/ops/AgentOps.js +638 -305
  191. package/esm/ops/AgentOps.js.map +1 -1
  192. package/esm/ops/ApplicationOps.js +91 -79
  193. package/esm/ops/ApplicationOps.js.map +1 -1
  194. package/esm/ops/AuthenticateOps.js +4 -9
  195. package/esm/ops/AuthenticateOps.js.map +1 -1
  196. package/esm/ops/AuthenticationSettingsOps.js +22 -23
  197. package/esm/ops/AuthenticationSettingsOps.js.map +1 -1
  198. package/esm/ops/CirclesOfTrustOps.js +52 -55
  199. package/esm/ops/CirclesOfTrustOps.js.map +1 -1
  200. package/esm/ops/ConfigOps.js +100 -84
  201. package/esm/ops/ConfigOps.js.map +1 -1
  202. package/esm/ops/ConnectionProfileOps.js +9 -7
  203. package/esm/ops/ConnectionProfileOps.js.map +1 -1
  204. package/esm/ops/EmailTemplateOps.js +64 -47
  205. package/esm/ops/EmailTemplateOps.js.map +1 -1
  206. package/esm/ops/IdmOps.js +149 -117
  207. package/esm/ops/IdmOps.js.map +1 -1
  208. package/esm/ops/IdpOps.js +76 -46
  209. package/esm/ops/IdpOps.js.map +1 -1
  210. package/esm/ops/JourneyOps.js +333 -238
  211. package/esm/ops/JourneyOps.js.map +1 -1
  212. package/esm/ops/LogOps.js +15 -23
  213. package/esm/ops/LogOps.js.map +1 -1
  214. package/esm/ops/OAuth2ClientOps.js +43 -36
  215. package/esm/ops/OAuth2ClientOps.js.map +1 -1
  216. package/esm/ops/PolicyOps.js +104 -108
  217. package/esm/ops/PolicyOps.js.map +1 -1
  218. package/esm/ops/PolicySetOps.js +72 -78
  219. package/esm/ops/PolicySetOps.js.map +1 -1
  220. package/esm/ops/ResourceTypeOps.js +84 -99
  221. package/esm/ops/ResourceTypeOps.js.map +1 -1
  222. package/esm/ops/Saml2Ops.js +132 -88
  223. package/esm/ops/Saml2Ops.js.map +1 -1
  224. package/esm/ops/ScriptOps.js +90 -80
  225. package/esm/ops/ScriptOps.js.map +1 -1
  226. package/esm/ops/ServiceOps.js +125 -87
  227. package/esm/ops/ServiceOps.js.map +1 -1
  228. package/esm/ops/ThemeOps.js +170 -139
  229. package/esm/ops/ThemeOps.js.map +1 -1
  230. package/esm/ops/{AdminFederationOps.js → cloud/AdminFederationOps.js} +10 -16
  231. package/esm/ops/cloud/AdminFederationOps.js.map +1 -0
  232. package/esm/ops/{SecretsOps.js → cloud/SecretsOps.js} +123 -129
  233. package/esm/ops/cloud/SecretsOps.js.map +1 -0
  234. package/esm/ops/{VariablesOps.js → cloud/VariablesOps.js} +48 -52
  235. package/esm/ops/cloud/VariablesOps.js.map +1 -0
  236. package/esm/ops/templates/OAuth2ClientTemplate.json +270 -0
  237. package/esm/ops/templates/OAuth2TrustedJwtIssuerTemplate.json +38 -0
  238. package/esm/ops/templates/OrgModelUserAttributesTemplate.json +149 -0
  239. package/esm/ops/templates/autoaccess/IPAddresses.json +202 -0
  240. package/esm/ops/templates/autoaccess/UserAgents.json +35 -0
  241. package/esm/ops/templates/autoaccess/Usernames.json +203 -0
  242. package/esm/ops/templates/cloud/GenericExtensionAttributesTemplate.json +392 -0
  243. package/esm/ops/templates/cloud/managed.json +4119 -0
  244. package/esm/ops/utils/OpsUtils.js.map +1 -1
  245. package/esm/utils/Console.js +31 -0
  246. package/esm/utils/Console.js.map +1 -1
  247. package/package.json +10 -6
  248. package/esm/ops/AdminFederationOps.js.map +0 -1
  249. package/esm/ops/SecretsOps.js.map +0 -1
  250. package/esm/ops/VariablesOps.js.map +0 -1
@@ -1,6 +1,6 @@
1
- import { frodo, state } from '@rockcarver/frodo-lib';
1
+ import { frodo, FrodoError, state } from '@rockcarver/frodo-lib';
2
2
  import fs from 'fs';
3
- import { createObjectTable, createProgressIndicator, createTable, debugMessage, failSpinner, printMessage, showSpinner, stopProgressIndicator, succeedSpinner, updateProgressIndicator } from '../utils/Console';
3
+ import { createObjectTable, createProgressIndicator, createTable, debugMessage, failSpinner, printError, printMessage, showSpinner, stopProgressIndicator, succeedSpinner, updateProgressIndicator } from '../utils/Console';
4
4
  const {
5
5
  getRealmName,
6
6
  getTypedFilename,
@@ -28,7 +28,6 @@ const {
28
28
  * @returns {Promise<boolean>} true if successful, false otherwise
29
29
  */
30
30
  export async function listPolicies(long = false) {
31
- let outcome = false;
32
31
  try {
33
32
  const policies = await readPolicies();
34
33
  policies.sort((a, b) => a._id.localeCompare(b._id));
@@ -43,12 +42,11 @@ export async function listPolicies(long = false) {
43
42
  printMessage(`${policy._id}`, 'data');
44
43
  }
45
44
  }
46
- outcome = true;
47
- } catch (err) {
48
- printMessage(`listPolicies ERROR: ${err.message}`, 'error');
49
- printMessage(err, 'error');
45
+ return true;
46
+ } catch (error) {
47
+ printError(error);
50
48
  }
51
- return outcome;
49
+ return false;
52
50
  }
53
51
 
54
52
  /**
@@ -74,9 +72,8 @@ export async function listPoliciesByPolicySet(policySetId, long = false) {
74
72
  }
75
73
  }
76
74
  outcome = true;
77
- } catch (err) {
78
- printMessage(`listPolicies ERROR: ${err.message}`, 'error');
79
- printMessage(err, 'error');
75
+ } catch (error) {
76
+ printError(error);
80
77
  }
81
78
  return outcome;
82
79
  }
@@ -88,16 +85,19 @@ export async function listPoliciesByPolicySet(policySetId, long = false) {
88
85
  * @returns {Promise<boolean>} true if successful, false otherwise
89
86
  */
90
87
  export async function describePolicy(policyId, json = false) {
91
- let outcome = false;
92
- const policySet = await readPolicy(policyId);
93
- outcome = true;
94
- if (json) {
95
- printMessage(policySet, 'data');
96
- } else {
97
- const table = createObjectTable(policySet);
98
- printMessage(table.toString(), 'data');
88
+ try {
89
+ const policySet = await readPolicy(policyId);
90
+ if (json) {
91
+ printMessage(policySet, 'data');
92
+ } else {
93
+ const table = createObjectTable(policySet);
94
+ printMessage(table.toString(), 'data');
95
+ }
96
+ return true;
97
+ } catch (error) {
98
+ printError(error);
99
99
  }
100
- return outcome;
100
+ return false;
101
101
  }
102
102
 
103
103
  /**
@@ -108,17 +108,17 @@ export async function describePolicy(policyId, json = false) {
108
108
  export async function deletePolicyById(policyId) {
109
109
  debugMessage(`cli.PolicyOps.deletePolicy: begin`);
110
110
  showSpinner(`Deleting ${policyId}...`);
111
- let outcome = false;
112
111
  try {
113
112
  debugMessage(`Deleting policy ${policyId}`);
114
113
  await deletePolicy(policyId);
115
114
  succeedSpinner(`Deleted ${policyId}.`);
116
- outcome = true;
115
+ debugMessage(`cli.PolicyOps.deletePolicy: end]`);
116
+ return true;
117
117
  } catch (error) {
118
- failSpinner(`Error deleting policy ${policyId}: ${error}`);
118
+ failSpinner(`Error deleting policy ${policyId}`);
119
+ printError(error);
119
120
  }
120
- debugMessage(`cli.PolicyOps.deletePolicy: end [outcome=${outcome}]`);
121
- return outcome;
121
+ return false;
122
122
  }
123
123
 
124
124
  /**
@@ -127,7 +127,6 @@ export async function deletePolicyById(policyId) {
127
127
  */
128
128
  export async function deletePolicies() {
129
129
  debugMessage(`cli.PolicyOps.deletePolicies: begin`);
130
- let outcome = false;
131
130
  const errors = [];
132
131
  let policies = [];
133
132
  let indicatorId;
@@ -137,9 +136,8 @@ export async function deletePolicies() {
137
136
  policies = await readPolicies();
138
137
  succeedSpinner(`Found ${policies.length} policies.`);
139
138
  } catch (error) {
140
- error.message = `Error retrieving all policies: ${error.message}`;
141
- failSpinner(error.message);
142
- throw error;
139
+ failSpinner(`Error retrieving all policies`);
140
+ throw new FrodoError(`Error retrieving all policies`, error);
143
141
  }
144
142
  if (policies.length) indicatorId = createProgressIndicator('determinate', policies.length, `Deleting ${policies.length} policies...`);
145
143
  for (const policy of policies) {
@@ -149,25 +147,23 @@ export async function deletePolicies() {
149
147
  await deletePolicy(policyId);
150
148
  updateProgressIndicator(indicatorId, `Deleted ${policyId}`);
151
149
  } catch (error) {
152
- error.message = `Error deleting policy ${policyId}: ${error}`;
153
- updateProgressIndicator(indicatorId, error.message);
154
- errors.push(error);
150
+ errors.push(new FrodoError(`Error deleting policy ${policyId}`, error));
155
151
  }
156
152
  }
157
153
  } catch (error) {
158
- error.message = `Error deleting policies: ${error}`;
159
- errors.push(error);
154
+ errors.push(new FrodoError(`Error deleting policies`, error));
160
155
  } finally {
161
- if (errors.length) {
162
- const errorMessages = errors.map(error => error.message).join('\n');
163
- if (policies.length) stopProgressIndicator(indicatorId, `Error deleting all policies: ${errorMessages}`);
156
+ if (errors.length > 0) {
157
+ if (policies.length) stopProgressIndicator(indicatorId, `Error deleting all policies`, 'fail');
158
+ for (const error of errors) {
159
+ printError(error);
160
+ }
164
161
  } else {
165
162
  if (policies.length) stopProgressIndicator(indicatorId, `Deleted ${policies.length} policies.`);
166
- outcome = true;
167
163
  }
168
164
  }
169
- debugMessage(`cli.PolicyOps.deletePolicies: end [outcome=${outcome}]`);
170
- return outcome;
165
+ debugMessage(`cli.PolicyOps.deletePolicies: end`);
166
+ return errors.length === 0;
171
167
  }
172
168
 
173
169
  /**
@@ -177,7 +173,6 @@ export async function deletePolicies() {
177
173
  */
178
174
  export async function deletePoliciesByPolicySet(policySetId) {
179
175
  debugMessage(`cli.PolicyOps.deletePoliciesByPolicySet: begin`);
180
- let outcome = false;
181
176
  const errors = [];
182
177
  let policies = [];
183
178
  let indicatorId;
@@ -187,9 +182,8 @@ export async function deletePoliciesByPolicySet(policySetId) {
187
182
  policies = await readPoliciesByPolicySet(policySetId);
188
183
  succeedSpinner(`Found ${policies.length} policies in policy set ${policySetId}.`);
189
184
  } catch (error) {
190
- error.message = `Error retrieving all policies from policy set ${policySetId}: ${error.message}`;
191
- failSpinner(error.message);
192
- throw error;
185
+ failSpinner(`Error retrieving all policies from policy set ${policySetId}`);
186
+ throw new FrodoError(`Error retrieving all policies from policy set ${policySetId}`, error);
193
187
  }
194
188
  if (policies.length) indicatorId = createProgressIndicator('determinate', policies.length, `Deleting ${policies.length} policies from policy set ${policySetId}...`);
195
189
  for (const policy of policies) {
@@ -199,25 +193,23 @@ export async function deletePoliciesByPolicySet(policySetId) {
199
193
  await deletePolicy(policyId);
200
194
  updateProgressIndicator(indicatorId, `Deleted ${policyId}`);
201
195
  } catch (error) {
202
- error.message = `Error deleting policy ${policyId} from policy set ${policySetId}: ${error}`;
203
- updateProgressIndicator(indicatorId, error.message);
204
- errors.push(error);
196
+ errors.push(new FrodoError(`Error deleting policy ${policyId} from policy set ${policySetId}`, error));
205
197
  }
206
198
  }
207
199
  } catch (error) {
208
- error.message = `Error deleting policies from policy set ${policySetId}: ${error}`;
209
- errors.push(error);
200
+ errors.push(new FrodoError(`Error deleting policies from policy set ${policySetId}`, error));
210
201
  } finally {
211
202
  if (errors.length) {
212
- const errorMessages = errors.map(error => error.message).join('\n');
213
- if (policies.length) stopProgressIndicator(indicatorId, `Error deleting all policies from policy set ${policySetId}: ${errorMessages}`);
203
+ if (policies.length) stopProgressIndicator(indicatorId, `Error deleting all policies from policy set ${policySetId}`, 'fail');
204
+ for (const error of errors) {
205
+ printError(error);
206
+ }
214
207
  } else {
215
208
  if (policies.length) stopProgressIndicator(indicatorId, `Deleted ${policies.length} policies.`);
216
- outcome = true;
217
209
  }
218
210
  }
219
- debugMessage(`cli.PolicyOps.deletePoliciesByPolicySet: end [outcome=${outcome}]`);
220
- return outcome;
211
+ debugMessage(`cli.PolicyOps.deletePoliciesByPolicySet: end`);
212
+ return errors.length === 0;
221
213
  }
222
214
 
223
215
  /**
@@ -233,7 +225,6 @@ export async function exportPolicyToFile(policyId, file, includeMeta = true, opt
233
225
  prereqs: false,
234
226
  useStringArrays: true
235
227
  }) {
236
- let outcome = false;
237
228
  debugMessage(`cli.PolicyOps.exportPolicyToFile: begin`);
238
229
  showSpinner(`Exporting ${policyId}...`);
239
230
  try {
@@ -245,12 +236,13 @@ export async function exportPolicyToFile(policyId, file, includeMeta = true, opt
245
236
  const exportData = await exportPolicy(policyId, options);
246
237
  saveJsonToFile(exportData, filePath, includeMeta);
247
238
  succeedSpinner(`Exported ${policyId} to ${filePath}.`);
248
- outcome = true;
239
+ debugMessage(`cli.PolicyOps.exportPolicyToFile: end`);
240
+ return true;
249
241
  } catch (error) {
250
- failSpinner(`Error exporting ${policyId}: ${error.message}`);
242
+ failSpinner(`Error exporting ${policyId}`);
243
+ printError(error);
251
244
  }
252
- debugMessage(`cli.PolicyOps.exportPolicyToFile: end`);
253
- return outcome;
245
+ return false;
254
246
  }
255
247
 
256
248
  /**
@@ -265,9 +257,8 @@ export async function exportPoliciesToFile(file, includeMeta = true, options = {
265
257
  prereqs: false,
266
258
  useStringArrays: true
267
259
  }) {
268
- let outcome = false;
269
260
  debugMessage(`cli.PolicyOps.exportPoliciesToFile: begin`);
270
- showSpinner(`Exporting all policy sets...`);
261
+ showSpinner(`Exporting all policies...`);
271
262
  try {
272
263
  let fileName = getTypedFilename(`all${titleCase(getRealmName(state.getRealm()))}Policies`, 'policy.authz');
273
264
  if (file) {
@@ -276,13 +267,14 @@ export async function exportPoliciesToFile(file, includeMeta = true, options = {
276
267
  const filePath = getFilePath(fileName, true);
277
268
  const exportData = await exportPolicies(options);
278
269
  saveJsonToFile(exportData, filePath, includeMeta);
279
- succeedSpinner(`Exported all policy sets to ${filePath}.`);
280
- outcome = true;
270
+ succeedSpinner(`Exported all policies to ${filePath}.`);
271
+ debugMessage(`cli.PolicyOps.exportPoliciesToFile: end`);
272
+ return true;
281
273
  } catch (error) {
282
- failSpinner(`Error exporting policy sets: ${error.message}`);
274
+ failSpinner(`Error exporting policies`);
275
+ printError(error);
283
276
  }
284
- debugMessage(`cli.PolicyOps.exportPoliciesToFile: end`);
285
- return outcome;
277
+ return false;
286
278
  }
287
279
 
288
280
  /**
@@ -298,9 +290,8 @@ export async function exportPoliciesByPolicySetToFile(policySetId, file, include
298
290
  prereqs: false,
299
291
  useStringArrays: true
300
292
  }) {
301
- let outcome = false;
302
293
  debugMessage(`cli.PolicyOps.exportPoliciesToFile: begin`);
303
- showSpinner(`Exporting all policy sets...`);
294
+ showSpinner(`Exporting all policies...`);
304
295
  try {
305
296
  let fileName = getTypedFilename(`all${titleCase(getRealmName(state.getRealm())) + titleCase(policySetId)}Policies`, 'policy.authz');
306
297
  if (file) {
@@ -309,13 +300,14 @@ export async function exportPoliciesByPolicySetToFile(policySetId, file, include
309
300
  const filePath = getFilePath(fileName, true);
310
301
  const exportData = await exportPoliciesByPolicySet(policySetId, options);
311
302
  saveJsonToFile(exportData, filePath, includeMeta);
312
- succeedSpinner(`Exported all policy sets to ${filePath}.`);
313
- outcome = true;
303
+ succeedSpinner(`Exported all policies to ${filePath}.`);
304
+ debugMessage(`cli.PolicyOps.exportPoliciesToFile: end`);
305
+ return true;
314
306
  } catch (error) {
315
- failSpinner(`Error exporting policy sets: ${error.message}`);
307
+ failSpinner(`Error exporting policies`);
308
+ printError(error);
316
309
  }
317
- debugMessage(`cli.PolicyOps.exportPoliciesToFile: end`);
318
- return outcome;
310
+ return false;
319
311
  }
320
312
 
321
313
  /**
@@ -334,7 +326,7 @@ export async function exportPoliciesToFiles(includeMeta = true, options = {
334
326
  let indicatorId;
335
327
  try {
336
328
  const policies = await readPolicies();
337
- indicatorId = createProgressIndicator('determinate', policies.length, 'Exporting policy sets...');
329
+ indicatorId = createProgressIndicator('determinate', policies.length, 'Exporting policies...');
338
330
  for (const policy of policies) {
339
331
  const file = getTypedFilename(policy._id, 'policy.authz');
340
332
  try {
@@ -343,16 +335,19 @@ export async function exportPoliciesToFiles(includeMeta = true, options = {
343
335
  updateProgressIndicator(indicatorId, `Exported ${policy._id}.`);
344
336
  } catch (error) {
345
337
  errors.push(error);
346
- updateProgressIndicator(indicatorId, `Error exporting ${policy._id}.`);
347
338
  }
348
339
  }
340
+ if (errors.length > 0) {
341
+ throw new FrodoError(`Error exporting policies`, errors);
342
+ }
349
343
  stopProgressIndicator(indicatorId, `Export complete.`);
344
+ debugMessage(`cli.PolicyOps.exportPoliciesToFiles: end`);
345
+ return true;
350
346
  } catch (error) {
351
- errors.push(error);
352
- stopProgressIndicator(indicatorId, `Error exporting policy sets to files`);
347
+ stopProgressIndicator(indicatorId, `Error exporting policies`, 'fail');
348
+ printError(error);
353
349
  }
354
- debugMessage(`cli.PolicyOps.exportPoliciesToFiles: end`);
355
- return 0 === errors.length;
350
+ return false;
356
351
  }
357
352
 
358
353
  /**
@@ -380,16 +375,19 @@ export async function exportPoliciesByPolicySetToFiles(policySetId, includeMeta
380
375
  updateProgressIndicator(indicatorId, `Exported ${policy._id}.`);
381
376
  } catch (error) {
382
377
  errors.push(error);
383
- updateProgressIndicator(indicatorId, `Error exporting ${policy._id}.`);
384
378
  }
385
379
  }
380
+ if (errors.length > 0) {
381
+ throw new FrodoError(`Error exporting policies`, errors);
382
+ }
386
383
  stopProgressIndicator(indicatorId, `Export complete.`);
384
+ debugMessage(`cli.PolicyOps.exportPoliciesToFiles: end`);
385
+ return true;
387
386
  } catch (error) {
388
- errors.push(error);
389
- stopProgressIndicator(indicatorId, `Error exporting policy sets to files`);
387
+ stopProgressIndicator(indicatorId, `Error exporting policies`, 'fail');
388
+ printError(error);
390
389
  }
391
- debugMessage(`cli.PolicyOps.exportPoliciesToFiles: end`);
392
- return 0 === errors.length;
390
+ return false;
393
391
  }
394
392
 
395
393
  /**
@@ -403,21 +401,20 @@ export async function importPolicyFromFile(policyId, file, options = {
403
401
  deps: true,
404
402
  prereqs: false
405
403
  }) {
406
- let outcome = false;
407
404
  debugMessage(`cli.PolicyOps.importPolicyFromFile: begin`);
408
405
  showSpinner(`Importing ${policyId}...`);
409
406
  try {
410
407
  const data = fs.readFileSync(getFilePath(file), 'utf8');
411
408
  const fileData = JSON.parse(data);
412
409
  await importPolicy(policyId, fileData, options);
413
- outcome = true;
414
410
  succeedSpinner(`Imported ${policyId}.`);
411
+ debugMessage(`cli.PolicyOps.importPolicyFromFile: end`);
412
+ return true;
415
413
  } catch (error) {
416
- failSpinner(`Error importing ${policyId}.`);
417
- printMessage(error, 'error');
414
+ failSpinner(`Error importing ${policyId}`);
415
+ printError(error);
418
416
  }
419
- debugMessage(`cli.PolicyOps.importPolicyFromFile: end`);
420
- return outcome;
417
+ return false;
421
418
  }
422
419
 
423
420
  /**
@@ -430,7 +427,6 @@ export async function importFirstPolicyFromFile(file, options = {
430
427
  deps: true,
431
428
  prereqs: false
432
429
  }) {
433
- let outcome = false;
434
430
  debugMessage(`cli.PolicySetOps.importFirstPolicyFromFile: begin`);
435
431
  const filePath = getFilePath(file);
436
432
  showSpinner(`Importing first policy from ${filePath}...`);
@@ -438,14 +434,14 @@ export async function importFirstPolicyFromFile(file, options = {
438
434
  const data = fs.readFileSync(filePath, 'utf8');
439
435
  const fileData = JSON.parse(data);
440
436
  const policy = await importFirstPolicy(fileData, options);
441
- outcome = true;
442
437
  succeedSpinner(`Imported first policy with id '${policy._id}' from ${filePath}.`);
438
+ debugMessage(`cli.PolicySetOps.importFirstPolicyFromFile: end`);
439
+ return true;
443
440
  } catch (error) {
444
- failSpinner(`Error importing first policy from ${filePath}.`);
445
- printMessage(error, 'error');
441
+ failSpinner(`Error importing first policy`);
442
+ printError(error);
446
443
  }
447
- debugMessage(`cli.PolicySetOps.importFirstPolicyFromFile: end`);
448
- return outcome;
444
+ return false;
449
445
  }
450
446
 
451
447
  /**
@@ -458,7 +454,6 @@ export async function importPoliciesFromFile(file, options = {
458
454
  deps: true,
459
455
  prereqs: false
460
456
  }) {
461
- let outcome = false;
462
457
  debugMessage(`cli.PolicyOps.importPoliciesFromFile: begin`);
463
458
  const filePath = getFilePath(file);
464
459
  showSpinner(`Importing ${filePath}...`);
@@ -466,14 +461,14 @@ export async function importPoliciesFromFile(file, options = {
466
461
  const data = fs.readFileSync(filePath, 'utf8');
467
462
  const fileData = JSON.parse(data);
468
463
  await importPolicies(fileData, options);
469
- outcome = true;
470
464
  succeedSpinner(`Imported ${filePath}${options.policySetName ? ' into policy set ' + options.policySetName : '.'}`);
465
+ debugMessage(`cli.PolicyOps.importPoliciesFromFile: end`);
466
+ return true;
471
467
  } catch (error) {
472
468
  failSpinner(`Error importing ${filePath}${options.policySetName ? ' into policy set ' + options.policySetName : '.'}`);
473
- printMessage(error, 'error');
469
+ printError(error);
474
470
  }
475
- debugMessage(`cli.PolicyOps.importPoliciesFromFile: end`);
476
- return outcome;
471
+ return false;
477
472
  }
478
473
 
479
474
  /**
@@ -503,17 +498,18 @@ export async function importPoliciesFromFiles(options = {
503
498
  updateProgressIndicator(indicatorId, `Imported ${count} policies from ${file}`);
504
499
  } catch (error) {
505
500
  errors.push(error);
506
- updateProgressIndicator(indicatorId, `Error importing policies from ${file}`);
507
- printMessage(error, 'error');
508
501
  }
509
502
  }
503
+ if (errors.length > 0) {
504
+ throw new FrodoError(`Error importing policies`, errors);
505
+ }
510
506
  stopProgressIndicator(indicatorId, `Finished importing ${total} policies from ${files.length} files.`);
507
+ debugMessage(`cli.PolicyOps.importPoliciesFromFiles: end`);
508
+ return true;
511
509
  } catch (error) {
512
- errors.push(error);
513
- stopProgressIndicator(indicatorId, `Error importing policies from files.`);
514
- printMessage(error, 'error');
510
+ stopProgressIndicator(indicatorId, `Error importing policies`);
511
+ printError(error);
515
512
  }
516
- debugMessage(`cli.PolicyOps.importPoliciesFromFiles: end`);
517
- return 0 === errors.length;
513
+ return false;
518
514
  }
519
515
  //# sourceMappingURL=PolicyOps.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PolicyOps.js","names":["frodo","state","fs","createObjectTable","createProgressIndicator","createTable","debugMessage","failSpinner","printMessage","showSpinner","stopProgressIndicator","succeedSpinner","updateProgressIndicator","getRealmName","getTypedFilename","saveJsonToFile","titleCase","getFilePath","getWorkingDirectory","utils","readPolicies","readPoliciesByPolicySet","readPolicy","exportPolicy","exportPolicies","exportPoliciesByPolicySet","importPolicy","importFirstPolicy","importPolicies","deletePolicy","authz","policy","listPolicies","long","outcome","policies","sort","a","b","_id","localeCompare","table","push","description","active","toString","err","message","listPoliciesByPolicySet","policySetId","describePolicy","policyId","json","policySet","deletePolicyById","error","deletePolicies","errors","indicatorId","length","errorMessages","map","join","deletePoliciesByPolicySet","exportPolicyToFile","file","includeMeta","options","deps","prereqs","useStringArrays","fileName","filePath","exportData","exportPoliciesToFile","getRealm","exportPoliciesByPolicySetToFile","exportPoliciesToFiles","exportPoliciesByPolicySetToFiles","importPolicyFromFile","data","readFileSync","fileData","JSON","parse","importFirstPolicyFromFile","importPoliciesFromFile","policySetName","importPoliciesFromFiles","names","readdirSync","files","filter","name","toLowerCase","endsWith","total","count","Object","keys","policyset"],"sources":["../../src/ops/PolicyOps.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport { type PolicySkeleton } from '@rockcarver/frodo-lib/types/api/PoliciesApi';\nimport type {\n PolicyExportInterface,\n PolicyExportOptions,\n PolicyImportOptions,\n} from '@rockcarver/frodo-lib/types/ops/PolicyOps';\nimport fs from 'fs';\n\nimport {\n createObjectTable,\n createProgressIndicator,\n createTable,\n debugMessage,\n failSpinner,\n printMessage,\n showSpinner,\n stopProgressIndicator,\n succeedSpinner,\n updateProgressIndicator,\n} from '../utils/Console';\n\nconst {\n getRealmName,\n getTypedFilename,\n saveJsonToFile,\n titleCase,\n getFilePath,\n getWorkingDirectory,\n} = frodo.utils;\nconst {\n readPolicies,\n readPoliciesByPolicySet,\n readPolicy,\n exportPolicy,\n exportPolicies,\n exportPoliciesByPolicySet,\n importPolicy,\n importFirstPolicy,\n importPolicies,\n deletePolicy,\n} = frodo.authz.policy;\n\n/**\n * List policies\n * @param {boolean} long list with details\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function listPolicies(long = false): Promise<boolean> {\n let outcome = false;\n try {\n const policies = await readPolicies();\n policies.sort((a, b) => a._id.localeCompare(b._id));\n if (long) {\n const table = createTable(['Id', 'Description', 'Status']);\n for (const policy of policies) {\n table.push([\n `${policy._id}`,\n `${policy.description}`,\n policy.active ? 'active'['brightGreen'] : 'inactive'['brightRed'],\n ]);\n }\n printMessage(table.toString(), 'data');\n } else {\n for (const policy of policies) {\n printMessage(`${policy._id}`, 'data');\n }\n }\n outcome = true;\n } catch (err) {\n printMessage(`listPolicies ERROR: ${err.message}`, 'error');\n printMessage(err, 'error');\n }\n return outcome;\n}\n\n/**\n * List policies by policy set\n * @param {string} policySetId policy set id/name\n * @param {boolean} long list with details\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function listPoliciesByPolicySet(\n policySetId: string,\n long = false\n): Promise<boolean> {\n let outcome = false;\n try {\n const policies = await readPoliciesByPolicySet(policySetId);\n policies.sort((a, b) => a._id.localeCompare(b._id));\n if (long) {\n const table = createTable(['Id', 'Description', 'Status']);\n for (const policy of policies) {\n table.push([\n `${policy._id}`,\n `${policy.description}`,\n policy.active ? 'active'['brightGreen'] : 'inactive'['brightRed'],\n ]);\n }\n printMessage(table.toString(), 'data');\n } else {\n for (const policy of policies) {\n printMessage(`${policy._id}`, 'data');\n }\n }\n outcome = true;\n } catch (err) {\n printMessage(`listPolicies ERROR: ${err.message}`, 'error');\n printMessage(err, 'error');\n }\n return outcome;\n}\n\n/**\n * Describe policy\n * @param {string} policyId policy id/name\n * @param {Object} json JSON output\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function describePolicy(\n policyId: string,\n json = false\n): Promise<boolean> {\n let outcome = false;\n const policySet = await readPolicy(policyId);\n outcome = true;\n if (json) {\n printMessage(policySet, 'data');\n } else {\n const table = createObjectTable(policySet);\n printMessage(table.toString(), 'data');\n }\n return outcome;\n}\n\n/**\n * Delete policy\n * @param {string} policyId policy id/name\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function deletePolicyById(policyId: string): Promise<boolean> {\n debugMessage(`cli.PolicyOps.deletePolicy: begin`);\n showSpinner(`Deleting ${policyId}...`);\n let outcome = false;\n try {\n debugMessage(`Deleting policy ${policyId}`);\n await deletePolicy(policyId);\n succeedSpinner(`Deleted ${policyId}.`);\n outcome = true;\n } catch (error) {\n failSpinner(`Error deleting policy ${policyId}: ${error}`);\n }\n debugMessage(`cli.PolicyOps.deletePolicy: end [outcome=${outcome}]`);\n return outcome;\n}\n\n/**\n * Delete all policies\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function deletePolicies(): Promise<boolean> {\n debugMessage(`cli.PolicyOps.deletePolicies: begin`);\n let outcome = false;\n const errors = [];\n let policies: PolicySkeleton[] = [];\n let indicatorId: string;\n try {\n showSpinner(`Retrieving all policies...`);\n try {\n policies = await readPolicies();\n succeedSpinner(`Found ${policies.length} policies.`);\n } catch (error) {\n error.message = `Error retrieving all policies: ${error.message}`;\n failSpinner(error.message);\n throw error;\n }\n if (policies.length)\n indicatorId = createProgressIndicator(\n 'determinate',\n policies.length,\n `Deleting ${policies.length} policies...`\n );\n for (const policy of policies) {\n const policyId = policy._id;\n try {\n debugMessage(`Deleting policy ${policyId}`);\n await deletePolicy(policyId);\n updateProgressIndicator(indicatorId, `Deleted ${policyId}`);\n } catch (error) {\n error.message = `Error deleting policy ${policyId}: ${error}`;\n updateProgressIndicator(indicatorId, error.message);\n errors.push(error);\n }\n }\n } catch (error) {\n error.message = `Error deleting policies: ${error}`;\n errors.push(error);\n } finally {\n if (errors.length) {\n const errorMessages = errors.map((error) => error.message).join('\\n');\n if (policies.length)\n stopProgressIndicator(\n indicatorId,\n `Error deleting all policies: ${errorMessages}`\n );\n } else {\n if (policies.length)\n stopProgressIndicator(\n indicatorId,\n `Deleted ${policies.length} policies.`\n );\n outcome = true;\n }\n }\n debugMessage(`cli.PolicyOps.deletePolicies: end [outcome=${outcome}]`);\n return outcome;\n}\n\n/**\n * Delete all policies in policy set\n * @param {string} policySetId policy set id/name\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function deletePoliciesByPolicySet(\n policySetId: string\n): Promise<boolean> {\n debugMessage(`cli.PolicyOps.deletePoliciesByPolicySet: begin`);\n let outcome = false;\n const errors = [];\n let policies: PolicySkeleton[] = [];\n let indicatorId: string;\n try {\n showSpinner(`Retrieving all policies from policy set ${policySetId}...`);\n try {\n policies = await readPoliciesByPolicySet(policySetId);\n succeedSpinner(\n `Found ${policies.length} policies in policy set ${policySetId}.`\n );\n } catch (error) {\n error.message = `Error retrieving all policies from policy set ${policySetId}: ${error.message}`;\n failSpinner(error.message);\n throw error;\n }\n if (policies.length)\n indicatorId = createProgressIndicator(\n 'determinate',\n policies.length,\n `Deleting ${policies.length} policies from policy set ${policySetId}...`\n );\n for (const policy of policies) {\n const policyId = policy._id;\n try {\n debugMessage(`Deleting policy ${policyId}`);\n await deletePolicy(policyId);\n updateProgressIndicator(indicatorId, `Deleted ${policyId}`);\n } catch (error) {\n error.message = `Error deleting policy ${policyId} from policy set ${policySetId}: ${error}`;\n updateProgressIndicator(indicatorId, error.message);\n errors.push(error);\n }\n }\n } catch (error) {\n error.message = `Error deleting policies from policy set ${policySetId}: ${error}`;\n errors.push(error);\n } finally {\n if (errors.length) {\n const errorMessages = errors.map((error) => error.message).join('\\n');\n if (policies.length)\n stopProgressIndicator(\n indicatorId,\n `Error deleting all policies from policy set ${policySetId}: ${errorMessages}`\n );\n } else {\n if (policies.length)\n stopProgressIndicator(\n indicatorId,\n `Deleted ${policies.length} policies.`\n );\n outcome = true;\n }\n }\n debugMessage(\n `cli.PolicyOps.deletePoliciesByPolicySet: end [outcome=${outcome}]`\n );\n return outcome;\n}\n\n/**\n * Export policy to file\n * @param {string} policyId policy id/name\n * @param {string} file file name\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @param {ApplicationExportOptions} options export options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportPolicyToFile(\n policyId: string,\n file: string,\n includeMeta = true,\n options: PolicyExportOptions = {\n deps: true,\n prereqs: false,\n useStringArrays: true,\n }\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.PolicyOps.exportPolicyToFile: begin`);\n showSpinner(`Exporting ${policyId}...`);\n try {\n let fileName = getTypedFilename(policyId, 'policy.authz');\n if (file) {\n fileName = file;\n }\n const filePath = getFilePath(fileName, true);\n const exportData = await exportPolicy(policyId, options);\n saveJsonToFile(exportData, filePath, includeMeta);\n succeedSpinner(`Exported ${policyId} to ${filePath}.`);\n outcome = true;\n } catch (error) {\n failSpinner(`Error exporting ${policyId}: ${error.message}`);\n }\n debugMessage(`cli.PolicyOps.exportPolicyToFile: end`);\n return outcome;\n}\n\n/**\n * Export policies to file\n * @param {string} file file name\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @param {PolicyExportOptions} options export options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportPoliciesToFile(\n file: string,\n includeMeta = true,\n options: PolicyExportOptions = {\n deps: true,\n prereqs: false,\n useStringArrays: true,\n }\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.PolicyOps.exportPoliciesToFile: begin`);\n showSpinner(`Exporting all policy sets...`);\n try {\n let fileName = getTypedFilename(\n `all${titleCase(getRealmName(state.getRealm()))}Policies`,\n 'policy.authz'\n );\n if (file) {\n fileName = file;\n }\n const filePath = getFilePath(fileName, true);\n const exportData = await exportPolicies(options);\n saveJsonToFile(exportData, filePath, includeMeta);\n succeedSpinner(`Exported all policy sets to ${filePath}.`);\n outcome = true;\n } catch (error) {\n failSpinner(`Error exporting policy sets: ${error.message}`);\n }\n debugMessage(`cli.PolicyOps.exportPoliciesToFile: end`);\n return outcome;\n}\n\n/**\n * Export policies to file\n * @param {string} policySetId policy set id/name\n * @param {string} file file name\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @param {PolicyExportOptions} options export options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportPoliciesByPolicySetToFile(\n policySetId: string,\n file: string,\n includeMeta = true,\n options: PolicyExportOptions = {\n deps: true,\n prereqs: false,\n useStringArrays: true,\n }\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.PolicyOps.exportPoliciesToFile: begin`);\n showSpinner(`Exporting all policy sets...`);\n try {\n let fileName = getTypedFilename(\n `all${\n titleCase(getRealmName(state.getRealm())) + titleCase(policySetId)\n }Policies`,\n 'policy.authz'\n );\n if (file) {\n fileName = file;\n }\n const filePath = getFilePath(fileName, true);\n const exportData = await exportPoliciesByPolicySet(policySetId, options);\n saveJsonToFile(exportData, filePath, includeMeta);\n succeedSpinner(`Exported all policy sets to ${filePath}.`);\n outcome = true;\n } catch (error) {\n failSpinner(`Error exporting policy sets: ${error.message}`);\n }\n debugMessage(`cli.PolicyOps.exportPoliciesToFile: end`);\n return outcome;\n}\n\n/**\n * Export all policies to separate files\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @param {PolicyExportOptions} options export options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportPoliciesToFiles(\n includeMeta = true,\n options: PolicyExportOptions = {\n deps: true,\n prereqs: false,\n useStringArrays: true,\n }\n): Promise<boolean> {\n debugMessage(`cli.PolicyOps.exportPoliciesToFiles: begin`);\n const errors = [];\n let indicatorId: string;\n try {\n const policies: PolicySkeleton[] = await readPolicies();\n indicatorId = createProgressIndicator(\n 'determinate',\n policies.length,\n 'Exporting policy sets...'\n );\n for (const policy of policies) {\n const file = getTypedFilename(policy._id, 'policy.authz');\n try {\n const exportData: PolicyExportInterface = await exportPolicy(\n policy._id,\n options\n );\n saveJsonToFile(exportData, getFilePath(file, true), includeMeta);\n updateProgressIndicator(indicatorId, `Exported ${policy._id}.`);\n } catch (error) {\n errors.push(error);\n updateProgressIndicator(indicatorId, `Error exporting ${policy._id}.`);\n }\n }\n stopProgressIndicator(indicatorId, `Export complete.`);\n } catch (error) {\n errors.push(error);\n stopProgressIndicator(indicatorId, `Error exporting policy sets to files`);\n }\n debugMessage(`cli.PolicyOps.exportPoliciesToFiles: end`);\n return 0 === errors.length;\n}\n\n/**\n * Export all policies to separate files\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @param {PolicyExportOptions} options export options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportPoliciesByPolicySetToFiles(\n policySetId: string,\n includeMeta = true,\n options: PolicyExportOptions = {\n deps: true,\n prereqs: false,\n useStringArrays: true,\n }\n): Promise<boolean> {\n debugMessage(`cli.PolicyOps.exportPoliciesToFiles: begin`);\n const errors = [];\n let indicatorId: string;\n try {\n const policies: PolicySkeleton[] =\n await readPoliciesByPolicySet(policySetId);\n indicatorId = createProgressIndicator(\n 'determinate',\n policies.length,\n `Exporting policies in policy set ${policySetId}...`\n );\n for (const policy of policies) {\n const file = getTypedFilename(policy._id, 'policy.authz');\n try {\n const exportData: PolicyExportInterface = await exportPolicy(\n policy._id,\n options\n );\n saveJsonToFile(exportData, getFilePath(file, true), includeMeta);\n updateProgressIndicator(indicatorId, `Exported ${policy._id}.`);\n } catch (error) {\n errors.push(error);\n updateProgressIndicator(indicatorId, `Error exporting ${policy._id}.`);\n }\n }\n stopProgressIndicator(indicatorId, `Export complete.`);\n } catch (error) {\n errors.push(error);\n stopProgressIndicator(indicatorId, `Error exporting policy sets to files`);\n }\n debugMessage(`cli.PolicyOps.exportPoliciesToFiles: end`);\n return 0 === errors.length;\n}\n\n/**\n * Import policy from file\n * @param {string} policyId policy id/name\n * @param {string} file file name\n * @param {PolicyImportOptions} options import options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importPolicyFromFile(\n policyId: string,\n file: string,\n options: PolicyImportOptions = { deps: true, prereqs: false }\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.PolicyOps.importPolicyFromFile: begin`);\n showSpinner(`Importing ${policyId}...`);\n try {\n const data = fs.readFileSync(getFilePath(file), 'utf8');\n const fileData = JSON.parse(data);\n await importPolicy(policyId, fileData, options);\n outcome = true;\n succeedSpinner(`Imported ${policyId}.`);\n } catch (error) {\n failSpinner(`Error importing ${policyId}.`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.PolicyOps.importPolicyFromFile: end`);\n return outcome;\n}\n\n/**\n * Import first policy from file\n * @param {string} file file name\n * @param {PolicyImportOptions} options import options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importFirstPolicyFromFile(\n file: string,\n options: PolicyImportOptions = { deps: true, prereqs: false }\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.PolicySetOps.importFirstPolicyFromFile: begin`);\n const filePath = getFilePath(file);\n showSpinner(`Importing first policy from ${filePath}...`);\n try {\n const data = fs.readFileSync(filePath, 'utf8');\n const fileData = JSON.parse(data);\n const policy = await importFirstPolicy(fileData, options);\n outcome = true;\n succeedSpinner(\n `Imported first policy with id '${policy._id}' from ${filePath}.`\n );\n } catch (error) {\n failSpinner(`Error importing first policy from ${filePath}.`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.PolicySetOps.importFirstPolicyFromFile: end`);\n return outcome;\n}\n\n/**\n * Import policies from file\n * @param {string} file file name\n * @param {PolicyImportOptions} options import options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importPoliciesFromFile(\n file: string,\n options: PolicyImportOptions = { deps: true, prereqs: false }\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.PolicyOps.importPoliciesFromFile: 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 importPolicies(fileData, options);\n outcome = true;\n succeedSpinner(\n `Imported ${filePath}${\n options.policySetName\n ? ' into policy set ' + options.policySetName\n : '.'\n }`\n );\n } catch (error) {\n failSpinner(\n `Error importing ${filePath}${\n options.policySetName\n ? ' into policy set ' + options.policySetName\n : '.'\n }`\n );\n printMessage(error, 'error');\n }\n debugMessage(`cli.PolicyOps.importPoliciesFromFile: end`);\n return outcome;\n}\n\n/**\n * Import policies from files\n * @param {PolicyImportOptions} options import options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importPoliciesFromFiles(\n options: PolicyImportOptions = { deps: true, prereqs: false }\n): Promise<boolean> {\n const errors = [];\n let indicatorId: string;\n try {\n debugMessage(`cli.PolicyOps.importPoliciesFromFiles: begin`);\n const names = fs.readdirSync(getWorkingDirectory());\n const files = names\n .filter((name) => name.toLowerCase().endsWith('.policy.authz.json'))\n .map((name) => getFilePath(name));\n indicatorId = createProgressIndicator(\n 'determinate',\n files.length,\n 'Importing policies...'\n );\n let total = 0;\n for (const file of files) {\n try {\n const data = fs.readFileSync(file, 'utf8');\n const fileData: PolicyExportInterface = JSON.parse(data);\n const count = Object.keys(fileData.policyset).length;\n total += count;\n await importPolicies(fileData, options);\n updateProgressIndicator(\n indicatorId,\n `Imported ${count} policies from ${file}`\n );\n } catch (error) {\n errors.push(error);\n updateProgressIndicator(\n indicatorId,\n `Error importing policies from ${file}`\n );\n printMessage(error, 'error');\n }\n }\n stopProgressIndicator(\n indicatorId,\n `Finished importing ${total} policies from ${files.length} files.`\n );\n } catch (error) {\n errors.push(error);\n stopProgressIndicator(indicatorId, `Error importing policies from files.`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.PolicyOps.importPoliciesFromFiles: end`);\n return 0 === errors.length;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"PolicyOps.js","names":["frodo","FrodoError","state","fs","createObjectTable","createProgressIndicator","createTable","debugMessage","failSpinner","printError","printMessage","showSpinner","stopProgressIndicator","succeedSpinner","updateProgressIndicator","getRealmName","getTypedFilename","saveJsonToFile","titleCase","getFilePath","getWorkingDirectory","utils","readPolicies","readPoliciesByPolicySet","readPolicy","exportPolicy","exportPolicies","exportPoliciesByPolicySet","importPolicy","importFirstPolicy","importPolicies","deletePolicy","authz","policy","listPolicies","long","policies","sort","a","b","_id","localeCompare","table","push","description","active","toString","error","listPoliciesByPolicySet","policySetId","outcome","describePolicy","policyId","json","policySet","deletePolicyById","deletePolicies","errors","indicatorId","length","deletePoliciesByPolicySet","exportPolicyToFile","file","includeMeta","options","deps","prereqs","useStringArrays","fileName","filePath","exportData","exportPoliciesToFile","getRealm","exportPoliciesByPolicySetToFile","exportPoliciesToFiles","exportPoliciesByPolicySetToFiles","importPolicyFromFile","data","readFileSync","fileData","JSON","parse","importFirstPolicyFromFile","importPoliciesFromFile","policySetName","importPoliciesFromFiles","names","readdirSync","files","filter","name","toLowerCase","endsWith","map","total","count","Object","keys","policyset"],"sources":["../../src/ops/PolicyOps.ts"],"sourcesContent":["import { frodo, FrodoError, state } from '@rockcarver/frodo-lib';\nimport { type PolicySkeleton } from '@rockcarver/frodo-lib/types/api/PoliciesApi';\nimport type {\n PolicyExportInterface,\n PolicyExportOptions,\n PolicyImportOptions,\n} from '@rockcarver/frodo-lib/types/ops/PolicyOps';\nimport fs from 'fs';\n\nimport {\n createObjectTable,\n createProgressIndicator,\n createTable,\n debugMessage,\n failSpinner,\n printError,\n printMessage,\n showSpinner,\n stopProgressIndicator,\n succeedSpinner,\n updateProgressIndicator,\n} from '../utils/Console';\n\nconst {\n getRealmName,\n getTypedFilename,\n saveJsonToFile,\n titleCase,\n getFilePath,\n getWorkingDirectory,\n} = frodo.utils;\nconst {\n readPolicies,\n readPoliciesByPolicySet,\n readPolicy,\n exportPolicy,\n exportPolicies,\n exportPoliciesByPolicySet,\n importPolicy,\n importFirstPolicy,\n importPolicies,\n deletePolicy,\n} = frodo.authz.policy;\n\n/**\n * List policies\n * @param {boolean} long list with details\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function listPolicies(long: boolean = false): Promise<boolean> {\n try {\n const policies = await readPolicies();\n policies.sort((a, b) => a._id.localeCompare(b._id));\n if (long) {\n const table = createTable(['Id', 'Description', 'Status']);\n for (const policy of policies) {\n table.push([\n `${policy._id}`,\n `${policy.description}`,\n policy.active ? 'active'['brightGreen'] : 'inactive'['brightRed'],\n ]);\n }\n printMessage(table.toString(), 'data');\n } else {\n for (const policy of policies) {\n printMessage(`${policy._id}`, 'data');\n }\n }\n return true;\n } catch (error) {\n printError(error);\n }\n return false;\n}\n\n/**\n * List policies by policy set\n * @param {string} policySetId policy set id/name\n * @param {boolean} long list with details\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function listPoliciesByPolicySet(\n policySetId: string,\n long: boolean = false\n): Promise<boolean> {\n let outcome = false;\n try {\n const policies = await readPoliciesByPolicySet(policySetId);\n policies.sort((a, b) => a._id.localeCompare(b._id));\n if (long) {\n const table = createTable(['Id', 'Description', 'Status']);\n for (const policy of policies) {\n table.push([\n `${policy._id}`,\n `${policy.description}`,\n policy.active ? 'active'['brightGreen'] : 'inactive'['brightRed'],\n ]);\n }\n printMessage(table.toString(), 'data');\n } else {\n for (const policy of policies) {\n printMessage(`${policy._id}`, 'data');\n }\n }\n outcome = true;\n } catch (error) {\n printError(error);\n }\n return outcome;\n}\n\n/**\n * Describe policy\n * @param {string} policyId policy id/name\n * @param {Object} json JSON output\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function describePolicy(\n policyId: string,\n json: boolean = false\n): Promise<boolean> {\n try {\n const policySet = await readPolicy(policyId);\n if (json) {\n printMessage(policySet, 'data');\n } else {\n const table = createObjectTable(policySet);\n printMessage(table.toString(), 'data');\n }\n return true;\n } catch (error) {\n printError(error);\n }\n return false;\n}\n\n/**\n * Delete policy\n * @param {string} policyId policy id/name\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function deletePolicyById(policyId: string): Promise<boolean> {\n debugMessage(`cli.PolicyOps.deletePolicy: begin`);\n showSpinner(`Deleting ${policyId}...`);\n try {\n debugMessage(`Deleting policy ${policyId}`);\n await deletePolicy(policyId);\n succeedSpinner(`Deleted ${policyId}.`);\n debugMessage(`cli.PolicyOps.deletePolicy: end]`);\n return true;\n } catch (error) {\n failSpinner(`Error deleting policy ${policyId}`);\n printError(error);\n }\n return false;\n}\n\n/**\n * Delete all policies\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function deletePolicies(): Promise<boolean> {\n debugMessage(`cli.PolicyOps.deletePolicies: begin`);\n const errors = [];\n let policies: PolicySkeleton[] = [];\n let indicatorId: string;\n try {\n showSpinner(`Retrieving all policies...`);\n try {\n policies = await readPolicies();\n succeedSpinner(`Found ${policies.length} policies.`);\n } catch (error) {\n failSpinner(`Error retrieving all policies`);\n throw new FrodoError(`Error retrieving all policies`, error);\n }\n if (policies.length)\n indicatorId = createProgressIndicator(\n 'determinate',\n policies.length,\n `Deleting ${policies.length} policies...`\n );\n for (const policy of policies) {\n const policyId = policy._id;\n try {\n debugMessage(`Deleting policy ${policyId}`);\n await deletePolicy(policyId);\n updateProgressIndicator(indicatorId, `Deleted ${policyId}`);\n } catch (error) {\n errors.push(new FrodoError(`Error deleting policy ${policyId}`, error));\n }\n }\n } catch (error) {\n errors.push(new FrodoError(`Error deleting policies`, error));\n } finally {\n if (errors.length > 0) {\n if (policies.length)\n stopProgressIndicator(\n indicatorId,\n `Error deleting all policies`,\n 'fail'\n );\n for (const error of errors) {\n printError(error);\n }\n } else {\n if (policies.length)\n stopProgressIndicator(\n indicatorId,\n `Deleted ${policies.length} policies.`\n );\n }\n }\n debugMessage(`cli.PolicyOps.deletePolicies: end`);\n return errors.length === 0;\n}\n\n/**\n * Delete all policies in policy set\n * @param {string} policySetId policy set id/name\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function deletePoliciesByPolicySet(\n policySetId: string\n): Promise<boolean> {\n debugMessage(`cli.PolicyOps.deletePoliciesByPolicySet: begin`);\n const errors = [];\n let policies: PolicySkeleton[] = [];\n let indicatorId: string;\n try {\n showSpinner(`Retrieving all policies from policy set ${policySetId}...`);\n try {\n policies = await readPoliciesByPolicySet(policySetId);\n succeedSpinner(\n `Found ${policies.length} policies in policy set ${policySetId}.`\n );\n } catch (error) {\n failSpinner(\n `Error retrieving all policies from policy set ${policySetId}`\n );\n throw new FrodoError(\n `Error retrieving all policies from policy set ${policySetId}`,\n error\n );\n }\n if (policies.length)\n indicatorId = createProgressIndicator(\n 'determinate',\n policies.length,\n `Deleting ${policies.length} policies from policy set ${policySetId}...`\n );\n for (const policy of policies) {\n const policyId = policy._id;\n try {\n debugMessage(`Deleting policy ${policyId}`);\n await deletePolicy(policyId);\n updateProgressIndicator(indicatorId, `Deleted ${policyId}`);\n } catch (error) {\n errors.push(\n new FrodoError(\n `Error deleting policy ${policyId} from policy set ${policySetId}`,\n error\n )\n );\n }\n }\n } catch (error) {\n errors.push(\n new FrodoError(\n `Error deleting policies from policy set ${policySetId}`,\n error\n )\n );\n } finally {\n if (errors.length) {\n if (policies.length)\n stopProgressIndicator(\n indicatorId,\n `Error deleting all policies from policy set ${policySetId}`,\n 'fail'\n );\n for (const error of errors) {\n printError(error);\n }\n } else {\n if (policies.length)\n stopProgressIndicator(\n indicatorId,\n `Deleted ${policies.length} policies.`\n );\n }\n }\n debugMessage(`cli.PolicyOps.deletePoliciesByPolicySet: end`);\n return errors.length === 0;\n}\n\n/**\n * Export policy to file\n * @param {string} policyId policy id/name\n * @param {string} file file name\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @param {ApplicationExportOptions} options export options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportPolicyToFile(\n policyId: string,\n file: string,\n includeMeta: boolean = true,\n options: PolicyExportOptions = {\n deps: true,\n prereqs: false,\n useStringArrays: true,\n }\n): Promise<boolean> {\n debugMessage(`cli.PolicyOps.exportPolicyToFile: begin`);\n showSpinner(`Exporting ${policyId}...`);\n try {\n let fileName = getTypedFilename(policyId, 'policy.authz');\n if (file) {\n fileName = file;\n }\n const filePath = getFilePath(fileName, true);\n const exportData = await exportPolicy(policyId, options);\n saveJsonToFile(exportData, filePath, includeMeta);\n succeedSpinner(`Exported ${policyId} to ${filePath}.`);\n debugMessage(`cli.PolicyOps.exportPolicyToFile: end`);\n return true;\n } catch (error) {\n failSpinner(`Error exporting ${policyId}`);\n printError(error);\n }\n return false;\n}\n\n/**\n * Export policies to file\n * @param {string} file file name\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @param {PolicyExportOptions} options export options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportPoliciesToFile(\n file: string,\n includeMeta: boolean = true,\n options: PolicyExportOptions = {\n deps: true,\n prereqs: false,\n useStringArrays: true,\n }\n): Promise<boolean> {\n debugMessage(`cli.PolicyOps.exportPoliciesToFile: begin`);\n showSpinner(`Exporting all policies...`);\n try {\n let fileName = getTypedFilename(\n `all${titleCase(getRealmName(state.getRealm()))}Policies`,\n 'policy.authz'\n );\n if (file) {\n fileName = file;\n }\n const filePath = getFilePath(fileName, true);\n const exportData = await exportPolicies(options);\n saveJsonToFile(exportData, filePath, includeMeta);\n succeedSpinner(`Exported all policies to ${filePath}.`);\n debugMessage(`cli.PolicyOps.exportPoliciesToFile: end`);\n return true;\n } catch (error) {\n failSpinner(`Error exporting policies`);\n printError(error);\n }\n return false;\n}\n\n/**\n * Export policies to file\n * @param {string} policySetId policy set id/name\n * @param {string} file file name\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @param {PolicyExportOptions} options export options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportPoliciesByPolicySetToFile(\n policySetId: string,\n file: string,\n includeMeta: boolean = true,\n options: PolicyExportOptions = {\n deps: true,\n prereqs: false,\n useStringArrays: true,\n }\n): Promise<boolean> {\n debugMessage(`cli.PolicyOps.exportPoliciesToFile: begin`);\n showSpinner(`Exporting all policies...`);\n try {\n let fileName = getTypedFilename(\n `all${\n titleCase(getRealmName(state.getRealm())) + titleCase(policySetId)\n }Policies`,\n 'policy.authz'\n );\n if (file) {\n fileName = file;\n }\n const filePath = getFilePath(fileName, true);\n const exportData = await exportPoliciesByPolicySet(policySetId, options);\n saveJsonToFile(exportData, filePath, includeMeta);\n succeedSpinner(`Exported all policies to ${filePath}.`);\n debugMessage(`cli.PolicyOps.exportPoliciesToFile: end`);\n return true;\n } catch (error) {\n failSpinner(`Error exporting policies`);\n printError(error);\n }\n return false;\n}\n\n/**\n * Export all policies to separate files\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @param {PolicyExportOptions} options export options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportPoliciesToFiles(\n includeMeta: boolean = true,\n options: PolicyExportOptions = {\n deps: true,\n prereqs: false,\n useStringArrays: true,\n }\n): Promise<boolean> {\n debugMessage(`cli.PolicyOps.exportPoliciesToFiles: begin`);\n const errors = [];\n let indicatorId: string;\n try {\n const policies: PolicySkeleton[] = await readPolicies();\n indicatorId = createProgressIndicator(\n 'determinate',\n policies.length,\n 'Exporting policies...'\n );\n for (const policy of policies) {\n const file = getTypedFilename(policy._id, 'policy.authz');\n try {\n const exportData: PolicyExportInterface = await exportPolicy(\n policy._id,\n options\n );\n saveJsonToFile(exportData, getFilePath(file, true), includeMeta);\n updateProgressIndicator(indicatorId, `Exported ${policy._id}.`);\n } catch (error) {\n errors.push(error);\n }\n }\n if (errors.length > 0) {\n throw new FrodoError(`Error exporting policies`, errors);\n }\n stopProgressIndicator(indicatorId, `Export complete.`);\n debugMessage(`cli.PolicyOps.exportPoliciesToFiles: end`);\n return true;\n } catch (error) {\n stopProgressIndicator(indicatorId, `Error exporting policies`, 'fail');\n printError(error);\n }\n return false;\n}\n\n/**\n * Export all policies to separate files\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @param {PolicyExportOptions} options export options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportPoliciesByPolicySetToFiles(\n policySetId: string,\n includeMeta: boolean = true,\n options: PolicyExportOptions = {\n deps: true,\n prereqs: false,\n useStringArrays: true,\n }\n): Promise<boolean> {\n debugMessage(`cli.PolicyOps.exportPoliciesToFiles: begin`);\n const errors = [];\n let indicatorId: string;\n try {\n const policies: PolicySkeleton[] =\n await readPoliciesByPolicySet(policySetId);\n indicatorId = createProgressIndicator(\n 'determinate',\n policies.length,\n `Exporting policies in policy set ${policySetId}...`\n );\n for (const policy of policies) {\n const file = getTypedFilename(policy._id, 'policy.authz');\n try {\n const exportData: PolicyExportInterface = await exportPolicy(\n policy._id,\n options\n );\n saveJsonToFile(exportData, getFilePath(file, true), includeMeta);\n updateProgressIndicator(indicatorId, `Exported ${policy._id}.`);\n } catch (error) {\n errors.push(error);\n }\n }\n if (errors.length > 0) {\n throw new FrodoError(`Error exporting policies`, errors);\n }\n stopProgressIndicator(indicatorId, `Export complete.`);\n debugMessage(`cli.PolicyOps.exportPoliciesToFiles: end`);\n return true;\n } catch (error) {\n stopProgressIndicator(indicatorId, `Error exporting policies`, 'fail');\n printError(error);\n }\n return false;\n}\n\n/**\n * Import policy from file\n * @param {string} policyId policy id/name\n * @param {string} file file name\n * @param {PolicyImportOptions} options import options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importPolicyFromFile(\n policyId: string,\n file: string,\n options: PolicyImportOptions = { deps: true, prereqs: false }\n): Promise<boolean> {\n debugMessage(`cli.PolicyOps.importPolicyFromFile: begin`);\n showSpinner(`Importing ${policyId}...`);\n try {\n const data = fs.readFileSync(getFilePath(file), 'utf8');\n const fileData = JSON.parse(data);\n await importPolicy(policyId, fileData, options);\n succeedSpinner(`Imported ${policyId}.`);\n debugMessage(`cli.PolicyOps.importPolicyFromFile: end`);\n return true;\n } catch (error) {\n failSpinner(`Error importing ${policyId}`);\n printError(error);\n }\n return false;\n}\n\n/**\n * Import first policy from file\n * @param {string} file file name\n * @param {PolicyImportOptions} options import options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importFirstPolicyFromFile(\n file: string,\n options: PolicyImportOptions = { deps: true, prereqs: false }\n): Promise<boolean> {\n debugMessage(`cli.PolicySetOps.importFirstPolicyFromFile: begin`);\n const filePath = getFilePath(file);\n showSpinner(`Importing first policy from ${filePath}...`);\n try {\n const data = fs.readFileSync(filePath, 'utf8');\n const fileData = JSON.parse(data);\n const policy = await importFirstPolicy(fileData, options);\n succeedSpinner(\n `Imported first policy with id '${policy._id}' from ${filePath}.`\n );\n debugMessage(`cli.PolicySetOps.importFirstPolicyFromFile: end`);\n return true;\n } catch (error) {\n failSpinner(`Error importing first policy`);\n printError(error);\n }\n return false;\n}\n\n/**\n * Import policies from file\n * @param {string} file file name\n * @param {PolicyImportOptions} options import options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importPoliciesFromFile(\n file: string,\n options: PolicyImportOptions = { deps: true, prereqs: false }\n): Promise<boolean> {\n debugMessage(`cli.PolicyOps.importPoliciesFromFile: 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 importPolicies(fileData, options);\n succeedSpinner(\n `Imported ${filePath}${\n options.policySetName\n ? ' into policy set ' + options.policySetName\n : '.'\n }`\n );\n debugMessage(`cli.PolicyOps.importPoliciesFromFile: end`);\n return true;\n } catch (error) {\n failSpinner(\n `Error importing ${filePath}${\n options.policySetName\n ? ' into policy set ' + options.policySetName\n : '.'\n }`\n );\n printError(error);\n }\n return false;\n}\n\n/**\n * Import policies from files\n * @param {PolicyImportOptions} options import options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importPoliciesFromFiles(\n options: PolicyImportOptions = { deps: true, prereqs: false }\n): Promise<boolean> {\n const errors = [];\n let indicatorId: string;\n try {\n debugMessage(`cli.PolicyOps.importPoliciesFromFiles: begin`);\n const names = fs.readdirSync(getWorkingDirectory());\n const files = names\n .filter((name) => name.toLowerCase().endsWith('.policy.authz.json'))\n .map((name) => getFilePath(name));\n indicatorId = createProgressIndicator(\n 'determinate',\n files.length,\n 'Importing policies...'\n );\n let total = 0;\n for (const file of files) {\n try {\n const data = fs.readFileSync(file, 'utf8');\n const fileData: PolicyExportInterface = JSON.parse(data);\n const count = Object.keys(fileData.policyset).length;\n total += count;\n await importPolicies(fileData, options);\n updateProgressIndicator(\n indicatorId,\n `Imported ${count} policies from ${file}`\n );\n } catch (error) {\n errors.push(error);\n }\n }\n if (errors.length > 0) {\n throw new FrodoError(`Error importing policies`, errors);\n }\n stopProgressIndicator(\n indicatorId,\n `Finished importing ${total} policies from ${files.length} files.`\n );\n debugMessage(`cli.PolicyOps.importPoliciesFromFiles: end`);\n return true;\n } catch (error) {\n stopProgressIndicator(indicatorId, `Error importing policies`);\n printError(error);\n }\n return false;\n}\n"],"mappings":"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"}