@rockcarver/frodo-cli 0.18.2-9 → 0.19.1

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 (324) hide show
  1. package/CHANGELOG.md +120 -1
  2. package/esm/app.js +4 -1
  3. package/esm/app.js.map +1 -1
  4. package/esm/cli/FrodoCommand.js +140 -0
  5. package/esm/cli/FrodoCommand.js.map +1 -0
  6. package/esm/cli/_template/something-delete.js +9 -15
  7. package/esm/cli/_template/something-delete.js.map +1 -1
  8. package/esm/cli/_template/something-describe.js +9 -15
  9. package/esm/cli/_template/something-describe.js.map +1 -1
  10. package/esm/cli/_template/something-else-delete.js +9 -15
  11. package/esm/cli/_template/something-else-delete.js.map +1 -1
  12. package/esm/cli/_template/something-else-describe.js +9 -15
  13. package/esm/cli/_template/something-else-describe.js.map +1 -1
  14. package/esm/cli/_template/something-else-export.js +9 -15
  15. package/esm/cli/_template/something-else-export.js.map +1 -1
  16. package/esm/cli/_template/something-else-import.js +9 -15
  17. package/esm/cli/_template/something-else-import.js.map +1 -1
  18. package/esm/cli/_template/something-else-list.js +9 -15
  19. package/esm/cli/_template/something-else-list.js.map +1 -1
  20. package/esm/cli/_template/something-else.js +8 -8
  21. package/esm/cli/_template/something-else.js.map +1 -1
  22. package/esm/cli/_template/something-export.js +9 -15
  23. package/esm/cli/_template/something-export.js.map +1 -1
  24. package/esm/cli/_template/something-import.js +9 -15
  25. package/esm/cli/_template/something-import.js.map +1 -1
  26. package/esm/cli/_template/something-list.js +9 -15
  27. package/esm/cli/_template/something-list.js.map +1 -1
  28. package/esm/cli/_template/something-other-delete.js +9 -15
  29. package/esm/cli/_template/something-other-delete.js.map +1 -1
  30. package/esm/cli/_template/something-other-describe.js +9 -15
  31. package/esm/cli/_template/something-other-describe.js.map +1 -1
  32. package/esm/cli/_template/something-other-export.js +9 -15
  33. package/esm/cli/_template/something-other-export.js.map +1 -1
  34. package/esm/cli/_template/something-other-import.js +9 -15
  35. package/esm/cli/_template/something-other-import.js.map +1 -1
  36. package/esm/cli/_template/something-other-list.js +9 -15
  37. package/esm/cli/_template/something-other-list.js.map +1 -1
  38. package/esm/cli/_template/something-other.js +8 -8
  39. package/esm/cli/_template/something-other.js.map +1 -1
  40. package/esm/cli/_template/something.js +9 -10
  41. package/esm/cli/_template/something.js.map +1 -1
  42. package/esm/cli/admin/admin-add-autoid-static-user-mapping.js +8 -15
  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 +9 -15
  45. package/esm/cli/admin/admin-create-oauth2-client-with-admin-privileges.js.map +1 -1
  46. package/esm/cli/admin/admin-get-access-token.js +9 -15
  47. package/esm/cli/admin/admin-get-access-token.js.map +1 -1
  48. package/esm/cli/admin/admin-grant-oauth2-client-admin-privileges.js +9 -15
  49. package/esm/cli/admin/admin-grant-oauth2-client-admin-privileges.js.map +1 -1
  50. package/esm/cli/admin/admin-hide-generic-extension-attributes.js +9 -15
  51. package/esm/cli/admin/admin-hide-generic-extension-attributes.js.map +1 -1
  52. package/esm/cli/admin/admin-list-oauth2-clients-with-admin-privileges.js +8 -15
  53. package/esm/cli/admin/admin-list-oauth2-clients-with-admin-privileges.js.map +1 -1
  54. package/esm/cli/admin/admin-list-oauth2-clients-with-custom-privileges.js +8 -15
  55. package/esm/cli/admin/admin-list-oauth2-clients-with-custom-privileges.js.map +1 -1
  56. package/esm/cli/admin/admin-list-static-user-mappings.js +9 -15
  57. package/esm/cli/admin/admin-list-static-user-mappings.js.map +1 -1
  58. package/esm/cli/admin/admin-remove-static-user-mapping.js +8 -15
  59. package/esm/cli/admin/admin-remove-static-user-mapping.js.map +1 -1
  60. package/esm/cli/admin/admin-repair-org-model.js +9 -15
  61. package/esm/cli/admin/admin-repair-org-model.js.map +1 -1
  62. package/esm/cli/admin/admin-revoke-oauth2-client-admin-privileges.js +9 -15
  63. package/esm/cli/admin/admin-revoke-oauth2-client-admin-privileges.js.map +1 -1
  64. package/esm/cli/admin/admin-show-generic-extension-attributes.js +9 -15
  65. package/esm/cli/admin/admin-show-generic-extension-attributes.js.map +1 -1
  66. package/esm/cli/admin/admin.js +14 -15
  67. package/esm/cli/admin/admin.js.map +1 -1
  68. package/esm/cli/agent/agent-delete.js +8 -15
  69. package/esm/cli/agent/agent-delete.js.map +1 -1
  70. package/esm/cli/agent/agent-describe.js +9 -15
  71. package/esm/cli/agent/agent-describe.js.map +1 -1
  72. package/esm/cli/agent/agent-export.js +8 -15
  73. package/esm/cli/agent/agent-export.js.map +1 -1
  74. package/esm/cli/agent/agent-gateway-delete.js +8 -15
  75. package/esm/cli/agent/agent-gateway-delete.js.map +1 -1
  76. package/esm/cli/agent/agent-gateway-describe.js +9 -15
  77. package/esm/cli/agent/agent-gateway-describe.js.map +1 -1
  78. package/esm/cli/agent/agent-gateway-export.js +8 -15
  79. package/esm/cli/agent/agent-gateway-export.js.map +1 -1
  80. package/esm/cli/agent/agent-gateway-import.js +8 -15
  81. package/esm/cli/agent/agent-gateway-import.js.map +1 -1
  82. package/esm/cli/agent/agent-gateway-list.js +9 -15
  83. package/esm/cli/agent/agent-gateway-list.js.map +1 -1
  84. package/esm/cli/agent/agent-gateway.js +8 -8
  85. package/esm/cli/agent/agent-gateway.js.map +1 -1
  86. package/esm/cli/agent/agent-import.js +8 -15
  87. package/esm/cli/agent/agent-import.js.map +1 -1
  88. package/esm/cli/agent/agent-java-delete.js +8 -15
  89. package/esm/cli/agent/agent-java-delete.js.map +1 -1
  90. package/esm/cli/agent/agent-java-describe.js +9 -15
  91. package/esm/cli/agent/agent-java-describe.js.map +1 -1
  92. package/esm/cli/agent/agent-java-export.js +8 -15
  93. package/esm/cli/agent/agent-java-export.js.map +1 -1
  94. package/esm/cli/agent/agent-java-import.js +8 -15
  95. package/esm/cli/agent/agent-java-import.js.map +1 -1
  96. package/esm/cli/agent/agent-java-list.js +9 -15
  97. package/esm/cli/agent/agent-java-list.js.map +1 -1
  98. package/esm/cli/agent/agent-java.js +8 -8
  99. package/esm/cli/agent/agent-java.js.map +1 -1
  100. package/esm/cli/agent/agent-list.js +9 -15
  101. package/esm/cli/agent/agent-list.js.map +1 -1
  102. package/esm/cli/agent/agent-web-delete.js +8 -15
  103. package/esm/cli/agent/agent-web-delete.js.map +1 -1
  104. package/esm/cli/agent/agent-web-describe.js +9 -15
  105. package/esm/cli/agent/agent-web-describe.js.map +1 -1
  106. package/esm/cli/agent/agent-web-export.js +8 -15
  107. package/esm/cli/agent/agent-web-export.js.map +1 -1
  108. package/esm/cli/agent/agent-web-import.js +8 -15
  109. package/esm/cli/agent/agent-web-import.js.map +1 -1
  110. package/esm/cli/agent/agent-web-list.js +9 -15
  111. package/esm/cli/agent/agent-web-list.js.map +1 -1
  112. package/esm/cli/agent/agent-web.js +8 -8
  113. package/esm/cli/agent/agent-web.js.map +1 -1
  114. package/esm/cli/agent/agent.js +10 -11
  115. package/esm/cli/agent/agent.js.map +1 -1
  116. package/esm/cli/app/app-delete.js +9 -12
  117. package/esm/cli/app/app-delete.js.map +1 -1
  118. package/esm/cli/app/app-describe.js +9 -12
  119. package/esm/cli/app/app-describe.js.map +1 -1
  120. package/esm/cli/app/app-export.js +28 -34
  121. package/esm/cli/app/app-export.js.map +1 -1
  122. package/esm/cli/app/app-import.js +11 -14
  123. package/esm/cli/app/app-import.js.map +1 -1
  124. package/esm/cli/app/app-list.js +11 -14
  125. package/esm/cli/app/app-list.js.map +1 -1
  126. package/esm/cli/app/app.js +8 -10
  127. package/esm/cli/app/app.js.map +1 -1
  128. package/esm/cli/conn/conn-delete.js +5 -5
  129. package/esm/cli/conn/conn-delete.js.map +1 -1
  130. package/esm/cli/conn/conn-describe.js +6 -5
  131. package/esm/cli/conn/conn-describe.js.map +1 -1
  132. package/esm/cli/conn/conn-list.js +6 -8
  133. package/esm/cli/conn/conn-list.js.map +1 -1
  134. package/esm/cli/conn/conn-save.js +72 -0
  135. package/esm/cli/conn/conn-save.js.map +1 -0
  136. package/esm/cli/conn/conn.js +10 -8
  137. package/esm/cli/conn/conn.js.map +1 -1
  138. package/esm/cli/email/email-template-export.js +27 -33
  139. package/esm/cli/email/email-template-export.js.map +1 -1
  140. package/esm/cli/email/email-template-import.js +33 -39
  141. package/esm/cli/email/email-template-import.js.map +1 -1
  142. package/esm/cli/email/email-template-list.js +11 -14
  143. package/esm/cli/email/email-template-list.js.map +1 -1
  144. package/esm/cli/email/email-template.js +6 -6
  145. package/esm/cli/email/email-template.js.map +1 -1
  146. package/esm/cli/email/email.js +2 -2
  147. package/esm/cli/email/email.js.map +1 -1
  148. package/esm/cli/esv/esv-apply.js +9 -12
  149. package/esm/cli/esv/esv-apply.js.map +1 -1
  150. package/esm/cli/esv/esv-secret-create.js +11 -14
  151. package/esm/cli/esv/esv-secret-create.js.map +1 -1
  152. package/esm/cli/esv/esv-secret-delete.js +23 -29
  153. package/esm/cli/esv/esv-secret-delete.js.map +1 -1
  154. package/esm/cli/esv/esv-secret-describe.js +11 -14
  155. package/esm/cli/esv/esv-secret-describe.js.map +1 -1
  156. package/esm/cli/esv/esv-secret-export.js +9 -12
  157. package/esm/cli/esv/esv-secret-export.js.map +1 -1
  158. package/esm/cli/esv/esv-secret-import.js +9 -12
  159. package/esm/cli/esv/esv-secret-import.js.map +1 -1
  160. package/esm/cli/esv/esv-secret-list.js +11 -14
  161. package/esm/cli/esv/esv-secret-list.js.map +1 -1
  162. package/esm/cli/esv/esv-secret-set.js +11 -14
  163. package/esm/cli/esv/esv-secret-set.js.map +1 -1
  164. package/esm/cli/esv/esv-secret-version-activate.js +18 -24
  165. package/esm/cli/esv/esv-secret-version-activate.js.map +1 -1
  166. package/esm/cli/esv/esv-secret-version-create.js +11 -14
  167. package/esm/cli/esv/esv-secret-version-create.js.map +1 -1
  168. package/esm/cli/esv/esv-secret-version-deactivate.js +18 -24
  169. package/esm/cli/esv/esv-secret-version-deactivate.js.map +1 -1
  170. package/esm/cli/esv/esv-secret-version-delete.js +23 -29
  171. package/esm/cli/esv/esv-secret-version-delete.js.map +1 -1
  172. package/esm/cli/esv/esv-secret-version-list.js +11 -14
  173. package/esm/cli/esv/esv-secret-version-list.js.map +1 -1
  174. package/esm/cli/esv/esv-secret-version.js +8 -8
  175. package/esm/cli/esv/esv-secret-version.js.map +1 -1
  176. package/esm/cli/esv/esv-secret.js +11 -11
  177. package/esm/cli/esv/esv-secret.js.map +1 -1
  178. package/esm/cli/esv/esv-variable-create.js +10 -14
  179. package/esm/cli/esv/esv-variable-create.js.map +1 -1
  180. package/esm/cli/esv/esv-variable-delete.js +23 -29
  181. package/esm/cli/esv/esv-variable-delete.js.map +1 -1
  182. package/esm/cli/esv/esv-variable-describe.js +11 -14
  183. package/esm/cli/esv/esv-variable-describe.js.map +1 -1
  184. package/esm/cli/esv/esv-variable-export.js +9 -12
  185. package/esm/cli/esv/esv-variable-export.js.map +1 -1
  186. package/esm/cli/esv/esv-variable-import.js +9 -12
  187. package/esm/cli/esv/esv-variable-import.js.map +1 -1
  188. package/esm/cli/esv/esv-variable-list.js +11 -14
  189. package/esm/cli/esv/esv-variable-list.js.map +1 -1
  190. package/esm/cli/esv/esv-variable-set.js +19 -26
  191. package/esm/cli/esv/esv-variable-set.js.map +1 -1
  192. package/esm/cli/esv/esv-variable.js +10 -10
  193. package/esm/cli/esv/esv-variable.js.map +1 -1
  194. package/esm/cli/esv/esv.js +5 -6
  195. package/esm/cli/esv/esv.js.map +1 -1
  196. package/esm/cli/idm/idm-count.js +12 -17
  197. package/esm/cli/idm/idm-count.js.map +1 -1
  198. package/esm/cli/idm/idm-export.js +29 -39
  199. package/esm/cli/idm/idm-export.js.map +1 -1
  200. package/esm/cli/idm/idm-import.js +29 -39
  201. package/esm/cli/idm/idm-import.js.map +1 -1
  202. package/esm/cli/idm/idm-list.js +11 -17
  203. package/esm/cli/idm/idm-list.js.map +1 -1
  204. package/esm/cli/idm/idm.js +6 -9
  205. package/esm/cli/idm/idm.js.map +1 -1
  206. package/esm/cli/idp/idp-export.js +11 -15
  207. package/esm/cli/idp/idp-export.js.map +1 -1
  208. package/esm/cli/idp/idp-import.js +32 -38
  209. package/esm/cli/idp/idp-import.js.map +1 -1
  210. package/esm/cli/idp/idp-list.js +9 -13
  211. package/esm/cli/idp/idp-list.js.map +1 -1
  212. package/esm/cli/idp/idp.js +5 -6
  213. package/esm/cli/idp/idp.js.map +1 -1
  214. package/esm/cli/info/info.js +19 -20
  215. package/esm/cli/info/info.js.map +1 -1
  216. package/esm/cli/journey/journey-delete.js +22 -28
  217. package/esm/cli/journey/journey-delete.js.map +1 -1
  218. package/esm/cli/journey/journey-describe.js +12 -19
  219. package/esm/cli/journey/journey-describe.js.map +1 -1
  220. package/esm/cli/journey/journey-disable.js +20 -26
  221. package/esm/cli/journey/journey-disable.js.map +1 -1
  222. package/esm/cli/journey/journey-enable.js +20 -26
  223. package/esm/cli/journey/journey-enable.js.map +1 -1
  224. package/esm/cli/journey/journey-export.js +37 -45
  225. package/esm/cli/journey/journey-export.js.map +1 -1
  226. package/esm/cli/journey/journey-import.js +44 -52
  227. package/esm/cli/journey/journey-import.js.map +1 -1
  228. package/esm/cli/journey/journey-list.js +10 -13
  229. package/esm/cli/journey/journey-list.js.map +1 -1
  230. package/esm/cli/journey/journey-prune.js +9 -13
  231. package/esm/cli/journey/journey-prune.js.map +1 -1
  232. package/esm/cli/journey/journey.js +10 -11
  233. package/esm/cli/journey/journey.js.map +1 -1
  234. package/esm/cli/logging/logs-fetch.js +17 -19
  235. package/esm/cli/logging/logs-fetch.js.map +1 -1
  236. package/esm/cli/logging/logs-list.js +19 -25
  237. package/esm/cli/logging/logs-list.js.map +1 -1
  238. package/esm/cli/logging/logs-tail.js +17 -19
  239. package/esm/cli/logging/logs-tail.js.map +1 -1
  240. package/esm/cli/logging/logs.js +7 -6
  241. package/esm/cli/logging/logs.js.map +1 -1
  242. package/esm/cli/realm/realm-add-custom-domain.js +11 -14
  243. package/esm/cli/realm/realm-add-custom-domain.js.map +1 -1
  244. package/esm/cli/realm/realm-describe.js +10 -14
  245. package/esm/cli/realm/realm-describe.js.map +1 -1
  246. package/esm/cli/realm/realm-list.js +11 -14
  247. package/esm/cli/realm/realm-list.js.map +1 -1
  248. package/esm/cli/realm/realm-remove-custom-domain.js +11 -14
  249. package/esm/cli/realm/realm-remove-custom-domain.js.map +1 -1
  250. package/esm/cli/realm/realm.js +7 -8
  251. package/esm/cli/realm/realm.js.map +1 -1
  252. package/esm/cli/saml/saml-cot-export.js +27 -36
  253. package/esm/cli/saml/saml-cot-export.js.map +1 -1
  254. package/esm/cli/saml/saml-cot-import.js +32 -41
  255. package/esm/cli/saml/saml-cot-import.js.map +1 -1
  256. package/esm/cli/saml/saml-cot-list.js +10 -16
  257. package/esm/cli/saml/saml-cot-list.js.map +1 -1
  258. package/esm/cli/saml/saml-cot.js +6 -6
  259. package/esm/cli/saml/saml-cot.js.map +1 -1
  260. package/esm/cli/saml/saml-delete.js +8 -15
  261. package/esm/cli/saml/saml-delete.js.map +1 -1
  262. package/esm/cli/saml/saml-describe.js +10 -16
  263. package/esm/cli/saml/saml-describe.js.map +1 -1
  264. package/esm/cli/saml/saml-export.js +9 -16
  265. package/esm/cli/saml/saml-export.js.map +1 -1
  266. package/esm/cli/saml/saml-import.js +45 -54
  267. package/esm/cli/saml/saml-import.js.map +1 -1
  268. package/esm/cli/saml/saml-list.js +11 -17
  269. package/esm/cli/saml/saml-list.js.map +1 -1
  270. package/esm/cli/saml/saml-metadata-export.js +21 -30
  271. package/esm/cli/saml/saml-metadata-export.js.map +1 -1
  272. package/esm/cli/saml/saml-metadata.js +4 -4
  273. package/esm/cli/saml/saml-metadata.js.map +1 -1
  274. package/esm/cli/saml/saml.js +9 -10
  275. package/esm/cli/saml/saml.js.map +1 -1
  276. package/esm/cli/script/script-delete.js +9 -12
  277. package/esm/cli/script/script-delete.js.map +1 -1
  278. package/esm/cli/script/script-describe.js +9 -12
  279. package/esm/cli/script/script-describe.js.map +1 -1
  280. package/esm/cli/script/script-export.js +28 -34
  281. package/esm/cli/script/script-export.js.map +1 -1
  282. package/esm/cli/script/script-import.js +10 -13
  283. package/esm/cli/script/script-import.js.map +1 -1
  284. package/esm/cli/script/script-list.js +10 -13
  285. package/esm/cli/script/script-list.js.map +1 -1
  286. package/esm/cli/script/script.js +7 -8
  287. package/esm/cli/script/script.js.map +1 -1
  288. package/esm/cli/service/service-delete.js +10 -16
  289. package/esm/cli/service/service-delete.js.map +1 -1
  290. package/esm/cli/service/service-export.js +12 -17
  291. package/esm/cli/service/service-export.js.map +1 -1
  292. package/esm/cli/service/service-import.js +12 -18
  293. package/esm/cli/service/service-import.js.map +1 -1
  294. package/esm/cli/service/service-list.js +9 -15
  295. package/esm/cli/service/service-list.js.map +1 -1
  296. package/esm/cli/service/service.js +6 -7
  297. package/esm/cli/service/service.js.map +1 -1
  298. package/esm/cli/theme/theme-delete.js +12 -19
  299. package/esm/cli/theme/theme-delete.js.map +1 -1
  300. package/esm/cli/theme/theme-export.js +12 -19
  301. package/esm/cli/theme/theme-export.js.map +1 -1
  302. package/esm/cli/theme/theme-import.js +14 -21
  303. package/esm/cli/theme/theme-import.js.map +1 -1
  304. package/esm/cli/theme/theme-list.js +10 -16
  305. package/esm/cli/theme/theme-list.js.map +1 -1
  306. package/esm/cli/theme/theme.js +6 -7
  307. package/esm/cli/theme/theme.js.map +1 -1
  308. package/esm/ops/ConnectionProfileOps.js +30 -0
  309. package/esm/ops/ConnectionProfileOps.js.map +1 -0
  310. package/esm/ops/IdmOps.js +317 -0
  311. package/esm/ops/IdmOps.js.map +1 -0
  312. package/esm/ops/JourneyOps.js +2 -1
  313. package/esm/ops/JourneyOps.js.map +1 -1
  314. package/esm/ops/ServiceOps.js +20 -20
  315. package/esm/ops/ServiceOps.js.map +1 -1
  316. package/esm/utils/Console.js +15 -25
  317. package/esm/utils/Console.js.map +1 -1
  318. package/package.json +6 -6
  319. package/esm/cli/cmd_common.js +0 -79
  320. package/esm/cli/cmd_common.js.map +0 -1
  321. package/esm/cli/conn/conn-add.js +0 -37
  322. package/esm/cli/conn/conn-add.js.map +0 -1
  323. package/esm/cli/journey/journey-delete.e2e.test_.js.map +0 -1
  324. package/esm/cli/journey/journey-list.e2e.test_.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -7,6 +7,103 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.19.1] - 2022-12-20
