@rockcarver/frodo-cli 2.0.0-3 → 2.0.0-31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (466) hide show
  1. package/CHANGELOG.md +275 -4
  2. package/esm/app.js +20 -5
  3. package/esm/app.js.map +1 -1
  4. package/esm/cli/FrodoCommand.js +28 -6
  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 +13 -7
  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 +11 -5
  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 +11 -5
  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 +12 -6
  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-train-auto-access-model.js +33 -0
  75. package/esm/cli/admin/admin-train-auto-access-model.js.map +1 -0
  76. package/esm/cli/admin/admin.js +6 -2
  77. package/esm/cli/admin/admin.js.map +1 -1
  78. package/esm/cli/agent/agent-delete.js +13 -6
  79. package/esm/cli/agent/agent-delete.js.map +1 -1
  80. package/esm/cli/agent/agent-describe.js +7 -4
  81. package/esm/cli/agent/agent-describe.js.map +1 -1
  82. package/esm/cli/agent/agent-export.js +8 -5
  83. package/esm/cli/agent/agent-export.js.map +1 -1
  84. package/esm/cli/agent/agent-gateway-delete.js +13 -6
  85. package/esm/cli/agent/agent-gateway-delete.js.map +1 -1
  86. package/esm/cli/agent/agent-gateway-describe.js +7 -4
  87. package/esm/cli/agent/agent-gateway-describe.js.map +1 -1
  88. package/esm/cli/agent/agent-gateway-export.js +8 -5
  89. package/esm/cli/agent/agent-gateway-export.js.map +1 -1
  90. package/esm/cli/agent/agent-gateway-import.js +8 -5
  91. package/esm/cli/agent/agent-gateway-import.js.map +1 -1
  92. package/esm/cli/agent/agent-gateway-list.js +7 -4
  93. package/esm/cli/agent/agent-gateway-list.js.map +1 -1
  94. package/esm/cli/agent/agent-gateway.js +1 -1
  95. package/esm/cli/agent/agent-gateway.js.map +1 -1
  96. package/esm/cli/agent/agent-import.js +8 -5
  97. package/esm/cli/agent/agent-import.js.map +1 -1
  98. package/esm/cli/agent/agent-java-delete.js +13 -6
  99. package/esm/cli/agent/agent-java-delete.js.map +1 -1
  100. package/esm/cli/agent/agent-java-describe.js +7 -4
  101. package/esm/cli/agent/agent-java-describe.js.map +1 -1
  102. package/esm/cli/agent/agent-java-export.js +8 -5
  103. package/esm/cli/agent/agent-java-export.js.map +1 -1
  104. package/esm/cli/agent/agent-java-import.js +8 -5
  105. package/esm/cli/agent/agent-java-import.js.map +1 -1
  106. package/esm/cli/agent/agent-java-list.js +7 -4
  107. package/esm/cli/agent/agent-java-list.js.map +1 -1
  108. package/esm/cli/agent/agent-java.js +1 -1
  109. package/esm/cli/agent/agent-java.js.map +1 -1
  110. package/esm/cli/agent/agent-list.js +7 -4
  111. package/esm/cli/agent/agent-list.js.map +1 -1
  112. package/esm/cli/agent/agent-web-delete.js +13 -6
  113. package/esm/cli/agent/agent-web-delete.js.map +1 -1
  114. package/esm/cli/agent/agent-web-describe.js +7 -4
  115. package/esm/cli/agent/agent-web-describe.js.map +1 -1
  116. package/esm/cli/agent/agent-web-export.js +8 -5
  117. package/esm/cli/agent/agent-web-export.js.map +1 -1
  118. package/esm/cli/agent/agent-web-import.js +8 -5
  119. package/esm/cli/agent/agent-web-import.js.map +1 -1
  120. package/esm/cli/agent/agent-web-list.js +7 -4
  121. package/esm/cli/agent/agent-web-list.js.map +1 -1
  122. package/esm/cli/agent/agent-web.js +3 -3
  123. package/esm/cli/agent/agent-web.js.map +1 -1
  124. package/esm/cli/agent/agent.js +2 -2
  125. package/esm/cli/agent/agent.js.map +1 -1
  126. package/esm/cli/app/app-delete.js +27 -8
  127. package/esm/cli/app/app-delete.js.map +1 -1
  128. package/esm/cli/app/app-describe.js +9 -5
  129. package/esm/cli/app/app-describe.js.map +1 -1
  130. package/esm/cli/app/app-export.js +17 -13
  131. package/esm/cli/app/app-export.js.map +1 -1
  132. package/esm/cli/app/app-import.js +21 -17
  133. package/esm/cli/app/app-import.js.map +1 -1
  134. package/esm/cli/app/app-list.js +12 -8
  135. package/esm/cli/app/app-list.js.map +1 -1
  136. package/esm/cli/app/app.js +8 -12
  137. package/esm/cli/app/app.js.map +1 -1
  138. package/esm/cli/authn/authn-describe.js +30 -0
  139. package/esm/cli/authn/authn-describe.js.map +1 -0
  140. package/esm/cli/authn/authn-export.js +26 -0
  141. package/esm/cli/authn/authn-export.js.map +1 -0
  142. package/esm/cli/authn/authn-import.js +26 -0
  143. package/esm/cli/authn/authn-import.js.map +1 -0
  144. package/esm/cli/authn/authn.js +12 -0
  145. package/esm/cli/authn/authn.js.map +1 -0
  146. package/esm/cli/authz/authz-policy-delete.js +11 -8
  147. package/esm/cli/authz/authz-policy-delete.js.map +1 -1
  148. package/esm/cli/authz/authz-policy-describe.js +8 -5
  149. package/esm/cli/authz/authz-policy-describe.js.map +1 -1
  150. package/esm/cli/authz/authz-policy-export.js +12 -9
  151. package/esm/cli/authz/authz-policy-export.js.map +1 -1
  152. package/esm/cli/authz/authz-policy-import.js +10 -7
  153. package/esm/cli/authz/authz-policy-import.js.map +1 -1
  154. package/esm/cli/authz/authz-policy-list.js +9 -6
  155. package/esm/cli/authz/authz-policy-list.js.map +1 -1
  156. package/esm/cli/authz/authz-policy.js +1 -1
  157. package/esm/cli/authz/authz-policy.js.map +1 -1
  158. package/esm/cli/authz/authz-set-delete.js +10 -7
  159. package/esm/cli/authz/authz-set-delete.js.map +1 -1
  160. package/esm/cli/authz/authz-set-describe.js +8 -5
  161. package/esm/cli/authz/authz-set-describe.js.map +1 -1
  162. package/esm/cli/authz/authz-set-export.js +10 -7
  163. package/esm/cli/authz/authz-set-export.js.map +1 -1
  164. package/esm/cli/authz/authz-set-import.js +10 -7
  165. package/esm/cli/authz/authz-set-import.js.map +1 -1
  166. package/esm/cli/authz/authz-set-list.js +7 -4
  167. package/esm/cli/authz/authz-set-list.js.map +1 -1
  168. package/esm/cli/authz/authz-set.js +1 -1
  169. package/esm/cli/authz/authz-set.js.map +1 -1
  170. package/esm/cli/authz/authz-type-delete.js +12 -9
  171. package/esm/cli/authz/authz-type-delete.js.map +1 -1
  172. package/esm/cli/authz/authz-type-describe.js +9 -6
  173. package/esm/cli/authz/authz-type-describe.js.map +1 -1
  174. package/esm/cli/authz/authz-type-export.js +11 -8
  175. package/esm/cli/authz/authz-type-export.js.map +1 -1
  176. package/esm/cli/authz/authz-type-import.js +12 -9
  177. package/esm/cli/authz/authz-type-import.js.map +1 -1
  178. package/esm/cli/authz/authz-type-list.js +8 -5
  179. package/esm/cli/authz/authz-type-list.js.map +1 -1
  180. package/esm/cli/authz/authz-type.js +1 -1
  181. package/esm/cli/authz/authz-type.js.map +1 -1
  182. package/esm/cli/authz/authz.js +2 -2
  183. package/esm/cli/authz/authz.js.map +1 -1
  184. package/esm/cli/conn/conn-delete.js +2 -2
  185. package/esm/cli/conn/conn-delete.js.map +1 -1
  186. package/esm/cli/conn/conn-describe.js +2 -2
  187. package/esm/cli/conn/conn-describe.js.map +1 -1
  188. package/esm/cli/conn/conn-list.js +2 -2
  189. package/esm/cli/conn/conn-list.js.map +1 -1
  190. package/esm/cli/conn/conn-save.js +31 -15
  191. package/esm/cli/conn/conn-save.js.map +1 -1
  192. package/esm/cli/conn/conn.js +2 -2
  193. package/esm/cli/conn/conn.js.map +1 -1
  194. package/esm/cli/email/email-template-export.js +10 -7
  195. package/esm/cli/email/email-template-export.js.map +1 -1
  196. package/esm/cli/email/email-template-import.js +11 -8
  197. package/esm/cli/email/email-template-import.js.map +1 -1
  198. package/esm/cli/email/email-template-list.js +8 -5
  199. package/esm/cli/email/email-template-list.js.map +1 -1
  200. package/esm/cli/email/email-template.js +1 -1
  201. package/esm/cli/email/email-template.js.map +1 -1
  202. package/esm/cli/email/email.js +2 -2
  203. package/esm/cli/email/email.js.map +1 -1
  204. package/esm/cli/esv/esv-apply.js +18 -8
  205. package/esm/cli/esv/esv-apply.js.map +1 -1
  206. package/esm/cli/esv/esv-secret-create.js +8 -5
  207. package/esm/cli/esv/esv-secret-create.js.map +1 -1
  208. package/esm/cli/esv/esv-secret-delete.js +9 -6
  209. package/esm/cli/esv/esv-secret-delete.js.map +1 -1
  210. package/esm/cli/esv/esv-secret-describe.js +8 -5
  211. package/esm/cli/esv/esv-secret-describe.js.map +1 -1
  212. package/esm/cli/esv/esv-secret-export.js +19 -5
  213. package/esm/cli/esv/esv-secret-export.js.map +1 -1
  214. package/esm/cli/esv/esv-secret-import.js +7 -4
  215. package/esm/cli/esv/esv-secret-import.js.map +1 -1
  216. package/esm/cli/esv/esv-secret-list.js +8 -5
  217. package/esm/cli/esv/esv-secret-list.js.map +1 -1
  218. package/esm/cli/esv/esv-secret-set.js +8 -5
  219. package/esm/cli/esv/esv-secret-set.js.map +1 -1
  220. package/esm/cli/esv/esv-secret-version-activate.js +8 -5
  221. package/esm/cli/esv/esv-secret-version-activate.js.map +1 -1
  222. package/esm/cli/esv/esv-secret-version-create.js +9 -6
  223. package/esm/cli/esv/esv-secret-version-create.js.map +1 -1
  224. package/esm/cli/esv/esv-secret-version-deactivate.js +8 -5
  225. package/esm/cli/esv/esv-secret-version-deactivate.js.map +1 -1
  226. package/esm/cli/esv/esv-secret-version-delete.js +9 -6
  227. package/esm/cli/esv/esv-secret-version-delete.js.map +1 -1
  228. package/esm/cli/esv/esv-secret-version-list.js +8 -5
  229. package/esm/cli/esv/esv-secret-version-list.js.map +1 -1
  230. package/esm/cli/esv/esv-secret-version.js +1 -1
  231. package/esm/cli/esv/esv-secret-version.js.map +1 -1
  232. package/esm/cli/esv/esv-secret.js +2 -3
  233. package/esm/cli/esv/esv-secret.js.map +1 -1
  234. package/esm/cli/esv/esv-variable-create.js +10 -6
  235. package/esm/cli/esv/esv-variable-create.js.map +1 -1
  236. package/esm/cli/esv/esv-variable-delete.js +10 -7
  237. package/esm/cli/esv/esv-variable-delete.js.map +1 -1
  238. package/esm/cli/esv/esv-variable-describe.js +10 -7
  239. package/esm/cli/esv/esv-variable-describe.js.map +1 -1
  240. package/esm/cli/esv/esv-variable-export.js +20 -6
  241. package/esm/cli/esv/esv-variable-export.js.map +1 -1
  242. package/esm/cli/esv/esv-variable-import.js +7 -4
  243. package/esm/cli/esv/esv-variable-import.js.map +1 -1
  244. package/esm/cli/esv/esv-variable-list.js +8 -5
  245. package/esm/cli/esv/esv-variable-list.js.map +1 -1
  246. package/esm/cli/esv/esv-variable-set.js +8 -5
  247. package/esm/cli/esv/esv-variable-set.js.map +1 -1
  248. package/esm/cli/esv/esv-variable.js +2 -3
  249. package/esm/cli/esv/esv-variable.js.map +1 -1
  250. package/esm/cli/esv/esv.js +2 -2
  251. package/esm/cli/esv/esv.js.map +1 -1
  252. package/esm/cli/idm/idm-count.js +9 -6
  253. package/esm/cli/idm/idm-count.js.map +1 -1
  254. package/esm/cli/idm/idm-export.js +21 -12
  255. package/esm/cli/idm/idm-export.js.map +1 -1
  256. package/esm/cli/idm/idm-import.js +22 -13
  257. package/esm/cli/idm/idm-import.js.map +1 -1
  258. package/esm/cli/idm/idm-list.js +7 -4
  259. package/esm/cli/idm/idm-list.js.map +1 -1
  260. package/esm/cli/idm/idm.js +2 -2
  261. package/esm/cli/idm/idm.js.map +1 -1
  262. package/esm/cli/idp/idp-export.js +11 -8
  263. package/esm/cli/idp/idp-export.js.map +1 -1
  264. package/esm/cli/idp/idp-import.js +15 -12
  265. package/esm/cli/idp/idp-import.js.map +1 -1
  266. package/esm/cli/idp/idp-list.js +7 -4
  267. package/esm/cli/idp/idp-list.js.map +1 -1
  268. package/esm/cli/idp/idp.js +2 -2
  269. package/esm/cli/idp/idp.js.map +1 -1
  270. package/esm/cli/info/info.js +16 -10
  271. package/esm/cli/info/info.js.map +1 -1
  272. package/esm/cli/journey/journey-delete.js +8 -5
  273. package/esm/cli/journey/journey-delete.js.map +1 -1
  274. package/esm/cli/journey/journey-describe.js +19 -10
  275. package/esm/cli/journey/journey-describe.js.map +1 -1
  276. package/esm/cli/journey/journey-disable.js +12 -6
  277. package/esm/cli/journey/journey-disable.js.map +1 -1
  278. package/esm/cli/journey/journey-enable.js +12 -6
  279. package/esm/cli/journey/journey-enable.js.map +1 -1
  280. package/esm/cli/journey/journey-export.js +21 -9
  281. package/esm/cli/journey/journey-export.js.map +1 -1
  282. package/esm/cli/journey/journey-import.js +11 -8
  283. package/esm/cli/journey/journey-import.js.map +1 -1
  284. package/esm/cli/journey/journey-list.js +6 -3
  285. package/esm/cli/journey/journey-list.js.map +1 -1
  286. package/esm/cli/journey/journey-prune.js +23 -12
  287. package/esm/cli/journey/journey-prune.js.map +1 -1
  288. package/esm/cli/journey/journey.js +2 -2
  289. package/esm/cli/journey/journey.js.map +1 -1
  290. package/esm/cli/{logging/logs-fetch.js → log/log-fetch.js} +68 -36
  291. package/esm/cli/log/log-fetch.js.map +1 -0
  292. package/esm/cli/log/log-key-delete.js +35 -0
  293. package/esm/cli/log/log-key-delete.js.map +1 -0
  294. package/esm/cli/log/log-key-describe.js +22 -0
  295. package/esm/cli/log/log-key-describe.js.map +1 -0
  296. package/esm/cli/log/log-key-list.js +26 -0
  297. package/esm/cli/log/log-key-list.js.map +1 -0
  298. package/esm/cli/log/log-key.js +8 -0
  299. package/esm/cli/log/log-key.js.map +1 -0
  300. package/esm/cli/log/log-list.js +80 -0
  301. package/esm/cli/log/log-list.js.map +1 -0
  302. package/esm/cli/log/log-tail.js +77 -0
  303. package/esm/cli/log/log-tail.js.map +1 -0
  304. package/esm/cli/{logging/logs.js → log/log.js} +6 -3
  305. package/esm/cli/log/log.js.map +1 -0
  306. package/esm/cli/oauth/oauth-client-delete.js +22 -0
  307. package/esm/cli/oauth/oauth-client-delete.js.map +1 -0
  308. package/esm/cli/oauth/oauth-client-describe.js +22 -0
  309. package/esm/cli/oauth/oauth-client-describe.js.map +1 -0
  310. package/esm/cli/oauth/oauth-client-export.js +52 -0
  311. package/esm/cli/oauth/oauth-client-export.js.map +1 -0
  312. package/esm/cli/oauth/oauth-client-import.js +57 -0
  313. package/esm/cli/oauth/oauth-client-import.js.map +1 -0
  314. package/esm/cli/oauth/oauth-client-list.js +25 -0
  315. package/esm/cli/oauth/oauth-client-list.js.map +1 -0
  316. package/esm/cli/oauth/oauth-client.js +14 -0
  317. package/esm/cli/oauth/oauth-client.js.map +1 -0
  318. package/esm/cli/oauth/oauth.js +13 -0
  319. package/esm/cli/oauth/oauth.js.map +1 -0
  320. package/esm/cli/realm/realm-add-custom-domain.js +8 -5
  321. package/esm/cli/realm/realm-add-custom-domain.js.map +1 -1
  322. package/esm/cli/realm/realm-describe.js +8 -5
  323. package/esm/cli/realm/realm-describe.js.map +1 -1
  324. package/esm/cli/realm/realm-list.js +8 -5
  325. package/esm/cli/realm/realm-list.js.map +1 -1
  326. package/esm/cli/realm/realm-remove-custom-domain.js +11 -5
  327. package/esm/cli/realm/realm-remove-custom-domain.js.map +1 -1
  328. package/esm/cli/realm/realm.js +2 -2
  329. package/esm/cli/realm/realm.js.map +1 -1
  330. package/esm/cli/saml/saml-cot-export.js +10 -7
  331. package/esm/cli/saml/saml-cot-export.js.map +1 -1
  332. package/esm/cli/saml/saml-cot-import.js +15 -12
  333. package/esm/cli/saml/saml-cot-import.js.map +1 -1
  334. package/esm/cli/saml/saml-cot-list.js +8 -5
  335. package/esm/cli/saml/saml-cot-list.js.map +1 -1
  336. package/esm/cli/saml/saml-cot.js +1 -1
  337. package/esm/cli/saml/saml-cot.js.map +1 -1
  338. package/esm/cli/saml/saml-delete.js +14 -7
  339. package/esm/cli/saml/saml-delete.js.map +1 -1
  340. package/esm/cli/saml/saml-describe.js +8 -5
  341. package/esm/cli/saml/saml-describe.js.map +1 -1
  342. package/esm/cli/saml/saml-export.js +10 -7
  343. package/esm/cli/saml/saml-export.js.map +1 -1
  344. package/esm/cli/saml/saml-import.js +11 -8
  345. package/esm/cli/saml/saml-import.js.map +1 -1
  346. package/esm/cli/saml/saml-list.js +8 -5
  347. package/esm/cli/saml/saml-list.js.map +1 -1
  348. package/esm/cli/saml/saml-metadata-export.js +9 -6
  349. package/esm/cli/saml/saml-metadata-export.js.map +1 -1
  350. package/esm/cli/saml/saml-metadata.js +1 -1
  351. package/esm/cli/saml/saml-metadata.js.map +1 -1
  352. package/esm/cli/saml/saml.js +2 -2
  353. package/esm/cli/saml/saml.js.map +1 -1
  354. package/esm/cli/script/script-delete.js +7 -4
  355. package/esm/cli/script/script-delete.js.map +1 -1
  356. package/esm/cli/script/script-describe.js +7 -4
  357. package/esm/cli/script/script-describe.js.map +1 -1
  358. package/esm/cli/script/script-export.js +8 -5
  359. package/esm/cli/script/script-export.js.map +1 -1
  360. package/esm/cli/script/script-import.js +9 -6
  361. package/esm/cli/script/script-import.js.map +1 -1
  362. package/esm/cli/script/script-list.js +8 -5
  363. package/esm/cli/script/script-list.js.map +1 -1
  364. package/esm/cli/script/script.js +2 -2
  365. package/esm/cli/script/script.js.map +1 -1
  366. package/esm/cli/service/service-delete.js +8 -5
  367. package/esm/cli/service/service-delete.js.map +1 -1
  368. package/esm/cli/service/service-export.js +9 -6
  369. package/esm/cli/service/service-export.js.map +1 -1
  370. package/esm/cli/service/service-import.js +11 -9
  371. package/esm/cli/service/service-import.js.map +1 -1
  372. package/esm/cli/service/service-list.js +7 -4
  373. package/esm/cli/service/service-list.js.map +1 -1
  374. package/esm/cli/service/service.js +2 -2
  375. package/esm/cli/service/service.js.map +1 -1
  376. package/esm/cli/shell/shell.js +57 -0
  377. package/esm/cli/shell/shell.js.map +1 -0
  378. package/esm/cli/theme/theme-delete.js +10 -7
  379. package/esm/cli/theme/theme-delete.js.map +1 -1
  380. package/esm/cli/theme/theme-export.js +11 -8
  381. package/esm/cli/theme/theme-export.js.map +1 -1
  382. package/esm/cli/theme/theme-import.js +12 -9
  383. package/esm/cli/theme/theme-import.js.map +1 -1
  384. package/esm/cli/theme/theme-list.js +7 -4
  385. package/esm/cli/theme/theme-list.js.map +1 -1
  386. package/esm/cli/theme/theme.js +2 -2
  387. package/esm/cli/theme/theme.js.map +1 -1
  388. package/esm/help/SampleData.js +7 -0
  389. package/esm/help/SampleData.js.map +1 -0
  390. package/esm/launch.js +1 -1
  391. package/esm/launch.js.map +1 -1
  392. package/esm/loader.js +2 -2
  393. package/esm/loader.js.map +1 -1
  394. package/esm/ops/AdminFederationOps.js +225 -0
  395. package/esm/ops/AdminFederationOps.js.map +1 -0
  396. package/esm/ops/AgentOps.js +128 -87
  397. package/esm/ops/AgentOps.js.map +1 -1
  398. package/esm/ops/ApplicationOps.js +315 -0
  399. package/esm/ops/ApplicationOps.js.map +1 -0
  400. package/esm/ops/AuthenticationSettingsOps.js +89 -0
  401. package/esm/ops/AuthenticationSettingsOps.js.map +1 -0
  402. package/esm/ops/CirclesOfTrustOps.js +72 -59
  403. package/esm/ops/CirclesOfTrustOps.js.map +1 -1
  404. package/esm/ops/ConnectionProfileOps.js +13 -6
  405. package/esm/ops/ConnectionProfileOps.js.map +1 -1
  406. package/esm/ops/EmailTemplateOps.js +76 -64
  407. package/esm/ops/EmailTemplateOps.js.map +1 -1
  408. package/esm/ops/IdmOps.js +70 -84
  409. package/esm/ops/IdmOps.js.map +1 -1
  410. package/esm/ops/IdpOps.js +74 -43
  411. package/esm/ops/IdpOps.js.map +1 -1
  412. package/esm/ops/JourneyOps.js +99 -67
  413. package/esm/ops/JourneyOps.js.map +1 -1
  414. package/esm/ops/LogOps.js +92 -30
  415. package/esm/ops/LogOps.js.map +1 -1
  416. package/esm/ops/NodeOps.js +6 -3
  417. package/esm/ops/NodeOps.js.map +1 -1
  418. package/esm/ops/OAuth2ClientOps.js +51 -32
  419. package/esm/ops/OAuth2ClientOps.js.map +1 -1
  420. package/esm/ops/OrganizationOps.js +14 -22
  421. package/esm/ops/OrganizationOps.js.map +1 -1
  422. package/esm/ops/PolicyOps.js +84 -55
  423. package/esm/ops/PolicyOps.js.map +1 -1
  424. package/esm/ops/PolicySetOps.js +67 -43
  425. package/esm/ops/PolicySetOps.js.map +1 -1
  426. package/esm/ops/RealmOps.js +18 -11
  427. package/esm/ops/RealmOps.js.map +1 -1
  428. package/esm/ops/ResourceTypeOps.js +75 -66
  429. package/esm/ops/ResourceTypeOps.js.map +1 -1
  430. package/esm/ops/Saml2Ops.js +76 -54
  431. package/esm/ops/Saml2Ops.js.map +1 -1
  432. package/esm/ops/Saml2Ops.test_.js.map +1 -1
  433. package/esm/ops/ScriptOps.js +92 -31
  434. package/esm/ops/ScriptOps.js.map +1 -1
  435. package/esm/ops/SecretsOps.js +106 -23
  436. package/esm/ops/SecretsOps.js.map +1 -1
  437. package/esm/ops/ServiceOps.js +67 -41
  438. package/esm/ops/ServiceOps.js.map +1 -1
  439. package/esm/ops/ThemeOps.js +62 -36
  440. package/esm/ops/ThemeOps.js.map +1 -1
  441. package/esm/ops/VariablesOps.js +132 -41
  442. package/esm/ops/VariablesOps.js.map +1 -1
  443. package/esm/ops/utils/OpsUtils.js +1 -1
  444. package/esm/ops/utils/OpsUtils.js.map +1 -1
  445. package/esm/ops/utils/Wordwrap.js +1 -1
  446. package/esm/ops/utils/Wordwrap.js.map +1 -1
  447. package/esm/storage/StaticStorage.js +1 -1
  448. package/esm/storage/StaticStorage.js.map +1 -1
  449. package/esm/utils/Config.js +7 -4
  450. package/esm/utils/Config.js.map +1 -1
  451. package/esm/utils/Console.js +9 -5
  452. package/esm/utils/Console.js.map +1 -1
  453. package/esm/utils/ExportImportUtils.js +32 -66
  454. package/esm/utils/ExportImportUtils.js.map +1 -1
  455. package/esm/utils/Version.js +19 -16
  456. package/esm/utils/Version.js.map +1 -1
  457. package/global-jest-setup.js +4 -0
  458. package/package.json +46 -35
  459. package/esm/cli/logging/logs-fetch.js.map +0 -1
  460. package/esm/cli/logging/logs-list.js +0 -49
  461. package/esm/cli/logging/logs-list.js.map +0 -1
  462. package/esm/cli/logging/logs-tail.js +0 -46
  463. package/esm/cli/logging/logs-tail.js.map +0 -1
  464. package/esm/cli/logging/logs.js.map +0 -1
  465. package/esm/cli/theme/theme-delete.e2e.test_.js.map +0 -1
  466. package/esm/cli/theme/theme-list.e2e.test_.js.map +0 -1
