@rockcarver/frodo-cli 2.0.0-59 → 2.0.0-60

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 (498) hide show
  1. package/.vscode/launch.json +1 -0
  2. package/CHANGELOG.md +10 -1
  3. package/dist/app.cjs +187368 -0
  4. package/dist/app.cjs.map +1 -0
  5. package/dist/app.d.cts +2 -0
  6. package/dist/chunk-MPPKDFVI.cjs +56 -0
  7. package/dist/chunk-MPPKDFVI.cjs.map +1 -0
  8. package/dist/launch.cjs +27 -0
  9. package/dist/launch.cjs.map +1 -0
  10. package/dist/launch.d.cts +1 -0
  11. package/dist/loader.cjs +836 -0
  12. package/dist/loader.cjs.map +1 -0
  13. package/dist/loader.d.cts +3 -0
  14. package/package.json +37 -53
  15. package/tsup.config.ts +40 -0
  16. package/esm/app.js +0 -80
  17. package/esm/app.js.map +0 -1
  18. package/esm/cli/FrodoCommand.js +0 -181
  19. package/esm/cli/FrodoCommand.js.map +0 -1
  20. package/esm/cli/_template/something-delete.js +0 -20
  21. package/esm/cli/_template/something-delete.js.map +0 -1
  22. package/esm/cli/_template/something-describe.js +0 -20
  23. package/esm/cli/_template/something-describe.js.map +0 -1
  24. package/esm/cli/_template/something-else-delete.js +0 -20
  25. package/esm/cli/_template/something-else-delete.js.map +0 -1
  26. package/esm/cli/_template/something-else-describe.js +0 -20
  27. package/esm/cli/_template/something-else-describe.js.map +0 -1
  28. package/esm/cli/_template/something-else-export.js +0 -20
  29. package/esm/cli/_template/something-else-export.js.map +0 -1
  30. package/esm/cli/_template/something-else-import.js +0 -20
  31. package/esm/cli/_template/something-else-import.js.map +0 -1
  32. package/esm/cli/_template/something-else-list.js +0 -20
  33. package/esm/cli/_template/something-else-list.js.map +0 -1
  34. package/esm/cli/_template/something-else.js +0 -17
  35. package/esm/cli/_template/something-else.js.map +0 -1
  36. package/esm/cli/_template/something-export.js +0 -20
  37. package/esm/cli/_template/something-export.js.map +0 -1
  38. package/esm/cli/_template/something-import.js +0 -20
  39. package/esm/cli/_template/something-import.js.map +0 -1
  40. package/esm/cli/_template/something-list.js +0 -20
  41. package/esm/cli/_template/something-list.js.map +0 -1
  42. package/esm/cli/_template/something-other-delete.js +0 -20
  43. package/esm/cli/_template/something-other-delete.js.map +0 -1
  44. package/esm/cli/_template/something-other-describe.js +0 -20
  45. package/esm/cli/_template/something-other-describe.js.map +0 -1
  46. package/esm/cli/_template/something-other-export.js +0 -20
  47. package/esm/cli/_template/something-other-export.js.map +0 -1
  48. package/esm/cli/_template/something-other-import.js +0 -20
  49. package/esm/cli/_template/something-other-import.js.map +0 -1
  50. package/esm/cli/_template/something-other-list.js +0 -20
  51. package/esm/cli/_template/something-other-list.js.map +0 -1
  52. package/esm/cli/_template/something-other.js +0 -17
  53. package/esm/cli/_template/something-other.js.map +0 -1
  54. package/esm/cli/_template/something.js +0 -20
  55. package/esm/cli/_template/something.js.map +0 -1
  56. package/esm/cli/admin/admin-add-autoid-static-user-mapping.js +0 -23
  57. package/esm/cli/admin/admin-add-autoid-static-user-mapping.js.map +0 -1
  58. package/esm/cli/admin/admin-create-oauth2-client-with-admin-privileges.js +0 -80
  59. package/esm/cli/admin/admin-create-oauth2-client-with-admin-privileges.js.map +0 -1
  60. package/esm/cli/admin/admin-execute-rfc7523-authz-grant-flow.js +0 -40
  61. package/esm/cli/admin/admin-execute-rfc7523-authz-grant-flow.js.map +0 -1
  62. package/esm/cli/admin/admin-federation-export.js +0 -43
  63. package/esm/cli/admin/admin-federation-export.js.map +0 -1
  64. package/esm/cli/admin/admin-federation-import.js +0 -47
  65. package/esm/cli/admin/admin-federation-import.js.map +0 -1
  66. package/esm/cli/admin/admin-federation-list.js +0 -27
  67. package/esm/cli/admin/admin-federation-list.js.map +0 -1
  68. package/esm/cli/admin/admin-federation.js +0 -21
  69. package/esm/cli/admin/admin-federation.js.map +0 -1
  70. package/esm/cli/admin/admin-generate-rfc7523-authz-grant-artefacts.js +0 -43
  71. package/esm/cli/admin/admin-generate-rfc7523-authz-grant-artefacts.js.map +0 -1
  72. package/esm/cli/admin/admin-get-access-token.js +0 -27
  73. package/esm/cli/admin/admin-get-access-token.js.map +0 -1
  74. package/esm/cli/admin/admin-grant-oauth2-client-admin-privileges.js +0 -25
  75. package/esm/cli/admin/admin-grant-oauth2-client-admin-privileges.js.map +0 -1
  76. package/esm/cli/admin/admin-hide-generic-extension-attributes.js +0 -25
  77. package/esm/cli/admin/admin-hide-generic-extension-attributes.js.map +0 -1
  78. package/esm/cli/admin/admin-list-oauth2-clients-with-admin-privileges.js +0 -24
  79. package/esm/cli/admin/admin-list-oauth2-clients-with-admin-privileges.js.map +0 -1
  80. package/esm/cli/admin/admin-list-oauth2-clients-with-custom-privileges.js +0 -24
  81. package/esm/cli/admin/admin-list-oauth2-clients-with-custom-privileges.js.map +0 -1
  82. package/esm/cli/admin/admin-list-static-user-mappings.js +0 -24
  83. package/esm/cli/admin/admin-list-static-user-mappings.js.map +0 -1
  84. package/esm/cli/admin/admin-remove-static-user-mapping.js +0 -24
  85. package/esm/cli/admin/admin-remove-static-user-mapping.js.map +0 -1
  86. package/esm/cli/admin/admin-repair-org-model.js +0 -25
  87. package/esm/cli/admin/admin-repair-org-model.js.map +0 -1
  88. package/esm/cli/admin/admin-revoke-oauth2-client-admin-privileges.js +0 -25
  89. package/esm/cli/admin/admin-revoke-oauth2-client-admin-privileges.js.map +0 -1
  90. package/esm/cli/admin/admin-show-generic-extension-attributes.js +0 -25
  91. package/esm/cli/admin/admin-show-generic-extension-attributes.js.map +0 -1
  92. package/esm/cli/admin/admin-train-auto-access-model.js +0 -32
  93. package/esm/cli/admin/admin-train-auto-access-model.js.map +0 -1
  94. package/esm/cli/admin/admin.js +0 -41
  95. package/esm/cli/admin/admin.js.map +0 -1
  96. package/esm/cli/agent/agent-delete.js +0 -38
  97. package/esm/cli/agent/agent-delete.js.map +0 -1
  98. package/esm/cli/agent/agent-describe.js +0 -20
  99. package/esm/cli/agent/agent-describe.js.map +0 -1
  100. package/esm/cli/agent/agent-export.js +0 -43
  101. package/esm/cli/agent/agent-export.js.map +0 -1
  102. package/esm/cli/agent/agent-gateway-delete.js +0 -38
  103. package/esm/cli/agent/agent-gateway-delete.js.map +0 -1
  104. package/esm/cli/agent/agent-gateway-describe.js +0 -20
  105. package/esm/cli/agent/agent-gateway-describe.js.map +0 -1
  106. package/esm/cli/agent/agent-gateway-export.js +0 -43
  107. package/esm/cli/agent/agent-gateway-export.js.map +0 -1
  108. package/esm/cli/agent/agent-gateway-import.js +0 -49
  109. package/esm/cli/agent/agent-gateway-import.js.map +0 -1
  110. package/esm/cli/agent/agent-gateway-list.js +0 -22
  111. package/esm/cli/agent/agent-gateway-list.js.map +0 -1
  112. package/esm/cli/agent/agent-gateway.js +0 -17
  113. package/esm/cli/agent/agent-gateway.js.map +0 -1
  114. package/esm/cli/agent/agent-import.js +0 -49
  115. package/esm/cli/agent/agent-import.js.map +0 -1
  116. package/esm/cli/agent/agent-java-delete.js +0 -38
  117. package/esm/cli/agent/agent-java-delete.js.map +0 -1
  118. package/esm/cli/agent/agent-java-describe.js +0 -20
  119. package/esm/cli/agent/agent-java-describe.js.map +0 -1
  120. package/esm/cli/agent/agent-java-export.js +0 -43
  121. package/esm/cli/agent/agent-java-export.js.map +0 -1
  122. package/esm/cli/agent/agent-java-import.js +0 -49
  123. package/esm/cli/agent/agent-java-import.js.map +0 -1
  124. package/esm/cli/agent/agent-java-list.js +0 -22
  125. package/esm/cli/agent/agent-java-list.js.map +0 -1
  126. package/esm/cli/agent/agent-java.js +0 -17
  127. package/esm/cli/agent/agent-java.js.map +0 -1
  128. package/esm/cli/agent/agent-list.js +0 -22
  129. package/esm/cli/agent/agent-list.js.map +0 -1
  130. package/esm/cli/agent/agent-web-delete.js +0 -38
  131. package/esm/cli/agent/agent-web-delete.js.map +0 -1
  132. package/esm/cli/agent/agent-web-describe.js +0 -20
  133. package/esm/cli/agent/agent-web-describe.js.map +0 -1
  134. package/esm/cli/agent/agent-web-export.js +0 -43
  135. package/esm/cli/agent/agent-web-export.js.map +0 -1
  136. package/esm/cli/agent/agent-web-import.js +0 -49
  137. package/esm/cli/agent/agent-web-import.js.map +0 -1
  138. package/esm/cli/agent/agent-web-list.js +0 -22
  139. package/esm/cli/agent/agent-web-list.js.map +0 -1
  140. package/esm/cli/agent/agent-web.js +0 -17
  141. package/esm/cli/agent/agent-web.js.map +0 -1
  142. package/esm/cli/agent/agent.js +0 -22
  143. package/esm/cli/agent/agent.js.map +0 -1
  144. package/esm/cli/app/app-delete.js +0 -36
  145. package/esm/cli/app/app-delete.js.map +0 -1
  146. package/esm/cli/app/app-describe.js +0 -21
  147. package/esm/cli/app/app-describe.js.map +0 -1
  148. package/esm/cli/app/app-export.js +0 -51
  149. package/esm/cli/app/app-export.js.map +0 -1
  150. package/esm/cli/app/app-import.js +0 -56
  151. package/esm/cli/app/app-import.js.map +0 -1
  152. package/esm/cli/app/app-list.js +0 -25
  153. package/esm/cli/app/app-list.js.map +0 -1
  154. package/esm/cli/app/app.js +0 -18
  155. package/esm/cli/app/app.js.map +0 -1
  156. package/esm/cli/authn/authn-describe.js +0 -28
  157. package/esm/cli/authn/authn-describe.js.map +0 -1
  158. package/esm/cli/authn/authn-export.js +0 -24
  159. package/esm/cli/authn/authn-export.js.map +0 -1
  160. package/esm/cli/authn/authn-import.js +0 -24
  161. package/esm/cli/authn/authn-import.js.map +0 -1
  162. package/esm/cli/authn/authn.js +0 -12
  163. package/esm/cli/authn/authn.js.map +0 -1
  164. package/esm/cli/authz/authz-policy-delete.js +0 -41
  165. package/esm/cli/authz/authz-policy-delete.js.map +0 -1
  166. package/esm/cli/authz/authz-policy-describe.js +0 -28
  167. package/esm/cli/authz/authz-policy-describe.js.map +0 -1
  168. package/esm/cli/authz/authz-policy-export.js +0 -73
  169. package/esm/cli/authz/authz-policy-export.js.map +0 -1
  170. package/esm/cli/authz/authz-policy-import.js +0 -63
  171. package/esm/cli/authz/authz-policy-import.js.map +0 -1
  172. package/esm/cli/authz/authz-policy-list.js +0 -35
  173. package/esm/cli/authz/authz-policy-list.js.map +0 -1
  174. package/esm/cli/authz/authz-policy.js +0 -17
  175. package/esm/cli/authz/authz-policy.js.map +0 -1
  176. package/esm/cli/authz/authz-set-delete.js +0 -35
  177. package/esm/cli/authz/authz-set-delete.js.map +0 -1
  178. package/esm/cli/authz/authz-set-describe.js +0 -28
  179. package/esm/cli/authz/authz-set-describe.js.map +0 -1
  180. package/esm/cli/authz/authz-set-export.js +0 -53
  181. package/esm/cli/authz/authz-set-export.js.map +0 -1
  182. package/esm/cli/authz/authz-set-import.js +0 -59
  183. package/esm/cli/authz/authz-set-import.js.map +0 -1
  184. package/esm/cli/authz/authz-set-list.js +0 -23
  185. package/esm/cli/authz/authz-set-list.js.map +0 -1
  186. package/esm/cli/authz/authz-set.js +0 -17
  187. package/esm/cli/authz/authz-set.js.map +0 -1
  188. package/esm/cli/authz/authz-type-delete.js +0 -41
  189. package/esm/cli/authz/authz-type-delete.js.map +0 -1
  190. package/esm/cli/authz/authz-type-describe.js +0 -32
  191. package/esm/cli/authz/authz-type-describe.js.map +0 -1
  192. package/esm/cli/authz/authz-type-export.js +0 -47
  193. package/esm/cli/authz/authz-type-export.js.map +0 -1
  194. package/esm/cli/authz/authz-type-import.js +0 -53
  195. package/esm/cli/authz/authz-type-import.js.map +0 -1
  196. package/esm/cli/authz/authz-type-list.js +0 -24
  197. package/esm/cli/authz/authz-type-list.js.map +0 -1
  198. package/esm/cli/authz/authz-type.js +0 -17
  199. package/esm/cli/authz/authz-type.js.map +0 -1
  200. package/esm/cli/authz/authz.js +0 -12
  201. package/esm/cli/authz/authz.js.map +0 -1
  202. package/esm/cli/config/config-delete.js +0 -20
  203. package/esm/cli/config/config-delete.js.map +0 -1
  204. package/esm/cli/config/config-describe.js +0 -20
  205. package/esm/cli/config/config-describe.js.map +0 -1
  206. package/esm/cli/config/config-export.js +0 -52
  207. package/esm/cli/config/config-export.js.map +0 -1
  208. package/esm/cli/config/config-import.js +0 -62
  209. package/esm/cli/config/config-import.js.map +0 -1
  210. package/esm/cli/config/config-list.js +0 -20
  211. package/esm/cli/config/config-list.js.map +0 -1
  212. package/esm/cli/config/config.js +0 -22
  213. package/esm/cli/config/config.js.map +0 -1
  214. package/esm/cli/conn/conn-delete.js +0 -21
  215. package/esm/cli/conn/conn-delete.js.map +0 -1
  216. package/esm/cli/conn/conn-describe.js +0 -16
  217. package/esm/cli/conn/conn-describe.js.map +0 -1
  218. package/esm/cli/conn/conn-list.js +0 -16
  219. package/esm/cli/conn/conn-list.js.map +0 -1
  220. package/esm/cli/conn/conn-save.js +0 -106
  221. package/esm/cli/conn/conn-save.js.map +0 -1
  222. package/esm/cli/conn/conn.js +0 -16
  223. package/esm/cli/conn/conn.js.map +0 -1
  224. package/esm/cli/email/email-template-export.js +0 -42
  225. package/esm/cli/email/email-template-export.js.map +0 -1
  226. package/esm/cli/email/email-template-import.js +0 -47
  227. package/esm/cli/email/email-template-import.js.map +0 -1
  228. package/esm/cli/email/email-template-list.js +0 -24
  229. package/esm/cli/email/email-template-list.js.map +0 -1
  230. package/esm/cli/email/email-template.js +0 -13
  231. package/esm/cli/email/email-template.js.map +0 -1
  232. package/esm/cli/email/email.js +0 -9
  233. package/esm/cli/email/email.js.map +0 -1
  234. package/esm/cli/esv/esv-apply.js +0 -61
  235. package/esm/cli/esv/esv-apply.js.map +0 -1
  236. package/esm/cli/esv/esv-secret-create.js +0 -29
  237. package/esm/cli/esv/esv-secret-create.js.map +0 -1
  238. package/esm/cli/esv/esv-secret-delete.js +0 -34
  239. package/esm/cli/esv/esv-secret-delete.js.map +0 -1
  240. package/esm/cli/esv/esv-secret-describe.js +0 -24
  241. package/esm/cli/esv/esv-secret-describe.js.map +0 -1
  242. package/esm/cli/esv/esv-secret-export.js +0 -34
  243. package/esm/cli/esv/esv-secret-export.js.map +0 -1
  244. package/esm/cli/esv/esv-secret-import.js +0 -20
  245. package/esm/cli/esv/esv-secret-import.js.map +0 -1
  246. package/esm/cli/esv/esv-secret-list.js +0 -24
  247. package/esm/cli/esv/esv-secret-list.js.map +0 -1
  248. package/esm/cli/esv/esv-secret-set.js +0 -24
  249. package/esm/cli/esv/esv-secret-set.js.map +0 -1
  250. package/esm/cli/esv/esv-secret-version-activate.js +0 -28
  251. package/esm/cli/esv/esv-secret-version-activate.js.map +0 -1
  252. package/esm/cli/esv/esv-secret-version-create.js +0 -29
  253. package/esm/cli/esv/esv-secret-version-create.js.map +0 -1
  254. package/esm/cli/esv/esv-secret-version-deactivate.js +0 -28
  255. package/esm/cli/esv/esv-secret-version-deactivate.js.map +0 -1
  256. package/esm/cli/esv/esv-secret-version-delete.js +0 -34
  257. package/esm/cli/esv/esv-secret-version-delete.js.map +0 -1
  258. package/esm/cli/esv/esv-secret-version-list.js +0 -24
  259. package/esm/cli/esv/esv-secret-version-list.js.map +0 -1
  260. package/esm/cli/esv/esv-secret-version.js +0 -17
  261. package/esm/cli/esv/esv-secret-version.js.map +0 -1
  262. package/esm/cli/esv/esv-secret.js +0 -25
  263. package/esm/cli/esv/esv-secret.js.map +0 -1
  264. package/esm/cli/esv/esv-variable-create.js +0 -24
  265. package/esm/cli/esv/esv-variable-create.js.map +0 -1
  266. package/esm/cli/esv/esv-variable-delete.js +0 -35
  267. package/esm/cli/esv/esv-variable-delete.js.map +0 -1
  268. package/esm/cli/esv/esv-variable-describe.js +0 -24
  269. package/esm/cli/esv/esv-variable-describe.js.map +0 -1
  270. package/esm/cli/esv/esv-variable-export.js +0 -35
  271. package/esm/cli/esv/esv-variable-export.js.map +0 -1
  272. package/esm/cli/esv/esv-variable-import.js +0 -20
  273. package/esm/cli/esv/esv-variable-import.js.map +0 -1
  274. package/esm/cli/esv/esv-variable-list.js +0 -24
  275. package/esm/cli/esv/esv-variable-list.js.map +0 -1
  276. package/esm/cli/esv/esv-variable-set.js +0 -31
  277. package/esm/cli/esv/esv-variable-set.js.map +0 -1
  278. package/esm/cli/esv/esv-variable.js +0 -23
  279. package/esm/cli/esv/esv-variable.js.map +0 -1
  280. package/esm/cli/esv/esv.js +0 -12
  281. package/esm/cli/esv/esv.js.map +0 -1
  282. package/esm/cli/idm/idm-count.js +0 -24
  283. package/esm/cli/idm/idm-count.js.map +0 -1
  284. package/esm/cli/idm/idm-export.js +0 -50
  285. package/esm/cli/idm/idm-export.js.map +0 -1
  286. package/esm/cli/idm/idm-import.js +0 -54
  287. package/esm/cli/idm/idm-import.js.map +0 -1
  288. package/esm/cli/idm/idm-list.js +0 -28
  289. package/esm/cli/idm/idm-list.js.map +0 -1
  290. package/esm/cli/idm/idm.js +0 -14
  291. package/esm/cli/idm/idm.js.map +0 -1
  292. package/esm/cli/idp/idp-export.js +0 -44
  293. package/esm/cli/idp/idp-export.js.map +0 -1
  294. package/esm/cli/idp/idp-import.js +0 -56
  295. package/esm/cli/idp/idp-import.js.map +0 -1
  296. package/esm/cli/idp/idp-list.js +0 -28
  297. package/esm/cli/idp/idp-list.js.map +0 -1
  298. package/esm/cli/idp/idp.js +0 -12
  299. package/esm/cli/idp/idp.js.map +0 -1
  300. package/esm/cli/info/info.js +0 -52
  301. package/esm/cli/info/info.js.map +0 -1
  302. package/esm/cli/journey/journey-delete.js +0 -36
  303. package/esm/cli/journey/journey-delete.js.map +0 -1
  304. package/esm/cli/journey/journey-describe.js +0 -133
  305. package/esm/cli/journey/journey-describe.js.map +0 -1
  306. package/esm/cli/journey/journey-disable.js +0 -35
  307. package/esm/cli/journey/journey-disable.js.map +0 -1
  308. package/esm/cli/journey/journey-enable.js +0 -35
  309. package/esm/cli/journey/journey-enable.js.map +0 -1
  310. package/esm/cli/journey/journey-export.js +0 -63
  311. package/esm/cli/journey/journey-export.js.map +0 -1
  312. package/esm/cli/journey/journey-import.js +0 -59
  313. package/esm/cli/journey/journey-import.js.map +0 -1
  314. package/esm/cli/journey/journey-list.js +0 -25
  315. package/esm/cli/journey/journey-list.js.map +0 -1
  316. package/esm/cli/journey/journey-prune.js +0 -42
  317. package/esm/cli/journey/journey-prune.js.map +0 -1
  318. package/esm/cli/journey/journey.js +0 -22
  319. package/esm/cli/journey/journey.js.map +0 -1
  320. package/esm/cli/log/log-fetch.js +0 -127
  321. package/esm/cli/log/log-fetch.js.map +0 -1
  322. package/esm/cli/log/log-key-delete.js +0 -33
  323. package/esm/cli/log/log-key-delete.js.map +0 -1
  324. package/esm/cli/log/log-key-describe.js +0 -20
  325. package/esm/cli/log/log-key-describe.js.map +0 -1
  326. package/esm/cli/log/log-key-list.js +0 -24
  327. package/esm/cli/log/log-key-list.js.map +0 -1
  328. package/esm/cli/log/log-key.js +0 -13
  329. package/esm/cli/log/log-key.js.map +0 -1
  330. package/esm/cli/log/log-list.js +0 -89
  331. package/esm/cli/log/log-list.js.map +0 -1
  332. package/esm/cli/log/log-tail.js +0 -81
  333. package/esm/cli/log/log-tail.js.map +0 -1
  334. package/esm/cli/log/log.js +0 -18
  335. package/esm/cli/log/log.js.map +0 -1
  336. package/esm/cli/oauth/oauth-client-delete.js +0 -20
  337. package/esm/cli/oauth/oauth-client-delete.js.map +0 -1
  338. package/esm/cli/oauth/oauth-client-describe.js +0 -20
  339. package/esm/cli/oauth/oauth-client-describe.js.map +0 -1
  340. package/esm/cli/oauth/oauth-client-export.js +0 -50
  341. package/esm/cli/oauth/oauth-client-export.js.map +0 -1
  342. package/esm/cli/oauth/oauth-client-import.js +0 -55
  343. package/esm/cli/oauth/oauth-client-import.js.map +0 -1
  344. package/esm/cli/oauth/oauth-client-list.js +0 -24
  345. package/esm/cli/oauth/oauth-client-list.js.map +0 -1
  346. package/esm/cli/oauth/oauth-client.js +0 -22
  347. package/esm/cli/oauth/oauth-client.js.map +0 -1
  348. package/esm/cli/oauth/oauth.js +0 -11
  349. package/esm/cli/oauth/oauth.js.map +0 -1
  350. package/esm/cli/realm/realm-add-custom-domain.js +0 -24
  351. package/esm/cli/realm/realm-add-custom-domain.js.map +0 -1
  352. package/esm/cli/realm/realm-describe.js +0 -23
  353. package/esm/cli/realm/realm-describe.js.map +0 -1
  354. package/esm/cli/realm/realm-list.js +0 -23
  355. package/esm/cli/realm/realm-list.js.map +0 -1
  356. package/esm/cli/realm/realm-remove-custom-domain.js +0 -26
  357. package/esm/cli/realm/realm-remove-custom-domain.js.map +0 -1
  358. package/esm/cli/realm/realm.js +0 -21
  359. package/esm/cli/realm/realm.js.map +0 -1
  360. package/esm/cli/saml/saml-cot-export.js +0 -42
  361. package/esm/cli/saml/saml-cot-export.js.map +0 -1
  362. package/esm/cli/saml/saml-cot-import.js +0 -48
  363. package/esm/cli/saml/saml-cot-import.js.map +0 -1
  364. package/esm/cli/saml/saml-cot-list.js +0 -25
  365. package/esm/cli/saml/saml-cot-list.js.map +0 -1
  366. package/esm/cli/saml/saml-cot.js +0 -13
  367. package/esm/cli/saml/saml-cot.js.map +0 -1
  368. package/esm/cli/saml/saml-delete.js +0 -37
  369. package/esm/cli/saml/saml-delete.js.map +0 -1
  370. package/esm/cli/saml/saml-describe.js +0 -25
  371. package/esm/cli/saml/saml-describe.js.map +0 -1
  372. package/esm/cli/saml/saml-export.js +0 -48
  373. package/esm/cli/saml/saml-export.js.map +0 -1
  374. package/esm/cli/saml/saml-import.js +0 -56
  375. package/esm/cli/saml/saml-import.js.map +0 -1
  376. package/esm/cli/saml/saml-list.js +0 -25
  377. package/esm/cli/saml/saml-list.js.map +0 -1
  378. package/esm/cli/saml/saml-metadata-export.js +0 -42
  379. package/esm/cli/saml/saml-metadata-export.js.map +0 -1
  380. package/esm/cli/saml/saml-metadata.js +0 -9
  381. package/esm/cli/saml/saml-metadata.js.map +0 -1
  382. package/esm/cli/saml/saml.js +0 -20
  383. package/esm/cli/saml/saml.js.map +0 -1
  384. package/esm/cli/script/script-delete.js +0 -37
  385. package/esm/cli/script/script-delete.js.map +0 -1
  386. package/esm/cli/script/script-describe.js +0 -20
  387. package/esm/cli/script/script-describe.js.map +0 -1
  388. package/esm/cli/script/script-export.js +0 -52
  389. package/esm/cli/script/script-export.js.map +0 -1
  390. package/esm/cli/script/script-import.js +0 -45
  391. package/esm/cli/script/script-import.js.map +0 -1
  392. package/esm/cli/script/script-list.js +0 -25
  393. package/esm/cli/script/script-list.js.map +0 -1
  394. package/esm/cli/script/script.js +0 -18
  395. package/esm/cli/script/script.js.map +0 -1
  396. package/esm/cli/service/service-delete.js +0 -23
  397. package/esm/cli/service/service-delete.js.map +0 -1
  398. package/esm/cli/service/service-export.js +0 -41
  399. package/esm/cli/service/service-export.js.map +0 -1
  400. package/esm/cli/service/service-import.js +0 -65
  401. package/esm/cli/service/service-import.js.map +0 -1
  402. package/esm/cli/service/service-list.js +0 -20
  403. package/esm/cli/service/service-list.js.map +0 -1
  404. package/esm/cli/service/service.js +0 -14
  405. package/esm/cli/service/service.js.map +0 -1
  406. package/esm/cli/shell/shell.js +0 -53
  407. package/esm/cli/shell/shell.js.map +0 -1
  408. package/esm/cli/theme/theme-delete.js +0 -42
  409. package/esm/cli/theme/theme-delete.js.map +0 -1
  410. package/esm/cli/theme/theme-export.js +0 -48
  411. package/esm/cli/theme/theme-export.js.map +0 -1
  412. package/esm/cli/theme/theme-import.js +0 -54
  413. package/esm/cli/theme/theme-import.js.map +0 -1
  414. package/esm/cli/theme/theme-list.js +0 -25
  415. package/esm/cli/theme/theme-list.js.map +0 -1
  416. package/esm/cli/theme/theme.js +0 -14
  417. package/esm/cli/theme/theme.js.map +0 -1
  418. package/esm/help/SampleData.js +0 -7
  419. package/esm/help/SampleData.js.map +0 -1
  420. package/esm/launch.js +0 -15
  421. package/esm/launch.js.map +0 -1
  422. package/esm/loader.js +0 -40
  423. package/esm/loader.js.map +0 -1
  424. package/esm/ops/AdminOps.js +0 -936
  425. package/esm/ops/AdminOps.js.map +0 -1
  426. package/esm/ops/AgentOps.js +0 -1061
  427. package/esm/ops/AgentOps.js.map +0 -1
  428. package/esm/ops/ApplicationOps.js +0 -336
  429. package/esm/ops/ApplicationOps.js.map +0 -1
  430. package/esm/ops/AuthenticateOps.js +0 -23
  431. package/esm/ops/AuthenticateOps.js.map +0 -1
  432. package/esm/ops/AuthenticationSettingsOps.js +0 -89
  433. package/esm/ops/AuthenticationSettingsOps.js.map +0 -1
  434. package/esm/ops/CirclesOfTrustOps.js +0 -265
  435. package/esm/ops/CirclesOfTrustOps.js.map +0 -1
  436. package/esm/ops/ConfigOps.js +0 -213
  437. package/esm/ops/ConfigOps.js.map +0 -1
  438. package/esm/ops/ConnectionProfileOps.js +0 -132
  439. package/esm/ops/ConnectionProfileOps.js.map +0 -1
  440. package/esm/ops/EmailTemplateOps.js +0 -365
  441. package/esm/ops/EmailTemplateOps.js.map +0 -1
  442. package/esm/ops/IdmOps.js +0 -303
  443. package/esm/ops/IdmOps.js.map +0 -1
  444. package/esm/ops/IdpOps.js +0 -267
  445. package/esm/ops/IdpOps.js.map +0 -1
  446. package/esm/ops/JourneyOps.js +0 -815
  447. package/esm/ops/JourneyOps.js.map +0 -1
  448. package/esm/ops/LogOps.js +0 -141
  449. package/esm/ops/LogOps.js.map +0 -1
  450. package/esm/ops/NodeOps.js +0 -97
  451. package/esm/ops/NodeOps.js.map +0 -1
  452. package/esm/ops/OAuth2ClientOps.js +0 -287
  453. package/esm/ops/OAuth2ClientOps.js.map +0 -1
  454. package/esm/ops/OrganizationOps.js +0 -20
  455. package/esm/ops/OrganizationOps.js.map +0 -1
  456. package/esm/ops/PolicyOps.js +0 -515
  457. package/esm/ops/PolicyOps.js.map +0 -1
  458. package/esm/ops/PolicySetOps.js +0 -388
  459. package/esm/ops/PolicySetOps.js.map +0 -1
  460. package/esm/ops/RealmOps.js +0 -116
  461. package/esm/ops/RealmOps.js.map +0 -1
  462. package/esm/ops/ResourceTypeOps.js +0 -439
  463. package/esm/ops/ResourceTypeOps.js.map +0 -1
  464. package/esm/ops/Saml2Ops.js +0 -364
  465. package/esm/ops/Saml2Ops.js.map +0 -1
  466. package/esm/ops/Saml2Ops.test_.js.map +0 -1
  467. package/esm/ops/ScriptOps.js +0 -520
  468. package/esm/ops/ScriptOps.js.map +0 -1
  469. package/esm/ops/ServiceOps.js +0 -275
  470. package/esm/ops/ServiceOps.js.map +0 -1
  471. package/esm/ops/ThemeOps.js +0 -382
  472. package/esm/ops/ThemeOps.js.map +0 -1
  473. package/esm/ops/cloud/AdminFederationOps.js +0 -225
  474. package/esm/ops/cloud/AdminFederationOps.js.map +0 -1
  475. package/esm/ops/cloud/SecretsOps.js +0 -471
  476. package/esm/ops/cloud/SecretsOps.js.map +0 -1
  477. package/esm/ops/cloud/VariablesOps.js +0 -316
  478. package/esm/ops/cloud/VariablesOps.js.map +0 -1
  479. package/esm/ops/templates/GenericExtensionAttributesTemplate.json +0 -412
  480. package/esm/ops/templates/OAuth2ClientTemplate.json +0 -270
  481. package/esm/ops/templates/OAuth2TrustedJwtIssuerTemplate.json +0 -38
  482. package/esm/ops/templates/OrgModelUserAttributesTemplate.json +0 -149
  483. package/esm/ops/templates/autoaccess/IPAddresses.json +0 -202
  484. package/esm/ops/templates/autoaccess/UserAgents.json +0 -35
  485. package/esm/ops/templates/autoaccess/Usernames.json +0 -203
  486. package/esm/ops/templates/cloud/managed.json +0 -4119
  487. package/esm/ops/utils/OpsUtils.js +0 -9
  488. package/esm/ops/utils/OpsUtils.js.map +0 -1
  489. package/esm/ops/utils/Wordwrap.js +0 -5
  490. package/esm/ops/utils/Wordwrap.js.map +0 -1
  491. package/esm/storage/StaticStorage.js +0 -12
  492. package/esm/storage/StaticStorage.js.map +0 -1
  493. package/esm/utils/Config.js +0 -200
  494. package/esm/utils/Config.js.map +0 -1
  495. package/esm/utils/Console.js +0 -614
  496. package/esm/utils/Console.js.map +0 -1
  497. package/esm/utils/Version.js +0 -138
  498. package/esm/utils/Version.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"ConfigOps.js","names":["frodo","FrodoError","state","fs","fse","getFullExportConfig","getFullExportConfigFromDirectory","cleanupProgressIndicators","printError","printMessage","extractScriptToFile","getRealmName","getTypedFilename","titleCase","saveJsonToFile","getFilePath","getWorkingDirectory","utils","stringify","json","exportFullConfiguration","importFullConfiguration","config","exportEverythingToFile","file","includeMeta","options","useStringArrays","noDecode","coords","includeDefault","collectErrors","exportData","fileName","getRealm","length","error","exportEverythingToFiles","extract","meta","baseDirectory","Object","entries","forEach","type","obj","existsSync","mkdirSync","samlData","saml","cot","hosted","metadata","remote","id","value","concat","filename","entityId","samlType","authentication","includes","slice","lastIndexOf","recursive","outputFile","err","name","importEverythingFromFile","reUuidJourneys","reUuidScripts","cleanServices","global","realm","data","importEverythingFromFiles","getDirectory"],"sources":["../../src/ops/ConfigOps.ts"],"sourcesContent":["import { frodo, FrodoError, state } from '@rockcarver/frodo-lib';\nimport {\n FullExportInterface,\n FullExportOptions,\n FullImportOptions,\n} from '@rockcarver/frodo-lib/types/ops/ConfigOps';\nimport { ScriptExportInterface } from '@rockcarver/frodo-lib/types/ops/ScriptOps';\nimport fs from 'fs';\nimport fse from 'fs-extra';\n\nimport {\n getFullExportConfig,\n getFullExportConfigFromDirectory,\n} from '../utils/Config';\nimport {\n cleanupProgressIndicators,\n printError,\n printMessage,\n} from '../utils/Console';\nimport { extractScriptToFile } from './ScriptOps';\n\nconst {\n getRealmName,\n getTypedFilename,\n titleCase,\n saveJsonToFile,\n getFilePath,\n getWorkingDirectory,\n} = frodo.utils;\nconst { stringify } = frodo.utils.json;\nconst { exportFullConfiguration, importFullConfiguration } = frodo.config;\n\n/**\n * Export everything to separate files\n * @param {String} file file name\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @param {FullExportOptions} options export options\n * @return {Promise<boolean>} a promise that resolves to true if successful, false otherwise\n */\nexport async function exportEverythingToFile(\n file: string,\n includeMeta: boolean = true,\n options: FullExportOptions = {\n useStringArrays: true,\n noDecode: false,\n coords: true,\n includeDefault: false,\n }\n): Promise<boolean> {\n try {\n const collectErrors: Error[] = [];\n const exportData = await exportFullConfiguration(options, collectErrors);\n let fileName = getTypedFilename(\n `${titleCase(getRealmName(state.getRealm()))}`,\n `everything`\n );\n if (file) {\n fileName = file;\n }\n saveJsonToFile(exportData, getFilePath(fileName, true), includeMeta);\n if (collectErrors.length > 0) {\n throw new FrodoError(`Errors occurred during full export`, collectErrors);\n }\n return true;\n } catch (error) {\n printError(error);\n }\n return false;\n}\n\n/**\n * Export everything to separate files\n * @param {boolean} extract Extracts the scripts from the exports into separate files if true\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @param {FullExportOptions} options export options\n * @return {Promise<boolean>} a promise that resolves to true if successful, false otherwise\n */\nexport async function exportEverythingToFiles(\n extract: boolean = false,\n includeMeta: boolean = true,\n options: FullExportOptions = {\n useStringArrays: true,\n noDecode: false,\n coords: true,\n includeDefault: false,\n }\n): Promise<boolean> {\n try {\n const collectErrors: Error[] = [];\n const exportData: FullExportInterface = await exportFullConfiguration(\n options,\n collectErrors\n );\n delete exportData.meta;\n const baseDirectory = getWorkingDirectory(true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Object.entries(exportData).forEach(([type, obj]: [string, any]) => {\n if (obj) {\n if (!fs.existsSync(`${baseDirectory}/${type}`)) {\n fs.mkdirSync(`${baseDirectory}/${type}`);\n }\n if (type == 'saml') {\n const samlData = {\n saml: {\n cot: {},\n hosted: {},\n metadata: {},\n remote: {},\n },\n };\n if (obj.cot) {\n if (!fs.existsSync(`${baseDirectory}/cot`)) {\n fs.mkdirSync(`${baseDirectory}/cot`);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Object.entries(obj.cot).forEach(([id, value]: [string, any]) => {\n samlData.saml.cot = {\n [id]: value,\n };\n saveJsonToFile(\n samlData,\n `${baseDirectory}/cot/${getTypedFilename(id, 'cot.saml')}`,\n includeMeta\n );\n });\n samlData.saml.cot = {};\n }\n Object.entries(obj.hosted)\n .concat(Object.entries(obj.remote))\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .forEach(([id, value]: [string, any]) => {\n const filename = getTypedFilename(\n value.entityId ? value.entityId : id,\n type\n );\n const samlType = obj.hosted[id] ? 'hosted' : 'remote';\n samlData.saml[samlType][id] = value;\n samlData.saml.metadata = {\n [id]: obj.metadata[id],\n };\n saveJsonToFile(\n samlData,\n `${baseDirectory}/${type}/${filename}`,\n includeMeta\n );\n samlData.saml[samlType] = {};\n });\n } else if (type == 'authentication') {\n const fileName = getTypedFilename(\n `${frodo.utils.getRealmName(state.getRealm())}Realm`,\n 'authentication.settings'\n );\n saveJsonToFile(\n {\n authentication: obj,\n },\n `${baseDirectory}/${type}/${fileName}`,\n includeMeta\n );\n } else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Object.entries(obj).forEach(([id, value]: [string, any]) => {\n if (type == 'config') {\n if (value != null) {\n const filename = `${id}.json`;\n if (filename.includes('/')) {\n fs.mkdirSync(\n `${baseDirectory}/${type}/${filename.slice(\n 0,\n filename.lastIndexOf('/')\n )}`,\n {\n recursive: true,\n }\n );\n }\n fse.outputFile(\n `${baseDirectory}/${type}/${filename}`,\n stringify(value),\n (err) => {\n if (err) {\n return printMessage(\n `ERROR - can't save config ${id} to file - ${err}`,\n 'error'\n );\n }\n }\n );\n }\n } else {\n const filename = getTypedFilename(\n value && value.name && type !== 'emailTemplate'\n ? value.name\n : id,\n type\n );\n if (extract && type == 'script') {\n extractScriptToFile(\n exportData as ScriptExportInterface,\n id,\n type\n );\n }\n saveJsonToFile(\n {\n [type]: {\n [id]: value,\n },\n },\n `${baseDirectory}/${type}/${filename}`,\n includeMeta\n );\n }\n });\n }\n }\n });\n if (collectErrors.length > 0) {\n throw new FrodoError(`Errors occurred during full export`, collectErrors);\n }\n return true;\n } catch (error) {\n printError(error);\n }\n return false;\n}\n\n/**\n * Import everything from a single file\n * @param {string} file The file path\n * @param {FullImportOptions} options import options\n * @return {Promise<boolean>} a promise that resolves to true if successful, false otherwise\n */\nexport async function importEverythingFromFile(\n file: string,\n options: FullImportOptions = {\n reUuidJourneys: false,\n reUuidScripts: false,\n cleanServices: false,\n global: false,\n realm: false,\n includeDefault: false,\n }\n): Promise<boolean> {\n try {\n const data = await getFullExportConfig(file);\n const collectErrors: Error[] = [];\n await importFullConfiguration(data, options, collectErrors);\n if (collectErrors.length > 0) {\n throw new FrodoError(\n `Errors occurred during full config import`,\n collectErrors\n );\n }\n return true;\n } catch (error) {\n cleanupProgressIndicators();\n printError(error);\n }\n return false;\n}\n\n/**\n * Import everything from separate files\n * @return {Promise<boolean>} a promise that resolves to true if successful, false otherwise\n */\nexport async function importEverythingFromFiles(\n options: FullImportOptions = {\n reUuidJourneys: false,\n reUuidScripts: false,\n cleanServices: false,\n global: false,\n realm: false,\n includeDefault: false,\n }\n): Promise<boolean> {\n try {\n const data = await getFullExportConfigFromDirectory(state.getDirectory());\n const collectErrors: Error[] = [];\n await importFullConfiguration(data, options, collectErrors);\n if (collectErrors.length > 0) {\n throw new FrodoError(\n `Errors occurred during full config import`,\n collectErrors\n );\n }\n return true;\n } catch (error) {\n printError(error);\n }\n return false;\n}\n"],"mappings":"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"}