11
+
12
+ ### Fixed
13
+
14
+ - \#161: Frodo now properly allows adding connection profiles with log credentials
15
+
16
+ ## [0.19.0] - 2022-12-18
17
+
18
+ ### Added
19
+
20
+ - \#154: Allow all connection parameters to be supplied using environment variables for secure CI/CD:
21
+ - `FRODO_HOST`
22
+ - `FRODO_REALM`
23
+ - `FRODO_USERNAME`
24
+ - `FRODO_PASSWORD`
25
+ - `FRODO_SA_ID`
26
+ - `FRODO_SA_JWK`
27
+ - `FRODO_LOG_KEY`
28
+ - `FRODO_LOG_SECRET`
29
+ - `FRODO_DEBUG` - set to any value to enable debug logging, e.g. `FRODO_DEBUG=1 frodo info tenant-name`
30
+ - \#143: Support Identity Cloud Service Accounts in `frodo conn save|add` command
31
+ 1. The `frodo conn add` command is renamed to `frodo conn save` and `add` is added as an alias for backwards compatibility.
32
+ 2. The `frodo conn save` command supports the following new options to manage service accounts:
33
+ 1. `--sa-id <uuid>` Service account's uuid. If specified, must also include `--sa-jwk-file`. Ignored with `--no-sa`.
34
+ 2. `--sa-jwk-file <file>` File containing the service account's java web key (jwk). Jwk must contain private key! If specified, must also include `--sa-id`. Ignored with `--no-sa`.
35
+ 3. `--no-sa` Do not add service account.
36
+ 3. The existing `--no-validate` option also applies to service account operations, allowing to add service account configuration to a connection profile without validating it, typical use case is an offline situation.
37
+ 4. The `frodo conn save` command automatically creates a new service account and adds it to an existing ID Cloud profile without service account or to a new ID Cloud profile. It does not do that if the `--no-sa` option is supplied.
38
+ 1. If `--sa-id` and `--sa-jwk-file` are supplied, `frodo conn save` adds the existing service account specified by those two parameters to the profile instead of creating a new service account.
39
+ 2. The `frodo conn save` command checks if the ID Cloud tenant supports service accounts before performing any service account operations.
40
+ 5. The `frodo conn save` command validates service account configuration unless the `--no-validate` options is supplied.
41
+ - \#101: Added new `frodo service` set of commands to manage AM realm services (`baseurl`, `DataStoreService`, `oauth-oidc`, `policyconfiguration`, `selfServiceTrees`, `SocialIdentityProviders`, `validation`, etc.) and global services (e.g. `CorsService`, `dashboard`, etc.).
42
+ frodo service
43
+ delete Delete AM services.
44
+ export Export AM services.
45
+ import Import AM services.
46
+ list List AM services.
47
+ - Added new `frodo idm import` command.
48
+ - \#98: Add support for Agents / Gateways
49
+ frodo agent Manage agents.
50
+ delete Delete agents of any type.
51
+ describe Describe agents of any type.
52
+ export Export agents of any type.
53
+ import Import agents of any type.
54
+ list List agents of any type.
55
+ gateway Manage gateway agents.
56
+ delete Delete gateway agents.
57
+ describe Describe gateway agents.
58
+ export Export gateway agents.
59
+ import Import gateway agents.
60
+ list List gateway agents.
61
+ java Manage java agents.
62
+ delete Delete java agents.
63
+ describe Describe java agents.
64
+ export Export java agents.
65
+ import Import java agents.
66
+ list List java agents.
67
+ web Manage web agents.
68
+ delete Delete web agents.
69
+ describe Describe web agents.
70
+ export Export web agents.
71
+ import Import web agents.
72
+ list List web agents.
73
+ - Added `--raw` option to `frodo saml import` and `frodo saml export` commands. The new option uses the classic (pre 7.0.0) SAML REST APIs. This allows Frodo to export and import SAML entity providers from pre 7 platform instances.
74
+ - New default options `--verbose`, `--debug`, and `--curlirize` for all commands
75
+
76
+ ### Changed
77
+
78
+ - Updated to frodo-lib 0.17.0
79
+ - \#110: Migrate from .frodorc to Connections.json
80
+ - Ongoing refactoring of code base:
81
+ - Refactored Email Template and Theme functionality in lib to remove fs operations
82
+ - \#93: Move cli functions from frodo-lib to frodo-cli
83
+ - More automated testing
84
+
85
+ ### Fixed
86
+
87
+ -
88
+
89
+ ## [0.18.2-18] - 2022-12-17
90
+
91
+ ## [0.18.2-17] - 2022-12-14
92
+
93
+ ## [0.18.2-16] - 2022-12-14
94
+
95
+ ## [0.18.2-15] - 2022-12-12
96
+
97
+ ## [0.18.2-14] - 2022-12-10
98
+
99
+ ## [0.18.2-13] - 2022-12-01
100
+
101
+ ## [0.18.2-12] - 2022-11-29
102
+
103
+ ## [0.18.2-11] - 2022-11-26
104
+
105
+ ## [0.18.2-10] - 2022-11-23
106
+
10
107
  ## [0.18.2-9] - 2022-11-22
