monday-cli 0.2.0 → 0.3.0

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 (418) hide show
  1. package/CHANGELOG.md +324 -2
  2. package/README.md +128 -30
  3. package/dist/api/board-favorites.d.ts +329 -0
  4. package/dist/api/board-favorites.d.ts.map +1 -0
  5. package/dist/api/board-favorites.js +353 -0
  6. package/dist/api/board-favorites.js.map +1 -0
  7. package/dist/api/board-mutation-result.d.ts +9 -5
  8. package/dist/api/board-mutation-result.d.ts.map +1 -1
  9. package/dist/api/board-mutation-result.js +9 -5
  10. package/dist/api/board-mutation-result.js.map +1 -1
  11. package/dist/api/board-relation-validation.d.ts +161 -0
  12. package/dist/api/board-relation-validation.d.ts.map +1 -0
  13. package/dist/api/board-relation-validation.js +317 -0
  14. package/dist/api/board-relation-validation.js.map +1 -0
  15. package/dist/api/cache.d.ts +14 -5
  16. package/dist/api/cache.d.ts.map +1 -1
  17. package/dist/api/cache.js +8 -10
  18. package/dist/api/cache.js.map +1 -1
  19. package/dist/api/column-mapping.js +2 -2
  20. package/dist/api/column-mapping.js.map +1 -1
  21. package/dist/api/column-mutation-result.d.ts +9 -5
  22. package/dist/api/column-mutation-result.d.ts.map +1 -1
  23. package/dist/api/column-mutation-result.js +9 -5
  24. package/dist/api/column-mutation-result.js.map +1 -1
  25. package/dist/api/column-types.d.ts +26 -7
  26. package/dist/api/column-types.d.ts.map +1 -1
  27. package/dist/api/column-types.js +42 -3
  28. package/dist/api/column-types.js.map +1 -1
  29. package/dist/api/column-values.d.ts +228 -31
  30. package/dist/api/column-values.d.ts.map +1 -1
  31. package/dist/api/column-values.js +551 -124
  32. package/dist/api/column-values.js.map +1 -1
  33. package/dist/api/cross-board-search.d.ts +501 -0
  34. package/dist/api/cross-board-search.d.ts.map +1 -0
  35. package/dist/api/cross-board-search.js +547 -0
  36. package/dist/api/cross-board-search.js.map +1 -0
  37. package/dist/api/dev-conventions.d.ts +1038 -0
  38. package/dist/api/dev-conventions.d.ts.map +1 -0
  39. package/dist/api/dev-conventions.js +1556 -0
  40. package/dist/api/dev-conventions.js.map +1 -0
  41. package/dist/api/dry-run.d.ts +32 -5
  42. package/dist/api/dry-run.d.ts.map +1 -1
  43. package/dist/api/dry-run.js +149 -32
  44. package/dist/api/dry-run.js.map +1 -1
  45. package/dist/api/errors.d.ts.map +1 -1
  46. package/dist/api/errors.js +28 -7
  47. package/dist/api/errors.js.map +1 -1
  48. package/dist/api/group-mutation-result.d.ts +9 -5
  49. package/dist/api/group-mutation-result.d.ts.map +1 -1
  50. package/dist/api/group-mutation-result.js +9 -5
  51. package/dist/api/group-mutation-result.js.map +1 -1
  52. package/dist/api/item-history-projection.d.ts +919 -0
  53. package/dist/api/item-history-projection.d.ts.map +1 -0
  54. package/dist/api/item-history-projection.js +1104 -0
  55. package/dist/api/item-history-projection.js.map +1 -0
  56. package/dist/api/item-mutation-execute.d.ts +82 -0
  57. package/dist/api/item-mutation-execute.d.ts.map +1 -0
  58. package/dist/api/item-mutation-execute.js +199 -0
  59. package/dist/api/item-mutation-execute.js.map +1 -0
  60. package/dist/api/notifications.d.ts +156 -0
  61. package/dist/api/notifications.d.ts.map +1 -0
  62. package/dist/api/notifications.js +215 -0
  63. package/dist/api/notifications.js.map +1 -0
  64. package/dist/api/oauth-test-helper.d.ts +64 -0
  65. package/dist/api/oauth-test-helper.d.ts.map +1 -0
  66. package/dist/api/oauth-test-helper.js +179 -0
  67. package/dist/api/oauth-test-helper.js.map +1 -0
  68. package/dist/api/oauth.d.ts +198 -0
  69. package/dist/api/oauth.d.ts.map +1 -0
  70. package/dist/api/oauth.js +471 -0
  71. package/dist/api/oauth.js.map +1 -0
  72. package/dist/api/partial-success-bulk.d.ts +422 -0
  73. package/dist/api/partial-success-bulk.d.ts.map +1 -0
  74. package/dist/api/partial-success-bulk.js +378 -0
  75. package/dist/api/partial-success-bulk.js.map +1 -0
  76. package/dist/api/people.d.ts +54 -1
  77. package/dist/api/people.d.ts.map +1 -1
  78. package/dist/api/people.js +27 -3
  79. package/dist/api/people.js.map +1 -1
  80. package/dist/api/probes.d.ts +487 -0
  81. package/dist/api/probes.d.ts.map +1 -0
  82. package/dist/api/probes.js +881 -0
  83. package/dist/api/probes.js.map +1 -0
  84. package/dist/api/raw-document.d.ts.map +1 -1
  85. package/dist/api/raw-document.js +2 -2
  86. package/dist/api/raw-document.js.map +1 -1
  87. package/dist/api/raw-write.d.ts.map +1 -1
  88. package/dist/api/raw-write.js +11 -3
  89. package/dist/api/raw-write.js.map +1 -1
  90. package/dist/api/resolution-context.d.ts +23 -11
  91. package/dist/api/resolution-context.d.ts.map +1 -1
  92. package/dist/api/resolution-context.js +53 -12
  93. package/dist/api/resolution-context.js.map +1 -1
  94. package/dist/api/resolution-pass.d.ts +30 -1
  95. package/dist/api/resolution-pass.d.ts.map +1 -1
  96. package/dist/api/resolution-pass.js +36 -1
  97. package/dist/api/resolution-pass.js.map +1 -1
  98. package/dist/api/resolve-client.d.ts +11 -0
  99. package/dist/api/resolve-client.d.ts.map +1 -1
  100. package/dist/api/resolve-client.js +1 -1
  101. package/dist/api/resolve-client.js.map +1 -1
  102. package/dist/api/response-root.d.ts +92 -46
  103. package/dist/api/response-root.d.ts.map +1 -1
  104. package/dist/api/response-root.js +93 -41
  105. package/dist/api/response-root.js.map +1 -1
  106. package/dist/api/tag-directory.d.ts +154 -0
  107. package/dist/api/tag-directory.d.ts.map +1 -0
  108. package/dist/api/tag-directory.js +325 -0
  109. package/dist/api/tag-directory.js.map +1 -0
  110. package/dist/api/time-tracking.d.ts +165 -0
  111. package/dist/api/time-tracking.d.ts.map +1 -0
  112. package/dist/api/time-tracking.js +135 -0
  113. package/dist/api/time-tracking.js.map +1 -0
  114. package/dist/api/transport.js +3 -3
  115. package/dist/api/transport.js.map +1 -1
  116. package/dist/api/usage.d.ts +190 -0
  117. package/dist/api/usage.d.ts.map +1 -0
  118. package/dist/api/usage.js +194 -0
  119. package/dist/api/usage.js.map +1 -0
  120. package/dist/api/users-fan-out-mutation.d.ts.map +1 -1
  121. package/dist/api/users-fan-out-mutation.js +10 -5
  122. package/dist/api/users-fan-out-mutation.js.map +1 -1
  123. package/dist/api/webhooks.d.ts +357 -0
  124. package/dist/api/webhooks.d.ts.map +1 -0
  125. package/dist/api/webhooks.js +333 -0
  126. package/dist/api/webhooks.js.map +1 -0
  127. package/dist/cli/envelope-out.d.ts +18 -1
  128. package/dist/cli/envelope-out.d.ts.map +1 -1
  129. package/dist/cli/envelope-out.js +16 -2
  130. package/dist/cli/envelope-out.js.map +1 -1
  131. package/dist/cli/program.d.ts.map +1 -1
  132. package/dist/cli/program.js +120 -1
  133. package/dist/cli/program.js.map +1 -1
  134. package/dist/cli/run.d.ts +12 -0
  135. package/dist/cli/run.d.ts.map +1 -1
  136. package/dist/cli/run.js +2 -0
  137. package/dist/cli/run.js.map +1 -1
  138. package/dist/commands/account/tags.d.ts +37 -0
  139. package/dist/commands/account/tags.d.ts.map +1 -0
  140. package/dist/commands/account/tags.js +84 -0
  141. package/dist/commands/account/tags.js.map +1 -0
  142. package/dist/commands/auth/login.d.ts +14 -0
  143. package/dist/commands/auth/login.d.ts.map +1 -0
  144. package/dist/commands/auth/login.js +314 -0
  145. package/dist/commands/auth/login.js.map +1 -0
  146. package/dist/commands/auth/logout.d.ts +28 -0
  147. package/dist/commands/auth/logout.d.ts.map +1 -0
  148. package/dist/commands/auth/logout.js +94 -0
  149. package/dist/commands/auth/logout.js.map +1 -0
  150. package/dist/commands/board/archive.d.ts.map +1 -1
  151. package/dist/commands/board/archive.js +14 -14
  152. package/dist/commands/board/archive.js.map +1 -1
  153. package/dist/commands/board/column-create.d.ts +3 -3
  154. package/dist/commands/board/column-create.d.ts.map +1 -1
  155. package/dist/commands/board/column-create.js +52 -45
  156. package/dist/commands/board/column-create.js.map +1 -1
  157. package/dist/commands/board/column-delete.d.ts.map +1 -1
  158. package/dist/commands/board/column-delete.js +15 -16
  159. package/dist/commands/board/column-delete.js.map +1 -1
  160. package/dist/commands/board/column-update.d.ts.map +1 -1
  161. package/dist/commands/board/column-update.js +23 -22
  162. package/dist/commands/board/column-update.js.map +1 -1
  163. package/dist/commands/board/create.d.ts.map +1 -1
  164. package/dist/commands/board/create.js +14 -17
  165. package/dist/commands/board/create.js.map +1 -1
  166. package/dist/commands/board/delete.d.ts.map +1 -1
  167. package/dist/commands/board/delete.js +12 -15
  168. package/dist/commands/board/delete.js.map +1 -1
  169. package/dist/commands/board/describe.d.ts.map +1 -1
  170. package/dist/commands/board/describe.js +30 -0
  171. package/dist/commands/board/describe.js.map +1 -1
  172. package/dist/commands/board/duplicate.d.ts.map +1 -1
  173. package/dist/commands/board/duplicate.js +12 -13
  174. package/dist/commands/board/duplicate.js.map +1 -1
  175. package/dist/commands/board/favorites.d.ts +33 -0
  176. package/dist/commands/board/favorites.d.ts.map +1 -0
  177. package/dist/commands/board/favorites.js +74 -0
  178. package/dist/commands/board/favorites.js.map +1 -0
  179. package/dist/commands/board/find.d.ts +1 -1
  180. package/dist/commands/board/group-archive.d.ts.map +1 -1
  181. package/dist/commands/board/group-archive.js +12 -16
  182. package/dist/commands/board/group-archive.js.map +1 -1
  183. package/dist/commands/board/group-create.d.ts.map +1 -1
  184. package/dist/commands/board/group-create.js +9 -19
  185. package/dist/commands/board/group-create.js.map +1 -1
  186. package/dist/commands/board/group-delete.d.ts.map +1 -1
  187. package/dist/commands/board/group-delete.js +12 -16
  188. package/dist/commands/board/group-delete.js.map +1 -1
  189. package/dist/commands/board/group-duplicate.d.ts.map +1 -1
  190. package/dist/commands/board/group-duplicate.js +12 -16
  191. package/dist/commands/board/group-duplicate.js.map +1 -1
  192. package/dist/commands/board/group-update.d.ts.map +1 -1
  193. package/dist/commands/board/group-update.js +12 -11
  194. package/dist/commands/board/group-update.js.map +1 -1
  195. package/dist/commands/board/list.d.ts +1 -1
  196. package/dist/commands/board/update.d.ts.map +1 -1
  197. package/dist/commands/board/update.js +16 -11
  198. package/dist/commands/board/update.js.map +1 -1
  199. package/dist/commands/cache/list.d.ts +2 -0
  200. package/dist/commands/cache/list.d.ts.map +1 -1
  201. package/dist/commands/cache/list.js +2 -2
  202. package/dist/commands/cache/list.js.map +1 -1
  203. package/dist/commands/dev/_shared.d.ts +40 -0
  204. package/dist/commands/dev/_shared.d.ts.map +1 -0
  205. package/dist/commands/dev/_shared.js +104 -0
  206. package/dist/commands/dev/_shared.js.map +1 -0
  207. package/dist/commands/dev/configure.d.ts +36 -0
  208. package/dist/commands/dev/configure.d.ts.map +1 -0
  209. package/dist/commands/dev/configure.js +145 -0
  210. package/dist/commands/dev/configure.js.map +1 -0
  211. package/dist/commands/dev/discover.d.ts +34 -0
  212. package/dist/commands/dev/discover.d.ts.map +1 -0
  213. package/dist/commands/dev/discover.js +117 -0
  214. package/dist/commands/dev/discover.js.map +1 -0
  215. package/dist/commands/dev/doctor.d.ts +39 -0
  216. package/dist/commands/dev/doctor.d.ts.map +1 -0
  217. package/dist/commands/dev/doctor.js +91 -0
  218. package/dist/commands/dev/doctor.js.map +1 -0
  219. package/dist/commands/dev/epic/items.d.ts +24 -0
  220. package/dist/commands/dev/epic/items.d.ts.map +1 -0
  221. package/dist/commands/dev/epic/items.js +103 -0
  222. package/dist/commands/dev/epic/items.js.map +1 -0
  223. package/dist/commands/dev/epic/list.d.ts +36 -0
  224. package/dist/commands/dev/epic/list.d.ts.map +1 -0
  225. package/dist/commands/dev/epic/list.js +120 -0
  226. package/dist/commands/dev/epic/list.js.map +1 -0
  227. package/dist/commands/dev/release/list.d.ts +21 -0
  228. package/dist/commands/dev/release/list.d.ts.map +1 -0
  229. package/dist/commands/dev/release/list.js +73 -0
  230. package/dist/commands/dev/release/list.js.map +1 -0
  231. package/dist/commands/dev/sprint/current.d.ts +24 -0
  232. package/dist/commands/dev/sprint/current.d.ts.map +1 -0
  233. package/dist/commands/dev/sprint/current.js +90 -0
  234. package/dist/commands/dev/sprint/current.js.map +1 -0
  235. package/dist/commands/dev/sprint/items.d.ts +34 -0
  236. package/dist/commands/dev/sprint/items.d.ts.map +1 -0
  237. package/dist/commands/dev/sprint/items.js +118 -0
  238. package/dist/commands/dev/sprint/items.js.map +1 -0
  239. package/dist/commands/dev/sprint/list.d.ts +41 -0
  240. package/dist/commands/dev/sprint/list.d.ts.map +1 -0
  241. package/dist/commands/dev/sprint/list.js +104 -0
  242. package/dist/commands/dev/sprint/list.js.map +1 -0
  243. package/dist/commands/dev/task/block.d.ts +29 -0
  244. package/dist/commands/dev/task/block.d.ts.map +1 -0
  245. package/dist/commands/dev/task/block.js +106 -0
  246. package/dist/commands/dev/task/block.js.map +1 -0
  247. package/dist/commands/dev/task/done.d.ts +30 -0
  248. package/dist/commands/dev/task/done.d.ts.map +1 -0
  249. package/dist/commands/dev/task/done.js +113 -0
  250. package/dist/commands/dev/task/done.js.map +1 -0
  251. package/dist/commands/dev/task/list.d.ts +42 -0
  252. package/dist/commands/dev/task/list.d.ts.map +1 -0
  253. package/dist/commands/dev/task/list.js +227 -0
  254. package/dist/commands/dev/task/list.js.map +1 -0
  255. package/dist/commands/dev/task/start.d.ts +29 -0
  256. package/dist/commands/dev/task/start.d.ts.map +1 -0
  257. package/dist/commands/dev/task/start.js +90 -0
  258. package/dist/commands/dev/task/start.js.map +1 -0
  259. package/dist/commands/emit.d.ts.map +1 -1
  260. package/dist/commands/emit.js +5 -3
  261. package/dist/commands/emit.js.map +1 -1
  262. package/dist/commands/index.d.ts.map +1 -1
  263. package/dist/commands/index.js +95 -0
  264. package/dist/commands/index.js.map +1 -1
  265. package/dist/commands/item/archive.d.ts.map +1 -1
  266. package/dist/commands/item/archive.js +11 -0
  267. package/dist/commands/item/archive.js.map +1 -1
  268. package/dist/commands/item/clear.d.ts.map +1 -1
  269. package/dist/commands/item/clear.js +15 -0
  270. package/dist/commands/item/clear.js.map +1 -1
  271. package/dist/commands/item/create.d.ts.map +1 -1
  272. package/dist/commands/item/create.js +41 -8
  273. package/dist/commands/item/create.js.map +1 -1
  274. package/dist/commands/item/delete.d.ts.map +1 -1
  275. package/dist/commands/item/delete.js +11 -0
  276. package/dist/commands/item/delete.js.map +1 -1
  277. package/dist/commands/item/duplicate.d.ts.map +1 -1
  278. package/dist/commands/item/duplicate.js +12 -0
  279. package/dist/commands/item/duplicate.js.map +1 -1
  280. package/dist/commands/item/history.d.ts +60 -0
  281. package/dist/commands/item/history.d.ts.map +1 -0
  282. package/dist/commands/item/history.js +309 -0
  283. package/dist/commands/item/history.js.map +1 -0
  284. package/dist/commands/item/list.d.ts.map +1 -1
  285. package/dist/commands/item/list.js +16 -13
  286. package/dist/commands/item/list.js.map +1 -1
  287. package/dist/commands/item/move.d.ts.map +1 -1
  288. package/dist/commands/item/move.js +41 -7
  289. package/dist/commands/item/move.js.map +1 -1
  290. package/dist/commands/item/search.d.ts +99 -15
  291. package/dist/commands/item/search.d.ts.map +1 -1
  292. package/dist/commands/item/search.js +480 -36
  293. package/dist/commands/item/search.js.map +1 -1
  294. package/dist/commands/item/set.d.ts.map +1 -1
  295. package/dist/commands/item/set.js +52 -8
  296. package/dist/commands/item/set.js.map +1 -1
  297. package/dist/commands/item/time-track/start.d.ts +61 -0
  298. package/dist/commands/item/time-track/start.d.ts.map +1 -0
  299. package/dist/commands/item/time-track/start.js +138 -0
  300. package/dist/commands/item/time-track/start.js.map +1 -0
  301. package/dist/commands/item/time-track/stop.d.ts +32 -0
  302. package/dist/commands/item/time-track/stop.d.ts.map +1 -0
  303. package/dist/commands/item/time-track/stop.js +97 -0
  304. package/dist/commands/item/time-track/stop.js.map +1 -0
  305. package/dist/commands/item/update.d.ts +1 -0
  306. package/dist/commands/item/update.d.ts.map +1 -1
  307. package/dist/commands/item/update.js +103 -113
  308. package/dist/commands/item/update.js.map +1 -1
  309. package/dist/commands/item/upsert.d.ts.map +1 -1
  310. package/dist/commands/item/upsert.js +48 -1
  311. package/dist/commands/item/upsert.js.map +1 -1
  312. package/dist/commands/notification/send.d.ts +60 -0
  313. package/dist/commands/notification/send.d.ts.map +1 -0
  314. package/dist/commands/notification/send.js +147 -0
  315. package/dist/commands/notification/send.js.map +1 -0
  316. package/dist/commands/parse-argv.d.ts.map +1 -1
  317. package/dist/commands/parse-argv.js +14 -4
  318. package/dist/commands/parse-argv.js.map +1 -1
  319. package/dist/commands/raw/index.d.ts.map +1 -1
  320. package/dist/commands/raw/index.js +13 -15
  321. package/dist/commands/raw/index.js.map +1 -1
  322. package/dist/commands/run-by-id-lookup.d.ts.map +1 -1
  323. package/dist/commands/run-by-id-lookup.js +2 -2
  324. package/dist/commands/run-by-id-lookup.js.map +1 -1
  325. package/dist/commands/schema/index.d.ts +2 -0
  326. package/dist/commands/schema/index.d.ts.map +1 -1
  327. package/dist/commands/status.d.ts +120 -0
  328. package/dist/commands/status.d.ts.map +1 -0
  329. package/dist/commands/status.js +365 -0
  330. package/dist/commands/status.js.map +1 -0
  331. package/dist/commands/update/body-source.d.ts.map +1 -1
  332. package/dist/commands/update/body-source.js +2 -2
  333. package/dist/commands/update/body-source.js.map +1 -1
  334. package/dist/commands/update/create.d.ts +2 -3
  335. package/dist/commands/update/create.d.ts.map +1 -1
  336. package/dist/commands/update/create.js +15 -3
  337. package/dist/commands/update/create.js.map +1 -1
  338. package/dist/commands/update/delete.d.ts.map +1 -1
  339. package/dist/commands/update/delete.js +11 -0
  340. package/dist/commands/update/delete.js.map +1 -1
  341. package/dist/commands/update/edit.d.ts.map +1 -1
  342. package/dist/commands/update/edit.js +11 -0
  343. package/dist/commands/update/edit.js.map +1 -1
  344. package/dist/commands/update/list.d.ts.map +1 -1
  345. package/dist/commands/update/list.js +15 -12
  346. package/dist/commands/update/list.js.map +1 -1
  347. package/dist/commands/update/reply.d.ts.map +1 -1
  348. package/dist/commands/update/reply.js +11 -0
  349. package/dist/commands/update/reply.js.map +1 -1
  350. package/dist/commands/update/toggle.d.ts.map +1 -1
  351. package/dist/commands/update/toggle.js +13 -0
  352. package/dist/commands/update/toggle.js.map +1 -1
  353. package/dist/commands/usage.d.ts +58 -0
  354. package/dist/commands/usage.d.ts.map +1 -0
  355. package/dist/commands/usage.js +94 -0
  356. package/dist/commands/usage.js.map +1 -0
  357. package/dist/commands/webhook/create.d.ts +74 -0
  358. package/dist/commands/webhook/create.d.ts.map +1 -0
  359. package/dist/commands/webhook/create.js +150 -0
  360. package/dist/commands/webhook/create.js.map +1 -0
  361. package/dist/commands/webhook/delete.d.ts +46 -0
  362. package/dist/commands/webhook/delete.d.ts.map +1 -0
  363. package/dist/commands/webhook/delete.js +141 -0
  364. package/dist/commands/webhook/delete.js.map +1 -0
  365. package/dist/commands/webhook/list.d.ts +23 -0
  366. package/dist/commands/webhook/list.d.ts.map +1 -0
  367. package/dist/commands/webhook/list.js +68 -0
  368. package/dist/commands/webhook/list.js.map +1 -0
  369. package/dist/commands/workspace/create.d.ts.map +1 -1
  370. package/dist/commands/workspace/create.js +16 -0
  371. package/dist/commands/workspace/create.js.map +1 -1
  372. package/dist/commands/workspace/delete.d.ts.map +1 -1
  373. package/dist/commands/workspace/delete.js +13 -13
  374. package/dist/commands/workspace/delete.js.map +1 -1
  375. package/dist/commands/workspace/list.d.ts +1 -1
  376. package/dist/commands/workspace/update.d.ts.map +1 -1
  377. package/dist/commands/workspace/update.js +15 -15
  378. package/dist/commands/workspace/update.js.map +1 -1
  379. package/dist/config/credentials.d.ts +189 -0
  380. package/dist/config/credentials.d.ts.map +1 -0
  381. package/dist/config/credentials.js +300 -0
  382. package/dist/config/credentials.js.map +1 -0
  383. package/dist/config/profiles.d.ts +125 -0
  384. package/dist/config/profiles.d.ts.map +1 -0
  385. package/dist/config/profiles.js +227 -0
  386. package/dist/config/profiles.js.map +1 -0
  387. package/dist/types/global-flags.d.ts +1 -1
  388. package/dist/types/global-flags.d.ts.map +1 -1
  389. package/dist/types/global-flags.js +28 -16
  390. package/dist/types/global-flags.js.map +1 -1
  391. package/dist/types/ids.d.ts +2 -0
  392. package/dist/types/ids.d.ts.map +1 -1
  393. package/dist/types/ids.js +5 -3
  394. package/dist/types/ids.js.map +1 -1
  395. package/dist/utils/errors.d.ts +57 -3
  396. package/dist/utils/errors.d.ts.map +1 -1
  397. package/dist/utils/errors.js +69 -2
  398. package/dist/utils/errors.js.map +1 -1
  399. package/dist/utils/fs.d.ts +35 -0
  400. package/dist/utils/fs.d.ts.map +1 -0
  401. package/dist/utils/fs.js +36 -0
  402. package/dist/utils/fs.js.map +1 -0
  403. package/dist/utils/json.d.ts +60 -0
  404. package/dist/utils/json.d.ts.map +1 -0
  405. package/dist/utils/json.js +86 -0
  406. package/dist/utils/json.js.map +1 -0
  407. package/dist/utils/output/ndjson.d.ts +65 -3
  408. package/dist/utils/output/ndjson.d.ts.map +1 -1
  409. package/dist/utils/output/ndjson.js +21 -0
  410. package/dist/utils/output/ndjson.js.map +1 -1
  411. package/dist/utils/redact.d.ts.map +1 -1
  412. package/dist/utils/redact.js +31 -0
  413. package/dist/utils/redact.js.map +1 -1
  414. package/package.json +2 -1
  415. package/dist/commands/account/client-helper.d.ts +0 -37
  416. package/dist/commands/account/client-helper.d.ts.map +0 -1
  417. package/dist/commands/account/client-helper.js +0 -55
  418. package/dist/commands/account/client-helper.js.map +0 -1
