@rockcarver/frodo-cli 1.0.1 → 2.0.0-10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (361) hide show
  1. package/.vscode/launch.json +15 -0
  2. package/CHANGELOG.md +49 -4
  3. package/esm/app.js +4 -4
  4. package/esm/app.js.map +1 -1
  5. package/esm/cli/FrodoCommand.js +13 -10
  6. package/esm/cli/FrodoCommand.js.map +1 -1
  7. package/esm/cli/_template/something-delete.js +2 -2
  8. package/esm/cli/_template/something-delete.js.map +1 -1
  9. package/esm/cli/_template/something-describe.js +2 -2
  10. package/esm/cli/_template/something-describe.js.map +1 -1
  11. package/esm/cli/_template/something-else-delete.js +2 -2
  12. package/esm/cli/_template/something-else-delete.js.map +1 -1
  13. package/esm/cli/_template/something-else-describe.js +2 -2
  14. package/esm/cli/_template/something-else-describe.js.map +1 -1
  15. package/esm/cli/_template/something-else-export.js +2 -2
  16. package/esm/cli/_template/something-else-export.js.map +1 -1
  17. package/esm/cli/_template/something-else-import.js +2 -2
  18. package/esm/cli/_template/something-else-import.js.map +1 -1
  19. package/esm/cli/_template/something-else-list.js +2 -2
  20. package/esm/cli/_template/something-else-list.js.map +1 -1
  21. package/esm/cli/_template/something-export.js +2 -2
  22. package/esm/cli/_template/something-export.js.map +1 -1
  23. package/esm/cli/_template/something-import.js +2 -2
  24. package/esm/cli/_template/something-import.js.map +1 -1
  25. package/esm/cli/_template/something-list.js +2 -2
  26. package/esm/cli/_template/something-list.js.map +1 -1
  27. package/esm/cli/_template/something-other-delete.js +2 -2
  28. package/esm/cli/_template/something-other-delete.js.map +1 -1
  29. package/esm/cli/_template/something-other-describe.js +2 -2
  30. package/esm/cli/_template/something-other-describe.js.map +1 -1
  31. package/esm/cli/_template/something-other-export.js +2 -2
  32. package/esm/cli/_template/something-other-export.js.map +1 -1
  33. package/esm/cli/_template/something-other-import.js +2 -2
  34. package/esm/cli/_template/something-other-import.js.map +1 -1
  35. package/esm/cli/_template/something-other-list.js +2 -2
  36. package/esm/cli/_template/something-other-list.js.map +1 -1
  37. package/esm/cli/admin/admin-add-autoid-static-user-mapping.js +3 -3
  38. package/esm/cli/admin/admin-add-autoid-static-user-mapping.js.map +1 -1
  39. package/esm/cli/admin/admin-create-oauth2-client-with-admin-privileges.js +5 -5
  40. package/esm/cli/admin/admin-create-oauth2-client-with-admin-privileges.js.map +1 -1
  41. package/esm/cli/admin/admin-federation-export.js +2 -2
  42. package/esm/cli/admin/admin-federation-export.js.map +1 -1
  43. package/esm/cli/admin/admin-federation-import.js +2 -2
  44. package/esm/cli/admin/admin-federation-import.js.map +1 -1
  45. package/esm/cli/admin/admin-federation-list.js +2 -2
  46. package/esm/cli/admin/admin-federation-list.js.map +1 -1
  47. package/esm/cli/admin/admin-get-access-token.js +6 -6
  48. package/esm/cli/admin/admin-get-access-token.js.map +1 -1
  49. package/esm/cli/admin/admin-grant-oauth2-client-admin-privileges.js +3 -3
  50. package/esm/cli/admin/admin-grant-oauth2-client-admin-privileges.js.map +1 -1
  51. package/esm/cli/admin/admin-hide-generic-extension-attributes.js +3 -3
  52. package/esm/cli/admin/admin-hide-generic-extension-attributes.js.map +1 -1
  53. package/esm/cli/admin/admin-list-oauth2-clients-with-admin-privileges.js +5 -5
  54. package/esm/cli/admin/admin-list-oauth2-clients-with-admin-privileges.js.map +1 -1
  55. package/esm/cli/admin/admin-list-oauth2-clients-with-custom-privileges.js +5 -5
  56. package/esm/cli/admin/admin-list-oauth2-clients-with-custom-privileges.js.map +1 -1
  57. package/esm/cli/admin/admin-list-static-user-mappings.js +3 -3
  58. package/esm/cli/admin/admin-list-static-user-mappings.js.map +1 -1
  59. package/esm/cli/admin/admin-remove-static-user-mapping.js +3 -3
  60. package/esm/cli/admin/admin-remove-static-user-mapping.js.map +1 -1
  61. package/esm/cli/admin/admin-repair-org-model.js +3 -3
  62. package/esm/cli/admin/admin-repair-org-model.js.map +1 -1
  63. package/esm/cli/admin/admin-revoke-oauth2-client-admin-privileges.js +3 -3
  64. package/esm/cli/admin/admin-revoke-oauth2-client-admin-privileges.js.map +1 -1
  65. package/esm/cli/admin/admin-show-generic-extension-attributes.js +5 -5
  66. package/esm/cli/admin/admin-show-generic-extension-attributes.js.map +1 -1
  67. package/esm/cli/agent/agent-delete.js +5 -5
  68. package/esm/cli/agent/agent-delete.js.map +1 -1
  69. package/esm/cli/agent/agent-describe.js +2 -2
  70. package/esm/cli/agent/agent-describe.js.map +1 -1
  71. package/esm/cli/agent/agent-export.js +2 -2
  72. package/esm/cli/agent/agent-export.js.map +1 -1
  73. package/esm/cli/agent/agent-gateway-delete.js +3 -3
  74. package/esm/cli/agent/agent-gateway-delete.js.map +1 -1
  75. package/esm/cli/agent/agent-gateway-describe.js +2 -2
  76. package/esm/cli/agent/agent-gateway-describe.js.map +1 -1
  77. package/esm/cli/agent/agent-gateway-export.js +2 -2
  78. package/esm/cli/agent/agent-gateway-export.js.map +1 -1
  79. package/esm/cli/agent/agent-gateway-import.js +2 -2
  80. package/esm/cli/agent/agent-gateway-import.js.map +1 -1
  81. package/esm/cli/agent/agent-gateway-list.js +2 -2
  82. package/esm/cli/agent/agent-gateway-list.js.map +1 -1
  83. package/esm/cli/agent/agent-import.js +2 -2
  84. package/esm/cli/agent/agent-import.js.map +1 -1
  85. package/esm/cli/agent/agent-java-delete.js +3 -3
  86. package/esm/cli/agent/agent-java-delete.js.map +1 -1
  87. package/esm/cli/agent/agent-java-describe.js +2 -2
  88. package/esm/cli/agent/agent-java-describe.js.map +1 -1
  89. package/esm/cli/agent/agent-java-export.js +2 -2
  90. package/esm/cli/agent/agent-java-export.js.map +1 -1
  91. package/esm/cli/agent/agent-java-import.js +2 -2
  92. package/esm/cli/agent/agent-java-import.js.map +1 -1
  93. package/esm/cli/agent/agent-java-list.js +2 -2
  94. package/esm/cli/agent/agent-java-list.js.map +1 -1
  95. package/esm/cli/agent/agent-list.js +2 -2
  96. package/esm/cli/agent/agent-list.js.map +1 -1
  97. package/esm/cli/agent/agent-web-delete.js +3 -3
  98. package/esm/cli/agent/agent-web-delete.js.map +1 -1
  99. package/esm/cli/agent/agent-web-describe.js +2 -2
  100. package/esm/cli/agent/agent-web-describe.js.map +1 -1
  101. package/esm/cli/agent/agent-web-export.js +2 -2
  102. package/esm/cli/agent/agent-web-export.js.map +1 -1
  103. package/esm/cli/agent/agent-web-import.js +2 -2
  104. package/esm/cli/agent/agent-web-import.js.map +1 -1
  105. package/esm/cli/agent/agent-web-list.js +2 -2
  106. package/esm/cli/agent/agent-web-list.js.map +1 -1
  107. package/esm/cli/app/app-delete.js +2 -2
  108. package/esm/cli/app/app-delete.js.map +1 -1
  109. package/esm/cli/app/app-describe.js +2 -2
  110. package/esm/cli/app/app-describe.js.map +1 -1
  111. package/esm/cli/app/app-export.js +2 -2
  112. package/esm/cli/app/app-export.js.map +1 -1
  113. package/esm/cli/app/app-import.js +2 -2
  114. package/esm/cli/app/app-import.js.map +1 -1
  115. package/esm/cli/app/app-list.js +3 -3
  116. package/esm/cli/app/app-list.js.map +1 -1
  117. package/esm/cli/authz/authz-policy-delete.js +2 -2
  118. package/esm/cli/authz/authz-policy-delete.js.map +1 -1
  119. package/esm/cli/authz/authz-policy-describe.js +2 -2
  120. package/esm/cli/authz/authz-policy-describe.js.map +1 -1
  121. package/esm/cli/authz/authz-policy-export.js +2 -2
  122. package/esm/cli/authz/authz-policy-export.js.map +1 -1
  123. package/esm/cli/authz/authz-policy-import.js +2 -2
  124. package/esm/cli/authz/authz-policy-import.js.map +1 -1
  125. package/esm/cli/authz/authz-policy-list.js +2 -2
  126. package/esm/cli/authz/authz-policy-list.js.map +1 -1
  127. package/esm/cli/authz/authz-set-delete.js +2 -2
  128. package/esm/cli/authz/authz-set-delete.js.map +1 -1
  129. package/esm/cli/authz/authz-set-describe.js +2 -2
  130. package/esm/cli/authz/authz-set-describe.js.map +1 -1
  131. package/esm/cli/authz/authz-set-export.js +2 -2
  132. package/esm/cli/authz/authz-set-export.js.map +1 -1
  133. package/esm/cli/authz/authz-set-import.js +2 -2
  134. package/esm/cli/authz/authz-set-import.js.map +1 -1
  135. package/esm/cli/authz/authz-set-list.js +2 -2
  136. package/esm/cli/authz/authz-set-list.js.map +1 -1
  137. package/esm/cli/authz/authz-type-delete.js +2 -2
  138. package/esm/cli/authz/authz-type-delete.js.map +1 -1
  139. package/esm/cli/authz/authz-type-describe.js +2 -2
  140. package/esm/cli/authz/authz-type-describe.js.map +1 -1
  141. package/esm/cli/authz/authz-type-export.js +2 -2
  142. package/esm/cli/authz/authz-type-export.js.map +1 -1
  143. package/esm/cli/authz/authz-type-import.js +2 -2
  144. package/esm/cli/authz/authz-type-import.js.map +1 -1
  145. package/esm/cli/authz/authz-type-list.js +2 -2
  146. package/esm/cli/authz/authz-type-list.js.map +1 -1
  147. package/esm/cli/conn/conn-delete.js +2 -5
  148. package/esm/cli/conn/conn-delete.js.map +1 -1
  149. package/esm/cli/conn/conn-describe.js +1 -4
  150. package/esm/cli/conn/conn-describe.js.map +1 -1
  151. package/esm/cli/conn/conn-list.js +1 -4
  152. package/esm/cli/conn/conn-list.js.map +1 -1
  153. package/esm/cli/conn/conn-save.js +13 -9
  154. package/esm/cli/conn/conn-save.js.map +1 -1
  155. package/esm/cli/email/email-template-export.js +2 -2
  156. package/esm/cli/email/email-template-export.js.map +1 -1
  157. package/esm/cli/email/email-template-import.js +2 -2
  158. package/esm/cli/email/email-template-import.js.map +1 -1
  159. package/esm/cli/email/email-template-list.js +2 -2
  160. package/esm/cli/email/email-template-list.js.map +1 -1
  161. package/esm/cli/esv/esv-apply.js +6 -6
  162. package/esm/cli/esv/esv-apply.js.map +1 -1
  163. package/esm/cli/esv/esv-secret-create.js +3 -5
  164. package/esm/cli/esv/esv-secret-create.js.map +1 -1
  165. package/esm/cli/esv/esv-secret-delete.js +5 -8
  166. package/esm/cli/esv/esv-secret-delete.js.map +1 -1
  167. package/esm/cli/esv/esv-secret-describe.js +3 -5
  168. package/esm/cli/esv/esv-secret-describe.js.map +1 -1
  169. package/esm/cli/esv/esv-secret-export.js +2 -2
  170. package/esm/cli/esv/esv-secret-export.js.map +1 -1
  171. package/esm/cli/esv/esv-secret-import.js +2 -2
  172. package/esm/cli/esv/esv-secret-import.js.map +1 -1
  173. package/esm/cli/esv/esv-secret-list.js +3 -5
  174. package/esm/cli/esv/esv-secret-list.js.map +1 -1
  175. package/esm/cli/esv/esv-secret-set.js +4 -6
  176. package/esm/cli/esv/esv-secret-set.js.map +1 -1
  177. package/esm/cli/esv/esv-secret-version-activate.js +3 -5
  178. package/esm/cli/esv/esv-secret-version-activate.js.map +1 -1
  179. package/esm/cli/esv/esv-secret-version-create.js +4 -6
  180. package/esm/cli/esv/esv-secret-version-create.js.map +1 -1
  181. package/esm/cli/esv/esv-secret-version-deactivate.js +3 -5
  182. package/esm/cli/esv/esv-secret-version-deactivate.js.map +1 -1
  183. package/esm/cli/esv/esv-secret-version-delete.js +4 -6
  184. package/esm/cli/esv/esv-secret-version-delete.js.map +1 -1
  185. package/esm/cli/esv/esv-secret-version-list.js +4 -6
  186. package/esm/cli/esv/esv-secret-version-list.js.map +1 -1
  187. package/esm/cli/esv/esv-variable-create.js +3 -5
  188. package/esm/cli/esv/esv-variable-create.js.map +1 -1
  189. package/esm/cli/esv/esv-variable-delete.js +5 -8
  190. package/esm/cli/esv/esv-variable-delete.js.map +1 -1
  191. package/esm/cli/esv/esv-variable-describe.js +3 -5
  192. package/esm/cli/esv/esv-variable-describe.js.map +1 -1
  193. package/esm/cli/esv/esv-variable-export.js +2 -2
  194. package/esm/cli/esv/esv-variable-export.js.map +1 -1
  195. package/esm/cli/esv/esv-variable-import.js +2 -2
  196. package/esm/cli/esv/esv-variable-import.js.map +1 -1
  197. package/esm/cli/esv/esv-variable-list.js +3 -5
  198. package/esm/cli/esv/esv-variable-list.js.map +1 -1
  199. package/esm/cli/esv/esv-variable-set.js +4 -7
  200. package/esm/cli/esv/esv-variable-set.js.map +1 -1
  201. package/esm/cli/idm/idm-count.js +2 -2
  202. package/esm/cli/idm/idm-count.js.map +1 -1
  203. package/esm/cli/idm/idm-export.js +2 -2
  204. package/esm/cli/idm/idm-export.js.map +1 -1
  205. package/esm/cli/idm/idm-import.js +2 -2
  206. package/esm/cli/idm/idm-import.js.map +1 -1
  207. package/esm/cli/idm/idm-list.js +2 -2
  208. package/esm/cli/idm/idm-list.js.map +1 -1
  209. package/esm/cli/idp/idp-export.js +2 -2
  210. package/esm/cli/idp/idp-export.js.map +1 -1
  211. package/esm/cli/idp/idp-import.js +2 -2
  212. package/esm/cli/idp/idp-import.js.map +1 -1
  213. package/esm/cli/idp/idp-list.js +2 -2
  214. package/esm/cli/idp/idp-list.js.map +1 -1
  215. package/esm/cli/info/info.js +8 -8
  216. package/esm/cli/info/info.js.map +1 -1
  217. package/esm/cli/journey/journey-delete.js +4 -8
  218. package/esm/cli/journey/journey-delete.js.map +1 -1
  219. package/esm/cli/journey/journey-describe.js +5 -5
  220. package/esm/cli/journey/journey-describe.js.map +1 -1
  221. package/esm/cli/journey/journey-disable.js +3 -3
  222. package/esm/cli/journey/journey-disable.js.map +1 -1
  223. package/esm/cli/journey/journey-enable.js +3 -3
  224. package/esm/cli/journey/journey-enable.js.map +1 -1
  225. package/esm/cli/journey/journey-export.js +2 -2
  226. package/esm/cli/journey/journey-export.js.map +1 -1
  227. package/esm/cli/journey/journey-import.js +2 -2
  228. package/esm/cli/journey/journey-import.js.map +1 -1
  229. package/esm/cli/journey/journey-list.js +2 -2
  230. package/esm/cli/journey/journey-list.js.map +1 -1
  231. package/esm/cli/journey/journey-prune.js +3 -3
  232. package/esm/cli/journey/journey-prune.js.map +1 -1
  233. package/esm/cli/{logging/logs-fetch.js → log/log-fetch.js} +9 -9
  234. package/esm/cli/log/log-fetch.js.map +1 -0
  235. package/esm/cli/log/log-key-delete.js +35 -0
  236. package/esm/cli/log/log-key-delete.js.map +1 -0
  237. package/esm/cli/log/log-key-describe.js +22 -0
  238. package/esm/cli/log/log-key-describe.js.map +1 -0
  239. package/esm/cli/log/log-key-list.js +26 -0
  240. package/esm/cli/log/log-key-list.js.map +1 -0
  241. package/esm/cli/log/log-key.js +8 -0
  242. package/esm/cli/log/log-key.js.map +1 -0
  243. package/esm/cli/{logging/logs-list.js → log/log-list.js} +8 -8
  244. package/esm/cli/log/log-list.js.map +1 -0
  245. package/esm/cli/{logging/logs-tail.js → log/log-tail.js} +9 -9
  246. package/esm/cli/log/log-tail.js.map +1 -0
  247. package/esm/cli/{logging/logs.js → log/log.js} +5 -2
  248. package/esm/cli/log/log.js.map +1 -0
  249. package/esm/cli/realm/realm-add-custom-domain.js +3 -5
  250. package/esm/cli/realm/realm-add-custom-domain.js.map +1 -1
  251. package/esm/cli/realm/realm-describe.js +4 -9
  252. package/esm/cli/realm/realm-describe.js.map +1 -1
  253. package/esm/cli/realm/realm-list.js +3 -5
  254. package/esm/cli/realm/realm-list.js.map +1 -1
  255. package/esm/cli/realm/realm-remove-custom-domain.js +3 -3
  256. package/esm/cli/realm/realm-remove-custom-domain.js.map +1 -1
  257. package/esm/cli/saml/saml-cot-export.js +9 -10
  258. package/esm/cli/saml/saml-cot-export.js.map +1 -1
  259. package/esm/cli/saml/saml-cot-import.js +12 -13
  260. package/esm/cli/saml/saml-cot-import.js.map +1 -1
  261. package/esm/cli/saml/saml-cot-list.js +5 -6
  262. package/esm/cli/saml/saml-cot-list.js.map +1 -1
  263. package/esm/cli/saml/saml-delete.js +3 -3
  264. package/esm/cli/saml/saml-delete.js.map +1 -1
  265. package/esm/cli/saml/saml-describe.js +2 -2
  266. package/esm/cli/saml/saml-describe.js.map +1 -1
  267. package/esm/cli/saml/saml-export.js +10 -25
  268. package/esm/cli/saml/saml-export.js.map +1 -1
  269. package/esm/cli/saml/saml-import.js +12 -30
  270. package/esm/cli/saml/saml-import.js.map +1 -1
  271. package/esm/cli/saml/saml-list.js +6 -11
  272. package/esm/cli/saml/saml-list.js.map +1 -1
  273. package/esm/cli/saml/saml-metadata-export.js +2 -2
  274. package/esm/cli/saml/saml-metadata-export.js.map +1 -1
  275. package/esm/cli/script/script-delete.js +2 -2
  276. package/esm/cli/script/script-delete.js.map +1 -1
  277. package/esm/cli/script/script-describe.js +2 -2
  278. package/esm/cli/script/script-describe.js.map +1 -1
  279. package/esm/cli/script/script-export.js +2 -2
  280. package/esm/cli/script/script-export.js.map +1 -1
  281. package/esm/cli/script/script-import.js +4 -3
  282. package/esm/cli/script/script-import.js.map +1 -1
  283. package/esm/cli/script/script-list.js +4 -3
  284. package/esm/cli/script/script-list.js.map +1 -1
  285. package/esm/cli/service/service-delete.js +2 -2
  286. package/esm/cli/service/service-delete.js.map +1 -1
  287. package/esm/cli/service/service-export.js +2 -2
  288. package/esm/cli/service/service-export.js.map +1 -1
  289. package/esm/cli/service/service-import.js +2 -2
  290. package/esm/cli/service/service-import.js.map +1 -1
  291. package/esm/cli/service/service-list.js +2 -2
  292. package/esm/cli/service/service-list.js.map +1 -1
  293. package/esm/cli/theme/theme-delete.js +2 -2
  294. package/esm/cli/theme/theme-delete.js.map +1 -1
  295. package/esm/cli/theme/theme-export.js +2 -2
  296. package/esm/cli/theme/theme-export.js.map +1 -1
  297. package/esm/cli/theme/theme-import.js +2 -2
  298. package/esm/cli/theme/theme-import.js.map +1 -1
  299. package/esm/cli/theme/theme-list.js +2 -2
  300. package/esm/cli/theme/theme-list.js.map +1 -1
  301. package/esm/help/SampleData.js +7 -0
  302. package/esm/help/SampleData.js.map +1 -0
  303. package/esm/launch.js +4 -3
  304. package/esm/launch.js.map +1 -1
  305. package/esm/ops/AdminFederationOps.js +4 -4
  306. package/esm/ops/AdminFederationOps.js.map +1 -1
  307. package/esm/ops/AgentOps.js +26 -33
  308. package/esm/ops/AgentOps.js.map +1 -1
  309. package/esm/ops/CirclesOfTrustOps.js +228 -1
  310. package/esm/ops/CirclesOfTrustOps.js.map +1 -1
  311. package/esm/ops/ConnectionProfileOps.js +101 -5
  312. package/esm/ops/ConnectionProfileOps.js.map +1 -1
  313. package/esm/ops/EmailTemplateOps.js +7 -8
  314. package/esm/ops/EmailTemplateOps.js.map +1 -1
  315. package/esm/ops/IdmOps.js +16 -17
  316. package/esm/ops/IdmOps.js.map +1 -1
  317. package/esm/ops/IdpOps.js +25 -13
  318. package/esm/ops/IdpOps.js.map +1 -1
  319. package/esm/ops/JourneyOps.js +40 -40
  320. package/esm/ops/JourneyOps.js.map +1 -1
  321. package/esm/ops/LogOps.js +85 -31
  322. package/esm/ops/LogOps.js.map +1 -1
  323. package/esm/ops/NodeOps.js +14 -11
  324. package/esm/ops/NodeOps.js.map +1 -1
  325. package/esm/ops/OAuth2ClientOps.js +5 -8
  326. package/esm/ops/OAuth2ClientOps.js.map +1 -1
  327. package/esm/ops/OrganizationOps.js +34 -0
  328. package/esm/ops/OrganizationOps.js.map +1 -0
  329. package/esm/ops/PolicyOps.js +9 -10
  330. package/esm/ops/PolicyOps.js.map +1 -1
  331. package/esm/ops/PolicySetOps.js +11 -12
  332. package/esm/ops/PolicySetOps.js.map +1 -1
  333. package/esm/ops/RealmOps.js +116 -0
  334. package/esm/ops/RealmOps.js.map +1 -0
  335. package/esm/ops/ResourceTypeOps.js +8 -10
  336. package/esm/ops/ResourceTypeOps.js.map +1 -1
  337. package/esm/ops/Saml2Ops.js +22 -223
  338. package/esm/ops/Saml2Ops.js.map +1 -1
  339. package/esm/ops/ScriptOps.js +6 -5
  340. package/esm/ops/ScriptOps.js.map +1 -1
  341. package/esm/ops/SecretsOps.js +237 -0
  342. package/esm/ops/SecretsOps.js.map +1 -0
  343. package/esm/ops/ServiceOps.js +19 -19
  344. package/esm/ops/ServiceOps.js.map +1 -1
  345. package/esm/ops/ThemeOps.js +8 -7
  346. package/esm/ops/ThemeOps.js.map +1 -1
  347. package/esm/ops/VariablesOps.js +144 -0
  348. package/esm/ops/VariablesOps.js.map +1 -0
  349. package/esm/utils/Config.js +2 -2
  350. package/esm/utils/Config.js.map +1 -1
  351. package/esm/utils/Console.js +2 -2
  352. package/esm/utils/Console.js.map +1 -1
  353. package/esm/utils/ExportImportUtils.js +3 -2
  354. package/esm/utils/ExportImportUtils.js.map +1 -1
  355. package/esm/utils/Version.js +7 -3
  356. package/esm/utils/Version.js.map +1 -1
  357. package/package.json +2 -2
  358. package/esm/cli/logging/logs-fetch.js.map +0 -1
  359. package/esm/cli/logging/logs-list.js.map +0 -1
  360. package/esm/cli/logging/logs-tail.js.map +0 -1
  361. package/esm/cli/logging/logs.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ConnectionProfileOps.js","names":["fs","Authenticate","state","failSpinner","showSpinner","succeedSpinner","getAccessTokenForServiceAccount","addExistingServiceAccount","serviceAccountId","privateKeyFile","validate","data","readFileSync","jwk","JSON","parse","toString","token","default","session","setServiceAccountId","setServiceAccountJwk","err"],"sources":["../../src/ops/ConnectionProfileOps.ts"],"sourcesContent":["import fs from 'fs';\nimport { Authenticate, state } from '@rockcarver/frodo-lib';\nimport { failSpinner, showSpinner, succeedSpinner } from '../utils/Console';\n\nconst { getAccessTokenForServiceAccount } = Authenticate;\n\nexport async function addExistingServiceAccount(\n serviceAccountId: string,\n privateKeyFile: string,\n validate: boolean\n): Promise<boolean> {\n try {\n const data = fs.readFileSync(privateKeyFile);\n const jwk = JSON.parse(data.toString());\n if (validate) {\n showSpinner(`Validating service account ${serviceAccountId}...`);\n const token = await getAccessTokenForServiceAccount(\n serviceAccountId,\n jwk\n );\n if (token === null) {\n failSpinner(`Failed to validate service account ${serviceAccountId}.`);\n return false;\n } else {\n succeedSpinner(\n `Successfully validated service account ${serviceAccountId}.`\n );\n }\n }\n state.default.session.setServiceAccountId(serviceAccountId);\n state.default.session.setServiceAccountJwk(jwk);\n return true;\n } catch (err) {\n failSpinner(\n `Failed to validate service account ${serviceAccountId}: ${err}.`\n );\n }\n return false;\n}\n"],"mappings":"AAAA,OAAOA,EAAE,MAAM,IAAI;AACnB,SAASC,YAAY,EAAEC,KAAK,QAAQ,uBAAuB;AAC3D,SAASC,WAAW,EAAEC,WAAW,EAAEC,cAAc,QAAQ,kBAAkB;AAE3E,MAAM;EAAEC;AAAgC,CAAC,GAAGL,YAAY;AAExD,OAAO,eAAeM,yBAAyBA,CAC7CC,gBAAwB,EACxBC,cAAsB,EACtBC,QAAiB,EACC;EAClB,IAAI;IACF,MAAMC,IAAI,GAAGX,EAAE,CAACY,YAAY,CAACH,cAAc,CAAC;IAC5C,MAAMI,GAAG,GAAGC,IAAI,CAACC,KAAK,CAACJ,IAAI,CAACK,QAAQ,CAAC,CAAC,CAAC;IACvC,IAAIN,QAAQ,EAAE;MACZN,WAAW,CAAE,8BAA6BI,gBAAiB,KAAI,CAAC;MAChE,MAAMS,KAAK,GAAG,MAAMX,+BAA+B,CACjDE,gBAAgB,EAChBK,GACF,CAAC;MACD,IAAII,KAAK,KAAK,IAAI,EAAE;QAClBd,WAAW,CAAE,sCAAqCK,gBAAiB,GAAE,CAAC;QACtE,OAAO,KAAK;MACd,CAAC,MAAM;QACLH,cAAc,CACX,0CAAyCG,gBAAiB,GAC7D,CAAC;MACH;IACF;IACAN,KAAK,CAACgB,OAAO,CAACC,OAAO,CAACC,mBAAmB,CAACZ,gBAAgB,CAAC;IAC3DN,KAAK,CAACgB,OAAO,CAACC,OAAO,CAACE,oBAAoB,CAACR,GAAG,CAAC;IAC/C,OAAO,IAAI;EACb,CAAC,CAAC,OAAOS,GAAG,EAAE;IACZnB,WAAW,CACR,sCAAqCK,gBAAiB,KAAIc,GAAI,GACjE,CAAC;EACH;EACA,OAAO,KAAK;AACd"}
