monday-cli 0.2.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 (596) hide show
  1. package/CHANGELOG.md +439 -0
  2. package/LICENSE +21 -0
  3. package/README.md +431 -0
  4. package/dist/api/board-child-finder.d.ts +95 -0
  5. package/dist/api/board-child-finder.d.ts.map +1 -0
  6. package/dist/api/board-child-finder.js +89 -0
  7. package/dist/api/board-child-finder.js.map +1 -0
  8. package/dist/api/board-metadata.d.ts +162 -0
  9. package/dist/api/board-metadata.d.ts.map +1 -0
  10. package/dist/api/board-metadata.js +238 -0
  11. package/dist/api/board-metadata.js.map +1 -0
  12. package/dist/api/board-mutation-invalidation.d.ts +153 -0
  13. package/dist/api/board-mutation-invalidation.d.ts.map +1 -0
  14. package/dist/api/board-mutation-invalidation.js +136 -0
  15. package/dist/api/board-mutation-invalidation.js.map +1 -0
  16. package/dist/api/board-mutation-result.d.ts +97 -0
  17. package/dist/api/board-mutation-result.d.ts.map +1 -0
  18. package/dist/api/board-mutation-result.js +99 -0
  19. package/dist/api/board-mutation-result.js.map +1 -0
  20. package/dist/api/board-projection.d.ts +68 -0
  21. package/dist/api/board-projection.d.ts.map +1 -0
  22. package/dist/api/board-projection.js +79 -0
  23. package/dist/api/board-projection.js.map +1 -0
  24. package/dist/api/cache.d.ts +150 -0
  25. package/dist/api/cache.d.ts.map +1 -0
  26. package/dist/api/cache.js +418 -0
  27. package/dist/api/cache.js.map +1 -0
  28. package/dist/api/client.d.ts +162 -0
  29. package/dist/api/client.d.ts.map +1 -0
  30. package/dist/api/client.js +205 -0
  31. package/dist/api/client.js.map +1 -0
  32. package/dist/api/column-mapping.d.ts +68 -0
  33. package/dist/api/column-mapping.d.ts.map +1 -0
  34. package/dist/api/column-mapping.js +117 -0
  35. package/dist/api/column-mapping.js.map +1 -0
  36. package/dist/api/column-mutation-result.d.ts +136 -0
  37. package/dist/api/column-mutation-result.d.ts.map +1 -0
  38. package/dist/api/column-mutation-result.js +130 -0
  39. package/dist/api/column-mutation-result.js.map +1 -0
  40. package/dist/api/column-types.d.ts +215 -0
  41. package/dist/api/column-types.d.ts.map +1 -0
  42. package/dist/api/column-types.js +195 -0
  43. package/dist/api/column-types.js.map +1 -0
  44. package/dist/api/column-values.d.ts +446 -0
  45. package/dist/api/column-values.d.ts.map +1 -0
  46. package/dist/api/column-values.js +795 -0
  47. package/dist/api/column-values.js.map +1 -0
  48. package/dist/api/columns.d.ts +205 -0
  49. package/dist/api/columns.d.ts.map +1 -0
  50. package/dist/api/columns.js +343 -0
  51. package/dist/api/columns.js.map +1 -0
  52. package/dist/api/complexity.d.ts +90 -0
  53. package/dist/api/complexity.d.ts.map +1 -0
  54. package/dist/api/complexity.js +194 -0
  55. package/dist/api/complexity.js.map +1 -0
  56. package/dist/api/dates.d.ts +150 -0
  57. package/dist/api/dates.d.ts.map +1 -0
  58. package/dist/api/dates.js +490 -0
  59. package/dist/api/dates.js.map +1 -0
  60. package/dist/api/destructive-gate.d.ts +107 -0
  61. package/dist/api/destructive-gate.d.ts.map +1 -0
  62. package/dist/api/destructive-gate.js +19 -0
  63. package/dist/api/destructive-gate.js.map +1 -0
  64. package/dist/api/dry-run.d.ts +338 -0
  65. package/dist/api/dry-run.d.ts.map +1 -0
  66. package/dist/api/dry-run.js +607 -0
  67. package/dist/api/dry-run.js.map +1 -0
  68. package/dist/api/emails.d.ts +60 -0
  69. package/dist/api/emails.d.ts.map +1 -0
  70. package/dist/api/emails.js +113 -0
  71. package/dist/api/emails.js.map +1 -0
  72. package/dist/api/errors.d.ts +82 -0
  73. package/dist/api/errors.d.ts.map +1 -0
  74. package/dist/api/errors.js +434 -0
  75. package/dist/api/errors.js.map +1 -0
  76. package/dist/api/filters.d.ts +198 -0
  77. package/dist/api/filters.d.ts.map +1 -0
  78. package/dist/api/filters.js +328 -0
  79. package/dist/api/filters.js.map +1 -0
  80. package/dist/api/group-color.d.ts +33 -0
  81. package/dist/api/group-color.d.ts.map +1 -0
  82. package/dist/api/group-color.js +80 -0
  83. package/dist/api/group-color.js.map +1 -0
  84. package/dist/api/group-mutation-result.d.ts +150 -0
  85. package/dist/api/group-mutation-result.d.ts.map +1 -0
  86. package/dist/api/group-mutation-result.js +141 -0
  87. package/dist/api/group-mutation-result.js.map +1 -0
  88. package/dist/api/iso-country-codes.d.ts +45 -0
  89. package/dist/api/iso-country-codes.d.ts.map +1 -0
  90. package/dist/api/iso-country-codes.js +71 -0
  91. package/dist/api/iso-country-codes.js.map +1 -0
  92. package/dist/api/item-board-lookup.d.ts +86 -0
  93. package/dist/api/item-board-lookup.d.ts.map +1 -0
  94. package/dist/api/item-board-lookup.js +140 -0
  95. package/dist/api/item-board-lookup.js.map +1 -0
  96. package/dist/api/item-helpers.d.ts +133 -0
  97. package/dist/api/item-helpers.d.ts.map +1 -0
  98. package/dist/api/item-helpers.js +139 -0
  99. package/dist/api/item-helpers.js.map +1 -0
  100. package/dist/api/item-mutation-result.d.ts +60 -0
  101. package/dist/api/item-mutation-result.d.ts.map +1 -0
  102. package/dist/api/item-mutation-result.js +63 -0
  103. package/dist/api/item-mutation-result.js.map +1 -0
  104. package/dist/api/item-projection.d.ts +165 -0
  105. package/dist/api/item-projection.d.ts.map +1 -0
  106. package/dist/api/item-projection.js +235 -0
  107. package/dist/api/item-projection.js.map +1 -0
  108. package/dist/api/item-source-read.d.ts +45 -0
  109. package/dist/api/item-source-read.d.ts.map +1 -0
  110. package/dist/api/item-source-read.js +57 -0
  111. package/dist/api/item-source-read.js.map +1 -0
  112. package/dist/api/items-page-walker.d.ts +126 -0
  113. package/dist/api/items-page-walker.d.ts.map +1 -0
  114. package/dist/api/items-page-walker.js +256 -0
  115. package/dist/api/items-page-walker.js.map +1 -0
  116. package/dist/api/links.d.ts +70 -0
  117. package/dist/api/links.d.ts.map +1 -0
  118. package/dist/api/links.js +128 -0
  119. package/dist/api/links.js.map +1 -0
  120. package/dist/api/me-token.d.ts +52 -0
  121. package/dist/api/me-token.d.ts.map +1 -0
  122. package/dist/api/me-token.js +55 -0
  123. package/dist/api/me-token.js.map +1 -0
  124. package/dist/api/pagination.d.ts +201 -0
  125. package/dist/api/pagination.d.ts.map +1 -0
  126. package/dist/api/pagination.js +223 -0
  127. package/dist/api/pagination.js.map +1 -0
  128. package/dist/api/partial-success-mutation.d.ts +28 -0
  129. package/dist/api/partial-success-mutation.d.ts.map +1 -0
  130. package/dist/api/partial-success-mutation.js +68 -0
  131. package/dist/api/partial-success-mutation.js.map +1 -0
  132. package/dist/api/people.d.ts +182 -0
  133. package/dist/api/people.d.ts.map +1 -0
  134. package/dist/api/people.js +260 -0
  135. package/dist/api/people.js.map +1 -0
  136. package/dist/api/phones.d.ts +74 -0
  137. package/dist/api/phones.d.ts.map +1 -0
  138. package/dist/api/phones.js +167 -0
  139. package/dist/api/phones.js.map +1 -0
  140. package/dist/api/raw-document.d.ts +53 -0
  141. package/dist/api/raw-document.d.ts.map +1 -0
  142. package/dist/api/raw-document.js +177 -0
  143. package/dist/api/raw-document.js.map +1 -0
  144. package/dist/api/raw-write.d.ts +127 -0
  145. package/dist/api/raw-write.d.ts.map +1 -0
  146. package/dist/api/raw-write.js +233 -0
  147. package/dist/api/raw-write.js.map +1 -0
  148. package/dist/api/resolution-context.d.ts +32 -0
  149. package/dist/api/resolution-context.d.ts.map +1 -0
  150. package/dist/api/resolution-context.js +42 -0
  151. package/dist/api/resolution-context.js.map +1 -0
  152. package/dist/api/resolution-pass.d.ts +163 -0
  153. package/dist/api/resolution-pass.d.ts.map +1 -0
  154. package/dist/api/resolution-pass.js +254 -0
  155. package/dist/api/resolution-pass.js.map +1 -0
  156. package/dist/api/resolve-client.d.ts +69 -0
  157. package/dist/api/resolve-client.d.ts.map +1 -0
  158. package/dist/api/resolve-client.js +70 -0
  159. package/dist/api/resolve-client.js.map +1 -0
  160. package/dist/api/resolver-error-fold.d.ts +176 -0
  161. package/dist/api/resolver-error-fold.d.ts.map +1 -0
  162. package/dist/api/resolver-error-fold.js +230 -0
  163. package/dist/api/resolver-error-fold.js.map +1 -0
  164. package/dist/api/resolvers.d.ts +131 -0
  165. package/dist/api/resolvers.d.ts.map +1 -0
  166. package/dist/api/resolvers.js +262 -0
  167. package/dist/api/resolvers.js.map +1 -0
  168. package/dist/api/response-root.d.ts +65 -0
  169. package/dist/api/response-root.d.ts.map +1 -0
  170. package/dist/api/response-root.js +61 -0
  171. package/dist/api/response-root.js.map +1 -0
  172. package/dist/api/retry.d.ts +112 -0
  173. package/dist/api/retry.d.ts.map +1 -0
  174. package/dist/api/retry.js +181 -0
  175. package/dist/api/retry.js.map +1 -0
  176. package/dist/api/set-expression.d.ts +23 -0
  177. package/dist/api/set-expression.d.ts.map +1 -0
  178. package/dist/api/set-expression.js +31 -0
  179. package/dist/api/set-expression.js.map +1 -0
  180. package/dist/api/sort.d.ts +59 -0
  181. package/dist/api/sort.d.ts.map +1 -0
  182. package/dist/api/sort.js +73 -0
  183. package/dist/api/sort.js.map +1 -0
  184. package/dist/api/source-aggregator.d.ts +94 -0
  185. package/dist/api/source-aggregator.d.ts.map +1 -0
  186. package/dist/api/source-aggregator.js +111 -0
  187. package/dist/api/source-aggregator.js.map +1 -0
  188. package/dist/api/transport.d.ts +58 -0
  189. package/dist/api/transport.d.ts.map +1 -0
  190. package/dist/api/transport.js +190 -0
  191. package/dist/api/transport.js.map +1 -0
  192. package/dist/api/update-mutation-result.d.ts +133 -0
  193. package/dist/api/update-mutation-result.d.ts.map +1 -0
  194. package/dist/api/update-mutation-result.js +145 -0
  195. package/dist/api/update-mutation-result.js.map +1 -0
  196. package/dist/api/users-fan-out-mutation.d.ts +124 -0
  197. package/dist/api/users-fan-out-mutation.d.ts.map +1 -0
  198. package/dist/api/users-fan-out-mutation.js +331 -0
  199. package/dist/api/users-fan-out-mutation.js.map +1 -0
  200. package/dist/api/walk-pages.d.ts +91 -0
  201. package/dist/api/walk-pages.d.ts.map +1 -0
  202. package/dist/api/walk-pages.js +84 -0
  203. package/dist/api/walk-pages.js.map +1 -0
  204. package/dist/api/workspace-projection.d.ts +64 -0
  205. package/dist/api/workspace-projection.d.ts.map +1 -0
  206. package/dist/api/workspace-projection.js +83 -0
  207. package/dist/api/workspace-projection.js.map +1 -0
  208. package/dist/cli/envelope-out.d.ts +128 -0
  209. package/dist/cli/envelope-out.d.ts.map +1 -0
  210. package/dist/cli/envelope-out.js +146 -0
  211. package/dist/cli/envelope-out.js.map +1 -0
  212. package/dist/cli/index.d.ts +3 -0
  213. package/dist/cli/index.d.ts.map +1 -0
  214. package/dist/cli/index.js +27 -0
  215. package/dist/cli/index.js.map +1 -0
  216. package/dist/cli/program.d.ts +29 -0
  217. package/dist/cli/program.d.ts.map +1 -0
  218. package/dist/cli/program.js +109 -0
  219. package/dist/cli/program.js.map +1 -0
  220. package/dist/cli/run.d.ts +108 -0
  221. package/dist/cli/run.d.ts.map +1 -0
  222. package/dist/cli/run.js +105 -0
  223. package/dist/cli/run.js.map +1 -0
  224. package/dist/commands/account/client-helper.d.ts +37 -0
  225. package/dist/commands/account/client-helper.d.ts.map +1 -0
  226. package/dist/commands/account/client-helper.js +55 -0
  227. package/dist/commands/account/client-helper.js.map +1 -0
  228. package/dist/commands/account/complexity.d.ts +29 -0
  229. package/dist/commands/account/complexity.d.ts.map +1 -0
  230. package/dist/commands/account/complexity.js +70 -0
  231. package/dist/commands/account/complexity.js.map +1 -0
  232. package/dist/commands/account/info.d.ts +36 -0
  233. package/dist/commands/account/info.d.ts.map +1 -0
  234. package/dist/commands/account/info.js +74 -0
  235. package/dist/commands/account/info.js.map +1 -0
  236. package/dist/commands/account/version.d.ts +44 -0
  237. package/dist/commands/account/version.d.ts.map +1 -0
  238. package/dist/commands/account/version.js +98 -0
  239. package/dist/commands/account/version.js.map +1 -0
  240. package/dist/commands/account/whoami.d.ts +34 -0
  241. package/dist/commands/account/whoami.d.ts.map +1 -0
  242. package/dist/commands/account/whoami.js +77 -0
  243. package/dist/commands/account/whoami.js.map +1 -0
  244. package/dist/commands/board/add-users.d.ts +60 -0
  245. package/dist/commands/board/add-users.d.ts.map +1 -0
  246. package/dist/commands/board/add-users.js +133 -0
  247. package/dist/commands/board/add-users.js.map +1 -0
  248. package/dist/commands/board/archive.d.ts +64 -0
  249. package/dist/commands/board/archive.d.ts.map +1 -0
  250. package/dist/commands/board/archive.js +226 -0
  251. package/dist/commands/board/archive.js.map +1 -0
  252. package/dist/commands/board/column-create.d.ts +146 -0
  253. package/dist/commands/board/column-create.d.ts.map +1 -0
  254. package/dist/commands/board/column-create.js +564 -0
  255. package/dist/commands/board/column-create.js.map +1 -0
  256. package/dist/commands/board/column-delete.d.ts +76 -0
  257. package/dist/commands/board/column-delete.d.ts.map +1 -0
  258. package/dist/commands/board/column-delete.js +224 -0
  259. package/dist/commands/board/column-delete.js.map +1 -0
  260. package/dist/commands/board/column-update.d.ts +92 -0
  261. package/dist/commands/board/column-update.d.ts.map +1 -0
  262. package/dist/commands/board/column-update.js +364 -0
  263. package/dist/commands/board/column-update.js.map +1 -0
  264. package/dist/commands/board/columns.d.ts +30 -0
  265. package/dist/commands/board/columns.d.ts.map +1 -0
  266. package/dist/commands/board/columns.js +102 -0
  267. package/dist/commands/board/columns.js.map +1 -0
  268. package/dist/commands/board/create.d.ts +67 -0
  269. package/dist/commands/board/create.d.ts.map +1 -0
  270. package/dist/commands/board/create.js +226 -0
  271. package/dist/commands/board/create.js.map +1 -0
  272. package/dist/commands/board/delete.d.ts +60 -0
  273. package/dist/commands/board/delete.d.ts.map +1 -0
  274. package/dist/commands/board/delete.js +192 -0
  275. package/dist/commands/board/delete.js.map +1 -0
  276. package/dist/commands/board/describe.d.ts +68 -0
  277. package/dist/commands/board/describe.d.ts.map +1 -0
  278. package/dist/commands/board/describe.js +241 -0
  279. package/dist/commands/board/describe.js.map +1 -0
  280. package/dist/commands/board/doctor.d.ts +108 -0
  281. package/dist/commands/board/doctor.d.ts.map +1 -0
  282. package/dist/commands/board/doctor.js +417 -0
  283. package/dist/commands/board/doctor.js.map +1 -0
  284. package/dist/commands/board/duplicate.d.ts +85 -0
  285. package/dist/commands/board/duplicate.d.ts.map +1 -0
  286. package/dist/commands/board/duplicate.js +281 -0
  287. package/dist/commands/board/duplicate.js.map +1 -0
  288. package/dist/commands/board/find.d.ts +47 -0
  289. package/dist/commands/board/find.d.ts.map +1 -0
  290. package/dist/commands/board/find.js +153 -0
  291. package/dist/commands/board/find.js.map +1 -0
  292. package/dist/commands/board/get.d.ts +41 -0
  293. package/dist/commands/board/get.d.ts.map +1 -0
  294. package/dist/commands/board/get.js +66 -0
  295. package/dist/commands/board/get.js.map +1 -0
  296. package/dist/commands/board/group-archive.d.ts +83 -0
  297. package/dist/commands/board/group-archive.d.ts.map +1 -0
  298. package/dist/commands/board/group-archive.js +264 -0
  299. package/dist/commands/board/group-archive.js.map +1 -0
  300. package/dist/commands/board/group-create.d.ts +118 -0
  301. package/dist/commands/board/group-create.d.ts.map +1 -0
  302. package/dist/commands/board/group-create.js +239 -0
  303. package/dist/commands/board/group-create.js.map +1 -0
  304. package/dist/commands/board/group-delete.d.ts +79 -0
  305. package/dist/commands/board/group-delete.d.ts.map +1 -0
  306. package/dist/commands/board/group-delete.js +222 -0
  307. package/dist/commands/board/group-delete.js.map +1 -0
  308. package/dist/commands/board/group-duplicate.d.ts +70 -0
  309. package/dist/commands/board/group-duplicate.d.ts.map +1 -0
  310. package/dist/commands/board/group-duplicate.js +219 -0
  311. package/dist/commands/board/group-duplicate.js.map +1 -0
  312. package/dist/commands/board/group-update.d.ts +145 -0
  313. package/dist/commands/board/group-update.d.ts.map +1 -0
  314. package/dist/commands/board/group-update.js +341 -0
  315. package/dist/commands/board/group-update.js.map +1 -0
  316. package/dist/commands/board/groups.d.ts +28 -0
  317. package/dist/commands/board/groups.d.ts.map +1 -0
  318. package/dist/commands/board/groups.js +85 -0
  319. package/dist/commands/board/groups.js.map +1 -0
  320. package/dist/commands/board/list.d.ts +39 -0
  321. package/dist/commands/board/list.d.ts.map +1 -0
  322. package/dist/commands/board/list.js +135 -0
  323. package/dist/commands/board/list.js.map +1 -0
  324. package/dist/commands/board/subscribers.d.ts +24 -0
  325. package/dist/commands/board/subscribers.d.ts.map +1 -0
  326. package/dist/commands/board/subscribers.js +89 -0
  327. package/dist/commands/board/subscribers.js.map +1 -0
  328. package/dist/commands/board/update.d.ts +82 -0
  329. package/dist/commands/board/update.d.ts.map +1 -0
  330. package/dist/commands/board/update.js +328 -0
  331. package/dist/commands/board/update.js.map +1 -0
  332. package/dist/commands/cache/clear.d.ts +34 -0
  333. package/dist/commands/cache/clear.d.ts.map +1 -0
  334. package/dist/commands/cache/clear.js +113 -0
  335. package/dist/commands/cache/clear.js.map +1 -0
  336. package/dist/commands/cache/list.d.ts +50 -0
  337. package/dist/commands/cache/list.d.ts.map +1 -0
  338. package/dist/commands/cache/list.js +77 -0
  339. package/dist/commands/cache/list.js.map +1 -0
  340. package/dist/commands/cache/stats.d.ts +22 -0
  341. package/dist/commands/cache/stats.d.ts.map +1 -0
  342. package/dist/commands/cache/stats.js +56 -0
  343. package/dist/commands/cache/stats.js.map +1 -0
  344. package/dist/commands/config/path.d.ts +22 -0
  345. package/dist/commands/config/path.d.ts.map +1 -0
  346. package/dist/commands/config/path.js +74 -0
  347. package/dist/commands/config/path.js.map +1 -0
  348. package/dist/commands/config/show.d.ts +61 -0
  349. package/dist/commands/config/show.d.ts.map +1 -0
  350. package/dist/commands/config/show.js +137 -0
  351. package/dist/commands/config/show.js.map +1 -0
  352. package/dist/commands/emit.d.ts +156 -0
  353. package/dist/commands/emit.d.ts.map +1 -0
  354. package/dist/commands/emit.js +212 -0
  355. package/dist/commands/emit.js.map +1 -0
  356. package/dist/commands/index.d.ts +5 -0
  357. package/dist/commands/index.d.ts.map +1 -0
  358. package/dist/commands/index.js +195 -0
  359. package/dist/commands/index.js.map +1 -0
  360. package/dist/commands/item/archive.d.ts +81 -0
  361. package/dist/commands/item/archive.d.ts.map +1 -0
  362. package/dist/commands/item/archive.js +187 -0
  363. package/dist/commands/item/archive.js.map +1 -0
  364. package/dist/commands/item/clear.d.ts +140 -0
  365. package/dist/commands/item/clear.d.ts.map +1 -0
  366. package/dist/commands/item/clear.js +748 -0
  367. package/dist/commands/item/clear.js.map +1 -0
  368. package/dist/commands/item/create.d.ts +77 -0
  369. package/dist/commands/item/create.d.ts.map +1 -0
  370. package/dist/commands/item/create.js +802 -0
  371. package/dist/commands/item/create.js.map +1 -0
  372. package/dist/commands/item/delete.d.ts +82 -0
  373. package/dist/commands/item/delete.d.ts.map +1 -0
  374. package/dist/commands/item/delete.js +179 -0
  375. package/dist/commands/item/delete.js.map +1 -0
  376. package/dist/commands/item/duplicate.d.ts +117 -0
  377. package/dist/commands/item/duplicate.d.ts.map +1 -0
  378. package/dist/commands/item/duplicate.js +238 -0
  379. package/dist/commands/item/duplicate.js.map +1 -0
  380. package/dist/commands/item/find.d.ts +55 -0
  381. package/dist/commands/item/find.d.ts.map +1 -0
  382. package/dist/commands/item/find.js +231 -0
  383. package/dist/commands/item/find.js.map +1 -0
  384. package/dist/commands/item/get.d.ts +47 -0
  385. package/dist/commands/item/get.d.ts.map +1 -0
  386. package/dist/commands/item/get.js +66 -0
  387. package/dist/commands/item/get.js.map +1 -0
  388. package/dist/commands/item/list.d.ts +73 -0
  389. package/dist/commands/item/list.d.ts.map +1 -0
  390. package/dist/commands/item/list.js +284 -0
  391. package/dist/commands/item/list.js.map +1 -0
  392. package/dist/commands/item/move.d.ts +181 -0
  393. package/dist/commands/item/move.d.ts.map +1 -0
  394. package/dist/commands/item/move.js +560 -0
  395. package/dist/commands/item/move.js.map +1 -0
  396. package/dist/commands/item/search.d.ts +67 -0
  397. package/dist/commands/item/search.d.ts.map +1 -0
  398. package/dist/commands/item/search.js +322 -0
  399. package/dist/commands/item/search.js.map +1 -0
  400. package/dist/commands/item/set.d.ts +88 -0
  401. package/dist/commands/item/set.d.ts.map +1 -0
  402. package/dist/commands/item/set.js +387 -0
  403. package/dist/commands/item/set.js.map +1 -0
  404. package/dist/commands/item/subitems.d.ts +50 -0
  405. package/dist/commands/item/subitems.d.ts.map +1 -0
  406. package/dist/commands/item/subitems.js +86 -0
  407. package/dist/commands/item/subitems.js.map +1 -0
  408. package/dist/commands/item/update.d.ts +99 -0
  409. package/dist/commands/item/update.d.ts.map +1 -0
  410. package/dist/commands/item/update.js +884 -0
  411. package/dist/commands/item/update.js.map +1 -0
  412. package/dist/commands/item/upsert.d.ts +105 -0
  413. package/dist/commands/item/upsert.d.ts.map +1 -0
  414. package/dist/commands/item/upsert.js +998 -0
  415. package/dist/commands/item/upsert.js.map +1 -0
  416. package/dist/commands/parse-argv.d.ts +20 -0
  417. package/dist/commands/parse-argv.d.ts.map +1 -0
  418. package/dist/commands/parse-argv.js +40 -0
  419. package/dist/commands/parse-argv.js.map +1 -0
  420. package/dist/commands/raw/index.d.ts +23 -0
  421. package/dist/commands/raw/index.d.ts.map +1 -0
  422. package/dist/commands/raw/index.js +416 -0
  423. package/dist/commands/raw/index.js.map +1 -0
  424. package/dist/commands/run-by-id-lookup.d.ts +72 -0
  425. package/dist/commands/run-by-id-lookup.d.ts.map +1 -0
  426. package/dist/commands/run-by-id-lookup.js +58 -0
  427. package/dist/commands/run-by-id-lookup.js.map +1 -0
  428. package/dist/commands/schema/index.d.ts +104 -0
  429. package/dist/commands/schema/index.d.ts.map +1 -0
  430. package/dist/commands/schema/index.js +183 -0
  431. package/dist/commands/schema/index.js.map +1 -0
  432. package/dist/commands/types.d.ts +66 -0
  433. package/dist/commands/types.d.ts.map +1 -0
  434. package/dist/commands/types.js +15 -0
  435. package/dist/commands/types.js.map +1 -0
  436. package/dist/commands/update/body-source.d.ts +38 -0
  437. package/dist/commands/update/body-source.d.ts.map +1 -0
  438. package/dist/commands/update/body-source.js +80 -0
  439. package/dist/commands/update/body-source.js.map +1 -0
  440. package/dist/commands/update/clear-all.d.ts +67 -0
  441. package/dist/commands/update/clear-all.d.ts.map +1 -0
  442. package/dist/commands/update/clear-all.js +281 -0
  443. package/dist/commands/update/clear-all.js.map +1 -0
  444. package/dist/commands/update/create.d.ts +51 -0
  445. package/dist/commands/update/create.d.ts.map +1 -0
  446. package/dist/commands/update/create.js +167 -0
  447. package/dist/commands/update/create.js.map +1 -0
  448. package/dist/commands/update/delete.d.ts +53 -0
  449. package/dist/commands/update/delete.d.ts.map +1 -0
  450. package/dist/commands/update/delete.js +148 -0
  451. package/dist/commands/update/delete.js.map +1 -0
  452. package/dist/commands/update/edit.d.ts +37 -0
  453. package/dist/commands/update/edit.d.ts.map +1 -0
  454. package/dist/commands/update/edit.js +129 -0
  455. package/dist/commands/update/edit.js.map +1 -0
  456. package/dist/commands/update/get.d.ts +37 -0
  457. package/dist/commands/update/get.d.ts.map +1 -0
  458. package/dist/commands/update/get.js +92 -0
  459. package/dist/commands/update/get.js.map +1 -0
  460. package/dist/commands/update/like.d.ts +17 -0
  461. package/dist/commands/update/like.d.ts.map +1 -0
  462. package/dist/commands/update/like.js +23 -0
  463. package/dist/commands/update/like.js.map +1 -0
  464. package/dist/commands/update/list.d.ts +58 -0
  465. package/dist/commands/update/list.d.ts.map +1 -0
  466. package/dist/commands/update/list.js +322 -0
  467. package/dist/commands/update/list.js.map +1 -0
  468. package/dist/commands/update/pin.d.ts +17 -0
  469. package/dist/commands/update/pin.d.ts.map +1 -0
  470. package/dist/commands/update/pin.js +23 -0
  471. package/dist/commands/update/pin.js.map +1 -0
  472. package/dist/commands/update/reply.d.ts +47 -0
  473. package/dist/commands/update/reply.d.ts.map +1 -0
  474. package/dist/commands/update/reply.js +149 -0
  475. package/dist/commands/update/reply.js.map +1 -0
  476. package/dist/commands/update/toggle.d.ts +70 -0
  477. package/dist/commands/update/toggle.d.ts.map +1 -0
  478. package/dist/commands/update/toggle.js +118 -0
  479. package/dist/commands/update/toggle.js.map +1 -0
  480. package/dist/commands/update/unlike.d.ts +17 -0
  481. package/dist/commands/update/unlike.d.ts.map +1 -0
  482. package/dist/commands/update/unlike.js +22 -0
  483. package/dist/commands/update/unlike.js.map +1 -0
  484. package/dist/commands/update/unpin.d.ts +17 -0
  485. package/dist/commands/update/unpin.d.ts.map +1 -0
  486. package/dist/commands/update/unpin.js +21 -0
  487. package/dist/commands/update/unpin.js.map +1 -0
  488. package/dist/commands/user/get.d.ts +31 -0
  489. package/dist/commands/user/get.d.ts.map +1 -0
  490. package/dist/commands/user/get.js +81 -0
  491. package/dist/commands/user/get.js.map +1 -0
  492. package/dist/commands/user/list.d.ts +61 -0
  493. package/dist/commands/user/list.d.ts.map +1 -0
  494. package/dist/commands/user/list.js +148 -0
  495. package/dist/commands/user/list.js.map +1 -0
  496. package/dist/commands/user/me.d.ts +17 -0
  497. package/dist/commands/user/me.d.ts.map +1 -0
  498. package/dist/commands/user/me.js +49 -0
  499. package/dist/commands/user/me.js.map +1 -0
  500. package/dist/commands/workspace/add-users.d.ts +76 -0
  501. package/dist/commands/workspace/add-users.d.ts.map +1 -0
  502. package/dist/commands/workspace/add-users.js +154 -0
  503. package/dist/commands/workspace/add-users.js.map +1 -0
  504. package/dist/commands/workspace/create.d.ts +59 -0
  505. package/dist/commands/workspace/create.d.ts.map +1 -0
  506. package/dist/commands/workspace/create.js +163 -0
  507. package/dist/commands/workspace/create.js.map +1 -0
  508. package/dist/commands/workspace/delete.d.ts +67 -0
  509. package/dist/commands/workspace/delete.d.ts.map +1 -0
  510. package/dist/commands/workspace/delete.js +182 -0
  511. package/dist/commands/workspace/delete.js.map +1 -0
  512. package/dist/commands/workspace/folders.d.ts +40 -0
  513. package/dist/commands/workspace/folders.d.ts.map +1 -0
  514. package/dist/commands/workspace/folders.js +124 -0
  515. package/dist/commands/workspace/folders.js.map +1 -0
  516. package/dist/commands/workspace/get.d.ts +35 -0
  517. package/dist/commands/workspace/get.d.ts.map +1 -0
  518. package/dist/commands/workspace/get.js +62 -0
  519. package/dist/commands/workspace/get.js.map +1 -0
  520. package/dist/commands/workspace/list.d.ts +57 -0
  521. package/dist/commands/workspace/list.d.ts.map +1 -0
  522. package/dist/commands/workspace/list.js +125 -0
  523. package/dist/commands/workspace/list.js.map +1 -0
  524. package/dist/commands/workspace/remove-users.d.ts +47 -0
  525. package/dist/commands/workspace/remove-users.d.ts.map +1 -0
  526. package/dist/commands/workspace/remove-users.js +122 -0
  527. package/dist/commands/workspace/remove-users.js.map +1 -0
  528. package/dist/commands/workspace/update.d.ts +68 -0
  529. package/dist/commands/workspace/update.d.ts.map +1 -0
  530. package/dist/commands/workspace/update.js +237 -0
  531. package/dist/commands/workspace/update.js.map +1 -0
  532. package/dist/config/load.d.ts +33 -0
  533. package/dist/config/load.d.ts.map +1 -0
  534. package/dist/config/load.js +81 -0
  535. package/dist/config/load.js.map +1 -0
  536. package/dist/index.d.ts +3 -0
  537. package/dist/index.d.ts.map +1 -0
  538. package/dist/index.js +4 -0
  539. package/dist/index.js.map +1 -0
  540. package/dist/types/global-flags.d.ts +69 -0
  541. package/dist/types/global-flags.d.ts.map +1 -0
  542. package/dist/types/global-flags.js +170 -0
  543. package/dist/types/global-flags.js.map +1 -0
  544. package/dist/types/ids.d.ts +38 -0
  545. package/dist/types/ids.d.ts.map +1 -0
  546. package/dist/types/ids.js +51 -0
  547. package/dist/types/ids.js.map +1 -0
  548. package/dist/types/json.d.ts +60 -0
  549. package/dist/types/json.d.ts.map +1 -0
  550. package/dist/types/json.js +33 -0
  551. package/dist/types/json.js.map +1 -0
  552. package/dist/utils/errors.d.ts +121 -0
  553. package/dist/utils/errors.d.ts.map +1 -0
  554. package/dist/utils/errors.js +264 -0
  555. package/dist/utils/errors.js.map +1 -0
  556. package/dist/utils/logger.d.ts +39 -0
  557. package/dist/utils/logger.d.ts.map +1 -0
  558. package/dist/utils/logger.js +49 -0
  559. package/dist/utils/logger.js.map +1 -0
  560. package/dist/utils/output/envelope.d.ts +140 -0
  561. package/dist/utils/output/envelope.d.ts.map +1 -0
  562. package/dist/utils/output/envelope.js +120 -0
  563. package/dist/utils/output/envelope.js.map +1 -0
  564. package/dist/utils/output/json.d.ts +10 -0
  565. package/dist/utils/output/json.d.ts.map +1 -0
  566. package/dist/utils/output/json.js +12 -0
  567. package/dist/utils/output/json.js.map +1 -0
  568. package/dist/utils/output/ndjson.d.ts +92 -0
  569. package/dist/utils/output/ndjson.d.ts.map +1 -0
  570. package/dist/utils/output/ndjson.js +33 -0
  571. package/dist/utils/output/ndjson.js.map +1 -0
  572. package/dist/utils/output/select.d.ts +22 -0
  573. package/dist/utils/output/select.d.ts.map +1 -0
  574. package/dist/utils/output/select.js +47 -0
  575. package/dist/utils/output/select.js.map +1 -0
  576. package/dist/utils/output/table.d.ts +32 -0
  577. package/dist/utils/output/table.d.ts.map +1 -0
  578. package/dist/utils/output/table.js +133 -0
  579. package/dist/utils/output/table.js.map +1 -0
  580. package/dist/utils/output/text.d.ts +5 -0
  581. package/dist/utils/output/text.d.ts.map +1 -0
  582. package/dist/utils/output/text.js +32 -0
  583. package/dist/utils/output/text.js.map +1 -0
  584. package/dist/utils/parse-boundary.d.ts +53 -0
  585. package/dist/utils/parse-boundary.d.ts.map +1 -0
  586. package/dist/utils/parse-boundary.js +62 -0
  587. package/dist/utils/parse-boundary.js.map +1 -0
  588. package/dist/utils/redact.d.ts +54 -0
  589. package/dist/utils/redact.d.ts.map +1 -0
  590. package/dist/utils/redact.js +154 -0
  591. package/dist/utils/redact.js.map +1 -0
  592. package/dist/utils/request-id.d.ts +17 -0
  593. package/dist/utils/request-id.d.ts.map +1 -0
  594. package/dist/utils/request-id.js +26 -0
  595. package/dist/utils/request-id.js.map +1 -0
  596. package/package.json +87 -0
