@ttctl/cli 0.0.0 → 0.1.0-rc.2

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 (395) hide show
  1. package/README.md +44 -9
  2. package/dist/commands/applications/index.d.ts +21 -0
  3. package/dist/commands/applications/index.d.ts.map +1 -0
  4. package/dist/commands/applications/index.js +87 -0
  5. package/dist/commands/applications/index.js.map +1 -0
  6. package/dist/commands/applications/list.d.ts +55 -0
  7. package/dist/commands/applications/list.d.ts.map +1 -0
  8. package/dist/commands/applications/list.js +106 -0
  9. package/dist/commands/applications/list.js.map +1 -0
  10. package/dist/commands/applications/shared.d.ts +14 -0
  11. package/dist/commands/applications/shared.d.ts.map +1 -0
  12. package/dist/commands/applications/shared.js +19 -0
  13. package/dist/commands/applications/shared.js.map +1 -0
  14. package/dist/commands/applications/show.d.ts +51 -0
  15. package/dist/commands/applications/show.d.ts.map +1 -0
  16. package/dist/commands/applications/show.js +154 -0
  17. package/dist/commands/applications/show.js.map +1 -0
  18. package/dist/commands/applications/stats.d.ts +42 -0
  19. package/dist/commands/applications/stats.d.ts.map +1 -0
  20. package/dist/commands/applications/stats.js +69 -0
  21. package/dist/commands/applications/stats.js.map +1 -0
  22. package/dist/commands/auth/index.d.ts +17 -0
  23. package/dist/commands/auth/index.d.ts.map +1 -0
  24. package/dist/commands/auth/index.js +69 -0
  25. package/dist/commands/auth/index.js.map +1 -0
  26. package/dist/commands/auth/init.d.ts +98 -0
  27. package/dist/commands/auth/init.d.ts.map +1 -0
  28. package/dist/commands/auth/init.js +387 -0
  29. package/dist/commands/auth/init.js.map +1 -0
  30. package/dist/commands/auth/signin.d.ts +81 -0
  31. package/dist/commands/auth/signin.d.ts.map +1 -0
  32. package/dist/commands/auth/signin.js +145 -0
  33. package/dist/commands/auth/signin.js.map +1 -0
  34. package/dist/commands/auth/signout.d.ts +133 -0
  35. package/dist/commands/auth/signout.d.ts.map +1 -0
  36. package/dist/commands/auth/signout.js +172 -0
  37. package/dist/commands/auth/signout.js.map +1 -0
  38. package/dist/commands/auth/status.d.ts +62 -0
  39. package/dist/commands/auth/status.d.ts.map +1 -0
  40. package/dist/commands/auth/status.js +98 -0
  41. package/dist/commands/auth/status.js.map +1 -0
  42. package/dist/commands/availability/allocated-hours.d.ts +27 -0
  43. package/dist/commands/availability/allocated-hours.d.ts.map +1 -0
  44. package/dist/commands/availability/allocated-hours.js +61 -0
  45. package/dist/commands/availability/allocated-hours.js.map +1 -0
  46. package/dist/commands/availability/index.d.ts +30 -0
  47. package/dist/commands/availability/index.d.ts.map +1 -0
  48. package/dist/commands/availability/index.js +124 -0
  49. package/dist/commands/availability/index.js.map +1 -0
  50. package/dist/commands/availability/shared.d.ts +11 -0
  51. package/dist/commands/availability/shared.d.ts.map +1 -0
  52. package/dist/commands/availability/shared.js +30 -0
  53. package/dist/commands/availability/shared.js.map +1 -0
  54. package/dist/commands/availability/show.d.ts +32 -0
  55. package/dist/commands/availability/show.d.ts.map +1 -0
  56. package/dist/commands/availability/show.js +86 -0
  57. package/dist/commands/availability/show.js.map +1 -0
  58. package/dist/commands/availability/working-hours.d.ts +53 -0
  59. package/dist/commands/availability/working-hours.d.ts.map +1 -0
  60. package/dist/commands/availability/working-hours.js +151 -0
  61. package/dist/commands/availability/working-hours.js.map +1 -0
  62. package/dist/commands/contracts/index.d.ts +69 -0
  63. package/dist/commands/contracts/index.d.ts.map +1 -0
  64. package/dist/commands/contracts/index.js +198 -0
  65. package/dist/commands/contracts/index.js.map +1 -0
  66. package/dist/commands/engagements/breaks.d.ts +81 -0
  67. package/dist/commands/engagements/breaks.d.ts.map +1 -0
  68. package/dist/commands/engagements/breaks.js +229 -0
  69. package/dist/commands/engagements/breaks.js.map +1 -0
  70. package/dist/commands/engagements/index.d.ts +29 -0
  71. package/dist/commands/engagements/index.d.ts.map +1 -0
  72. package/dist/commands/engagements/index.js +172 -0
  73. package/dist/commands/engagements/index.js.map +1 -0
  74. package/dist/commands/engagements/list.d.ts +49 -0
  75. package/dist/commands/engagements/list.d.ts.map +1 -0
  76. package/dist/commands/engagements/list.js +95 -0
  77. package/dist/commands/engagements/list.js.map +1 -0
  78. package/dist/commands/engagements/shared.d.ts +10 -0
  79. package/dist/commands/engagements/shared.d.ts.map +1 -0
  80. package/dist/commands/engagements/shared.js +31 -0
  81. package/dist/commands/engagements/shared.js.map +1 -0
  82. package/dist/commands/engagements/show.d.ts +19 -0
  83. package/dist/commands/engagements/show.d.ts.map +1 -0
  84. package/dist/commands/engagements/show.js +150 -0
  85. package/dist/commands/engagements/show.js.map +1 -0
  86. package/dist/commands/engagements/stats.d.ts +24 -0
  87. package/dist/commands/engagements/stats.d.ts.map +1 -0
  88. package/dist/commands/engagements/stats.js +51 -0
  89. package/dist/commands/engagements/stats.js.map +1 -0
  90. package/dist/commands/jobs/index.d.ts +49 -0
  91. package/dist/commands/jobs/index.d.ts.map +1 -0
  92. package/dist/commands/jobs/index.js +304 -0
  93. package/dist/commands/jobs/index.js.map +1 -0
  94. package/dist/commands/jobs/interest.d.ts +65 -0
  95. package/dist/commands/jobs/interest.d.ts.map +1 -0
  96. package/dist/commands/jobs/interest.js +172 -0
  97. package/dist/commands/jobs/interest.js.map +1 -0
  98. package/dist/commands/jobs/list.d.ts +81 -0
  99. package/dist/commands/jobs/list.d.ts.map +1 -0
  100. package/dist/commands/jobs/list.js +157 -0
  101. package/dist/commands/jobs/list.js.map +1 -0
  102. package/dist/commands/jobs/search.d.ts +71 -0
  103. package/dist/commands/jobs/search.d.ts.map +1 -0
  104. package/dist/commands/jobs/search.js +163 -0
  105. package/dist/commands/jobs/search.js.map +1 -0
  106. package/dist/commands/jobs/shared.d.ts +79 -0
  107. package/dist/commands/jobs/shared.d.ts.map +1 -0
  108. package/dist/commands/jobs/shared.js +133 -0
  109. package/dist/commands/jobs/shared.js.map +1 -0
  110. package/dist/commands/jobs/show.d.ts +20 -0
  111. package/dist/commands/jobs/show.d.ts.map +1 -0
  112. package/dist/commands/jobs/show.js +135 -0
  113. package/dist/commands/jobs/show.js.map +1 -0
  114. package/dist/commands/payments/index.d.ts +34 -0
  115. package/dist/commands/payments/index.d.ts.map +1 -0
  116. package/dist/commands/payments/index.js +160 -0
  117. package/dist/commands/payments/index.js.map +1 -0
  118. package/dist/commands/payments/methods.d.ts +17 -0
  119. package/dist/commands/payments/methods.d.ts.map +1 -0
  120. package/dist/commands/payments/methods.js +79 -0
  121. package/dist/commands/payments/methods.js.map +1 -0
  122. package/dist/commands/payments/payouts.d.ts +44 -0
  123. package/dist/commands/payments/payouts.d.ts.map +1 -0
  124. package/dist/commands/payments/payouts.js +147 -0
  125. package/dist/commands/payments/payouts.js.map +1 -0
  126. package/dist/commands/payments/rate.d.ts +48 -0
  127. package/dist/commands/payments/rate.d.ts.map +1 -0
  128. package/dist/commands/payments/rate.js +229 -0
  129. package/dist/commands/payments/rate.js.map +1 -0
  130. package/dist/commands/payments/shared.d.ts +10 -0
  131. package/dist/commands/payments/shared.d.ts.map +1 -0
  132. package/dist/commands/payments/shared.js +27 -0
  133. package/dist/commands/payments/shared.js.map +1 -0
  134. package/dist/commands/profile/basic/index.d.ts +18 -0
  135. package/dist/commands/profile/basic/index.d.ts.map +1 -0
  136. package/dist/commands/profile/basic/index.js +79 -0
  137. package/dist/commands/profile/basic/index.js.map +1 -0
  138. package/dist/commands/profile/basic/photo-show.d.ts +28 -0
  139. package/dist/commands/profile/basic/photo-show.d.ts.map +1 -0
  140. package/dist/commands/profile/basic/photo-show.js +112 -0
  141. package/dist/commands/profile/basic/photo-show.js.map +1 -0
  142. package/dist/commands/profile/basic/photo-upload.d.ts +10 -0
  143. package/dist/commands/profile/basic/photo-upload.d.ts.map +1 -0
  144. package/dist/commands/profile/basic/photo-upload.js +61 -0
  145. package/dist/commands/profile/basic/photo-upload.js.map +1 -0
  146. package/dist/commands/profile/basic/set.d.ts +54 -0
  147. package/dist/commands/profile/basic/set.d.ts.map +1 -0
  148. package/dist/commands/profile/basic/set.js +174 -0
  149. package/dist/commands/profile/basic/set.js.map +1 -0
  150. package/dist/commands/profile/basic/show.d.ts +95 -0
  151. package/dist/commands/profile/basic/show.d.ts.map +1 -0
  152. package/dist/commands/profile/basic/show.js +310 -0
  153. package/dist/commands/profile/basic/show.js.map +1 -0
  154. package/dist/commands/profile/certifications/index.d.ts +40 -0
  155. package/dist/commands/profile/certifications/index.d.ts.map +1 -0
  156. package/dist/commands/profile/certifications/index.js +350 -0
  157. package/dist/commands/profile/certifications/index.js.map +1 -0
  158. package/dist/commands/profile/education/index.d.ts +37 -0
  159. package/dist/commands/profile/education/index.d.ts.map +1 -0
  160. package/dist/commands/profile/education/index.js +331 -0
  161. package/dist/commands/profile/education/index.js.map +1 -0
  162. package/dist/commands/profile/employment/index.d.ts +49 -0
  163. package/dist/commands/profile/employment/index.d.ts.map +1 -0
  164. package/dist/commands/profile/employment/index.js +425 -0
  165. package/dist/commands/profile/employment/index.js.map +1 -0
  166. package/dist/commands/profile/external/_shared.d.ts +35 -0
  167. package/dist/commands/profile/external/_shared.d.ts.map +1 -0
  168. package/dist/commands/profile/external/_shared.js +59 -0
  169. package/dist/commands/profile/external/_shared.js.map +1 -0
  170. package/dist/commands/profile/external/advanced-wizard-show.d.ts +15 -0
  171. package/dist/commands/profile/external/advanced-wizard-show.d.ts.map +1 -0
  172. package/dist/commands/profile/external/advanced-wizard-show.js +82 -0
  173. package/dist/commands/profile/external/advanced-wizard-show.js.map +1 -0
  174. package/dist/commands/profile/external/custom-requirements-set.d.ts +32 -0
  175. package/dist/commands/profile/external/custom-requirements-set.d.ts.map +1 -0
  176. package/dist/commands/profile/external/custom-requirements-set.js +116 -0
  177. package/dist/commands/profile/external/custom-requirements-set.js.map +1 -0
  178. package/dist/commands/profile/external/custom-requirements-show.d.ts +16 -0
  179. package/dist/commands/profile/external/custom-requirements-show.d.ts.map +1 -0
  180. package/dist/commands/profile/external/custom-requirements-show.js +84 -0
  181. package/dist/commands/profile/external/custom-requirements-show.js.map +1 -0
  182. package/dist/commands/profile/external/index.d.ts +21 -0
  183. package/dist/commands/profile/external/index.d.ts.map +1 -0
  184. package/dist/commands/profile/external/index.js +113 -0
  185. package/dist/commands/profile/external/index.js.map +1 -0
  186. package/dist/commands/profile/external/readiness.d.ts +15 -0
  187. package/dist/commands/profile/external/readiness.d.ts.map +1 -0
  188. package/dist/commands/profile/external/readiness.js +104 -0
  189. package/dist/commands/profile/external/readiness.js.map +1 -0
  190. package/dist/commands/profile/external/recommendations.d.ts +17 -0
  191. package/dist/commands/profile/external/recommendations.d.ts.map +1 -0
  192. package/dist/commands/profile/external/recommendations.js +97 -0
  193. package/dist/commands/profile/external/recommendations.js.map +1 -0
  194. package/dist/commands/profile/external/show.d.ts +22 -0
  195. package/dist/commands/profile/external/show.d.ts.map +1 -0
  196. package/dist/commands/profile/external/show.js +83 -0
  197. package/dist/commands/profile/external/show.js.map +1 -0
  198. package/dist/commands/profile/external/update.d.ts +37 -0
  199. package/dist/commands/profile/external/update.d.ts.map +1 -0
  200. package/dist/commands/profile/external/update.js +125 -0
  201. package/dist/commands/profile/external/update.js.map +1 -0
  202. package/dist/commands/profile/index.d.ts +16 -0
  203. package/dist/commands/profile/index.d.ts.map +1 -0
  204. package/dist/commands/profile/index.js +81 -0
  205. package/dist/commands/profile/index.js.map +1 -0
  206. package/dist/commands/profile/industries/index.d.ts +43 -0
  207. package/dist/commands/profile/industries/index.d.ts.map +1 -0
  208. package/dist/commands/profile/industries/index.js +258 -0
  209. package/dist/commands/profile/industries/index.js.map +1 -0
  210. package/dist/commands/profile/portfolio/add.d.ts +43 -0
  211. package/dist/commands/profile/portfolio/add.d.ts.map +1 -0
  212. package/dist/commands/profile/portfolio/add.js +181 -0
  213. package/dist/commands/profile/portfolio/add.js.map +1 -0
  214. package/dist/commands/profile/portfolio/highlight.d.ts +11 -0
  215. package/dist/commands/profile/portfolio/highlight.d.ts.map +1 -0
  216. package/dist/commands/profile/portfolio/highlight.js +31 -0
  217. package/dist/commands/profile/portfolio/highlight.js.map +1 -0
  218. package/dist/commands/profile/portfolio/index.d.ts +16 -0
  219. package/dist/commands/profile/portfolio/index.d.ts.map +1 -0
  220. package/dist/commands/profile/portfolio/index.js +121 -0
  221. package/dist/commands/profile/portfolio/index.js.map +1 -0
  222. package/dist/commands/profile/portfolio/list.d.ts +83 -0
  223. package/dist/commands/profile/portfolio/list.d.ts.map +1 -0
  224. package/dist/commands/profile/portfolio/list.js +189 -0
  225. package/dist/commands/profile/portfolio/list.js.map +1 -0
  226. package/dist/commands/profile/portfolio/remove.d.ts +9 -0
  227. package/dist/commands/profile/portfolio/remove.d.ts.map +1 -0
  228. package/dist/commands/profile/portfolio/remove.js +24 -0
  229. package/dist/commands/profile/portfolio/remove.js.map +1 -0
  230. package/dist/commands/profile/portfolio/reorder.d.ts +17 -0
  231. package/dist/commands/profile/portfolio/reorder.d.ts.map +1 -0
  232. package/dist/commands/profile/portfolio/reorder.js +135 -0
  233. package/dist/commands/profile/portfolio/reorder.js.map +1 -0
  234. package/dist/commands/profile/portfolio/shared.d.ts +8 -0
  235. package/dist/commands/profile/portfolio/shared.d.ts.map +1 -0
  236. package/dist/commands/profile/portfolio/shared.js +10 -0
  237. package/dist/commands/profile/portfolio/shared.js.map +1 -0
  238. package/dist/commands/profile/portfolio/update.d.ts +18 -0
  239. package/dist/commands/profile/portfolio/update.d.ts.map +1 -0
  240. package/dist/commands/profile/portfolio/update.js +77 -0
  241. package/dist/commands/profile/portfolio/update.js.map +1 -0
  242. package/dist/commands/profile/portfolio/upload.d.ts +8 -0
  243. package/dist/commands/profile/portfolio/upload.d.ts.map +1 -0
  244. package/dist/commands/profile/portfolio/upload.js +131 -0
  245. package/dist/commands/profile/portfolio/upload.js.map +1 -0
  246. package/dist/commands/profile/resume/cancel-upload.d.ts +9 -0
  247. package/dist/commands/profile/resume/cancel-upload.d.ts.map +1 -0
  248. package/dist/commands/profile/resume/cancel-upload.js +30 -0
  249. package/dist/commands/profile/resume/cancel-upload.js.map +1 -0
  250. package/dist/commands/profile/resume/index.d.ts +15 -0
  251. package/dist/commands/profile/resume/index.d.ts.map +1 -0
  252. package/dist/commands/profile/resume/index.js +42 -0
  253. package/dist/commands/profile/resume/index.js.map +1 -0
  254. package/dist/commands/profile/resume/upload.d.ts +16 -0
  255. package/dist/commands/profile/resume/upload.d.ts.map +1 -0
  256. package/dist/commands/profile/resume/upload.js +65 -0
  257. package/dist/commands/profile/resume/upload.js.map +1 -0
  258. package/dist/commands/profile/reviews/_shared.d.ts +9 -0
  259. package/dist/commands/profile/reviews/_shared.d.ts.map +1 -0
  260. package/dist/commands/profile/reviews/_shared.js +15 -0
  261. package/dist/commands/profile/reviews/_shared.js.map +1 -0
  262. package/dist/commands/profile/reviews/approve-item.d.ts +30 -0
  263. package/dist/commands/profile/reviews/approve-item.d.ts.map +1 -0
  264. package/dist/commands/profile/reviews/approve-item.js +82 -0
  265. package/dist/commands/profile/reviews/approve-item.js.map +1 -0
  266. package/dist/commands/profile/reviews/approve-section.d.ts +15 -0
  267. package/dist/commands/profile/reviews/approve-section.d.ts.map +1 -0
  268. package/dist/commands/profile/reviews/approve-section.js +67 -0
  269. package/dist/commands/profile/reviews/approve-section.js.map +1 -0
  270. package/dist/commands/profile/reviews/index.d.ts +19 -0
  271. package/dist/commands/profile/reviews/index.d.ts.map +1 -0
  272. package/dist/commands/profile/reviews/index.js +71 -0
  273. package/dist/commands/profile/reviews/index.js.map +1 -0
  274. package/dist/commands/profile/reviews/list.d.ts +17 -0
  275. package/dist/commands/profile/reviews/list.d.ts.map +1 -0
  276. package/dist/commands/profile/reviews/list.js +96 -0
  277. package/dist/commands/profile/reviews/list.js.map +1 -0
  278. package/dist/commands/profile/reviews/submit-for-review.d.ts +16 -0
  279. package/dist/commands/profile/reviews/submit-for-review.d.ts.map +1 -0
  280. package/dist/commands/profile/reviews/submit-for-review.js +65 -0
  281. package/dist/commands/profile/reviews/submit-for-review.js.map +1 -0
  282. package/dist/commands/profile/shared.d.ts +46 -0
  283. package/dist/commands/profile/shared.d.ts.map +1 -0
  284. package/dist/commands/profile/shared.js +111 -0
  285. package/dist/commands/profile/shared.js.map +1 -0
  286. package/dist/commands/profile/skills/index.d.ts +29 -0
  287. package/dist/commands/profile/skills/index.d.ts.map +1 -0
  288. package/dist/commands/profile/skills/index.js +475 -0
  289. package/dist/commands/profile/skills/index.js.map +1 -0
  290. package/dist/commands/profile/visas/add.d.ts +19 -0
  291. package/dist/commands/profile/visas/add.d.ts.map +1 -0
  292. package/dist/commands/profile/visas/add.js +37 -0
  293. package/dist/commands/profile/visas/add.js.map +1 -0
  294. package/dist/commands/profile/visas/index.d.ts +13 -0
  295. package/dist/commands/profile/visas/index.d.ts.map +1 -0
  296. package/dist/commands/profile/visas/index.js +69 -0
  297. package/dist/commands/profile/visas/index.js.map +1 -0
  298. package/dist/commands/profile/visas/list.d.ts +40 -0
  299. package/dist/commands/profile/visas/list.d.ts.map +1 -0
  300. package/dist/commands/profile/visas/list.js +115 -0
  301. package/dist/commands/profile/visas/list.js.map +1 -0
  302. package/dist/commands/profile/visas/remove.d.ts +8 -0
  303. package/dist/commands/profile/visas/remove.d.ts.map +1 -0
  304. package/dist/commands/profile/visas/remove.js +23 -0
  305. package/dist/commands/profile/visas/remove.js.map +1 -0
  306. package/dist/commands/profile/visas/shared.d.ts +11 -0
  307. package/dist/commands/profile/visas/shared.d.ts.map +1 -0
  308. package/dist/commands/profile/visas/shared.js +16 -0
  309. package/dist/commands/profile/visas/shared.js.map +1 -0
  310. package/dist/commands/profile/visas/update.d.ts +13 -0
  311. package/dist/commands/profile/visas/update.d.ts.map +1 -0
  312. package/dist/commands/profile/visas/update.js +44 -0
  313. package/dist/commands/profile/visas/update.js.map +1 -0
  314. package/dist/commands/timesheet/index.d.ts +24 -0
  315. package/dist/commands/timesheet/index.d.ts.map +1 -0
  316. package/dist/commands/timesheet/index.js +98 -0
  317. package/dist/commands/timesheet/index.js.map +1 -0
  318. package/dist/commands/timesheet/list.d.ts +40 -0
  319. package/dist/commands/timesheet/list.d.ts.map +1 -0
  320. package/dist/commands/timesheet/list.js +79 -0
  321. package/dist/commands/timesheet/list.js.map +1 -0
  322. package/dist/commands/timesheet/shared.d.ts +10 -0
  323. package/dist/commands/timesheet/shared.d.ts.map +1 -0
  324. package/dist/commands/timesheet/shared.js +35 -0
  325. package/dist/commands/timesheet/shared.js.map +1 -0
  326. package/dist/commands/timesheet/show.d.ts +19 -0
  327. package/dist/commands/timesheet/show.d.ts.map +1 -0
  328. package/dist/commands/timesheet/show.js +109 -0
  329. package/dist/commands/timesheet/show.js.map +1 -0
  330. package/dist/commands/timesheet/submit.d.ts +50 -0
  331. package/dist/commands/timesheet/submit.d.ts.map +1 -0
  332. package/dist/commands/timesheet/submit.js +151 -0
  333. package/dist/commands/timesheet/submit.js.map +1 -0
  334. package/dist/crash-handlers.d.ts +67 -0
  335. package/dist/crash-handlers.d.ts.map +1 -0
  336. package/dist/crash-handlers.js +78 -0
  337. package/dist/crash-handlers.js.map +1 -0
  338. package/dist/errors.d.ts +45 -0
  339. package/dist/errors.d.ts.map +1 -0
  340. package/dist/errors.js +57 -0
  341. package/dist/errors.js.map +1 -0
  342. package/dist/index.d.ts +8 -0
  343. package/dist/index.d.ts.map +1 -0
  344. package/dist/index.js +15 -0
  345. package/dist/index.js.map +1 -0
  346. package/dist/lib/config-context.d.ts +41 -0
  347. package/dist/lib/config-context.d.ts.map +1 -0
  348. package/dist/lib/config-context.js +74 -0
  349. package/dist/lib/config-context.js.map +1 -0
  350. package/dist/lib/dry-run.d.ts +70 -0
  351. package/dist/lib/dry-run.d.ts.map +1 -0
  352. package/dist/lib/dry-run.js +114 -0
  353. package/dist/lib/dry-run.js.map +1 -0
  354. package/dist/lib/empty-state-cta.d.ts +63 -0
  355. package/dist/lib/empty-state-cta.d.ts.map +1 -0
  356. package/dist/lib/empty-state-cta.js +88 -0
  357. package/dist/lib/empty-state-cta.js.map +1 -0
  358. package/dist/lib/envelopes.d.ts +540 -0
  359. package/dist/lib/envelopes.d.ts.map +1 -0
  360. package/dist/lib/envelopes.js +598 -0
  361. package/dist/lib/envelopes.js.map +1 -0
  362. package/dist/lib/error-routing.d.ts +49 -0
  363. package/dist/lib/error-routing.d.ts.map +1 -0
  364. package/dist/lib/error-routing.js +72 -0
  365. package/dist/lib/error-routing.js.map +1 -0
  366. package/dist/lib/format-helpers.d.ts +65 -0
  367. package/dist/lib/format-helpers.d.ts.map +1 -0
  368. package/dist/lib/format-helpers.js +79 -0
  369. package/dist/lib/format-helpers.js.map +1 -0
  370. package/dist/lib/format-overrides.d.ts +81 -0
  371. package/dist/lib/format-overrides.d.ts.map +1 -0
  372. package/dist/lib/format-overrides.js +55 -0
  373. package/dist/lib/format-overrides.js.map +1 -0
  374. package/dist/lib/freetext.d.ts +83 -0
  375. package/dist/lib/freetext.d.ts.map +1 -0
  376. package/dist/lib/freetext.js +182 -0
  377. package/dist/lib/freetext.js.map +1 -0
  378. package/dist/lib/kill-switch-hook.d.ts +49 -0
  379. package/dist/lib/kill-switch-hook.d.ts.map +1 -0
  380. package/dist/lib/kill-switch-hook.js +34 -0
  381. package/dist/lib/kill-switch-hook.js.map +1 -0
  382. package/dist/lib/output.d.ts +173 -0
  383. package/dist/lib/output.d.ts.map +1 -0
  384. package/dist/lib/output.js +177 -0
  385. package/dist/lib/output.js.map +1 -0
  386. package/dist/lib/pagination.d.ts +49 -0
  387. package/dist/lib/pagination.d.ts.map +1 -0
  388. package/dist/lib/pagination.js +36 -0
  389. package/dist/lib/pagination.js.map +1 -0
  390. package/dist/program.d.ts +80 -0
  391. package/dist/program.d.ts.map +1 -0
  392. package/dist/program.js +273 -0
  393. package/dist/program.js.map +1 -0
  394. package/package.json +35 -13
  395. package/index.js +0 -7