1
+ {"version":3,"file":"ConnectionProfileOps.js","names":["fs","frodo","state","createObjectTable","createTable","debugMessage","failSpinner","printMessage","showSpinner","succeedSpinner","getAccessTokenForServiceAccount","login","getConnectionProfilesPath","getConnectionProfileByHost","conn","listConnectionProfiles","long","filename","data","readFileSync","connectionsData","JSON","parse","Object","keys","length","table","forEach","c","push","svcacctName","svcacctId","username","logApiKey","toString","e","message","describeConnectionProfile","host","showSecrets","profile","present","jwk","svcacctJwk","password","logApiSecret","authenticationService","keyMap","tenant","authenticationHeaderOverrides","stringify","addExistingServiceAccount","serviceAccountId","privateKeyFile","validate","token","setServiceAccountId","setServiceAccountJwk","err"],"sources":["../../src/ops/ConnectionProfileOps.ts"],"sourcesContent":["import fs from 'fs';\nimport { frodo, state } from '@rockcarver/frodo-lib';\nimport {\n createObjectTable,\n createTable,\n debugMessage,\n failSpinner,\n printMessage,\n showSpinner,\n succeedSpinner,\n} from '../utils/Console';\n\nconst { getAccessTokenForServiceAccount } = frodo.login;\nconst { getConnectionProfilesPath, getConnectionProfileByHost } = frodo.conn;\n\n/**\n * List connection profiles\n * @param {boolean} long Long list format with details\n * @param {State} state library state\n */\nexport function listConnectionProfiles(long = false) {\n const filename = getConnectionProfilesPath();\n try {\n const data = fs.readFileSync(filename, 'utf8');\n const connectionsData = JSON.parse(data);\n if (Object.keys(connectionsData).length < 1) {\n printMessage(`No connections defined yet in ${filename}`, 'info');\n } else {\n if (long) {\n const table = createTable([\n 'Host',\n 'Service Account',\n 'Username',\n 'Log API Key',\n ]);\n Object.keys(connectionsData).forEach((c) => {\n table.push([\n c,\n connectionsData[c].svcacctName || connectionsData[c].svcacctId,\n connectionsData[c].username,\n connectionsData[c].logApiKey,\n ]);\n });\n printMessage(table.toString(), 'data');\n } else {\n Object.keys(connectionsData).forEach((c) => {\n printMessage(`${c}`, 'data');\n });\n // getUniqueNames(5, Object.keys(connectionsData));\n }\n printMessage(\n 'Any unique substring of a saved host can be used as the value for host parameter in all commands',\n 'info'\n );\n }\n } catch (e) {\n printMessage(`No connections found in ${filename} (${e.message})`, 'error');\n }\n}\n\n/**\n * Describe connection profile\n * @param {string} host Host URL or unique substring\n * @param {boolean} showSecrets Whether secrets should be shown in clear text or not\n */\nexport async function describeConnectionProfile(\n host: string,\n showSecrets: boolean\n) {\n debugMessage(`ConnectionProfileOps.describeConnectionProfile: start`);\n const profile = await getConnectionProfileByHost(host);\n if (profile) {\n debugMessage(profile);\n const present = '[present]';\n const jwk = profile.svcacctJwk;\n if (!showSecrets) {\n if (profile.password) profile.password = present;\n if (profile.logApiSecret) profile.logApiSecret = present;\n if (profile.svcacctJwk) (profile as unknown)['svcacctJwk'] = present;\n }\n if (!profile.username) {\n delete profile.username;\n delete profile.password;\n }\n if (!profile.logApiKey) {\n delete profile.logApiKey;\n delete profile.logApiSecret;\n }\n if (!profile.svcacctId) {\n delete profile.svcacctId;\n delete profile.svcacctJwk;\n delete profile.svcacctName;\n }\n if (showSecrets && jwk) {\n (profile as unknown)['svcacctJwk'] = 'see below';\n }\n if (!profile.authenticationService) {\n delete profile.authenticationService;\n }\n const keyMap = {\n tenant: 'Host',\n username: 'Username',\n password: 'Password',\n logApiKey: 'Log API Key',\n logApiSecret: 'Log API Secret',\n authenticationService: 'Authentication Service',\n authenticationHeaderOverrides: 'Authentication Header Overrides',\n svcacctName: 'Service Account Name',\n svcacctId: 'Service Account Id',\n svcacctJwk: 'Service Account JWK',\n };\n const table = createObjectTable(profile, keyMap);\n printMessage(table.toString(), 'data');\n if (showSecrets && jwk) {\n printMessage(JSON.stringify(jwk), 'data');\n }\n } else {\n printMessage(`No connection profile ${host} found`);\n }\n debugMessage(`ConnectionProfileOps.describeConnectionProfile: end`);\n}\n\nexport async function addExistingServiceAccount(\n serviceAccountId: string,\n privateKeyFile: string,\n validate: boolean\n): Promise<boolean> {\n try {\n const data = fs.readFileSync(privateKeyFile);\n const jwk = JSON.parse(data.toString());\n if (validate) {\n showSpinner(`Validating service account ${serviceAccountId}...`);\n const token = await getAccessTokenForServiceAccount(\n serviceAccountId,\n jwk\n );\n if (token === null) {\n failSpinner(`Failed to validate service account ${serviceAccountId}.`);\n return false;\n } else {\n succeedSpinner(\n `Successfully validated service account ${serviceAccountId}.`\n );\n }\n }\n state.setServiceAccountId(serviceAccountId);\n state.setServiceAccountJwk(jwk);\n return true;\n } catch (err) {\n failSpinner(\n `Failed to validate service account ${serviceAccountId}: ${err}.`\n );\n }\n return false;\n}\n"],"mappings":"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"}
@@ -1,20 +1,20 @@
1
+ import { frodo } from '@rockcarver/frodo-lib';
1
2
  import fs from 'fs';