11
108
 
12
109
  - \#110: Migrate from .frodorc to Connections.json
@@ -732,7 +829,29 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
732
829
  - Fixed problem with adding connection profiles
733
830
  - Miscellaneous bug fixes
734
831
 
735
- [Unreleased]: https://github.com/rockcarver/frodo-cli/compare/v0.18.2-9...HEAD
832
+ [Unreleased]: https://github.com/rockcarver/frodo-cli/compare/v0.19.1...HEAD
833
+
834
+ [0.19.1]: https://github.com/rockcarver/frodo-cli/compare/v0.19.0...v0.19.1
835
+
836
+ [0.19.0]: https://github.com/rockcarver/frodo-cli/compare/v0.18.2-18...v0.19.0
837
+
838
+ [0.18.2-18]: https://github.com/rockcarver/frodo-cli/compare/v0.18.2-17...v0.18.2-18
839
+
840
+ [0.18.2-17]: https://github.com/rockcarver/frodo-cli/compare/v0.18.2-16...v0.18.2-17
841
+
842
+ [0.18.2-16]: https://github.com/rockcarver/frodo-cli/compare/v0.18.2-15...v0.18.2-16
843
+
844
+ [0.18.2-15]: https://github.com/rockcarver/frodo-cli/compare/v0.18.2-14...v0.18.2-15
845
+
846
+ [0.18.2-14]: https://github.com/rockcarver/frodo-cli/compare/v0.18.2-13...v0.18.2-14
847
+
848
+ [0.18.2-13]: https://github.com/rockcarver/frodo-cli/compare/v0.18.2-12...v0.18.2-13
849
+
850
+ [0.18.2-12]: https://github.com/rockcarver/frodo-cli/compare/v0.18.2-11...v0.18.2-12
851
+
852
+ [0.18.2-11]: https://github.com/rockcarver/frodo-cli/compare/v0.18.2-10...v0.18.2-11
853
+
854
+ [0.18.2-10]: https://github.com/rockcarver/frodo-cli/compare/v0.18.2-9...v0.18.2-10
736
855
 
737
856
  [0.18.2-9]: https://github.com/rockcarver/frodo-cli/compare/v0.18.2-8...v0.18.2-9
738
857
 