@@ -0,0 +1,201 @@
1
+ /**
2
+ * Cursor-based pagination walker (`cli-design.md` §2.4 / §5.6,
3
+ * `v0.1-plan.md` §3 M4).
4
+ *
5
+ * The cursor walker is fundamentally different from `walk-pages.ts`'s
6
+ * page-based shape: Monday issues a 60-minute cursor on the *initial*
7
+ * `items_page` call and a stale cursor returns
8
+ * `INVALID_CURSOR_EXCEPTION` (mapped to `stale_cursor` by
9
+ * `api/errors.ts`). The §5.6 contract is **fail-fast on expiry —
10
+ * never silently re-issue the initial query**, because a re-issue
11
+ * between page N and the resumed walk can duplicate or skip items
12
+ * (board mutated, item archived, etc.). That's silent corruption;
13
+ * the design rejects it explicitly.
14
+ *
15
+ * **Result-type discipline (§14 M3 lesson, prophylactic adoption).**
16
+ * `PaginationWalkResult` carries every §6.1 + §6.3 meta slot from
17
+ * day one — `source`, `cacheAgeSeconds`, `complexity`, `warnings`,
18
+ * `nextCursor`, `hasMore`, `totalReturned`. M3's
19
+ * `BoardMetadataLoadResult` and `ResolveColumnWithRefreshResult`
20
+ * both under-budgeted their meta surface and grew during review;
21
+ * M4 starts complete. Cursor-paginated reads always run live
22
+ * (`source: 'live'`, `cacheAgeSeconds: null`) — the fields are
23
+ * present anyway so callers spread them without thinking about the
24
+ * branch.
25
+ *
26
+ * **Streaming hook (`onItem`).** Required for `item list --output
27
+ * ndjson` per §6.3 — items emit per-arrival, not after the whole
28
+ * walk collects. The walker calls `onItem` once per item *in
29
+ * per-page-sorted order* (the sort-by-ID pass per §3.1 #8 happens
30
+ * before the callback fires), then the trailer (the §6.3 `_meta`
31
+ * line) carries `next_cursor` / `has_more` / `total_returned`. If
32
+ * a stale cursor fires mid-walk, `onItem` has already emitted the
33
+ * pre-failure items; the caller produces the error envelope on
34
+ * stderr as documented in §6.3 / §6.5.
35
+ *
36
+ * **Cursor lifetime tracking.** The walker reads `now: () => Date`
37
+ * from inputs — production wires `ctx.clock`, tests inject a
38
+ * deterministic clock. The age is measured from the `now()` value
39
+ * captured *before* the initial request fires (so the test clock
40
+ * controls expiry deterministically; no wall-clock waits). On a
41
+ * mid-walk `stale_cursor` from Monday, the walker enriches the
42
+ * error's `details` with `cursor_age_seconds` /
43
+ * `items_returned_so_far` / `last_item_id` per §5.6.
44
+ */
45
+ import type { MondayResponse } from './client.js';
46
+ import type { Complexity, Warning } from '../utils/output/envelope.js';
47
+ /**
48
+ * Monday's cursor lifetime per `cli-design.md` §2.4 / §5.6.
49
+ * Exported so a `--cursor-lifetime-seconds` flag (if ever added)
50
+ * can shadow it; for v0.1 it's a constant.
51
+ */
52
+ export declare const CURSOR_LIFETIME_SECONDS: number;
53
+ /**
54
+ * Default page size — Monday caps at 500 (§2.4). Most agent queries
55
+ * fit well under this; the walker's caller can override via
56
+ * `pageSize` to reduce per-request payload size when items carry a
57
+ * lot of column-value data.
58
+ */
59
+ export declare const DEFAULT_PAGE_SIZE = 100;
60
+ /**
61
+ * One page response from either `items_page` (initial) or
62
+ * `next_items_page` (subsequent). Caller's projector returns this
63
+ * shape from the GraphQL response; the walker doesn't know the
64
+ * specific GraphQL field path so the inputs decouple the two
65
+ * concerns.
66
+ */
67
+ export interface PaginatedPage<T> {
68
+ readonly items: readonly T[];
69
+ /**
70
+ * `null` when the cursor walk is exhausted; a non-empty string
71
+ * otherwise. Monday's contract: the cursor returned alongside a
72
+ * page is the cursor for the *next* page, not a token covering
73
+ * the page just returned.
74
+ */
75
+ readonly cursor: string | null;
76
+ }
77
+ export interface PaginateInputs<T, R> {
78
+ /**
79
+ * Issues the initial `items_page` request with the supplied
80
+ * effective limit. Variables shape is the caller's concern;
81
+ * `effectiveLimit` is the per-request `limit:` to send on the
82
+ * GraphQL query. Codex M4 pass-2 §1: when `--limit < pageSize`
83
+ * the walker shrinks the request to the remaining budget so
84
+ * Monday's cursor doesn't advance past un-emitted rows.
85
+ */
86
+ readonly fetchInitial: (effectiveLimit: number) => Promise<MondayResponse<R>>;
87
+ /**
88
+ * Issues a `next_items_page(cursor:, limit:)` request with the
89
+ * supplied effective limit. Same rationale as `fetchInitial`.
90
+ */
91
+ readonly fetchNext: (cursor: string, effectiveLimit: number) => Promise<MondayResponse<R>>;
92
+ /**
93
+ * Projects a Monday response into the items + next cursor for one
94
+ * page. Returns `cursor: null` to terminate the walk.
95
+ */
96
+ readonly extractPage: (response: MondayResponse<R>) => PaginatedPage<T>;
97
+ /**
98
+ * Sort key for the per-page §3.1 #8 ascending-by-ID rule. The
99
+ * walker calls this once per item; small projector, runs in
100
+ * memory only.
101
+ */
102
+ readonly getId: (item: T) => string;
103
+ /**
104
+ * Honour the `--all` flag. False → fetch the first page only and
105
+ * return its cursor on the result (caller surfaces `next_cursor`
106
+ * on `meta`).
107
+ */
108
+ readonly all: boolean;
109
+ /**
110
+ * `--limit N` cap on total items collected across the walk. The
111
+ * walker stops mid-page when the cap is reached; the in-flight
112
+ * cursor is preserved on the result so the caller still surfaces
113
+ * `next_cursor` accurately. Undefined / 0 / negative → no cap.
114
+ */
115
+ readonly limit?: number;
116
+ /**
117
+ * Page size used for the GraphQL request — surfaced so the walker
118
+ * can apply the §2.4 ≤500 ceiling once and leave callers passing
119
+ * any value through. Defaults to {@link DEFAULT_PAGE_SIZE}.
120
+ */
121
+ readonly pageSize?: number;
122
+ /**
123
+ * Streaming hook for the NDJSON output mode (§6.3). Called once
124
+ * per emitted item, in the per-page sorted order. `await`ed so
125
+ * a slow downstream consumer (a piped `jq`) backpressures the
126
+ * walker — same shape as Node's writable stream.
127
+ */
128
+ readonly onItem?: (item: T) => void | Promise<void>;
129
+ /**
130
+ * Clock source for cursor-age tracking. Defaults to `Date.now()`
131
+ * via `() => new Date()`; tests inject a deterministic clock to
132
+ * exercise the 60-min expiry boundary without wall-clock waits.
133
+ */
134
+ readonly now?: () => Date;
135
+ }
136
+ export interface PaginationWalkResult<T, R> {
137
+ readonly items: readonly T[];
138
+ /**
139
+ * The final response — used for `meta.complexity`. Always present
140
+ * (even if the walk fetched a single page). Null only when the
141
+ * walk fetched zero pages, which the walker doesn't produce: at
142
+ * least the initial request runs.
143
+ */
144
+ readonly lastResponse: MondayResponse<R>;
145
+ /**
146
+ * Carries the cursor for the *next* page when more remains; null
147
+ * when the walk has run to exhaustion (Monday returned `null`) or
148
+ * stopped early on `--limit`. The walker does *not* pre-eject a
149
+ * cursor when `--all` ran to completion — agents reading
150
+ * `meta.next_cursor: null` know the walk is exhausted.
151
+ */
152
+ readonly nextCursor: string | null;
153
+ /**
154
+ * `true` when `--limit` short-circuited the walk on a still-full
155
+ * page, OR when `--all` was off and the initial page returned a
156
+ * non-null cursor. `false` when the walk ran to exhaustion.
157
+ */
158
+ readonly hasMore: boolean;
159
+ /** Pages actually fetched (1 = initial only). */
160
+ readonly pagesFetched: number;
161
+ /** §6.1 source — always `'live'` for cursor walks. */
162
+ readonly source: 'live';
163
+ /** Always null for cursor walks (no cache hits). */
164
+ readonly cacheAgeSeconds: number | null;
165
+ /**
166
+ * `meta.complexity` from the *last* response that came back —
167
+ * picks the freshest budget snapshot. Null when --verbose wasn't
168
+ * set (Monday only includes complexity when the operation
169
+ * selects it).
170
+ */
171
+ readonly complexity: Complexity | null;
172
+ /**
173
+ * Warnings the walker may surface. Empty in v0.1; reserved so
174
+ * future cap-style truncation (e.g. an aggregate per-walk hour
175
+ * limit) can fold a warning in without changing the result type.
176
+ */
177
+ readonly warnings: readonly Warning[];
178
+ /**
179
+ * Total items returned to the caller (after `--limit`). Mirrors
180
+ * `items.length` when streaming isn't used, but kept as an
181
+ * explicit slot so a future per-item filter (skipping malformed
182
+ * rows) can report a smaller surface than `items.length` would
183
+ * imply.
184
+ */
185
+ readonly totalReturned: number;
186
+ }
187
+ /**
188
+ * Walks a cursor-paginated Monday endpoint. See module header for
189
+ * the §5.6 contract. Throws on the first response that maps to a
190
+ * `stale_cursor` error; the thrown `ApiError` has `details` enriched
191
+ * with `cursor_age_seconds`, `items_returned_so_far`, and
192
+ * `last_item_id`.
193
+ */
194
+ export declare const paginate: <T, R>(inputs: PaginateInputs<T, R>) => Promise<PaginationWalkResult<T, R>>;
195
+ /**
196
+ * Whether the cursor age has exceeded the 60-min lifetime. Exposed
197
+ * as a pure helper so tests can pin the threshold without driving
198
+ * the full walker.
199
+ */
200
+ export declare const isCursorExpired: (ageSeconds: number) => boolean;
201
+ //# sourceMappingURL=pagination.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../../src/api/pagination.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAEvE;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,QAAU,CAAC;AAE/C;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,MAAM,CAAC;AAErC;;;;;;GAMG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC;IAC7B;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAeD,MAAM,WAAW,cAAc,CAAC,CAAC,EAAE,CAAC;IAClC;;;;;;;OAOG;IACH,QAAQ,CAAC,YAAY,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9E;;;OAGG;IACH,QAAQ,CAAC,SAAS,EAAE,CAClB,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,KACnB,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;IAChC;;;OAGG;IACH,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,KAAK,aAAa,CAAC,CAAC,CAAC,CAAC;IACxE;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC;IACpC;;;;OAIG;IACH,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB;;;;;OAKG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD;;;;OAIG;IACH,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,oBAAoB,CAAC,CAAC,EAAE,CAAC;IACxC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC;IAC7B;;;;;OAKG;IACH,QAAQ,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;IACzC;;;;;;OAMG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC;;;;OAIG;IACH,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,iDAAiD;IACjD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,sDAAsD;IACtD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,oDAAoD;IACpD,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IACvC;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAC;IACtC;;;;;;OAMG;IACH,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAID;;;;;;GAMG;AACH,eAAO,MAAM,QAAQ,GAAU,CAAC,EAAE,CAAC,EACjC,QAAQ,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,KAC3B,OAAO,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,CA6HpC,CAAC;AAgGF;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAAI,YAAY,MAAM,KAAG,OACd,CAAC"}
@@ -0,0 +1,223 @@
1
+ /**
2
+ * Cursor-based pagination walker (`cli-design.md` §2.4 / §5.6,
3
+ * `v0.1-plan.md` §3 M4).
4
+ *
5
+ * The cursor walker is fundamentally different from `walk-pages.ts`'s
6
+ * page-based shape: Monday issues a 60-minute cursor on the *initial*
7
+ * `items_page` call and a stale cursor returns
8
+ * `INVALID_CURSOR_EXCEPTION` (mapped to `stale_cursor` by
9
+ * `api/errors.ts`). The §5.6 contract is **fail-fast on expiry —
10
+ * never silently re-issue the initial query**, because a re-issue
11
+ * between page N and the resumed walk can duplicate or skip items
12
+ * (board mutated, item archived, etc.). That's silent corruption;
13
+ * the design rejects it explicitly.
14
+ *
15
+ * **Result-type discipline (§14 M3 lesson, prophylactic adoption).**
16
+ * `PaginationWalkResult` carries every §6.1 + §6.3 meta slot from
17
+ * day one — `source`, `cacheAgeSeconds`, `complexity`, `warnings`,
18
+ * `nextCursor`, `hasMore`, `totalReturned`. M3's
19
+ * `BoardMetadataLoadResult` and `ResolveColumnWithRefreshResult`
20
+ * both under-budgeted their meta surface and grew during review;
21
+ * M4 starts complete. Cursor-paginated reads always run live
22
+ * (`source: 'live'`, `cacheAgeSeconds: null`) — the fields are
23
+ * present anyway so callers spread them without thinking about the
24
+ * branch.
25
+ *
26
+ * **Streaming hook (`onItem`).** Required for `item list --output
27
+ * ndjson` per §6.3 — items emit per-arrival, not after the whole
28
+ * walk collects. The walker calls `onItem` once per item *in
29
+ * per-page-sorted order* (the sort-by-ID pass per §3.1 #8 happens
30
+ * before the callback fires), then the trailer (the §6.3 `_meta`
31
+ * line) carries `next_cursor` / `has_more` / `total_returned`. If
32
+ * a stale cursor fires mid-walk, `onItem` has already emitted the
33
+ * pre-failure items; the caller produces the error envelope on
34
+ * stderr as documented in §6.3 / §6.5.
35
+ *
36
+ * **Cursor lifetime tracking.** The walker reads `now: () => Date`
37
+ * from inputs — production wires `ctx.clock`, tests inject a
38
+ * deterministic clock. The age is measured from the `now()` value
39
+ * captured *before* the initial request fires (so the test clock
40
+ * controls expiry deterministically; no wall-clock waits). On a
41
+ * mid-walk `stale_cursor` from Monday, the walker enriches the
42
+ * error's `details` with `cursor_age_seconds` /
43
+ * `items_returned_so_far` / `last_item_id` per §5.6.
44
+ */
45
+ import { ApiError } from '../utils/errors.js';
46
+ import { sortByIdAsc } from './sort.js';
47
+ /**
48
+ * Monday's cursor lifetime per `cli-design.md` §2.4 / §5.6.
49
+ * Exported so a `--cursor-lifetime-seconds` flag (if ever added)
50
+ * can shadow it; for v0.1 it's a constant.
51
+ */
52
+ export const CURSOR_LIFETIME_SECONDS = 60 * 60;
53
+ /**
54
+ * Default page size — Monday caps at 500 (§2.4). Most agent queries
55
+ * fit well under this; the walker's caller can override via
56
+ * `pageSize` to reduce per-request payload size when items carry a
57
+ * lot of column-value data.
58
+ */
59
+ export const DEFAULT_PAGE_SIZE = 100;
60
+ const wallClock = () => new Date();
61
+ /**
62
+ * Walks a cursor-paginated Monday endpoint. See module header for
63
+ * the §5.6 contract. Throws on the first response that maps to a
64
+ * `stale_cursor` error; the thrown `ApiError` has `details` enriched
65
+ * with `cursor_age_seconds`, `items_returned_so_far`, and
66
+ * `last_item_id`.
67
+ */
68
+ export const paginate = async (inputs) => {
69
+ const now = inputs.now ?? wallClock;
70
+ const startedAt = now();
71
+ const limit = (inputs.limit ?? 0) > 0 ? inputs.limit : undefined;
72
+ // Use the page size for diagnostics only — the actual request body
73
+ // is the caller's concern (it lives on `fetchInitial` / `fetchNext`).
74
+ // We still cap at 500 here as a forward-looking sanity check; if a
75
+ // future caller passes 1000, we want a deterministic crash, not a
76
+ // silent Monday-side rejection that's harder to debug.
77
+ const pageSize = Math.min(inputs.pageSize ?? DEFAULT_PAGE_SIZE, 500);
78
+ if (pageSize <= 0) {
79
+ throw new ApiError('internal_error', `paginate: pageSize must be positive, got ${String(pageSize)}`);
80
+ }
81
+ const collected = [];
82
+ let pagesFetched;
83
+ let lastResponse;
84
+ let cursor;
85
+ /**
86
+ * Per-call effective limit = `min(pageSize, remainingBudget)` so
87
+ * Monday's cursor advances over exactly the rows the walker emits.
88
+ * Without this, `--limit 2 --page-size 100` fetches 100 items,
89
+ * emits 2, and reports a cursor pointing past row 100 — agents
90
+ * resuming would skip rows 3-100 (Codex M4 pass-2 §1).
91
+ */
92
+ const callLimit = (collectedSoFar) => {
93
+ if (limit === undefined)
94
+ return pageSize;
95
+ const remaining = limit - collectedSoFar;
96
+ return remaining < pageSize ? remaining : pageSize;
97
+ };
98
+ // Initial request always runs. Wrap so a stale_cursor on the
99
+ // *initial* request still gets the standard envelope (Monday is
100
+ // unlikely to return that here — you'd have to re-use a cursor
101
+ // across processes — but the contract is symmetric).
102
+ try {
103
+ const first = await fetchPage(() => inputs.fetchInitial(callLimit(0)), inputs.extractPage);
104
+ lastResponse = first.response;
105
+ pagesFetched = 1;
106
+ const sorted = sortByIdAsc(first.page.items, inputs.getId);
107
+ const firstOutcome = await emitItems(sorted, collected, limit, inputs.onItem);
108
+ cursor = first.page.cursor;
109
+ // Caller asked for one page only. Surface the cursor verbatim;
110
+ // hasMore reflects whether Monday says there's more to read OR
111
+ // whether `--limit` truncated the page.
112
+ if (!inputs.all) {
113
+ return finish(collected, lastResponse, cursor, cursor !== null || firstOutcome.truncated, pagesFetched);
114
+ }
115
+ // `--limit` short-circuited mid-page (or exactly at boundary).
116
+ // Surface the in-flight cursor so the caller can resume; emit
117
+ // `hasMore: true` even when `next_cursor` is null because the
118
+ // truncation itself means more rows exist on this page.
119
+ if (limit !== undefined && collected.length >= limit) {
120
+ return finish(collected, lastResponse, cursor, cursor !== null || firstOutcome.truncated, pagesFetched);
121
+ }
122
+ // Walk until cursor exhaustion or limit hit.
123
+ while (cursor !== null) {
124
+ const cursorAt = cursor;
125
+ try {
126
+ const next = await fetchPage(() => inputs.fetchNext(cursorAt, callLimit(collected.length)), inputs.extractPage);
127
+ lastResponse = next.response;
128
+ pagesFetched++;
129
+ const sortedNext = sortByIdAsc(next.page.items, inputs.getId);
130
+ const outcome = await emitItems(sortedNext, collected, limit, inputs.onItem);
131
+ cursor = next.page.cursor;
132
+ if (limit !== undefined && collected.length >= limit) {
133
+ return finish(collected, lastResponse, cursor, cursor !== null || outcome.truncated, pagesFetched);
134
+ }
135
+ }
136
+ catch (err) {
137
+ if (err instanceof ApiError && err.code === 'stale_cursor') {
138
+ throw enrichStaleCursor(err, {
139
+ startedAt,
140
+ now,
141
+ collected,
142
+ getId: inputs.getId,
143
+ });
144
+ }
145
+ throw err;
146
+ }
147
+ }
148
+ return finish(collected, lastResponse, null, false, pagesFetched);
149
+ }
150
+ catch (err) {
151
+ if (err instanceof ApiError && err.code === 'stale_cursor') {
152
+ throw enrichStaleCursor(err, {
153
+ startedAt,
154
+ now,
155
+ collected,
156
+ getId: inputs.getId,
157
+ });
158
+ }
159
+ throw err;
160
+ }
161
+ };
162
+ const fetchPage = async (fetcher, extract) => {
163
+ const response = await fetcher();
164
+ return { response, page: extract(response) };
165
+ };
166
+ const emitItems = async (pageItems, collected, limit, onItem) => {
167
+ for (let i = 0; i < pageItems.length; i++) {
168
+ if (limit !== undefined && collected.length >= limit) {
169
+ // Items past index i are unconsumed — page had more than the
170
+ // remaining budget allowed.
171
+ return { truncated: i < pageItems.length };
172
+ }
173
+ const item = pageItems[i];
174
+ collected.push(item);
175
+ if (onItem !== undefined) {
176
+ await onItem(item);
177
+ }
178
+ }
179
+ return { truncated: false };
180
+ };
181
+ const finish = (items, lastResponse, nextCursor, hasMore, pagesFetched) => ({
182
+ items,
183
+ lastResponse,
184
+ nextCursor,
185
+ hasMore,
186
+ pagesFetched,
187
+ source: 'live',
188
+ cacheAgeSeconds: null,
189
+ complexity: lastResponse.complexity,
190
+ warnings: [],
191
+ totalReturned: items.length,
192
+ });
193
+ const enrichStaleCursor = (err, ctx) => {
194
+ const ageMs = ctx.now().getTime() - ctx.startedAt.getTime();
195
+ const cursor_age_seconds = Math.max(0, Math.floor(ageMs / 1000));
196
+ const last = ctx.collected[ctx.collected.length - 1];
197
+ const last_item_id = last === undefined ? null : ctx.getId(last);
198
+ const merged = {
199
+ ...(err.details ?? {}),
200
+ cursor_age_seconds,
201
+ cursor_lifetime_seconds: CURSOR_LIFETIME_SECONDS,
202
+ items_returned_so_far: ctx.collected.length,
203
+ last_item_id,
204
+ };
205
+ // Re-throw with the same code/message but enriched details.
206
+ // Keeping the original message verbatim so agents key off `code`
207
+ // and humans see Monday's prose.
208
+ return new ApiError('stale_cursor', err.message, {
209
+ ...(err.httpStatus === undefined ? {} : { httpStatus: err.httpStatus }),
210
+ ...(err.mondayCode === undefined ? {} : { mondayCode: err.mondayCode }),
211
+ ...(err.requestId === undefined ? {} : { requestId: err.requestId }),
212
+ retryable: false,
213
+ details: merged,
214
+ cause: err,
215
+ });
216
+ };
217
+ /**
218
+ * Whether the cursor age has exceeded the 60-min lifetime. Exposed
219
+ * as a pure helper so tests can pin the threshold without driving
220
+ * the full walker.
221
+ */
222
+ export const isCursorExpired = (ageSeconds) => ageSeconds >= CURSOR_LIFETIME_SECONDS;
223
+ //# sourceMappingURL=pagination.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../src/api/pagination.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /** A per-target result inside `data.results: [...]`. */
2
+ export interface PartialSuccessResult {
3
+ readonly ok: boolean;
4
+ readonly error?: {
5
+ readonly code: string;
6
+ readonly message: string;
7
+ };
8
+ readonly [key: string]: unknown;
9
+ }
10
+ export interface PartialSuccessEnvelopeData {
11
+ readonly results: readonly PartialSuccessResult[];
12
+ }
13
+ /**
14
+ * Sequential per-target dispatch with shared error decoration. Each
15
+ * dispatch failure is captured into the result record's `error: {code,
16
+ * message}` slot rather than thrown — a per-target failure doesn't
17
+ * abort the loop. The whole-call contract: if dispatch ran, the
18
+ * envelope is `ok: true` regardless of per-target outcomes.
19
+ *
20
+ * Errors thrown that aren't `MondayCliError` propagate up — those are
21
+ * programmer bugs, not Monday-side failures, and the runner's catch-
22
+ * all maps them to `internal_error`.
23
+ */
24
+ export interface DispatchOneTargetInputs<TargetId extends string> {
25
+ readonly targetId: TargetId;
26
+ }
27
+ export declare const dispatchSequential: <TargetId extends string>(targets: readonly TargetId[], idField: string, dispatch: (inputs: DispatchOneTargetInputs<TargetId>) => Promise<void>) => Promise<readonly PartialSuccessResult[]>;
28
+ //# sourceMappingURL=partial-success-mutation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"partial-success-mutation.d.ts","sourceRoot":"","sources":["../../src/api/partial-success-mutation.ts"],"names":[],"mappings":"AAuBA,wDAAwD;AACxD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,KAAK,CAAC,EAAE;QACf,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;KAC1B,CAAC;IAIF,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACjC;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,OAAO,EAAE,SAAS,oBAAoB,EAAE,CAAC;CACnD;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,uBAAuB,CAAC,QAAQ,SAAS,MAAM;IAC9D,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;CAC7B;AAED,eAAO,MAAM,kBAAkB,GAAU,QAAQ,SAAS,MAAM,EAC9D,SAAS,SAAS,QAAQ,EAAE,EAC5B,SAAS,MAAM,EACf,UAAU,CAAC,MAAM,EAAE,uBAAuB,CAAC,QAAQ,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,KACrE,OAAO,CAAC,SAAS,oBAAoB,EAAE,CAqCzC,CAAC"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Partial-success mutation envelope builder (`cli-design.md` §6.4 +
3
+ * `v0.2-plan.md` §1 universal partial-success rule).
4
+ *
5
+ * Multi-target mutations (M13 `update clear-all`; M14 `workspace
6
+ * add-users` / `remove-users`; M15 `board add-users`) dispatch one
7
+ * wire call per target inside a sequential loop. The CLI emits **one
8
+ * success envelope** (`ok: true`) with per-target outcomes in
9
+ * `data.results: [...]`; each per-target record carries
10
+ * `{<target_id_field>: string, ok: true | false, error?: { code,
11
+ * message }}`. The id-field name is verb-specific (parameterised here
12
+ * via `idField`) so the JSON is self-documenting — `update_id` for
13
+ * `update clear-all`, `user_id` for the add/remove-users family.
14
+ *
15
+ * **Universal rule**: the envelope is always `ok: true` when dispatch
16
+ * ran. Top-level `ok: false` is reserved for whole-call failure
17
+ * (couldn't reach API, couldn't resolve any target before the loop
18
+ * began, an unrecoverable validation error before dispatch). All-
19
+ * failed-but-each-call-attempted is still `ok: true` — the agent
20
+ * reads `data.results` to determine outcomes.
21
+ */
22
+ import { MondayCliError } from '../utils/errors.js';
23
+ export const dispatchSequential = async (targets, idField, dispatch) => {
24
+ const results = [];
25
+ for (const targetId of targets) {
26
+ try {
27
+ await dispatch({ targetId });
28
+ // Build the result with the dynamic id-field name. Property
29
+ // assignment preserves insertion order (`<idField>` first, then
30
+ // `ok`) so the JSON shape stays stable across runs.
31
+ const ok = {
32
+ [idField]: targetId,
33
+ ok: true,
34
+ };
35
+ results.push(ok);
36
+ }
37
+ catch (err) {
38
+ if (err instanceof MondayCliError) {
39
+ // Codex M14 round-2 F1: `internal_error` codes signal CLI
40
+ // bugs or Monday-side schema drift (e.g. response missing
41
+ // the mutation root key). Those are whole-call failures
42
+ // — papering over them with a per-record slot would hide
43
+ // the malformed-response signal that agents need to know
44
+ // about. Re-throw so the runner's catch-all surfaces it
45
+ // as the documented internal_error envelope.
46
+ if (err.code === 'internal_error')
47
+ throw err;
48
+ const failed = {
49
+ [idField]: targetId,
50
+ ok: false,
51
+ error: { code: err.code, message: err.message },
52
+ };
53
+ results.push(failed);
54
+ continue;
55
+ }
56
+ // Non-CLI errors are programmer bugs — let the runner catch-all
57
+ // surface as `internal_error`.
58
+ throw err;
59
+ }
60
+ }
61
+ return results;
62
+ };
63
+ // The output schema lives per-verb because the id-field key (`update_
64
+ // id` / `user_id` / etc.) is dynamic and zod doesn't synthesise
65
+ // per-call object keys cleanly. M14 will re-evaluate whether a schema
66
+ // factory pulls weight; today each consumer writes a 6-line zod
67
+ // schema and pays nothing for the duplication.
68
+ //# sourceMappingURL=partial-success-mutation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"partial-success-mutation.js","sourceRoot":"","sources":["../../src/api/partial-success-mutation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAkCpD,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EACrC,OAA4B,EAC5B,OAAe,EACf,QAAsE,EAC5B,EAAE;IAC5C,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,KAAK,MAAM,QAAQ,IAAI,OAAO,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC7B,4DAA4D;YAC5D,gEAAgE;YAChE,oDAAoD;YACpD,MAAM,EAAE,GAAyB;gBAC/B,CAAC,OAAO,CAAC,EAAE,QAAQ;gBACnB,EAAE,EAAE,IAAI;aACT,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnB,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,IAAI,GAAG,YAAY,cAAc,EAAE,CAAC;gBAClC,0DAA0D;gBAC1D,0DAA0D;gBAC1D,wDAAwD;gBACxD,yDAAyD;gBACzD,yDAAyD;gBACzD,wDAAwD;gBACxD,6CAA6C;gBAC7C,IAAI,GAAG,CAAC,IAAI,KAAK,gBAAgB;oBAAE,MAAM,GAAG,CAAC;gBAC7C,MAAM,MAAM,GAAyB;oBACnC,CAAC,OAAO,CAAC,EAAE,QAAQ;oBACnB,EAAE,EAAE,KAAK;oBACT,KAAK,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE;iBAChD,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACrB,SAAS;YACX,CAAC;YACD,gEAAgE;YAChE,+BAA+B;YAC/B,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEF,sEAAsE;AACtE,gEAAgE;AAChE,sEAAsE;AACtE,gEAAgE;AAChE,+CAA+C"}