2
- import { EmailTemplate, ExportImportUtils } from '@rockcarver/frodo-lib';
3
3
  import { getTypedFilename, saveJsonToFile } from '../utils/ExportImportUtils';
4
4
  import { createProgressIndicator, updateProgressIndicator, stopProgressIndicator, printMessage, createTable, showSpinner, succeedSpinner, failSpinner, debugMessage } from '../utils/Console';
5
5
  import wordwrap from './utils/Wordwrap';
6
6
  import path from 'path';
7
7
  import { cloneDeep } from './utils/OpsUtils';
8
- const EMAIL_TEMPLATE_FILE_TYPE = 'template.email';
8
+ const {
9
+ validateImport
10
+ } = frodo.utils.impex;
9
11
  const {
10
12
  EMAIL_TEMPLATE_TYPE,
11
- getEmailTemplate,
12
13
  getEmailTemplates,
14
+ getEmailTemplate,
13
15
  putEmailTemplate
14
- } = EmailTemplate;
15
- const {
16
- validateImport
17
- } = ExportImportUtils;
16
+ } = frodo.email.template;
17
+ const EMAIL_TEMPLATE_FILE_TYPE = 'template.email';
18
18
  const regexEmailTemplateType = new RegExp(`${EMAIL_TEMPLATE_TYPE}/`, 'g');
19
19
 
20
20
  // use a function vs a template variable to avoid problems in loops
