@rockcarver/frodo-cli 2.0.0-2 → 2.0.0-21

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 (453) hide show
  1. package/CHANGELOG.md +186 -3
  2. package/esm/app.js +14 -5
  3. package/esm/app.js.map +1 -1
  4. package/esm/cli/FrodoCommand.js +18 -4
  5. package/esm/cli/FrodoCommand.js.map +1 -1
  6. package/esm/cli/_template/something-delete.js +7 -4
  7. package/esm/cli/_template/something-delete.js.map +1 -1
  8. package/esm/cli/_template/something-describe.js +7 -4
  9. package/esm/cli/_template/something-describe.js.map +1 -1
  10. package/esm/cli/_template/something-else-delete.js +7 -4
  11. package/esm/cli/_template/something-else-delete.js.map +1 -1
  12. package/esm/cli/_template/something-else-describe.js +7 -4
  13. package/esm/cli/_template/something-else-describe.js.map +1 -1
  14. package/esm/cli/_template/something-else-export.js +7 -4
  15. package/esm/cli/_template/something-else-export.js.map +1 -1
  16. package/esm/cli/_template/something-else-import.js +7 -4
  17. package/esm/cli/_template/something-else-import.js.map +1 -1
  18. package/esm/cli/_template/something-else-list.js +7 -4
  19. package/esm/cli/_template/something-else-list.js.map +1 -1
  20. package/esm/cli/_template/something-else.js +1 -1
  21. package/esm/cli/_template/something-else.js.map +1 -1
  22. package/esm/cli/_template/something-export.js +7 -4
  23. package/esm/cli/_template/something-export.js.map +1 -1
  24. package/esm/cli/_template/something-import.js +7 -4
  25. package/esm/cli/_template/something-import.js.map +1 -1
  26. package/esm/cli/_template/something-list.js +7 -4
  27. package/esm/cli/_template/something-list.js.map +1 -1
  28. package/esm/cli/_template/something-other-delete.js +7 -4
  29. package/esm/cli/_template/something-other-delete.js.map +1 -1
  30. package/esm/cli/_template/something-other-describe.js +7 -4
  31. package/esm/cli/_template/something-other-describe.js.map +1 -1
  32. package/esm/cli/_template/something-other-export.js +7 -4
  33. package/esm/cli/_template/something-other-export.js.map +1 -1
  34. package/esm/cli/_template/something-other-import.js +7 -4
  35. package/esm/cli/_template/something-other-import.js.map +1 -1
  36. package/esm/cli/_template/something-other-list.js +7 -4
  37. package/esm/cli/_template/something-other-list.js.map +1 -1
  38. package/esm/cli/_template/something-other.js +1 -1
  39. package/esm/cli/_template/something-other.js.map +1 -1
  40. package/esm/cli/_template/something.js +2 -2
  41. package/esm/cli/_template/something.js.map +1 -1
  42. package/esm/cli/admin/admin-add-autoid-static-user-mapping.js +10 -4
  43. package/esm/cli/admin/admin-add-autoid-static-user-mapping.js.map +1 -1
  44. package/esm/cli/admin/admin-create-oauth2-client-with-admin-privileges.js +14 -7
  45. package/esm/cli/admin/admin-create-oauth2-client-with-admin-privileges.js.map +1 -1
  46. package/esm/cli/admin/admin-federation-export.js +45 -0
  47. package/esm/cli/admin/admin-federation-export.js.map +1 -0
  48. package/esm/cli/admin/admin-federation-import.js +49 -0
  49. package/esm/cli/admin/admin-federation-import.js.map +1 -0
  50. package/esm/cli/admin/admin-federation-list.js +29 -0
  51. package/esm/cli/admin/admin-federation-list.js.map +1 -0
  52. package/esm/cli/admin/admin-federation.js +13 -0
  53. package/esm/cli/admin/admin-federation.js.map +1 -0
  54. package/esm/cli/admin/admin-get-access-token.js +12 -6
  55. package/esm/cli/admin/admin-get-access-token.js.map +1 -1
  56. package/esm/cli/admin/admin-grant-oauth2-client-admin-privileges.js +12 -6
  57. package/esm/cli/admin/admin-grant-oauth2-client-admin-privileges.js.map +1 -1
  58. package/esm/cli/admin/admin-hide-generic-extension-attributes.js +11 -5
  59. package/esm/cli/admin/admin-hide-generic-extension-attributes.js.map +1 -1
  60. package/esm/cli/admin/admin-list-oauth2-clients-with-admin-privileges.js +10 -4
  61. package/esm/cli/admin/admin-list-oauth2-clients-with-admin-privileges.js.map +1 -1
  62. package/esm/cli/admin/admin-list-oauth2-clients-with-custom-privileges.js +10 -4
  63. package/esm/cli/admin/admin-list-oauth2-clients-with-custom-privileges.js.map +1 -1
  64. package/esm/cli/admin/admin-list-static-user-mappings.js +11 -5
  65. package/esm/cli/admin/admin-list-static-user-mappings.js.map +1 -1
  66. package/esm/cli/admin/admin-remove-static-user-mapping.js +12 -5
  67. package/esm/cli/admin/admin-remove-static-user-mapping.js.map +1 -1
  68. package/esm/cli/admin/admin-repair-org-model.js +11 -5
  69. package/esm/cli/admin/admin-repair-org-model.js.map +1 -1
  70. package/esm/cli/admin/admin-revoke-oauth2-client-admin-privileges.js +12 -6
  71. package/esm/cli/admin/admin-revoke-oauth2-client-admin-privileges.js.map +1 -1
  72. package/esm/cli/admin/admin-show-generic-extension-attributes.js +11 -5
  73. package/esm/cli/admin/admin-show-generic-extension-attributes.js.map +1 -1
  74. package/esm/cli/admin/admin.js +3 -2
  75. package/esm/cli/admin/admin.js.map +1 -1
  76. package/esm/cli/agent/agent-delete.js +13 -6
  77. package/esm/cli/agent/agent-delete.js.map +1 -1
  78. package/esm/cli/agent/agent-describe.js +7 -4
  79. package/esm/cli/agent/agent-describe.js.map +1 -1
  80. package/esm/cli/agent/agent-export.js +8 -5
  81. package/esm/cli/agent/agent-export.js.map +1 -1
  82. package/esm/cli/agent/agent-gateway-delete.js +13 -6
  83. package/esm/cli/agent/agent-gateway-delete.js.map +1 -1
  84. package/esm/cli/agent/agent-gateway-describe.js +7 -4
  85. package/esm/cli/agent/agent-gateway-describe.js.map +1 -1
  86. package/esm/cli/agent/agent-gateway-export.js +8 -5
  87. package/esm/cli/agent/agent-gateway-export.js.map +1 -1
  88. package/esm/cli/agent/agent-gateway-import.js +8 -5
  89. package/esm/cli/agent/agent-gateway-import.js.map +1 -1
  90. package/esm/cli/agent/agent-gateway-list.js +7 -4
  91. package/esm/cli/agent/agent-gateway-list.js.map +1 -1
  92. package/esm/cli/agent/agent-gateway.js +1 -1
  93. package/esm/cli/agent/agent-gateway.js.map +1 -1
  94. package/esm/cli/agent/agent-import.js +8 -5
  95. package/esm/cli/agent/agent-import.js.map +1 -1
  96. package/esm/cli/agent/agent-java-delete.js +13 -6
  97. package/esm/cli/agent/agent-java-delete.js.map +1 -1
  98. package/esm/cli/agent/agent-java-describe.js +7 -4
  99. package/esm/cli/agent/agent-java-describe.js.map +1 -1
  100. package/esm/cli/agent/agent-java-export.js +8 -5
  101. package/esm/cli/agent/agent-java-export.js.map +1 -1
  102. package/esm/cli/agent/agent-java-import.js +8 -5
  103. package/esm/cli/agent/agent-java-import.js.map +1 -1
  104. package/esm/cli/agent/agent-java-list.js +7 -4
  105. package/esm/cli/agent/agent-java-list.js.map +1 -1
  106. package/esm/cli/agent/agent-java.js +1 -1
  107. package/esm/cli/agent/agent-java.js.map +1 -1
  108. package/esm/cli/agent/agent-list.js +7 -4
  109. package/esm/cli/agent/agent-list.js.map +1 -1
  110. package/esm/cli/agent/agent-web-delete.js +13 -6
  111. package/esm/cli/agent/agent-web-delete.js.map +1 -1
  112. package/esm/cli/agent/agent-web-describe.js +7 -4
  113. package/esm/cli/agent/agent-web-describe.js.map +1 -1
  114. package/esm/cli/agent/agent-web-export.js +8 -5
  115. package/esm/cli/agent/agent-web-export.js.map +1 -1
  116. package/esm/cli/agent/agent-web-import.js +8 -5
  117. package/esm/cli/agent/agent-web-import.js.map +1 -1
  118. package/esm/cli/agent/agent-web-list.js +7 -4
  119. package/esm/cli/agent/agent-web-list.js.map +1 -1
  120. package/esm/cli/agent/agent-web.js +1 -1
  121. package/esm/cli/agent/agent-web.js.map +1 -1
  122. package/esm/cli/agent/agent.js +2 -2
  123. package/esm/cli/agent/agent.js.map +1 -1
  124. package/esm/cli/app/app-delete.js +27 -8
  125. package/esm/cli/app/app-delete.js.map +1 -1
  126. package/esm/cli/app/app-describe.js +9 -5
  127. package/esm/cli/app/app-describe.js.map +1 -1
  128. package/esm/cli/app/app-export.js +17 -13
  129. package/esm/cli/app/app-export.js.map +1 -1
  130. package/esm/cli/app/app-import.js +21 -17
  131. package/esm/cli/app/app-import.js.map +1 -1
  132. package/esm/cli/app/app-list.js +12 -8
  133. package/esm/cli/app/app-list.js.map +1 -1
  134. package/esm/cli/app/app.js +8 -12
  135. package/esm/cli/app/app.js.map +1 -1
  136. package/esm/cli/authz/authz-policy-delete.js +10 -7
  137. package/esm/cli/authz/authz-policy-delete.js.map +1 -1
  138. package/esm/cli/authz/authz-policy-describe.js +8 -5
  139. package/esm/cli/authz/authz-policy-describe.js.map +1 -1
  140. package/esm/cli/authz/authz-policy-export.js +12 -9
  141. package/esm/cli/authz/authz-policy-export.js.map +1 -1
  142. package/esm/cli/authz/authz-policy-import.js +10 -7
  143. package/esm/cli/authz/authz-policy-import.js.map +1 -1
  144. package/esm/cli/authz/authz-policy-list.js +9 -6
  145. package/esm/cli/authz/authz-policy-list.js.map +1 -1
  146. package/esm/cli/authz/authz-policy.js +1 -1
  147. package/esm/cli/authz/authz-policy.js.map +1 -1
  148. package/esm/cli/authz/authz-set-delete.js +9 -6
  149. package/esm/cli/authz/authz-set-delete.js.map +1 -1
  150. package/esm/cli/authz/authz-set-describe.js +8 -5
  151. package/esm/cli/authz/authz-set-describe.js.map +1 -1
  152. package/esm/cli/authz/authz-set-export.js +10 -7
  153. package/esm/cli/authz/authz-set-export.js.map +1 -1
  154. package/esm/cli/authz/authz-set-import.js +10 -7
  155. package/esm/cli/authz/authz-set-import.js.map +1 -1
  156. package/esm/cli/authz/authz-set-list.js +7 -4
  157. package/esm/cli/authz/authz-set-list.js.map +1 -1
  158. package/esm/cli/authz/authz-set.js +1 -1
  159. package/esm/cli/authz/authz-set.js.map +1 -1
  160. package/esm/cli/authz/authz-type-delete.js +10 -7
  161. package/esm/cli/authz/authz-type-delete.js.map +1 -1
  162. package/esm/cli/authz/authz-type-describe.js +9 -6
  163. package/esm/cli/authz/authz-type-describe.js.map +1 -1
  164. package/esm/cli/authz/authz-type-export.js +11 -8
  165. package/esm/cli/authz/authz-type-export.js.map +1 -1
  166. package/esm/cli/authz/authz-type-import.js +12 -9
  167. package/esm/cli/authz/authz-type-import.js.map +1 -1
  168. package/esm/cli/authz/authz-type-list.js +8 -5
  169. package/esm/cli/authz/authz-type-list.js.map +1 -1
  170. package/esm/cli/authz/authz-type.js +1 -1
  171. package/esm/cli/authz/authz-type.js.map +1 -1
  172. package/esm/cli/authz/authz.js +2 -2
  173. package/esm/cli/authz/authz.js.map +1 -1
  174. package/esm/cli/conn/conn-delete.js +2 -2
  175. package/esm/cli/conn/conn-delete.js.map +1 -1
  176. package/esm/cli/conn/conn-describe.js +2 -2
  177. package/esm/cli/conn/conn-describe.js.map +1 -1
  178. package/esm/cli/conn/conn-list.js +2 -2
  179. package/esm/cli/conn/conn-list.js.map +1 -1
  180. package/esm/cli/conn/conn-save.js +31 -15
  181. package/esm/cli/conn/conn-save.js.map +1 -1
  182. package/esm/cli/conn/conn.js +2 -2
  183. package/esm/cli/conn/conn.js.map +1 -1
  184. package/esm/cli/email/email-template-export.js +10 -7
  185. package/esm/cli/email/email-template-export.js.map +1 -1
  186. package/esm/cli/email/email-template-import.js +11 -8
  187. package/esm/cli/email/email-template-import.js.map +1 -1
  188. package/esm/cli/email/email-template-list.js +8 -5
  189. package/esm/cli/email/email-template-list.js.map +1 -1
  190. package/esm/cli/email/email-template.js +1 -1
  191. package/esm/cli/email/email-template.js.map +1 -1
  192. package/esm/cli/email/email.js +2 -2
  193. package/esm/cli/email/email.js.map +1 -1
  194. package/esm/cli/esv/esv-apply.js +18 -8
  195. package/esm/cli/esv/esv-apply.js.map +1 -1
  196. package/esm/cli/esv/esv-secret-create.js +8 -5
  197. package/esm/cli/esv/esv-secret-create.js.map +1 -1
  198. package/esm/cli/esv/esv-secret-delete.js +9 -6
  199. package/esm/cli/esv/esv-secret-delete.js.map +1 -1
  200. package/esm/cli/esv/esv-secret-describe.js +8 -5
  201. package/esm/cli/esv/esv-secret-describe.js.map +1 -1
  202. package/esm/cli/esv/esv-secret-export.js +7 -4
  203. package/esm/cli/esv/esv-secret-export.js.map +1 -1
  204. package/esm/cli/esv/esv-secret-import.js +7 -4
  205. package/esm/cli/esv/esv-secret-import.js.map +1 -1
  206. package/esm/cli/esv/esv-secret-list.js +8 -5
  207. package/esm/cli/esv/esv-secret-list.js.map +1 -1
  208. package/esm/cli/esv/esv-secret-set.js +8 -5
  209. package/esm/cli/esv/esv-secret-set.js.map +1 -1
  210. package/esm/cli/esv/esv-secret-version-activate.js +8 -5
  211. package/esm/cli/esv/esv-secret-version-activate.js.map +1 -1
  212. package/esm/cli/esv/esv-secret-version-create.js +9 -6
  213. package/esm/cli/esv/esv-secret-version-create.js.map +1 -1
  214. package/esm/cli/esv/esv-secret-version-deactivate.js +8 -5
  215. package/esm/cli/esv/esv-secret-version-deactivate.js.map +1 -1
  216. package/esm/cli/esv/esv-secret-version-delete.js +9 -6
  217. package/esm/cli/esv/esv-secret-version-delete.js.map +1 -1
  218. package/esm/cli/esv/esv-secret-version-list.js +8 -5
  219. package/esm/cli/esv/esv-secret-version-list.js.map +1 -1
  220. package/esm/cli/esv/esv-secret-version.js +1 -1
  221. package/esm/cli/esv/esv-secret-version.js.map +1 -1
  222. package/esm/cli/esv/esv-secret.js +1 -1
  223. package/esm/cli/esv/esv-secret.js.map +1 -1
  224. package/esm/cli/esv/esv-variable-create.js +10 -6
  225. package/esm/cli/esv/esv-variable-create.js.map +1 -1
  226. package/esm/cli/esv/esv-variable-delete.js +9 -6
  227. package/esm/cli/esv/esv-variable-delete.js.map +1 -1
  228. package/esm/cli/esv/esv-variable-describe.js +8 -5
  229. package/esm/cli/esv/esv-variable-describe.js.map +1 -1
  230. package/esm/cli/esv/esv-variable-export.js +7 -4
  231. package/esm/cli/esv/esv-variable-export.js.map +1 -1
  232. package/esm/cli/esv/esv-variable-import.js +7 -4
  233. package/esm/cli/esv/esv-variable-import.js.map +1 -1
  234. package/esm/cli/esv/esv-variable-list.js +8 -5
  235. package/esm/cli/esv/esv-variable-list.js.map +1 -1
  236. package/esm/cli/esv/esv-variable-set.js +8 -5
  237. package/esm/cli/esv/esv-variable-set.js.map +1 -1
  238. package/esm/cli/esv/esv-variable.js +1 -1
  239. package/esm/cli/esv/esv-variable.js.map +1 -1
  240. package/esm/cli/esv/esv.js +2 -2
  241. package/esm/cli/esv/esv.js.map +1 -1
  242. package/esm/cli/idm/idm-count.js +9 -6
  243. package/esm/cli/idm/idm-count.js.map +1 -1
  244. package/esm/cli/idm/idm-export.js +10 -7
  245. package/esm/cli/idm/idm-export.js.map +1 -1
  246. package/esm/cli/idm/idm-import.js +11 -8
  247. package/esm/cli/idm/idm-import.js.map +1 -1
  248. package/esm/cli/idm/idm-list.js +7 -4
  249. package/esm/cli/idm/idm-list.js.map +1 -1
  250. package/esm/cli/idm/idm.js +2 -2
  251. package/esm/cli/idm/idm.js.map +1 -1
  252. package/esm/cli/idp/idp-export.js +11 -8
  253. package/esm/cli/idp/idp-export.js.map +1 -1
  254. package/esm/cli/idp/idp-import.js +15 -12
  255. package/esm/cli/idp/idp-import.js.map +1 -1
  256. package/esm/cli/idp/idp-list.js +7 -4
  257. package/esm/cli/idp/idp-list.js.map +1 -1
  258. package/esm/cli/idp/idp.js +2 -2
  259. package/esm/cli/idp/idp.js.map +1 -1
  260. package/esm/cli/info/info.js +16 -10
  261. package/esm/cli/info/info.js.map +1 -1
  262. package/esm/cli/journey/journey-delete.js +8 -5
  263. package/esm/cli/journey/journey-delete.js.map +1 -1
  264. package/esm/cli/journey/journey-describe.js +18 -10
  265. package/esm/cli/journey/journey-describe.js.map +1 -1
  266. package/esm/cli/journey/journey-disable.js +12 -6
  267. package/esm/cli/journey/journey-disable.js.map +1 -1
  268. package/esm/cli/journey/journey-enable.js +12 -6
  269. package/esm/cli/journey/journey-enable.js.map +1 -1
  270. package/esm/cli/journey/journey-export.js +10 -7
  271. package/esm/cli/journey/journey-export.js.map +1 -1
  272. package/esm/cli/journey/journey-import.js +11 -8
  273. package/esm/cli/journey/journey-import.js.map +1 -1
  274. package/esm/cli/journey/journey-list.js +6 -3
  275. package/esm/cli/journey/journey-list.js.map +1 -1
  276. package/esm/cli/journey/journey-prune.js +23 -12
  277. package/esm/cli/journey/journey-prune.js.map +1 -1
  278. package/esm/cli/journey/journey.js +2 -2
  279. package/esm/cli/journey/journey.js.map +1 -1
  280. package/esm/cli/{logging/logs-fetch.js → log/log-fetch.js} +68 -36
  281. package/esm/cli/log/log-fetch.js.map +1 -0
  282. package/esm/cli/log/log-key-delete.js +35 -0
  283. package/esm/cli/log/log-key-delete.js.map +1 -0
  284. package/esm/cli/log/log-key-describe.js +22 -0
  285. package/esm/cli/log/log-key-describe.js.map +1 -0
  286. package/esm/cli/log/log-key-list.js +26 -0
  287. package/esm/cli/log/log-key-list.js.map +1 -0
  288. package/esm/cli/log/log-key.js +8 -0
  289. package/esm/cli/log/log-key.js.map +1 -0
  290. package/esm/cli/log/log-list.js +80 -0
  291. package/esm/cli/log/log-list.js.map +1 -0
  292. package/esm/cli/log/log-tail.js +77 -0
  293. package/esm/cli/log/log-tail.js.map +1 -0
  294. package/esm/cli/{logging/logs.js → log/log.js} +6 -3
  295. package/esm/cli/log/log.js.map +1 -0
  296. package/esm/cli/oauth/oauth-client-delete.js +22 -0
  297. package/esm/cli/oauth/oauth-client-delete.js.map +1 -0
  298. package/esm/cli/oauth/oauth-client-describe.js +22 -0
  299. package/esm/cli/oauth/oauth-client-describe.js.map +1 -0
  300. package/esm/cli/oauth/oauth-client-export.js +52 -0
  301. package/esm/cli/oauth/oauth-client-export.js.map +1 -0
  302. package/esm/cli/oauth/oauth-client-import.js +57 -0
  303. package/esm/cli/oauth/oauth-client-import.js.map +1 -0
  304. package/esm/cli/oauth/oauth-client-list.js +25 -0
  305. package/esm/cli/oauth/oauth-client-list.js.map +1 -0
  306. package/esm/cli/oauth/oauth-client.js +14 -0
  307. package/esm/cli/oauth/oauth-client.js.map +1 -0
  308. package/esm/cli/oauth/oauth.js +13 -0
  309. package/esm/cli/oauth/oauth.js.map +1 -0
  310. package/esm/cli/realm/realm-add-custom-domain.js +8 -5
  311. package/esm/cli/realm/realm-add-custom-domain.js.map +1 -1
  312. package/esm/cli/realm/realm-describe.js +8 -5
  313. package/esm/cli/realm/realm-describe.js.map +1 -1
  314. package/esm/cli/realm/realm-list.js +8 -5
  315. package/esm/cli/realm/realm-list.js.map +1 -1
  316. package/esm/cli/realm/realm-remove-custom-domain.js +11 -5
  317. package/esm/cli/realm/realm-remove-custom-domain.js.map +1 -1
  318. package/esm/cli/realm/realm.js +2 -2
  319. package/esm/cli/realm/realm.js.map +1 -1
  320. package/esm/cli/saml/saml-cot-export.js +10 -7
  321. package/esm/cli/saml/saml-cot-export.js.map +1 -1
  322. package/esm/cli/saml/saml-cot-import.js +11 -8
  323. package/esm/cli/saml/saml-cot-import.js.map +1 -1
  324. package/esm/cli/saml/saml-cot-list.js +8 -5
  325. package/esm/cli/saml/saml-cot-list.js.map +1 -1
  326. package/esm/cli/saml/saml-cot.js +1 -1
  327. package/esm/cli/saml/saml-cot.js.map +1 -1
  328. package/esm/cli/saml/saml-delete.js +14 -7
  329. package/esm/cli/saml/saml-delete.js.map +1 -1
  330. package/esm/cli/saml/saml-describe.js +8 -5
  331. package/esm/cli/saml/saml-describe.js.map +1 -1
  332. package/esm/cli/saml/saml-export.js +10 -7
  333. package/esm/cli/saml/saml-export.js.map +1 -1
  334. package/esm/cli/saml/saml-import.js +11 -8
  335. package/esm/cli/saml/saml-import.js.map +1 -1
  336. package/esm/cli/saml/saml-list.js +8 -5
  337. package/esm/cli/saml/saml-list.js.map +1 -1
  338. package/esm/cli/saml/saml-metadata-export.js +9 -6
  339. package/esm/cli/saml/saml-metadata-export.js.map +1 -1
  340. package/esm/cli/saml/saml-metadata.js +1 -1
  341. package/esm/cli/saml/saml-metadata.js.map +1 -1
  342. package/esm/cli/saml/saml.js +2 -2
  343. package/esm/cli/saml/saml.js.map +1 -1
  344. package/esm/cli/script/script-delete.js +7 -4
  345. package/esm/cli/script/script-delete.js.map +1 -1
  346. package/esm/cli/script/script-describe.js +7 -4
  347. package/esm/cli/script/script-describe.js.map +1 -1
  348. package/esm/cli/script/script-export.js +8 -5
  349. package/esm/cli/script/script-export.js.map +1 -1
  350. package/esm/cli/script/script-import.js +9 -6
  351. package/esm/cli/script/script-import.js.map +1 -1
  352. package/esm/cli/script/script-list.js +8 -5
  353. package/esm/cli/script/script-list.js.map +1 -1
  354. package/esm/cli/script/script.js +2 -2
  355. package/esm/cli/script/script.js.map +1 -1
  356. package/esm/cli/service/service-delete.js +8 -5
  357. package/esm/cli/service/service-delete.js.map +1 -1
  358. package/esm/cli/service/service-export.js +9 -6
  359. package/esm/cli/service/service-export.js.map +1 -1
  360. package/esm/cli/service/service-import.js +10 -7
  361. package/esm/cli/service/service-import.js.map +1 -1
  362. package/esm/cli/service/service-list.js +7 -4
  363. package/esm/cli/service/service-list.js.map +1 -1
  364. package/esm/cli/service/service.js +2 -2
  365. package/esm/cli/service/service.js.map +1 -1
  366. package/esm/cli/shell/shell.js +57 -0
  367. package/esm/cli/shell/shell.js.map +1 -0
  368. package/esm/cli/theme/theme-delete.js +10 -7
  369. package/esm/cli/theme/theme-delete.js.map +1 -1
  370. package/esm/cli/theme/theme-export.js +11 -8
  371. package/esm/cli/theme/theme-export.js.map +1 -1
  372. package/esm/cli/theme/theme-import.js +12 -9
  373. package/esm/cli/theme/theme-import.js.map +1 -1
  374. package/esm/cli/theme/theme-list.js +7 -4
  375. package/esm/cli/theme/theme-list.js.map +1 -1
  376. package/esm/cli/theme/theme.js +2 -2
  377. package/esm/cli/theme/theme.js.map +1 -1
  378. package/esm/help/SampleData.js +7 -0
  379. package/esm/help/SampleData.js.map +1 -0
  380. package/esm/launch.js +1 -1
  381. package/esm/launch.js.map +1 -1
  382. package/esm/loader.js +2 -2
  383. package/esm/loader.js.map +1 -1
  384. package/esm/ops/AdminFederationOps.js +216 -0
  385. package/esm/ops/AdminFederationOps.js.map +1 -0
  386. package/esm/ops/AgentOps.js +88 -54
  387. package/esm/ops/AgentOps.js.map +1 -1
  388. package/esm/ops/ApplicationOps.js +309 -0
  389. package/esm/ops/ApplicationOps.js.map +1 -0
  390. package/esm/ops/CirclesOfTrustOps.js +25 -13
  391. package/esm/ops/CirclesOfTrustOps.js.map +1 -1
  392. package/esm/ops/ConnectionProfileOps.js +13 -6
  393. package/esm/ops/ConnectionProfileOps.js.map +1 -1
  394. package/esm/ops/EmailTemplateOps.js +53 -47
  395. package/esm/ops/EmailTemplateOps.js.map +1 -1
  396. package/esm/ops/IdmOps.js +58 -64
  397. package/esm/ops/IdmOps.js.map +1 -1
  398. package/esm/ops/IdpOps.js +48 -25
  399. package/esm/ops/IdpOps.js.map +1 -1
  400. package/esm/ops/JourneyOps.js +108 -43
  401. package/esm/ops/JourneyOps.js.map +1 -1
  402. package/esm/ops/LogOps.js +92 -30
  403. package/esm/ops/LogOps.js.map +1 -1
  404. package/esm/ops/NodeOps.js +6 -3
  405. package/esm/ops/NodeOps.js.map +1 -1
  406. package/esm/ops/OAuth2ClientOps.js +29 -16
  407. package/esm/ops/OAuth2ClientOps.js.map +1 -1
  408. package/esm/ops/OrganizationOps.js +14 -22
  409. package/esm/ops/OrganizationOps.js.map +1 -1
  410. package/esm/ops/PolicyOps.js +60 -28
  411. package/esm/ops/PolicyOps.js.map +1 -1
  412. package/esm/ops/PolicySetOps.js +39 -22
  413. package/esm/ops/PolicySetOps.js.map +1 -1
  414. package/esm/ops/RealmOps.js +15 -8
  415. package/esm/ops/RealmOps.js.map +1 -1
  416. package/esm/ops/ResourceTypeOps.js +43 -27
  417. package/esm/ops/ResourceTypeOps.js.map +1 -1
  418. package/esm/ops/Saml2Ops.js +56 -42
  419. package/esm/ops/Saml2Ops.js.map +1 -1
  420. package/esm/ops/Saml2Ops.test_.js.map +1 -1
  421. package/esm/ops/ScriptOps.js +72 -18
  422. package/esm/ops/ScriptOps.js.map +1 -1
  423. package/esm/ops/SecretsOps.js +33 -18
  424. package/esm/ops/SecretsOps.js.map +1 -1
  425. package/esm/ops/ServiceOps.js +49 -28
  426. package/esm/ops/ServiceOps.js.map +1 -1
  427. package/esm/ops/ThemeOps.js +42 -22
  428. package/esm/ops/ThemeOps.js.map +1 -1
  429. package/esm/ops/VariablesOps.js +37 -28
  430. package/esm/ops/VariablesOps.js.map +1 -1
  431. package/esm/ops/utils/OpsUtils.js +1 -1
  432. package/esm/ops/utils/OpsUtils.js.map +1 -1
  433. package/esm/ops/utils/Wordwrap.js +1 -1
  434. package/esm/ops/utils/Wordwrap.js.map +1 -1
  435. package/esm/storage/StaticStorage.js +1 -1
  436. package/esm/storage/StaticStorage.js.map +1 -1
  437. package/esm/utils/Config.js +7 -4
  438. package/esm/utils/Config.js.map +1 -1
  439. package/esm/utils/Console.js +9 -5
  440. package/esm/utils/Console.js.map +1 -1
  441. package/esm/utils/ExportImportUtils.js +32 -66
  442. package/esm/utils/ExportImportUtils.js.map +1 -1
  443. package/esm/utils/Version.js +19 -16
  444. package/esm/utils/Version.js.map +1 -1
  445. package/package.json +45 -35
  446. package/esm/cli/logging/logs-fetch.js.map +0 -1
  447. package/esm/cli/logging/logs-list.js +0 -49
  448. package/esm/cli/logging/logs-list.js.map +0 -1
  449. package/esm/cli/logging/logs-tail.js +0 -46
  450. package/esm/cli/logging/logs-tail.js.map +0 -1
  451. package/esm/cli/logging/logs.js.map +0 -1
  452. package/esm/cli/theme/theme-delete.e2e.test_.js.map +0 -1
  453. package/esm/cli/theme/theme-list.e2e.test_.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ConnectionProfileOps.js","names":["fs","frodo","state","createObjectTable","createTable","debugMessage","failSpinner","printMessage","showSpinner","succeedSpinner","listConnectionProfiles","long","filename","conn","getConnectionProfilesPath","data","readFileSync","connectionsData","JSON","parse","Object","keys","length","table","forEach","c","push","svcacctName","svcacctId","username","logApiKey","toString","e","message","describeConnectionProfile","host","showSecrets","profile","getConnectionProfileByHost","present","jwk","svcacctJwk","password","logApiSecret","authenticationService","keyMap","tenant","authenticationHeaderOverrides","addExistingServiceAccount","serviceAccountId","privateKeyFile","validate","token","login","getAccessTokenForServiceAccount","setServiceAccountId","setServiceAccountJwk","err"],"sources":["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\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 = frodo.conn.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 frodo.conn.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(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 frodo.login.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
+ {"version":3,"file":"ConnectionProfileOps.js","names":["frodo","state","fs","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 { frodo, state } from '@rockcarver/frodo-lib';\nimport fs from 'fs';\n\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,11 +1,19 @@
1
1
  import { frodo } from '@rockcarver/frodo-lib';
2
2
  import fs from 'fs';
3
- import { getTypedFilename, saveJsonToFile } from '../utils/ExportImportUtils';
4
- import { createProgressIndicator, updateProgressIndicator, stopProgressIndicator, printMessage, createTable, showSpinner, succeedSpinner, failSpinner, debugMessage } from '../utils/Console';
5
- import wordwrap from './utils/Wordwrap';
6
3
  import path from 'path';
4
+ import { createProgressIndicator, createTable, debugMessage, failSpinner, printMessage, showSpinner, stopProgressIndicator, succeedSpinner, updateProgressIndicator } from '../utils/Console';
5
+ import { getTypedFilename, saveJsonToFile } from '../utils/ExportImportUtils';
7
6
  import { cloneDeep } from './utils/OpsUtils';
8
- const EMAIL_TEMPLATE_TYPE = frodo.email.template.EMAIL_TEMPLATE_TYPE;
7
+ import wordwrap from './utils/Wordwrap';
8
+ const {
9
+ validateImport
10
+ } = frodo.utils;
11
+ const {
12
+ EMAIL_TEMPLATE_TYPE,
13
+ readEmailTemplates,
14
+ readEmailTemplate,
15
+ updateEmailTemplate
16
+ } = frodo.email.template;
9
17
  const EMAIL_TEMPLATE_FILE_TYPE = 'template.email';
10
18
  const regexEmailTemplateType = new RegExp(`${EMAIL_TEMPLATE_TYPE}/`, 'g');
11
19
 
@@ -58,7 +66,7 @@ export function getTableRowMd(templateObj) {
58
66
  export async function listEmailTemplates(long = false) {
59
67
  let emailTemplates = [];
60
68
  try {
61
- emailTemplates = (await frodo.email.template.getEmailTemplates()).result;
69
+ emailTemplates = await readEmailTemplates();
62
70
  } catch (error) {
63
71
  printMessage(`Error retrieving email templates: ${error.message}`, 'error');
64
72
  }
@@ -101,7 +109,7 @@ export async function exportEmailTemplateToFile(templateId, file) {
101
109
  }
102
110
  createProgressIndicator('determinate', 1, `Exporting ${templateId}`);
103
111
  try {
104
- const templateData = await frodo.email.template.getEmailTemplate(templateId);
112
+ const templateData = await readEmailTemplate(templateId);
105
113
  updateProgressIndicator(`Writing file ${fileName}`);
106
114
  const fileData = getFileDataTemplate();
107
115
  fileData.emailTemplate[templateId] = templateData;
@@ -124,16 +132,15 @@ export async function exportEmailTemplatesToFile(file) {
124
132
  }
125
133
  try {
126
134
  const fileData = getFileDataTemplate();
127
- const response = await frodo.email.template.getEmailTemplates();
128
- const templates = response.result;
129
- createProgressIndicator('determinate', response.resultCount, 'Exporting email templates');
135
+ const templates = await readEmailTemplates();
136
+ createProgressIndicator('determinate', templates.length, 'Exporting email templates');
130
137
  for (const template of templates) {
131
138
  const templateId = template._id.replace(`${EMAIL_TEMPLATE_TYPE}/`, '');
132
139
  updateProgressIndicator(`Exporting ${templateId}`);
133
140
  fileData.emailTemplate[templateId] = template;
134
141
  }
135
142
  saveJsonToFile(fileData, fileName);
136
- stopProgressIndicator(`${response.resultCount} templates exported to ${fileName}.`);
143
+ stopProgressIndicator(`${templates.length} templates exported to ${fileName}.`);
137
144
  } catch (err) {
138
145
  stopProgressIndicator(`${err}`);
139
146
  printMessage(err, 'error');
@@ -145,9 +152,8 @@ export async function exportEmailTemplatesToFile(file) {
145
152
  */
146
153
  export async function exportEmailTemplatesToFiles() {
147
154
  try {
148
- const response = await frodo.email.template.getEmailTemplates();
149
- const templates = response.result;
150
- createProgressIndicator('determinate', response.resultCount, 'Exporting email templates');
155
+ const templates = await readEmailTemplates();
156
+ createProgressIndicator('determinate', templates.length, 'Exporting email templates');
151
157
  for (const template of templates) {
152
158
  const templateId = template._id.replace(`${EMAIL_TEMPLATE_TYPE}/`, '');
153
159
  const fileName = getTypedFilename(templateId, EMAIL_TEMPLATE_FILE_TYPE);
@@ -156,7 +162,7 @@ export async function exportEmailTemplatesToFiles() {
156
162
  fileData.emailTemplate[templateId] = template;
157
163
  saveJsonToFile(fileData, fileName);
158
164
  }
159
- stopProgressIndicator(`${response.resultCount} templates exported.`);
165
+ stopProgressIndicator(`${templates.length} templates exported.`);
160
166
  } catch (err) {
161
167
  stopProgressIndicator(`${err}`);
162
168
  printMessage(err, 'error');
@@ -175,17 +181,17 @@ export async function importEmailTemplateFromFile(templateId, file, raw = false)
175
181
  fs.readFile(file, 'utf8', async (err, data) => {
176
182
  if (err) throw err;
177
183
  const fileData = JSON.parse(data);
178
- if (raw || frodo.utils.impex.validateImport(fileData.meta)) {
184
+ if (raw || validateImport(fileData.meta)) {
179
185
  createProgressIndicator('determinate', 1, `Importing ${templateId}`);
180
186
  if (fileData.emailTemplate[templateId] || raw && fileData._id === templateId) {
181
187
  try {
182
188
  const emailTemplateData = raw ? s2sConvert(fileData) : fileData.emailTemplate[templateId];
183
- await frodo.email.template.putEmailTemplate(templateId, emailTemplateData);
189
+ await updateEmailTemplate(templateId, emailTemplateData);
184
190
  updateProgressIndicator(`Importing ${templateId}`);
185
191
  stopProgressIndicator(`Imported ${templateId}`);
186
- } catch (putEmailTemplateError) {
187
- stopProgressIndicator(`${putEmailTemplateError}`);
188
- printMessage(putEmailTemplateError, 'error');
192
+ } catch (updateEmailTemplateError) {
193
+ stopProgressIndicator(`${updateEmailTemplateError}`);
194
+ printMessage(updateEmailTemplateError, 'error');
189
195
  }
190
196
  } else {
191
197
  stopProgressIndicator(`Email template ${templateId} not found in ${file}!`);
@@ -205,17 +211,17 @@ export async function importEmailTemplatesFromFile(file) {
205
211
  fs.readFile(file, 'utf8', async (err, data) => {
206
212
  if (err) throw err;
207
213
  const fileData = JSON.parse(data);
208
- if (frodo.utils.impex.validateImport(fileData.meta)) {
214
+ if (validateImport(fileData.meta)) {
209
215
  createProgressIndicator('determinate', Object.keys(fileData.emailTemplate).length, `Importing email templates`);
210
216
  for (const id in fileData.emailTemplate) {
211
217
  if ({}.hasOwnProperty.call(fileData.emailTemplate, id)) {
212
218
  const templateId = id.replace(regexEmailTemplateType, '');
213
219
  try {
214
- await frodo.email.template.putEmailTemplate(templateId, fileData.emailTemplate[templateId]);
220
+ await updateEmailTemplate(templateId, fileData.emailTemplate[templateId]);
215
221
  updateProgressIndicator(`Imported ${templateId}`);
216
- } catch (putEmailTemplateError) {
222
+ } catch (updateEmailTemplateError) {
217
223
  printMessage(`\nError importing ${templateId}`, 'error');
218
- printMessage(putEmailTemplateError.response.data, 'error');
224
+ printMessage(updateEmailTemplateError.response.data, 'error');
219
225
  }
220
226
  }
221
227
  }
@@ -231,11 +237,11 @@ export async function importEmailTemplatesFromFile(file) {
231
237
  * @param {string} file file name
232
238
  * @returns {string} email template id/name
233
239
  */
234
- function getEmailTemplateIdFromFile(file) {
235
- debugMessage(`cli.EmailTemplateOps.getEmailTemplateIdFromFile: file=${file}`);
240
+ function readEmailTemplateIdFromFile(file) {
241
+ debugMessage(`cli.EmailTemplateOps.readEmailTemplateIdFromFile: file=${file}`);
236
242
  const fileName = path.basename(file);
237
243
  const templateId = fileName.substring(14, fileName.indexOf('.'));
238
- debugMessage(`cli.EmailTemplateOps.getEmailTemplateIdFromFile: templateId=${templateId}`);
244
+ debugMessage(`cli.EmailTemplateOps.readEmailTemplateIdFromFile: templateId=${templateId}`);
239
245
  return templateId;
240
246
  }
241
247
 
@@ -270,20 +276,20 @@ export async function importEmailTemplatesFromFiles(raw = false) {
270
276
  for (const file of jsonFiles) {
271
277
  const data = fs.readFileSync(file, 'utf8');
272
278
  const fileData = JSON.parse(data);
273
- if (raw && file.startsWith('emailTemplate-') || frodo.utils.impex.validateImport(fileData.meta)) {
279
+ if (raw && file.startsWith('emailTemplate-') || validateImport(fileData.meta)) {
274
280
  let errors = 0;
275
281
  if (raw) {
276
282
  total++;
277
- const templateId = getEmailTemplateIdFromFile(file);
283
+ const templateId = readEmailTemplateIdFromFile(file);
278
284
  try {
279
285
  const templateData = s2sConvert(fileData);
280
- await frodo.email.template.putEmailTemplate(templateId, templateData);
281
- } catch (putEmailTemplateError) {
282
- var _putEmailTemplateErro;
286
+ await updateEmailTemplate(templateId, templateData);
287
+ } catch (updateEmailTemplateError) {
288
+ var _updateEmailTemplateE;
283
289
  errors += 1;
284
290
  printMessage(`\nError importing ${templateId}`, 'error');
285
- printMessage(putEmailTemplateError, 'error');
286
- printMessage((_putEmailTemplateErro = putEmailTemplateError.response) === null || _putEmailTemplateErro === void 0 ? void 0 : _putEmailTemplateErro.data, 'error');
291
+ printMessage(updateEmailTemplateError, 'error');
292
+ printMessage((_updateEmailTemplateE = updateEmailTemplateError.response) === null || _updateEmailTemplateE === void 0 ? void 0 : _updateEmailTemplateE.data, 'error');
287
293
  }
288
294
  } else {
289
295
  total += Object.keys(fileData.emailTemplate).length;
@@ -291,11 +297,11 @@ export async function importEmailTemplatesFromFiles(raw = false) {
291
297
  if ({}.hasOwnProperty.call(fileData.emailTemplate, id)) {
292
298
  const templateId = id.replace(regexEmailTemplateType, '');
293
299
  try {
294
- await frodo.email.template.putEmailTemplate(templateId, fileData.emailTemplate[templateId]);
295
- } catch (putEmailTemplateError) {
300
+ await updateEmailTemplate(templateId, fileData.emailTemplate[templateId]);
301
+ } catch (updateEmailTemplateError) {
296
302
  errors += 1;
297
303
  printMessage(`\nError importing ${templateId}`, 'error');
298
- printMessage(putEmailTemplateError.response.data, 'error');
304
+ printMessage(updateEmailTemplateError.response.data, 'error');
299
305
  }
300
306
  }
301
307
  }
@@ -317,29 +323,29 @@ export async function importFirstEmailTemplateFromFile(file, raw = false) {
317
323
  fs.readFile(file, 'utf8', async (err, data) => {
318
324
  if (err) throw err;
319
325
  const fileData = JSON.parse(data);
320
- if (raw && file.startsWith('emailTemplate-') || frodo.utils.impex.validateImport(fileData.meta)) {
326
+ if (raw && file.startsWith('emailTemplate-') || validateImport(fileData.meta)) {
321
327
  showSpinner(`Importing first email template`);
322
328
  if (raw) {
323
- const templateId = getEmailTemplateIdFromFile(file);
329
+ const templateId = readEmailTemplateIdFromFile(file);
324
330
  try {
325
331
  const templateData = s2sConvert(fileData);
326
- await frodo.email.template.putEmailTemplate(templateId, templateData);
332
+ await updateEmailTemplate(templateId, templateData);
327
333
  succeedSpinner(`Imported ${templateId}`);
328
- } catch (putEmailTemplateError) {
329
- var _putEmailTemplateErro2;
334
+ } catch (updateEmailTemplateError) {
335
+ var _updateEmailTemplateE2;
330
336
  failSpinner(`Error importing ${templateId}`);
331
- printMessage((_putEmailTemplateErro2 = putEmailTemplateError.response) === null || _putEmailTemplateErro2 === void 0 ? void 0 : _putEmailTemplateErro2.data, 'error');
337
+ printMessage((_updateEmailTemplateE2 = updateEmailTemplateError.response) === null || _updateEmailTemplateE2 === void 0 ? void 0 : _updateEmailTemplateE2.data, 'error');
332
338
  }
333
339
  } else {
334
340
  for (const id in fileData.emailTemplate) {
335
341
  if ({}.hasOwnProperty.call(fileData.emailTemplate, id)) {
336
342
  try {
337
- await frodo.email.template.putEmailTemplate(id.replace(regexEmailTemplateType, ''), fileData.emailTemplate[id]);
343
+ await updateEmailTemplate(id.replace(regexEmailTemplateType, ''), fileData.emailTemplate[id]);
338
344
  succeedSpinner(`Imported ${id}`);
339
- } catch (putEmailTemplateError) {
340
- var _putEmailTemplateErro3;
345
+ } catch (updateEmailTemplateError) {
346
+ var _updateEmailTemplateE3;
341
347
  failSpinner(`Error importing ${id}`);
342
- printMessage((_putEmailTemplateErro3 = putEmailTemplateError.response) === null || _putEmailTemplateErro3 === void 0 ? void 0 : _putEmailTemplateErro3.data, 'error');
348
+ printMessage((_updateEmailTemplateE3 = updateEmailTemplateError.response) === null || _updateEmailTemplateE3 === void 0 ? void 0 : _updateEmailTemplateE3.data, 'error');
343
349
  }
344
350
  break;
345
351
  }
@@ -350,4 +356,4 @@ export async function importFirstEmailTemplateFromFile(file, raw = false) {
350
356
  }
351
357
  });
352
358
  }
353
- //# sourceMappingURL=EmailTemplateOps.js.map
359
+ //# sourceMappingURL=EmailTemplateOps.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"EmailTemplateOps.js","names":["frodo","fs","getTypedFilename","saveJsonToFile","createProgressIndicator","updateProgressIndicator","stopProgressIndicator","printMessage","createTable","showSpinner","succeedSpinner","failSpinner","debugMessage","wordwrap","path","cloneDeep","EMAIL_TEMPLATE_TYPE","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","getEmailTemplates","result","error","message","sort","a","b","localeCompare","entries","table","push","enabled","from","toString","exportEmailTemplateToFile","file","fileName","templateData","getEmailTemplate","fileData","err","exportEmailTemplatesToFile","response","templates","resultCount","exportEmailTemplatesToFiles","importEmailTemplateFromFile","raw","replaceAll","readFile","data","JSON","parse","utils","impex","validateImport","emailTemplateData","s2sConvert","putEmailTemplate","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":["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 EMAIL_TEMPLATE_TYPE = frodo.email.template.EMAIL_TEMPLATE_TYPE;\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 frodo.email.template.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 frodo.email.template.getEmailTemplate(\n templateId\n );\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 frodo.email.template.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 frodo.email.template.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 || frodo.utils.impex.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 frodo.email.template.putEmailTemplate(\n templateId,\n emailTemplateData\n );\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 (frodo.utils.impex.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 frodo.email.template.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 frodo.utils.impex.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 frodo.email.template.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 frodo.email.template.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 frodo.utils.impex.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 frodo.email.template.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 frodo.email.template.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","path","createProgressIndicator","createTable","debugMessage","failSpinner","printMessage","showSpinner","stopProgressIndicator","succeedSpinner","updateProgressIndicator","getTypedFilename","saveJsonToFile","cloneDeep","wordwrap","validateImport","utils","EMAIL_TEMPLATE_TYPE","readEmailTemplates","readEmailTemplate","updateEmailTemplate","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","error","message","sort","a","b","localeCompare","entries","table","push","enabled","from","toString","exportEmailTemplateToFile","file","fileName","templateData","fileData","err","exportEmailTemplatesToFile","templates","exportEmailTemplatesToFiles","importEmailTemplateFromFile","raw","replaceAll","readFile","data","JSON","parse","emailTemplateData","s2sConvert","updateEmailTemplateError","importEmailTemplatesFromFile","id","hasOwnProperty","call","response","readEmailTemplateIdFromFile","basename","substring","indexOf","html","convertedData","importEmailTemplatesFromFiles","names","readdirSync","jsonFiles","startsWith","endsWith","toLowerCase","total","totalErrors","readFileSync","errors","_updateEmailTemplateE","importFirstEmailTemplateFromFile","_updateEmailTemplateE2","_updateEmailTemplateE3"],"sources":["../../src/ops/EmailTemplateOps.ts"],"sourcesContent":["import { frodo } from '@rockcarver/frodo-lib';\nimport { EmailTemplateSkeleton } from '@rockcarver/frodo-lib/types/ops/EmailTemplateOps';\nimport fs from 'fs';\nimport path from 'path';\n\nimport {\n createProgressIndicator,\n createTable,\n debugMessage,\n failSpinner,\n printMessage,\n showSpinner,\n stopProgressIndicator,\n succeedSpinner,\n updateProgressIndicator,\n} from '../utils/Console';\nimport { getTypedFilename, saveJsonToFile } from '../utils/ExportImportUtils';\nimport { cloneDeep } from './utils/OpsUtils';\nimport wordwrap from './utils/Wordwrap';\n\nconst { validateImport } = frodo.utils;\nconst {\n EMAIL_TEMPLATE_TYPE,\n readEmailTemplates,\n readEmailTemplate,\n updateEmailTemplate,\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 readEmailTemplates();\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 readEmailTemplate(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 templates = await readEmailTemplates();\n createProgressIndicator(\n 'determinate',\n templates.length,\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 `${templates.length} 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 templates = await readEmailTemplates();\n createProgressIndicator(\n 'determinate',\n templates.length,\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(`${templates.length} 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 updateEmailTemplate(templateId, emailTemplateData);\n updateProgressIndicator(`Importing ${templateId}`);\n stopProgressIndicator(`Imported ${templateId}`);\n } catch (updateEmailTemplateError) {\n stopProgressIndicator(`${updateEmailTemplateError}`);\n printMessage(updateEmailTemplateError, '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 updateEmailTemplate(\n templateId,\n fileData.emailTemplate[templateId]\n );\n updateProgressIndicator(`Imported ${templateId}`);\n } catch (updateEmailTemplateError) {\n printMessage(`\\nError importing ${templateId}`, 'error');\n printMessage(updateEmailTemplateError.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 readEmailTemplateIdFromFile(file: string) {\n debugMessage(\n `cli.EmailTemplateOps.readEmailTemplateIdFromFile: file=${file}`\n );\n const fileName = path.basename(file);\n const templateId = fileName.substring(14, fileName.indexOf('.'));\n debugMessage(\n `cli.EmailTemplateOps.readEmailTemplateIdFromFile: 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 = readEmailTemplateIdFromFile(file);\n try {\n const templateData = s2sConvert(fileData);\n await updateEmailTemplate(templateId, templateData);\n } catch (updateEmailTemplateError) {\n errors += 1;\n printMessage(`\\nError importing ${templateId}`, 'error');\n printMessage(updateEmailTemplateError, 'error');\n printMessage(updateEmailTemplateError.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 updateEmailTemplate(\n templateId,\n fileData.emailTemplate[templateId]\n );\n } catch (updateEmailTemplateError) {\n errors += 1;\n printMessage(`\\nError importing ${templateId}`, 'error');\n printMessage(updateEmailTemplateError.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 = readEmailTemplateIdFromFile(file);\n try {\n const templateData = s2sConvert(fileData);\n await updateEmailTemplate(templateId, templateData);\n succeedSpinner(`Imported ${templateId}`);\n } catch (updateEmailTemplateError) {\n failSpinner(`Error importing ${templateId}`);\n printMessage(updateEmailTemplateError.response?.data, 'error');\n }\n } else {\n for (const id in fileData.emailTemplate) {\n if ({}.hasOwnProperty.call(fileData.emailTemplate, id)) {\n try {\n await updateEmailTemplate(\n id.replace(regexEmailTemplateType, ''),\n fileData.emailTemplate[id]\n );\n succeedSpinner(`Imported ${id}`);\n } catch (updateEmailTemplateError) {\n failSpinner(`Error importing ${id}`);\n printMessage(updateEmailTemplateError.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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"}