package/esm/app.js CHANGED
@@ -28,7 +28,7 @@ const {
28
28
  try {
29
29
  const program = new Command('frodo').version(await getVersions(false), '-v, --version');
30
30
  printMessage(await getVersions(true), 'text', false);
31
- initConnectionProfiles();
31
+ await initConnectionProfiles();
32
32
  program.addCommand(admin());
33
33
  program.addCommand(agent());
34
34
  program.addCommand(app());
@@ -45,6 +45,9 @@ const {
45
45
  program.addCommand(script());
46
46
  program.addCommand(service());
47
47
  program.addCommand(theme());
48
+ // enable sample command template.
49
+ // program.addCommand(something());
50
+
48
51
  program.showHelpAfterError();
49
52
  program.enablePositionalOptions();
50
53
  program.parse();
package/esm/app.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","names":["ConnectionProfile","Command","admin","agent","app","conn","email","esv","idm","idp","info","journey","logging","realm","saml","script","service","theme","printMessage","getVersions","initConnectionProfiles","program","version","addCommand","showHelpAfterError","enablePositionalOptions","parse","e"],"sources":["app.ts"],"sourcesContent":["#!/usr/bin/env -S node --no-warnings --enable-source-maps --experimental-specifier-resolution=node\n\nimport { ConnectionProfile } from '@rockcarver/frodo-lib';\nimport { Command } from 'commander';\n\n// commands\nimport admin from './cli/admin/admin';\nimport agent from './cli/agent/agent';\nimport app from './cli/app/app';\nimport conn from './cli/conn/conn';\nimport email from './cli/email/email';\nimport esv from './cli/esv/esv';\nimport idm from './cli/idm/idm';\nimport idp from './cli/idp/idp';\nimport info from './cli/info/info';\nimport journey from './cli/journey/journey';\nimport logging from './cli/logging/logs';\nimport realm from './cli/realm/realm';\nimport saml from './cli/saml/saml';\nimport script from './cli/script/script';\nimport service from './cli/service/service';\nimport theme from './cli/theme/theme';\nimport { printMessage } from './utils/Console';\nimport { getVersions } from './utils/Version';\n\nconst { initConnectionProfiles } = ConnectionProfile;\n\n(async () => {\n try {\n const program = new Command('frodo').version(\n await getVersions(false),\n '-v, --version'\n );\n\n printMessage(await getVersions(true), 'text', false);\n\n initConnectionProfiles();\n\n program.addCommand(admin());\n program.addCommand(agent());\n program.addCommand(app());\n program.addCommand(conn());\n program.addCommand(email());\n program.addCommand(esv());\n program.addCommand(idm());\n program.addCommand(idp());\n program.addCommand(info());\n program.addCommand(journey());\n program.addCommand(logging());\n program.addCommand(realm());\n program.addCommand(saml());\n program.addCommand(script());\n program.addCommand(service());\n program.addCommand(theme());\n\n program.showHelpAfterError();\n program.enablePositionalOptions();\n program.parse();\n } catch (e) {\n printMessage(`ERROR: exception running frodo - ${e}`, 'error');\n }\n})();\n"],"mappings":"AAAA;AAEA,SAASA,iBAAiB,QAAQ,uBAAuB;AACzD,SAASC,OAAO,QAAQ,WAAW;;AAEnC;AACA,OAAOC,KAAK,MAAM,mBAAmB;AACrC,OAAOC,KAAK,MAAM,mBAAmB;AACrC,OAAOC,GAAG,MAAM,eAAe;AAC/B,OAAOC,IAAI,MAAM,iBAAiB;AAClC,OAAOC,KAAK,MAAM,mBAAmB;AACrC,OAAOC,GAAG,MAAM,eAAe;AAC/B,OAAOC,GAAG,MAAM,eAAe;AAC/B,OAAOC,GAAG,MAAM,eAAe;AAC/B,OAAOC,IAAI,MAAM,iBAAiB;AAClC,OAAOC,OAAO,MAAM,uBAAuB;AAC3C,OAAOC,OAAO,MAAM,oBAAoB;AACxC,OAAOC,KAAK,MAAM,mBAAmB;AACrC,OAAOC,IAAI,MAAM,iBAAiB;AAClC,OAAOC,MAAM,MAAM,qBAAqB;AACxC,OAAOC,OAAO,MAAM,uBAAuB;AAC3C,OAAOC,KAAK,MAAM,mBAAmB;AACrC,SAASC,YAAY,QAAQ,iBAAiB;AAC9C,SAASC,WAAW,QAAQ,iBAAiB;AAE7C,MAAM;EAAEC;AAAuB,CAAC,GAAGpB,iBAAiB;AAEpD,CAAC,YAAY;EACX,IAAI;IACF,MAAMqB,OAAO,GAAG,IAAIpB,OAAO,CAAC,OAAO,CAAC,CAACqB,OAAO,CAC1C,MAAMH,WAAW,CAAC,KAAK,CAAC,EACxB,eAAe,CAChB;IAEDD,YAAY,CAAC,MAAMC,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC;IAEpDC,sBAAsB,EAAE;IAExBC,OAAO,CAACE,UAAU,CAACrB,KAAK,EAAE,CAAC;IAC3BmB,OAAO,CAACE,UAAU,CAACpB,KAAK,EAAE,CAAC;IAC3BkB,OAAO,CAACE,UAAU,CAACnB,GAAG,EAAE,CAAC;IACzBiB,OAAO,CAACE,UAAU,CAAClB,IAAI,EAAE,CAAC;IAC1BgB,OAAO,CAACE,UAAU,CAACjB,KAAK,EAAE,CAAC;IAC3Be,OAAO,CAACE,UAAU,CAAChB,GAAG,EAAE,CAAC;IACzBc,OAAO,CAACE,UAAU,CAACf,GAAG,EAAE,CAAC;IACzBa,OAAO,CAACE,UAAU,CAACd,GAAG,EAAE,CAAC;IACzBY,OAAO,CAACE,UAAU,CAACb,IAAI,EAAE,CAAC;IAC1BW,OAAO,CAACE,UAAU,CAACZ,OAAO,EAAE,CAAC;IAC7BU,OAAO,CAACE,UAAU,CAACX,OAAO,EAAE,CAAC;IAC7BS,OAAO,CAACE,UAAU,CAACV,KAAK,EAAE,CAAC;IAC3BQ,OAAO,CAACE,UAAU,CAACT,IAAI,EAAE,CAAC;IAC1BO,OAAO,CAACE,UAAU,CAACR,MAAM,EAAE,CAAC;IAC5BM,OAAO,CAACE,UAAU,CAACP,OAAO,EAAE,CAAC;IAC7BK,OAAO,CAACE,UAAU,CAACN,KAAK,EAAE,CAAC;IAE3BI,OAAO,CAACG,kBAAkB,EAAE;IAC5BH,OAAO,CAACI,uBAAuB,EAAE;IACjCJ,OAAO,CAACK,KAAK,EAAE;EACjB,CAAC,CAAC,OAAOC,CAAC,EAAE;IACVT,YAAY,CAAE,oCAAmCS,CAAE,EAAC,EAAE,OAAO,CAAC;EAChE;AACF,CAAC,GAAG"}
1
+ {"version":3,"file":"app.js","names":["ConnectionProfile","Command","admin","agent","app","conn","email","esv","idm","idp","info","journey","logging","realm","saml","script","service","theme","printMessage","getVersions","initConnectionProfiles","program","version","addCommand","showHelpAfterError","enablePositionalOptions","parse","e"],"sources":["app.ts"],"sourcesContent":["#!/usr/bin/env -S node --no-warnings --enable-source-maps --experimental-specifier-resolution=node\n\nimport { ConnectionProfile } from '@rockcarver/frodo-lib';\nimport { Command } from 'commander';\n\n// commands\nimport admin from './cli/admin/admin';\nimport agent from './cli/agent/agent';\nimport app from './cli/app/app';\nimport conn from './cli/conn/conn';\nimport email from './cli/email/email';\nimport esv from './cli/esv/esv';\nimport idm from './cli/idm/idm';\nimport idp from './cli/idp/idp';\nimport info from './cli/info/info';\nimport journey from './cli/journey/journey';\nimport logging from './cli/logging/logs';\nimport realm from './cli/realm/realm';\nimport saml from './cli/saml/saml';\nimport script from './cli/script/script';\nimport service from './cli/service/service';\nimport something from './cli/_template/something';\nimport theme from './cli/theme/theme';\nimport { printMessage } from './utils/Console';\nimport { getVersions } from './utils/Version';\n\nconst { initConnectionProfiles } = ConnectionProfile;\n\n(async () => {\n try {\n const program = new Command('frodo').version(\n await getVersions(false),\n '-v, --version'\n );\n\n printMessage(await getVersions(true), 'text', false);\n\n await initConnectionProfiles();\n\n program.addCommand(admin());\n program.addCommand(agent());\n program.addCommand(app());\n program.addCommand(conn());\n program.addCommand(email());\n program.addCommand(esv());\n program.addCommand(idm());\n program.addCommand(idp());\n program.addCommand(info());\n program.addCommand(journey());\n program.addCommand(logging());\n program.addCommand(realm());\n program.addCommand(saml());\n program.addCommand(script());\n program.addCommand(service());\n program.addCommand(theme());\n // enable sample command template.\n // program.addCommand(something());\n\n program.showHelpAfterError();\n program.enablePositionalOptions();\n program.parse();\n } catch (e) {\n printMessage(`ERROR: exception running frodo - ${e}`, 'error');\n }\n})();\n"],"mappings":"AAAA;AAEA,SAASA,iBAAiB,QAAQ,uBAAuB;AACzD,SAASC,OAAO,QAAQ,WAAW;;AAEnC;AACA,OAAOC,KAAK,MAAM,mBAAmB;AACrC,OAAOC,KAAK,MAAM,mBAAmB;AACrC,OAAOC,GAAG,MAAM,eAAe;AAC/B,OAAOC,IAAI,MAAM,iBAAiB;AAClC,OAAOC,KAAK,MAAM,mBAAmB;AACrC,OAAOC,GAAG,MAAM,eAAe;AAC/B,OAAOC,GAAG,MAAM,eAAe;AAC/B,OAAOC,GAAG,MAAM,eAAe;AAC/B,OAAOC,IAAI,MAAM,iBAAiB;AAClC,OAAOC,OAAO,MAAM,uBAAuB;AAC3C,OAAOC,OAAO,MAAM,oBAAoB;AACxC,OAAOC,KAAK,MAAM,mBAAmB;AACrC,OAAOC,IAAI,MAAM,iBAAiB;AAClC,OAAOC,MAAM,MAAM,qBAAqB;AACxC,OAAOC,OAAO,MAAM,uBAAuB;AAE3C,OAAOC,KAAK,MAAM,mBAAmB;AACrC,SAASC,YAAY,QAAQ,iBAAiB;AAC9C,SAASC,WAAW,QAAQ,iBAAiB;AAE7C,MAAM;EAAEC;AAAuB,CAAC,GAAGpB,iBAAiB;AAEpD,CAAC,YAAY;EACX,IAAI;IACF,MAAMqB,OAAO,GAAG,IAAIpB,OAAO,CAAC,OAAO,CAAC,CAACqB,OAAO,CAC1C,MAAMH,WAAW,CAAC,KAAK,CAAC,EACxB,eAAe,CAChB;IAEDD,YAAY,CAAC,MAAMC,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC;IAEpD,MAAMC,sBAAsB,EAAE;IAE9BC,OAAO,CAACE,UAAU,CAACrB,KAAK,EAAE,CAAC;IAC3BmB,OAAO,CAACE,UAAU,CAACpB,KAAK,EAAE,CAAC;IAC3BkB,OAAO,CAACE,UAAU,CAACnB,GAAG,EAAE,CAAC;IACzBiB,OAAO,CAACE,UAAU,CAAClB,IAAI,EAAE,CAAC;IAC1BgB,OAAO,CAACE,UAAU,CAACjB,KAAK,EAAE,CAAC;IAC3Be,OAAO,CAACE,UAAU,CAAChB,GAAG,EAAE,CAAC;IACzBc,OAAO,CAACE,UAAU,CAACf,GAAG,EAAE,CAAC;IACzBa,OAAO,CAACE,UAAU,CAACd,GAAG,EAAE,CAAC;IACzBY,OAAO,CAACE,UAAU,CAACb,IAAI,EAAE,CAAC;IAC1BW,OAAO,CAACE,UAAU,CAACZ,OAAO,EAAE,CAAC;IAC7BU,OAAO,CAACE,UAAU,CAACX,OAAO,EAAE,CAAC;IAC7BS,OAAO,CAACE,UAAU,CAACV,KAAK,EAAE,CAAC;IAC3BQ,OAAO,CAACE,UAAU,CAACT,IAAI,EAAE,CAAC;IAC1BO,OAAO,CAACE,UAAU,CAACR,MAAM,EAAE,CAAC;IAC5BM,OAAO,CAACE,UAAU,CAACP,OAAO,EAAE,CAAC;IAC7BK,OAAO,CAACE,UAAU,CAACN,KAAK,EAAE,CAAC;IAC3B;IACA;;IAEAI,OAAO,CAACG,kBAAkB,EAAE;IAC5BH,OAAO,CAACI,uBAAuB,EAAE;IACjCJ,OAAO,CAACK,KAAK,EAAE;EACjB,CAAC,CAAC,OAAOC,CAAC,EAAE;IACVT,YAAY,CAAE,oCAAmCS,CAAE,EAAC,EAAE,OAAO,CAAC;EAChE;AACF,CAAC,GAAG"}
@@ -0,0 +1,140 @@
1
+ import { Argument, Command, Option } from 'commander';
2
+ import * as globalConfig from '../storage/StaticStorage';
3
+ import { state } from '@rockcarver/frodo-lib';
4
+ import fs from 'fs';
5
+ import { printMessage, createProgressIndicator, updateProgressIndicator, stopProgressIndicator, verboseMessage, debugMessage, curlirizeMessage } from '../utils/Console.js';
6
+ const hostArgument = new Argument('[host]', 'Access Management base URL, e.g.: https://cdk.iam.example.com/am. To use a connection profile, just specify a unique substring.');
7
+ const realmArgument = new Argument('[realm]', "Realm. Specify realm as '/' for the root realm or 'realm' or '/parent/child' otherwise.").default(
8
+ // must check for FRODO_REALM env variable here because otherwise cli will overwrite realm with default value
9
+ process.env.FRODO_REALM || globalConfig.DEFAULT_REALM_KEY, '"alpha" for Identity Cloud tenants, "/" otherwise.');
10
+ const usernameArgument = new Argument('[username]', 'Username to login with. Must be an admin user with appropriate rights to manage authentication journeys/trees.');
11
+ const passwordArgument = new Argument('[password]', 'Password.');
12
+ const serviceAccountIdOption = new Option('--sa-id <sa-id>', 'Service account id.');
13
+ const serviceAccountJwkFileOption = new Option('--sa-jwk-file <file>', 'File containing the java web key (jwk) associated with the the service account.');
14
+ const deploymentOption = new Option('-m, --type <type>', 'Override auto-detected deployment type. Valid values for type: \n\
15
+ classic: A classic Access Management-only deployment with custom layout and configuration. \n\
16
+ cloud: A ForgeRock Identity Cloud environment. \n\
17
+ forgeops: A ForgeOps CDK or CDM deployment. \n\
18
+ The detected or provided deployment type controls certain behavior like obtaining an Identity \
19
+ Management admin token or not and whether to export/import referenced email templates or how \
20
+ to walk through the tenant admin login flow of Identity Cloud and handle MFA').choices(globalConfig.DEPLOYMENT_TYPES);
21
+ const insecureOption = new Option('-k, --insecure', 'Allow insecure connections when using SSL/TLS. Has no effect when using a network proxy for https (HTTPS_PROXY=http://<host>:<port>), in that case the proxy must provide this capability.').default(false, "Don't allow insecure connections");
22
+ const verboseOption = new Option('--verbose', 'Verbose output during command execution. If specified, may or may not produce additional output.');
23
+ const debugOption = new Option('--debug', 'Debug output during command execution. If specified, may or may not produce additional output helpful for troubleshooting.');
24
+ const curlirizeOption = new Option('--curlirize', 'Output all network calls in curl format.');
25
+ const defaultArgs = [hostArgument, realmArgument, usernameArgument, passwordArgument];
26
+ const defaultOpts = [serviceAccountIdOption, serviceAccountJwkFileOption, deploymentOption, insecureOption, verboseOption, debugOption, curlirizeOption];
27
+ const stateMap = {
28
+ [hostArgument.name()]: state.setHost,
29
+ [realmArgument.name()]: state.setRealm,
30
+ [usernameArgument.name()]: state.setUsername,
31
+ [passwordArgument.name()]: state.setPassword,
32
+ [serviceAccountIdOption.attributeName()]: state.setServiceAccountId,
33
+ [serviceAccountJwkFileOption.attributeName()]: file => {
34
+ try {
35
+ const data = fs.readFileSync(file);
36
+ const jwk = JSON.parse(data.toString());
37
+ state.setServiceAccountJwk(jwk);
38
+ } catch (error) {
39
+ printMessage(`Error parsing JWK from file ${file}: ${error.message}`, 'error');
40
+ }
41
+ },
42
+ [deploymentOption.attributeName()]: state.setDeploymentType,
43
+ [insecureOption.attributeName()]: state.setAllowInsecureConnection,
44
+ [verboseOption.attributeName()]: state.setVerbose,
45
+ [debugOption.attributeName()]: state.setDebug,
46
+ [curlirizeOption.attributeName()]: state.setCurlirize
47
+ };
48
+
49
+ /**
50
+ * Command with default options
51
+ */
52
+ export class FrodoStubCommand extends Command {
53
+ /**
54
+ * Creates a new FrodoCommand instance
55
+ * @param name Name of the command
56
+ * @param omits Array of default argument names and default option names that should not be added to this command
57
+ */
58
+ constructor(name) {
59
+ super(name);
60
+
61
+ // other default settings
62
+ this.helpOption('-h, --help', 'Help');
63
+ this.showHelpAfterError();
64
+ this.configureHelp({
65
+ sortSubcommands: true,
66
+ sortOptions: true
67
+ });
68
+
69
+ // register default handlers
70
+ state.setPrintHandler(printMessage);
71
+ state.setVerboseHandler(verboseMessage);
72
+ state.setDebugHandler(debugMessage);
73
+ state.setCurlirizeHandler(curlirizeMessage);
74
+ state.setCreateProgressHandler(createProgressIndicator);
75
+ state.setUpdateProgressHandler(updateProgressIndicator);
76
+ state.setStopProgressHandler(stopProgressIndicator);
77
+ }
78
+ }
79
+
80
+ /**
81
+ * Command with default options
82
+ */
83
+ export class FrodoCommand extends FrodoStubCommand {
84
+ /**
85
+ * Creates a new FrodoCommand instance
86
+ * @param name Name of the command
87
+ * @param omits Array of default argument names and default option names that should not be added to this command
88
+ */
89
+ constructor(name, omits = []) {
90
+ super(name);
91
+
92
+ // register default arguments
93
+ for (const arg of defaultArgs) {
94
+ if (!omits.includes(arg.name())) this.addArgument(arg);
95
+ }
96
+
97
+ // register default options
98
+ for (const opt of defaultOpts) {
99
+ if (!omits.includes(opt.name())) this.addOption(opt);
100
+ }
101
+ }
102
+
103
+ /**
104
+ *
105
+ * @param args
106
+ */
107
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
108
+ handleDefaultArgsAndOpts(...args) {
109
+ const command = args.pop();
110
+ const options = args.pop();
111
+
112
+ // handle arguments first
113
+ for (const [i, v] of command.args.entries()) {
114
+ const arg = command._args[i].name();
115
+ // handle only default arguments
116
+ if (Object.keys(stateMap).includes(arg)) {
117
+ debugMessage(`FrodoCommand.handleDefaultArgsAndOpts: Handling default argument '${arg}'.`);
118
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
119
+ const handler = stateMap[arg];
120
+ handler(v);
121
+ } else {
122
+ debugMessage(`FrodoCommand.handleDefaultArgsAndOpts: Ignoring non-default argument '${arg}'.`);
123
+ }
124
+ }
125
+
126
+ // handle options
127
+ for (const [k, v] of Object.entries(options)) {
128
+ // handle only default options
129
+ if (Object.keys(stateMap).includes(k)) {
130
+ debugMessage(`FrodoCommand.handleDefaultArgsAndOpts: Handling default option '${k}'.`);
131
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
132
+ const handler = stateMap[k];
133
+ handler(v);
134
+ } else {
135
+ debugMessage(`FrodoCommand.handleDefaultArgsAndOpts: Ignoring non-default option '${k}'.`);
136
+ }
137
+ }
138
+ }
139
+ }
140
+ //# sourceMappingURL=FrodoCommand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FrodoCommand.js","names":["Argument","Command","Option","globalConfig","state","fs","printMessage","createProgressIndicator","updateProgressIndicator","stopProgressIndicator","verboseMessage","debugMessage","curlirizeMessage","hostArgument","realmArgument","default","process","env","FRODO_REALM","DEFAULT_REALM_KEY","usernameArgument","passwordArgument","serviceAccountIdOption","serviceAccountJwkFileOption","deploymentOption","choices","DEPLOYMENT_TYPES","insecureOption","verboseOption","debugOption","curlirizeOption","defaultArgs","defaultOpts","stateMap","name","setHost","setRealm","setUsername","setPassword","attributeName","setServiceAccountId","file","data","readFileSync","jwk","JSON","parse","toString","setServiceAccountJwk","error","message","setDeploymentType","setAllowInsecureConnection","setVerbose","setDebug","setCurlirize","FrodoStubCommand","constructor","helpOption","showHelpAfterError","configureHelp","sortSubcommands","sortOptions","setPrintHandler","setVerboseHandler","setDebugHandler","setCurlirizeHandler","setCreateProgressHandler","setUpdateProgressHandler","setStopProgressHandler","FrodoCommand","omits","arg","includes","addArgument","opt","addOption","handleDefaultArgsAndOpts","args","command","pop","options","i","v","entries","_args","Object","keys","handler","k"],"sources":["cli/FrodoCommand.ts"],"sourcesContent":["import { Argument, Command, Option } from 'commander';\nimport * as globalConfig from '../storage/StaticStorage';\nimport { state } from '@rockcarver/frodo-lib';\nimport fs from 'fs';\nimport {\n printMessage,\n createProgressIndicator,\n updateProgressIndicator,\n stopProgressIndicator,\n verboseMessage,\n debugMessage,\n curlirizeMessage,\n} from '../utils/Console.js';\n\nconst hostArgument = new Argument(\n '[host]',\n 'Access Management base URL, e.g.: https://cdk.iam.example.com/am. To use a connection profile, just specify a unique substring.'\n);\n\nconst realmArgument = new Argument(\n '[realm]',\n \"Realm. Specify realm as '/' for the root realm or 'realm' or '/parent/child' otherwise.\"\n).default(\n // must check for FRODO_REALM env variable here because otherwise cli will overwrite realm with default value\n process.env.FRODO_REALM || globalConfig.DEFAULT_REALM_KEY,\n '\"alpha\" for Identity Cloud tenants, \"/\" otherwise.'\n);\n\nconst usernameArgument = new Argument(\n '[username]',\n 'Username to login with. Must be an admin user with appropriate rights to manage authentication journeys/trees.'\n);\n\nconst passwordArgument = new Argument('[password]', 'Password.');\n\nconst serviceAccountIdOption = new Option(\n '--sa-id <sa-id>',\n 'Service account id.'\n);\n\nconst serviceAccountJwkFileOption = new Option(\n '--sa-jwk-file <file>',\n 'File containing the java web key (jwk) associated with the the service account.'\n);\n\nconst deploymentOption = new Option(\n '-m, --type <type>',\n 'Override auto-detected deployment type. Valid values for type: \\n\\\nclassic: A classic Access Management-only deployment with custom layout and configuration. \\n\\\ncloud: A ForgeRock Identity Cloud environment. \\n\\\nforgeops: A ForgeOps CDK or CDM deployment. \\n\\\nThe detected or provided deployment type controls certain behavior like obtaining an Identity \\\nManagement admin token or not and whether to export/import referenced email templates or how \\\nto walk through the tenant admin login flow of Identity Cloud and handle MFA'\n).choices(globalConfig.DEPLOYMENT_TYPES);\n\nconst insecureOption = new Option(\n '-k, --insecure',\n 'Allow insecure connections when using SSL/TLS. Has no effect when using a network proxy for https (HTTPS_PROXY=http://<host>:<port>), in that case the proxy must provide this capability.'\n).default(false, \"Don't allow insecure connections\");\n\nconst verboseOption = new Option(\n '--verbose',\n 'Verbose output during command execution. If specified, may or may not produce additional output.'\n);\n\nconst debugOption = new Option(\n '--debug',\n 'Debug output during command execution. If specified, may or may not produce additional output helpful for troubleshooting.'\n);\n\nconst curlirizeOption = new Option(\n '--curlirize',\n 'Output all network calls in curl format.'\n);\n\nconst defaultArgs = [\n hostArgument,\n realmArgument,\n usernameArgument,\n passwordArgument,\n];\n\nconst defaultOpts = [\n serviceAccountIdOption,\n serviceAccountJwkFileOption,\n deploymentOption,\n insecureOption,\n verboseOption,\n debugOption,\n curlirizeOption,\n];\n\nconst stateMap = {\n [hostArgument.name()]: state.setHost,\n [realmArgument.name()]: state.setRealm,\n [usernameArgument.name()]: state.setUsername,\n [passwordArgument.name()]: state.setPassword,\n [serviceAccountIdOption.attributeName()]: state.setServiceAccountId,\n [serviceAccountJwkFileOption.attributeName()]: (file) => {\n try {\n const data = fs.readFileSync(file);\n const jwk = JSON.parse(data.toString());\n state.setServiceAccountJwk(jwk);\n } catch (error) {\n printMessage(\n `Error parsing JWK from file ${file}: ${error.message}`,\n 'error'\n );\n }\n },\n [deploymentOption.attributeName()]: state.setDeploymentType,\n [insecureOption.attributeName()]: state.setAllowInsecureConnection,\n [verboseOption.attributeName()]: state.setVerbose,\n [debugOption.attributeName()]: state.setDebug,\n [curlirizeOption.attributeName()]: state.setCurlirize,\n};\n\n/**\n * Command with default options\n */\nexport class FrodoStubCommand extends Command {\n /**\n * Creates a new FrodoCommand instance\n * @param name Name of the command\n * @param omits Array of default argument names and default option names that should not be added to this command\n */\n constructor(name: string) {\n super(name);\n\n // other default settings\n this.helpOption('-h, --help', 'Help');\n this.showHelpAfterError();\n this.configureHelp({\n sortSubcommands: true,\n sortOptions: true,\n });\n\n // register default handlers\n state.setPrintHandler(printMessage);\n state.setVerboseHandler(verboseMessage);\n state.setDebugHandler(debugMessage);\n state.setCurlirizeHandler(curlirizeMessage);\n state.setCreateProgressHandler(createProgressIndicator);\n state.setUpdateProgressHandler(updateProgressIndicator);\n state.setStopProgressHandler(stopProgressIndicator);\n }\n}\n\n/**\n * Command with default options\n */\nexport class FrodoCommand extends FrodoStubCommand {\n /**\n * Creates a new FrodoCommand instance\n * @param name Name of the command\n * @param omits Array of default argument names and default option names that should not be added to this command\n */\n constructor(name: string, omits: string[] = []) {\n super(name);\n\n // register default arguments\n for (const arg of defaultArgs) {\n if (!omits.includes(arg.name())) this.addArgument(arg);\n }\n\n // register default options\n for (const opt of defaultOpts) {\n if (!omits.includes(opt.name())) this.addOption(opt);\n }\n }\n\n /**\n *\n * @param args\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n handleDefaultArgsAndOpts(...args: any) {\n const command = args.pop();\n const options = args.pop();\n\n // handle arguments first\n for (const [i, v] of command.args.entries()) {\n const arg = command._args[i].name();\n // handle only default arguments\n if (Object.keys(stateMap).includes(arg)) {\n debugMessage(\n `FrodoCommand.handleDefaultArgsAndOpts: Handling default argument '${arg}'.`\n );\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const handler: any = stateMap[arg];\n handler(v);\n } else {\n debugMessage(\n `FrodoCommand.handleDefaultArgsAndOpts: Ignoring non-default argument '${arg}'.`\n );\n }\n }\n\n // handle options\n for (const [k, v] of Object.entries(options)) {\n // handle only default options\n if (Object.keys(stateMap).includes(k)) {\n debugMessage(\n `FrodoCommand.handleDefaultArgsAndOpts: Handling default option '${k}'.`\n );\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const handler: any = stateMap[k];\n handler(v);\n } else {\n debugMessage(\n `FrodoCommand.handleDefaultArgsAndOpts: Ignoring non-default option '${k}'.`\n );\n }\n }\n }\n}\n"],"mappings":"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"}
@@ -1,24 +1,18 @@
1
- import { Command, Option } from 'commander';
2
- import { Authenticate, state } from '@rockcarver/frodo-lib';
3
- import * as common from '../cmd_common.js';
1
+ import { FrodoCommand } from '../FrodoCommand';
2
+ import { Option } from 'commander';
3
+ import { Authenticate } from '@rockcarver/frodo-lib';
4
4
  const {
5
5
  getTokens
6
6
  } = Authenticate;
7
- const program = new Command('frodo something delete');
8
- program.description('Delete something.').helpOption('-h, --help', 'Help').showHelpAfterError().addArgument(common.hostArgumentM).addArgument(common.realmArgument).addArgument(common.userArgument).addArgument(common.passwordArgument).addOption(common.deploymentOption).addOption(common.insecureOption).addOption(common.verboseOption).addOption(common.debugOption).addOption(common.curlirizeOption).addOption(new Option('-i, --something-id <something-id>', '[Something] id. If specified, -a and -A are ignored.')).addOption(new Option('-a, --all', 'Delete all [somethings]. Ignored with -i.')).addOption(new Option('--no-deep', 'No deep delete. This leaves orphaned configuration artifacts behind.')).action(
7
+ const program = new FrodoCommand('frodo something delete');
8
+ program.description('Delete something.').addOption(new Option('-i, --something-id <something-id>', '[Something] id. If specified, -a and -A are ignored.')).addOption(new Option('-a, --all', 'Delete all [somethings]. Ignored with -i.')).addOption(new Option('--no-deep', 'No deep delete. This leaves orphaned configuration artifacts behind.')).action(
9
9
  // implement command logic inside action handler
10
- async (host, realm, user, password, options) => {
11
- state.default.session.setTenant(host);
12
- state.default.session.setRealm(realm);
13
- state.default.session.setUsername(user);
14
- state.default.session.setPassword(password);
15
- state.default.session.setDeploymentType(options.type);
16
- state.default.session.setAllowInsecureConnection(options.insecure);
17
- state.default.session.setVerbose(options.verbose);
18
- state.default.session.setDebug(options.debug);
19
- state.default.session.setCurlirize(options.curlirize);
10
+ async (host, realm, user, password, options, command) => {
11
+ command.handleDefaultArgsAndOpts(host, realm, user, password, options, command);
20
12
  if (await getTokens()) {
21
13
  // code goes here
14
+ } else {
15
+ process.exitCode = 1;
22
16
  }
23
17
  }
24
18
  // end command logic inside action handler
@@ -1 +1 @@
1
- {"version":3,"file":"something-delete.js","names":["Command","Option","Authenticate","state","common","getTokens","program","description","helpOption","showHelpAfterError","addArgument","hostArgumentM","realmArgument","userArgument","passwordArgument","addOption","deploymentOption","insecureOption","verboseOption","debugOption","curlirizeOption","action","host","realm","user","password","options","default","session","setTenant","setRealm","setUsername","setPassword","setDeploymentType","type","setAllowInsecureConnection","insecure","setVerbose","verbose","setDebug","debug","setCurlirize","curlirize","parse"],"sources":["cli/_template/something-delete.ts"],"sourcesContent":["import { Command, Option } from 'commander';\nimport { Authenticate, state } from '@rockcarver/frodo-lib';\nimport * as common from '../cmd_common.js';\n\nconst { getTokens } = Authenticate;\n\nconst program = new Command('frodo something delete');\n\nprogram\n .description('Delete something.')\n .helpOption('-h, --help', 'Help')\n .showHelpAfterError()\n .addArgument(common.hostArgumentM)\n .addArgument(common.realmArgument)\n .addArgument(common.userArgument)\n .addArgument(common.passwordArgument)\n .addOption(common.deploymentOption)\n .addOption(common.insecureOption)\n .addOption(common.verboseOption)\n .addOption(common.debugOption)\n .addOption(common.curlirizeOption)\n .addOption(\n new Option(\n '-i, --something-id <something-id>',\n '[Something] id. If specified, -a and -A are ignored.'\n )\n )\n .addOption(\n new Option('-a, --all', 'Delete all [somethings]. Ignored with -i.')\n )\n .addOption(\n new Option(\n '--no-deep',\n 'No deep delete. This leaves orphaned configuration artifacts behind.'\n )\n )\n .action(\n // implement command logic inside action handler\n async (host, realm, user, password, options) => {\n state.default.session.setTenant(host);\n state.default.session.setRealm(realm);\n state.default.session.setUsername(user);\n state.default.session.setPassword(password);\n state.default.session.setDeploymentType(options.type);\n state.default.session.setAllowInsecureConnection(options.insecure);\n state.default.session.setVerbose(options.verbose);\n state.default.session.setDebug(options.debug);\n state.default.session.setCurlirize(options.curlirize);\n if (await getTokens()) {\n // code goes here\n }\n }\n // end command logic inside action handler\n );\n\nprogram.parse();\n"],"mappings":"AAAA,SAASA,OAAO,EAAEC,MAAM,QAAQ,WAAW;AAC3C,SAASC,YAAY,EAAEC,KAAK,QAAQ,uBAAuB;AAC3D,OAAO,KAAKC,MAAM,MAAM,kBAAkB;AAE1C,MAAM;EAAEC;AAAU,CAAC,GAAGH,YAAY;AAElC,MAAMI,OAAO,GAAG,IAAIN,OAAO,CAAC,wBAAwB,CAAC;AAErDM,OAAO,CACJC,WAAW,CAAC,mBAAmB,CAAC,CAChCC,UAAU,CAAC,YAAY,EAAE,MAAM,CAAC,CAChCC,kBAAkB,EAAE,CACpBC,WAAW,CAACN,MAAM,CAACO,aAAa,CAAC,CACjCD,WAAW,CAACN,MAAM,CAACQ,aAAa,CAAC,CACjCF,WAAW,CAACN,MAAM,CAACS,YAAY,CAAC,CAChCH,WAAW,CAACN,MAAM,CAACU,gBAAgB,CAAC,CACpCC,SAAS,CAACX,MAAM,CAACY,gBAAgB,CAAC,CAClCD,SAAS,CAACX,MAAM,CAACa,cAAc,CAAC,CAChCF,SAAS,CAACX,MAAM,CAACc,aAAa,CAAC,CAC/BH,SAAS,CAACX,MAAM,CAACe,WAAW,CAAC,CAC7BJ,SAAS,CAACX,MAAM,CAACgB,eAAe,CAAC,CACjCL,SAAS,CACR,IAAId,MAAM,CACR,mCAAmC,EACnC,sDAAsD,CACvD,CACF,CACAc,SAAS,CACR,IAAId,MAAM,CAAC,WAAW,EAAE,2CAA2C,CAAC,CACrE,CACAc,SAAS,CACR,IAAId,MAAM,CACR,WAAW,EACX,sEAAsE,CACvE,CACF,CACAoB,MAAM;AACL;AACA,OAAOC,IAAI,EAAEC,KAAK,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,OAAO,KAAK;EAC9CvB,KAAK,CAACwB,OAAO,CAACC,OAAO,CAACC,SAAS,CAACP,IAAI,CAAC;EACrCnB,KAAK,CAACwB,OAAO,CAACC,OAAO,CAACE,QAAQ,CAACP,KAAK,CAAC;EACrCpB,KAAK,CAACwB,OAAO,CAACC,OAAO,CAACG,WAAW,CAACP,IAAI,CAAC;EACvCrB,KAAK,CAACwB,OAAO,CAACC,OAAO,CAACI,WAAW,CAACP,QAAQ,CAAC;EAC3CtB,KAAK,CAACwB,OAAO,CAACC,OAAO,CAACK,iBAAiB,CAACP,OAAO,CAACQ,IAAI,CAAC;EACrD/B,KAAK,CAACwB,OAAO,CAACC,OAAO,CAACO,0BAA0B,CAACT,OAAO,CAACU,QAAQ,CAAC;EAClEjC,KAAK,CAACwB,OAAO,CAACC,OAAO,CAACS,UAAU,CAACX,OAAO,CAACY,OAAO,CAAC;EACjDnC,KAAK,CAACwB,OAAO,CAACC,OAAO,CAACW,QAAQ,CAACb,OAAO,CAACc,KAAK,CAAC;EAC7CrC,KAAK,CAACwB,OAAO,CAACC,OAAO,CAACa,YAAY,CAACf,OAAO,CAACgB,SAAS,CAAC;EACrD,IAAI,MAAMrC,SAAS,EAAE,EAAE;IACrB;EAAA;AAEJ;AACA;AAAA,CACD;;AAEHC,OAAO,CAACqC,KAAK,EAAE"}
1
+ {"version":3,"file":"something-delete.js","names":["FrodoCommand","Option","Authenticate","getTokens","program","description","addOption","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","process","exitCode","parse"],"sources":["cli/_template/something-delete.ts"],"sourcesContent":["import { FrodoCommand } from '../FrodoCommand';\nimport { Option } from 'commander';\nimport { Authenticate } from '@rockcarver/frodo-lib';\n\nconst { getTokens } = Authenticate;\n\nconst program = new FrodoCommand('frodo something delete');\n\nprogram\n .description('Delete something.')\n .addOption(\n new Option(\n '-i, --something-id <something-id>',\n '[Something] id. If specified, -a and -A are ignored.'\n )\n )\n .addOption(\n new Option('-a, --all', 'Delete all [somethings]. Ignored with -i.')\n )\n .addOption(\n new Option(\n '--no-deep',\n 'No deep delete. This leaves orphaned configuration artifacts behind.'\n )\n )\n .action(\n // implement command logic inside action handler\n async (host, realm, user, password, options, command) => {\n command.handleDefaultArgsAndOpts(\n host,\n realm,\n user,\n password,\n options,\n command\n );\n if (await getTokens()) {\n // code goes here\n } else {\n process.exitCode = 1;\n }\n }\n // end command logic inside action handler\n );\n\nprogram.parse();\n"],"mappings":"AAAA,SAASA,YAAY,QAAQ,iBAAiB;AAC9C,SAASC,MAAM,QAAQ,WAAW;AAClC,SAASC,YAAY,QAAQ,uBAAuB;AAEpD,MAAM;EAAEC;AAAU,CAAC,GAAGD,YAAY;AAElC,MAAME,OAAO,GAAG,IAAIJ,YAAY,CAAC,wBAAwB,CAAC;AAE1DI,OAAO,CACJC,WAAW,CAAC,mBAAmB,CAAC,CAChCC,SAAS,CACR,IAAIL,MAAM,CACR,mCAAmC,EACnC,sDAAsD,CACvD,CACF,CACAK,SAAS,CACR,IAAIL,MAAM,CAAC,WAAW,EAAE,2CAA2C,CAAC,CACrE,CACAK,SAAS,CACR,IAAIL,MAAM,CACR,WAAW,EACX,sEAAsE,CACvE,CACF,CACAM,MAAM;AACL;AACA,OAAOC,IAAI,EAAEC,KAAK,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,OAAO,EAAEC,OAAO,KAAK;EACvDA,OAAO,CAACC,wBAAwB,CAC9BN,IAAI,EACJC,KAAK,EACLC,IAAI,EACJC,QAAQ,EACRC,OAAO,EACPC,OAAO,CACR;EACD,IAAI,MAAMV,SAAS,EAAE,EAAE;IACrB;EAAA,CACD,MAAM;IACLY,OAAO,CAACC,QAAQ,GAAG,CAAC;EACtB;AACF;AACA;AAAA,CACD;;AAEHZ,OAAO,CAACa,KAAK,EAAE"}
@@ -1,24 +1,18 @@
1
- import { Command, Option } from 'commander';
2
- import { Authenticate, state } from '@rockcarver/frodo-lib';
3
- import * as common from '../cmd_common.js';
1
+ import { FrodoCommand } from '../FrodoCommand';
2
+ import { Option } from 'commander';
3
+ import { Authenticate } from '@rockcarver/frodo-lib';
4
4
  const {
5
5
  getTokens
6
6
  } = Authenticate;
7
- const program = new Command('frodo something describe');
8
- program.description('Describe something.').helpOption('-h, --help', 'Help').showHelpAfterError().addArgument(common.hostArgumentM).addArgument(common.realmArgument).addArgument(common.userArgument).addArgument(common.passwordArgument).addOption(common.deploymentOption).addOption(common.insecureOption).addOption(common.verboseOption).addOption(common.debugOption).addOption(common.curlirizeOption).addOption(new Option('-i, --something-id <something-id>', '[Something] id.')).action(
7
+ const program = new FrodoCommand('frodo something describe');
8
+ program.description('Describe something.').addOption(new Option('-i, --something-id <something-id>', '[Something] id.')).action(
9
9
  // implement command logic inside action handler
10
- async (host, realm, user, password, options) => {
11
- state.default.session.setTenant(host);
12
- state.default.session.setRealm(realm);
13
- state.default.session.setUsername(user);
14
- state.default.session.setPassword(password);
15
- state.default.session.setDeploymentType(options.type);
16
- state.default.session.setAllowInsecureConnection(options.insecure);
17
- state.default.session.setVerbose(options.verbose);
18
- state.default.session.setDebug(options.debug);
19
- state.default.session.setCurlirize(options.curlirize);
10
+ async (host, realm, user, password, options, command) => {
11
+ command.handleDefaultArgsAndOpts(host, realm, user, password, options, command);
20
12
  if (await getTokens()) {
21
13
  // code goes here
14
+ } else {
15
+ process.exitCode = 1;
22
16
  }
23
17
  }
24
18
  // end command logic inside action handler
@@ -1 +1 @@
1
- {"version":3,"file":"something-describe.js","names":["Command","Option","Authenticate","state","common","getTokens","program","description","helpOption","showHelpAfterError","addArgument","hostArgumentM","realmArgument","userArgument","passwordArgument","addOption","deploymentOption","insecureOption","verboseOption","debugOption","curlirizeOption","action","host","realm","user","password","options","default","session","setTenant","setRealm","setUsername","setPassword","setDeploymentType","type","setAllowInsecureConnection","insecure","setVerbose","verbose","setDebug","debug","setCurlirize","curlirize","parse"],"sources":["cli/_template/something-describe.ts"],"sourcesContent":["import { Command, Option } from 'commander';\nimport { Authenticate, state } from '@rockcarver/frodo-lib';\nimport * as common from '../cmd_common.js';\n\nconst { getTokens } = Authenticate;\n\nconst program = new Command('frodo something describe');\n\nprogram\n .description('Describe something.')\n .helpOption('-h, --help', 'Help')\n .showHelpAfterError()\n .addArgument(common.hostArgumentM)\n .addArgument(common.realmArgument)\n .addArgument(common.userArgument)\n .addArgument(common.passwordArgument)\n .addOption(common.deploymentOption)\n .addOption(common.insecureOption)\n .addOption(common.verboseOption)\n .addOption(common.debugOption)\n .addOption(common.curlirizeOption)\n .addOption(new Option('-i, --something-id <something-id>', '[Something] id.'))\n .action(\n // implement command logic inside action handler\n async (host, realm, user, password, options) => {\n state.default.session.setTenant(host);\n state.default.session.setRealm(realm);\n state.default.session.setUsername(user);\n state.default.session.setPassword(password);\n state.default.session.setDeploymentType(options.type);\n state.default.session.setAllowInsecureConnection(options.insecure);\n state.default.session.setVerbose(options.verbose);\n state.default.session.setDebug(options.debug);\n state.default.session.setCurlirize(options.curlirize);\n if (await getTokens()) {\n // code goes here\n }\n }\n // end command logic inside action handler\n );\n\nprogram.parse();\n"],"mappings":"AAAA,SAASA,OAAO,EAAEC,MAAM,QAAQ,WAAW;AAC3C,SAASC,YAAY,EAAEC,KAAK,QAAQ,uBAAuB;AAC3D,OAAO,KAAKC,MAAM,MAAM,kBAAkB;AAE1C,MAAM;EAAEC;AAAU,CAAC,GAAGH,YAAY;AAElC,MAAMI,OAAO,GAAG,IAAIN,OAAO,CAAC,0BAA0B,CAAC;AAEvDM,OAAO,CACJC,WAAW,CAAC,qBAAqB,CAAC,CAClCC,UAAU,CAAC,YAAY,EAAE,MAAM,CAAC,CAChCC,kBAAkB,EAAE,CACpBC,WAAW,CAACN,MAAM,CAACO,aAAa,CAAC,CACjCD,WAAW,CAACN,MAAM,CAACQ,aAAa,CAAC,CACjCF,WAAW,CAACN,MAAM,CAACS,YAAY,CAAC,CAChCH,WAAW,CAACN,MAAM,CAACU,gBAAgB,CAAC,CACpCC,SAAS,CAACX,MAAM,CAACY,gBAAgB,CAAC,CAClCD,SAAS,CAACX,MAAM,CAACa,cAAc,CAAC,CAChCF,SAAS,CAACX,MAAM,CAACc,aAAa,CAAC,CAC/BH,SAAS,CAACX,MAAM,CAACe,WAAW,CAAC,CAC7BJ,SAAS,CAACX,MAAM,CAACgB,eAAe,CAAC,CACjCL,SAAS,CAAC,IAAId,MAAM,CAAC,mCAAmC,EAAE,iBAAiB,CAAC,CAAC,CAC7EoB,MAAM;AACL;AACA,OAAOC,IAAI,EAAEC,KAAK,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,OAAO,KAAK;EAC9CvB,KAAK,CAACwB,OAAO,CAACC,OAAO,CAACC,SAAS,CAACP,IAAI,CAAC;EACrCnB,KAAK,CAACwB,OAAO,CAACC,OAAO,CAACE,QAAQ,CAACP,KAAK,CAAC;EACrCpB,KAAK,CAACwB,OAAO,CAACC,OAAO,CAACG,WAAW,CAACP,IAAI,CAAC;EACvCrB,KAAK,CAACwB,OAAO,CAACC,OAAO,CAACI,WAAW,CAACP,QAAQ,CAAC;EAC3CtB,KAAK,CAACwB,OAAO,CAACC,OAAO,CAACK,iBAAiB,CAACP,OAAO,CAACQ,IAAI,CAAC;EACrD/B,KAAK,CAACwB,OAAO,CAACC,OAAO,CAACO,0BAA0B,CAACT,OAAO,CAACU,QAAQ,CAAC;EAClEjC,KAAK,CAACwB,OAAO,CAACC,OAAO,CAACS,UAAU,CAACX,OAAO,CAACY,OAAO,CAAC;EACjDnC,KAAK,CAACwB,OAAO,CAACC,OAAO,CAACW,QAAQ,CAACb,OAAO,CAACc,KAAK,CAAC;EAC7CrC,KAAK,CAACwB,OAAO,CAACC,OAAO,CAACa,YAAY,CAACf,OAAO,CAACgB,SAAS,CAAC;EACrD,IAAI,MAAMrC,SAAS,EAAE,EAAE;IACrB;EAAA;AAEJ;AACA;AAAA,CACD;;AAEHC,OAAO,CAACqC,KAAK,EAAE"}
1
+ {"version":3,"file":"something-describe.js","names":["FrodoCommand","Option","Authenticate","getTokens","program","description","addOption","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","process","exitCode","parse"],"sources":["cli/_template/something-describe.ts"],"sourcesContent":["import { FrodoCommand } from '../FrodoCommand';\nimport { Option } from 'commander';\nimport { Authenticate } from '@rockcarver/frodo-lib';\n\nconst { getTokens } = Authenticate;\n\nconst program = new FrodoCommand('frodo something describe');\n\nprogram\n .description('Describe something.')\n .addOption(new Option('-i, --something-id <something-id>', '[Something] id.'))\n .action(\n // implement command logic inside action handler\n async (host, realm, user, password, options, command) => {\n command.handleDefaultArgsAndOpts(\n host,\n realm,\n user,\n password,\n options,\n command\n );\n if (await getTokens()) {\n // code goes here\n } else {\n process.exitCode = 1;\n }\n }\n // end command logic inside action handler\n );\n\nprogram.parse();\n"],"mappings":"AAAA,SAASA,YAAY,QAAQ,iBAAiB;AAC9C,SAASC,MAAM,QAAQ,WAAW;AAClC,SAASC,YAAY,QAAQ,uBAAuB;AAEpD,MAAM;EAAEC;AAAU,CAAC,GAAGD,YAAY;AAElC,MAAME,OAAO,GAAG,IAAIJ,YAAY,CAAC,0BAA0B,CAAC;AAE5DI,OAAO,CACJC,WAAW,CAAC,qBAAqB,CAAC,CAClCC,SAAS,CAAC,IAAIL,MAAM,CAAC,mCAAmC,EAAE,iBAAiB,CAAC,CAAC,CAC7EM,MAAM;AACL;AACA,OAAOC,IAAI,EAAEC,KAAK,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,OAAO,EAAEC,OAAO,KAAK;EACvDA,OAAO,CAACC,wBAAwB,CAC9BN,IAAI,EACJC,KAAK,EACLC,IAAI,EACJC,QAAQ,EACRC,OAAO,EACPC,OAAO,CACR;EACD,IAAI,MAAMV,SAAS,EAAE,EAAE;IACrB;EAAA,CACD,MAAM;IACLY,OAAO,CAACC,QAAQ,GAAG,CAAC;EACtB;AACF;AACA;AAAA,CACD;;AAEHZ,OAAO,CAACa,KAAK,EAAE"}
@@ -1,24 +1,18 @@
1
- import { Command, Option } from 'commander';
2
- import { Authenticate, state } from '@rockcarver/frodo-lib';
3
- import * as common from '../cmd_common.js';
1
+ import { FrodoCommand } from '../FrodoCommand';
2
+ import { Option } from 'commander';
3
+ import { Authenticate } from '@rockcarver/frodo-lib';
4
4
  const {
5
5
  getTokens
6
6
  } = Authenticate;
7
- const program = new Command('frodo something else delete');
8
- program.description('Delete something else.').helpOption('-h, --help', 'Help').showHelpAfterError().addArgument(common.hostArgumentM).addArgument(common.realmArgument).addArgument(common.userArgument).addArgument(common.passwordArgument).addOption(common.deploymentOption).addOption(common.insecureOption).addOption(common.verboseOption).addOption(common.debugOption).addOption(common.curlirizeOption).addOption(new Option('-i, --else-id <else-id>', '[Else] id. If specified, -a and -A are ignored.')).addOption(new Option('-a, --all', 'Delete all [elses]. Ignored with -i.')).addOption(new Option('--no-deep', 'No deep delete. This leaves orphaned configuration artifacts behind.')).action(
7
+ const program = new FrodoCommand('frodo something else delete');
8
+ program.description('Delete something else.').addOption(new Option('-i, --else-id <else-id>', '[Else] id. If specified, -a and -A are ignored.')).addOption(new Option('-a, --all', 'Delete all [elses]. Ignored with -i.')).addOption(new Option('--no-deep', 'No deep delete. This leaves orphaned configuration artifacts behind.')).action(
9
9
  // implement command logic inside action handler
10
- async (host, realm, user, password, options) => {
11
- state.default.session.setTenant(host);
12
- state.default.session.setRealm(realm);
13
- state.default.session.setUsername(user);
14
- state.default.session.setPassword(password);
15
- state.default.session.setDeploymentType(options.type);
16
- state.default.session.setAllowInsecureConnection(options.insecure);
17
- state.default.session.setVerbose(options.verbose);
18
- state.default.session.setDebug(options.debug);
19
- state.default.session.setCurlirize(options.curlirize);
10
+ async (host, realm, user, password, options, command) => {
11
+ command.handleDefaultArgsAndOpts(host, realm, user, password, options, command);
20
12
  if (await getTokens()) {
21
13
  // code goes here
14
+ } else {
15
+ process.exitCode = 1;
22
16
  }
23
17
  }
24
18
  // end command logic inside action handler
@@ -1 +1 @@
1
- {"version":3,"file":"something-else-delete.js","names":["Command","Option","Authenticate","state","common","getTokens","program","description","helpOption","showHelpAfterError","addArgument","hostArgumentM","realmArgument","userArgument","passwordArgument","addOption","deploymentOption","insecureOption","verboseOption","debugOption","curlirizeOption","action","host","realm","user","password","options","default","session","setTenant","setRealm","setUsername","setPassword","setDeploymentType","type","setAllowInsecureConnection","insecure","setVerbose","verbose","setDebug","debug","setCurlirize","curlirize","parse"],"sources":["cli/_template/something-else-delete.ts"],"sourcesContent":["import { Command, Option } from 'commander';\nimport { Authenticate, state } from '@rockcarver/frodo-lib';\nimport * as common from '../cmd_common.js';\n\nconst { getTokens } = Authenticate;\n\nconst program = new Command('frodo something else delete');\n\nprogram\n .description('Delete something else.')\n .helpOption('-h, --help', 'Help')\n .showHelpAfterError()\n .addArgument(common.hostArgumentM)\n .addArgument(common.realmArgument)\n .addArgument(common.userArgument)\n .addArgument(common.passwordArgument)\n .addOption(common.deploymentOption)\n .addOption(common.insecureOption)\n .addOption(common.verboseOption)\n .addOption(common.debugOption)\n .addOption(common.curlirizeOption)\n .addOption(\n new Option(\n '-i, --else-id <else-id>',\n '[Else] id. If specified, -a and -A are ignored.'\n )\n )\n .addOption(new Option('-a, --all', 'Delete all [elses]. Ignored with -i.'))\n .addOption(\n new Option(\n '--no-deep',\n 'No deep delete. This leaves orphaned configuration artifacts behind.'\n )\n )\n .action(\n // implement command logic inside action handler\n async (host, realm, user, password, options) => {\n state.default.session.setTenant(host);\n state.default.session.setRealm(realm);\n state.default.session.setUsername(user);\n state.default.session.setPassword(password);\n state.default.session.setDeploymentType(options.type);\n state.default.session.setAllowInsecureConnection(options.insecure);\n state.default.session.setVerbose(options.verbose);\n state.default.session.setDebug(options.debug);\n state.default.session.setCurlirize(options.curlirize);\n if (await getTokens()) {\n // code goes here\n }\n }\n // end command logic inside action handler\n );\n\nprogram.parse();\n"],"mappings":"AAAA,SAASA,OAAO,EAAEC,MAAM,QAAQ,WAAW;AAC3C,SAASC,YAAY,EAAEC,KAAK,QAAQ,uBAAuB;AAC3D,OAAO,KAAKC,MAAM,MAAM,kBAAkB;AAE1C,MAAM;EAAEC;AAAU,CAAC,GAAGH,YAAY;AAElC,MAAMI,OAAO,GAAG,IAAIN,OAAO,CAAC,6BAA6B,CAAC;AAE1DM,OAAO,CACJC,WAAW,CAAC,wBAAwB,CAAC,CACrCC,UAAU,CAAC,YAAY,EAAE,MAAM,CAAC,CAChCC,kBAAkB,EAAE,CACpBC,WAAW,CAACN,MAAM,CAACO,aAAa,CAAC,CACjCD,WAAW,CAACN,MAAM,CAACQ,aAAa,CAAC,CACjCF,WAAW,CAACN,MAAM,CAACS,YAAY,CAAC,CAChCH,WAAW,CAACN,MAAM,CAACU,gBAAgB,CAAC,CACpCC,SAAS,CAACX,MAAM,CAACY,gBAAgB,CAAC,CAClCD,SAAS,CAACX,MAAM,CAACa,cAAc,CAAC,CAChCF,SAAS,CAACX,MAAM,CAACc,aAAa,CAAC,CAC/BH,SAAS,CAACX,MAAM,CAACe,WAAW,CAAC,CAC7BJ,SAAS,CAACX,MAAM,CAACgB,eAAe,CAAC,CACjCL,SAAS,CACR,IAAId,MAAM,CACR,yBAAyB,EACzB,iDAAiD,CAClD,CACF,CACAc,SAAS,CAAC,IAAId,MAAM,CAAC,WAAW,EAAE,sCAAsC,CAAC,CAAC,CAC1Ec,SAAS,CACR,IAAId,MAAM,CACR,WAAW,EACX,sEAAsE,CACvE,CACF,CACAoB,MAAM;AACL;AACA,OAAOC,IAAI,EAAEC,KAAK,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,OAAO,KAAK;EAC9CvB,KAAK,CAACwB,OAAO,CAACC,OAAO,CAACC,SAAS,CAACP,IAAI,CAAC;EACrCnB,KAAK,CAACwB,OAAO,CAACC,OAAO,CAACE,QAAQ,CAACP,KAAK,CAAC;EACrCpB,KAAK,CAACwB,OAAO,CAACC,OAAO,CAACG,WAAW,CAACP,IAAI,CAAC;EACvCrB,KAAK,CAACwB,OAAO,CAACC,OAAO,CAACI,WAAW,CAACP,QAAQ,CAAC;EAC3CtB,KAAK,CAACwB,OAAO,CAACC,OAAO,CAACK,iBAAiB,CAACP,OAAO,CAACQ,IAAI,CAAC;EACrD/B,KAAK,CAACwB,OAAO,CAACC,OAAO,CAACO,0BAA0B,CAACT,OAAO,CAACU,QAAQ,CAAC;EAClEjC,KAAK,CAACwB,OAAO,CAACC,OAAO,CAACS,UAAU,CAACX,OAAO,CAACY,OAAO,CAAC;EACjDnC,KAAK,CAACwB,OAAO,CAACC,OAAO,CAACW,QAAQ,CAACb,OAAO,CAACc,KAAK,CAAC;EAC7CrC,KAAK,CAACwB,OAAO,CAACC,OAAO,CAACa,YAAY,CAACf,OAAO,CAACgB,SAAS,CAAC;EACrD,IAAI,MAAMrC,SAAS,EAAE,EAAE;IACrB;EAAA;AAEJ;AACA;AAAA,CACD;;AAEHC,OAAO,CAACqC,KAAK,EAAE"}
1
+ {"version":3,"file":"something-else-delete.js","names":["FrodoCommand","Option","Authenticate","getTokens","program","description","addOption","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","process","exitCode","parse"],"sources":["cli/_template/something-else-delete.ts"],"sourcesContent":["import { FrodoCommand } from '../FrodoCommand';\nimport { Option } from 'commander';\nimport { Authenticate } from '@rockcarver/frodo-lib';\n\nconst { getTokens } = Authenticate;\n\nconst program = new FrodoCommand('frodo something else delete');\n\nprogram\n .description('Delete something else.')\n .addOption(\n new Option(\n '-i, --else-id <else-id>',\n '[Else] id. If specified, -a and -A are ignored.'\n )\n )\n .addOption(new Option('-a, --all', 'Delete all [elses]. Ignored with -i.'))\n .addOption(\n new Option(\n '--no-deep',\n 'No deep delete. This leaves orphaned configuration artifacts behind.'\n )\n )\n .action(\n // implement command logic inside action handler\n async (host, realm, user, password, options, command) => {\n command.handleDefaultArgsAndOpts(\n host,\n realm,\n user,\n password,\n options,\n command\n );\n if (await getTokens()) {\n // code goes here\n } else {\n process.exitCode = 1;\n }\n }\n // end command logic inside action handler\n );\n\nprogram.parse();\n"],"mappings":"AAAA,SAASA,YAAY,QAAQ,iBAAiB;AAC9C,SAASC,MAAM,QAAQ,WAAW;AAClC,SAASC,YAAY,QAAQ,uBAAuB;AAEpD,MAAM;EAAEC;AAAU,CAAC,GAAGD,YAAY;AAElC,MAAME,OAAO,GAAG,IAAIJ,YAAY,CAAC,6BAA6B,CAAC;AAE/DI,OAAO,CACJC,WAAW,CAAC,wBAAwB,CAAC,CACrCC,SAAS,CACR,IAAIL,MAAM,CACR,yBAAyB,EACzB,iDAAiD,CAClD,CACF,CACAK,SAAS,CAAC,IAAIL,MAAM,CAAC,WAAW,EAAE,sCAAsC,CAAC,CAAC,CAC1EK,SAAS,CACR,IAAIL,MAAM,CACR,WAAW,EACX,sEAAsE,CACvE,CACF,CACAM,MAAM;AACL;AACA,OAAOC,IAAI,EAAEC,KAAK,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,OAAO,EAAEC,OAAO,KAAK;EACvDA,OAAO,CAACC,wBAAwB,CAC9BN,IAAI,EACJC,KAAK,EACLC,IAAI,EACJC,QAAQ,EACRC,OAAO,EACPC,OAAO,CACR;EACD,IAAI,MAAMV,SAAS,EAAE,EAAE;IACrB;EAAA,CACD,MAAM;IACLY,OAAO,CAACC,QAAQ,GAAG,CAAC;EACtB;AACF;AACA;AAAA,CACD;;AAEHZ,OAAO,CAACa,KAAK,EAAE"}
@@ -1,24 +1,18 @@
1
- import { Command, Option } from 'commander';
2
- import { Authenticate, state } from '@rockcarver/frodo-lib';
3
- import * as common from '../cmd_common.js';
1
+ import { FrodoCommand } from '../FrodoCommand';
2
+ import { Option } from 'commander';
3
+ import { Authenticate } from '@rockcarver/frodo-lib';
4
4
  const {
5
5
  getTokens
6
6
  } = Authenticate;
7
- const program = new Command('frodo something else describe');
8
- program.description('Describe something else.').helpOption('-h, --help', 'Help').showHelpAfterError().addArgument(common.hostArgumentM).addArgument(common.realmArgument).addArgument(common.userArgument).addArgument(common.passwordArgument).addOption(common.deploymentOption).addOption(common.insecureOption).addOption(common.verboseOption).addOption(common.debugOption).addOption(common.curlirizeOption).addOption(new Option('-i, --else-id <else-id>', '[Else] id.')).action(
7
+ const program = new FrodoCommand('frodo something else describe');
8
+ program.description('Describe something else.').addOption(new Option('-i, --else-id <else-id>', '[Else] id.')).action(
9
9
  // implement command logic inside action handler
10
- async (host, realm, user, password, options) => {
11
- state.default.session.setTenant(host);
12
- state.default.session.setRealm(realm);
13
- state.default.session.setUsername(user);
14
- state.default.session.setPassword(password);
15
- state.default.session.setDeploymentType(options.type);
16
- state.default.session.setAllowInsecureConnection(options.insecure);
17
- state.default.session.setVerbose(options.verbose);
18
- state.default.session.setDebug(options.debug);
19
- state.default.session.setCurlirize(options.curlirize);
10
+ async (host, realm, user, password, options, command) => {
11
+ command.handleDefaultArgsAndOpts(host, realm, user, password, options, command);
20
12
  if (await getTokens()) {
21
13
  // code goes here
14
+ } else {
15
+ process.exitCode = 1;
22
16
  }
23
17
  }
24
18
  // end command logic inside action handler
@@ -1 +1 @@
1
- {"version":3,"file":"something-else-describe.js","names":["Command","Option","Authenticate","state","common","getTokens","program","description","helpOption","showHelpAfterError","addArgument","hostArgumentM","realmArgument","userArgument","passwordArgument","addOption","deploymentOption","insecureOption","verboseOption","debugOption","curlirizeOption","action","host","realm","user","password","options","default","session","setTenant","setRealm","setUsername","setPassword","setDeploymentType","type","setAllowInsecureConnection","insecure","setVerbose","verbose","setDebug","debug","setCurlirize","curlirize","parse"],"sources":["cli/_template/something-else-describe.ts"],"sourcesContent":["import { Command, Option } from 'commander';\nimport { Authenticate, state } from '@rockcarver/frodo-lib';\nimport * as common from '../cmd_common.js';\n\nconst { getTokens } = Authenticate;\n\nconst program = new Command('frodo something else describe');\n\nprogram\n .description('Describe something else.')\n .helpOption('-h, --help', 'Help')\n .showHelpAfterError()\n .addArgument(common.hostArgumentM)\n .addArgument(common.realmArgument)\n .addArgument(common.userArgument)\n .addArgument(common.passwordArgument)\n .addOption(common.deploymentOption)\n .addOption(common.insecureOption)\n .addOption(common.verboseOption)\n .addOption(common.debugOption)\n .addOption(common.curlirizeOption)\n .addOption(new Option('-i, --else-id <else-id>', '[Else] id.'))\n .action(\n // implement command logic inside action handler\n async (host, realm, user, password, options) => {\n state.default.session.setTenant(host);\n state.default.session.setRealm(realm);\n state.default.session.setUsername(user);\n state.default.session.setPassword(password);\n state.default.session.setDeploymentType(options.type);\n state.default.session.setAllowInsecureConnection(options.insecure);\n state.default.session.setVerbose(options.verbose);\n state.default.session.setDebug(options.debug);\n state.default.session.setCurlirize(options.curlirize);\n if (await getTokens()) {\n // code goes here\n }\n }\n // end command logic inside action handler\n );\n\nprogram.parse();\n"],"mappings":"AAAA,SAASA,OAAO,EAAEC,MAAM,QAAQ,WAAW;AAC3C,SAASC,YAAY,EAAEC,KAAK,QAAQ,uBAAuB;AAC3D,OAAO,KAAKC,MAAM,MAAM,kBAAkB;AAE1C,MAAM;EAAEC;AAAU,CAAC,GAAGH,YAAY;AAElC,MAAMI,OAAO,GAAG,IAAIN,OAAO,CAAC,+BAA+B,CAAC;AAE5DM,OAAO,CACJC,WAAW,CAAC,0BAA0B,CAAC,CACvCC,UAAU,CAAC,YAAY,EAAE,MAAM,CAAC,CAChCC,kBAAkB,EAAE,CACpBC,WAAW,CAACN,MAAM,CAACO,aAAa,CAAC,CACjCD,WAAW,CAACN,MAAM,CAACQ,aAAa,CAAC,CACjCF,WAAW,CAACN,MAAM,CAACS,YAAY,CAAC,CAChCH,WAAW,CAACN,MAAM,CAACU,gBAAgB,CAAC,CACpCC,SAAS,CAACX,MAAM,CAACY,gBAAgB,CAAC,CAClCD,SAAS,CAACX,MAAM,CAACa,cAAc,CAAC,CAChCF,SAAS,CAACX,MAAM,CAACc,aAAa,CAAC,CAC/BH,SAAS,CAACX,MAAM,CAACe,WAAW,CAAC,CAC7BJ,SAAS,CAACX,MAAM,CAACgB,eAAe,CAAC,CACjCL,SAAS,CAAC,IAAId,MAAM,CAAC,yBAAyB,EAAE,YAAY,CAAC,CAAC,CAC9DoB,MAAM;AACL;AACA,OAAOC,IAAI,EAAEC,KAAK,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,OAAO,KAAK;EAC9CvB,KAAK,CAACwB,OAAO,CAACC,OAAO,CAACC,SAAS,CAACP,IAAI,CAAC;EACrCnB,KAAK,CAACwB,OAAO,CAACC,OAAO,CAACE,QAAQ,CAACP,KAAK,CAAC;EACrCpB,KAAK,CAACwB,OAAO,CAACC,OAAO,CAACG,WAAW,CAACP,IAAI,CAAC;EACvCrB,KAAK,CAACwB,OAAO,CAACC,OAAO,CAACI,WAAW,CAACP,QAAQ,CAAC;EAC3CtB,KAAK,CAACwB,OAAO,CAACC,OAAO,CAACK,iBAAiB,CAACP,OAAO,CAACQ,IAAI,CAAC;EACrD/B,KAAK,CAACwB,OAAO,CAACC,OAAO,CAACO,0BAA0B,CAACT,OAAO,CAACU,QAAQ,CAAC;EAClEjC,KAAK,CAACwB,OAAO,CAACC,OAAO,CAACS,UAAU,CAACX,OAAO,CAACY,OAAO,CAAC;EACjDnC,KAAK,CAACwB,OAAO,CAACC,OAAO,CAACW,QAAQ,CAACb,OAAO,CAACc,KAAK,CAAC;EAC7CrC,KAAK,CAACwB,OAAO,CAACC,OAAO,CAACa,YAAY,CAACf,OAAO,CAACgB,SAAS,CAAC;EACrD,IAAI,MAAMrC,SAAS,EAAE,EAAE;IACrB;EAAA;AAEJ;AACA;AAAA,CACD;;AAEHC,OAAO,CAACqC,KAAK,EAAE"}
1
+ {"version":3,"file":"something-else-describe.js","names":["FrodoCommand","Option","Authenticate","getTokens","program","description","addOption","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","process","exitCode","parse"],"sources":["cli/_template/something-else-describe.ts"],"sourcesContent":["import { FrodoCommand } from '../FrodoCommand';\nimport { Option } from 'commander';\nimport { Authenticate } from '@rockcarver/frodo-lib';\n\nconst { getTokens } = Authenticate;\n\nconst program = new FrodoCommand('frodo something else describe');\n\nprogram\n .description('Describe something else.')\n .addOption(new Option('-i, --else-id <else-id>', '[Else] id.'))\n .action(\n // implement command logic inside action handler\n async (host, realm, user, password, options, command) => {\n command.handleDefaultArgsAndOpts(\n host,\n realm,\n user,\n password,\n options,\n command\n );\n if (await getTokens()) {\n // code goes here\n } else {\n process.exitCode = 1;\n }\n }\n // end command logic inside action handler\n );\n\nprogram.parse();\n"],"mappings":"AAAA,SAASA,YAAY,QAAQ,iBAAiB;AAC9C,SAASC,MAAM,QAAQ,WAAW;AAClC,SAASC,YAAY,QAAQ,uBAAuB;AAEpD,MAAM;EAAEC;AAAU,CAAC,GAAGD,YAAY;AAElC,MAAME,OAAO,GAAG,IAAIJ,YAAY,CAAC,+BAA+B,CAAC;AAEjEI,OAAO,CACJC,WAAW,CAAC,0BAA0B,CAAC,CACvCC,SAAS,CAAC,IAAIL,MAAM,CAAC,yBAAyB,EAAE,YAAY,CAAC,CAAC,CAC9DM,MAAM;AACL;AACA,OAAOC,IAAI,EAAEC,KAAK,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,OAAO,EAAEC,OAAO,KAAK;EACvDA,OAAO,CAACC,wBAAwB,CAC9BN,IAAI,EACJC,KAAK,EACLC,IAAI,EACJC,QAAQ,EACRC,OAAO,EACPC,OAAO,CACR;EACD,IAAI,MAAMV,SAAS,EAAE,EAAE;IACrB;EAAA,CACD,MAAM;IACLY,OAAO,CAACC,QAAQ,GAAG,CAAC;EACtB;AACF;AACA;AAAA,CACD;;AAEHZ,OAAO,CAACa,KAAK,EAAE"}
@@ -1,24 +1,18 @@
1
- import { Command, Option } from 'commander';
2
- import { Authenticate, state } from '@rockcarver/frodo-lib';
3
- import * as common from '../cmd_common.js';
1
+ import { FrodoCommand } from '../FrodoCommand';
2
+ import { Option } from 'commander';
3
+ import { Authenticate } from '@rockcarver/frodo-lib';
4
4
  const {
5
5
  getTokens
6
6
  } = Authenticate;
7
- const program = new Command('frodo something else export');
8
- program.description('Export something else.').helpOption('-h, --help', 'Help').showHelpAfterError().addArgument(common.hostArgumentM).addArgument(common.realmArgument).addArgument(common.userArgument).addArgument(common.passwordArgument).addOption(common.deploymentOption).addOption(common.insecureOption).addOption(common.verboseOption).addOption(common.debugOption).addOption(common.curlirizeOption).addOption(new Option('-i, --else-id <else-id>', '[Else] id. If specified, -a and -A are ignored.')).addOption(new Option('-f, --file <file>', 'Name of the export file.')).addOption(new Option('-a, --all', 'Export all [else] to a single file. Ignored with -i.')).addOption(new Option('-A, --all-separate', 'Export all [else] to separate files (*.[else].json) in the current directory. Ignored with -i or -a.')).action(
7
+ const program = new FrodoCommand('frodo something else export');
8
+ program.description('Export something else.').addOption(new Option('-i, --else-id <else-id>', '[Else] id. If specified, -a and -A are ignored.')).addOption(new Option('-f, --file <file>', 'Name of the export file.')).addOption(new Option('-a, --all', 'Export all [else] to a single file. Ignored with -i.')).addOption(new Option('-A, --all-separate', 'Export all [else] to separate files (*.[else].json) in the current directory. Ignored with -i or -a.')).action(
9
9
  // implement command logic inside action handler
10
- async (host, realm, user, password, options) => {
11
- state.default.session.setTenant(host);
12
- state.default.session.setRealm(realm);
13
- state.default.session.setUsername(user);
14
- state.default.session.setPassword(password);
15
- state.default.session.setDeploymentType(options.type);
16
- state.default.session.setAllowInsecureConnection(options.insecure);
17
- state.default.session.setVerbose(options.verbose);
18
- state.default.session.setDebug(options.debug);
19
- state.default.session.setCurlirize(options.curlirize);
10
+ async (host, realm, user, password, options, command) => {
11
+ command.handleDefaultArgsAndOpts(host, realm, user, password, options, command);
20
12
  if (await getTokens()) {
21
13
  // code goes here
14
+ } else {
15
+ process.exitCode = 1;
22
16
  }
23
17
  }
24
18
  // end command logic inside action handler