@sonisoft/now-sdk-ext-cli 1.1.0-alpha.3 → 2.0.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 (355) hide show
  1. package/README.md +4587 -197
  2. package/dist/commands/aggregate/count.d.ts +16 -0
  3. package/dist/commands/aggregate/count.d.ts.map +1 -0
  4. package/dist/commands/aggregate/count.js +67 -0
  5. package/dist/commands/aggregate/count.js.map +1 -0
  6. package/dist/commands/aggregate/group.d.ts +24 -0
  7. package/dist/commands/aggregate/group.d.ts.map +1 -0
  8. package/dist/commands/aggregate/group.js +120 -0
  9. package/dist/commands/aggregate/group.js.map +1 -0
  10. package/dist/commands/aggregate/query.d.ts +21 -0
  11. package/dist/commands/aggregate/query.d.ts.map +1 -0
  12. package/dist/commands/aggregate/query.js +100 -0
  13. package/dist/commands/aggregate/query.js.map +1 -0
  14. package/dist/commands/app/index.d.ts +4 -2
  15. package/dist/commands/app/index.d.ts.map +1 -1
  16. package/dist/commands/app/index.js +27 -6
  17. package/dist/commands/app/index.js.map +1 -1
  18. package/dist/commands/app/install.d.ts +4 -2
  19. package/dist/commands/app/install.d.ts.map +1 -1
  20. package/dist/commands/app/install.js +41 -8
  21. package/dist/commands/app/install.js.map +1 -1
  22. package/dist/commands/app/repo-install.d.ts +18 -0
  23. package/dist/commands/app/repo-install.d.ts.map +1 -0
  24. package/dist/commands/app/repo-install.js +171 -0
  25. package/dist/commands/app/repo-install.js.map +1 -0
  26. package/dist/commands/app/repo-list.d.ts +16 -0
  27. package/dist/commands/app/repo-list.d.ts.map +1 -0
  28. package/dist/commands/app/repo-list.js +150 -0
  29. package/dist/commands/app/repo-list.js.map +1 -0
  30. package/dist/commands/app/uninstall.d.ts +15 -0
  31. package/dist/commands/app/uninstall.d.ts.map +1 -0
  32. package/dist/commands/app/uninstall.js +69 -0
  33. package/dist/commands/app/uninstall.js.map +1 -0
  34. package/dist/commands/atf/index.d.ts +25 -0
  35. package/dist/commands/atf/index.d.ts.map +1 -0
  36. package/dist/commands/atf/index.js +183 -0
  37. package/dist/commands/atf/index.js.map +1 -0
  38. package/dist/commands/attachment/get.d.ts +14 -0
  39. package/dist/commands/attachment/get.d.ts.map +1 -0
  40. package/dist/commands/attachment/get.js +44 -0
  41. package/dist/commands/attachment/get.js.map +1 -0
  42. package/dist/commands/attachment/list.d.ts +16 -0
  43. package/dist/commands/attachment/list.d.ts.map +1 -0
  44. package/dist/commands/attachment/list.js +60 -0
  45. package/dist/commands/attachment/list.js.map +1 -0
  46. package/dist/commands/attachment/upload.d.ts +17 -0
  47. package/dist/commands/attachment/upload.d.ts.map +1 -0
  48. package/dist/commands/attachment/upload.js +71 -0
  49. package/dist/commands/attachment/upload.js.map +1 -0
  50. package/dist/commands/batch/create.d.ts +15 -0
  51. package/dist/commands/batch/create.d.ts.map +1 -0
  52. package/dist/commands/batch/create.js +56 -0
  53. package/dist/commands/batch/create.js.map +1 -0
  54. package/dist/commands/batch/update.d.ts +15 -0
  55. package/dist/commands/batch/update.d.ts.map +1 -0
  56. package/dist/commands/batch/update.js +56 -0
  57. package/dist/commands/batch/update.js.map +1 -0
  58. package/dist/commands/bulk/delete.d.ts +18 -0
  59. package/dist/commands/bulk/delete.d.ts.map +1 -0
  60. package/dist/commands/bulk/delete.js +95 -0
  61. package/dist/commands/bulk/delete.js.map +1 -0
  62. package/dist/commands/bulk/update.d.ts +19 -0
  63. package/dist/commands/bulk/update.d.ts.map +1 -0
  64. package/dist/commands/bulk/update.js +110 -0
  65. package/dist/commands/bulk/update.js.map +1 -0
  66. package/dist/commands/exec/index.d.ts +17 -4
  67. package/dist/commands/exec/index.d.ts.map +1 -1
  68. package/dist/commands/exec/index.js +278 -28
  69. package/dist/commands/exec/index.js.map +1 -1
  70. package/dist/commands/flow/action.d.ts +19 -0
  71. package/dist/commands/flow/action.d.ts.map +1 -0
  72. package/dist/commands/flow/action.js +88 -0
  73. package/dist/commands/flow/action.js.map +1 -0
  74. package/dist/commands/flow/cancel.d.ts +17 -0
  75. package/dist/commands/flow/cancel.d.ts.map +1 -0
  76. package/dist/commands/flow/cancel.js +60 -0
  77. package/dist/commands/flow/cancel.js.map +1 -0
  78. package/dist/commands/flow/error.d.ts +16 -0
  79. package/dist/commands/flow/error.d.ts.map +1 -0
  80. package/dist/commands/flow/error.js +51 -0
  81. package/dist/commands/flow/error.js.map +1 -0
  82. package/dist/commands/flow/message.d.ts +18 -0
  83. package/dist/commands/flow/message.d.ts.map +1 -0
  84. package/dist/commands/flow/message.js +66 -0
  85. package/dist/commands/flow/message.js.map +1 -0
  86. package/dist/commands/flow/outputs.d.ts +16 -0
  87. package/dist/commands/flow/outputs.d.ts.map +1 -0
  88. package/dist/commands/flow/outputs.js +55 -0
  89. package/dist/commands/flow/outputs.js.map +1 -0
  90. package/dist/commands/flow/run.d.ts +19 -0
  91. package/dist/commands/flow/run.d.ts.map +1 -0
  92. package/dist/commands/flow/run.js +98 -0
  93. package/dist/commands/flow/run.js.map +1 -0
  94. package/dist/commands/flow/status.d.ts +16 -0
  95. package/dist/commands/flow/status.d.ts.map +1 -0
  96. package/dist/commands/flow/status.js +52 -0
  97. package/dist/commands/flow/status.js.map +1 -0
  98. package/dist/commands/flow/subflow.d.ts +19 -0
  99. package/dist/commands/flow/subflow.d.ts.map +1 -0
  100. package/dist/commands/flow/subflow.js +92 -0
  101. package/dist/commands/flow/subflow.js.map +1 -0
  102. package/dist/commands/health/check.d.ts +20 -0
  103. package/dist/commands/health/check.d.ts.map +1 -0
  104. package/dist/commands/health/check.js +105 -0
  105. package/dist/commands/health/check.js.map +1 -0
  106. package/dist/commands/log/index.d.ts +22 -0
  107. package/dist/commands/log/index.d.ts.map +1 -0
  108. package/dist/commands/log/index.js +190 -0
  109. package/dist/commands/log/index.js.map +1 -0
  110. package/dist/commands/query/app.d.ts +17 -0
  111. package/dist/commands/query/app.d.ts.map +1 -0
  112. package/dist/commands/query/app.js +81 -0
  113. package/dist/commands/query/app.js.map +1 -0
  114. package/dist/commands/query/columns.d.ts +16 -0
  115. package/dist/commands/query/columns.d.ts.map +1 -0
  116. package/dist/commands/query/columns.js +76 -0
  117. package/dist/commands/query/columns.js.map +1 -0
  118. package/dist/commands/query/index.d.ts +19 -0
  119. package/dist/commands/query/index.d.ts.map +1 -0
  120. package/dist/commands/query/index.js +94 -0
  121. package/dist/commands/query/index.js.map +1 -0
  122. package/dist/commands/query/syslog.d.ts +16 -0
  123. package/dist/commands/query/syslog.d.ts.map +1 -0
  124. package/dist/commands/query/syslog.js +67 -0
  125. package/dist/commands/query/syslog.js.map +1 -0
  126. package/dist/commands/schema/field.d.ts +16 -0
  127. package/dist/commands/schema/field.d.ts.map +1 -0
  128. package/dist/commands/schema/field.js +62 -0
  129. package/dist/commands/schema/field.js.map +1 -0
  130. package/dist/commands/schema/index.d.ts +19 -0
  131. package/dist/commands/schema/index.d.ts.map +1 -0
  132. package/dist/commands/schema/index.js +90 -0
  133. package/dist/commands/schema/index.js.map +1 -0
  134. package/dist/commands/schema/validate-catalog.d.ts +15 -0
  135. package/dist/commands/schema/validate-catalog.d.ts.map +1 -0
  136. package/dist/commands/schema/validate-catalog.js +58 -0
  137. package/dist/commands/schema/validate-catalog.js.map +1 -0
  138. package/dist/commands/scope/index.d.ts +14 -0
  139. package/dist/commands/scope/index.d.ts.map +1 -0
  140. package/dist/commands/scope/index.js +58 -0
  141. package/dist/commands/scope/index.js.map +1 -0
  142. package/dist/commands/scope/set.d.ts +14 -0
  143. package/dist/commands/scope/set.d.ts.map +1 -0
  144. package/dist/commands/scope/set.js +44 -0
  145. package/dist/commands/scope/set.js.map +1 -0
  146. package/dist/commands/script-sync/pull.d.ts +16 -0
  147. package/dist/commands/script-sync/pull.d.ts.map +1 -0
  148. package/dist/commands/script-sync/pull.js +74 -0
  149. package/dist/commands/script-sync/pull.js.map +1 -0
  150. package/dist/commands/script-sync/push.d.ts +16 -0
  151. package/dist/commands/script-sync/push.d.ts.map +1 -0
  152. package/dist/commands/script-sync/push.js +73 -0
  153. package/dist/commands/script-sync/push.js.map +1 -0
  154. package/dist/commands/script-sync/sync.d.ts +15 -0
  155. package/dist/commands/script-sync/sync.d.ts.map +1 -0
  156. package/dist/commands/script-sync/sync.js +71 -0
  157. package/dist/commands/script-sync/sync.js.map +1 -0
  158. package/dist/commands/search/add-table.d.ts +16 -0
  159. package/dist/commands/search/add-table.d.ts.map +1 -0
  160. package/dist/commands/search/add-table.js +68 -0
  161. package/dist/commands/search/add-table.js.map +1 -0
  162. package/dist/commands/search/groups.d.ts +12 -0
  163. package/dist/commands/search/groups.d.ts.map +1 -0
  164. package/dist/commands/search/groups.js +42 -0
  165. package/dist/commands/search/groups.js.map +1 -0
  166. package/dist/commands/search/index.d.ts +18 -0
  167. package/dist/commands/search/index.d.ts.map +1 -0
  168. package/dist/commands/search/index.js +103 -0
  169. package/dist/commands/search/index.js.map +1 -0
  170. package/dist/commands/search/tables.d.ts +14 -0
  171. package/dist/commands/search/tables.d.ts.map +1 -0
  172. package/dist/commands/search/tables.js +50 -0
  173. package/dist/commands/search/tables.js.map +1 -0
  174. package/dist/commands/store/install.d.ts +19 -0
  175. package/dist/commands/store/install.d.ts.map +1 -0
  176. package/dist/commands/store/install.js +90 -0
  177. package/dist/commands/store/install.js.map +1 -0
  178. package/dist/commands/store/search.d.ts +16 -0
  179. package/dist/commands/store/search.d.ts.map +1 -0
  180. package/dist/commands/store/search.js +67 -0
  181. package/dist/commands/store/search.js.map +1 -0
  182. package/dist/commands/store/update.d.ts +18 -0
  183. package/dist/commands/store/update.d.ts.map +1 -0
  184. package/dist/commands/store/update.js +83 -0
  185. package/dist/commands/store/update.js.map +1 -0
  186. package/dist/commands/store/validate.d.ts +14 -0
  187. package/dist/commands/store/validate.d.ts.map +1 -0
  188. package/dist/commands/store/validate.js +43 -0
  189. package/dist/commands/store/validate.js.map +1 -0
  190. package/dist/commands/task/approve.d.ts +15 -0
  191. package/dist/commands/task/approve.d.ts.map +1 -0
  192. package/dist/commands/task/approve.js +66 -0
  193. package/dist/commands/task/approve.js.map +1 -0
  194. package/dist/commands/task/assign.d.ts +17 -0
  195. package/dist/commands/task/assign.d.ts.map +1 -0
  196. package/dist/commands/task/assign.js +86 -0
  197. package/dist/commands/task/assign.js.map +1 -0
  198. package/dist/commands/task/close.d.ts +16 -0
  199. package/dist/commands/task/close.d.ts.map +1 -0
  200. package/dist/commands/task/close.js +71 -0
  201. package/dist/commands/task/close.js.map +1 -0
  202. package/dist/commands/task/comment.d.ts +17 -0
  203. package/dist/commands/task/comment.d.ts.map +1 -0
  204. package/dist/commands/task/comment.js +86 -0
  205. package/dist/commands/task/comment.js.map +1 -0
  206. package/dist/commands/task/find.d.ts +15 -0
  207. package/dist/commands/task/find.d.ts.map +1 -0
  208. package/dist/commands/task/find.js +65 -0
  209. package/dist/commands/task/find.js.map +1 -0
  210. package/dist/commands/task/resolve.d.ts +16 -0
  211. package/dist/commands/task/resolve.d.ts.map +1 -0
  212. package/dist/commands/task/resolve.js +71 -0
  213. package/dist/commands/task/resolve.js.map +1 -0
  214. package/dist/commands/update-set/clone.d.ts +15 -0
  215. package/dist/commands/update-set/clone.d.ts.map +1 -0
  216. package/dist/commands/update-set/clone.js +50 -0
  217. package/dist/commands/update-set/clone.js.map +1 -0
  218. package/dist/commands/update-set/create.d.ts +16 -0
  219. package/dist/commands/update-set/create.d.ts.map +1 -0
  220. package/dist/commands/update-set/create.js +60 -0
  221. package/dist/commands/update-set/create.js.map +1 -0
  222. package/dist/commands/update-set/current.d.ts +14 -0
  223. package/dist/commands/update-set/current.d.ts.map +1 -0
  224. package/dist/commands/update-set/current.js +55 -0
  225. package/dist/commands/update-set/current.js.map +1 -0
  226. package/dist/commands/update-set/index.d.ts +15 -0
  227. package/dist/commands/update-set/index.d.ts.map +1 -0
  228. package/dist/commands/update-set/index.js +56 -0
  229. package/dist/commands/update-set/index.js.map +1 -0
  230. package/dist/commands/update-set/inspect.d.ts +14 -0
  231. package/dist/commands/update-set/inspect.d.ts.map +1 -0
  232. package/dist/commands/update-set/inspect.js +43 -0
  233. package/dist/commands/update-set/inspect.js.map +1 -0
  234. package/dist/commands/update-set/move.d.ts +16 -0
  235. package/dist/commands/update-set/move.d.ts.map +1 -0
  236. package/dist/commands/update-set/move.js +57 -0
  237. package/dist/commands/update-set/move.js.map +1 -0
  238. package/dist/commands/workflow/create.d.ts +14 -0
  239. package/dist/commands/workflow/create.d.ts.map +1 -0
  240. package/dist/commands/workflow/create.js +50 -0
  241. package/dist/commands/workflow/create.js.map +1 -0
  242. package/dist/commands/workflow/publish.d.ts +15 -0
  243. package/dist/commands/workflow/publish.d.ts.map +1 -0
  244. package/dist/commands/workflow/publish.js +53 -0
  245. package/dist/commands/workflow/publish.js.map +1 -0
  246. package/dist/commands/xml/export.d.ts +17 -0
  247. package/dist/commands/xml/export.d.ts.map +1 -0
  248. package/dist/commands/xml/export.js +87 -0
  249. package/dist/commands/xml/export.js.map +1 -0
  250. package/dist/commands/xml/import.d.ts +16 -0
  251. package/dist/commands/xml/import.d.ts.map +1 -0
  252. package/dist/commands/xml/import.js +69 -0
  253. package/dist/commands/xml/import.js.map +1 -0
  254. package/dist/common/authenticated-command.d.ts +5 -2
  255. package/dist/common/authenticated-command.d.ts.map +1 -1
  256. package/dist/common/authenticated-command.js +14 -5
  257. package/dist/common/authenticated-command.js.map +1 -1
  258. package/dist/common/base-command.d.ts +2 -2
  259. package/dist/common/base-command.d.ts.map +1 -1
  260. package/dist/common/base-command.js +0 -1
  261. package/dist/common/base-command.js.map +1 -1
  262. package/dist/common/scope-autocomplete.d.ts +20 -0
  263. package/dist/common/scope-autocomplete.d.ts.map +1 -0
  264. package/dist/common/scope-autocomplete.js +93 -0
  265. package/dist/common/scope-autocomplete.js.map +1 -0
  266. package/dist/services/aggregate-display.service.d.ts +18 -0
  267. package/dist/services/aggregate-display.service.d.ts.map +1 -0
  268. package/dist/services/aggregate-display.service.js +83 -0
  269. package/dist/services/aggregate-display.service.js.map +1 -0
  270. package/dist/services/app-display.service.d.ts +36 -0
  271. package/dist/services/app-display.service.d.ts.map +1 -0
  272. package/dist/services/app-display.service.js +101 -0
  273. package/dist/services/app-display.service.js.map +1 -0
  274. package/dist/services/atf-result-formatter.service.d.ts +64 -0
  275. package/dist/services/atf-result-formatter.service.d.ts.map +1 -0
  276. package/dist/services/atf-result-formatter.service.js +83 -0
  277. package/dist/services/atf-result-formatter.service.js.map +1 -0
  278. package/dist/services/attachment-display.service.d.ts +18 -0
  279. package/dist/services/attachment-display.service.d.ts.map +1 -0
  280. package/dist/services/attachment-display.service.js +93 -0
  281. package/dist/services/attachment-display.service.js.map +1 -0
  282. package/dist/services/batch-display.service.d.ts +11 -0
  283. package/dist/services/batch-display.service.d.ts.map +1 -0
  284. package/dist/services/batch-display.service.js +75 -0
  285. package/dist/services/batch-display.service.js.map +1 -0
  286. package/dist/services/bulk-display.service.d.ts +11 -0
  287. package/dist/services/bulk-display.service.d.ts.map +1 -0
  288. package/dist/services/bulk-display.service.js +85 -0
  289. package/dist/services/bulk-display.service.js.map +1 -0
  290. package/dist/services/code-search-display.service.d.ts +23 -0
  291. package/dist/services/code-search-display.service.d.ts.map +1 -0
  292. package/dist/services/code-search-display.service.js +130 -0
  293. package/dist/services/code-search-display.service.js.map +1 -0
  294. package/dist/services/flow-display.service.d.ts +10 -0
  295. package/dist/services/flow-display.service.d.ts.map +1 -0
  296. package/dist/services/flow-display.service.js +164 -0
  297. package/dist/services/flow-display.service.js.map +1 -0
  298. package/dist/services/health-display.service.d.ts +8 -0
  299. package/dist/services/health-display.service.d.ts.map +1 -0
  300. package/dist/services/health-display.service.js +91 -0
  301. package/dist/services/health-display.service.js.map +1 -0
  302. package/dist/services/log-filter.service.d.ts +31 -0
  303. package/dist/services/log-filter.service.d.ts.map +1 -0
  304. package/dist/services/log-filter.service.js +117 -0
  305. package/dist/services/log-filter.service.js.map +1 -0
  306. package/dist/services/log-formatter.service.d.ts +30 -0
  307. package/dist/services/log-formatter.service.d.ts.map +1 -0
  308. package/dist/services/log-formatter.service.js +122 -0
  309. package/dist/services/log-formatter.service.js.map +1 -0
  310. package/dist/services/query-display.service.d.ts +23 -0
  311. package/dist/services/query-display.service.d.ts.map +1 -0
  312. package/dist/services/query-display.service.js +152 -0
  313. package/dist/services/query-display.service.js.map +1 -0
  314. package/dist/services/schema-display.service.d.ts +18 -0
  315. package/dist/services/schema-display.service.d.ts.map +1 -0
  316. package/dist/services/schema-display.service.js +106 -0
  317. package/dist/services/schema-display.service.js.map +1 -0
  318. package/dist/services/scope-display.service.d.ts +18 -0
  319. package/dist/services/scope-display.service.d.ts.map +1 -0
  320. package/dist/services/scope-display.service.js +83 -0
  321. package/dist/services/scope-display.service.js.map +1 -0
  322. package/dist/services/script-parameter.service.d.ts +16 -0
  323. package/dist/services/script-parameter.service.d.ts.map +1 -0
  324. package/dist/services/script-parameter.service.js +34 -0
  325. package/dist/services/script-parameter.service.js.map +1 -0
  326. package/dist/services/script-sync-display.service.d.ts +13 -0
  327. package/dist/services/script-sync-display.service.d.ts.map +1 -0
  328. package/dist/services/script-sync-display.service.js +71 -0
  329. package/dist/services/script-sync-display.service.js.map +1 -0
  330. package/dist/services/store-app-display.service.d.ts +16 -0
  331. package/dist/services/store-app-display.service.d.ts.map +1 -0
  332. package/dist/services/store-app-display.service.js +114 -0
  333. package/dist/services/store-app-display.service.js.map +1 -0
  334. package/dist/services/task-display.service.d.ts +14 -0
  335. package/dist/services/task-display.service.d.ts.map +1 -0
  336. package/dist/services/task-display.service.js +86 -0
  337. package/dist/services/task-display.service.js.map +1 -0
  338. package/dist/services/update-set-display.service.d.ts +28 -0
  339. package/dist/services/update-set-display.service.d.ts.map +1 -0
  340. package/dist/services/update-set-display.service.js +150 -0
  341. package/dist/services/update-set-display.service.js.map +1 -0
  342. package/dist/services/workflow-display.service.d.ts +13 -0
  343. package/dist/services/workflow-display.service.d.ts.map +1 -0
  344. package/dist/services/workflow-display.service.js +53 -0
  345. package/dist/services/workflow-display.service.js.map +1 -0
  346. package/dist/services/xml-display.service.d.ts +11 -0
  347. package/dist/services/xml-display.service.d.ts.map +1 -0
  348. package/dist/services/xml-display.service.js +55 -0
  349. package/dist/services/xml-display.service.js.map +1 -0
  350. package/dist/util/log-factory.d.ts +5 -0
  351. package/dist/util/log-factory.d.ts.map +1 -0
  352. package/dist/util/log-factory.js +8 -0
  353. package/dist/util/log-factory.js.map +1 -0
  354. package/oclif.manifest.json +5847 -49
  355. package/package.json +107 -28