@@ -219,7 +219,6 @@ export async function importEmailTemplatesFromFile(file) {
219
219
  if ({}.hasOwnProperty.call(fileData.emailTemplate, id)) {
220
220
  const templateId = id.replace(regexEmailTemplateType, '');
221
221
  try {
222
- // eslint-disable-next-line no-await-in-loop
223
222
  await putEmailTemplate(templateId, fileData.emailTemplate[templateId]);
224
223
  updateProgressIndicator(`Imported ${templateId}`);
225
224
  } catch (putEmailTemplateError) {
@@ -1 +1 @@
1
- {"version":3,"file":"EmailTemplateOps.js","names":["fs","EmailTemplate","ExportImportUtils","getTypedFilename","saveJsonToFile","createProgressIndicator","updateProgressIndicator","stopProgressIndicator","printMessage","createTable","showSpinner","succeedSpinner","failSpinner","debugMessage","wordwrap","path","cloneDeep","EMAIL_TEMPLATE_FILE_TYPE","EMAIL_TEMPLATE_TYPE","getEmailTemplate","getEmailTemplates","putEmailTemplate","validateImport","regexEmailTemplateType","RegExp","getFileDataTemplate","meta","emailTemplate","getOneLineDescription","templateObj","description","_id","split","displayName","defaultLocale","subject","Object","values","getTableHeaderMd","markdown","getTableRowMd","templateId","replace","locales","keys","length","filter","locale","join","row","name","listEmailTemplates","long","emailTemplates","result","error","message","sort","a","b","localeCompare","entries","table","push","enabled","from","toString","exportEmailTemplateToFile","file","fileName","templateData","fileData","err","exportEmailTemplatesToFile","response","templates","resultCount","template","exportEmailTemplatesToFiles","importEmailTemplateFromFile","raw","replaceAll","readFile","data","JSON","parse","emailTemplateData","s2sConvert","putEmailTemplateError","importEmailTemplatesFromFile","id","hasOwnProperty","call","getEmailTemplateIdFromFile","basename","substring","indexOf","html","convertedData","importEmailTemplatesFromFiles","names","readdirSync","jsonFiles","startsWith","endsWith","toLowerCase","total","totalErrors","readFileSync","errors","_putEmailTemplateErro","importFirstEmailTemplateFromFile","_putEmailTemplateErro2","_putEmailTemplateErro3"],"sources":["../../src/ops/EmailTemplateOps.ts"],"sourcesContent":["import fs from 'fs';\nimport { EmailTemplateSkeleton } from '@rockcarver/frodo-lib/types/api/ApiTypes';\nimport { EmailTemplate, ExportImportUtils } from '@rockcarver/frodo-lib';\nimport { getTypedFilename, saveJsonToFile } from '../utils/ExportImportUtils';\nimport {\n createProgressIndicator,\n updateProgressIndicator,\n stopProgressIndicator,\n printMessage,\n createTable,\n showSpinner,\n succeedSpinner,\n failSpinner,\n debugMessage,\n} from '../utils/Console';\nimport wordwrap from './utils/Wordwrap';\nimport path from 'path';\nimport { cloneDeep } from './utils/OpsUtils';\n\nconst EMAIL_TEMPLATE_FILE_TYPE = 'template.email';\nconst {\n EMAIL_TEMPLATE_TYPE,\n getEmailTemplate,\n getEmailTemplates,\n putEmailTemplate,\n} = EmailTemplate;\nconst { validateImport } = ExportImportUtils;\n\nconst regexEmailTemplateType = new RegExp(`${EMAIL_TEMPLATE_TYPE}/`, 'g');\n\n// use a function vs a template variable to avoid problems in loops\nfunction getFileDataTemplate() {\n return {\n meta: {},\n emailTemplate: {},\n };\n}\n\n/**\n * Get a one-line description of the email template\n * @param {EmailTemplateSkeleton} templateObj email template object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescription(\n templateObj: EmailTemplateSkeleton\n): string {\n const description = `[${templateObj._id.split('/')[1]['brightCyan']}] ${\n templateObj.displayName ? templateObj.displayName : ''\n } - ${\n templateObj.defaultLocale\n ? templateObj.subject[templateObj.defaultLocale]\n : Object.values(templateObj.subject)[0]\n }`;\n return description;\n}\n\n/**\n * Get markdown table header\n * @returns {string} markdown table header\n */\nexport function getTableHeaderMd(): string {\n let markdown = '';\n markdown += '| Display Name | Locale(s) | Subject | Id |\\n';\n markdown += '| ------------ | --------- | ------- | ---|';\n return markdown;\n}\n\n/**\n * Get a table-row of the email template in markdown\n * @param {EmailTemplateSkeleton} templateObj email template object to describe\n * @returns {string} a table-row of the email template in markdown\n */\nexport function getTableRowMd(templateObj: EmailTemplateSkeleton): string {\n const templateId = templateObj._id.replace(`${EMAIL_TEMPLATE_TYPE}/`, '');\n const locales = `${templateObj.defaultLocale}${\n Object.keys(templateObj.subject).length > 1\n ? ` (${Object.keys(templateObj.subject)\n .filter((locale) => locale !== templateObj.defaultLocale)\n .join(',')})`\n : ''\n }`;\n const row = `| ${\n templateObj.name ? templateObj.name : templateId\n } | ${locales} | ${\n templateObj.subject[templateObj.defaultLocale]\n } | \\`${templateId}\\` |`;\n return row;\n}\n\n/**\n * List email templates\n * @param {boolean} long Long list format with details\n * @return {Promise<unknown[]>} a promise that resolves to an array of email template objects\n */\nexport async function listEmailTemplates(long = false): Promise<unknown[]> {\n let emailTemplates = [];\n try {\n emailTemplates = (await getEmailTemplates()).result;\n } catch (error) {\n printMessage(`Error retrieving email templates: ${error.message}`, 'error');\n }\n emailTemplates.sort((a, b) => a._id.localeCompare(b._id));\n if (!long) {\n for (const [, emailTemplate] of emailTemplates.entries()) {\n printMessage(\n `${emailTemplate._id.replace(`${EMAIL_TEMPLATE_TYPE}/`, '')}`,\n 'data'\n );\n }\n } else {\n const table = createTable([\n 'Id'['brightCyan'],\n 'Name'['brightCyan'],\n 'Status'['brightCyan'],\n 'Locale(s)'['brightCyan'],\n 'From'['brightCyan'],\n 'Subject'['brightCyan'],\n ]);\n for (const emailTemplate of emailTemplates) {\n table.push([\n // Id\n `${emailTemplate._id.replace(`${EMAIL_TEMPLATE_TYPE}/`, '')}`,\n // Name\n `${emailTemplate.displayName ? emailTemplate.displayName : ''}`,\n // Status\n emailTemplate.enabled === false\n ? 'disabled'['brightRed']\n : 'enabled'['brightGreen'],\n // Locale(s)\n `${emailTemplate.defaultLocale}${\n Object.keys(emailTemplate.subject).length > 1\n ? ` (${Object.keys(emailTemplate.subject)\n .filter((locale) => locale !== emailTemplate.defaultLocale)\n .join(',')})`\n : ''\n }`,\n // From\n `${emailTemplate.from ? emailTemplate.from : ''}`,\n // Subject\n wordwrap(emailTemplate.subject[emailTemplate.defaultLocale], 40),\n ]);\n }\n printMessage(table.toString(), 'data');\n }\n return emailTemplates;\n}\n\n/**\n * Export single email template to a file\n * @param {string} templateId email template id to export\n * @param {string} file filename where to export the template data\n */\nexport async function exportEmailTemplateToFile(\n templateId: string,\n file: string\n) {\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(templateId, EMAIL_TEMPLATE_FILE_TYPE);\n }\n createProgressIndicator('determinate', 1, `Exporting ${templateId}`);\n try {\n const templateData = await getEmailTemplate(templateId);\n updateProgressIndicator(`Writing file ${fileName}`);\n const fileData = getFileDataTemplate();\n fileData.emailTemplate[templateId] = templateData;\n saveJsonToFile(fileData, fileName);\n stopProgressIndicator(\n `Exported ${templateId['brightCyan']} to ${fileName['brightCyan']}.`\n );\n } catch (err) {\n stopProgressIndicator(`${err}`);\n printMessage(err, 'error');\n }\n}\n\n/**\n * Export all email templates to file\n * @param {String} file optional filename\n */\nexport async function exportEmailTemplatesToFile(file) {\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(`allEmailTemplates`, EMAIL_TEMPLATE_FILE_TYPE);\n }\n try {\n const fileData = getFileDataTemplate();\n const response = await getEmailTemplates();\n const templates = response.result;\n createProgressIndicator(\n 'determinate',\n response.resultCount,\n 'Exporting email templates'\n );\n for (const template of templates) {\n const templateId = template._id.replace(`${EMAIL_TEMPLATE_TYPE}/`, '');\n updateProgressIndicator(`Exporting ${templateId}`);\n fileData.emailTemplate[templateId] = template;\n }\n saveJsonToFile(fileData, fileName);\n stopProgressIndicator(\n `${response.resultCount} templates exported to ${fileName}.`\n );\n } catch (err) {\n stopProgressIndicator(`${err}`);\n printMessage(err, 'error');\n }\n}\n\n/**\n * Export all email templates to separate files\n */\nexport async function exportEmailTemplatesToFiles() {\n try {\n const response = await getEmailTemplates();\n const templates = response.result;\n createProgressIndicator(\n 'determinate',\n response.resultCount,\n 'Exporting email templates'\n );\n for (const template of templates) {\n const templateId = template._id.replace(`${EMAIL_TEMPLATE_TYPE}/`, '');\n const fileName = getTypedFilename(templateId, EMAIL_TEMPLATE_FILE_TYPE);\n const fileData = getFileDataTemplate();\n updateProgressIndicator(`Exporting ${templateId}`);\n fileData.emailTemplate[templateId] = template;\n saveJsonToFile(fileData, fileName);\n }\n stopProgressIndicator(`${response.resultCount} templates exported.`);\n } catch (err) {\n stopProgressIndicator(`${err}`);\n printMessage(err, 'error');\n }\n}\n\n/**\n * Import email template by id from file\n * @param {string} templateId email template id\n * @param {string} file optional filename\n * @param {boolean} raw import raw data file lacking frodo export envelop\n */\nexport async function importEmailTemplateFromFile(\n templateId: string,\n file: string,\n raw = false\n) {\n // eslint-disable-next-line no-param-reassign\n templateId = templateId.replaceAll(`${EMAIL_TEMPLATE_TYPE}/`, '');\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data);\n if (raw || validateImport(fileData.meta)) {\n createProgressIndicator('determinate', 1, `Importing ${templateId}`);\n if (\n fileData.emailTemplate[templateId] ||\n (raw && fileData._id === templateId)\n ) {\n try {\n const emailTemplateData = raw\n ? s2sConvert(fileData)\n : fileData.emailTemplate[templateId];\n await putEmailTemplate(templateId, emailTemplateData);\n updateProgressIndicator(`Importing ${templateId}`);\n stopProgressIndicator(`Imported ${templateId}`);\n } catch (putEmailTemplateError) {\n stopProgressIndicator(`${putEmailTemplateError}`);\n printMessage(putEmailTemplateError, 'error');\n }\n } else {\n stopProgressIndicator(\n `Email template ${templateId} not found in ${file}!`\n );\n printMessage(\n `Email template ${templateId} not found in ${file}!`,\n 'error'\n );\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Import all email templates from file\n * @param {string} file optional filename\n */\nexport async function importEmailTemplatesFromFile(file: string) {\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n createProgressIndicator(\n 'determinate',\n Object.keys(fileData.emailTemplate).length,\n `Importing email templates`\n );\n for (const id in fileData.emailTemplate) {\n if ({}.hasOwnProperty.call(fileData.emailTemplate, id)) {\n const templateId = id.replace(regexEmailTemplateType, '');\n try {\n // eslint-disable-next-line no-await-in-loop\n await putEmailTemplate(\n templateId,\n fileData.emailTemplate[templateId]\n );\n updateProgressIndicator(`Imported ${templateId}`);\n } catch (putEmailTemplateError) {\n printMessage(`\\nError importing ${templateId}`, 'error');\n printMessage(putEmailTemplateError.response.data, 'error');\n }\n }\n }\n stopProgressIndicator(`Done.`);\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Helper function to get email template id from file name\n * @param {string} file file name\n * @returns {string} email template id/name\n */\nfunction getEmailTemplateIdFromFile(file: string) {\n debugMessage(`cli.EmailTemplateOps.getEmailTemplateIdFromFile: file=${file}`);\n const fileName = path.basename(file);\n const templateId = fileName.substring(14, fileName.indexOf('.'));\n debugMessage(\n `cli.EmailTemplateOps.getEmailTemplateIdFromFile: templateId=${templateId}`\n );\n return templateId;\n}\n\n/**\n * Convert template for s2s purposes (software-to-saas migration)\n * @param {EmailTemplateSkeleton} templateData template object\n * @returns {EmailTemplateSkeleton} converted template object\n */\nfunction s2sConvert(\n templateData: EmailTemplateSkeleton\n): EmailTemplateSkeleton {\n if (templateData.message && !templateData.html) {\n const convertedData = cloneDeep(templateData);\n convertedData.html = cloneDeep(templateData.message);\n debugMessage(`cli.EmailTemplateOps.s2sConvert: templateData:`);\n debugMessage(templateData);\n debugMessage(`cli.EmailTemplateOps.s2sConvert: convertedData:`);\n debugMessage(convertedData);\n return convertedData;\n }\n return templateData;\n}\n\n/**\n * Import all email templates from separate files\n * @param {boolean} raw import raw data file lacking frodo export envelop\n */\nexport async function importEmailTemplatesFromFiles(raw = false) {\n const names = fs.readdirSync('.');\n const jsonFiles = raw\n ? names.filter(\n (name) =>\n name.startsWith(`${EMAIL_TEMPLATE_TYPE}-`) && name.endsWith(`.json`)\n )\n : names.filter((name) =>\n name.toLowerCase().endsWith(`${EMAIL_TEMPLATE_FILE_TYPE}.json`)\n );\n createProgressIndicator(\n 'determinate',\n jsonFiles.length,\n 'Importing email templates...'\n );\n let total = 0;\n let totalErrors = 0;\n for (const file of jsonFiles) {\n const data = fs.readFileSync(file, 'utf8');\n const fileData = JSON.parse(data);\n if (\n (raw && file.startsWith('emailTemplate-')) ||\n validateImport(fileData.meta)\n ) {\n let errors = 0;\n if (raw) {\n total++;\n const templateId = getEmailTemplateIdFromFile(file);\n try {\n const templateData = s2sConvert(fileData);\n await putEmailTemplate(templateId, templateData);\n } catch (putEmailTemplateError) {\n errors += 1;\n printMessage(`\\nError importing ${templateId}`, 'error');\n printMessage(putEmailTemplateError, 'error');\n printMessage(putEmailTemplateError.response?.data, 'error');\n }\n } else {\n total += Object.keys(fileData.emailTemplate).length;\n for (const id in fileData.emailTemplate) {\n if ({}.hasOwnProperty.call(fileData.emailTemplate, id)) {\n const templateId = id.replace(regexEmailTemplateType, '');\n try {\n await putEmailTemplate(\n templateId,\n fileData.emailTemplate[templateId]\n );\n } catch (putEmailTemplateError) {\n errors += 1;\n printMessage(`\\nError importing ${templateId}`, 'error');\n printMessage(putEmailTemplateError.response.data, 'error');\n }\n }\n }\n }\n totalErrors += errors;\n updateProgressIndicator(`Imported ${file}`);\n } else {\n printMessage(`Validation of ${file} failed!`, 'error');\n }\n }\n stopProgressIndicator(\n `Imported ${total - totalErrors} of ${total} email template(s) from ${\n jsonFiles.length\n } file(s).`\n );\n}\n\n/**\n * Import first email template from file\n * @param {String} file optional filename\n */\nexport async function importFirstEmailTemplateFromFile(\n file: string,\n raw = false\n) {\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data);\n if (\n (raw && file.startsWith('emailTemplate-')) ||\n validateImport(fileData.meta)\n ) {\n showSpinner(`Importing first email template`);\n if (raw) {\n const templateId = getEmailTemplateIdFromFile(file);\n try {\n const templateData = s2sConvert(fileData);\n await putEmailTemplate(templateId, templateData);\n succeedSpinner(`Imported ${templateId}`);\n } catch (putEmailTemplateError) {\n failSpinner(`Error importing ${templateId}`);\n printMessage(putEmailTemplateError.response?.data, 'error');\n }\n } else {\n for (const id in fileData.emailTemplate) {\n if ({}.hasOwnProperty.call(fileData.emailTemplate, id)) {\n try {\n await putEmailTemplate(\n id.replace(regexEmailTemplateType, ''),\n fileData.emailTemplate[id]\n );\n succeedSpinner(`Imported ${id}`);\n } catch (putEmailTemplateError) {\n failSpinner(`Error importing ${id}`);\n printMessage(putEmailTemplateError.response?.data, 'error');\n }\n break;\n }\n }\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"EmailTemplateOps.js","names":["frodo","fs","getTypedFilename","saveJsonToFile","createProgressIndicator","updateProgressIndicator","stopProgressIndicator","printMessage","createTable","showSpinner","succeedSpinner","failSpinner","debugMessage","wordwrap","path","cloneDeep","validateImport","utils","impex","EMAIL_TEMPLATE_TYPE","getEmailTemplates","getEmailTemplate","putEmailTemplate","email","template","EMAIL_TEMPLATE_FILE_TYPE","regexEmailTemplateType","RegExp","getFileDataTemplate","meta","emailTemplate","getOneLineDescription","templateObj","description","_id","split","displayName","defaultLocale","subject","Object","values","getTableHeaderMd","markdown","getTableRowMd","templateId","replace","locales","keys","length","filter","locale","join","row","name","listEmailTemplates","long","emailTemplates","result","error","message","sort","a","b","localeCompare","entries","table","push","enabled","from","toString","exportEmailTemplateToFile","file","fileName","templateData","fileData","err","exportEmailTemplatesToFile","response","templates","resultCount","exportEmailTemplatesToFiles","importEmailTemplateFromFile","raw","replaceAll","readFile","data","JSON","parse","emailTemplateData","s2sConvert","putEmailTemplateError","importEmailTemplatesFromFile","id","hasOwnProperty","call","getEmailTemplateIdFromFile","basename","substring","indexOf","html","convertedData","importEmailTemplatesFromFiles","names","readdirSync","jsonFiles","startsWith","endsWith","toLowerCase","total","totalErrors","readFileSync","errors","_putEmailTemplateErro","importFirstEmailTemplateFromFile","_putEmailTemplateErro2","_putEmailTemplateErro3"],"sources":["../../src/ops/EmailTemplateOps.ts"],"sourcesContent":["import { frodo } from '@rockcarver/frodo-lib';\nimport fs from 'fs';\nimport type { EmailTemplateSkeleton } from '@rockcarver/frodo-lib/types/api/ApiTypes';\nimport { getTypedFilename, saveJsonToFile } from '../utils/ExportImportUtils';\nimport {\n createProgressIndicator,\n updateProgressIndicator,\n stopProgressIndicator,\n printMessage,\n createTable,\n showSpinner,\n succeedSpinner,\n failSpinner,\n debugMessage,\n} from '../utils/Console';\nimport wordwrap from './utils/Wordwrap';\nimport path from 'path';\nimport { cloneDeep } from './utils/OpsUtils';\n\nconst { validateImport } = frodo.utils.impex;\nconst {\n EMAIL_TEMPLATE_TYPE,\n getEmailTemplates,\n getEmailTemplate,\n putEmailTemplate,\n} = frodo.email.template;\n\nconst EMAIL_TEMPLATE_FILE_TYPE = 'template.email';\n\nconst regexEmailTemplateType = new RegExp(`${EMAIL_TEMPLATE_TYPE}/`, 'g');\n\n// use a function vs a template variable to avoid problems in loops\nfunction getFileDataTemplate() {\n return {\n meta: {},\n emailTemplate: {},\n };\n}\n\n/**\n * Get a one-line description of the email template\n * @param {EmailTemplateSkeleton} templateObj email template object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescription(\n templateObj: EmailTemplateSkeleton\n): string {\n const description = `[${templateObj._id.split('/')[1]['brightCyan']}] ${\n templateObj.displayName ? templateObj.displayName : ''\n } - ${\n templateObj.defaultLocale\n ? templateObj.subject[templateObj.defaultLocale]\n : Object.values(templateObj.subject)[0]\n }`;\n return description;\n}\n\n/**\n * Get markdown table header\n * @returns {string} markdown table header\n */\nexport function getTableHeaderMd(): string {\n let markdown = '';\n markdown += '| Display Name | Locale(s) | Subject | Id |\\n';\n markdown += '| ------------ | --------- | ------- | ---|';\n return markdown;\n}\n\n/**\n * Get a table-row of the email template in markdown\n * @param {EmailTemplateSkeleton} templateObj email template object to describe\n * @returns {string} a table-row of the email template in markdown\n */\nexport function getTableRowMd(templateObj: EmailTemplateSkeleton): string {\n const templateId = templateObj._id.replace(`${EMAIL_TEMPLATE_TYPE}/`, '');\n const locales = `${templateObj.defaultLocale}${\n Object.keys(templateObj.subject).length > 1\n ? ` (${Object.keys(templateObj.subject)\n .filter((locale) => locale !== templateObj.defaultLocale)\n .join(',')})`\n : ''\n }`;\n const row = `| ${\n templateObj.name ? templateObj.name : templateId\n } | ${locales} | ${\n templateObj.subject[templateObj.defaultLocale]\n } | \\`${templateId}\\` |`;\n return row;\n}\n\n/**\n * List email templates\n * @param {boolean} long Long list format with details\n * @return {Promise<unknown[]>} a promise that resolves to an array of email template objects\n */\nexport async function listEmailTemplates(long = false): Promise<unknown[]> {\n let emailTemplates = [];\n try {\n emailTemplates = (await getEmailTemplates()).result;\n } catch (error) {\n printMessage(`Error retrieving email templates: ${error.message}`, 'error');\n }\n emailTemplates.sort((a, b) => a._id.localeCompare(b._id));\n if (!long) {\n for (const [, emailTemplate] of emailTemplates.entries()) {\n printMessage(\n `${emailTemplate._id.replace(`${EMAIL_TEMPLATE_TYPE}/`, '')}`,\n 'data'\n );\n }\n } else {\n const table = createTable([\n 'Id'['brightCyan'],\n 'Name'['brightCyan'],\n 'Status'['brightCyan'],\n 'Locale(s)'['brightCyan'],\n 'From'['brightCyan'],\n 'Subject'['brightCyan'],\n ]);\n for (const emailTemplate of emailTemplates) {\n table.push([\n // Id\n `${emailTemplate._id.replace(`${EMAIL_TEMPLATE_TYPE}/`, '')}`,\n // Name\n `${emailTemplate.displayName ? emailTemplate.displayName : ''}`,\n // Status\n emailTemplate.enabled === false\n ? 'disabled'['brightRed']\n : 'enabled'['brightGreen'],\n // Locale(s)\n `${emailTemplate.defaultLocale}${\n Object.keys(emailTemplate.subject).length > 1\n ? ` (${Object.keys(emailTemplate.subject)\n .filter((locale) => locale !== emailTemplate.defaultLocale)\n .join(',')})`\n : ''\n }`,\n // From\n `${emailTemplate.from ? emailTemplate.from : ''}`,\n // Subject\n wordwrap(emailTemplate.subject[emailTemplate.defaultLocale], 40),\n ]);\n }\n printMessage(table.toString(), 'data');\n }\n return emailTemplates;\n}\n\n/**\n * Export single email template to a file\n * @param {string} templateId email template id to export\n * @param {string} file filename where to export the template data\n */\nexport async function exportEmailTemplateToFile(\n templateId: string,\n file: string\n) {\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(templateId, EMAIL_TEMPLATE_FILE_TYPE);\n }\n createProgressIndicator('determinate', 1, `Exporting ${templateId}`);\n try {\n const templateData = await getEmailTemplate(templateId);\n updateProgressIndicator(`Writing file ${fileName}`);\n const fileData = getFileDataTemplate();\n fileData.emailTemplate[templateId] = templateData;\n saveJsonToFile(fileData, fileName);\n stopProgressIndicator(\n `Exported ${templateId['brightCyan']} to ${fileName['brightCyan']}.`\n );\n } catch (err) {\n stopProgressIndicator(`${err}`);\n printMessage(err, 'error');\n }\n}\n\n/**\n * Export all email templates to file\n * @param {String} file optional filename\n */\nexport async function exportEmailTemplatesToFile(file) {\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(`allEmailTemplates`, EMAIL_TEMPLATE_FILE_TYPE);\n }\n try {\n const fileData = getFileDataTemplate();\n const response = await getEmailTemplates();\n const templates = response.result;\n createProgressIndicator(\n 'determinate',\n response.resultCount,\n 'Exporting email templates'\n );\n for (const template of templates) {\n const templateId = template._id.replace(`${EMAIL_TEMPLATE_TYPE}/`, '');\n updateProgressIndicator(`Exporting ${templateId}`);\n fileData.emailTemplate[templateId] = template;\n }\n saveJsonToFile(fileData, fileName);\n stopProgressIndicator(\n `${response.resultCount} templates exported to ${fileName}.`\n );\n } catch (err) {\n stopProgressIndicator(`${err}`);\n printMessage(err, 'error');\n }\n}\n\n/**\n * Export all email templates to separate files\n */\nexport async function exportEmailTemplatesToFiles() {\n try {\n const response = await getEmailTemplates();\n const templates = response.result;\n createProgressIndicator(\n 'determinate',\n response.resultCount,\n 'Exporting email templates'\n );\n for (const template of templates) {\n const templateId = template._id.replace(`${EMAIL_TEMPLATE_TYPE}/`, '');\n const fileName = getTypedFilename(templateId, EMAIL_TEMPLATE_FILE_TYPE);\n const fileData = getFileDataTemplate();\n updateProgressIndicator(`Exporting ${templateId}`);\n fileData.emailTemplate[templateId] = template;\n saveJsonToFile(fileData, fileName);\n }\n stopProgressIndicator(`${response.resultCount} templates exported.`);\n } catch (err) {\n stopProgressIndicator(`${err}`);\n printMessage(err, 'error');\n }\n}\n\n/**\n * Import email template by id from file\n * @param {string} templateId email template id\n * @param {string} file optional filename\n * @param {boolean} raw import raw data file lacking frodo export envelop\n */\nexport async function importEmailTemplateFromFile(\n templateId: string,\n file: string,\n raw = false\n) {\n // eslint-disable-next-line no-param-reassign\n templateId = templateId.replaceAll(`${EMAIL_TEMPLATE_TYPE}/`, '');\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data);\n if (raw || validateImport(fileData.meta)) {\n createProgressIndicator('determinate', 1, `Importing ${templateId}`);\n if (\n fileData.emailTemplate[templateId] ||\n (raw && fileData._id === templateId)\n ) {\n try {\n const emailTemplateData = raw\n ? s2sConvert(fileData)\n : fileData.emailTemplate[templateId];\n await putEmailTemplate(templateId, emailTemplateData);\n updateProgressIndicator(`Importing ${templateId}`);\n stopProgressIndicator(`Imported ${templateId}`);\n } catch (putEmailTemplateError) {\n stopProgressIndicator(`${putEmailTemplateError}`);\n printMessage(putEmailTemplateError, 'error');\n }\n } else {\n stopProgressIndicator(\n `Email template ${templateId} not found in ${file}!`\n );\n printMessage(\n `Email template ${templateId} not found in ${file}!`,\n 'error'\n );\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Import all email templates from file\n * @param {string} file optional filename\n */\nexport async function importEmailTemplatesFromFile(file: string) {\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n createProgressIndicator(\n 'determinate',\n Object.keys(fileData.emailTemplate).length,\n `Importing email templates`\n );\n for (const id in fileData.emailTemplate) {\n if ({}.hasOwnProperty.call(fileData.emailTemplate, id)) {\n const templateId = id.replace(regexEmailTemplateType, '');\n try {\n await putEmailTemplate(\n templateId,\n fileData.emailTemplate[templateId]\n );\n updateProgressIndicator(`Imported ${templateId}`);\n } catch (putEmailTemplateError) {\n printMessage(`\\nError importing ${templateId}`, 'error');\n printMessage(putEmailTemplateError.response.data, 'error');\n }\n }\n }\n stopProgressIndicator(`Done.`);\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Helper function to get email template id from file name\n * @param {string} file file name\n * @returns {string} email template id/name\n */\nfunction getEmailTemplateIdFromFile(file: string) {\n debugMessage(`cli.EmailTemplateOps.getEmailTemplateIdFromFile: file=${file}`);\n const fileName = path.basename(file);\n const templateId = fileName.substring(14, fileName.indexOf('.'));\n debugMessage(\n `cli.EmailTemplateOps.getEmailTemplateIdFromFile: templateId=${templateId}`\n );\n return templateId;\n}\n\n/**\n * Convert template for s2s purposes (software-to-saas migration)\n * @param {EmailTemplateSkeleton} templateData template object\n * @returns {EmailTemplateSkeleton} converted template object\n */\nfunction s2sConvert(\n templateData: EmailTemplateSkeleton\n): EmailTemplateSkeleton {\n if (templateData.message && !templateData.html) {\n const convertedData = cloneDeep(templateData);\n convertedData.html = cloneDeep(templateData.message);\n debugMessage(`cli.EmailTemplateOps.s2sConvert: templateData:`);\n debugMessage(templateData);\n debugMessage(`cli.EmailTemplateOps.s2sConvert: convertedData:`);\n debugMessage(convertedData);\n return convertedData;\n }\n return templateData;\n}\n\n/**\n * Import all email templates from separate files\n * @param {boolean} raw import raw data file lacking frodo export envelop\n */\nexport async function importEmailTemplatesFromFiles(raw = false) {\n const names = fs.readdirSync('.');\n const jsonFiles = raw\n ? names.filter(\n (name) =>\n name.startsWith(`${EMAIL_TEMPLATE_TYPE}-`) && name.endsWith(`.json`)\n )\n : names.filter((name) =>\n name.toLowerCase().endsWith(`${EMAIL_TEMPLATE_FILE_TYPE}.json`)\n );\n createProgressIndicator(\n 'determinate',\n jsonFiles.length,\n 'Importing email templates...'\n );\n let total = 0;\n let totalErrors = 0;\n for (const file of jsonFiles) {\n const data = fs.readFileSync(file, 'utf8');\n const fileData = JSON.parse(data);\n if (\n (raw && file.startsWith('emailTemplate-')) ||\n validateImport(fileData.meta)\n ) {\n let errors = 0;\n if (raw) {\n total++;\n const templateId = getEmailTemplateIdFromFile(file);\n try {\n const templateData = s2sConvert(fileData);\n await putEmailTemplate(templateId, templateData);\n } catch (putEmailTemplateError) {\n errors += 1;\n printMessage(`\\nError importing ${templateId}`, 'error');\n printMessage(putEmailTemplateError, 'error');\n printMessage(putEmailTemplateError.response?.data, 'error');\n }\n } else {\n total += Object.keys(fileData.emailTemplate).length;\n for (const id in fileData.emailTemplate) {\n if ({}.hasOwnProperty.call(fileData.emailTemplate, id)) {\n const templateId = id.replace(regexEmailTemplateType, '');\n try {\n await putEmailTemplate(\n templateId,\n fileData.emailTemplate[templateId]\n );\n } catch (putEmailTemplateError) {\n errors += 1;\n printMessage(`\\nError importing ${templateId}`, 'error');\n printMessage(putEmailTemplateError.response.data, 'error');\n }\n }\n }\n }\n totalErrors += errors;\n updateProgressIndicator(`Imported ${file}`);\n } else {\n printMessage(`Validation of ${file} failed!`, 'error');\n }\n }\n stopProgressIndicator(\n `Imported ${total - totalErrors} of ${total} email template(s) from ${\n jsonFiles.length\n } file(s).`\n );\n}\n\n/**\n * Import first email template from file\n * @param {String} file optional filename\n */\nexport async function importFirstEmailTemplateFromFile(\n file: string,\n raw = false\n) {\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data);\n if (\n (raw && file.startsWith('emailTemplate-')) ||\n validateImport(fileData.meta)\n ) {\n showSpinner(`Importing first email template`);\n if (raw) {\n const templateId = getEmailTemplateIdFromFile(file);\n try {\n const templateData = s2sConvert(fileData);\n await putEmailTemplate(templateId, templateData);\n succeedSpinner(`Imported ${templateId}`);\n } catch (putEmailTemplateError) {\n failSpinner(`Error importing ${templateId}`);\n printMessage(putEmailTemplateError.response?.data, 'error');\n }\n } else {\n for (const id in fileData.emailTemplate) {\n if ({}.hasOwnProperty.call(fileData.emailTemplate, id)) {\n try {\n await putEmailTemplate(\n id.replace(regexEmailTemplateType, ''),\n fileData.emailTemplate[id]\n );\n succeedSpinner(`Imported ${id}`);\n } catch (putEmailTemplateError) {\n failSpinner(`Error importing ${id}`);\n printMessage(putEmailTemplateError.response?.data, 'error');\n }\n break;\n }\n }\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n"],"mappings":"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"}
package/esm/ops/IdmOps.js CHANGED
@@ -1,26 +1,25 @@
1
- /* eslint-disable no-await-in-loop */
1
+ import { frodo } from '@rockcarver/frodo-lib';
2
2
  import fs from 'fs';
3
3
  import fse from 'fs-extra';
4
4
  import path from 'path';
5
5
  import propertiesReader from 'properties-reader';
6
6
  import replaceall from 'replaceall';
7
- import { Idm, Utils, ValidationUtils } from '@rockcarver/frodo-lib';
8
7
  import { createProgressIndicator, printMessage, stopProgressIndicator } from '../utils/Console';
9
8
  import { getTypedFilename } from '../utils/ExportImportUtils';
9
+ const {
10
+ validateScriptHooks
11
+ } = frodo.helper.script;
10
12
  const {
11
13
  readFiles,
12
14
  unSubstituteEnvParams
13
- } = Utils;
14
- const {
15
- validateScriptHooks
16
- } = ValidationUtils;
15
+ } = frodo.helper.utils;
17
16
  const {
17
+ testConnectorServers,
18
18
  getAllConfigEntities,
19
19
  getConfigEntity,
20
20
  putConfigEntity,
21
- queryAllManagedObjectsByType,
22
- testConnectorServers
23
- } = Idm;
21
+ queryAllManagedObjectsByType
22
+ } = frodo.idm.config;
24
23
 
25
24
  /**
26
25
  * Warn about and list offline remote connector servers
@@ -184,9 +183,9 @@ export async function importConfigEntityByIdFromFile(entityId, file, validate) {
184
183
  if (!file) {
185
184
  file = getTypedFilename(entityId, 'idm');
186
185
  }
187
- const entityData = fs.readFileSync(path.resolve(process.cwd(), file), 'utf8');
188
- const jsObject = JSON.parse(entityData);
189
- const isValid = validateScriptHooks(jsObject);
186
+ const fileData = fs.readFileSync(path.resolve(process.cwd(), file), 'utf8');
187
+ const entityData = JSON.parse(fileData);
188
+ const isValid = validateScriptHooks(entityData);
190
189
  if (validate && !isValid) {
191
190
  printMessage('Invalid IDM configuration object', 'error');
192
191
  return;
@@ -205,16 +204,16 @@ export async function importConfigEntityByIdFromFile(entityId, file, validate) {
205
204
  * @param validate validate script hooks
206
205
  */
207
206
  export async function importConfigEntityFromFile(file, validate) {
208
- const importData = fs.readFileSync(path.resolve(process.cwd(), file), 'utf8');
209
- const jsObject = JSON.parse(importData);
210
- const entityId = jsObject._id;
211
- const isValid = validateScriptHooks(jsObject);
207
+ const fileData = fs.readFileSync(path.resolve(process.cwd(), file), 'utf8');
208
+ const entityData = JSON.parse(fileData);
209
+ const entityId = entityData._id;
210
+ const isValid = validateScriptHooks(entityData);
212
211
  if (validate && !isValid) {
213
212
  printMessage('Invalid IDM configuration object', 'error');
214
213
  return;
215
214
  }
216
215
  try {
217
- await putConfigEntity(entityId, importData);
216
+ await putConfigEntity(entityId, entityData);
218
217
  } catch (putConfigEntityError) {
219
218
  printMessage(putConfigEntityError, 'error');
220
219
  printMessage(`Error: ${putConfigEntityError}`, 'error');
@@ -1 +1 @@
1
- {"version":3,"file":"IdmOps.js","names":["fs","fse","path","propertiesReader","replaceall","Idm","Utils","ValidationUtils","createProgressIndicator","printMessage","stopProgressIndicator","getTypedFilename","readFiles","unSubstituteEnvParams","validateScriptHooks","getAllConfigEntities","getConfigEntity","putConfigEntity","queryAllManagedObjectsByType","testConnectorServers","warnAboutOfflineConnectorServers","all","offline","filter","status","ok","map","name","length","join","error","message","listAllConfigEntities","configurations","configEntity","_id","getAllConfigEntitiesError","exportConfigEntity","id","file","fileName","writeFile","JSON","stringify","err","exportAllRawConfigEntities","directory","existsSync","mkdirSync","undefined","entityPromises","push","catch","getConfigEntityError","_getConfigEntityError","_getConfigEntityError2","_getConfigEntityError3","_getConfigEntityError4","_getConfigEntityError5","_getConfigEntityError6","_getConfigEntityError7","_getConfigEntityError8","_getConfigEntityError9","response","data","includes","reason","_getConfigEntityError10","results","Promise","item","outputFile","exportAllConfigEntities","entitiesFile","envFile","entriesToExport","readFile","entriesData","parse","idm","envParams","configEntityString","each","key","value","importConfigEntityByIdFromFile","entityId","validate","entityData","readFileSync","resolve","process","cwd","jsObject","isValid","putConfigEntityError","importConfigEntityFromFile","importData","importAllRawConfigEntities","baseDirectory","files","jsonFiles","toLowerCase","endsWith","content","substring","everyScriptValid","isScriptValid","allSettled","errors","result","importAllConfigEntities","entriesToImport","envReader","unsubstituted","countManagedObjects","type","count","resultCount","pagedResultsCookie","totalPagedResultsPolicy","totalPagedResults","remainingPagedResults"],"sources":["../../src/ops/IdmOps.ts"],"sourcesContent":["/* eslint-disable no-await-in-loop */\nimport fs from 'fs';\nimport fse from 'fs-extra';\nimport path from 'path';\nimport propertiesReader from 'properties-reader';\nimport replaceall from 'replaceall';\n\nimport { Idm, Utils, ValidationUtils } from '@rockcarver/frodo-lib';\nimport {\n createProgressIndicator,\n printMessage,\n stopProgressIndicator,\n} from '../utils/Console';\nimport { getTypedFilename } from '../utils/ExportImportUtils';\n\nconst { readFiles, unSubstituteEnvParams } = Utils;\nconst { validateScriptHooks } = ValidationUtils;\nconst {\n getAllConfigEntities,\n getConfigEntity,\n putConfigEntity,\n queryAllManagedObjectsByType,\n testConnectorServers,\n} = Idm;\n\n/**\n * Warn about and list offline remote connector servers\n */\nexport async function warnAboutOfflineConnectorServers() {\n try {\n const all = await testConnectorServers();\n const offline = all\n .filter((status) => !status.ok)\n .map((status) => status.name);\n if (offline.length) {\n printMessage(\n `\\nThe following connector server(s) are offline and their connectors and configuration unavailable:\\n${offline.join(\n '\\n'\n )}`,\n 'warn'\n );\n }\n } catch (error) {\n printMessage(error, 'error');\n printMessage(\n `Error getting offline connector servers: ${error.message}`,\n 'error'\n );\n }\n}\n\n/**\n * List all IDM configuration objects\n */\nexport async function listAllConfigEntities() {\n try {\n const { configurations } = await getAllConfigEntities();\n for (const configEntity of configurations) {\n printMessage(`${configEntity._id}`, 'data');\n }\n } catch (getAllConfigEntitiesError) {\n printMessage(getAllConfigEntitiesError, 'error');\n printMessage(\n `Error getting config entities: ${getAllConfigEntitiesError}`,\n 'error'\n );\n }\n}\n\n/**\n * Export an IDM configuration object.\n * @param {String} id the desired configuration object\n * @param {String} file optional export file\n */\nexport async function exportConfigEntity(id, file) {\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(`${id}`, 'idm');\n }\n const configEntity = await getConfigEntity(id);\n fs.writeFile(fileName, JSON.stringify(configEntity, null, 2), (err) => {\n if (err) {\n return printMessage(`ERROR - can't save ${id} export to file`, 'error');\n }\n return '';\n });\n}\n\n/**\n * Export all IDM configuration objects into separate JSON files in a directory specified by <directory>\n * @param {String} directory export directory\n */\nexport async function exportAllRawConfigEntities(directory) {\n try {\n const { configurations } = await getAllConfigEntities();\n if (!fs.existsSync(directory)) {\n fs.mkdirSync(directory);\n }\n createProgressIndicator(\n 'indeterminate',\n undefined,\n 'Exporting config objects...'\n );\n const entityPromises = [];\n for (const configEntity of configurations) {\n entityPromises.push(\n getConfigEntity(configEntity._id).catch((getConfigEntityError) => {\n if (\n !(\n getConfigEntityError.response?.status === 403 &&\n getConfigEntityError.response?.data?.message ===\n 'This operation is not available in ForgeRock Identity Cloud.'\n ) &&\n !(\n // list of config entities, which do not exist by default or ever.\n (\n [\n 'script',\n 'notificationFactory',\n 'apiVersion',\n 'metrics',\n 'repo.init',\n 'endpoint/validateQueryFilter',\n 'endpoint/oauthproxy',\n 'external.rest',\n 'scheduler',\n 'org.apache.felix.fileinstall/openidm',\n 'cluster',\n 'endpoint/mappingDetails',\n 'fieldPolicy/teammember',\n ].includes(configEntity._id) &&\n getConfigEntityError.response?.status === 404 &&\n getConfigEntityError.response?.data?.reason === 'Not Found'\n )\n ) &&\n // https://bugster.forgerock.org/jira/browse/OPENIDM-18270\n !(\n getConfigEntityError.response?.status === 404 &&\n getConfigEntityError.response?.data?.message ===\n 'No configuration exists for id org.apache.felix.fileinstall/openidm'\n )\n ) {\n printMessage(getConfigEntityError.response?.data, 'error');\n printMessage(\n `Error getting config entity ${configEntity._id}: ${getConfigEntityError}`,\n 'error'\n );\n }\n })\n );\n }\n const results = await Promise.all(entityPromises);\n for (const item of results) {\n if (item != null) {\n fse.outputFile(\n `${directory}/${item._id}.json`,\n JSON.stringify(item, null, 2),\n (err) => {\n if (err) {\n return printMessage(\n `ERROR - can't save config ${item._id} to file - ${err}`,\n 'error'\n );\n }\n }\n );\n }\n }\n stopProgressIndicator('Exported config objects.', 'success');\n } catch (getAllConfigEntitiesError) {\n printMessage(getAllConfigEntitiesError, 'error');\n printMessage(\n `Error getting config entities: ${getAllConfigEntitiesError}`,\n 'error'\n );\n }\n}\n\n/**\n * Export all IDM configuration objects\n * @param {String} directory export directory\n * @param {String} entitiesFile JSON file that specifies the config entities to export/import\n * @param {String} envFile File that defines environment specific variables for replacement during configuration export/import\n */\nexport async function exportAllConfigEntities(\n directory,\n entitiesFile,\n envFile\n) {\n let entriesToExport = [];\n // read list of entities to export\n fs.readFile(entitiesFile, 'utf8', async (err, data) => {\n if (err) throw err;\n const entriesData = JSON.parse(data);\n entriesToExport = entriesData.idm;\n // console.log(`entriesToExport ${entriesToExport}`);\n\n // read list of configs to parameterize for environment specific values\n const envParams = propertiesReader(envFile);\n\n try {\n const { configurations } = await getAllConfigEntities();\n // create export directory if not exist\n if (!fs.existsSync(directory)) {\n fs.mkdirSync(directory);\n }\n createProgressIndicator(\n 'indeterminate',\n undefined,\n 'Exporting config objects...'\n );\n const entityPromises = [];\n for (const configEntity of configurations) {\n if (entriesToExport.includes(configEntity._id)) {\n entityPromises.push(getConfigEntity(configEntity._id));\n }\n }\n const results = await Promise.all(entityPromises);\n for (const item of results) {\n if (item != null) {\n let configEntityString = JSON.stringify(item, null, 2);\n envParams.each((key, value) => {\n configEntityString = replaceall(\n value,\n `\\${${key}}`,\n configEntityString\n );\n });\n fse.outputFile(\n `${directory}/${item._id}.json`,\n configEntityString,\n (error) => {\n if (err) {\n return printMessage(\n `ERROR - can't save config ${item._id} to file - ${error}`,\n 'error'\n );\n }\n }\n );\n }\n }\n stopProgressIndicator(null, 'success');\n } catch (getAllConfigEntitiesError) {\n printMessage(getAllConfigEntitiesError, 'error');\n printMessage(\n `Error getting config entities: ${getAllConfigEntitiesError}`,\n 'error'\n );\n }\n });\n}\n\n/**\n * Import an IDM configuration object by id from file.\n * @param entityId the configuration object to import\n * @param file optional file to import\n * @param validate validate script hooks\n */\nexport async function importConfigEntityByIdFromFile(\n entityId: string,\n file?: string,\n validate?: boolean\n) {\n if (!file) {\n file = getTypedFilename(entityId, 'idm');\n }\n\n const entityData = fs.readFileSync(path.resolve(process.cwd(), file), 'utf8');\n\n const jsObject = JSON.parse(entityData);\n const isValid = validateScriptHooks(jsObject);\n if (validate && !isValid) {\n printMessage('Invalid IDM configuration object', 'error');\n return;\n }\n\n try {\n await putConfigEntity(entityId, entityData);\n } catch (putConfigEntityError) {\n printMessage(putConfigEntityError, 'error');\n printMessage(`Error: ${putConfigEntityError}`, 'error');\n }\n}\n\n/**\n * Import IDM configuration object from file.\n * @param file optional file to import\n * @param validate validate script hooks\n */\nexport async function importConfigEntityFromFile(\n file: string,\n validate?: boolean\n) {\n const importData = fs.readFileSync(path.resolve(process.cwd(), file), 'utf8');\n const jsObject = JSON.parse(importData);\n const entityId = jsObject._id;\n const isValid = validateScriptHooks(jsObject);\n if (validate && !isValid) {\n printMessage('Invalid IDM configuration object', 'error');\n return;\n }\n\n try {\n await putConfigEntity(entityId, importData);\n } catch (putConfigEntityError) {\n printMessage(putConfigEntityError, 'error');\n printMessage(`Error: ${putConfigEntityError}`, 'error');\n }\n}\n\n/**\n * Import all IDM configuration objects from separate JSON files in a directory specified by <directory>\n * @param baseDirectory export directory\n * @param validate validate script hooks\n */\nexport async function importAllRawConfigEntities(\n baseDirectory: string,\n validate?: boolean\n) {\n if (!fs.existsSync(baseDirectory)) {\n return;\n }\n const files = await readFiles(baseDirectory);\n const jsonFiles = files\n .filter(({ path }) => path.toLowerCase().endsWith('.json'))\n .map(({ path, content }) => ({\n // Remove .json extension\n entityId: path.substring(0, path.length - 5),\n content,\n path,\n }));\n\n let everyScriptValid = true;\n for (const file of jsonFiles) {\n const jsObject = JSON.parse(file.content);\n const isScriptValid = validateScriptHooks(jsObject);\n if (!isScriptValid) {\n printMessage(`Invalid script hook in ${file.path}`, 'error');\n everyScriptValid = false;\n }\n }\n\n if (validate && !everyScriptValid) {\n return;\n }\n\n createProgressIndicator(\n 'indeterminate',\n undefined,\n 'Importing config objects...'\n );\n\n const entityPromises = jsonFiles.map((file) => {\n return putConfigEntity(file.entityId, file.content);\n });\n\n const results = await Promise.allSettled(entityPromises);\n const errors = results.filter(\n (result): result is PromiseRejectedResult => result.status === 'rejected'\n );\n\n if (errors.length > 0) {\n printMessage(`Failed to import ${errors.length} config objects:`, 'error');\n for (const error of errors) {\n printMessage(`- ${error.reason}`, 'error');\n }\n stopProgressIndicator(\n `Failed to import ${errors.length} config objects`,\n 'error'\n );\n return;\n }\n\n stopProgressIndicator(`Imported ${results.length} config objects`, 'success');\n}\n\n/**\n * Import all IDM configuration objects\n * @param baseDirectory import directory\n * @param entitiesFile JSON file that specifies the config entities to export/import\n * @param envFile File that defines environment specific variables for replacement during configuration export/import\n * @param validate validate script hooks\n */\nexport async function importAllConfigEntities(\n baseDirectory: string,\n entitiesFile: string,\n envFile: string,\n validate?: boolean\n) {\n if (!fs.existsSync(baseDirectory)) {\n return;\n }\n const entriesToImport = JSON.parse(fs.readFileSync(entitiesFile, 'utf8')).idm;\n\n const envReader = propertiesReader(envFile);\n\n const files = await readFiles(baseDirectory);\n const jsonFiles = files\n .filter(({ path }) => path.toLowerCase().endsWith('.json'))\n .map(({ content, path }) => ({\n // Remove .json extension\n entityId: path.substring(0, path.length - 5),\n content,\n path,\n }));\n\n let everyScriptValid = true;\n for (const file of jsonFiles) {\n const jsObject = JSON.parse(file.content);\n const isScriptValid = validateScriptHooks(jsObject);\n if (!isScriptValid) {\n printMessage(`Invalid script hook in ${file.path}`, 'error');\n everyScriptValid = false;\n }\n }\n\n if (validate && !everyScriptValid) {\n return;\n }\n\n createProgressIndicator(\n 'indeterminate',\n undefined,\n 'Importing config objects...'\n );\n\n const entityPromises = jsonFiles\n .filter(({ entityId }) => {\n return entriesToImport.includes(entityId);\n })\n .map(({ entityId, content }) => {\n const unsubstituted = unSubstituteEnvParams(content, envReader);\n return putConfigEntity(entityId, unsubstituted);\n });\n\n const results = await Promise.allSettled(entityPromises);\n const errors = results.filter(\n (result): result is PromiseRejectedResult => result.status === 'rejected'\n );\n\n if (errors.length > 0) {\n printMessage(`Failed to import ${errors.length} config objects:`, 'error');\n for (const error of errors) {\n printMessage(`- ${error.reason}`, 'error');\n }\n stopProgressIndicator(\n `Failed to import ${errors.length} config objects`,\n 'error'\n );\n return;\n }\n\n stopProgressIndicator(`Imported ${results.length} config objects`, 'success');\n}\n\n/**\n * Count number of managed objects of a given type\n * @param {String} type managed object type, e.g. alpha_user\n */\nexport async function countManagedObjects(type) {\n let count = 0;\n let result = {\n result: [],\n resultCount: 0,\n pagedResultsCookie: null,\n totalPagedResultsPolicy: 'NONE',\n totalPagedResults: -1,\n remainingPagedResults: -1,\n };\n try {\n do {\n result = await queryAllManagedObjectsByType(\n type,\n [],\n result.pagedResultsCookie\n );\n count += result.resultCount;\n } while (result.pagedResultsCookie);\n printMessage(`${type}: ${count}`);\n } catch (error) {\n printMessage(error.response.data, 'error');\n printMessage(`Error querying managed objects by type: ${error}`, 'error');\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"IdmOps.js","names":["frodo","fs","fse","path","propertiesReader","replaceall","createProgressIndicator","printMessage","stopProgressIndicator","getTypedFilename","validateScriptHooks","helper","script","readFiles","unSubstituteEnvParams","utils","testConnectorServers","getAllConfigEntities","getConfigEntity","putConfigEntity","queryAllManagedObjectsByType","idm","config","warnAboutOfflineConnectorServers","all","offline","filter","status","ok","map","name","length","join","error","message","listAllConfigEntities","configurations","configEntity","_id","getAllConfigEntitiesError","exportConfigEntity","id","file","fileName","writeFile","JSON","stringify","err","exportAllRawConfigEntities","directory","existsSync","mkdirSync","undefined","entityPromises","push","catch","getConfigEntityError","_getConfigEntityError","_getConfigEntityError2","_getConfigEntityError3","_getConfigEntityError4","_getConfigEntityError5","_getConfigEntityError6","_getConfigEntityError7","_getConfigEntityError8","_getConfigEntityError9","response","data","includes","reason","_getConfigEntityError10","results","Promise","item","outputFile","exportAllConfigEntities","entitiesFile","envFile","entriesToExport","readFile","entriesData","parse","envParams","configEntityString","each","key","value","importConfigEntityByIdFromFile","entityId","validate","fileData","readFileSync","resolve","process","cwd","entityData","isValid","putConfigEntityError","importConfigEntityFromFile","importAllRawConfigEntities","baseDirectory","files","jsonFiles","toLowerCase","endsWith","content","substring","everyScriptValid","jsObject","isScriptValid","allSettled","errors","result","importAllConfigEntities","entriesToImport","envReader","unsubstituted","countManagedObjects","type","count","resultCount","pagedResultsCookie","totalPagedResultsPolicy","totalPagedResults","remainingPagedResults"],"sources":["../../src/ops/IdmOps.ts"],"sourcesContent":["import { frodo } from '@rockcarver/frodo-lib';\nimport fs from 'fs';\nimport fse from 'fs-extra';\nimport path from 'path';\nimport propertiesReader from 'properties-reader';\nimport replaceall from 'replaceall';\nimport {\n createProgressIndicator,\n printMessage,\n stopProgressIndicator,\n} from '../utils/Console';\nimport { getTypedFilename } from '../utils/ExportImportUtils';\n\nconst { validateScriptHooks } = frodo.helper.script;\nconst { readFiles, unSubstituteEnvParams } = frodo.helper.utils;\nconst {\n testConnectorServers,\n getAllConfigEntities,\n getConfigEntity,\n putConfigEntity,\n queryAllManagedObjectsByType,\n} = frodo.idm.config;\n\n/**\n * Warn about and list offline remote connector servers\n */\nexport async function warnAboutOfflineConnectorServers() {\n try {\n const all = await testConnectorServers();\n const offline = all\n .filter((status) => !status.ok)\n .map((status) => status.name);\n if (offline.length) {\n printMessage(\n `\\nThe following connector server(s) are offline and their connectors and configuration unavailable:\\n${offline.join(\n '\\n'\n )}`,\n 'warn'\n );\n }\n } catch (error) {\n printMessage(error, 'error');\n printMessage(\n `Error getting offline connector servers: ${error.message}`,\n 'error'\n );\n }\n}\n\n/**\n * List all IDM configuration objects\n */\nexport async function listAllConfigEntities() {\n try {\n const { configurations } = await getAllConfigEntities();\n for (const configEntity of configurations) {\n printMessage(`${configEntity._id}`, 'data');\n }\n } catch (getAllConfigEntitiesError) {\n printMessage(getAllConfigEntitiesError, 'error');\n printMessage(\n `Error getting config entities: ${getAllConfigEntitiesError}`,\n 'error'\n );\n }\n}\n\n/**\n * Export an IDM configuration object.\n * @param {String} id the desired configuration object\n * @param {String} file optional export file\n */\nexport async function exportConfigEntity(id, file) {\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(`${id}`, 'idm');\n }\n const configEntity = await getConfigEntity(id);\n fs.writeFile(fileName, JSON.stringify(configEntity, null, 2), (err) => {\n if (err) {\n return printMessage(`ERROR - can't save ${id} export to file`, 'error');\n }\n return '';\n });\n}\n\n/**\n * Export all IDM configuration objects into separate JSON files in a directory specified by <directory>\n * @param {String} directory export directory\n */\nexport async function exportAllRawConfigEntities(directory) {\n try {\n const { configurations } = await getAllConfigEntities();\n if (!fs.existsSync(directory)) {\n fs.mkdirSync(directory);\n }\n createProgressIndicator(\n 'indeterminate',\n undefined,\n 'Exporting config objects...'\n );\n const entityPromises = [];\n for (const configEntity of configurations) {\n entityPromises.push(\n getConfigEntity(configEntity._id).catch((getConfigEntityError) => {\n if (\n !(\n getConfigEntityError.response?.status === 403 &&\n getConfigEntityError.response?.data?.message ===\n 'This operation is not available in ForgeRock Identity Cloud.'\n ) &&\n !(\n // list of config entities, which do not exist by default or ever.\n (\n [\n 'script',\n 'notificationFactory',\n 'apiVersion',\n 'metrics',\n 'repo.init',\n 'endpoint/validateQueryFilter',\n 'endpoint/oauthproxy',\n 'external.rest',\n 'scheduler',\n 'org.apache.felix.fileinstall/openidm',\n 'cluster',\n 'endpoint/mappingDetails',\n 'fieldPolicy/teammember',\n ].includes(configEntity._id) &&\n getConfigEntityError.response?.status === 404 &&\n getConfigEntityError.response?.data?.reason === 'Not Found'\n )\n ) &&\n // https://bugster.forgerock.org/jira/browse/OPENIDM-18270\n !(\n getConfigEntityError.response?.status === 404 &&\n getConfigEntityError.response?.data?.message ===\n 'No configuration exists for id org.apache.felix.fileinstall/openidm'\n )\n ) {\n printMessage(getConfigEntityError.response?.data, 'error');\n printMessage(\n `Error getting config entity ${configEntity._id}: ${getConfigEntityError}`,\n 'error'\n );\n }\n })\n );\n }\n const results = await Promise.all(entityPromises);\n for (const item of results) {\n if (item != null) {\n fse.outputFile(\n `${directory}/${item._id}.json`,\n JSON.stringify(item, null, 2),\n (err) => {\n if (err) {\n return printMessage(\n `ERROR - can't save config ${item._id} to file - ${err}`,\n 'error'\n );\n }\n }\n );\n }\n }\n stopProgressIndicator('Exported config objects.', 'success');\n } catch (getAllConfigEntitiesError) {\n printMessage(getAllConfigEntitiesError, 'error');\n printMessage(\n `Error getting config entities: ${getAllConfigEntitiesError}`,\n 'error'\n );\n }\n}\n\n/**\n * Export all IDM configuration objects\n * @param {String} directory export directory\n * @param {String} entitiesFile JSON file that specifies the config entities to export/import\n * @param {String} envFile File that defines environment specific variables for replacement during configuration export/import\n */\nexport async function exportAllConfigEntities(\n directory,\n entitiesFile,\n envFile\n) {\n let entriesToExport = [];\n // read list of entities to export\n fs.readFile(entitiesFile, 'utf8', async (err, data) => {\n if (err) throw err;\n const entriesData = JSON.parse(data);\n entriesToExport = entriesData.idm;\n // console.log(`entriesToExport ${entriesToExport}`);\n\n // read list of configs to parameterize for environment specific values\n const envParams = propertiesReader(envFile);\n\n try {\n const { configurations } = await getAllConfigEntities();\n // create export directory if not exist\n if (!fs.existsSync(directory)) {\n fs.mkdirSync(directory);\n }\n createProgressIndicator(\n 'indeterminate',\n undefined,\n 'Exporting config objects...'\n );\n const entityPromises = [];\n for (const configEntity of configurations) {\n if (entriesToExport.includes(configEntity._id)) {\n entityPromises.push(getConfigEntity(configEntity._id));\n }\n }\n const results = await Promise.all(entityPromises);\n for (const item of results) {\n if (item != null) {\n let configEntityString = JSON.stringify(item, null, 2);\n envParams.each((key, value) => {\n configEntityString = replaceall(\n value,\n `\\${${key}}`,\n configEntityString\n );\n });\n fse.outputFile(\n `${directory}/${item._id}.json`,\n configEntityString,\n (error) => {\n if (err) {\n return printMessage(\n `ERROR - can't save config ${item._id} to file - ${error}`,\n 'error'\n );\n }\n }\n );\n }\n }\n stopProgressIndicator(null, 'success');\n } catch (getAllConfigEntitiesError) {\n printMessage(getAllConfigEntitiesError, 'error');\n printMessage(\n `Error getting config entities: ${getAllConfigEntitiesError}`,\n 'error'\n );\n }\n });\n}\n\n/**\n * Import an IDM configuration object by id from file.\n * @param entityId the configuration object to import\n * @param file optional file to import\n * @param validate validate script hooks\n */\nexport async function importConfigEntityByIdFromFile(\n entityId: string,\n file?: string,\n validate?: boolean\n) {\n if (!file) {\n file = getTypedFilename(entityId, 'idm');\n }\n\n const fileData = fs.readFileSync(path.resolve(process.cwd(), file), 'utf8');\n\n const entityData = JSON.parse(fileData);\n const isValid = validateScriptHooks(entityData);\n if (validate && !isValid) {\n printMessage('Invalid IDM configuration object', 'error');\n return;\n }\n\n try {\n await putConfigEntity(entityId, entityData);\n } catch (putConfigEntityError) {\n printMessage(putConfigEntityError, 'error');\n printMessage(`Error: ${putConfigEntityError}`, 'error');\n }\n}\n\n/**\n * Import IDM configuration object from file.\n * @param file optional file to import\n * @param validate validate script hooks\n */\nexport async function importConfigEntityFromFile(\n file: string,\n validate?: boolean\n) {\n const fileData = fs.readFileSync(path.resolve(process.cwd(), file), 'utf8');\n const entityData = JSON.parse(fileData);\n const entityId = entityData._id;\n const isValid = validateScriptHooks(entityData);\n if (validate && !isValid) {\n printMessage('Invalid IDM configuration object', 'error');\n return;\n }\n\n try {\n await putConfigEntity(entityId, entityData);\n } catch (putConfigEntityError) {\n printMessage(putConfigEntityError, 'error');\n printMessage(`Error: ${putConfigEntityError}`, 'error');\n }\n}\n\n/**\n * Import all IDM configuration objects from separate JSON files in a directory specified by <directory>\n * @param baseDirectory export directory\n * @param validate validate script hooks\n */\nexport async function importAllRawConfigEntities(\n baseDirectory: string,\n validate?: boolean\n) {\n if (!fs.existsSync(baseDirectory)) {\n return;\n }\n const files = await readFiles(baseDirectory);\n const jsonFiles = files\n .filter(({ path }) => path.toLowerCase().endsWith('.json'))\n .map(({ path, content }) => ({\n // Remove .json extension\n entityId: path.substring(0, path.length - 5),\n content,\n path,\n }));\n\n let everyScriptValid = true;\n for (const file of jsonFiles) {\n const jsObject = JSON.parse(file.content);\n const isScriptValid = validateScriptHooks(jsObject);\n if (!isScriptValid) {\n printMessage(`Invalid script hook in ${file.path}`, 'error');\n everyScriptValid = false;\n }\n }\n\n if (validate && !everyScriptValid) {\n return;\n }\n\n createProgressIndicator(\n 'indeterminate',\n undefined,\n 'Importing config objects...'\n );\n\n const entityPromises = jsonFiles.map((file) => {\n return putConfigEntity(file.entityId, file.content);\n });\n\n const results = await Promise.allSettled(entityPromises);\n const errors = results.filter(\n (result): result is PromiseRejectedResult => result.status === 'rejected'\n );\n\n if (errors.length > 0) {\n printMessage(`Failed to import ${errors.length} config objects:`, 'error');\n for (const error of errors) {\n printMessage(`- ${error.reason}`, 'error');\n }\n stopProgressIndicator(\n `Failed to import ${errors.length} config objects`,\n 'error'\n );\n return;\n }\n\n stopProgressIndicator(`Imported ${results.length} config objects`, 'success');\n}\n\n/**\n * Import all IDM configuration objects\n * @param baseDirectory import directory\n * @param entitiesFile JSON file that specifies the config entities to export/import\n * @param envFile File that defines environment specific variables for replacement during configuration export/import\n * @param validate validate script hooks\n */\nexport async function importAllConfigEntities(\n baseDirectory: string,\n entitiesFile: string,\n envFile: string,\n validate?: boolean\n) {\n if (!fs.existsSync(baseDirectory)) {\n return;\n }\n const entriesToImport = JSON.parse(fs.readFileSync(entitiesFile, 'utf8')).idm;\n\n const envReader = propertiesReader(envFile);\n\n const files = await readFiles(baseDirectory);\n const jsonFiles = files\n .filter(({ path }) => path.toLowerCase().endsWith('.json'))\n .map(({ content, path }) => ({\n // Remove .json extension\n entityId: path.substring(0, path.length - 5),\n content,\n path,\n }));\n\n let everyScriptValid = true;\n for (const file of jsonFiles) {\n const jsObject = JSON.parse(file.content);\n const isScriptValid = validateScriptHooks(jsObject);\n if (!isScriptValid) {\n printMessage(`Invalid script hook in ${file.path}`, 'error');\n everyScriptValid = false;\n }\n }\n\n if (validate && !everyScriptValid) {\n return;\n }\n\n createProgressIndicator(\n 'indeterminate',\n undefined,\n 'Importing config objects...'\n );\n\n const entityPromises = jsonFiles\n .filter(({ entityId }) => {\n return entriesToImport.includes(entityId);\n })\n .map(({ entityId, content }) => {\n const unsubstituted = unSubstituteEnvParams(content, envReader);\n return putConfigEntity(entityId, unsubstituted);\n });\n\n const results = await Promise.allSettled(entityPromises);\n const errors = results.filter(\n (result): result is PromiseRejectedResult => result.status === 'rejected'\n );\n\n if (errors.length > 0) {\n printMessage(`Failed to import ${errors.length} config objects:`, 'error');\n for (const error of errors) {\n printMessage(`- ${error.reason}`, 'error');\n }\n stopProgressIndicator(\n `Failed to import ${errors.length} config objects`,\n 'error'\n );\n return;\n }\n\n stopProgressIndicator(`Imported ${results.length} config objects`, 'success');\n}\n\n/**\n * Count number of managed objects of a given type\n * @param {String} type managed object type, e.g. alpha_user\n */\nexport async function countManagedObjects(type) {\n let count = 0;\n let result = {\n result: [],\n resultCount: 0,\n pagedResultsCookie: null,\n totalPagedResultsPolicy: 'NONE',\n totalPagedResults: -1,\n remainingPagedResults: -1,\n };\n try {\n do {\n result = await queryAllManagedObjectsByType(\n type,\n [],\n result.pagedResultsCookie\n );\n count += result.resultCount;\n } while (result.pagedResultsCookie);\n printMessage(`${type}: ${count}`);\n } catch (error) {\n printMessage(error.response.data, 'error');\n printMessage(`Error querying managed objects by type: ${error}`, 'error');\n }\n}\n"],"mappings":"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"}
package/esm/ops/IdpOps.js CHANGED
@@ -1,15 +1,15 @@
1
+ import { frodo } from '@rockcarver/frodo-lib';
1
2
  import fs from 'fs';
2
- import { Idp } from '@rockcarver/frodo-lib';
3
- import { createProgressBar, failSpinner, printMessage, showSpinner, stopProgressBar, succeedSpinner, updateProgressBar } from '../utils/Console';
3
+ import { createProgressBar, debugMessage, failSpinner, printMessage, showSpinner, stopProgressBar, succeedSpinner, updateProgressBar } from '../utils/Console';
4
4
  import { getRealmString, getTypedFilename, saveJsonToFile } from '../utils/ExportImportUtils';
5
5
  const {
6
6
  getSocialIdentityProviders,
7
7
  exportSocialProvider,
8
8
  exportSocialProviders,
9
- importSocialProvider,
10
9
  importFirstSocialProvider,
10
+ importSocialProvider,
11
11
  importSocialProviders
12
- } = Idp;
12
+ } = frodo.oauth2oidc.external;
13
13
 
14
14
  /**
15
15
  * Get a one-line description of the social idp object
@@ -64,6 +64,7 @@ export async function listSocialProviders() {
64
64
  * @param {string} file optional export file name
65
65
  */
66
66
  export async function exportSocialProviderToFile(providerId, file = '') {
67
+ debugMessage(`cli.IdpOps.exportSocialProviderToFile: start`);
67
68
  let fileName = file;
68
69
  if (!fileName) {
69
70
  fileName = getTypedFilename(providerId, 'idp');
@@ -78,6 +79,7 @@ export async function exportSocialProviderToFile(providerId, file = '') {
78
79
  stopProgressBar(`${err}`);
79
80
  printMessage(`${err}`, 'error');
80
81
  }
82
+ debugMessage(`cli.IdpOps.exportSocialProviderToFile: end`);
81
83
  }
82
84
 
83
85
  /**
@@ -97,16 +99,26 @@ export async function exportSocialProvidersToFile(file = '') {
97
99
  * Export all providers to individual files
98
100
  */
99
101
  export async function exportSocialProvidersToFiles() {
100
- const allIdpsData = await getSocialIdentityProviders();
101
- // printMessage(allIdpsData, 'data');
102
- createProgressBar(allIdpsData.length, 'Exporting providers');
103
- for (const idpData of allIdpsData) {
104
- updateProgressBar(`Writing provider ${idpData._id}`);
105
- const fileName = getTypedFilename(idpData._id, 'idp');
106
- const fileData = await exportSocialProvider(idpData._id);
107
- saveJsonToFile(fileData, fileName);
102
+ debugMessage(`cli.IdpOps.exportSocialProvidersToFiles: start`);
103
+ try {
104
+ const allIdpsData = await getSocialIdentityProviders();
105
+ createProgressBar(allIdpsData.length, 'Exporting providers');
106
+ for (const idpData of allIdpsData) {
107
+ try {
108
+ const fileName = getTypedFilename(idpData._id, 'idp');
109
+ const fileData = await exportSocialProvider(idpData._id);
110
+ saveJsonToFile(fileData, fileName);
111
+ updateProgressBar(`Exported provider ${idpData._id}`);
112
+ } catch (error) {
113
+ printMessage(`Error exporting ${idpData._id}: ${error}`, 'error');
114
+ }
115
+ }
116
+ stopProgressBar(`${allIdpsData.length} providers exported.`);
117
+ } catch (error) {
118
+ stopProgressBar(`${error}`);
119
+ printMessage(`${error}`, 'error');
108
120
  }
109
- stopProgressBar(`${allIdpsData.length} providers exported.`);
121
+ debugMessage(`cli.IdpOps.exportSocialProvidersToFiles: end`);
110
122
  }
111
123
 
112
124
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"IdpOps.js","names":["fs","Idp","createProgressBar","failSpinner","printMessage","showSpinner","stopProgressBar","succeedSpinner","updateProgressBar","getRealmString","getTypedFilename","saveJsonToFile","getSocialIdentityProviders","exportSocialProvider","exportSocialProviders","importSocialProvider","importFirstSocialProvider","importSocialProviders","getOneLineDescription","socialIdpObj","description","_id","_type","getTableHeaderMd","markdown","getTableRowMd","row","enabled","name","listSocialProviders","providers","sort","a","b","localeCompare","forEach","socialIdentityProvider","err","message","exportSocialProviderToFile","providerId","file","fileName","fileData","exportSocialProvidersToFile","exportSocialProvidersToFiles","allIdpsData","length","idpData","importSocialProviderFromFile","outcome","readFile","data","JSON","parse","error","_error$response","response","importFirstSocialProviderFromFile","_error$response2","importSocialProvidersFromFile","_error$response3","importSocialProvidersFromFiles","names","readdirSync","jsonFiles","filter","toLowerCase","endsWith","total","readFileSync","count","Object","keys","idp"],"sources":["../../src/ops/IdpOps.ts"],"sourcesContent":["import fs from 'fs';\nimport { SocialIdpSkeleton } from '@rockcarver/frodo-lib/types/api/ApiTypes';\nimport { Idp } from '@rockcarver/frodo-lib';\nimport {\n createProgressBar,\n failSpinner,\n printMessage,\n showSpinner,\n stopProgressBar,\n succeedSpinner,\n updateProgressBar,\n} from '../utils/Console';\nimport {\n getRealmString,\n getTypedFilename,\n saveJsonToFile,\n} from '../utils/ExportImportUtils';\n\nconst {\n getSocialIdentityProviders,\n exportSocialProvider,\n exportSocialProviders,\n importSocialProvider,\n importFirstSocialProvider,\n importSocialProviders,\n} = Idp;\n\n/**\n * Get a one-line description of the social idp object\n * @param {SocialIdpSkeleton} socialIdpObj social idp object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescription(socialIdpObj: SocialIdpSkeleton): string {\n const description = `[${socialIdpObj._id['brightCyan']}] ${socialIdpObj._type._id}`;\n return description;\n}\n\n/**\n * Get markdown table header\n * @returns {string} markdown table header\n */\nexport function getTableHeaderMd(): string {\n let markdown = '';\n markdown += '| Name/Id | Status | Type |\\n';\n markdown += '| ------- | ------ | ---- |';\n return markdown;\n}\n\n/**\n * Get a table-row of the social idp in markdown\n * @param {SocialIdpSkeleton} socialIdpObj social idp object to describe\n * @returns {string} a table-row of the social idp in markdown\n */\nexport function getTableRowMd(socialIdpObj: SocialIdpSkeleton): string {\n const row = `| ${socialIdpObj._id} | ${\n socialIdpObj.enabled === false\n ? ':o: `disabled`'\n : ':white_check_mark: `enabled`'\n } | ${socialIdpObj._type.name} |`;\n return row;\n}\n\n/**\n * List providers\n */\nexport async function listSocialProviders() {\n try {\n const providers = await getSocialIdentityProviders();\n providers.sort((a, b) => a._id.localeCompare(b._id));\n providers.forEach((socialIdentityProvider) => {\n printMessage(`${socialIdentityProvider._id}`, 'data');\n });\n } catch (err) {\n printMessage(`listSocialProviders ERROR: ${err.message}`, 'error');\n printMessage(err, 'error');\n }\n}\n\n/**\n * Export provider by id\n * @param {string} providerId provider id/name\n * @param {string} file optional export file name\n */\nexport async function exportSocialProviderToFile(\n providerId: string,\n file = ''\n) {\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(providerId, 'idp');\n }\n createProgressBar(1, `Exporting ${providerId}`);\n try {\n updateProgressBar(`Writing file ${fileName}`);\n const fileData = await exportSocialProvider(providerId);\n saveJsonToFile(fileData, fileName);\n stopProgressBar(\n `Exported ${providerId['brightCyan']} to ${fileName['brightCyan']}.`\n );\n } catch (err) {\n stopProgressBar(`${err}`);\n printMessage(`${err}`, 'error');\n }\n}\n\n/**\n * Export all providers\n * @param {string} file optional export file name\n */\nexport async function exportSocialProvidersToFile(file = '') {\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(`all${getRealmString()}Providers`, 'idp');\n }\n const fileData = await exportSocialProviders();\n saveJsonToFile(fileData, fileName);\n}\n\n/**\n * Export all providers to individual files\n */\nexport async function exportSocialProvidersToFiles() {\n const allIdpsData = await getSocialIdentityProviders();\n // printMessage(allIdpsData, 'data');\n createProgressBar(allIdpsData.length, 'Exporting providers');\n for (const idpData of allIdpsData) {\n updateProgressBar(`Writing provider ${idpData._id}`);\n const fileName = getTypedFilename(idpData._id, 'idp');\n const fileData = await exportSocialProvider(idpData._id);\n saveJsonToFile(fileData, fileName);\n }\n stopProgressBar(`${allIdpsData.length} providers exported.`);\n}\n\n/**\n * Import provider by id/name\n * @param {string} providerId provider id/name\n * @param {string} file import file name\n * @returns {Promise<boolean>} true if provider was imported successfully, false otherwise\n */\nexport async function importSocialProviderFromFile(\n providerId: string,\n file: string\n): Promise<boolean> {\n let outcome = false;\n showSpinner(`Importing provider ${providerId} from ${file}...`);\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n try {\n const fileData = JSON.parse(data);\n outcome = await importSocialProvider(providerId, fileData);\n succeedSpinner(\n `Successfully imported provider ${providerId} from ${file}.`\n );\n } catch (error) {\n failSpinner(`Error importing provider ${providerId} from ${file}.`);\n printMessage(error.response?.data || error, 'error');\n }\n });\n return outcome;\n}\n\n/**\n * Import first provider from file\n * @param {String} file import file name\n * @returns {Promise<boolean>} true if first provider was imported successfully, false otherwise\n */\nexport async function importFirstSocialProviderFromFile(\n file: string\n): Promise<boolean> {\n let outcome = false;\n showSpinner(`Importing first provider from ${file}...`);\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n try {\n const fileData = JSON.parse(data);\n outcome = await importFirstSocialProvider(fileData);\n succeedSpinner(`Successfully imported first provider from ${file}.`);\n } catch (error) {\n failSpinner(`Error importing first provider from ${file}.`);\n printMessage(error.response?.data || error, 'error');\n }\n });\n return outcome;\n}\n\n/**\n * Import all providers from file\n * @param {string} file import file name\n * @returns {Promise<boolean>} true if all providers were imported successfully, false otherwise\n */\nexport async function importSocialProvidersFromFile(\n file: string\n): Promise<boolean> {\n let outcome = false;\n showSpinner(`Importing providers from ${file}...`);\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n try {\n const fileData = JSON.parse(data);\n outcome = await importSocialProviders(fileData);\n succeedSpinner(`Successfully imported providers from ${file}.`);\n } catch (error) {\n failSpinner(`Error importing providers from ${file}.`);\n printMessage(error.response?.data || error, 'error');\n }\n });\n return outcome;\n}\n\n/**\n * Import providers from *.idp.json files in current working directory\n */\nexport async function importSocialProvidersFromFiles() {\n const names = fs.readdirSync('.');\n const jsonFiles = names.filter((name) =>\n name.toLowerCase().endsWith('.idp.json')\n );\n\n createProgressBar(jsonFiles.length, 'Importing providers...');\n let total = 0;\n for (const file of jsonFiles) {\n const data = fs.readFileSync(file, 'utf8');\n const fileData = JSON.parse(data);\n const count = Object.keys(fileData.idp).length;\n total += count;\n await importSocialProviders(fileData);\n updateProgressBar(`Imported ${count} provider(s) from ${file}`);\n }\n stopProgressBar(\n `Finished importing ${total} provider(s) from ${jsonFiles.length} file(s).`\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"IdpOps.js","names":["frodo","fs","createProgressBar","debugMessage","failSpinner","printMessage","showSpinner","stopProgressBar","succeedSpinner","updateProgressBar","getRealmString","getTypedFilename","saveJsonToFile","getSocialIdentityProviders","exportSocialProvider","exportSocialProviders","importFirstSocialProvider","importSocialProvider","importSocialProviders","oauth2oidc","external","getOneLineDescription","socialIdpObj","description","_id","_type","getTableHeaderMd","markdown","getTableRowMd","row","enabled","name","listSocialProviders","providers","sort","a","b","localeCompare","forEach","socialIdentityProvider","err","message","exportSocialProviderToFile","providerId","file","fileName","fileData","exportSocialProvidersToFile","exportSocialProvidersToFiles","allIdpsData","length","idpData","error","importSocialProviderFromFile","outcome","readFile","data","JSON","parse","_error$response","response","importFirstSocialProviderFromFile","_error$response2","importSocialProvidersFromFile","_error$response3","importSocialProvidersFromFiles","names","readdirSync","jsonFiles","filter","toLowerCase","endsWith","total","readFileSync","count","Object","keys","idp"],"sources":["../../src/ops/IdpOps.ts"],"sourcesContent":["import { frodo } from '@rockcarver/frodo-lib';\nimport fs from 'fs';\nimport type { SocialIdpSkeleton } from '@rockcarver/frodo-lib/types/api/ApiTypes';\nimport {\n createProgressBar,\n debugMessage,\n failSpinner,\n printMessage,\n showSpinner,\n stopProgressBar,\n succeedSpinner,\n updateProgressBar,\n} from '../utils/Console';\nimport {\n getRealmString,\n getTypedFilename,\n saveJsonToFile,\n} from '../utils/ExportImportUtils';\n\nconst {\n getSocialIdentityProviders,\n exportSocialProvider,\n exportSocialProviders,\n importFirstSocialProvider,\n importSocialProvider,\n importSocialProviders,\n} = frodo.oauth2oidc.external;\n\n/**\n * Get a one-line description of the social idp object\n * @param {SocialIdpSkeleton} socialIdpObj social idp object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescription(socialIdpObj: SocialIdpSkeleton): string {\n const description = `[${socialIdpObj._id['brightCyan']}] ${socialIdpObj._type._id}`;\n return description;\n}\n\n/**\n * Get markdown table header\n * @returns {string} markdown table header\n */\nexport function getTableHeaderMd(): string {\n let markdown = '';\n markdown += '| Name/Id | Status | Type |\\n';\n markdown += '| ------- | ------ | ---- |';\n return markdown;\n}\n\n/**\n * Get a table-row of the social idp in markdown\n * @param {SocialIdpSkeleton} socialIdpObj social idp object to describe\n * @returns {string} a table-row of the social idp in markdown\n */\nexport function getTableRowMd(socialIdpObj: SocialIdpSkeleton): string {\n const row = `| ${socialIdpObj._id} | ${\n socialIdpObj.enabled === false\n ? ':o: `disabled`'\n : ':white_check_mark: `enabled`'\n } | ${socialIdpObj._type.name} |`;\n return row;\n}\n\n/**\n * List providers\n */\nexport async function listSocialProviders() {\n try {\n const providers = await getSocialIdentityProviders();\n providers.sort((a, b) => a._id.localeCompare(b._id));\n providers.forEach((socialIdentityProvider) => {\n printMessage(`${socialIdentityProvider._id}`, 'data');\n });\n } catch (err) {\n printMessage(`listSocialProviders ERROR: ${err.message}`, 'error');\n printMessage(err, 'error');\n }\n}\n\n/**\n * Export provider by id\n * @param {string} providerId provider id/name\n * @param {string} file optional export file name\n */\nexport async function exportSocialProviderToFile(\n providerId: string,\n file = ''\n) {\n debugMessage(`cli.IdpOps.exportSocialProviderToFile: start`);\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(providerId, 'idp');\n }\n createProgressBar(1, `Exporting ${providerId}`);\n try {\n updateProgressBar(`Writing file ${fileName}`);\n const fileData = await exportSocialProvider(providerId);\n saveJsonToFile(fileData, fileName);\n stopProgressBar(\n `Exported ${providerId['brightCyan']} to ${fileName['brightCyan']}.`\n );\n } catch (err) {\n stopProgressBar(`${err}`);\n printMessage(`${err}`, 'error');\n }\n debugMessage(`cli.IdpOps.exportSocialProviderToFile: end`);\n}\n\n/**\n * Export all providers\n * @param {string} file optional export file name\n */\nexport async function exportSocialProvidersToFile(file = '') {\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(`all${getRealmString()}Providers`, 'idp');\n }\n const fileData = await exportSocialProviders();\n saveJsonToFile(fileData, fileName);\n}\n\n/**\n * Export all providers to individual files\n */\nexport async function exportSocialProvidersToFiles() {\n debugMessage(`cli.IdpOps.exportSocialProvidersToFiles: start`);\n try {\n const allIdpsData = await getSocialIdentityProviders();\n createProgressBar(allIdpsData.length, 'Exporting providers');\n for (const idpData of allIdpsData) {\n try {\n const fileName = getTypedFilename(idpData._id, 'idp');\n const fileData = await exportSocialProvider(idpData._id);\n saveJsonToFile(fileData, fileName);\n updateProgressBar(`Exported provider ${idpData._id}`);\n } catch (error) {\n printMessage(`Error exporting ${idpData._id}: ${error}`, 'error');\n }\n }\n stopProgressBar(`${allIdpsData.length} providers exported.`);\n } catch (error) {\n stopProgressBar(`${error}`);\n printMessage(`${error}`, 'error');\n }\n debugMessage(`cli.IdpOps.exportSocialProvidersToFiles: end`);\n}\n\n/**\n * Import provider by id/name\n * @param {string} providerId provider id/name\n * @param {string} file import file name\n * @returns {Promise<boolean>} true if provider was imported successfully, false otherwise\n */\nexport async function importSocialProviderFromFile(\n providerId: string,\n file: string\n): Promise<boolean> {\n let outcome = false;\n showSpinner(`Importing provider ${providerId} from ${file}...`);\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n try {\n const fileData = JSON.parse(data);\n outcome = await importSocialProvider(providerId, fileData);\n succeedSpinner(\n `Successfully imported provider ${providerId} from ${file}.`\n );\n } catch (error) {\n failSpinner(`Error importing provider ${providerId} from ${file}.`);\n printMessage(error.response?.data || error, 'error');\n }\n });\n return outcome;\n}\n\n/**\n * Import first provider from file\n * @param {String} file import file name\n * @returns {Promise<boolean>} true if first provider was imported successfully, false otherwise\n */\nexport async function importFirstSocialProviderFromFile(\n file: string\n): Promise<boolean> {\n let outcome = false;\n showSpinner(`Importing first provider from ${file}...`);\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n try {\n const fileData = JSON.parse(data);\n outcome = await importFirstSocialProvider(fileData);\n succeedSpinner(`Successfully imported first provider from ${file}.`);\n } catch (error) {\n failSpinner(`Error importing first provider from ${file}.`);\n printMessage(error.response?.data || error, 'error');\n }\n });\n return outcome;\n}\n\n/**\n * Import all providers from file\n * @param {string} file import file name\n * @returns {Promise<boolean>} true if all providers were imported successfully, false otherwise\n */\nexport async function importSocialProvidersFromFile(\n file: string\n): Promise<boolean> {\n let outcome = false;\n showSpinner(`Importing providers from ${file}...`);\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n try {\n const fileData = JSON.parse(data);\n outcome = await importSocialProviders(fileData);\n succeedSpinner(`Successfully imported providers from ${file}.`);\n } catch (error) {\n failSpinner(`Error importing providers from ${file}.`);\n printMessage(error.response?.data || error, 'error');\n }\n });\n return outcome;\n}\n\n/**\n * Import providers from *.idp.json files in current working directory\n */\nexport async function importSocialProvidersFromFiles() {\n const names = fs.readdirSync('.');\n const jsonFiles = names.filter((name) =>\n name.toLowerCase().endsWith('.idp.json')\n );\n\n createProgressBar(jsonFiles.length, 'Importing providers...');\n let total = 0;\n for (const file of jsonFiles) {\n const data = fs.readFileSync(file, 'utf8');\n const fileData = JSON.parse(data);\n const count = Object.keys(fileData.idp).length;\n total += count;\n await importSocialProviders(fileData);\n updateProgressBar(`Imported ${count} provider(s) from ${file}`);\n }\n stopProgressBar(\n `Finished importing ${total} provider(s) from ${jsonFiles.length} file(s).`\n );\n}\n"],"mappings":"AAAA,SAASA,KAAK,QAAQ,uBAAuB;AAC7C,OAAOC,EAAE,MAAM,IAAI;AAEnB,SACEC,iBAAiB,EACjBC,YAAY,EACZC,WAAW,EACXC,YAAY,EACZC,WAAW,EACXC,eAAe,EACfC,cAAc,EACdC,iBAAiB,QACZ,kBAAkB;AACzB,SACEC,cAAc,EACdC,gBAAgB,EAChBC,cAAc,QACT,4BAA4B;AAEnC,MAAM;EACJC,0BAA0B;EAC1BC,oBAAoB;EACpBC,qBAAqB;EACrBC,yBAAyB;EACzBC,oBAAoB;EACpBC;AACF,CAAC,GAAGlB,KAAK,CAACmB,UAAU,CAACC,QAAQ;;AAE7B;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,qBAAqBA,CAACC,YAA+B,EAAU;EAC7E,MAAMC,WAAW,GAAI,IAAGD,YAAY,CAACE,GAAG,CAAC,YAAY,CAAE,KAAIF,YAAY,CAACG,KAAK,CAACD,GAAI,EAAC;EACnF,OAAOD,WAAW;AACpB;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASG,gBAAgBA,CAAA,EAAW;EACzC,IAAIC,QAAQ,GAAG,EAAE;EACjBA,QAAQ,IAAI,+BAA+B;EAC3CA,QAAQ,IAAI,6BAA6B;EACzC,OAAOA,QAAQ;AACjB;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,aAAaA,CAACN,YAA+B,EAAU;EACrE,MAAMO,GAAG,GAAI,KAAIP,YAAY,CAACE,GAAI,MAChCF,YAAY,CAACQ,OAAO,KAAK,KAAK,GAC1B,gBAAgB,GAChB,8BACL,MAAKR,YAAY,CAACG,KAAK,CAACM,IAAK,IAAG;EACjC,OAAOF,GAAG;AACZ;;AAEA;AACA;AACA;AACA,OAAO,eAAeG,mBAAmBA,CAAA,EAAG;EAC1C,IAAI;IACF,MAAMC,SAAS,GAAG,MAAMpB,0BAA0B,CAAC,CAAC;IACpDoB,SAAS,CAACC,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,CAACX,GAAG,CAACa,aAAa,CAACD,CAAC,CAACZ,GAAG,CAAC,CAAC;IACpDS,SAAS,CAACK,OAAO,CAAEC,sBAAsB,IAAK;MAC5ClC,YAAY,CAAE,GAAEkC,sBAAsB,CAACf,GAAI,EAAC,EAAE,MAAM,CAAC;IACvD,CAAC,CAAC;EACJ,CAAC,CAAC,OAAOgB,GAAG,EAAE;IACZnC,YAAY,CAAE,8BAA6BmC,GAAG,CAACC,OAAQ,EAAC,EAAE,OAAO,CAAC;IAClEpC,YAAY,CAACmC,GAAG,EAAE,OAAO,CAAC;EAC5B;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAeE,0BAA0BA,CAC9CC,UAAkB,EAClBC,IAAI,GAAG,EAAE,EACT;EACAzC,YAAY,CAAE,8CAA6C,CAAC;EAC5D,IAAI0C,QAAQ,GAAGD,IAAI;EACnB,IAAI,CAACC,QAAQ,EAAE;IACbA,QAAQ,GAAGlC,gBAAgB,CAACgC,UAAU,EAAE,KAAK,CAAC;EAChD;EACAzC,iBAAiB,CAAC,CAAC,EAAG,aAAYyC,UAAW,EAAC,CAAC;EAC/C,IAAI;IACFlC,iBAAiB,CAAE,gBAAeoC,QAAS,EAAC,CAAC;IAC7C,MAAMC,QAAQ,GAAG,MAAMhC,oBAAoB,CAAC6B,UAAU,CAAC;IACvD/B,cAAc,CAACkC,QAAQ,EAAED,QAAQ,CAAC;IAClCtC,eAAe,CACZ,YAAWoC,UAAU,CAAC,YAAY,CAAE,OAAME,QAAQ,CAAC,YAAY,CAAE,GACpE,CAAC;EACH,CAAC,CAAC,OAAOL,GAAG,EAAE;IACZjC,eAAe,CAAE,GAAEiC,GAAI,EAAC,CAAC;IACzBnC,YAAY,CAAE,GAAEmC,GAAI,EAAC,EAAE,OAAO,CAAC;EACjC;EACArC,YAAY,CAAE,4CAA2C,CAAC;AAC5D;;AAEA;AACA;AACA;AACA;AACA,OAAO,eAAe4C,2BAA2BA,CAACH,IAAI,GAAG,EAAE,EAAE;EAC3D,IAAIC,QAAQ,GAAGD,IAAI;EACnB,IAAI,CAACC,QAAQ,EAAE;IACbA,QAAQ,GAAGlC,gBAAgB,CAAE,MAAKD,cAAc,CAAC,CAAE,WAAU,EAAE,KAAK,CAAC;EACvE;EACA,MAAMoC,QAAQ,GAAG,MAAM/B,qBAAqB,CAAC,CAAC;EAC9CH,cAAc,CAACkC,QAAQ,EAAED,QAAQ,CAAC;AACpC;;AAEA;AACA;AACA;AACA,OAAO,eAAeG,4BAA4BA,CAAA,EAAG;EACnD7C,YAAY,CAAE,gDAA+C,CAAC;EAC9D,IAAI;IACF,MAAM8C,WAAW,GAAG,MAAMpC,0BAA0B,CAAC,CAAC;IACtDX,iBAAiB,CAAC+C,WAAW,CAACC,MAAM,EAAE,qBAAqB,CAAC;IAC5D,KAAK,MAAMC,OAAO,IAAIF,WAAW,EAAE;MACjC,IAAI;QACF,MAAMJ,QAAQ,GAAGlC,gBAAgB,CAACwC,OAAO,CAAC3B,GAAG,EAAE,KAAK,CAAC;QACrD,MAAMsB,QAAQ,GAAG,MAAMhC,oBAAoB,CAACqC,OAAO,CAAC3B,GAAG,CAAC;QACxDZ,cAAc,CAACkC,QAAQ,EAAED,QAAQ,CAAC;QAClCpC,iBAAiB,CAAE,qBAAoB0C,OAAO,CAAC3B,GAAI,EAAC,CAAC;MACvD,CAAC,CAAC,OAAO4B,KAAK,EAAE;QACd/C,YAAY,CAAE,mBAAkB8C,OAAO,CAAC3B,GAAI,KAAI4B,KAAM,EAAC,EAAE,OAAO,CAAC;MACnE;IACF;IACA7C,eAAe,CAAE,GAAE0C,WAAW,CAACC,MAAO,sBAAqB,CAAC;EAC9D,CAAC,CAAC,OAAOE,KAAK,EAAE;IACd7C,eAAe,CAAE,GAAE6C,KAAM,EAAC,CAAC;IAC3B/C,YAAY,CAAE,GAAE+C,KAAM,EAAC,EAAE,OAAO,CAAC;EACnC;EACAjD,YAAY,CAAE,8CAA6C,CAAC;AAC9D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAekD,4BAA4BA,CAChDV,UAAkB,EAClBC,IAAY,EACM;EAClB,IAAIU,OAAO,GAAG,KAAK;EACnBhD,WAAW,CAAE,sBAAqBqC,UAAW,SAAQC,IAAK,KAAI,CAAC;EAC/D3C,EAAE,CAACsD,QAAQ,CAACX,IAAI,EAAE,MAAM,EAAE,OAAOJ,GAAG,EAAEgB,IAAI,KAAK;IAC7C,IAAIhB,GAAG,EAAE,MAAMA,GAAG;IAClB,IAAI;MACF,MAAMM,QAAQ,GAAGW,IAAI,CAACC,KAAK,CAACF,IAAI,CAAC;MACjCF,OAAO,GAAG,MAAMrC,oBAAoB,CAAC0B,UAAU,EAAEG,QAAQ,CAAC;MAC1DtC,cAAc,CACX,kCAAiCmC,UAAW,SAAQC,IAAK,GAC5D,CAAC;IACH,CAAC,CAAC,OAAOQ,KAAK,EAAE;MAAA,IAAAO,eAAA;MACdvD,WAAW,CAAE,4BAA2BuC,UAAW,SAAQC,IAAK,GAAE,CAAC;MACnEvC,YAAY,CAAC,EAAAsD,eAAA,GAAAP,KAAK,CAACQ,QAAQ,cAAAD,eAAA,uBAAdA,eAAA,CAAgBH,IAAI,KAAIJ,KAAK,EAAE,OAAO,CAAC;IACtD;EACF,CAAC,CAAC;EACF,OAAOE,OAAO;AAChB;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAeO,iCAAiCA,CACrDjB,IAAY,EACM;EAClB,IAAIU,OAAO,GAAG,KAAK;EACnBhD,WAAW,CAAE,iCAAgCsC,IAAK,KAAI,CAAC;EACvD3C,EAAE,CAACsD,QAAQ,CAACX,IAAI,EAAE,MAAM,EAAE,OAAOJ,GAAG,EAAEgB,IAAI,KAAK;IAC7C,IAAIhB,GAAG,EAAE,MAAMA,GAAG;IAClB,IAAI;MACF,MAAMM,QAAQ,GAAGW,IAAI,CAACC,KAAK,CAACF,IAAI,CAAC;MACjCF,OAAO,GAAG,MAAMtC,yBAAyB,CAAC8B,QAAQ,CAAC;MACnDtC,cAAc,CAAE,6CAA4CoC,IAAK,GAAE,CAAC;IACtE,CAAC,CAAC,OAAOQ,KAAK,EAAE;MAAA,IAAAU,gBAAA;MACd1D,WAAW,CAAE,uCAAsCwC,IAAK,GAAE,CAAC;MAC3DvC,YAAY,CAAC,EAAAyD,gBAAA,GAAAV,KAAK,CAACQ,QAAQ,cAAAE,gBAAA,uBAAdA,gBAAA,CAAgBN,IAAI,KAAIJ,KAAK,EAAE,OAAO,CAAC;IACtD;EACF,CAAC,CAAC;EACF,OAAOE,OAAO;AAChB;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAeS,6BAA6BA,CACjDnB,IAAY,EACM;EAClB,IAAIU,OAAO,GAAG,KAAK;EACnBhD,WAAW,CAAE,4BAA2BsC,IAAK,KAAI,CAAC;EAClD3C,EAAE,CAACsD,QAAQ,CAACX,IAAI,EAAE,MAAM,EAAE,OAAOJ,GAAG,EAAEgB,IAAI,KAAK;IAC7C,IAAIhB,GAAG,EAAE,MAAMA,GAAG;IAClB,IAAI;MACF,MAAMM,QAAQ,GAAGW,IAAI,CAACC,KAAK,CAACF,IAAI,CAAC;MACjCF,OAAO,GAAG,MAAMpC,qBAAqB,CAAC4B,QAAQ,CAAC;MAC/CtC,cAAc,CAAE,wCAAuCoC,IAAK,GAAE,CAAC;IACjE,CAAC,CAAC,OAAOQ,KAAK,EAAE;MAAA,IAAAY,gBAAA;MACd5D,WAAW,CAAE,kCAAiCwC,IAAK,GAAE,CAAC;MACtDvC,YAAY,CAAC,EAAA2D,gBAAA,GAAAZ,KAAK,CAACQ,QAAQ,cAAAI,gBAAA,uBAAdA,gBAAA,CAAgBR,IAAI,KAAIJ,KAAK,EAAE,OAAO,CAAC;IACtD;EACF,CAAC,CAAC;EACF,OAAOE,OAAO;AAChB;;AAEA;AACA;AACA;AACA,OAAO,eAAeW,8BAA8BA,CAAA,EAAG;EACrD,MAAMC,KAAK,GAAGjE,EAAE,CAACkE,WAAW,CAAC,GAAG,CAAC;EACjC,MAAMC,SAAS,GAAGF,KAAK,CAACG,MAAM,CAAEtC,IAAI,IAClCA,IAAI,CAACuC,WAAW,CAAC,CAAC,CAACC,QAAQ,CAAC,WAAW,CACzC,CAAC;EAEDrE,iBAAiB,CAACkE,SAAS,CAAClB,MAAM,EAAE,wBAAwB,CAAC;EAC7D,IAAIsB,KAAK,GAAG,CAAC;EACb,KAAK,MAAM5B,IAAI,IAAIwB,SAAS,EAAE;IAC5B,MAAMZ,IAAI,GAAGvD,EAAE,CAACwE,YAAY,CAAC7B,IAAI,EAAE,MAAM,CAAC;IAC1C,MAAME,QAAQ,GAAGW,IAAI,CAACC,KAAK,CAACF,IAAI,CAAC;IACjC,MAAMkB,KAAK,GAAGC,MAAM,CAACC,IAAI,CAAC9B,QAAQ,CAAC+B,GAAG,CAAC,CAAC3B,MAAM;IAC9CsB,KAAK,IAAIE,KAAK;IACd,MAAMxD,qBAAqB,CAAC4B,QAAQ,CAAC;IACrCrC,iBAAiB,CAAE,YAAWiE,KAAM,qBAAoB9B,IAAK,EAAC,CAAC;EACjE;EACArC,eAAe,CACZ,sBAAqBiE,KAAM,qBAAoBJ,SAAS,CAAClB,MAAO,WACnE,CAAC;AACH"}