@@ -0,0 +1,475 @@
1
+ // SPDX-License-Identifier: AGPL-3.0-only
2
+ // Copyright (C) 2026 Oleksii PELYKH
3
+ import Table from "cli-table3";
4
+ import { Command, Option } from "commander";
5
+ import { TtctlError, profile } from "@ttctl/core";
6
+ import { presentTtctlError } from "../../../errors.js";
7
+ import { emitAddSuccess, emitErrorAndExit, emitRemoveSuccess, emitUpdateSuccess, wrapListEnvelope, } from "../../../lib/envelopes.js";
8
+ import { OUTPUT_FORMATS, emitResult } from "../../../lib/output.js";
9
+ import { loadAuthTokenOrExit } from "../shared.js";
10
+ /**
11
+ * Local alias for the parent `loadAuthTokenOrExit` helper to keep this
12
+ * file's existing call sites (`loadTokenOrExit(commandLabel)`) unchanged.
13
+ * Post-#107 the function reads the token from the in-memory parsed config
14
+ * (`config.auth.token`) — there's no longer a separate token file to
15
+ * resolve.
16
+ */
17
+ const loadTokenOrExit = loadAuthTokenOrExit;
18
+ /**
19
+ * Resolve the user's profileId for queries that need it (`list`,
20
+ * `autocomplete`, `readiness`). The talent-profile surface keys these
21
+ * operations on `profileId` rather than the auth token, so we fetch it
22
+ * via `profile.basic.show()` once per CLI invocation. The cost is one
23
+ * extra mobile-gateway round-trip — acceptable at v0; future caching
24
+ * tracked separately.
25
+ */
26
+ async function resolveProfileId(token, commandLabel, format) {
27
+ let payload;
28
+ try {
29
+ payload = await profile.basic.show(token);
30
+ }
31
+ catch (err) {
32
+ handleSkillsError(err, commandLabel, format);
33
+ }
34
+ const profileId = payload.viewer?.viewerRole.profileId;
35
+ if (profileId === undefined) {
36
+ emitErrorAndExit({
37
+ operation: operationFor(commandLabel),
38
+ format,
39
+ errors: [{ code: "NO_VIEWER", message: "No profile id bound to this session." }],
40
+ prettySummary: `${commandLabel} failed (NO_VIEWER): no profile id bound to this session.`,
41
+ });
42
+ }
43
+ return profileId;
44
+ }
45
+ /**
46
+ * Translate the command label (`profile skills add`) into the canonical
47
+ * envelope `operation` value (`profile.skills.add`) used as a stable
48
+ * machine-readable discriminator across all envelopes for this
49
+ * sub-domain.
50
+ */
51
+ function operationFor(commandLabel) {
52
+ return commandLabel.replace(/ /g, ".");
53
+ }
54
+ /**
55
+ * Common error router. Routes every typed-hierarchy domain error
56
+ * through the envelope ABI (#128) — `--output=json` / `--output=yaml`
57
+ * land on STDOUT; `--output=pretty` lands on STDERR with a one-line
58
+ * summary plus the multi-line block. Exit code is `1` for domain
59
+ * errors and follows `exitCodeForTtctlError` for `TtctlError`
60
+ * subclasses (`Cf403*` map to `2`).
61
+ */
62
+ function handleSkillsError(err, commandLabel, format) {
63
+ if (err instanceof TtctlError) {
64
+ // The TtctlError pretty rendering keeps its dedicated 3-block
65
+ // shape (Recovery, Code) on `pretty`; on `json`/`yaml` we route
66
+ // through the envelope so machine consumers still see the stable
67
+ // wire shape.
68
+ if (format === "pretty")
69
+ presentTtctlError(err);
70
+ const errors = [{ code: err.code, message: err.message, hint: err.recovery }];
71
+ emitErrorAndExit({
72
+ operation: operationFor(commandLabel),
73
+ format,
74
+ errors,
75
+ exitCode: err.code === "CF_403_CLEARANCE" || err.code === "CF_403_PERSISTENT" ? 2 : 1,
76
+ });
77
+ }
78
+ if (err instanceof profile.skills.SkillsError) {
79
+ emitErrorAndExit({
80
+ operation: operationFor(commandLabel),
81
+ format,
82
+ errors: [{ code: err.code, message: err.message }],
83
+ prettySummary: `${commandLabel} failed (${err.code}): ${err.message}`,
84
+ });
85
+ }
86
+ if (err instanceof profile.basic.ProfileError) {
87
+ emitErrorAndExit({
88
+ operation: operationFor(commandLabel),
89
+ format,
90
+ errors: [{ code: err.code, message: err.message }],
91
+ prettySummary: `${commandLabel} failed (${err.code}): ${err.message}`,
92
+ });
93
+ }
94
+ const message = err instanceof Error ? err.message : String(err);
95
+ emitErrorAndExit({
96
+ operation: operationFor(commandLabel),
97
+ format,
98
+ errors: [{ code: "INTERNAL_ERROR", message }],
99
+ prettySummary: `${commandLabel} failed: ${message}`,
100
+ });
101
+ }
102
+ // =======================================================================
103
+ // Action handlers (one per leaf)
104
+ // =======================================================================
105
+ async function runSkillsAdd(name, format) {
106
+ const commandLabel = "profile skills add";
107
+ const token = await loadTokenOrExit(commandLabel, format);
108
+ let result;
109
+ try {
110
+ result = await profile.skills.add(token, name);
111
+ }
112
+ catch (err) {
113
+ handleSkillsError(err, commandLabel, format);
114
+ }
115
+ emitAddSuccess({
116
+ operation: operationFor(commandLabel),
117
+ format,
118
+ created: result,
119
+ prettySummary: `${result.skill.name} (id ${result.id})`,
120
+ prettyEntity: formatSkillSetText,
121
+ });
122
+ }
123
+ async function runSkillsRm(id, format) {
124
+ const commandLabel = "profile skills remove";
125
+ const token = await loadTokenOrExit(commandLabel, format);
126
+ try {
127
+ await profile.skills.rm(token, id);
128
+ }
129
+ catch (err) {
130
+ handleSkillsError(err, commandLabel, format);
131
+ }
132
+ emitRemoveSuccess({
133
+ operation: operationFor(commandLabel),
134
+ format,
135
+ id,
136
+ });
137
+ }
138
+ /**
139
+ * Action handler for `ttctl profile skills update <id> [flags]`. Resolves
140
+ * the multi-flag input into a `SkillUpdate` shape (translating
141
+ * `--public/--private` into a single boolean, parsing `--experience` as
142
+ * a duration) and dispatches to `profile.skills.set()`.
143
+ *
144
+ * Conflicting `--public` and `--private` are caught here; the core layer
145
+ * never sees an inconsistent state.
146
+ */
147
+ async function runSkillsUpdate(id, options, format) {
148
+ const commandLabel = "profile skills update";
149
+ if (options.public === true && options.private === true) {
150
+ emitErrorAndExit({
151
+ operation: operationFor(commandLabel),
152
+ format,
153
+ errors: [
154
+ {
155
+ code: "VALIDATION_ERROR",
156
+ message: "--public and --private cannot both be set.",
157
+ },
158
+ ],
159
+ prettySummary: `${commandLabel} failed (VALIDATION_ERROR): --public and --private cannot both be set.`,
160
+ });
161
+ }
162
+ const fields = {};
163
+ if (options.rating !== undefined) {
164
+ fields.rating = options.rating;
165
+ }
166
+ if (options.experience !== undefined) {
167
+ const months = parseExperience(options.experience);
168
+ if (months === null) {
169
+ emitErrorAndExit({
170
+ operation: operationFor(commandLabel),
171
+ format,
172
+ errors: [
173
+ {
174
+ code: "VALIDATION_ERROR",
175
+ field: "experience",
176
+ message: '--experience must be an integer count of months or a duration like "5y" or "60m".',
177
+ },
178
+ ],
179
+ prettySummary: `${commandLabel} failed (VALIDATION_ERROR): --experience must be an integer count of months or a duration like "5y" or "60m".`,
180
+ });
181
+ }
182
+ fields.experience = months;
183
+ }
184
+ if (options.public === true)
185
+ fields.public = true;
186
+ if (options.private === true)
187
+ fields.public = false;
188
+ const token = await loadTokenOrExit(commandLabel, format);
189
+ let result;
190
+ try {
191
+ result = await profile.skills.set(token, id, fields);
192
+ }
193
+ catch (err) {
194
+ handleSkillsError(err, commandLabel, format);
195
+ }
196
+ // First server-supplied notice (when present) threads into the
197
+ // envelope's optional `notice` field; subsequent notices are
198
+ // concatenated for v0.4 (the field is `string`, not `string[]` —
199
+ // narrowing to a list is reserved for a future shape evolution).
200
+ const notice = result.notices.length > 0 ? result.notices.join("; ") : undefined;
201
+ emitUpdateSuccess({
202
+ operation: operationFor(commandLabel),
203
+ format,
204
+ updated: result,
205
+ prettySummary: `skill ${id}`,
206
+ prettyEntity: formatSkillUpdateResult,
207
+ notice,
208
+ });
209
+ }
210
+ /**
211
+ * Pretty entity preview for the `update` envelope's body. Shows only
212
+ * the fields that the user actually changed (non-null in the
213
+ * `UpdateSkillResult`); preserves parity with the prior raw stdout
214
+ * line-by-line rendering.
215
+ */
216
+ function formatSkillUpdateResult(result) {
217
+ const lines = [];
218
+ if (result.rating !== null)
219
+ lines.push(`rating: ${result.rating}`);
220
+ if (result.experience !== null)
221
+ lines.push(`experience: ${result.experience.toString()} months`);
222
+ if (result.public !== null)
223
+ lines.push(`visibility: ${result.public ? "public" : "private"}`);
224
+ return lines.join("\n");
225
+ }
226
+ /**
227
+ * Parse an `--experience` flag value into an integer count of months.
228
+ * Accepts a bare number ("60" → 60), `Ny` ("5y" → 60), or `Nm` ("60m" →
229
+ * 60). Returns `null` for anything that doesn't match — the caller turns
230
+ * that into a `VALIDATION_ERROR` exit.
231
+ *
232
+ * Pure function — directly unit-testable.
233
+ */
234
+ export function parseExperience(raw) {
235
+ const trimmed = raw.trim().toLowerCase();
236
+ if (/^\d+$/.test(trimmed)) {
237
+ return Number.parseInt(trimmed, 10);
238
+ }
239
+ const match = /^(\d+)([ym])$/.exec(trimmed);
240
+ if (match === null)
241
+ return null;
242
+ const n = Number.parseInt(match[1] ?? "0", 10);
243
+ return match[2] === "y" ? n * 12 : n;
244
+ }
245
+ async function runSkillsShow(id, format) {
246
+ const commandLabel = "profile skills show";
247
+ const token = await loadTokenOrExit(commandLabel, format);
248
+ let result;
249
+ try {
250
+ result = await profile.skills.show(token, id);
251
+ }
252
+ catch (err) {
253
+ handleSkillsError(err, commandLabel, format);
254
+ }
255
+ emitResult(result, format, {
256
+ pretty: formatSkillSetText,
257
+ table: formatSkillSetTable,
258
+ });
259
+ }
260
+ async function runSkillsList(format) {
261
+ const commandLabel = "profile skills list";
262
+ const token = await loadTokenOrExit(commandLabel, format);
263
+ const profileId = await resolveProfileId(token, commandLabel, format);
264
+ let result;
265
+ try {
266
+ result = await profile.skills.list(token, profileId);
267
+ }
268
+ catch (err) {
269
+ handleSkillsError(err, commandLabel, format);
270
+ }
271
+ emitResult(wrapListEnvelope(result), format, {
272
+ pretty: (data) => formatSkillsListText(data.items),
273
+ table: (data) => formatSkillsListTable(data.items),
274
+ empty: { command: "profile.skills.list" },
275
+ });
276
+ }
277
+ async function runSkillsAutocomplete(query, format, limit) {
278
+ const commandLabel = "profile skills autocomplete";
279
+ const token = await loadTokenOrExit(commandLabel, format);
280
+ const profileId = await resolveProfileId(token, commandLabel, format);
281
+ let suggestions;
282
+ try {
283
+ suggestions = await profile.skills.autocomplete(token, profileId, query, { limit });
284
+ }
285
+ catch (err) {
286
+ handleSkillsError(err, commandLabel, format);
287
+ }
288
+ emitResult(wrapListEnvelope(suggestions), format, {
289
+ pretty: (data) => data.items.length === 0 ? `(no matches for "${query}")` : data.items.map((s) => `${s.name}\t${s.id}`).join("\n"),
290
+ table: (data) => {
291
+ const table = new Table({ head: ["Name", "Id"], wordWrap: true });
292
+ for (const s of data.items)
293
+ table.push([s.name, s.id]);
294
+ return table.toString();
295
+ },
296
+ });
297
+ }
298
+ async function runSkillsReadiness(format) {
299
+ const commandLabel = "profile skills readiness";
300
+ const token = await loadTokenOrExit(commandLabel, format);
301
+ const profileId = await resolveProfileId(token, commandLabel, format);
302
+ let result;
303
+ try {
304
+ result = await profile.skills.readiness(token, profileId);
305
+ }
306
+ catch (err) {
307
+ handleSkillsError(err, commandLabel, format);
308
+ }
309
+ emitResult(result, format, {
310
+ pretty: (data) => Object.entries(data)
311
+ .map(([k, v]) => `${humanReadiness(k)}: ${v ? "✓" : "✗"}`)
312
+ .join("\n"),
313
+ table: (data) => {
314
+ const table = new Table({ head: ["Criterion", "Satisfied"], wordWrap: true });
315
+ for (const [k, v] of Object.entries(data)) {
316
+ table.push([humanReadiness(k), v ? "true" : "false"]);
317
+ }
318
+ return table.toString();
319
+ },
320
+ });
321
+ }
322
+ function humanReadiness(key) {
323
+ return key
324
+ .replace(/^is/, "")
325
+ .replace(/Satisfied$/, "")
326
+ .replace(/([A-Z])/g, " $1")
327
+ .trim();
328
+ }
329
+ // =======================================================================
330
+ // Formatters (exported for tests)
331
+ // =======================================================================
332
+ export function formatSkillSetText(skill) {
333
+ const lines = [skill.skill.name, ` id: ${skill.id}`];
334
+ if (skill.rating !== null)
335
+ lines.push(` rating: ${skill.rating}`);
336
+ if (skill.experience !== null)
337
+ lines.push(` experience: ${skill.experience.toString()} months`);
338
+ lines.push(` visibility: ${skill.public ? "public" : "private"}`);
339
+ lines.push(` connections: ${skill.connectionsCount.toString()}`);
340
+ return lines.join("\n");
341
+ }
342
+ export function formatSkillSetTable(skill) {
343
+ const table = new Table({ head: ["Field", "Value"], wordWrap: true });
344
+ table.push(["name", skill.skill.name]);
345
+ table.push(["id", skill.id]);
346
+ table.push(["rating", skill.rating ?? "(unset)"]);
347
+ table.push(["experience", skill.experience?.toString() ?? "(unset)"]);
348
+ table.push(["visibility", skill.public ? "public" : "private"]);
349
+ table.push(["connections", skill.connectionsCount.toString()]);
350
+ return table.toString();
351
+ }
352
+ export function formatSkillsListText(skills) {
353
+ if (skills.length === 0)
354
+ return "(no skills on profile)";
355
+ return skills
356
+ .map((s) => `${s.skill.name}\t${s.rating ?? "?"}\t${s.public ? "public" : "private"}\t${s.id}`)
357
+ .join("\n");
358
+ }
359
+ export function formatSkillsListTable(skills) {
360
+ const table = new Table({ head: ["Name", "Rating", "Experience", "Visibility", "Id"], wordWrap: true });
361
+ for (const s of skills) {
362
+ table.push([
363
+ s.skill.name,
364
+ s.rating ?? "(unset)",
365
+ s.experience?.toString() ?? "(unset)",
366
+ s.public ? "public" : "private",
367
+ s.id,
368
+ ]);
369
+ }
370
+ return table.toString();
371
+ }
372
+ // =======================================================================
373
+ // Builder
374
+ // =======================================================================
375
+ /**
376
+ * Build the `ttctl profile skills` command tree. Exposes the seven leaves
377
+ * the issue (#73) specifies — `add`, `remove`, `update`, `show`, `list`,
378
+ * `autocomplete`, `readiness` — registered in the canonical name spelling
379
+ * (`remove`) plus the `rm` alias per the project convention introduced
380
+ * by issue #72 (any `remove` verb gets an `rm` alias).
381
+ *
382
+ * No top-level Commander.js alias on the sub-domain itself: the issue
383
+ * doesn't introduce one (#72 declares aliases only for `certifications` /
384
+ * `employment` / `portfolio` / `resume`), and `skills` already reads
385
+ * naturally as a CLI flag.
386
+ */
387
+ export function buildProfileSkillsCommand() {
388
+ const skills = new Command("skills").description("Manage the skills section of your profile (add / remove / update / show / list / autocomplete / readiness)");
389
+ skills
390
+ .command("add <name>")
391
+ .description("Add a skill to your profile by its catalog name (e.g., `TypeScript`)")
392
+ .addOption(new Option("-o, --output <format>", "output format")
393
+ .choices(OUTPUT_FORMATS)
394
+ .default("pretty"))
395
+ .action(async (name, options) => {
396
+ await runSkillsAdd(name, options.output);
397
+ });
398
+ skills
399
+ .command("remove <id>")
400
+ .alias("rm")
401
+ .description("Remove a skill from your profile by its skillSet id (NOT the catalog Skill id)")
402
+ .addOption(new Option("-o, --output <format>", "output format")
403
+ .choices(OUTPUT_FORMATS)
404
+ .default("pretty"))
405
+ .action(async (id, options) => {
406
+ await runSkillsRm(id, options.output);
407
+ });
408
+ skills
409
+ .command("update <id>")
410
+ .description("Update one or more fields on an existing skill (rating / experience / public)")
411
+ .option("--rating <value>", "Proficiency level: COMPETENT | STRONG | EXPERT | NOVICE")
412
+ .option("--experience <duration>", 'Years or months of experience: integer ("60"), "Ny" ("5y" = 60 months), or "Nm" ("60m" = 60 months)')
413
+ .option("--public", "Show the skill on your public profile")
414
+ .option("--private", "Hide the skill from your public profile")
415
+ .addOption(new Option("-o, --output <format>", "output format")
416
+ .choices(OUTPUT_FORMATS)
417
+ .default("pretty"))
418
+ .action(async (id, options) => {
419
+ await runSkillsUpdate(id, options, options.output);
420
+ });
421
+ skills
422
+ .command("show <id>")
423
+ .description("Print details of a specific skill on your profile")
424
+ .addOption(new Option("-o, --output <format>", "output format")
425
+ .choices(OUTPUT_FORMATS)
426
+ .default("pretty"))
427
+ .action(async (id, options) => {
428
+ await runSkillsShow(id, options.output);
429
+ });
430
+ skills
431
+ .command("list")
432
+ .description("List every skill on your profile, with rating / visibility / connection count")
433
+ .addOption(new Option("-o, --output <format>", "output format")
434
+ .choices(OUTPUT_FORMATS)
435
+ .default("pretty"))
436
+ .action(async (options) => {
437
+ await runSkillsList(options.output);
438
+ });
439
+ skills
440
+ .command("autocomplete <query>")
441
+ .description("Search the global skill catalog for matching entries (suitable for autocomplete)")
442
+ .option("--limit <n>", "max number of suggestions to return", "10")
443
+ .addOption(new Option("-o, --output <format>", "output format")
444
+ .choices(OUTPUT_FORMATS)
445
+ .default("pretty"))
446
+ .action(async (query, options) => {
447
+ const limit = Number.parseInt(options.limit, 10);
448
+ if (Number.isNaN(limit) || limit <= 0) {
449
+ emitErrorAndExit({
450
+ operation: "profile.skills.autocomplete",
451
+ format: options.output,
452
+ errors: [
453
+ {
454
+ code: "VALIDATION_ERROR",
455
+ field: "limit",
456
+ message: "--limit must be a positive integer.",
457
+ },
458
+ ],
459
+ prettySummary: "profile skills autocomplete failed (VALIDATION_ERROR): --limit must be a positive integer.",
460
+ });
461
+ }
462
+ await runSkillsAutocomplete(query, options.output, limit);
463
+ });
464
+ skills
465
+ .command("readiness")
466
+ .description("Print the skill-readiness checklist for your profile")
467
+ .addOption(new Option("-o, --output <format>", "output format")
468
+ .choices(OUTPUT_FORMATS)
469
+ .default("pretty"))
470
+ .action(async (options) => {
471
+ await runSkillsReadiness(options.output);
472
+ });
473
+ return skills;
474
+ }
475
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/commands/profile/skills/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { OutputFormat } from "../../../lib/output.js";
2
+ /**
3
+ * Action handler for `ttctl profile visas add`. Both `--country` (id)
4
+ * and `--type` are required; `--expires` is optional.
5
+ *
6
+ * The `--issued` flag is reserved for future server support — empirically
7
+ * `TravelVisa` does not surface an `issued` field on the read side, and
8
+ * the inferred `TravelVisaInput` shape excludes it. We accept the flag
9
+ * to avoid breaking script consumers that pre-populate it, but log a
10
+ * stderr warning that it is currently silently dropped.
11
+ */
12
+ export declare function runProfileVisasAdd(options: {
13
+ country: string;
14
+ type: string;
15
+ issued?: string;
16
+ expires?: string;
17
+ output: OutputFormat;
18
+ }): Promise<void>;
19
+ //# sourceMappingURL=add.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../../../src/commands/profile/visas/add.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAI3D;;;;;;;;;GASG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE;IAChD,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,YAAY,CAAC;CACtB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBhB"}
@@ -0,0 +1,37 @@
1
+ // SPDX-License-Identifier: AGPL-3.0-only
2
+ // Copyright (C) 2026 Oleksii PELYKH
3
+ import { profile } from "@ttctl/core";
4
+ import { emitVisaListResult } from "./list.js";
5
+ import { handleVisasError, loadAuthTokenOrExit } from "./shared.js";
6
+ /**
7
+ * Action handler for `ttctl profile visas add`. Both `--country` (id)
8
+ * and `--type` are required; `--expires` is optional.
9
+ *
10
+ * The `--issued` flag is reserved for future server support — empirically
11
+ * `TravelVisa` does not surface an `issued` field on the read side, and
12
+ * the inferred `TravelVisaInput` shape excludes it. We accept the flag
13
+ * to avoid breaking script consumers that pre-populate it, but log a
14
+ * stderr warning that it is currently silently dropped.
15
+ */
16
+ export async function runProfileVisasAdd(options) {
17
+ if (options.issued !== undefined) {
18
+ process.stderr.write("warning: --issued is reserved (server has no `issuedDate` field on TravelVisaInput today); flag ignored.\n");
19
+ }
20
+ const token = await loadAuthTokenOrExit("visas add", options.output);
21
+ const input = {
22
+ countryId: options.country,
23
+ visaType: options.type,
24
+ };
25
+ if (options.expires !== undefined)
26
+ input.expiryDate = options.expires;
27
+ let visas;
28
+ try {
29
+ visas = await profile.visas.add(token, input);
30
+ }
31
+ catch (err) {
32
+ handleVisasError("visas add", err, options.output);
33
+ return;
34
+ }
35
+ emitVisaListResult(visas, options.output, "add", { prettyHeader: "Travel visa added." });
36
+ }
37
+ //# sourceMappingURL=add.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add.js","sourceRoot":"","sources":["../../../../src/commands/profile/visas/add.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,oCAAoC;AAEpC,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEpE;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAMxC;IACC,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACjC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,4GAA4G,CAC7G,CAAC;IACJ,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,mBAAmB,CAAC,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAErE,MAAM,KAAK,GAAkC;QAC3C,SAAS,EAAE,OAAO,CAAC,OAAO;QAC1B,QAAQ,EAAE,OAAO,CAAC,IAAI;KACvB,CAAC;IACF,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS;QAAE,KAAK,CAAC,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC;IAEtE,IAAI,KAAiC,CAAC;IACtC,IAAI,CAAC;QACH,KAAK,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAChD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,gBAAgB,CAAC,WAAW,EAAE,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QACnD,OAAO;IACT,CAAC;IAED,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,YAAY,EAAE,oBAAoB,EAAE,CAAC,CAAC;AAC3F,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { Command } from "commander";
2
+ /**
3
+ * Build the `ttctl profile visas` command tree.
4
+ *
5
+ * The canonical sub-domain name is `visas`. No alias — per project policy
6
+ * (#72), aliases are CLI-only and only registered for sub-domains where
7
+ * an alternative noun reads more naturally for English-speaking users.
8
+ * `visas` carries no such alias.
9
+ *
10
+ * Operations: `add`, `update`, `remove` (alias `rm`), `list`.
11
+ */
12
+ export declare function buildProfileVisasCommand(): Command;
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/profile/visas/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAS5C;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,IAAI,OAAO,CAkElD"}
@@ -0,0 +1,69 @@
1
+ // SPDX-License-Identifier: AGPL-3.0-only
2
+ // Copyright (C) 2026 Oleksii PELYKH
3
+ import { Command, Option } from "commander";
4
+ import { OUTPUT_FORMATS } from "../../../lib/output.js";
5
+ import { runProfileVisasAdd } from "./add.js";
6
+ import { runProfileVisasList } from "./list.js";
7
+ import { runProfileVisasRemove } from "./remove.js";
8
+ import { runProfileVisasUpdate } from "./update.js";
9
+ /**
10
+ * Build the `ttctl profile visas` command tree.
11
+ *
12
+ * The canonical sub-domain name is `visas`. No alias — per project policy
13
+ * (#72), aliases are CLI-only and only registered for sub-domains where
14
+ * an alternative noun reads more naturally for English-speaking users.
15
+ * `visas` carries no such alias.
16
+ *
17
+ * Operations: `add`, `update`, `remove` (alias `rm`), `list`.
18
+ */
19
+ export function buildProfileVisasCommand() {
20
+ const visas = new Command("visas").description("View and update the travel-visa records on your profile");
21
+ visas
22
+ .command("add")
23
+ .description("Create a new travel-visa record")
24
+ .requiredOption("--country <id>", "country id (server-issued; see Toptal travel-visa form)")
25
+ .requiredOption("--type <text>", "visa type (e.g., Schengen, B1/B2)")
26
+ .option("--issued <date>", "(reserved for future server support; not currently sent)")
27
+ .option("--expires <date>", "expiry date in YYYY-MM-DD")
28
+ .addOption(new Option("-o, --output <format>", "output format")
29
+ .choices(OUTPUT_FORMATS)
30
+ .default("pretty"))
31
+ .action(async (options) => {
32
+ await runProfileVisasAdd(options);
33
+ });
34
+ visas
35
+ .command("update")
36
+ .description("Update fields on a travel-visa record")
37
+ .argument("<id>", "id of the travel-visa record to update")
38
+ .option("--country <id>", "country id")
39
+ .option("--type <text>", "visa type")
40
+ .option("--expires <date>", "expiry date in YYYY-MM-DD")
41
+ .addOption(new Option("-o, --output <format>", "output format")
42
+ .choices(OUTPUT_FORMATS)
43
+ .default("pretty"))
44
+ .action(async (id, options) => {
45
+ await runProfileVisasUpdate(id, options);
46
+ });
47
+ visas
48
+ .command("remove")
49
+ .alias("rm")
50
+ .description("Remove a travel-visa record")
51
+ .argument("<id>", "id of the travel-visa record to remove")
52
+ .addOption(new Option("-o, --output <format>", "output format")
53
+ .choices(OUTPUT_FORMATS)
54
+ .default("pretty"))
55
+ .action(async (id, options) => {
56
+ await runProfileVisasRemove(id, options.output);
57
+ });
58
+ visas
59
+ .command("list")
60
+ .description("List travel-visa records")
61
+ .addOption(new Option("-o, --output <format>", "output format")
62
+ .choices(OUTPUT_FORMATS)
63
+ .default("pretty"))
64
+ .action(async (options) => {
65
+ await runProfileVisasList(options.output);
66
+ });
67
+ return visas;
68
+ }
69
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/commands/profile/visas/index.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,oCAAoC;AAEpC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAE5C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEpD;;;;;;;;;GASG;AACH,MAAM,UAAU,wBAAwB;IACtC,MAAM,KAAK,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,yDAAyD,CAAC,CAAC;IAE1G,KAAK;SACF,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,iCAAiC,CAAC;SAC9C,cAAc,CAAC,gBAAgB,EAAE,yDAAyD,CAAC;SAC3F,cAAc,CAAC,eAAe,EAAE,mCAAmC,CAAC;SACpE,MAAM,CAAC,iBAAiB,EAAE,0DAA0D,CAAC;SACrF,MAAM,CAAC,kBAAkB,EAAE,2BAA2B,CAAC;SACvD,SAAS,CACR,IAAI,MAAM,CAAC,uBAAuB,EAAE,eAAe,CAAC;SACjD,OAAO,CAAC,cAAc,CAAC;SACvB,OAAO,CAAC,QAA+B,CAAC,CAC5C;SACA,MAAM,CACL,KAAK,EAAE,OAAmG,EAAE,EAAE;QAC5G,MAAM,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC,CACF,CAAC;IAEJ,KAAK;SACF,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,uCAAuC,CAAC;SACpD,QAAQ,CAAC,MAAM,EAAE,wCAAwC,CAAC;SAC1D,MAAM,CAAC,gBAAgB,EAAE,YAAY,CAAC;SACtC,MAAM,CAAC,eAAe,EAAE,WAAW,CAAC;SACpC,MAAM,CAAC,kBAAkB,EAAE,2BAA2B,CAAC;SACvD,SAAS,CACR,IAAI,MAAM,CAAC,uBAAuB,EAAE,eAAe,CAAC;SACjD,OAAO,CAAC,cAAc,CAAC;SACvB,OAAO,CAAC,QAA+B,CAAC,CAC5C;SACA,MAAM,CACL,KAAK,EAAE,EAAU,EAAE,OAAoF,EAAE,EAAE;QACzG,MAAM,qBAAqB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC,CACF,CAAC;IAEJ,KAAK;SACF,OAAO,CAAC,QAAQ,CAAC;SACjB,KAAK,CAAC,IAAI,CAAC;SACX,WAAW,CAAC,6BAA6B,CAAC;SAC1C,QAAQ,CAAC,MAAM,EAAE,wCAAwC,CAAC;SAC1D,SAAS,CACR,IAAI,MAAM,CAAC,uBAAuB,EAAE,eAAe,CAAC;SACjD,OAAO,CAAC,cAAc,CAAC;SACvB,OAAO,CAAC,QAA+B,CAAC,CAC5C;SACA,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,OAAiC,EAAE,EAAE;QAC9D,MAAM,qBAAqB,CAAC,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEL,KAAK;SACF,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,0BAA0B,CAAC;SACvC,SAAS,CACR,IAAI,MAAM,CAAC,uBAAuB,EAAE,eAAe,CAAC;SACjD,OAAO,CAAC,cAAc,CAAC;SACvB,OAAO,CAAC,QAA+B,CAAC,CAC5C;SACA,MAAM,CAAC,KAAK,EAAE,OAAiC,EAAE,EAAE;QAClD,MAAM,mBAAmB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEL,OAAO,KAAK,CAAC;AACf,CAAC"}