@@ -1,11 +1,21 @@
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
+ getFilePath,
11
+ getWorkingDirectory
12
+ } = frodo.utils;
13
+ const {
14
+ EMAIL_TEMPLATE_TYPE,
15
+ readEmailTemplates,
16
+ readEmailTemplate,
17
+ updateEmailTemplate
18
+ } = frodo.email.template;
9
19
  const EMAIL_TEMPLATE_FILE_TYPE = 'template.email';
10
20
  const regexEmailTemplateType = new RegExp(`${EMAIL_TEMPLATE_TYPE}/`, 'g');
11
21
 
@@ -58,7 +68,7 @@ export function getTableRowMd(templateObj) {
58
68
  export async function listEmailTemplates(long = false) {
59
69
  let emailTemplates = [];
60
70
  try {
61
- emailTemplates = (await frodo.email.template.getEmailTemplates()).result;
71
+ emailTemplates = await readEmailTemplates();
62
72
  } catch (error) {
63
73
  printMessage(`Error retrieving email templates: ${error.message}`, 'error');
64
74
  }
@@ -99,14 +109,15 @@ export async function exportEmailTemplateToFile(templateId, file) {
99
109
  if (!fileName) {
100
110
  fileName = getTypedFilename(templateId, EMAIL_TEMPLATE_FILE_TYPE);
101
111
  }
112
+ const filePath = getFilePath(fileName, true);
102
113
  createProgressIndicator('determinate', 1, `Exporting ${templateId}`);
103
114
  try {
104
- const templateData = await frodo.email.template.getEmailTemplate(templateId);
105
- updateProgressIndicator(`Writing file ${fileName}`);
115
+ const templateData = await readEmailTemplate(templateId);
116
+ updateProgressIndicator(`Writing file ${filePath}`);
106
117
  const fileData = getFileDataTemplate();
107
118
  fileData.emailTemplate[templateId] = templateData;
108
- saveJsonToFile(fileData, fileName);
109
- stopProgressIndicator(`Exported ${templateId['brightCyan']} to ${fileName['brightCyan']}.`);
119
+ saveJsonToFile(fileData, filePath);
120
+ stopProgressIndicator(`Exported ${templateId['brightCyan']} to ${filePath['brightCyan']}.`);
110
121
  } catch (err) {
111
122
  stopProgressIndicator(`${err}`);
112
123
  printMessage(err, 'error');
@@ -122,18 +133,18 @@ export async function exportEmailTemplatesToFile(file) {
122
133
  if (!fileName) {
123
134
  fileName = getTypedFilename(`allEmailTemplates`, EMAIL_TEMPLATE_FILE_TYPE);
124
135
  }
136
+ const filePath = getFilePath(fileName, true);
125
137
  try {
126
138
  const fileData = getFileDataTemplate();
127
- const response = await frodo.email.template.getEmailTemplates();
128
- const templates = response.result;
129
- createProgressIndicator('determinate', response.resultCount, 'Exporting email templates');
139
+ const templates = await readEmailTemplates();
140
+ createProgressIndicator('determinate', templates.length, 'Exporting email templates');
130
141
  for (const template of templates) {
131
142
  const templateId = template._id.replace(`${EMAIL_TEMPLATE_TYPE}/`, '');
132
143
  updateProgressIndicator(`Exporting ${templateId}`);
133
144
  fileData.emailTemplate[templateId] = template;
134
145
  }
135
- saveJsonToFile(fileData, fileName);
136
- stopProgressIndicator(`${response.resultCount} templates exported to ${fileName}.`);
146
+ saveJsonToFile(fileData, filePath);
147
+ stopProgressIndicator(`${templates.length} templates exported to ${filePath}.`);
137
148
  } catch (err) {
138
149
  stopProgressIndicator(`${err}`);
139
150
  printMessage(err, 'error');
@@ -145,18 +156,17 @@ export async function exportEmailTemplatesToFile(file) {
145
156
  */
146
157
  export async function exportEmailTemplatesToFiles() {
147
158
  try {
148
- const response = await frodo.email.template.getEmailTemplates();
149
- const templates = response.result;
150
- createProgressIndicator('determinate', response.resultCount, 'Exporting email templates');
159
+ const templates = await readEmailTemplates();
160
+ createProgressIndicator('determinate', templates.length, 'Exporting email templates');
151
161
  for (const template of templates) {
152
162
  const templateId = template._id.replace(`${EMAIL_TEMPLATE_TYPE}/`, '');
153
163
  const fileName = getTypedFilename(templateId, EMAIL_TEMPLATE_FILE_TYPE);
154
164
  const fileData = getFileDataTemplate();
155
165
  updateProgressIndicator(`Exporting ${templateId}`);
156
166
  fileData.emailTemplate[templateId] = template;
157
- saveJsonToFile(fileData, fileName);
167
+ saveJsonToFile(fileData, getFilePath(fileName, true));
158
168
  }
159
- stopProgressIndicator(`${response.resultCount} templates exported.`);
169
+ stopProgressIndicator(`${templates.length} templates exported.`);
160
170
  } catch (err) {
161
171
  stopProgressIndicator(`${err}`);
162
172
  printMessage(err, 'error');
@@ -170,26 +180,26 @@ export async function exportEmailTemplatesToFiles() {
170
180
  * @param {boolean} raw import raw data file lacking frodo export envelop
171
181
  */
172
182
  export async function importEmailTemplateFromFile(templateId, file, raw = false) {
173
- // eslint-disable-next-line no-param-reassign
174
183
  templateId = templateId.replaceAll(`${EMAIL_TEMPLATE_TYPE}/`, '');
175
- fs.readFile(file, 'utf8', async (err, data) => {
184
+ const filePath = getFilePath(file);
185
+ fs.readFile(filePath, 'utf8', async (err, data) => {
176
186
  if (err) throw err;
177
187
  const fileData = JSON.parse(data);
178
- if (raw || frodo.utils.impex.validateImport(fileData.meta)) {
188
+ if (raw || validateImport(fileData.meta)) {
179
189
  createProgressIndicator('determinate', 1, `Importing ${templateId}`);
180
- if (fileData.emailTemplate[templateId] || raw && fileData._id === templateId) {
190
+ if (fileData.emailTemplate && fileData.emailTemplate[templateId] || raw && getTemplateIdFromFileName(file) === templateId) {
181
191
  try {
182
192
  const emailTemplateData = raw ? s2sConvert(fileData) : fileData.emailTemplate[templateId];
183
- await frodo.email.template.putEmailTemplate(templateId, emailTemplateData);
193
+ await updateEmailTemplate(templateId, emailTemplateData);
184
194
  updateProgressIndicator(`Importing ${templateId}`);
185
195
  stopProgressIndicator(`Imported ${templateId}`);
186
- } catch (putEmailTemplateError) {
187
- stopProgressIndicator(`${putEmailTemplateError}`);
188
- printMessage(putEmailTemplateError, 'error');
196
+ } catch (updateEmailTemplateError) {
197
+ stopProgressIndicator(`${updateEmailTemplateError}`);
198
+ printMessage(updateEmailTemplateError, 'error');
189
199
  }
190
200
  } else {
191
- stopProgressIndicator(`Email template ${templateId} not found in ${file}!`);
192
- printMessage(`Email template ${templateId} not found in ${file}!`, 'error');
201
+ stopProgressIndicator(`Email template ${templateId} not found in ${filePath}!`);
202
+ printMessage(`Email template ${templateId} not found in ${filePath}!`, 'error');
193
203
  }
194
204
  } else {
195
205
  printMessage('Import validation failed...', 'error');
@@ -202,20 +212,20 @@ export async function importEmailTemplateFromFile(templateId, file, raw = false)
202
212
  * @param {string} file optional filename
203
213
  */
204
214
  export async function importEmailTemplatesFromFile(file) {
205
- fs.readFile(file, 'utf8', async (err, data) => {
215
+ fs.readFile(getFilePath(file), 'utf8', async (err, data) => {
206
216
  if (err) throw err;
207
217
  const fileData = JSON.parse(data);
208
- if (frodo.utils.impex.validateImport(fileData.meta)) {
218
+ if (validateImport(fileData.meta)) {
209
219
  createProgressIndicator('determinate', Object.keys(fileData.emailTemplate).length, `Importing email templates`);
210
220
  for (const id in fileData.emailTemplate) {
211
221
  if ({}.hasOwnProperty.call(fileData.emailTemplate, id)) {
212
222
  const templateId = id.replace(regexEmailTemplateType, '');
213
223
  try {
214
- await frodo.email.template.putEmailTemplate(templateId, fileData.emailTemplate[templateId]);
224
+ await updateEmailTemplate(templateId, fileData.emailTemplate[templateId]);
215
225
  updateProgressIndicator(`Imported ${templateId}`);
216
- } catch (putEmailTemplateError) {
226
+ } catch (updateEmailTemplateError) {
217
227
  printMessage(`\nError importing ${templateId}`, 'error');
218
- printMessage(putEmailTemplateError.response.data, 'error');
228
+ printMessage(updateEmailTemplateError.response.data, 'error');
219
229
  }
220
230
  }
221
231
  }
@@ -231,11 +241,13 @@ export async function importEmailTemplatesFromFile(file) {
231
241
  * @param {string} file file name
232
242
  * @returns {string} email template id/name
233
243
  */
234
- function getEmailTemplateIdFromFile(file) {
235
- debugMessage(`cli.EmailTemplateOps.getEmailTemplateIdFromFile: file=${file}`);
236
- const fileName = path.basename(file);
237
- const templateId = fileName.substring(14, fileName.indexOf('.'));
238
- debugMessage(`cli.EmailTemplateOps.getEmailTemplateIdFromFile: templateId=${templateId}`);
244
+ function getTemplateIdFromFileName(file) {
245
+ debugMessage(`cli.EmailTemplateOps.getTemplateIdFromFileName: file=${file}`);
246
+ const basename = path.basename(file);
247
+ const keys = basename.split('-');
248
+ if (keys[0] !== EMAIL_TEMPLATE_TYPE || keys.length <= 1) throw new Error(`Filename does not indicate a raw email template: ${file}`);
249
+ const templateId = keys[1].split('.')[0];
250
+ debugMessage(`cli.EmailTemplateOps.getTemplateIdFromFileName: templateId=${templateId}`);
239
251
  return templateId;
240
252
  }
241
253
 
@@ -262,28 +274,28 @@ function s2sConvert(templateData) {
262
274
  * @param {boolean} raw import raw data file lacking frodo export envelop
263
275
  */
264
276
  export async function importEmailTemplatesFromFiles(raw = false) {
265
- const names = fs.readdirSync('.');
266
- const jsonFiles = raw ? names.filter(name => name.startsWith(`${EMAIL_TEMPLATE_TYPE}-`) && name.endsWith(`.json`)) : names.filter(name => name.toLowerCase().endsWith(`${EMAIL_TEMPLATE_FILE_TYPE}.json`));
277
+ const names = fs.readdirSync(getWorkingDirectory());
278
+ const jsonFiles = names.filter(name => raw ? name.startsWith(`${EMAIL_TEMPLATE_TYPE}-`) && name.endsWith(`.json`) : name.toLowerCase().endsWith(`${EMAIL_TEMPLATE_FILE_TYPE}.json`)).map(name => getFilePath(name));
267
279
  createProgressIndicator('determinate', jsonFiles.length, 'Importing email templates...');
268
280
  let total = 0;
269
281
  let totalErrors = 0;
270
282
  for (const file of jsonFiles) {
271
283
  const data = fs.readFileSync(file, 'utf8');
272
284
  const fileData = JSON.parse(data);
273
- if (raw && file.startsWith('emailTemplate-') || frodo.utils.impex.validateImport(fileData.meta)) {
285
+ if (raw && file.startsWith('emailTemplate-') || validateImport(fileData.meta)) {
274
286
  let errors = 0;
275
287
  if (raw) {
276
288
  total++;
277
- const templateId = getEmailTemplateIdFromFile(file);
289
+ const templateId = getTemplateIdFromFileName(file);
278
290
  try {
279
291
  const templateData = s2sConvert(fileData);
280
- await frodo.email.template.putEmailTemplate(templateId, templateData);
281
- } catch (putEmailTemplateError) {
282
- var _putEmailTemplateErro;
292
+ await updateEmailTemplate(templateId, templateData);
293
+ } catch (updateEmailTemplateError) {
294
+ var _updateEmailTemplateE;
283
295
  errors += 1;
284
296
  printMessage(`\nError importing ${templateId}`, 'error');
285
- printMessage(putEmailTemplateError, 'error');
286
- printMessage((_putEmailTemplateErro = putEmailTemplateError.response) === null || _putEmailTemplateErro === void 0 ? void 0 : _putEmailTemplateErro.data, 'error');
297
+ printMessage(updateEmailTemplateError, 'error');
298
+ printMessage((_updateEmailTemplateE = updateEmailTemplateError.response) === null || _updateEmailTemplateE === void 0 ? void 0 : _updateEmailTemplateE.data, 'error');
287
299
  }
288
300
  } else {
289
301
  total += Object.keys(fileData.emailTemplate).length;
@@ -291,11 +303,11 @@ export async function importEmailTemplatesFromFiles(raw = false) {
291
303
  if ({}.hasOwnProperty.call(fileData.emailTemplate, id)) {
292
304
  const templateId = id.replace(regexEmailTemplateType, '');
293
305
  try {
294
- await frodo.email.template.putEmailTemplate(templateId, fileData.emailTemplate[templateId]);
295
- } catch (putEmailTemplateError) {
306
+ await updateEmailTemplate(templateId, fileData.emailTemplate[templateId]);
307
+ } catch (updateEmailTemplateError) {
296
308
  errors += 1;
297
309
  printMessage(`\nError importing ${templateId}`, 'error');
298
- printMessage(putEmailTemplateError.response.data, 'error');
310
+ printMessage(updateEmailTemplateError.response.data, 'error');
299
311
  }
300
312
  }
301
313
  }
@@ -314,32 +326,32 @@ export async function importEmailTemplatesFromFiles(raw = false) {
314
326
  * @param {String} file optional filename
315
327
  */
316
328
  export async function importFirstEmailTemplateFromFile(file, raw = false) {
317
- fs.readFile(file, 'utf8', async (err, data) => {
329
+ fs.readFile(getFilePath(file), 'utf8', async (err, data) => {
318
330
  if (err) throw err;
319
331
  const fileData = JSON.parse(data);
320
- if (raw && file.startsWith('emailTemplate-') || frodo.utils.impex.validateImport(fileData.meta)) {
332
+ if (raw || validateImport(fileData.meta)) {
321
333
  showSpinner(`Importing first email template`);
322
334
  if (raw) {
323
- const templateId = getEmailTemplateIdFromFile(file);
324
335
  try {
336
+ const templateId = getTemplateIdFromFileName(file);
325
337
  const templateData = s2sConvert(fileData);
326
- await frodo.email.template.putEmailTemplate(templateId, templateData);
338
+ await updateEmailTemplate(templateId, templateData);
327
339
  succeedSpinner(`Imported ${templateId}`);
328
- } catch (putEmailTemplateError) {
329
- var _putEmailTemplateErro2;
330
- failSpinner(`Error importing ${templateId}`);
331
- printMessage((_putEmailTemplateErro2 = putEmailTemplateError.response) === null || _putEmailTemplateErro2 === void 0 ? void 0 : _putEmailTemplateErro2.data, 'error');
340
+ } catch (error) {
341
+ var _error$response;
342
+ failSpinner(`Error importing email template: ${error}`);
343
+ printMessage((_error$response = error.response) === null || _error$response === void 0 ? void 0 : _error$response.data, 'error');
332
344
  }
333
345
  } else {
334
346
  for (const id in fileData.emailTemplate) {
335
347
  if ({}.hasOwnProperty.call(fileData.emailTemplate, id)) {
336
348
  try {
337
- await frodo.email.template.putEmailTemplate(id.replace(regexEmailTemplateType, ''), fileData.emailTemplate[id]);
349
+ await updateEmailTemplate(id.replace(regexEmailTemplateType, ''), fileData.emailTemplate[id]);
338
350
  succeedSpinner(`Imported ${id}`);
339
- } catch (putEmailTemplateError) {
340
- var _putEmailTemplateErro3;
351
+ } catch (updateEmailTemplateError) {
352
+ var _updateEmailTemplateE2;
341
353
  failSpinner(`Error importing ${id}`);
342
- printMessage((_putEmailTemplateErro3 = putEmailTemplateError.response) === null || _putEmailTemplateErro3 === void 0 ? void 0 : _putEmailTemplateErro3.data, 'error');
354
+ printMessage((_updateEmailTemplateE2 = updateEmailTemplateError.response) === null || _updateEmailTemplateE2 === void 0 ? void 0 : _updateEmailTemplateE2.data, 'error');
343
355
  }
344
356
  break;
345
357
  }
@@ -350,4 +362,4 @@ export async function importFirstEmailTemplateFromFile(file, raw = false) {
350
362
  }
351
363
  });
352
364
  }
353
- //# sourceMappingURL=EmailTemplateOps.js.map
365
+ //# 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":"AAAA,SAASA,KAAK,QAAQ,uBAAuB;AAC7C,OAAOC,EAAE,MAAM,IAAI;AAEnB,SAASC,gBAAgB,EAAEC,cAAc,QAAQ,4BAA4B;AAC7E,SACEC,uBAAuB,EACvBC,uBAAuB,EACvBC,qBAAqB,EACrBC,YAAY,EACZC,WAAW,EACXC,WAAW,EACXC,cAAc,EACdC,WAAW,EACXC,YAAY,QACP,kBAAkB;AACzB,OAAOC,QAAQ,MAAM,kBAAkB;AACvC,OAAOC,IAAI,MAAM,MAAM;AACvB,SAASC,SAAS,QAAQ,kBAAkB;AAE5C,MAAMC,mBAAmB,GAAGhB,KAAK,CAACiB,KAAK,CAACC,QAAQ,CAACF,mBAAmB;AACpE,MAAMG,wBAAwB,GAAG,gBAAgB;AAEjD,MAAMC,sBAAsB,GAAG,IAAIC,MAAM,CAAE,GAAEL,mBAAoB,GAAE,EAAE,GAAG,CAAC;;AAEzE;AACA,SAASM,mBAAmBA,CAAA,EAAG;EAC7B,OAAO;IACLC,IAAI,EAAE,CAAC,CAAC;IACRC,aAAa,EAAE,CAAC;EAClB,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,qBAAqBA,CACnCC,WAAkC,EAC1B;EACR,MAAMC,WAAW,GAAI,IAAGD,WAAW,CAACE,GAAG,CAACC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAE,KAClEH,WAAW,CAACI,WAAW,GAAGJ,WAAW,CAACI,WAAW,GAAG,EACrD,MACCJ,WAAW,CAACK,aAAa,GACrBL,WAAW,CAACM,OAAO,CAACN,WAAW,CAACK,aAAa,CAAC,GAC9CE,MAAM,CAACC,MAAM,CAACR,WAAW,CAACM,OAAO,CAAC,CAAC,CAAC,CACzC,EAAC;EACF,OAAOL,WAAW;AACpB;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASQ,gBAAgBA,CAAA,EAAW;EACzC,IAAIC,QAAQ,GAAG,EAAE;EACjBA,QAAQ,IAAI,+CAA+C;EAC3DA,QAAQ,IAAI,6CAA6C;EACzD,OAAOA,QAAQ;AACjB;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,aAAaA,CAACX,WAAkC,EAAU;EACxE,MAAMY,UAAU,GAAGZ,WAAW,CAACE,GAAG,CAACW,OAAO,CAAE,GAAEvB,mBAAoB,GAAE,EAAE,EAAE,CAAC;EACzE,MAAMwB,OAAO,GAAI,GAAEd,WAAW,CAACK,aAAc,GAC3CE,MAAM,CAACQ,IAAI,CAACf,WAAW,CAACM,OAAO,CAAC,CAACU,MAAM,GAAG,CAAC,GACtC,KAAIT,MAAM,CAACQ,IAAI,CAACf,WAAW,CAACM,OAAO,CAAC,CAClCW,MAAM,CAAEC,MAAM,IAAKA,MAAM,KAAKlB,WAAW,CAACK,aAAa,CAAC,CACxDc,IAAI,CAAC,GAAG,CAAE,GAAE,GACf,EACL,EAAC;EACF,MAAMC,GAAG,GAAI,KACXpB,WAAW,CAACqB,IAAI,GAAGrB,WAAW,CAACqB,IAAI,GAAGT,UACvC,MAAKE,OAAQ,MACZd,WAAW,CAACM,OAAO,CAACN,WAAW,CAACK,aAAa,CAC9C,QAAOO,UAAW,MAAK;EACxB,OAAOQ,GAAG;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAeE,kBAAkBA,CAACC,IAAI,GAAG,KAAK,EAAsB;EACzE,IAAIC,cAAc,GAAG,EAAE;EACvB,IAAI;IACFA,cAAc,GAAG,CAAC,MAAMlD,KAAK,CAACiB,KAAK,CAACC,QAAQ,CAACiC,iBAAiB,CAAC,CAAC,EAAEC,MAAM;EAC1E,CAAC,CAAC,OAAOC,KAAK,EAAE;IACd9C,YAAY,CAAE,qCAAoC8C,KAAK,CAACC,OAAQ,EAAC,EAAE,OAAO,CAAC;EAC7E;EACAJ,cAAc,CAACK,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,CAAC5B,GAAG,CAAC8B,aAAa,CAACD,CAAC,CAAC7B,GAAG,CAAC,CAAC;EACzD,IAAI,CAACqB,IAAI,EAAE;IACT,KAAK,MAAM,GAAGzB,aAAa,CAAC,IAAI0B,cAAc,CAACS,OAAO,CAAC,CAAC,EAAE;MACxDpD,YAAY,CACT,GAAEiB,aAAa,CAACI,GAAG,CAACW,OAAO,CAAE,GAAEvB,mBAAoB,GAAE,EAAE,EAAE,CAAE,EAAC,EAC7D,MACF,CAAC;IACH;EACF,CAAC,MAAM;IACL,MAAM4C,KAAK,GAAGpD,WAAW,CAAC,CACxB,IAAI,CAAC,YAAY,CAAC,EAClB,MAAM,CAAC,YAAY,CAAC,EACpB,QAAQ,CAAC,YAAY,CAAC,EACtB,WAAW,CAAC,YAAY,CAAC,EACzB,MAAM,CAAC,YAAY,CAAC,EACpB,SAAS,CAAC,YAAY,CAAC,CACxB,CAAC;IACF,KAAK,MAAMgB,aAAa,IAAI0B,cAAc,EAAE;MAC1CU,KAAK,CAACC,IAAI,CAAC;MACT;MACC,GAAErC,aAAa,CAACI,GAAG,CAACW,OAAO,CAAE,GAAEvB,mBAAoB,GAAE,EAAE,EAAE,CAAE,EAAC;MAC7D;MACC,GAAEQ,aAAa,CAACM,WAAW,GAAGN,aAAa,CAACM,WAAW,GAAG,EAAG,EAAC;MAC/D;MACAN,aAAa,CAACsC,OAAO,KAAK,KAAK,GAC3B,UAAU,CAAC,WAAW,CAAC,GACvB,SAAS,CAAC,aAAa,CAAC;MAC5B;MACC,GAAEtC,aAAa,CAACO,aAAc,GAC7BE,MAAM,CAACQ,IAAI,CAACjB,aAAa,CAACQ,OAAO,CAAC,CAACU,MAAM,GAAG,CAAC,GACxC,KAAIT,MAAM,CAACQ,IAAI,CAACjB,aAAa,CAACQ,OAAO,CAAC,CACpCW,MAAM,CAAEC,MAAM,IAAKA,MAAM,KAAKpB,aAAa,CAACO,aAAa,CAAC,CAC1Dc,IAAI,CAAC,GAAG,CAAE,GAAE,GACf,EACL,EAAC;MACF;MACC,GAAErB,aAAa,CAACuC,IAAI,GAAGvC,aAAa,CAACuC,IAAI,GAAG,EAAG,EAAC;MACjD;MACAlD,QAAQ,CAACW,aAAa,CAACQ,OAAO,CAACR,aAAa,CAACO,aAAa,CAAC,EAAE,EAAE,CAAC,CACjE,CAAC;IACJ;IACAxB,YAAY,CAACqD,KAAK,CAACI,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;EACxC;EACA,OAAOd,cAAc;AACvB;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAee,yBAAyBA,CAC7C3B,UAAkB,EAClB4B,IAAY,EACZ;EACA,IAAIC,QAAQ,GAAGD,IAAI;EACnB,IAAI,CAACC,QAAQ,EAAE;IACbA,QAAQ,GAAGjE,gBAAgB,CAACoC,UAAU,EAAEnB,wBAAwB,CAAC;EACnE;EACAf,uBAAuB,CAAC,aAAa,EAAE,CAAC,EAAG,aAAYkC,UAAW,EAAC,CAAC;EACpE,IAAI;IACF,MAAM8B,YAAY,GAAG,MAAMpE,KAAK,CAACiB,KAAK,CAACC,QAAQ,CAACmD,gBAAgB,CAC9D/B,UACF,CAAC;IACDjC,uBAAuB,CAAE,gBAAe8D,QAAS,EAAC,CAAC;IACnD,MAAMG,QAAQ,GAAGhD,mBAAmB,CAAC,CAAC;IACtCgD,QAAQ,CAAC9C,aAAa,CAACc,UAAU,CAAC,GAAG8B,YAAY;IACjDjE,cAAc,CAACmE,QAAQ,EAAEH,QAAQ,CAAC;IAClC7D,qBAAqB,CAClB,YAAWgC,UAAU,CAAC,YAAY,CAAE,OAAM6B,QAAQ,CAAC,YAAY,CAAE,GACpE,CAAC;EACH,CAAC,CAAC,OAAOI,GAAG,EAAE;IACZjE,qBAAqB,CAAE,GAAEiE,GAAI,EAAC,CAAC;IAC/BhE,YAAY,CAACgE,GAAG,EAAE,OAAO,CAAC;EAC5B;AACF;;AAEA;AACA;AACA;AACA;AACA,OAAO,eAAeC,0BAA0BA,CAACN,IAAI,EAAE;EACrD,IAAIC,QAAQ,GAAGD,IAAI;EACnB,IAAI,CAACC,QAAQ,EAAE;IACbA,QAAQ,GAAGjE,gBAAgB,CAAE,mBAAkB,EAAEiB,wBAAwB,CAAC;EAC5E;EACA,IAAI;IACF,MAAMmD,QAAQ,GAAGhD,mBAAmB,CAAC,CAAC;IACtC,MAAMmD,QAAQ,GAAG,MAAMzE,KAAK,CAACiB,KAAK,CAACC,QAAQ,CAACiC,iBAAiB,CAAC,CAAC;IAC/D,MAAMuB,SAAS,GAAGD,QAAQ,CAACrB,MAAM;IACjChD,uBAAuB,CACrB,aAAa,EACbqE,QAAQ,CAACE,WAAW,EACpB,2BACF,CAAC;IACD,KAAK,MAAMzD,QAAQ,IAAIwD,SAAS,EAAE;MAChC,MAAMpC,UAAU,GAAGpB,QAAQ,CAACU,GAAG,CAACW,OAAO,CAAE,GAAEvB,mBAAoB,GAAE,EAAE,EAAE,CAAC;MACtEX,uBAAuB,CAAE,aAAYiC,UAAW,EAAC,CAAC;MAClDgC,QAAQ,CAAC9C,aAAa,CAACc,UAAU,CAAC,GAAGpB,QAAQ;IAC/C;IACAf,cAAc,CAACmE,QAAQ,EAAEH,QAAQ,CAAC;IAClC7D,qBAAqB,CAClB,GAAEmE,QAAQ,CAACE,WAAY,0BAAyBR,QAAS,GAC5D,CAAC;EACH,CAAC,CAAC,OAAOI,GAAG,EAAE;IACZjE,qBAAqB,CAAE,GAAEiE,GAAI,EAAC,CAAC;IAC/BhE,YAAY,CAACgE,GAAG,EAAE,OAAO,CAAC;EAC5B;AACF;;AAEA;AACA;AACA;AACA,OAAO,eAAeK,2BAA2BA,CAAA,EAAG;EAClD,IAAI;IACF,MAAMH,QAAQ,GAAG,MAAMzE,KAAK,CAACiB,KAAK,CAACC,QAAQ,CAACiC,iBAAiB,CAAC,CAAC;IAC/D,MAAMuB,SAAS,GAAGD,QAAQ,CAACrB,MAAM;IACjChD,uBAAuB,CACrB,aAAa,EACbqE,QAAQ,CAACE,WAAW,EACpB,2BACF,CAAC;IACD,KAAK,MAAMzD,QAAQ,IAAIwD,SAAS,EAAE;MAChC,MAAMpC,UAAU,GAAGpB,QAAQ,CAACU,GAAG,CAACW,OAAO,CAAE,GAAEvB,mBAAoB,GAAE,EAAE,EAAE,CAAC;MACtE,MAAMmD,QAAQ,GAAGjE,gBAAgB,CAACoC,UAAU,EAAEnB,wBAAwB,CAAC;MACvE,MAAMmD,QAAQ,GAAGhD,mBAAmB,CAAC,CAAC;MACtCjB,uBAAuB,CAAE,aAAYiC,UAAW,EAAC,CAAC;MAClDgC,QAAQ,CAAC9C,aAAa,CAACc,UAAU,CAAC,GAAGpB,QAAQ;MAC7Cf,cAAc,CAACmE,QAAQ,EAAEH,QAAQ,CAAC;IACpC;IACA7D,qBAAqB,CAAE,GAAEmE,QAAQ,CAACE,WAAY,sBAAqB,CAAC;EACtE,CAAC,CAAC,OAAOJ,GAAG,EAAE;IACZjE,qBAAqB,CAAE,GAAEiE,GAAI,EAAC,CAAC;IAC/BhE,YAAY,CAACgE,GAAG,EAAE,OAAO,CAAC;EAC5B;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAeM,2BAA2BA,CAC/CvC,UAAkB,EAClB4B,IAAY,EACZY,GAAG,GAAG,KAAK,EACX;EACA;EACAxC,UAAU,GAAGA,UAAU,CAACyC,UAAU,CAAE,GAAE/D,mBAAoB,GAAE,EAAE,EAAE,CAAC;EACjEf,EAAE,CAAC+E,QAAQ,CAACd,IAAI,EAAE,MAAM,EAAE,OAAOK,GAAG,EAAEU,IAAI,KAAK;IAC7C,IAAIV,GAAG,EAAE,MAAMA,GAAG;IAClB,MAAMD,QAAQ,GAAGY,IAAI,CAACC,KAAK,CAACF,IAAI,CAAC;IACjC,IAAIH,GAAG,IAAI9E,KAAK,CAACoF,KAAK,CAACC,KAAK,CAACC,cAAc,CAAChB,QAAQ,CAAC/C,IAAI,CAAC,EAAE;MAC1DnB,uBAAuB,CAAC,aAAa,EAAE,CAAC,EAAG,aAAYkC,UAAW,EAAC,CAAC;MACpE,IACEgC,QAAQ,CAAC9C,aAAa,CAACc,UAAU,CAAC,IACjCwC,GAAG,IAAIR,QAAQ,CAAC1C,GAAG,KAAKU,UAAW,EACpC;QACA,IAAI;UACF,MAAMiD,iBAAiB,GAAGT,GAAG,GACzBU,UAAU,CAAClB,QAAQ,CAAC,GACpBA,QAAQ,CAAC9C,aAAa,CAACc,UAAU,CAAC;UACtC,MAAMtC,KAAK,CAACiB,KAAK,CAACC,QAAQ,CAACuE,gBAAgB,CACzCnD,UAAU,EACViD,iBACF,CAAC;UACDlF,uBAAuB,CAAE,aAAYiC,UAAW,EAAC,CAAC;UAClDhC,qBAAqB,CAAE,YAAWgC,UAAW,EAAC,CAAC;QACjD,CAAC,CAAC,OAAOoD,qBAAqB,EAAE;UAC9BpF,qBAAqB,CAAE,GAAEoF,qBAAsB,EAAC,CAAC;UACjDnF,YAAY,CAACmF,qBAAqB,EAAE,OAAO,CAAC;QAC9C;MACF,CAAC,MAAM;QACLpF,qBAAqB,CAClB,kBAAiBgC,UAAW,iBAAgB4B,IAAK,GACpD,CAAC;QACD3D,YAAY,CACT,kBAAiB+B,UAAW,iBAAgB4B,IAAK,GAAE,EACpD,OACF,CAAC;MACH;IACF,CAAC,MAAM;MACL3D,YAAY,CAAC,6BAA6B,EAAE,OAAO,CAAC;IACtD;EACF,CAAC,CAAC;AACJ;;AAEA;AACA;AACA;AACA;AACA,OAAO,eAAeoF,4BAA4BA,CAACzB,IAAY,EAAE;EAC/DjE,EAAE,CAAC+E,QAAQ,CAACd,IAAI,EAAE,MAAM,EAAE,OAAOK,GAAG,EAAEU,IAAI,KAAK;IAC7C,IAAIV,GAAG,EAAE,MAAMA,GAAG;IAClB,MAAMD,QAAQ,GAAGY,IAAI,CAACC,KAAK,CAACF,IAAI,CAAC;IACjC,IAAIjF,KAAK,CAACoF,KAAK,CAACC,KAAK,CAACC,cAAc,CAAChB,QAAQ,CAAC/C,IAAI,CAAC,EAAE;MACnDnB,uBAAuB,CACrB,aAAa,EACb6B,MAAM,CAACQ,IAAI,CAAC6B,QAAQ,CAAC9C,aAAa,CAAC,CAACkB,MAAM,EACzC,2BACH,CAAC;MACD,KAAK,MAAMkD,EAAE,IAAItB,QAAQ,CAAC9C,aAAa,EAAE;QACvC,IAAI,CAAC,CAAC,CAACqE,cAAc,CAACC,IAAI,CAACxB,QAAQ,CAAC9C,aAAa,EAAEoE,EAAE,CAAC,EAAE;UACtD,MAAMtD,UAAU,GAAGsD,EAAE,CAACrD,OAAO,CAACnB,sBAAsB,EAAE,EAAE,CAAC;UACzD,IAAI;YACF,MAAMpB,KAAK,CAACiB,KAAK,CAACC,QAAQ,CAACuE,gBAAgB,CACzCnD,UAAU,EACVgC,QAAQ,CAAC9C,aAAa,CAACc,UAAU,CACnC,CAAC;YACDjC,uBAAuB,CAAE,YAAWiC,UAAW,EAAC,CAAC;UACnD,CAAC,CAAC,OAAOoD,qBAAqB,EAAE;YAC9BnF,YAAY,CAAE,qBAAoB+B,UAAW,EAAC,EAAE,OAAO,CAAC;YACxD/B,YAAY,CAACmF,qBAAqB,CAACjB,QAAQ,CAACQ,IAAI,EAAE,OAAO,CAAC;UAC5D;QACF;MACF;MACA3E,qBAAqB,CAAE,OAAM,CAAC;IAChC,CAAC,MAAM;MACLC,YAAY,CAAC,6BAA6B,EAAE,OAAO,CAAC;IACtD;EACF,CAAC,CAAC;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA,SAASwF,0BAA0BA,CAAC7B,IAAY,EAAE;EAChDtD,YAAY,CAAE,yDAAwDsD,IAAK,EAAC,CAAC;EAC7E,MAAMC,QAAQ,GAAGrD,IAAI,CAACkF,QAAQ,CAAC9B,IAAI,CAAC;EACpC,MAAM5B,UAAU,GAAG6B,QAAQ,CAAC8B,SAAS,CAAC,EAAE,EAAE9B,QAAQ,CAAC+B,OAAO,CAAC,GAAG,CAAC,CAAC;EAChEtF,YAAY,CACT,+DAA8D0B,UAAW,EAC5E,CAAC;EACD,OAAOA,UAAU;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA,SAASkD,UAAUA,CACjBpB,YAAmC,EACZ;EACvB,IAAIA,YAAY,CAACd,OAAO,IAAI,CAACc,YAAY,CAAC+B,IAAI,EAAE;IAC9C,MAAMC,aAAa,GAAGrF,SAAS,CAACqD,YAAY,CAAC;IAC7CgC,aAAa,CAACD,IAAI,GAAGpF,SAAS,CAACqD,YAAY,CAACd,OAAO,CAAC;IACpD1C,YAAY,CAAE,gDAA+C,CAAC;IAC9DA,YAAY,CAACwD,YAAY,CAAC;IAC1BxD,YAAY,CAAE,iDAAgD,CAAC;IAC/DA,YAAY,CAACwF,aAAa,CAAC;IAC3B,OAAOA,aAAa;EACtB;EACA,OAAOhC,YAAY;AACrB;;AAEA;AACA;AACA;AACA;AACA,OAAO,eAAeiC,6BAA6BA,CAACvB,GAAG,GAAG,KAAK,EAAE;EAC/D,MAAMwB,KAAK,GAAGrG,EAAE,CAACsG,WAAW,CAAC,GAAG,CAAC;EACjC,MAAMC,SAAS,GAAG1B,GAAG,GACjBwB,KAAK,CAAC3D,MAAM,CACTI,IAAI,IACHA,IAAI,CAAC0D,UAAU,CAAE,GAAEzF,mBAAoB,GAAE,CAAC,IAAI+B,IAAI,CAAC2D,QAAQ,CAAE,OAAM,CACvE,CAAC,GACDJ,KAAK,CAAC3D,MAAM,CAAEI,IAAI,IAChBA,IAAI,CAAC4D,WAAW,CAAC,CAAC,CAACD,QAAQ,CAAE,GAAEvF,wBAAyB,OAAM,CAChE,CAAC;EACLf,uBAAuB,CACrB,aAAa,EACboG,SAAS,CAAC9D,MAAM,EAChB,8BACF,CAAC;EACD,IAAIkE,KAAK,GAAG,CAAC;EACb,IAAIC,WAAW,GAAG,CAAC;EACnB,KAAK,MAAM3C,IAAI,IAAIsC,SAAS,EAAE;IAC5B,MAAMvB,IAAI,GAAGhF,EAAE,CAAC6G,YAAY,CAAC5C,IAAI,EAAE,MAAM,CAAC;IAC1C,MAAMI,QAAQ,GAAGY,IAAI,CAACC,KAAK,CAACF,IAAI,CAAC;IACjC,IACGH,GAAG,IAAIZ,IAAI,CAACuC,UAAU,CAAC,gBAAgB,CAAC,IACzCzG,KAAK,CAACoF,KAAK,CAACC,KAAK,CAACC,cAAc,CAAChB,QAAQ,CAAC/C,IAAI,CAAC,EAC/C;MACA,IAAIwF,MAAM,GAAG,CAAC;MACd,IAAIjC,GAAG,EAAE;QACP8B,KAAK,EAAE;QACP,MAAMtE,UAAU,GAAGyD,0BAA0B,CAAC7B,IAAI,CAAC;QACnD,IAAI;UACF,MAAME,YAAY,GAAGoB,UAAU,CAAClB,QAAQ,CAAC;UACzC,MAAMtE,KAAK,CAACiB,KAAK,CAACC,QAAQ,CAACuE,gBAAgB,CAACnD,UAAU,EAAE8B,YAAY,CAAC;QACvE,CAAC,CAAC,OAAOsB,qBAAqB,EAAE;UAAA,IAAAsB,qBAAA;UAC9BD,MAAM,IAAI,CAAC;UACXxG,YAAY,CAAE,qBAAoB+B,UAAW,EAAC,EAAE,OAAO,CAAC;UACxD/B,YAAY,CAACmF,qBAAqB,EAAE,OAAO,CAAC;UAC5CnF,YAAY,EAAAyG,qBAAA,GAACtB,qBAAqB,CAACjB,QAAQ,cAAAuC,qBAAA,uBAA9BA,qBAAA,CAAgC/B,IAAI,EAAE,OAAO,CAAC;QAC7D;MACF,CAAC,MAAM;QACL2B,KAAK,IAAI3E,MAAM,CAACQ,IAAI,CAAC6B,QAAQ,CAAC9C,aAAa,CAAC,CAACkB,MAAM;QACnD,KAAK,MAAMkD,EAAE,IAAItB,QAAQ,CAAC9C,aAAa,EAAE;UACvC,IAAI,CAAC,CAAC,CAACqE,cAAc,CAACC,IAAI,CAACxB,QAAQ,CAAC9C,aAAa,EAAEoE,EAAE,CAAC,EAAE;YACtD,MAAMtD,UAAU,GAAGsD,EAAE,CAACrD,OAAO,CAACnB,sBAAsB,EAAE,EAAE,CAAC;YACzD,IAAI;cACF,MAAMpB,KAAK,CAACiB,KAAK,CAACC,QAAQ,CAACuE,gBAAgB,CACzCnD,UAAU,EACVgC,QAAQ,CAAC9C,aAAa,CAACc,UAAU,CACnC,CAAC;YACH,CAAC,CAAC,OAAOoD,qBAAqB,EAAE;cAC9BqB,MAAM,IAAI,CAAC;cACXxG,YAAY,CAAE,qBAAoB+B,UAAW,EAAC,EAAE,OAAO,CAAC;cACxD/B,YAAY,CAACmF,qBAAqB,CAACjB,QAAQ,CAACQ,IAAI,EAAE,OAAO,CAAC;YAC5D;UACF;QACF;MACF;MACA4B,WAAW,IAAIE,MAAM;MACrB1G,uBAAuB,CAAE,YAAW6D,IAAK,EAAC,CAAC;IAC7C,CAAC,MAAM;MACL3D,YAAY,CAAE,iBAAgB2D,IAAK,UAAS,EAAE,OAAO,CAAC;IACxD;EACF;EACA5D,qBAAqB,CAClB,YAAWsG,KAAK,GAAGC,WAAY,OAAMD,KAAM,2BAC1CJ,SAAS,CAAC9D,MACX,WACH,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA,OAAO,eAAeuE,gCAAgCA,CACpD/C,IAAY,EACZY,GAAG,GAAG,KAAK,EACX;EACA7E,EAAE,CAAC+E,QAAQ,CAACd,IAAI,EAAE,MAAM,EAAE,OAAOK,GAAG,EAAEU,IAAI,KAAK;IAC7C,IAAIV,GAAG,EAAE,MAAMA,GAAG;IAClB,MAAMD,QAAQ,GAAGY,IAAI,CAACC,KAAK,CAACF,IAAI,CAAC;IACjC,IACGH,GAAG,IAAIZ,IAAI,CAACuC,UAAU,CAAC,gBAAgB,CAAC,IACzCzG,KAAK,CAACoF,KAAK,CAACC,KAAK,CAACC,cAAc,CAAChB,QAAQ,CAAC/C,IAAI,CAAC,EAC/C;MACAd,WAAW,CAAE,gCAA+B,CAAC;MAC7C,IAAIqE,GAAG,EAAE;QACP,MAAMxC,UAAU,GAAGyD,0BAA0B,CAAC7B,IAAI,CAAC;QACnD,IAAI;UACF,MAAME,YAAY,GAAGoB,UAAU,CAAClB,QAAQ,CAAC;UACzC,MAAMtE,KAAK,CAACiB,KAAK,CAACC,QAAQ,CAACuE,gBAAgB,CAACnD,UAAU,EAAE8B,YAAY,CAAC;UACrE1D,cAAc,CAAE,YAAW4B,UAAW,EAAC,CAAC;QAC1C,CAAC,CAAC,OAAOoD,qBAAqB,EAAE;UAAA,IAAAwB,sBAAA;UAC9BvG,WAAW,CAAE,mBAAkB2B,UAAW,EAAC,CAAC;UAC5C/B,YAAY,EAAA2G,sBAAA,GAACxB,qBAAqB,CAACjB,QAAQ,cAAAyC,sBAAA,uBAA9BA,sBAAA,CAAgCjC,IAAI,EAAE,OAAO,CAAC;QAC7D;MACF,CAAC,MAAM;QACL,KAAK,MAAMW,EAAE,IAAItB,QAAQ,CAAC9C,aAAa,EAAE;UACvC,IAAI,CAAC,CAAC,CAACqE,cAAc,CAACC,IAAI,CAACxB,QAAQ,CAAC9C,aAAa,EAAEoE,EAAE,CAAC,EAAE;YACtD,IAAI;cACF,MAAM5F,KAAK,CAACiB,KAAK,CAACC,QAAQ,CAACuE,gBAAgB,CACzCG,EAAE,CAACrD,OAAO,CAACnB,sBAAsB,EAAE,EAAE,CAAC,EACtCkD,QAAQ,CAAC9C,aAAa,CAACoE,EAAE,CAC3B,CAAC;cACDlF,cAAc,CAAE,YAAWkF,EAAG,EAAC,CAAC;YAClC,CAAC,CAAC,OAAOF,qBAAqB,EAAE;cAAA,IAAAyB,sBAAA;cAC9BxG,WAAW,CAAE,mBAAkBiF,EAAG,EAAC,CAAC;cACpCrF,YAAY,EAAA4G,sBAAA,GAACzB,qBAAqB,CAACjB,QAAQ,cAAA0C,sBAAA,uBAA9BA,sBAAA,CAAgClC,IAAI,EAAE,OAAO,CAAC;YAC7D;YACA;UACF;QACF;MACF;IACF,CAAC,MAAM;MACL1E,YAAY,CAAC,6BAA6B,EAAE,OAAO,CAAC;IACtD;EACF,CAAC,CAAC;AACJ"}
1
+ {"version":3,"file":"EmailTemplateOps.js","names":["frodo","fs","path","createProgressIndicator","createTable","debugMessage","failSpinner","printMessage","showSpinner","stopProgressIndicator","succeedSpinner","updateProgressIndicator","getTypedFilename","saveJsonToFile","cloneDeep","wordwrap","validateImport","getFilePath","getWorkingDirectory","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","filePath","templateData","fileData","err","exportEmailTemplatesToFile","templates","exportEmailTemplatesToFiles","importEmailTemplateFromFile","raw","replaceAll","readFile","data","JSON","parse","getTemplateIdFromFileName","emailTemplateData","s2sConvert","updateEmailTemplateError","importEmailTemplatesFromFile","id","hasOwnProperty","call","response","basename","Error","html","convertedData","importEmailTemplatesFromFiles","names","readdirSync","jsonFiles","startsWith","endsWith","toLowerCase","map","total","totalErrors","readFileSync","errors","_updateEmailTemplateE","importFirstEmailTemplateFromFile","_error$response","_updateEmailTemplateE2"],"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, getFilePath, getWorkingDirectory } = 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 const filePath = getFilePath(fileName, true);\n createProgressIndicator('determinate', 1, `Exporting ${templateId}`);\n try {\n const templateData = await readEmailTemplate(templateId);\n updateProgressIndicator(`Writing file ${filePath}`);\n const fileData = getFileDataTemplate();\n fileData.emailTemplate[templateId] = templateData;\n saveJsonToFile(fileData, filePath);\n stopProgressIndicator(\n `Exported ${templateId['brightCyan']} to ${filePath['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 const filePath = getFilePath(fileName, true);\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, filePath);\n stopProgressIndicator(\n `${templates.length} templates exported to ${filePath}.`\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, getFilePath(fileName, true));\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 templateId = templateId.replaceAll(`${EMAIL_TEMPLATE_TYPE}/`, '');\n const filePath = getFilePath(file);\n fs.readFile(filePath, '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 && fileData.emailTemplate[templateId]) ||\n (raw && getTemplateIdFromFileName(file) === 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 ${filePath}!`\n );\n printMessage(\n `Email template ${templateId} not found in ${filePath}!`,\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(getFilePath(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 getTemplateIdFromFileName(file: string) {\n debugMessage(`cli.EmailTemplateOps.getTemplateIdFromFileName: file=${file}`);\n const basename = path.basename(file);\n const keys = basename.split('-');\n if (keys[0] !== EMAIL_TEMPLATE_TYPE || keys.length <= 1)\n throw new Error(`Filename does not indicate a raw email template: ${file}`);\n const templateId = keys[1].split('.')[0];\n debugMessage(\n `cli.EmailTemplateOps.getTemplateIdFromFileName: 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(getWorkingDirectory());\n const jsonFiles = names\n .filter((name) =>\n raw\n ? name.startsWith(`${EMAIL_TEMPLATE_TYPE}-`) && name.endsWith(`.json`)\n : name.toLowerCase().endsWith(`${EMAIL_TEMPLATE_FILE_TYPE}.json`)\n )\n .map((name) => getFilePath(name));\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 = getTemplateIdFromFileName(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(getFilePath(file), 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data);\n if (raw || validateImport(fileData.meta)) {\n showSpinner(`Importing first email template`);\n if (raw) {\n try {\n const templateId = getTemplateIdFromFileName(file);\n const templateData = s2sConvert(fileData);\n await updateEmailTemplate(templateId, templateData);\n succeedSpinner(`Imported ${templateId}`);\n } catch (error) {\n failSpinner(`Error importing email template: ${error}`);\n printMessage(error.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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"}