@@ -0,0 +1,215 @@
1
+ /**
2
+ * Notification send surface for the v0.3-M27 `monday notification
3
+ * send` verb (`cli-design.md` §2.7 + §4.3 + §13 v0.3 entry;
4
+ * `v0.3-plan.md` §3 M27).
5
+ *
6
+ * **Wire surface (empirical probe 2026-05-12, API `2026-01`).** One
7
+ * Monday GraphQL operation lands here:
8
+ *
9
+ * - `Mutation.create_notification(user_id: ID!, target_id: ID!,
10
+ * target_type: NotificationTargetType!, text: String!)` — returns
11
+ * the created `Notification { id, text }`.
12
+ *
13
+ * **`NotificationTargetType` is a 2-value wire enum: `Post` / `Project`.**
14
+ * Monday's `Post` value targets an Update (sending a notification
15
+ * about a specific post); `Project` targets an Item OR a Board (the
16
+ * wire enum doesn't distinguish). The CLI surface keeps the
17
+ * documented `--target-type item|board` argv vocabulary from
18
+ * cli-design §4.3 — both CLI values map to wire `Project`. The CLI
19
+ * preserves the item-vs-board distinction at the parse boundary
20
+ * for argv-validation discipline and to echo the agent-supplied
21
+ * kind in the output envelope; the CLI does NOT pre-verify that
22
+ * the supplied `--target <id>` actually names the declared kind,
23
+ * and Monday cannot either (the wire enum collapses both kinds to
24
+ * `Project`). Invisible / non-existent targets surface `not_found`
25
+ * at mutation time, but a passing `--target-type item` with a
26
+ * board-shaped ID succeeds and echoes the CLI-declared kind even
27
+ * though the record is a board. Monday's `Post` variant is
28
+ * unreachable at v0.3 — a v0.3.x / v0.4 contract-extension may add
29
+ * `--target-type update` once a clean argv-discriminator design is
30
+ * pinned (cli-design §13 v0.3 entry M27 sub-block carries the
31
+ * deferred note).
32
+ *
33
+ * **`Notification` read shape is minimal (2 fields).** `id` (ID,
34
+ * non-null), `text` (String, nullable). The CLI echoes the input
35
+ * fields (`user_id`, `target_id`, `target_type`) alongside the
36
+ * Monday-side fields so an agent verifies what was sent from a
37
+ * single envelope read.
38
+ *
39
+ * **No new ERROR_CODES (29 stays).** Notification send failures
40
+ * route through the existing codes: `not_found` (target user /
41
+ * `Project` invisible to the token or non-existent — Monday's
42
+ * visibility check; CLI-declared kind vs underlying record is NOT
43
+ * verified), `usage_error` (text empty / malformed argv — invalid
44
+ * `--target-type` enum value or non-numeric `--target` ID),
45
+ * `unauthorized` (token lacks notification scope), `forbidden`
46
+ * (account permissions), `validation_failed` (Monday-side rejection).
47
+ *
48
+ * **Notification send is single-recipient at v0.3** per cli-design
49
+ * §4.3 — the `--user <uid>` flag accepts one ID. Multi-recipient
50
+ * fan-out is a v0.3.x / v0.4 contract-extension (agents needing
51
+ * fan-out call `notification send` N times).
52
+ *
53
+ * **Notification send is not idempotent.** Re-running the verb
54
+ * produces a fresh notification with a new `id` (Monday treats
55
+ * each `create_notification` call as a discrete send). Agents
56
+ * needing send-once-semantics dedup on the CLI side; the verb
57
+ * does not enforce idempotency.
58
+ *
59
+ * **Runtime body (M27 IMPL).** Single `client.raw` round-trip
60
+ * against `mutation CreateNotification` with `operationName:
61
+ * 'CreateNotification'` (R-NEW-37 W2 audit-point). The CLI's
62
+ * 2-value `--target-type` enum collapses to wire `Project` at the
63
+ * runtime boundary; the CLI-side echo (`user_id` / `target_id` /
64
+ * `target_type`) is composed at the parse boundary so the envelope
65
+ * carries both the Monday-minted `id` + the agent-supplied inputs.
66
+ */
67
+ import { z } from 'zod';
68
+ import { unwrapOrThrow } from '../utils/parse-boundary.js';
69
+ import { assertResponseFieldPresent } from './response-root.js';
70
+ import { ApiError } from '../utils/errors.js';
71
+ /**
72
+ * CLI-side `target_type` vocabulary for `monday notification send
73
+ * --target-type <type>`. Both values map to Monday's wire
74
+ * `NotificationTargetType.Project` (which represents both items and
75
+ * boards) — the CLI keeps the item-vs-board distinction for argv
76
+ * validation discipline AND to echo the agent-supplied kind in the
77
+ * output envelope. The pairing of `--target-type` with `--target
78
+ * <id>` is **trusted, not verified**: the CLI validates the enum +
79
+ * numeric ID shape; Monday validates that the target is a visible
80
+ * `Project` (surfacing invisible / non-existent targets as
81
+ * `not_found`); but neither side verifies that the CLI-declared
82
+ * kind matches what the ID actually names — the wire enum
83
+ * collapses both kinds to `Project`. A CLI-side pre-read is
84
+ * deferred (v0.3.x / v0.4 contract-extension if agents need
85
+ * strict-kind enforcement).
86
+ *
87
+ * Monday's wire enum has only two values (`Post` / `Project`); the
88
+ * `Post` value targets Updates and is intentionally not surfaced
89
+ * at v0.3 per cli-design §4.3. A v0.3.x / v0.4 contract-extension
90
+ * may add a CLI third target-type `update` that dispatches to wire
91
+ * `Post`.
92
+ */
93
+ export const NOTIFICATION_TARGET_TYPES = ['item', 'board'];
94
+ export const notificationTargetTypeSchema = z.enum(NOTIFICATION_TARGET_TYPES);
95
+ /**
96
+ * Output shape for `monday notification send --user <uid> --target
97
+ * <iid|bid> --target-type item|board --text <t>`. Carries both the
98
+ * Monday-side fields (`id` of the minted notification, server-echo
99
+ * `text`) and the CLI-side inputs (`user_id`, `target_id`,
100
+ * `target_type`) so an agent verifies what was sent from a single
101
+ * envelope read.
102
+ *
103
+ * `text` is nullable on the wire (Monday's `Notification.text` is
104
+ * `String` not `String!`); we preserve nullability for fidelity even
105
+ * though `create_notification`'s input `text` is non-null. In
106
+ * practice it round-trips the input value.
107
+ */
108
+ export const notificationSendOutputSchema = z
109
+ .object({
110
+ id: z.string().min(1),
111
+ text: z.string().nullable(),
112
+ user_id: z.string().min(1),
113
+ target_id: z.string().min(1),
114
+ target_type: notificationTargetTypeSchema,
115
+ })
116
+ .strict();
117
+ const CREATE_NOTIFICATION_MUTATION = `
118
+ mutation CreateNotification(
119
+ $userId: ID!,
120
+ $targetId: ID!,
121
+ $targetType: NotificationTargetType!,
122
+ $text: String!
123
+ ) {
124
+ create_notification(
125
+ user_id: $userId,
126
+ target_id: $targetId,
127
+ target_type: $targetType,
128
+ text: $text
129
+ ) {
130
+ id
131
+ text
132
+ }
133
+ }
134
+ `;
135
+ const wireNotificationSchema = z
136
+ .object({
137
+ id: z.string().min(1),
138
+ text: z.string().nullable(),
139
+ })
140
+ .strict();
141
+ /**
142
+ * Fires Monday's `create_notification` mutation. Both CLI
143
+ * `--target-type` values (`item`/`board`) map to the wire enum
144
+ * `NotificationTargetType.Project` — Monday's wire surface doesn't
145
+ * distinguish items from boards at the enum level. Monday
146
+ * validates that `target_id` is a visible `Project` (invisible /
147
+ * non-existent targets surface `not_found`) but does NOT verify
148
+ * that the kind matches the CLI-declared `target_type`; the
149
+ * pairing is trusted and echoed but not enforced.
150
+ *
151
+ * The wire payload returns only `{id, text}`; the CLI-side echo
152
+ * (`user_id` / `target_id` / `target_type`) is composed at the
153
+ * caller's parse boundary so the resulting envelope carries both the
154
+ * Monday-minted `id` and the agent-supplied inputs in one read.
155
+ *
156
+ * `operationName: 'CreateNotification'` stays in sync with the named
157
+ * operation in {@link CREATE_NOTIFICATION_MUTATION} (R-NEW-37 W2
158
+ * audit-point). Not idempotent — re-running mints a fresh
159
+ * notification with a new ID.
160
+ */
161
+ export const sendNotification = async (inputs) => {
162
+ // CLI's 2-value enum collapses to wire `Project` (Monday's wire
163
+ // surface has no item-vs-board distinction). The `Post` wire value
164
+ // is unreachable at v0.3 per cli-design §4.3.
165
+ const wireTargetType = 'Project';
166
+ const response = await inputs.client.raw(CREATE_NOTIFICATION_MUTATION, {
167
+ userId: inputs.userId,
168
+ targetId: inputs.targetId,
169
+ targetType: wireTargetType,
170
+ text: inputs.text,
171
+ }, { operationName: 'CreateNotification' });
172
+ assertResponseFieldPresent({
173
+ data: response.data,
174
+ key: 'create_notification',
175
+ operationLabel: 'CreateNotification',
176
+ details: {
177
+ user_id: inputs.userId,
178
+ target_id: inputs.targetId,
179
+ target_type: inputs.targetType,
180
+ },
181
+ nullHandling: 'caller_handles',
182
+ });
183
+ const raw = response.data.create_notification;
184
+ if (raw === null || raw === undefined) {
185
+ throw new ApiError('not_found', `Monday returned no notification payload from create_notification for user ${inputs.userId} on target ${inputs.targetId}`, {
186
+ details: {
187
+ user_id: inputs.userId,
188
+ target_id: inputs.targetId,
189
+ target_type: inputs.targetType,
190
+ },
191
+ });
192
+ }
193
+ const wire = unwrapOrThrow(wireNotificationSchema.safeParse(raw), {
194
+ context: 'Monday `create_notification` response',
195
+ details: {
196
+ user_id: inputs.userId,
197
+ target_id: inputs.targetId,
198
+ target_type: inputs.targetType,
199
+ },
200
+ hint: 'Monday may have amended the `Notification` selection — re-probe and amend `src/api/notifications.ts` if so',
201
+ });
202
+ return {
203
+ notification: {
204
+ id: wire.id,
205
+ text: wire.text,
206
+ user_id: inputs.userId,
207
+ target_id: inputs.targetId,
208
+ target_type: inputs.targetType,
209
+ },
210
+ source: 'live',
211
+ cacheAgeSeconds: null,
212
+ complexity: response.complexity,
213
+ };
214
+ };
215
+ //# sourceMappingURL=notifications.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notifications.js","sourceRoot":"","sources":["../../src/api/notifications.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * `__test_oauth_helper` test seam per cli-design §7.3.4.
3
+ *
4
+ * Substitutes for {@link bindOAuthListener} when the env var
5
+ * `__test_oauth_helper` is set; production code paths never see this
6
+ * helper. The substitution lives in `src/commands/auth/login.ts` —
7
+ * this module exposes the construction primitive.
8
+ *
9
+ * **Fixture file shape** (read from the path the env var holds):
10
+ *
11
+ * ```json
12
+ * {
13
+ * "code": "fixture-code",
14
+ * "force_csrf_mismatch": true,
15
+ * "force_user_denied": true,
16
+ * "force_authorization_failed": {
17
+ * "error": "invalid_scope",
18
+ * "error_description": "requested scope `boards:write` not granted"
19
+ * },
20
+ * "force_listener_timeout": true
21
+ * }
22
+ * ```
23
+ *
24
+ * All four `force_*` flags are mutually exclusive; the first
25
+ * non-undefined slot wins. The fixture **does not** carry `state` —
26
+ * it's randomly generated per invocation; the helper synthesises the
27
+ * redirect with the CLI's own generated `state` echoed back so CSRF
28
+ * verification passes by default.
29
+ *
30
+ * The fixture's PATH (the env var's value) is never echoed to the
31
+ * output envelope, never logged at any verbosity level, and is
32
+ * scrubbed from `--debug` output the same way `MONDAY_API_TOKEN` is.
33
+ */
34
+ import { z } from 'zod';
35
+ import type { OAuthListenerHandle } from './oauth.js';
36
+ /** Env var name the test seam checks. The leading double-underscore
37
+ * discourages production use; tests set it explicitly. */
38
+ export declare const TEST_OAUTH_HELPER_ENV_VAR = "__test_oauth_helper";
39
+ declare const fixtureSchema: z.ZodObject<{
40
+ code: z.ZodString;
41
+ force_csrf_mismatch: z.ZodOptional<z.ZodLiteral<true>>;
42
+ force_user_denied: z.ZodOptional<z.ZodLiteral<true>>;
43
+ force_authorization_failed: z.ZodOptional<z.ZodObject<{
44
+ error: z.ZodString;
45
+ error_description: z.ZodOptional<z.ZodString>;
46
+ }, z.core.$strict>>;
47
+ force_listener_timeout: z.ZodOptional<z.ZodLiteral<true>>;
48
+ }, z.core.$strict>;
49
+ export type TestOAuthFixture = z.infer<typeof fixtureSchema>;
50
+ /**
51
+ * Reads the test-helper fixture file and parses it. Surfaces
52
+ * `config_error` for any failure (file missing, malformed JSON,
53
+ * schema mismatch); a misconfigured test seam should fail loud,
54
+ * not silently fall back to the real listener.
55
+ */
56
+ export declare const readTestOAuthFixture: (fixturePath: string) => Promise<TestOAuthFixture>;
57
+ /**
58
+ * Builds a synthetic {@link OAuthListenerHandle} from the fixture +
59
+ * the CLI's generated `state`. No real socket bind; `awaitRedirect`
60
+ * resolves (or rejects) based on the fixture's `force_*` flags.
61
+ */
62
+ export declare const buildTestOAuthListener: (fixture: TestOAuthFixture, generatedState: string) => OAuthListenerHandle;
63
+ export {};
64
+ //# sourceMappingURL=oauth-test-helper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-test-helper.d.ts","sourceRoot":"","sources":["../../src/api/oauth-test-helper.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,mBAAmB,EAAmB,MAAM,YAAY,CAAC;AAEvE;0DAC0D;AAC1D,eAAO,MAAM,yBAAyB,wBAAwB,CAAC;AAE/D,QAAA,MAAM,aAAa;;;;;;;;;kBAcR,CAAC;AAEZ,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAE7D;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,GAC/B,aAAa,MAAM,KAClB,OAAO,CAAC,gBAAgB,CA6C1B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GACjC,SAAS,gBAAgB,EACzB,gBAAgB,MAAM,KACrB,mBA8FF,CAAC"}
@@ -0,0 +1,179 @@
1
+ /**
2
+ * `__test_oauth_helper` test seam per cli-design §7.3.4.
3
+ *
4
+ * Substitutes for {@link bindOAuthListener} when the env var
5
+ * `__test_oauth_helper` is set; production code paths never see this
6
+ * helper. The substitution lives in `src/commands/auth/login.ts` —
7
+ * this module exposes the construction primitive.
8
+ *
9
+ * **Fixture file shape** (read from the path the env var holds):
10
+ *
11
+ * ```json
12
+ * {
13
+ * "code": "fixture-code",
14
+ * "force_csrf_mismatch": true,
15
+ * "force_user_denied": true,
16
+ * "force_authorization_failed": {
17
+ * "error": "invalid_scope",
18
+ * "error_description": "requested scope `boards:write` not granted"
19
+ * },
20
+ * "force_listener_timeout": true
21
+ * }
22
+ * ```
23
+ *
24
+ * All four `force_*` flags are mutually exclusive; the first
25
+ * non-undefined slot wins. The fixture **does not** carry `state` —
26
+ * it's randomly generated per invocation; the helper synthesises the
27
+ * redirect with the CLI's own generated `state` echoed back so CSRF
28
+ * verification passes by default.
29
+ *
30
+ * The fixture's PATH (the env var's value) is never echoed to the
31
+ * output envelope, never logged at any verbosity level, and is
32
+ * scrubbed from `--debug` output the same way `MONDAY_API_TOKEN` is.
33
+ */
34
+ import { readFile } from 'node:fs/promises';
35
+ import { z } from 'zod';
36
+ import { ApiError, ConfigError, asError } from '../utils/errors.js';
37
+ /** Env var name the test seam checks. The leading double-underscore
38
+ * discourages production use; tests set it explicitly. */
39
+ export const TEST_OAUTH_HELPER_ENV_VAR = '__test_oauth_helper';
40
+ const fixtureSchema = z
41
+ .object({
42
+ code: z.string().min(1),
43
+ force_csrf_mismatch: z.literal(true).optional(),
44
+ force_user_denied: z.literal(true).optional(),
45
+ force_authorization_failed: z
46
+ .object({
47
+ error: z.string().min(1),
48
+ error_description: z.string().optional(),
49
+ })
50
+ .strict()
51
+ .optional(),
52
+ force_listener_timeout: z.literal(true).optional(),
53
+ })
54
+ .strict();
55
+ /**
56
+ * Reads the test-helper fixture file and parses it. Surfaces
57
+ * `config_error` for any failure (file missing, malformed JSON,
58
+ * schema mismatch); a misconfigured test seam should fail loud,
59
+ * not silently fall back to the real listener.
60
+ */
61
+ export const readTestOAuthFixture = async (fixturePath) => {
62
+ let raw;
63
+ try {
64
+ raw = await readFile(fixturePath, 'utf8');
65
+ }
66
+ catch (err) {
67
+ throw new ConfigError(`cannot read __test_oauth_helper fixture at ${fixturePath}`, {
68
+ cause: asError(err),
69
+ details: {
70
+ path: fixturePath,
71
+ hint: 'set __test_oauth_helper to the path of a valid fixture file or unset the env var to use the real OAuth listener',
72
+ },
73
+ });
74
+ }
75
+ let parsed;
76
+ try {
77
+ parsed = JSON.parse(raw);
78
+ }
79
+ catch (err) {
80
+ throw new ConfigError(`__test_oauth_helper fixture at ${fixturePath} is not valid JSON`, {
81
+ cause: asError(err),
82
+ details: { path: fixturePath },
83
+ });
84
+ }
85
+ const result = fixtureSchema.safeParse(parsed);
86
+ if (!result.success) {
87
+ throw new ConfigError(`__test_oauth_helper fixture at ${fixturePath} does not match the documented shape`, {
88
+ cause: result.error,
89
+ details: {
90
+ path: fixturePath,
91
+ issues: result.error.issues.map((i) => ({
92
+ path: i.path.join('.'),
93
+ message: i.message,
94
+ })),
95
+ },
96
+ });
97
+ }
98
+ return result.data;
99
+ };
100
+ /**
101
+ * Builds a synthetic {@link OAuthListenerHandle} from the fixture +
102
+ * the CLI's generated `state`. No real socket bind; `awaitRedirect`
103
+ * resolves (or rejects) based on the fixture's `force_*` flags.
104
+ */
105
+ export const buildTestOAuthListener = (fixture, generatedState) => {
106
+ let resolved = false;
107
+ const handle = {
108
+ port: 0,
109
+ awaitRedirect: () => new Promise((resolve, reject) => {
110
+ if (resolved) {
111
+ // Idempotent — repeat awaits are a programmer error in
112
+ // production, but the test seam guards explicitly so a
113
+ // double-await fails loud rather than hanging forever.
114
+ reject(new ApiError('internal_error', '__test_oauth_helper.awaitRedirect called twice'));
115
+ return;
116
+ }
117
+ resolved = true;
118
+ if (fixture.force_listener_timeout === true) {
119
+ // Mirror the real listener's timeout payload exactly so the
120
+ // command-level error mapping treats both surfaces
121
+ // identically.
122
+ reject(new ApiError('oauth_failed', 'OAuth listener timed out before the redirect arrived (test fixture)', {
123
+ details: {
124
+ reason: 'timeout',
125
+ hint: 're-run `monday auth login` and complete the consent flow within 5 minutes',
126
+ },
127
+ retryable: true,
128
+ }));
129
+ return;
130
+ }
131
+ if (fixture.force_csrf_mismatch === true) {
132
+ // Substitute a different state so the caller's verifyCsrf
133
+ // call fails. Length-equal so the timing-safe path runs
134
+ // (mirrors the production CSRF code path; not just a
135
+ // length-mismatch shortcut).
136
+ const sameLengthDifferentState = generatedState
137
+ .split('')
138
+ .reverse()
139
+ .join('');
140
+ // Ensure it's actually different — if `generatedState` is
141
+ // a palindrome (vanishingly rare), flip the first byte.
142
+ const echoed = sameLengthDifferentState === generatedState
143
+ ? `${String.fromCharCode((generatedState.charCodeAt(0) ^ 1) & 0x7f)}${generatedState.slice(1)}`
144
+ : sameLengthDifferentState;
145
+ resolve({ kind: 'code', code: fixture.code, state: echoed });
146
+ return;
147
+ }
148
+ if (fixture.force_user_denied === true) {
149
+ resolve({
150
+ kind: 'error',
151
+ error: 'access_denied',
152
+ errorDescription: undefined,
153
+ state: generatedState,
154
+ });
155
+ return;
156
+ }
157
+ if (fixture.force_authorization_failed !== undefined) {
158
+ resolve({
159
+ kind: 'error',
160
+ error: fixture.force_authorization_failed.error,
161
+ errorDescription: fixture.force_authorization_failed.error_description,
162
+ state: generatedState,
163
+ });
164
+ return;
165
+ }
166
+ // Default: success path with the CLI's own state echoed back.
167
+ resolve({
168
+ kind: 'code',
169
+ code: fixture.code,
170
+ state: generatedState,
171
+ });
172
+ }),
173
+ close: () => {
174
+ // No-op — no socket to close.
175
+ },
176
+ };
177
+ return handle;
178
+ };
179
+ //# sourceMappingURL=oauth-test-helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-test-helper.js","sourceRoot":"","sources":["../../src/api/oauth-test-helper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,198 @@
1
+ /**
2
+ * OAuth flow primitives for the v0.3-M21 `monday auth login` /
3
+ * `monday auth logout` verbs (cli-design §7.3 / §7.4).
4
+ *
5
+ * **Empirical probe findings (2026-05-10, against `auth.monday.com`):**
6
+ *
7
+ * - `/oauth2/authorize` accepts arbitrary query params and encodes
8
+ * them all into a JWT-signed `oauth_payload_token`, then 302-
9
+ * redirects to `https://auth.monday.com/login?oauth_payload_token=<jwt>`.
10
+ * Extra params like `code_challenge` + `code_challenge_method=S256`
11
+ * are silently round-tripped through the JWT but **not enforced**
12
+ * at token-exchange time — Monday's `/oauth2/token` requires
13
+ * `client_secret` regardless. Verbatim probe response when the
14
+ * PKCE-shape exchange omits `client_secret`:
15
+ * `{"error":"invalid_request","error_description":"Missing client_secret param"}`
16
+ * (status 400). PKCE is therefore **not load-bearing for v0.3**;
17
+ * the design ships without `code_challenge` / `code_verifier`.
18
+ *
19
+ * - `/oauth2/token` rejection responses follow RFC 6749 standard
20
+ * shape (status 400, `application/json; charset=utf-8`):
21
+ * `{"error": "<code>", "error_description": "<text>"}`.
22
+ *
23
+ * - Redirect URI matching is documented as exact (Monday Apps
24
+ * OAuth docs); design ships fixed-port `127.0.0.1:9876`.
25
+ *
26
+ * - Token response shape per Monday's docs:
27
+ * `{access_token, token_type, scope}`. **No `expires_in`**;
28
+ * Monday tokens "do not expire and are valid until the user
29
+ * uninstalls your app".
30
+ *
31
+ * **OAuth client registration (M21 implementation Part 1).**
32
+ * `OAUTH_CLIENT_ID` + `OAUTH_CLIENT_SECRET` are pinned in source
33
+ * per the public-OAuth-client convention — the secret authenticates
34
+ * the *app* (monday-cli), not the user. The user's flow is
35
+ * protected by the per-attempt `state` CSRF token + the listener-
36
+ * bound `redirect_uri`. **Until an OAuth app is registered with
37
+ * Monday's developer portal, the constants below carry placeholder
38
+ * values; production users see `oauth_failed.reason:
39
+ * "code_exchange_failed"` until they're swapped pre-publish.**
40
+ */
41
+ /** Monday Apps OAuth authorize endpoint. */
42
+ export declare const OAUTH_AUTHORIZE_URL = "https://auth.monday.com/oauth2/authorize";
43
+ /** Monday Apps OAuth token-exchange endpoint. */
44
+ export declare const OAUTH_TOKEN_URL = "https://auth.monday.com/oauth2/token";
45
+ /**
46
+ * Default port for the local-loopback OAuth callback listener. Pinned
47
+ * to `9876` to match cli-design §7.3.1 step 2; the OAuth app's
48
+ * redirect URI configuration pins this port.
49
+ */
50
+ export declare const OAUTH_DEFAULT_PORT = 9876;
51
+ /** Path the listener answers; the OAuth app's redirect URI pins this. */
52
+ export declare const OAUTH_CALLBACK_PATH = "/callback";
53
+ /** Default listener timeout: 5 minutes (cli-design §7.3.1 step 4). */
54
+ export declare const OAUTH_DEFAULT_LISTENER_TIMEOUT_MS: number;
55
+ /**
56
+ * **PLACEHOLDER — replace with the registered Monday OAuth app's
57
+ * client_id pre-publish.** Tests do not depend on the value
58
+ * (cassettes intercept `/oauth2/token`); production users hit
59
+ * `oauth_failed.reason: "code_exchange_failed"` until swapped.
60
+ *
61
+ * Register at https://developer.monday.com/apps with redirect URI
62
+ * exactly `http://127.0.0.1:9876/callback`.
63
+ */
64
+ export declare const OAUTH_CLIENT_ID = "<UNREGISTERED_PENDING_OAUTH_APP>";
65
+ /**
66
+ * **PLACEHOLDER — replace alongside {@link OAUTH_CLIENT_ID}.** Same
67
+ * pre-publish swap; see {@link OAUTH_CLIENT_ID} for context.
68
+ */
69
+ export declare const OAUTH_CLIENT_SECRET = "<UNREGISTERED_PENDING_OAUTH_APP>";
70
+ /**
71
+ * Sentinel value the placeholder constants ship as until a Monday
72
+ * OAuth app is registered (see {@link OAUTH_CLIENT_ID} docstring).
73
+ * Exposed as a deliberately-widened `string` so consumers can compare
74
+ * `OAUTH_CLIENT_ID === OAUTH_UNREGISTERED_PLACEHOLDER` without
75
+ * triggering `@typescript-eslint/no-unnecessary-condition` on
76
+ * literal-vs-literal equality. v0.3-plan §8 Decision 11 rejected the
77
+ * v0.3 OAuth swap; the placeholder + guard in
78
+ * `src/commands/auth/login.ts` together surface a clear `usage_error`
79
+ * pointing users at `MONDAY_API_TOKEN` until a future version
80
+ * revisits the OAuth path.
81
+ */
82
+ export declare const OAUTH_UNREGISTERED_PLACEHOLDER: string;
83
+ /**
84
+ * Documented Monday Apps OAuth scopes per Monday's published docs at
85
+ * the M21 pre-flight probe (2026-05-10). Each entry is exposed
86
+ * verbatim so the OAuth-app-registration step (M21 implementation
87
+ * Part 1) can request the subset the CLI actually needs without a
88
+ * second source-of-truth elsewhere.
89
+ */
90
+ export declare const OAUTH_SCOPES: readonly ["account:read", "assets:read", "boards:read", "boards:write", "departments:read", "departments:write", "docs:read", "docs:write", "me:read", "notifications:write", "tags:read", "teams:read", "teams:write", "updates:read", "updates:write", "users:read", "users:write", "webhooks:read", "webhooks:write", "workspaces:read", "workspaces:write"];
91
+ export type OAuthScope = (typeof OAUTH_SCOPES)[number];
92
+ /**
93
+ * The default scope set requested by `monday auth login` — a working
94
+ * subset of {@link OAUTH_SCOPES}. Agents calling `monday auth login`
95
+ * without a `--scopes` flag (v0.4+) pick up these.
96
+ */
97
+ export declare const OAUTH_DEFAULT_REQUESTED_SCOPES: readonly OAuthScope[];
98
+ /**
99
+ * The redirect payload as parsed by the listener.
100
+ */
101
+ export type RedirectPayload = {
102
+ readonly kind: 'code';
103
+ readonly code: string;
104
+ readonly state: string;
105
+ } | {
106
+ readonly kind: 'error';
107
+ readonly error: string;
108
+ readonly errorDescription: string | undefined;
109
+ readonly state: string;
110
+ };
111
+ /**
112
+ * Inputs to {@link bindOAuthListener}. Both fields optional with
113
+ * pinned defaults.
114
+ */
115
+ export interface BindOAuthListenerInputs {
116
+ readonly port?: number;
117
+ readonly timeoutMs?: number;
118
+ }
119
+ /**
120
+ * Handle returned from {@link bindOAuthListener}. Decoupled from
121
+ * `node:http`'s `Server` so tests can substitute a fixture handle
122
+ * without a real socket bind.
123
+ */
124
+ export interface OAuthListenerHandle {
125
+ readonly port: number;
126
+ readonly awaitRedirect: () => Promise<RedirectPayload>;
127
+ readonly close: () => void;
128
+ }
129
+ /**
130
+ * Inputs to {@link exchangeCode}. Mirror Monday's documented
131
+ * `/oauth2/token` body shape verbatim. `clientSecret` is **required**
132
+ * per the empirical probe; PKCE-only is not supported.
133
+ */
134
+ export interface ExchangeCodeInputs {
135
+ readonly code: string;
136
+ readonly redirectUri: string;
137
+ readonly clientId: string;
138
+ readonly clientSecret: string;
139
+ /** Optional fetch-impl override for tests. */
140
+ readonly fetchImpl?: typeof fetch;
141
+ }
142
+ /**
143
+ * Raw `/oauth2/token` success-response body shape per Monday Apps
144
+ * OAuth docs.
145
+ */
146
+ export interface RawTokenResponse {
147
+ readonly access_token: string;
148
+ readonly token_type: string;
149
+ readonly scope: string;
150
+ }
151
+ /**
152
+ * Normalized success-response shape that {@link exchangeCode} returns.
153
+ */
154
+ export interface TokenResponse {
155
+ readonly accessToken: string;
156
+ readonly tokenType: string;
157
+ readonly scope: string;
158
+ }
159
+ /**
160
+ * Generates a 32-byte cryptographically-random `state` token, encoded
161
+ * base64url. Pure helper — no I/O.
162
+ */
163
+ export declare const generateOAuthState: () => string;
164
+ /**
165
+ * Constant-time CSRF comparison. Returns `false` on length mismatch
166
+ * (without throwing — cli-design §7.3.1 step 5 routes that to
167
+ * `csrf_mismatch`, NOT `internal_error`). Returns `false` on the
168
+ * empty-string case.
169
+ */
170
+ export declare const verifyCsrf: (received: string, expected: string) => boolean;
171
+ /**
172
+ * Binds an HTTP listener on `127.0.0.1:<port>`, waits for a single
173
+ * redirect to `${OAUTH_CALLBACK_PATH}?code=…&state=…` (or
174
+ * `?error=…&state=…`), and returns a handle whose `awaitRedirect`
175
+ * resolves with the parsed payload.
176
+ *
177
+ * Failure surfaces:
178
+ * - Bind error (port held by another process or peer
179
+ * `monday auth login`) → reject with `oauth_failed.reason:
180
+ * "port_in_use"`.
181
+ * - 5-minute timer elapses with no redirect → reject with
182
+ * `oauth_failed.reason: "timeout"` (retryable: true; mirrors
183
+ * M2-era cache_error override-at-throw-site precedent).
184
+ */
185
+ export declare const bindOAuthListener: (inputs?: BindOAuthListenerInputs) => Promise<OAuthListenerHandle>;
186
+ /**
187
+ * Posts the authorization code to `OAUTH_TOKEN_URL` and returns the
188
+ * normalized {@link TokenResponse}.
189
+ *
190
+ * Failure surfaces:
191
+ * - 4xx (RFC 6749 standard shape) → throws
192
+ * `oauth_failed.reason: "code_exchange_failed"` carrying
193
+ * `monday_code` + `monday_description`.
194
+ * - 5xx / network error → throws `network_error`.
195
+ * - Malformed success body → throws `internal_error`.
196
+ */
197
+ export declare const exchangeCode: (inputs: ExchangeCodeInputs) => Promise<TokenResponse>;
198
+ //# sourceMappingURL=oauth.d.ts.map