@@ -0,0 +1,183 @@
1
+ /* eslint-disable @typescript-eslint/no-unused-vars */
2
+ /* eslint-disable perfectionist/sort-objects */
3
+ import { Flags } from '@oclif/core';
4
+ import { ATFTestExecutor } from '@sonisoft/now-sdk-ext-core';
5
+ import { AuthenticatedCommand } from '../../common/authenticated-command.js';
6
+ import { isNilOrEmpty } from '../../common/utils.js';
7
+ import { AtfResultFormatterService, } from '../../services/atf-result-formatter.service.js';
8
+ export class Atf extends AuthenticatedCommand {
9
+ static args = {};
10
+ static description = 'Execute ATF (Automated Test Framework) tests or test suites on a ServiceNow instance.\n\n' +
11
+ 'This command allows you to run automated tests and test suites remotely, making it perfect for CI/CD pipelines ' +
12
+ 'and automated testing workflows. You can execute individual tests, entire test suites, and configure execution ' +
13
+ 'parameters such as browser type, OS, and performance mode.\n\n' +
14
+ 'Features:\n' +
15
+ ' • Execute individual tests or complete test suites\n' +
16
+ ' • Real-time progress monitoring\n' +
17
+ ' • JSON output for CI/CD integration\n' +
18
+ ' • Detailed test results and summaries\n' +
19
+ ' • Browser and environment configuration\n' +
20
+ ' • Performance testing mode support';
21
+ static examples = [
22
+ {
23
+ description: 'Execute a single ATF test by sys_id',
24
+ command: '<%= config.bin %> <%= command.id %> --test-id f717a8c783103210621e78c6feaad396 --auth dev-instance',
25
+ },
26
+ {
27
+ description: 'Execute a test suite by sys_id and wait for completion',
28
+ command: '<%= config.bin %> <%= command.id %> --suite-id e077e00b83103210621e78c6feaad383 --auth dev-instance --wait',
29
+ },
30
+ {
31
+ description: 'Execute a test suite by name',
32
+ command: '<%= config.bin %> <%= command.id %> --suite-name "Smoke Tests" --auth dev-instance',
33
+ },
34
+ {
35
+ description: 'Execute with specific browser configuration',
36
+ command: '<%= config.bin %> <%= command.id %> --suite-id e077e00b83103210621e78c6feaad383 --browser chrome --auth dev-instance',
37
+ },
38
+ {
39
+ description: 'Execute as performance test with JSON output for CI/CD',
40
+ command: '<%= config.bin %> <%= command.id %> --suite-id e077e00b83103210621e78c6feaad383 --performance --json --auth dev-instance',
41
+ },
42
+ {
43
+ description: 'Execute with custom poll interval (10 seconds)',
44
+ command: '<%= config.bin %> <%= command.id %> --suite-id e077e00b83103210621e78c6feaad383 --poll-interval 10000 --auth dev-instance',
45
+ },
46
+ ];
47
+ static flags = {
48
+ 'test-id': Flags.string({
49
+ char: 't',
50
+ description: 'Test sys_id to execute',
51
+ required: false,
52
+ exclusive: ['suite-id', 'suite-name']
53
+ }),
54
+ 'suite-id': Flags.string({
55
+ char: 's',
56
+ description: 'Test Suite sys_id to execute',
57
+ required: false,
58
+ exclusive: ['test-id', 'suite-name']
59
+ }),
60
+ 'suite-name': Flags.string({
61
+ char: 'n',
62
+ description: 'Test Suite name to execute',
63
+ required: false,
64
+ exclusive: ['test-id', 'suite-id']
65
+ }),
66
+ 'wait': Flags.boolean({
67
+ char: 'w',
68
+ description: 'Wait for test suite execution to complete and return results',
69
+ required: false,
70
+ default: true
71
+ }),
72
+ 'poll-interval': Flags.integer({
73
+ char: 'p',
74
+ description: 'Polling interval in milliseconds when waiting for completion',
75
+ required: false,
76
+ default: 5000
77
+ }),
78
+ 'browser': Flags.string({
79
+ char: 'b',
80
+ description: 'Browser name for test execution (e.g., chrome, firefox)',
81
+ required: false
82
+ }),
83
+ 'browser-version': Flags.string({
84
+ description: 'Browser version for test execution',
85
+ required: false
86
+ }),
87
+ 'os-name': Flags.string({
88
+ description: 'Operating system name for test execution',
89
+ required: false
90
+ }),
91
+ 'os-version': Flags.string({
92
+ description: 'Operating system version for test execution',
93
+ required: false
94
+ }),
95
+ 'performance': Flags.boolean({
96
+ description: 'Run as performance test',
97
+ required: false,
98
+ default: false
99
+ }),
100
+ 'cloud': Flags.boolean({
101
+ description: 'Run in cloud',
102
+ required: false,
103
+ default: false
104
+ }),
105
+ 'json': Flags.boolean({
106
+ char: 'j',
107
+ description: 'Output results as JSON',
108
+ required: false,
109
+ default: false
110
+ })
111
+ };
112
+ async run() {
113
+ const { args, flags } = await this.parse(Atf);
114
+ const resultFormatter = new AtfResultFormatterService();
115
+ // Validate that at least one execution option is provided
116
+ if (isNilOrEmpty(flags['test-id']) && isNilOrEmpty(flags['suite-id']) && isNilOrEmpty(flags['suite-name'])) {
117
+ this.error('You must specify either --test-id, --suite-id, or --suite-name');
118
+ return;
119
+ }
120
+ try {
121
+ const executor = new ATFTestExecutor(this.instance);
122
+ // Execute single test
123
+ if (!isNilOrEmpty(flags['test-id'])) {
124
+ this.log(`Executing ATF test: ${flags['test-id']}`);
125
+ const result = await executor.executeTest(flags['test-id']);
126
+ if (!result) {
127
+ this.error('Failed to execute test or retrieve test results.');
128
+ return;
129
+ }
130
+ const lines = resultFormatter.formatTestResult(result, flags.json);
131
+ for (const line of lines) {
132
+ flags.json ? console.log(line) : this.log(line);
133
+ }
134
+ if (!flags.json && result.status !== 'success') {
135
+ this.exit(1);
136
+ }
137
+ }
138
+ // Execute test suite by sys_id
139
+ else if (!isNilOrEmpty(flags['suite-id'])) {
140
+ this.log(`Executing ATF test suite by sys_id: ${flags['suite-id']}`);
141
+ const options = resultFormatter.buildExecutionOptions(flags);
142
+ if (flags.wait) {
143
+ const result = await executor.executeTestSuiteAndWait(flags['suite-id'], options, flags['poll-interval']);
144
+ if (!result) {
145
+ this.error('Failed to execute test suite or retrieve results.');
146
+ return;
147
+ }
148
+ const lines = resultFormatter.formatTestSuiteResult(result, flags.json);
149
+ for (const line of lines) {
150
+ flags.json ? console.log(line) : this.log(line);
151
+ }
152
+ if (Number.parseInt(result.failure_count || '0', 10) > 0 || Number.parseInt(result.error_count || '0', 10) > 0) {
153
+ this.exit(1);
154
+ }
155
+ }
156
+ }
157
+ // Execute test suite by name
158
+ else if (!isNilOrEmpty(flags['suite-name'])) {
159
+ this.log(`Executing ATF test suite by name: ${flags['suite-name']}`);
160
+ const options = resultFormatter.buildExecutionOptions(flags);
161
+ if (flags.wait) {
162
+ const result = await executor.executeTestSuiteByNameAndWait(flags['suite-name'], options, flags['poll-interval']);
163
+ if (!result) {
164
+ this.error('Failed to execute test suite or retrieve results.');
165
+ return;
166
+ }
167
+ const lines = resultFormatter.formatTestSuiteResult(result, flags.json);
168
+ for (const line of lines) {
169
+ flags.json ? console.log(line) : this.log(line);
170
+ }
171
+ if (Number.parseInt(result.failure_count || '0', 10) > 0 || Number.parseInt(result.error_count || '0', 10) > 0) {
172
+ this.exit(1);
173
+ }
174
+ }
175
+ }
176
+ }
177
+ catch (error) {
178
+ this._logger.error("Error occurred when executing ATF test/suite.", error);
179
+ this.error(error);
180
+ }
181
+ }
182
+ }
183
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/atf/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { AuthenticatedCommand } from '../../common/authenticated-command.js';
2
+ export declare class Get extends AuthenticatedCommand<typeof Get> {
3
+ static args: {};
4
+ static description: string;
5
+ static examples: {
6
+ command: string;
7
+ description: string;
8
+ }[];
9
+ static flags: {
10
+ 'sys-id': import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
11
+ };
12
+ run(): Promise<void>;
13
+ }
14
+ //# sourceMappingURL=get.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../src/commands/attachment/get.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAA;AAG5E,qBAAa,GAAI,SAAQ,oBAAoB,CAAC,OAAO,GAAG,CAAC;IAEvD,MAAM,CAAC,IAAI,KACV;IACH,MAAM,CAAC,WAAW,SAA4C;IAC9D,MAAM,CAAC,QAAQ;;;QASZ;IACH,MAAM,CAAC,KAAK;;MAMT;IAEK,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAoB3B"}
@@ -0,0 +1,44 @@
1
+ import { Flags } from '@oclif/core';
2
+ import { AttachmentManager } from '@sonisoft/now-sdk-ext-core';
3
+ import { AuthenticatedCommand } from '../../common/authenticated-command.js';
4
+ import { AttachmentDisplayService } from '../../services/attachment-display.service.js';
5
+ export class Get extends AuthenticatedCommand {
6
+ static args = {};
7
+ static description = 'Get metadata for a specific attachment.';
8
+ static examples = [
9
+ {
10
+ command: '<%= config.bin %> <%= command.id %> --sys-id att123 --auth dev',
11
+ description: 'Get attachment metadata by sys_id',
12
+ },
13
+ {
14
+ command: '<%= config.bin %> <%= command.id %> -s att123 --json --auth dev',
15
+ description: 'Get attachment metadata as JSON',
16
+ },
17
+ ];
18
+ static flags = {
19
+ 'sys-id': Flags.string({
20
+ char: 's',
21
+ description: 'Sys ID of the attachment',
22
+ required: true,
23
+ }),
24
+ };
25
+ async run() {
26
+ const { flags } = await this.parse(Get);
27
+ const displayService = new AttachmentDisplayService();
28
+ try {
29
+ const attachmentMgr = new AttachmentManager(this.instance);
30
+ const sysId = flags['sys-id'];
31
+ this.log(`Fetching attachment ${sysId}...`);
32
+ const attachment = await attachmentMgr.getAttachment(sysId);
33
+ const lines = displayService.formatAttachmentDetail(attachment, (flags.json ?? false) ?? false);
34
+ for (const line of lines) {
35
+ (flags.json ?? false) ? console.log(line) : this.log(line);
36
+ }
37
+ }
38
+ catch (error) {
39
+ this._logger.error("Error occurred when fetching attachment.", error);
40
+ this.error(error);
41
+ }
42
+ }
43
+ }
44
+ //# sourceMappingURL=get.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get.js","sourceRoot":"","sources":["../../../src/commands/attachment/get.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AAE9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAA;AAC5E,OAAO,EAAE,wBAAwB,EAAE,MAAM,8CAA8C,CAAA;AAEvF,MAAM,OAAO,GAAI,SAAQ,oBAAgC;IAEvD,MAAM,CAAC,IAAI,GAAG,EACb,CAAA;IACH,MAAM,CAAC,WAAW,GAAG,yCAAyC,CAAA;IAC9D,MAAM,CAAC,QAAQ,GAAG;QACd;YACE,OAAO,EAAE,gEAAgE;YACzE,WAAW,EAAE,mCAAmC;SACjD;QACD;YACE,OAAO,EAAE,iEAAiE;YAC1E,WAAW,EAAE,iCAAiC;SAC/C;KACF,CAAA;IACH,MAAM,CAAC,KAAK,GAAG;QACX,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC;YACrB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,0BAA0B;YACvC,QAAQ,EAAE,IAAI;SACf,CAAC;KACH,CAAA;IAED,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACvC,MAAM,cAAc,GAAG,IAAI,wBAAwB,EAAE,CAAA;QAErD,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YAC1D,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAW,CAAA;YAEvC,IAAI,CAAC,GAAG,CAAC,uBAAuB,KAAK,KAAK,CAAC,CAAA;YAC3C,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;YAE3D,MAAM,KAAK,GAAG,cAAc,CAAC,sBAAsB,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,CAAA;YAC/F,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YAC5D,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,0CAA0C,EAAE,KAAc,CAAC,CAAA;YAC9E,IAAI,CAAC,KAAK,CAAC,KAAc,CAAC,CAAA;QAC5B,CAAC;IACH,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { AuthenticatedCommand } from '../../common/authenticated-command.js';
2
+ export declare class List extends AuthenticatedCommand<typeof List> {
3
+ static args: {};
4
+ static description: string;
5
+ static examples: {
6
+ command: string;
7
+ description: string;
8
+ }[];
9
+ static flags: {
10
+ limit: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<number, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
11
+ 'record-id': import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
12
+ table: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
13
+ };
14
+ run(): Promise<void>;
15
+ }
16
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/attachment/list.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAA;AAG5E,qBAAa,IAAK,SAAQ,oBAAoB,CAAC,OAAO,IAAI,CAAC;IAEzD,MAAM,CAAC,IAAI,KACV;IACH,MAAM,CAAC,WAAW,SAA6C;IAC/D,MAAM,CAAC,QAAQ;;;QASZ;IACH,MAAM,CAAC,KAAK;;;;MAgBT;IAEK,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA0B3B"}
@@ -0,0 +1,60 @@
1
+ import { Flags } from '@oclif/core';
2
+ import { AttachmentManager } from '@sonisoft/now-sdk-ext-core';
3
+ import { AuthenticatedCommand } from '../../common/authenticated-command.js';
4
+ import { AttachmentDisplayService } from '../../services/attachment-display.service.js';
5
+ export class List extends AuthenticatedCommand {
6
+ static args = {};
7
+ static description = 'List attachments on a ServiceNow record.';
8
+ static examples = [
9
+ {
10
+ command: '<%= config.bin %> <%= command.id %> --table incident --record-id abc123 --auth dev',
11
+ description: 'List attachments on an incident',
12
+ },
13
+ {
14
+ command: '<%= config.bin %> <%= command.id %> -t incident -r abc123 --limit 50 --json --auth dev',
15
+ description: 'List up to 50 attachments as JSON',
16
+ },
17
+ ];
18
+ static flags = {
19
+ 'limit': Flags.integer({
20
+ default: 20,
21
+ description: 'Maximum number of attachments to return',
22
+ required: false,
23
+ }),
24
+ 'record-id': Flags.string({
25
+ char: 'r',
26
+ description: 'Sys ID of the record',
27
+ required: true,
28
+ }),
29
+ 'table': Flags.string({
30
+ char: 't',
31
+ description: 'Table name',
32
+ required: true,
33
+ }),
34
+ };
35
+ async run() {
36
+ const { flags } = await this.parse(List);
37
+ const displayService = new AttachmentDisplayService();
38
+ try {
39
+ const attachmentMgr = new AttachmentManager(this.instance);
40
+ const table = flags.table;
41
+ const recordId = flags['record-id'];
42
+ const limit = flags.limit;
43
+ this.log(`Fetching attachments for ${table}/${recordId}...`);
44
+ const attachments = await attachmentMgr.listAttachments({
45
+ limit,
46
+ recordSysId: recordId,
47
+ tableName: table,
48
+ });
49
+ const lines = displayService.formatAttachmentList(attachments, (flags.json ?? false) ?? false);
50
+ for (const line of lines) {
51
+ (flags.json ?? false) ? console.log(line) : this.log(line);
52
+ }
53
+ }
54
+ catch (error) {
55
+ this._logger.error("Error occurred when listing attachments.", error);
56
+ this.error(error);
57
+ }
58
+ }
59
+ }
60
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/attachment/list.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AAE9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAA;AAC5E,OAAO,EAAE,wBAAwB,EAAE,MAAM,8CAA8C,CAAA;AAEvF,MAAM,OAAO,IAAK,SAAQ,oBAAiC;IAEzD,MAAM,CAAC,IAAI,GAAG,EACb,CAAA;IACH,MAAM,CAAC,WAAW,GAAG,0CAA0C,CAAA;IAC/D,MAAM,CAAC,QAAQ,GAAG;QACd;YACE,OAAO,EAAE,oFAAoF;YAC7F,WAAW,EAAE,iCAAiC;SAC/C;QACD;YACE,OAAO,EAAE,wFAAwF;YACjG,WAAW,EAAE,mCAAmC;SACjD;KACF,CAAA;IACH,MAAM,CAAC,KAAK,GAAG;QACX,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;YACrB,OAAO,EAAE,EAAE;YACX,WAAW,EAAE,yCAAyC;YACtD,QAAQ,EAAE,KAAK;SAChB,CAAC;QACF,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC;YACxB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,sBAAsB;YACnC,QAAQ,EAAE,IAAI;SACf,CAAC;QACF,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC;YACpB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,YAAY;YACzB,QAAQ,EAAE,IAAI;SACf,CAAC;KACH,CAAA;IAED,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACxC,MAAM,cAAc,GAAG,IAAI,wBAAwB,EAAE,CAAA;QAErD,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YAC1D,MAAM,KAAK,GAAG,KAAK,CAAC,KAAe,CAAA;YACnC,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAW,CAAA;YAC7C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAe,CAAA;YAEnC,IAAI,CAAC,GAAG,CAAC,4BAA4B,KAAK,IAAI,QAAQ,KAAK,CAAC,CAAA;YAC5D,MAAM,WAAW,GAAG,MAAM,aAAa,CAAC,eAAe,CAAC;gBACtD,KAAK;gBACL,WAAW,EAAE,QAAQ;gBACrB,SAAS,EAAE,KAAK;aACjB,CAAC,CAAA;YAEF,MAAM,KAAK,GAAG,cAAc,CAAC,oBAAoB,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,CAAA;YAC9F,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YAC5D,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,0CAA0C,EAAE,KAAc,CAAC,CAAA;YAC9E,IAAI,CAAC,KAAK,CAAC,KAAc,CAAC,CAAA;QAC5B,CAAC;IACH,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { AuthenticatedCommand } from '../../common/authenticated-command.js';
2
+ export declare class Upload extends AuthenticatedCommand<typeof Upload> {
3
+ static args: {};
4
+ static description: string;
5
+ static examples: {
6
+ command: string;
7
+ description: string;
8
+ }[];
9
+ static flags: {
10
+ 'content-type': import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
11
+ file: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
12
+ 'record-id': import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
13
+ table: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
14
+ };
15
+ run(): Promise<void>;
16
+ }
17
+ //# sourceMappingURL=upload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../../src/commands/attachment/upload.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAA;AAG5E,qBAAa,MAAO,SAAQ,oBAAoB,CAAC,OAAO,MAAM,CAAC;IAE7D,MAAM,CAAC,IAAI,KACV;IACH,MAAM,CAAC,WAAW,SAA2D;IAC7E,MAAM,CAAC,QAAQ;;;QASZ;IACH,MAAM,CAAC,KAAK;;;;;MAoBT;IAEK,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAgC3B"}
@@ -0,0 +1,71 @@
1
+ import { Flags } from '@oclif/core';
2
+ import { AttachmentManager } from '@sonisoft/now-sdk-ext-core';
3
+ import { readFileSync } from 'node:fs';
4
+ import path from 'node:path';
5
+ import { AuthenticatedCommand } from '../../common/authenticated-command.js';
6
+ import { AttachmentDisplayService } from '../../services/attachment-display.service.js';
7
+ export class Upload extends AuthenticatedCommand {
8
+ static args = {};
9
+ static description = 'Upload a file as an attachment to a ServiceNow record.';
10
+ static examples = [
11
+ {
12
+ command: '<%= config.bin %> <%= command.id %> --table incident --record-id abc123 --file ./report.pdf --auth dev',
13
+ description: 'Upload a PDF to an incident record',
14
+ },
15
+ {
16
+ command: '<%= config.bin %> <%= command.id %> -t incident -r abc123 -f ./data.csv --content-type text/csv --auth dev',
17
+ description: 'Upload a CSV with explicit content type',
18
+ },
19
+ ];
20
+ static flags = {
21
+ 'content-type': Flags.string({
22
+ description: 'MIME content type of the file',
23
+ required: false,
24
+ }),
25
+ 'file': Flags.string({
26
+ char: 'f',
27
+ description: 'Path to the file to upload',
28
+ required: true,
29
+ }),
30
+ 'record-id': Flags.string({
31
+ char: 'r',
32
+ description: 'Sys ID of the target record',
33
+ required: true,
34
+ }),
35
+ 'table': Flags.string({
36
+ char: 't',
37
+ description: 'Target table name',
38
+ required: true,
39
+ }),
40
+ };
41
+ async run() {
42
+ const { flags } = await this.parse(Upload);
43
+ const displayService = new AttachmentDisplayService();
44
+ try {
45
+ const attachmentMgr = new AttachmentManager(this.instance);
46
+ const table = flags.table;
47
+ const recordId = flags['record-id'];
48
+ const file = flags.file;
49
+ const contentType = flags['content-type'];
50
+ this.log(`Reading file ${file}...`);
51
+ const fileData = readFileSync(file);
52
+ this.log(`Uploading ${path.basename(file)} to ${table}/${recordId}...`);
53
+ const result = await attachmentMgr.uploadAttachment({
54
+ contentType: contentType || 'application/octet-stream',
55
+ data: fileData,
56
+ fileName: path.basename(file),
57
+ recordSysId: recordId,
58
+ tableName: table,
59
+ });
60
+ const lines = displayService.formatUploadResult(result, (flags.json ?? false) ?? false);
61
+ for (const line of lines) {
62
+ (flags.json ?? false) ? console.log(line) : this.log(line);
63
+ }
64
+ }
65
+ catch (error) {
66
+ this._logger.error("Error occurred when uploading attachment.", error);
67
+ this.error(error);
68
+ }
69
+ }
70
+ }
71
+ //# sourceMappingURL=upload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload.js","sourceRoot":"","sources":["../../../src/commands/attachment/upload.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { AuthenticatedCommand } from '../../common/authenticated-command.js';
2
+ export declare class Create extends AuthenticatedCommand<typeof Create> {
3
+ static args: {};
4
+ static description: string;
5
+ static examples: {
6
+ command: string;
7
+ description: string;
8
+ }[];
9
+ static flags: {
10
+ file: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
11
+ transaction: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
12
+ };
13
+ run(): Promise<void>;
14
+ }
15
+ //# sourceMappingURL=create.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/commands/batch/create.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAA;AAG5E,qBAAa,MAAO,SAAQ,oBAAoB,CAAC,OAAO,MAAM,CAAC;IAE7D,MAAM,CAAC,IAAI,KACV;IACH,MAAM,CAAC,WAAW,SAAoE;IACtF,MAAM,CAAC,QAAQ;;;QASZ;IACH,MAAM,CAAC,KAAK;;;MAWT;IAEK,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA2B3B"}
@@ -0,0 +1,56 @@
1
+ import { Flags } from '@oclif/core';
2
+ import { BatchOperations } from '@sonisoft/now-sdk-ext-core';
3
+ import { readFileSync } from 'node:fs';
4
+ import { AuthenticatedCommand } from '../../common/authenticated-command.js';
5
+ import { formatBatchCreateResult } from '../../services/batch-display.service.js';
6
+ export class Create extends AuthenticatedCommand {
7
+ static args = {};
8
+ static description = 'Batch create records on a ServiceNow instance from a JSON file.';
9
+ static examples = [
10
+ {
11
+ command: '<%= config.bin %> <%= command.id %> --file ./records.json --auth dev',
12
+ description: 'Create records from a JSON file',
13
+ },
14
+ {
15
+ command: '<%= config.bin %> <%= command.id %> --file ./records.json --no-transaction --auth dev',
16
+ description: 'Create records without transactional mode',
17
+ },
18
+ ];
19
+ static flags = {
20
+ file: Flags.string({
21
+ char: 'f',
22
+ description: 'Path to JSON file with create operations',
23
+ required: true,
24
+ }),
25
+ transaction: Flags.boolean({
26
+ default: true,
27
+ description: 'Stop on first error (transactional)',
28
+ required: false,
29
+ }),
30
+ };
31
+ async run() {
32
+ const { flags } = await this.parse(Create);
33
+ try {
34
+ const fileContent = readFileSync(flags.file, 'utf-8');
35
+ const data = JSON.parse(fileContent);
36
+ const { transaction } = flags;
37
+ this.log(`Batch creating records from ${flags.file}...`);
38
+ this.log(`Transactional mode: ${transaction}`);
39
+ const batchOps = new BatchOperations(this.instance);
40
+ const result = await batchOps.batchCreate({
41
+ onProgress: (p) => this.log(p),
42
+ operations: data.operations || data,
43
+ transaction,
44
+ });
45
+ const lines = formatBatchCreateResult(result, (flags.json ?? false) ?? false);
46
+ for (const line of lines) {
47
+ (flags.json ?? false) ? console.log(line) : this.log(line);
48
+ }
49
+ }
50
+ catch (error) {
51
+ this._logger.error("Error occurred during batch create.", error);
52
+ this.error(error);
53
+ }
54
+ }
55
+ }
56
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/batch/create.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACnC,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAEtC,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAA;AAC5E,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAA;AAEjF,MAAM,OAAO,MAAO,SAAQ,oBAAmC;IAE7D,MAAM,CAAC,IAAI,GAAG,EACb,CAAA;IACH,MAAM,CAAC,WAAW,GAAG,iEAAiE,CAAA;IACtF,MAAM,CAAC,QAAQ,GAAG;QACd;YACE,OAAO,EAAE,sEAAsE;YAC/E,WAAW,EAAE,iCAAiC;SAC/C;QACD;YACE,OAAO,EAAE,uFAAuF;YAChG,WAAW,EAAE,2CAA2C;SACzD;KACF,CAAA;IACH,MAAM,CAAC,KAAK,GAAG;QACX,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC;YACjB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,0CAA0C;YACvD,QAAQ,EAAE,IAAI;SACf,CAAC;QACF,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC;YACzB,OAAO,EAAE,IAAI;YACb,WAAW,EAAE,qCAAqC;YAClD,QAAQ,EAAE,KAAK;SAChB,CAAC;KACH,CAAA;IAED,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QAE1C,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,YAAY,CAAC,KAAK,CAAC,IAAc,EAAE,OAAO,CAAC,CAAA;YAC/D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;YAEpC,MAAM,EAAC,WAAW,EAAC,GAAG,KAAK,CAAA;YAC3B,IAAI,CAAC,GAAG,CAAC,+BAA+B,KAAK,CAAC,IAAI,KAAK,CAAC,CAAA;YACxD,IAAI,CAAC,GAAG,CAAC,uBAAuB,WAAW,EAAE,CAAC,CAAA;YAE9C,MAAM,QAAQ,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YACnD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC;gBACxC,UAAU,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBACtC,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI;gBACnC,WAAW;aACZ,CAAC,CAAA;YAEF,MAAM,KAAK,GAAG,uBAAuB,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,CAAA;YAC7E,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YAC5D,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,KAAc,CAAC,CAAA;YACzE,IAAI,CAAC,KAAK,CAAC,KAAc,CAAC,CAAA;QAC5B,CAAC;IACH,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { AuthenticatedCommand } from '../../common/authenticated-command.js';
2
+ export declare class Update extends AuthenticatedCommand<typeof Update> {
3
+ static args: {};
4
+ static description: string;
5
+ static examples: {
6
+ command: string;
7
+ description: string;
8
+ }[];
9
+ static flags: {
10
+ file: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
11
+ 'stop-on-error': import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
12
+ };
13
+ run(): Promise<void>;
14
+ }
15
+ //# sourceMappingURL=update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/commands/batch/update.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAA;AAG5E,qBAAa,MAAO,SAAQ,oBAAoB,CAAC,OAAO,MAAM,CAAC;IAE7D,MAAM,CAAC,IAAI,KACV;IACH,MAAM,CAAC,WAAW,SAAoE;IACtF,MAAM,CAAC,QAAQ;;;QASZ;IACH,MAAM,CAAC,KAAK;;;MAWT;IAEK,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA2B3B"}
@@ -0,0 +1,56 @@
1
+ import { Flags } from '@oclif/core';
2
+ import { BatchOperations } from '@sonisoft/now-sdk-ext-core';
3
+ import { readFileSync } from 'node:fs';
4
+ import { AuthenticatedCommand } from '../../common/authenticated-command.js';
5
+ import { formatBatchUpdateResult } from '../../services/batch-display.service.js';
6
+ export class Update extends AuthenticatedCommand {
7
+ static args = {};
8
+ static description = 'Batch update records on a ServiceNow instance from a JSON file.';
9
+ static examples = [
10
+ {
11
+ command: '<%= config.bin %> <%= command.id %> --file ./updates.json --auth dev',
12
+ description: 'Update records from a JSON file',
13
+ },
14
+ {
15
+ command: '<%= config.bin %> <%= command.id %> --file ./updates.json --stop-on-error --auth dev',
16
+ description: 'Update records and stop on first error',
17
+ },
18
+ ];
19
+ static flags = {
20
+ file: Flags.string({
21
+ char: 'f',
22
+ description: 'Path to JSON file with update operations',
23
+ required: true,
24
+ }),
25
+ 'stop-on-error': Flags.boolean({
26
+ default: false,
27
+ description: 'Stop processing on first error',
28
+ required: false,
29
+ }),
30
+ };
31
+ async run() {
32
+ const { flags } = await this.parse(Update);
33
+ try {
34
+ const fileContent = readFileSync(flags.file, 'utf-8');
35
+ const data = JSON.parse(fileContent);
36
+ const stopOnError = flags['stop-on-error'];
37
+ this.log(`Batch updating records from ${flags.file}...`);
38
+ this.log(`Stop on error: ${stopOnError}`);
39
+ const batchOps = new BatchOperations(this.instance);
40
+ const result = await batchOps.batchUpdate({
41
+ onProgress: (p) => this.log(p),
42
+ stopOnError,
43
+ updates: data.updates || data,
44
+ });
45
+ const lines = formatBatchUpdateResult(result, (flags.json ?? false) ?? false);
46
+ for (const line of lines) {
47
+ (flags.json ?? false) ? console.log(line) : this.log(line);
48
+ }
49
+ }
50
+ catch (error) {
51
+ this._logger.error("Error occurred during batch update.", error);
52
+ this.error(error);
53
+ }
54
+ }
55
+ }
56
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/commands/batch/update.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACnC,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAEtC,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAA;AAC5E,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAA;AAEjF,MAAM,OAAO,MAAO,SAAQ,oBAAmC;IAE7D,MAAM,CAAC,IAAI,GAAG,EACb,CAAA;IACH,MAAM,CAAC,WAAW,GAAG,iEAAiE,CAAA;IACtF,MAAM,CAAC,QAAQ,GAAG;QACd;YACE,OAAO,EAAE,sEAAsE;YAC/E,WAAW,EAAE,iCAAiC;SAC/C;QACD;YACE,OAAO,EAAE,sFAAsF;YAC/F,WAAW,EAAE,wCAAwC;SACtD;KACF,CAAA;IACH,MAAM,CAAC,KAAK,GAAG;QACX,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC;YACjB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,0CAA0C;YACvD,QAAQ,EAAE,IAAI;SACf,CAAC;QACF,eAAe,EAAE,KAAK,CAAC,OAAO,CAAC;YAC7B,OAAO,EAAE,KAAK;YACd,WAAW,EAAE,gCAAgC;YAC7C,QAAQ,EAAE,KAAK;SAChB,CAAC;KACH,CAAA;IAED,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QAE1C,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,YAAY,CAAC,KAAK,CAAC,IAAc,EAAE,OAAO,CAAC,CAAA;YAC/D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;YAEpC,MAAM,WAAW,GAAG,KAAK,CAAC,eAAe,CAAC,CAAA;YAC1C,IAAI,CAAC,GAAG,CAAC,+BAA+B,KAAK,CAAC,IAAI,KAAK,CAAC,CAAA;YACxD,IAAI,CAAC,GAAG,CAAC,kBAAkB,WAAW,EAAE,CAAC,CAAA;YAEzC,MAAM,QAAQ,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YACnD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC;gBACxC,UAAU,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBACtC,WAAW;gBACX,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,IAAI;aAC9B,CAAC,CAAA;YAEF,MAAM,KAAK,GAAG,uBAAuB,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,CAAA;YAC7E,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YAC5D,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,KAAc,CAAC,CAAA;YACzE,IAAI,CAAC,KAAK,CAAC,KAAc,CAAC,CAAA;QAC5B,CAAC;IACH,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { AuthenticatedCommand } from '../../common/authenticated-command.js';
2
+ export declare class BulkDelete extends AuthenticatedCommand<typeof BulkDelete> {
3
+ static args: {};
4
+ static description: string;
5
+ static examples: {
6
+ description: string;
7
+ command: string;
8
+ }[];
9
+ static flags: {
10
+ table: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
11
+ query: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
12
+ confirm: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
13
+ limit: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<number, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
14
+ json: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
15
+ };
16
+ run(): Promise<void>;
17
+ }
18
+ //# sourceMappingURL=delete.d.ts.map