@@ -1,132 +0,0 @@
1
- import { frodo, state } from '@rockcarver/frodo-lib';
2
- import fs from 'fs';
3
- import { createObjectTable, createTable, debugMessage, failSpinner, printError, printMessage, showSpinner, succeedSpinner } from '../utils/Console';
4
- const {
5
- getAccessTokenForServiceAccount
6
- } = frodo.login;
7
- const {
8
- getConnectionProfilesPath,
9
- getConnectionProfileByHost
10
- } = frodo.conn;
11
-
12
- /**
13
- * List connection profiles
14
- * @param {boolean} long Long list format with details
15
- * @returns {void} void
16
- */
17
- export function listConnectionProfiles(long = false) {
18
- const filename = getConnectionProfilesPath();
19
- try {
20
- const data = fs.readFileSync(filename, 'utf8');
21
- const connectionsData = JSON.parse(data);
22
- if (Object.keys(connectionsData).length < 1) {
23
- printMessage(`No connection profiles in ${filename}`, 'info');
24
- } else {
25
- if (long) {
26
- const table = createTable(['Host', 'Service Account', 'Username', 'Log API Key']);
27
- Object.keys(connectionsData).forEach(c => {
28
- table.push([c, connectionsData[c].svcacctName || connectionsData[c].svcacctId, connectionsData[c].username, connectionsData[c].logApiKey]);
29
- });
30
- printMessage(table.toString(), 'data');
31
- } else {
32
- Object.keys(connectionsData).forEach(c => {
33
- printMessage(`${c}`, 'data');
34
- });
35
- // getUniqueNames(5, Object.keys(connectionsData));
36
- }
37
- printMessage('Any unique substring of a saved host can be used as the value for host parameter in all commands', 'info');
38
- }
39
- } catch (error) {
40
- printMessage(`No connection profiles found in ${filename}`, 'error');
41
- printError(error);
42
- }
43
- }
44
-
45
- /**
46
- * Describe connection profile
47
- * @param {string} host Host URL or unique substring
48
- * @param {boolean} showSecrets Whether secrets should be shown in clear text or not
49
- */
50
- export async function describeConnectionProfile(host, showSecrets) {
51
- debugMessage(`ConnectionProfileOps.describeConnectionProfile: start`);
52
- const profile = await getConnectionProfileByHost(host);
53
- if (profile) {
54
- debugMessage(profile);
55
- const present = '[present]';
56
- const jwk = profile.svcacctJwk;
57
- if (!showSecrets) {
58
- if (profile.password) profile.password = present;
59
- if (profile.logApiSecret) profile.logApiSecret = present;
60
- if (profile.svcacctJwk) profile['svcacctJwk'] = present;
61
- }
62
- if (!profile.username) {
63
- delete profile.username;
64
- delete profile.password;
65
- }
66
- if (!profile.logApiKey) {
67
- delete profile.logApiKey;
68
- delete profile.logApiSecret;
69
- }
70
- if (!profile.svcacctId) {
71
- delete profile.svcacctId;
72
- delete profile.svcacctJwk;
73
- delete profile.svcacctName;
74
- delete profile.svcacctScope;
75
- }
76
- if (!profile.svcacctScope) {
77
- delete profile.svcacctScope;
78
- }
79
- if (showSecrets && jwk) {
80
- profile['svcacctJwk'] = 'see below';
81
- }
82
- if (!profile.authenticationService) {
83
- delete profile.authenticationService;
84
- }
85
- const keyMap = {
86
- tenant: 'Host',
87
- deploymentType: 'Deployment Type',
88
- username: 'Username',
89
- password: 'Password',
90
- logApiKey: 'Log API Key',
91
- logApiSecret: 'Log API Secret',
92
- authenticationService: 'Authentication Service',
93
- authenticationHeaderOverrides: 'Authentication Header Overrides',
94
- svcacctName: 'Service Account Name',
95
- svcacctId: 'Service Account Id',
96
- svcacctJwk: 'Service Account JWK',
97
- svcacctScope: 'Service Account Scope'
98
- };
99
- const table = createObjectTable(profile, keyMap);
100
- printMessage(table.toString(), 'data');
101
- if (showSecrets && jwk) {
102
- printMessage(JSON.stringify(jwk), 'data');
103
- }
104
- } else {
105
- printMessage(`No connection profile ${host} found`);
106
- }
107
- debugMessage(`ConnectionProfileOps.describeConnectionProfile: end`);
108
- }
109
- export async function addExistingServiceAccount(serviceAccountId, privateKeyFile, validate) {
110
- try {
111
- const data = fs.readFileSync(privateKeyFile);
112
- const jwk = JSON.parse(data.toString());
113
- if (validate) {
114
- showSpinner(`Validating service account ${serviceAccountId}...`);
115
- const token = await getAccessTokenForServiceAccount(serviceAccountId, jwk);
116
- if (token === null) {
117
- failSpinner(`Failed to validate service account ${serviceAccountId}.`);
118
- return false;
119
- } else {
120
- succeedSpinner(`Successfully validated service account ${serviceAccountId}.`);
121
- }
122
- }
123
- state.setServiceAccountId(serviceAccountId);
124
- state.setServiceAccountJwk(jwk);
125
- return true;
126
- } catch (error) {
127
- failSpinner(`Failed to validate service account ${serviceAccountId}: ${error}.`);
128
- printError(error);
129
- }
130
- return false;
131
- }
132
- //# sourceMappingURL=ConnectionProfileOps.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ConnectionProfileOps.js","names":["frodo","state","fs","createObjectTable","createTable","debugMessage","failSpinner","printError","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","error","describeConnectionProfile","host","showSecrets","profile","present","jwk","svcacctJwk","password","logApiSecret","svcacctScope","authenticationService","keyMap","tenant","deploymentType","authenticationHeaderOverrides","stringify","addExistingServiceAccount","serviceAccountId","privateKeyFile","validate","token","setServiceAccountId","setServiceAccountJwk"],"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 printError,\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 * @returns {void} void\n */\nexport function listConnectionProfiles(long: boolean = false): void {\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 connection profiles 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 (error) {\n printMessage(`No connection profiles found in ${filename}`, 'error');\n printError(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 delete profile.svcacctScope;\n }\n if (!profile.svcacctScope) {\n delete profile.svcacctScope;\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 deploymentType: 'Deployment Type',\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 svcacctScope: 'Service Account Scope',\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 (error) {\n failSpinner(\n `Failed to validate service account ${serviceAccountId}: ${error}.`\n );\n printError(error);\n }\n return false;\n}\n"],"mappings":"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"}
@@ -1,365 +0,0 @@
1
- import { frodo, FrodoError } from '@rockcarver/frodo-lib';
2
- import fs from 'fs';
3
- import path from 'path';
4
- import { createProgressIndicator, createTable, debugMessage, printError, printMessage, stopProgressIndicator, updateProgressIndicator } from '../utils/Console';
5
- import { cloneDeep } from './utils/OpsUtils';
6
- import wordwrap from './utils/Wordwrap';
7
- const {
8
- validateImport,
9
- getTypedFilename,
10
- saveJsonToFile,
11
- getFilePath,
12
- getWorkingDirectory
13
- } = frodo.utils;
14
- const {
15
- EMAIL_TEMPLATE_TYPE,
16
- readEmailTemplates,
17
- readEmailTemplate,
18
- exportEmailTemplates,
19
- updateEmailTemplate,
20
- importEmailTemplates
21
- } = frodo.email.template;
22
- const EMAIL_TEMPLATE_FILE_TYPE = 'template.email';
23
- const regexEmailTemplateType = new RegExp(`${EMAIL_TEMPLATE_TYPE}/`, 'g');
24
-
25
- // use a function vs a template variable to avoid problems in loops
26
- function getFileDataTemplate() {
27
- return {
28
- meta: {},
29
- emailTemplate: {}
30
- };
31
- }
32
-
33
- /**
34
- * Get a one-line description of the email template
35
- * @param {EmailTemplateSkeleton} templateObj email template object to describe
36
- * @returns {string} a one-line description
37
- */
38
- export function getOneLineDescription(templateObj) {
39
- const description = `[${templateObj._id.split('/')[1]['brightCyan']}] ${templateObj.displayName ? templateObj.displayName : ''} - ${templateObj.defaultLocale ? templateObj.subject[templateObj.defaultLocale] : Object.values(templateObj.subject)[0]}`;
40
- return description;
41
- }
42
-
43
- /**
44
- * Get markdown table header
45
- * @returns {string} markdown table header
46
- */
47
- export function getTableHeaderMd() {
48
- let markdown = '';
49
- markdown += '| Display Name | Locale(s) | Subject | Id |\n';
50
- markdown += '| ------------ | --------- | ------- | ---|';
51
- return markdown;
52
- }
53
-
54
- /**
55
- * Get a table-row of the email template in markdown
56
- * @param {EmailTemplateSkeleton} templateObj email template object to describe
57
- * @returns {string} a table-row of the email template in markdown
58
- */
59
- export function getTableRowMd(templateObj) {
60
- const templateId = templateObj._id.replace(`${EMAIL_TEMPLATE_TYPE}/`, '');
61
- const locales = `${templateObj.defaultLocale}${Object.keys(templateObj.subject).length > 1 ? ` (${Object.keys(templateObj.subject).filter(locale => locale !== templateObj.defaultLocale).join(',')})` : ''}`;
62
- const row = `| ${templateObj.name ? templateObj.name : templateId} | ${locales} | ${templateObj.subject[templateObj.defaultLocale]} | \`${templateId}\` |`;
63
- return row;
64
- }
65
-
66
- /**
67
- * List email templates
68
- * @param {boolean} long Long list format with details
69
- * @return {Promise<boolean>} a promise that resolves to true if successful, false otherwise
70
- */
71
- export async function listEmailTemplates(long = false) {
72
- let emailTemplates = [];
73
- try {
74
- emailTemplates = await readEmailTemplates();
75
- } catch (error) {
76
- printError(error);
77
- return false;
78
- }
79
- emailTemplates.sort((a, b) => a._id.localeCompare(b._id));
80
- if (!long) {
81
- for (const [, emailTemplate] of emailTemplates.entries()) {
82
- printMessage(`${emailTemplate._id.replace(`${EMAIL_TEMPLATE_TYPE}/`, '')}`, 'data');
83
- }
84
- } else {
85
- const table = createTable(['Id'['brightCyan'], 'Name'['brightCyan'], 'Status'['brightCyan'], 'Locale(s)'['brightCyan'], 'From'['brightCyan'], 'Subject'['brightCyan']]);
86
- for (const emailTemplate of emailTemplates) {
87
- table.push([
88
- // Id
89
- `${emailTemplate._id.replace(`${EMAIL_TEMPLATE_TYPE}/`, '')}`,
90
- // Name
91
- `${emailTemplate.displayName ? emailTemplate.displayName : ''}`,
92
- // Status
93
- emailTemplate.enabled === false ? 'disabled'['brightRed'] : 'enabled'['brightGreen'],
94
- // Locale(s)
95
- `${emailTemplate.defaultLocale}${Object.keys(emailTemplate.subject).length > 1 ? ` (${Object.keys(emailTemplate.subject).filter(locale => locale !== emailTemplate.defaultLocale).join(',')})` : ''}`,
96
- // From
97
- `${emailTemplate.from ? emailTemplate.from : ''}`,
98
- // Subject
99
- wordwrap(emailTemplate.subject[emailTemplate.defaultLocale], 40)]);
100
- }
101
- printMessage(table.toString(), 'data');
102
- }
103
- return true;
104
- }
105
-
106
- /**
107
- * Export single email template to a file
108
- * @param {string} templateId email template id to export
109
- * @param {string} file filename where to export the template data
110
- * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true
111
- * @return {Promise<boolean>} a promise that resolves to true if successful, false otherwise
112
- */
113
- export async function exportEmailTemplateToFile(templateId, file, includeMeta = true) {
114
- let indicatorId;
115
- try {
116
- let fileName = file;
117
- if (!fileName) {
118
- fileName = getTypedFilename(templateId, EMAIL_TEMPLATE_FILE_TYPE);
119
- }
120
- const filePath = getFilePath(fileName, true);
121
- indicatorId = createProgressIndicator('determinate', 1, `Exporting ${templateId}`);
122
- const templateData = await readEmailTemplate(templateId);
123
- updateProgressIndicator(indicatorId, `Writing file ${filePath}`);
124
- const fileData = getFileDataTemplate();
125
- fileData.emailTemplate[templateId] = templateData;
126
- saveJsonToFile(fileData, filePath, includeMeta);
127
- stopProgressIndicator(indicatorId, `Exported ${templateId['brightCyan']} to ${filePath['brightCyan']}.`);
128
- return true;
129
- } catch (error) {
130
- stopProgressIndicator(indicatorId, `${error}`);
131
- printError(error);
132
- }
133
- return false;
134
- }
135
-
136
- /**
137
- * Export all email templates to file
138
- * @param {string} file optional filename
139
- * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true
140
- * @return {Promise<boolean>} a promise that resolves to true if successful, false otherwise
141
- */
142
- export async function exportEmailTemplatesToFile(file, includeMeta = true) {
143
- try {
144
- let fileName = file;
145
- if (!fileName) {
146
- fileName = getTypedFilename(`allEmailTemplates`, EMAIL_TEMPLATE_FILE_TYPE);
147
- }
148
- const filePath = getFilePath(fileName, true);
149
- const exportData = await exportEmailTemplates();
150
- saveJsonToFile(exportData, filePath, includeMeta);
151
- return true;
152
- } catch (error) {
153
- printError(error);
154
- }
155
- return false;
156
- }
157
-
158
- /**
159
- * Export all email templates to separate files
160
- * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true
161
- * @return {Promise<boolean>} a promise that resolves to true if successful, false otherwise
162
- */
163
- export async function exportEmailTemplatesToFiles(includeMeta = true) {
164
- let indicatorId;
165
- try {
166
- const exportData = Object.entries((await exportEmailTemplates()).emailTemplate);
167
- indicatorId = createProgressIndicator('determinate', exportData.length, 'Writing email templates');
168
- for (const [templateId, template] of exportData) {
169
- const fileName = getTypedFilename(templateId, EMAIL_TEMPLATE_FILE_TYPE);
170
- const fileData = getFileDataTemplate();
171
- updateProgressIndicator(indicatorId, `Exporting ${templateId}`);
172
- fileData.emailTemplate[templateId] = template;
173
- saveJsonToFile(fileData, getFilePath(fileName, true), includeMeta);
174
- }
175
- stopProgressIndicator(indicatorId, `${exportData.length} templates written.`);
176
- return true;
177
- } catch (error) {
178
- stopProgressIndicator(indicatorId, `${error}`);
179
- printError(error);
180
- }
181
- return false;
182
- }
183
-
184
- /**
185
- * Import email template by id from file
186
- * @param {string} templateId email template id
187
- * @param {string} file optional filename
188
- * @param {boolean} raw import raw data file lacking frodo export envelop
189
- * @return {Promise<boolean>} a promise that resolves to true if successful, false otherwise
190
- */
191
- export async function importEmailTemplateFromFile(templateId, file, raw = false) {
192
- templateId = templateId.replaceAll(`${EMAIL_TEMPLATE_TYPE}/`, '');
193
- const filePath = getFilePath(file);
194
- try {
195
- const data = fs.readFileSync(filePath, 'utf8');
196
- const fileData = JSON.parse(data);
197
- const indicatorId = createProgressIndicator('determinate', 1, `Importing ${templateId}`);
198
- if (fileData.emailTemplate && fileData.emailTemplate[templateId] || raw && getTemplateIdFromFileName(file) === templateId) {
199
- try {
200
- const emailTemplateData = raw ? s2sConvert(fileData) : fileData.emailTemplate[templateId];
201
- await updateEmailTemplate(templateId, emailTemplateData);
202
- updateProgressIndicator(indicatorId, `Importing ${templateId}`);
203
- stopProgressIndicator(indicatorId, `Imported ${templateId}`);
204
- return true;
205
- } catch (error) {
206
- stopProgressIndicator(indicatorId, `${error}`);
207
- printError(error);
208
- }
209
- } else {
210
- stopProgressIndicator(indicatorId, `Email template ${templateId} not found in ${filePath}!`);
211
- printMessage(`Email template ${templateId} not found in ${filePath}!`, 'error');
212
- }
213
- } catch (error) {
214
- printError(error);
215
- }
216
- return false;
217
- }
218
-
219
- /**
220
- * Import all email templates from file
221
- * @param {string} file optional filename
222
- * @return {Promise<boolean>} a promise that resolves to true if successful, false otherwise
223
- */
224
- export async function importEmailTemplatesFromFile(file) {
225
- const filePath = getFilePath(file);
226
- const indicatorId = createProgressIndicator('indeterminate', 0, `Importing email templates from ${filePath}...`);
227
- try {
228
- const data = fs.readFileSync(filePath, 'utf8');
229
- const fileData = JSON.parse(data);
230
- await importEmailTemplates(fileData);
231
- stopProgressIndicator(indicatorId, `Successfully imported email templates from ${filePath}.`, 'success');
232
- return true;
233
- } catch (error) {
234
- stopProgressIndicator(indicatorId, `Error importing email templates from ${filePath}.`, 'fail');
235
- printError(error);
236
- }
237
- return false;
238
- }
239
-
240
- /**
241
- * Helper function to get email template id from file name
242
- * @param {string} file file name
243
- * @returns {string} email template id/name
244
- */
245
- function getTemplateIdFromFileName(file) {
246
- debugMessage(`cli.EmailTemplateOps.getTemplateIdFromFileName: file=${file}`);
247
- const basename = path.basename(file);
248
- const keys = basename.split('-');
249
- if (keys[0] !== EMAIL_TEMPLATE_TYPE || keys.length <= 1) throw new FrodoError(`Filename does not indicate a raw email template: ${file}`);
250
- const templateId = keys[1].split('.')[0];
251
- debugMessage(`cli.EmailTemplateOps.getTemplateIdFromFileName: templateId=${templateId}`);
252
- return templateId;
253
- }
254
-
255
- /**
256
- * Convert template for s2s purposes (software-to-saas migration)
257
- * @param {EmailTemplateSkeleton} templateData template object
258
- * @returns {EmailTemplateSkeleton} converted template object
259
- */
260
- function s2sConvert(templateData) {
261
- if (templateData.message && !templateData.html) {
262
- const convertedData = cloneDeep(templateData);
263
- convertedData.html = cloneDeep(templateData.message);
264
- debugMessage(`cli.EmailTemplateOps.s2sConvert: templateData:`);
265
- debugMessage(templateData);
266
- debugMessage(`cli.EmailTemplateOps.s2sConvert: convertedData:`);
267
- debugMessage(convertedData);
268
- return convertedData;
269
- }
270
- return templateData;
271
- }
272
-
273
- /**
274
- * Import all email templates from separate files
275
- * @param {boolean} raw import raw data file lacking frodo export envelop
276
- * @return {Promise<boolean>} a promise that resolves to true if successful, false otherwise
277
- */
278
- export async function importEmailTemplatesFromFiles(raw = false) {
279
- const names = fs.readdirSync(getWorkingDirectory());
280
- 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));
281
- const indicatorId = createProgressIndicator('determinate', jsonFiles.length, 'Importing email templates...');
282
- let total = 0;
283
- let totalErrors = 0;
284
- for (const file of jsonFiles) {
285
- const data = fs.readFileSync(file, 'utf8');
286
- const fileData = JSON.parse(data);
287
- if (raw && file.startsWith('emailTemplate-') || validateImport(fileData.meta)) {
288
- let errors = 0;
289
- if (raw) {
290
- total++;
291
- const templateId = getTemplateIdFromFileName(file);
292
- try {
293
- const templateData = s2sConvert(fileData);
294
- await updateEmailTemplate(templateId, templateData);
295
- } catch (error) {
296
- errors += 1;
297
- printError(error);
298
- }
299
- } else {
300
- total += Object.keys(fileData.emailTemplate).length;
301
- for (const id in fileData.emailTemplate) {
302
- if ({}.hasOwnProperty.call(fileData.emailTemplate, id)) {
303
- const templateId = id.replace(regexEmailTemplateType, '');
304
- try {
305
- await updateEmailTemplate(templateId, fileData.emailTemplate[templateId]);
306
- } catch (error) {
307
- errors += 1;
308
- printError(error);
309
- }
310
- }
311
- }
312
- }
313
- totalErrors += errors;
314
- updateProgressIndicator(indicatorId, `Imported ${file}`);
315
- } else {
316
- printMessage(`Validation of ${file} failed!`, 'error');
317
- }
318
- }
319
- stopProgressIndicator(indicatorId, `Imported ${total - totalErrors} of ${total} email template(s) from ${jsonFiles.length} file(s).`);
320
- if (totalErrors === 0) return true;
321
- return false;
322
- }
323
-
324
- /**
325
- * Import first email template from file
326
- * @param {string} file optional filename
327
- * @return {Promise<boolean>} a promise that resolves to true if successful, false otherwise
328
- */
329
- export async function importFirstEmailTemplateFromFile(file, raw = false) {
330
- let indicatorId;
331
- try {
332
- const data = fs.readFileSync(getFilePath(file), 'utf8');
333
- const fileData = JSON.parse(data);
334
- indicatorId = createProgressIndicator('indeterminate', 0, `Importing first email template`);
335
- if (raw) {
336
- try {
337
- const templateId = getTemplateIdFromFileName(file);
338
- const templateData = s2sConvert(fileData);
339
- await updateEmailTemplate(templateId, templateData);
340
- stopProgressIndicator(indicatorId, `Imported ${templateId}`, 'success');
341
- return true;
342
- } catch (error) {
343
- stopProgressIndicator(indicatorId, `Error importing email template: ${error}`, 'fail');
344
- printError(error);
345
- }
346
- } else {
347
- for (const id of Object.keys(fileData.emailTemplate)) {
348
- try {
349
- await updateEmailTemplate(id.replace(regexEmailTemplateType, ''), fileData.emailTemplate[id]);
350
- stopProgressIndicator(indicatorId, `Imported ${id}`, 'success');
351
- return true;
352
- } catch (error) {
353
- stopProgressIndicator(indicatorId, `Error importing ${id}`, 'fail');
354
- printError(error);
355
- }
356
- break;
357
- }
358
- }
359
- } catch (error) {
360
- stopProgressIndicator(indicatorId, `Error importing first email template`, 'fail');
361
- printError(error);
362
- }
363
- return false;
364
- }
365
- //# sourceMappingURL=EmailTemplateOps.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"EmailTemplateOps.js","names":["frodo","FrodoError","fs","path","createProgressIndicator","createTable","debugMessage","printError","printMessage","stopProgressIndicator","updateProgressIndicator","cloneDeep","wordwrap","validateImport","getTypedFilename","saveJsonToFile","getFilePath","getWorkingDirectory","utils","EMAIL_TEMPLATE_TYPE","readEmailTemplates","readEmailTemplate","exportEmailTemplates","updateEmailTemplate","importEmailTemplates","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","sort","a","b","localeCompare","entries","table","push","enabled","from","toString","exportEmailTemplateToFile","file","includeMeta","indicatorId","fileName","filePath","templateData","fileData","exportEmailTemplatesToFile","exportData","exportEmailTemplatesToFiles","importEmailTemplateFromFile","raw","replaceAll","data","readFileSync","JSON","parse","getTemplateIdFromFileName","emailTemplateData","s2sConvert","importEmailTemplatesFromFile","basename","message","html","convertedData","importEmailTemplatesFromFiles","names","readdirSync","jsonFiles","startsWith","endsWith","toLowerCase","map","total","totalErrors","errors","id","hasOwnProperty","call","importFirstEmailTemplateFromFile"],"sources":["../../src/ops/EmailTemplateOps.ts"],"sourcesContent":["import { frodo, FrodoError } 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 printError,\n printMessage,\n stopProgressIndicator,\n updateProgressIndicator,\n} from '../utils/Console';\nimport { cloneDeep } from './utils/OpsUtils';\nimport wordwrap from './utils/Wordwrap';\n\nconst {\n validateImport,\n getTypedFilename,\n saveJsonToFile,\n getFilePath,\n getWorkingDirectory,\n} = frodo.utils;\nconst {\n EMAIL_TEMPLATE_TYPE,\n readEmailTemplates,\n readEmailTemplate,\n exportEmailTemplates,\n updateEmailTemplate,\n importEmailTemplates,\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<boolean>} a promise that resolves to true if successful, false otherwise\n */\nexport async function listEmailTemplates(\n long: boolean = false\n): Promise<boolean> {\n let emailTemplates = [];\n try {\n emailTemplates = await readEmailTemplates();\n } catch (error) {\n printError(error);\n return false;\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 true;\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 * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @return {Promise<boolean>} a promise that resolves to true if successful, false otherwise\n */\nexport async function exportEmailTemplateToFile(\n templateId: string,\n file: string,\n includeMeta: boolean = true\n): Promise<boolean> {\n let indicatorId: string;\n try {\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(templateId, EMAIL_TEMPLATE_FILE_TYPE);\n }\n const filePath = getFilePath(fileName, true);\n indicatorId = createProgressIndicator(\n 'determinate',\n 1,\n `Exporting ${templateId}`\n );\n const templateData = await readEmailTemplate(templateId);\n updateProgressIndicator(indicatorId, `Writing file ${filePath}`);\n const fileData = getFileDataTemplate();\n fileData.emailTemplate[templateId] = templateData;\n saveJsonToFile(fileData, filePath, includeMeta);\n stopProgressIndicator(\n indicatorId,\n `Exported ${templateId['brightCyan']} to ${filePath['brightCyan']}.`\n );\n return true;\n } catch (error) {\n stopProgressIndicator(indicatorId, `${error}`);\n printError(error);\n }\n return false;\n}\n\n/**\n * Export all email templates to file\n * @param {string} file optional filename\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @return {Promise<boolean>} a promise that resolves to true if successful, false otherwise\n */\nexport async function exportEmailTemplatesToFile(\n file: string,\n includeMeta: boolean = true\n): Promise<boolean> {\n try {\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(\n `allEmailTemplates`,\n EMAIL_TEMPLATE_FILE_TYPE\n );\n }\n const filePath = getFilePath(fileName, true);\n const exportData = await exportEmailTemplates();\n saveJsonToFile(exportData, filePath, includeMeta);\n return true;\n } catch (error) {\n printError(error);\n }\n return false;\n}\n\n/**\n * Export all email templates to separate files\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @return {Promise<boolean>} a promise that resolves to true if successful, false otherwise\n */\nexport async function exportEmailTemplatesToFiles(\n includeMeta: boolean = true\n): Promise<boolean> {\n let indicatorId;\n try {\n const exportData = Object.entries(\n (await exportEmailTemplates()).emailTemplate\n );\n indicatorId = createProgressIndicator(\n 'determinate',\n exportData.length,\n 'Writing email templates'\n );\n for (const [templateId, template] of exportData) {\n const fileName = getTypedFilename(templateId, EMAIL_TEMPLATE_FILE_TYPE);\n const fileData = getFileDataTemplate();\n updateProgressIndicator(indicatorId, `Exporting ${templateId}`);\n fileData.emailTemplate[templateId] = template;\n saveJsonToFile(fileData, getFilePath(fileName, true), includeMeta);\n }\n stopProgressIndicator(\n indicatorId,\n `${exportData.length} templates written.`\n );\n return true;\n } catch (error) {\n stopProgressIndicator(indicatorId, `${error}`);\n printError(error);\n }\n return false;\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 * @return {Promise<boolean>} a promise that resolves to true if successful, false otherwise\n */\nexport async function importEmailTemplateFromFile(\n templateId: string,\n file: string,\n raw: boolean = false\n): Promise<boolean> {\n templateId = templateId.replaceAll(`${EMAIL_TEMPLATE_TYPE}/`, '');\n const filePath = getFilePath(file);\n try {\n const data = fs.readFileSync(filePath, 'utf8');\n const fileData = JSON.parse(data);\n const indicatorId = createProgressIndicator(\n 'determinate',\n 1,\n `Importing ${templateId}`\n );\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(indicatorId, `Importing ${templateId}`);\n stopProgressIndicator(indicatorId, `Imported ${templateId}`);\n return true;\n } catch (error) {\n stopProgressIndicator(indicatorId, `${error}`);\n printError(error);\n }\n } else {\n stopProgressIndicator(\n indicatorId,\n `Email template ${templateId} not found in ${filePath}!`\n );\n printMessage(\n `Email template ${templateId} not found in ${filePath}!`,\n 'error'\n );\n }\n } catch (error) {\n printError(error);\n }\n return false;\n}\n\n/**\n * Import all email templates from file\n * @param {string} file optional filename\n * @return {Promise<boolean>} a promise that resolves to true if successful, false otherwise\n */\nexport async function importEmailTemplatesFromFile(\n file: string\n): Promise<boolean> {\n const filePath = getFilePath(file);\n const indicatorId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing email templates from ${filePath}...`\n );\n try {\n const data = fs.readFileSync(filePath, 'utf8');\n const fileData = JSON.parse(data);\n await importEmailTemplates(fileData);\n stopProgressIndicator(\n indicatorId,\n `Successfully imported email templates from ${filePath}.`,\n 'success'\n );\n return true;\n } catch (error) {\n stopProgressIndicator(\n indicatorId,\n `Error importing email templates from ${filePath}.`,\n 'fail'\n );\n printError(error);\n }\n return false;\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): 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 FrodoError(\n `Filename does not indicate a raw email template: ${file}`\n );\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 * @return {Promise<boolean>} a promise that resolves to true if successful, false otherwise\n */\nexport async function importEmailTemplatesFromFiles(\n raw: boolean = false\n): Promise<boolean> {\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 const indicatorId = 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 (error) {\n errors += 1;\n printError(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 (error) {\n errors += 1;\n printError(error);\n }\n }\n }\n }\n totalErrors += errors;\n updateProgressIndicator(indicatorId, `Imported ${file}`);\n } else {\n printMessage(`Validation of ${file} failed!`, 'error');\n }\n }\n stopProgressIndicator(\n indicatorId,\n `Imported ${total - totalErrors} of ${total} email template(s) from ${\n jsonFiles.length\n } file(s).`\n );\n if (totalErrors === 0) return true;\n return false;\n}\n\n/**\n * Import first email template from file\n * @param {string} file optional filename\n * @return {Promise<boolean>} a promise that resolves to true if successful, false otherwise\n */\nexport async function importFirstEmailTemplateFromFile(\n file: string,\n raw: boolean = false\n): Promise<boolean> {\n let indicatorId: string;\n try {\n const data = fs.readFileSync(getFilePath(file), 'utf8');\n const fileData = JSON.parse(data);\n indicatorId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing first email template`\n );\n if (raw) {\n try {\n const templateId = getTemplateIdFromFileName(file);\n const templateData = s2sConvert(fileData);\n await updateEmailTemplate(templateId, templateData);\n stopProgressIndicator(indicatorId, `Imported ${templateId}`, 'success');\n return true;\n } catch (error) {\n stopProgressIndicator(\n indicatorId,\n `Error importing email template: ${error}`,\n 'fail'\n );\n printError(error);\n }\n } else {\n for (const id of Object.keys(fileData.emailTemplate)) {\n try {\n await updateEmailTemplate(\n id.replace(regexEmailTemplateType, ''),\n fileData.emailTemplate[id]\n );\n stopProgressIndicator(indicatorId, `Imported ${id}`, 'success');\n return true;\n } catch (error) {\n stopProgressIndicator(indicatorId, `Error importing ${id}`, 'fail');\n printError(error);\n }\n break;\n }\n }\n } catch (error) {\n stopProgressIndicator(\n indicatorId,\n `Error importing first email template`,\n 'fail'\n );\n printError(error);\n }\n return false;\n}\n"],"mappings":"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"}