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,162 @@
1
+ /**
2
+ * Board metadata loader (`v0.1-plan.md` §3 M3, `cli-design.md` §8).
3
+ *
4
+ * Single source of truth for "what columns / groups / kind does this
5
+ * board have?" — the shape every M3+ command that resolves a column
6
+ * token, prints `board describe`, or maps a `--where` clause needs.
7
+ * The data is cached on disk via `api/cache.ts` (5-minute default TTL,
8
+ * `--no-cache` bypasses) and the cache miss path issues a single
9
+ * GraphQL call against the raw `client.raw<T>` escape hatch — the
10
+ * SDK's typed `boards` query doesn't expose `hierarchy_type` /
11
+ * `is_leaf`, both of which the design's "describe" output requires
12
+ * (`cli-design.md` §2.8).
13
+ *
14
+ * The cache layer holds Monday-shape JSON; this module is the *only*
15
+ * place that reshapes Monday's response into the projected
16
+ * `BoardMetadata` form. Keeping the shape stable here means a future
17
+ * SDK bump that adds optional fields doesn't ripple into 14 commands —
18
+ * `boardMetadataSchema.parse` is the parse boundary, and the cache
19
+ * envelope's `schema_version` (cache.ts) gates older payloads.
20
+ *
21
+ * **Auto-refresh-on-failure semantics.** Two cache-miss-style paths:
22
+ *
23
+ * 1. Cache absent / expired → fetch live, write cache, return.
24
+ * 2. Cache present but caller's lookup against it failed (e.g.
25
+ * column token didn't match anything) → refresh once, return
26
+ * the new metadata. Callers (`columns.ts`) decide whether the
27
+ * second lookup succeeded; this module just promises that
28
+ * `loadBoardMetadata({ refresh: true })` bypasses the cache.
29
+ *
30
+ * `--no-cache` is a stronger signal — it skips the on-disk read
31
+ * entirely *and* skips the post-fetch write. Useful for `monday board
32
+ * describe --no-cache <bid>` when the agent suspects on-disk drift.
33
+ */
34
+ import { z } from 'zod';
35
+ import type { MondayClient } from './client.js';
36
+ import { type BoardId } from '../types/ids.js';
37
+ import type { Complexity } from '../utils/output/envelope.js';
38
+ declare const groupSchema: z.ZodObject<{
39
+ id: z.ZodString;
40
+ title: z.ZodString;
41
+ color: z.ZodNullable<z.ZodString>;
42
+ position: z.ZodNullable<z.ZodString>;
43
+ archived: z.ZodNullable<z.ZodBoolean>;
44
+ deleted: z.ZodNullable<z.ZodBoolean>;
45
+ }, z.core.$strict>;
46
+ declare const columnSchema: z.ZodObject<{
47
+ id: z.ZodString;
48
+ title: z.ZodString;
49
+ type: z.ZodString;
50
+ description: z.ZodNullable<z.ZodString>;
51
+ archived: z.ZodNullable<z.ZodBoolean>;
52
+ settings_str: z.ZodNullable<z.ZodString>;
53
+ width: z.ZodNullable<z.ZodNumber>;
54
+ }, z.core.$strict>;
55
+ export declare const boardMetadataSchema: z.ZodObject<{
56
+ id: z.ZodString;
57
+ name: z.ZodString;
58
+ description: z.ZodNullable<z.ZodString>;
59
+ state: z.ZodNullable<z.ZodString>;
60
+ board_kind: z.ZodNullable<z.ZodString>;
61
+ board_folder_id: z.ZodNullable<z.ZodString>;
62
+ workspace_id: z.ZodNullable<z.ZodString>;
63
+ url: z.ZodNullable<z.ZodString>;
64
+ hierarchy_type: z.ZodNullable<z.ZodString>;
65
+ is_leaf: z.ZodNullable<z.ZodBoolean>;
66
+ items_count: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
67
+ permissions: z.ZodOptional<z.ZodNullable<z.ZodString>>;
68
+ updated_at: z.ZodNullable<z.ZodString>;
69
+ groups: z.ZodArray<z.ZodObject<{
70
+ id: z.ZodString;
71
+ title: z.ZodString;
72
+ color: z.ZodNullable<z.ZodString>;
73
+ position: z.ZodNullable<z.ZodString>;
74
+ archived: z.ZodNullable<z.ZodBoolean>;
75
+ deleted: z.ZodNullable<z.ZodBoolean>;
76
+ }, z.core.$strict>>;
77
+ columns: z.ZodArray<z.ZodObject<{
78
+ id: z.ZodString;
79
+ title: z.ZodString;
80
+ type: z.ZodString;
81
+ description: z.ZodNullable<z.ZodString>;
82
+ archived: z.ZodNullable<z.ZodBoolean>;
83
+ settings_str: z.ZodNullable<z.ZodString>;
84
+ width: z.ZodNullable<z.ZodNumber>;
85
+ }, z.core.$strict>>;
86
+ }, z.core.$strict>;
87
+ export type BoardMetadata = z.infer<typeof boardMetadataSchema>;
88
+ export type BoardColumn = z.infer<typeof columnSchema>;
89
+ export type BoardGroup = z.infer<typeof groupSchema>;
90
+ export interface LoadBoardMetadataInputs {
91
+ readonly client: MondayClient;
92
+ readonly boardId: BoardId | string;
93
+ /** Source for the cache root — defaults to `process.env`. */
94
+ readonly env?: NodeJS.ProcessEnv;
95
+ /**
96
+ * `--no-cache`: skip the on-disk read + write entirely. Live fetch
97
+ * always happens; the result is returned unchanged. Defaults to
98
+ * false.
99
+ */
100
+ readonly noCache?: boolean;
101
+ /**
102
+ * Force a live fetch even when the cache holds a fresh entry; the
103
+ * fresh response is written back to cache. `columns.ts` uses this
104
+ * to retry once on `column_not_found` before surfacing the error.
105
+ */
106
+ readonly refresh?: boolean;
107
+ /**
108
+ * Override TTL in seconds. Defaults to the cache module's 5-minute
109
+ * baseline. Passed through to `readEntry` only.
110
+ */
111
+ readonly ttlSeconds?: number;
112
+ /**
113
+ * Now provider, threaded through to the cache module so age
114
+ * calculations are deterministic in tests.
115
+ */
116
+ readonly now?: () => Date;
117
+ }
118
+ /**
119
+ * Result of a `loadBoardMetadata` call. `source` agrees with the
120
+ * envelope's `meta.source` rule: `cache` for a hit, `live` for a
121
+ * fetch (whether the cache was bypassed, expired, or refreshed).
122
+ *
123
+ * `cacheAgeSeconds` is the on-disk age of the served payload when
124
+ * source is `cache` — used by command actions to populate
125
+ * `meta.cache_age_seconds`. `null` for live fetches.
126
+ */
127
+ export interface BoardMetadataLoadResult {
128
+ readonly metadata: BoardMetadata;
129
+ readonly source: 'live' | 'cache';
130
+ readonly cacheAgeSeconds: number | null;
131
+ /**
132
+ * `meta.complexity` payload from the live request when one ran;
133
+ * `null` for cache hits and for non-`--verbose` live calls (Monday
134
+ * doesn't include `complexity` unless the operation selects it).
135
+ * Surfacing this here is what lets cache-backed commands report
136
+ * accurate complexity in `--verbose` mode (Codex M3 pass-1 §3 —
137
+ * the original projection threw the value away).
138
+ */
139
+ readonly complexity: Complexity | null;
140
+ }
141
+ /**
142
+ * Loads board metadata, preferring a fresh on-disk cache entry over
143
+ * a live fetch. Cache writes are best-effort — if writing fails (disk
144
+ * full, permission flip), the live data still returns and a warning
145
+ * is suppressed (callers can opt in via the future `warnings`
146
+ * channel; v0.1 keeps cache-write errors local). Read errors raise.
147
+ */
148
+ export declare const loadBoardMetadata: (inputs: LoadBoardMetadataInputs) => Promise<BoardMetadataLoadResult>;
149
+ /**
150
+ * Convenience used by `columns.ts`'s "refresh once before surfacing
151
+ * column_not_found" path. Idempotent; the cache write happens via
152
+ * `loadBoardMetadata({refresh:true})`.
153
+ */
154
+ export declare const refreshBoardMetadata: (inputs: Omit<LoadBoardMetadataInputs, "refresh">) => Promise<BoardMetadataLoadResult>;
155
+ /**
156
+ * Drops the on-disk metadata for a board. Used by tests and by future
157
+ * `cache clear --board <bid>` flows; M3 doesn't change the existing
158
+ * cache CLI surface.
159
+ */
160
+ export declare const evictBoardMetadata: (boardId: BoardId | string, env?: NodeJS.ProcessEnv) => Promise<void>;
161
+ export {};
162
+ //# sourceMappingURL=board-metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"board-metadata.d.ts","sourceRoot":"","sources":["../../src/api/board-metadata.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AASxB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAiB,KAAK,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAG9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAuC9D,QAAA,MAAM,WAAW;;;;;;;kBASN,CAAC;AAEZ,QAAA,MAAM,YAAY;;;;;;;;kBAUP,CAAC;AAEZ,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAuBrB,CAAC;AAEZ,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAChE,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AACvD,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAUrD,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC;IACnC,6DAA6D;IAC7D,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACjC;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B;;;OAGG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B;;;OAGG;IACH,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAC3B;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IAClC,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC;;;;;;;OAOG;IACH,QAAQ,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;CACxC;AAkED;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,GAC5B,QAAQ,uBAAuB,KAC9B,OAAO,CAAC,uBAAuB,CAsDjC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,GAC/B,QAAQ,IAAI,CAAC,uBAAuB,EAAE,SAAS,CAAC,KAC/C,OAAO,CAAC,uBAAuB,CACe,CAAC;AAElD;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAC7B,SAAS,OAAO,GAAG,MAAM,EAEzB,MAAK,MAAM,CAAC,UAAwB,KACnC,OAAO,CAAC,IAAI,CAId,CAAC"}
@@ -0,0 +1,238 @@
1
+ /**
2
+ * Board metadata loader (`v0.1-plan.md` §3 M3, `cli-design.md` §8).
3
+ *
4
+ * Single source of truth for "what columns / groups / kind does this
5
+ * board have?" — the shape every M3+ command that resolves a column
6
+ * token, prints `board describe`, or maps a `--where` clause needs.
7
+ * The data is cached on disk via `api/cache.ts` (5-minute default TTL,
8
+ * `--no-cache` bypasses) and the cache miss path issues a single
9
+ * GraphQL call against the raw `client.raw<T>` escape hatch — the
10
+ * SDK's typed `boards` query doesn't expose `hierarchy_type` /
11
+ * `is_leaf`, both of which the design's "describe" output requires
12
+ * (`cli-design.md` §2.8).
13
+ *
14
+ * The cache layer holds Monday-shape JSON; this module is the *only*
15
+ * place that reshapes Monday's response into the projected
16
+ * `BoardMetadata` form. Keeping the shape stable here means a future
17
+ * SDK bump that adds optional fields doesn't ripple into 14 commands —
18
+ * `boardMetadataSchema.parse` is the parse boundary, and the cache
19
+ * envelope's `schema_version` (cache.ts) gates older payloads.
20
+ *
21
+ * **Auto-refresh-on-failure semantics.** Two cache-miss-style paths:
22
+ *
23
+ * 1. Cache absent / expired → fetch live, write cache, return.
24
+ * 2. Cache present but caller's lookup against it failed (e.g.
25
+ * column token didn't match anything) → refresh once, return
26
+ * the new metadata. Callers (`columns.ts`) decide whether the
27
+ * second lookup succeeded; this module just promises that
28
+ * `loadBoardMetadata({ refresh: true })` bypasses the cache.
29
+ *
30
+ * `--no-cache` is a stronger signal — it skips the on-disk read
31
+ * entirely *and* skips the post-fetch write. Useful for `monday board
32
+ * describe --no-cache <bid>` when the agent suspects on-disk drift.
33
+ */
34
+ import { z } from 'zod';
35
+ import { clearEntry, readEntry, resolveCacheRoot, writeEntry, DEFAULT_CACHE_TTL_SECONDS, } from './cache.js';
36
+ import { BoardIdSchema } from '../types/ids.js';
37
+ import { ApiError } from '../utils/errors.js';
38
+ import { unwrapOrThrow } from '../utils/parse-boundary.js';
39
+ const BOARD_METADATA_QUERY = `
40
+ query BoardMetadata($ids: [ID!]!) {
41
+ boards(ids: $ids) {
42
+ id
43
+ name
44
+ description
45
+ state
46
+ board_kind
47
+ board_folder_id
48
+ workspace_id
49
+ url
50
+ hierarchy_type
51
+ is_leaf
52
+ items_count
53
+ permissions
54
+ updated_at
55
+ groups {
56
+ id
57
+ title
58
+ color
59
+ position
60
+ archived
61
+ deleted
62
+ }
63
+ columns {
64
+ id
65
+ title
66
+ type
67
+ description
68
+ archived
69
+ settings_str
70
+ width
71
+ }
72
+ }
73
+ }
74
+ `;
75
+ const groupSchema = z
76
+ .object({
77
+ id: z.string().min(1),
78
+ title: z.string(),
79
+ color: z.string().nullable(),
80
+ position: z.string().nullable(),
81
+ archived: z.boolean().nullable(),
82
+ deleted: z.boolean().nullable(),
83
+ })
84
+ .strict();
85
+ const columnSchema = z
86
+ .object({
87
+ id: z.string().min(1),
88
+ title: z.string(),
89
+ type: z.string().min(1),
90
+ description: z.string().nullable(),
91
+ archived: z.boolean().nullable(),
92
+ settings_str: z.string().nullable(),
93
+ width: z.number().nullable(),
94
+ })
95
+ .strict();
96
+ export const boardMetadataSchema = z
97
+ .object({
98
+ id: z.string().min(1),
99
+ name: z.string(),
100
+ description: z.string().nullable(),
101
+ state: z.string().nullable(),
102
+ board_kind: z.string().nullable(),
103
+ board_folder_id: z.string().nullable(),
104
+ workspace_id: z.string().nullable(),
105
+ url: z.string().nullable(),
106
+ hierarchy_type: z.string().nullable(),
107
+ is_leaf: z.boolean().nullable(),
108
+ // Optional+nullable so existing pre-M15 cache entries (which
109
+ // didn't carry these fields) parse cleanly post-bump. New
110
+ // BOARD_METADATA_QUERY runs include the fields; the M15 board
111
+ // archive + duplicate dry-run snapshots project them through
112
+ // `?? null` to preserve the §6.2 board projection shape.
113
+ items_count: z.number().int().nullable().optional(),
114
+ permissions: z.string().nullable().optional(),
115
+ updated_at: z.string().nullable(),
116
+ groups: z.array(groupSchema),
117
+ columns: z.array(columnSchema),
118
+ })
119
+ .strict();
120
+ const responseSchema = z.looseObject({
121
+ boards: z.array(z.unknown()).nullable(),
122
+ });
123
+ const projectBoard = (raw, boardId) =>
124
+ // R18 parse-boundary wrap. Live-fetch projection: a malformed
125
+ // Monday response (schema drift, future field rename) surfaces as
126
+ // `internal_error` with `details.issues` rather than a bare
127
+ // ZodError that the runner's catch-all maps to `internal_error`
128
+ // but loses the failing field path. Per validation.md "Never
129
+ // bubble raw ZodError out of a parse boundary".
130
+ unwrapOrThrow(boardMetadataSchema.safeParse(raw), {
131
+ context: `Monday returned a malformed board metadata response for id ${boardId}`,
132
+ details: { board_id: boardId },
133
+ hint: 'this is a data-integrity error in Monday\'s response (or a ' +
134
+ 'boardMetadataSchema drift); verify the response shape and ' +
135
+ 'update the schema if Monday\'s contract has changed.',
136
+ });
137
+ // Cache-read parse callback. ZodError here is intentionally
138
+ // swallowed by the surrounding `loadBoardMetadata` try/catch (cache-
139
+ // miss path) — a corrupt cache file is treated as a miss and a live
140
+ // fetch follows. Wrapping with unwrapOrThrow would be a change in
141
+ // behaviour. Kept as a thin parse so corrupt-cache → cache-miss
142
+ // stays the established contract.
143
+ const parseCacheEntry = (raw) => boardMetadataSchema.parse(raw);
144
+ const fetchLive = async (client, boardId) => {
145
+ const response = await client.raw(BOARD_METADATA_QUERY, { ids: [boardId] }, { operationName: 'BoardMetadata' });
146
+ // Pre-validate the loose response shape so a missing `boards` key
147
+ // surfaces a clear error rather than tripping the projection
148
+ // parser on an undefined entry. R18 parse-boundary wrap: malformed
149
+ // top-level shape (e.g. response without a `boards` key, or
150
+ // `boards` not an array) surfaces with `details.issues` rather
151
+ // than a bare ZodError.
152
+ const validated = unwrapOrThrow(responseSchema.safeParse(response.data), {
153
+ context: `Monday returned a malformed BoardMetadata response for id ${boardId}`,
154
+ details: { board_id: boardId },
155
+ hint: 'this is a data-integrity error in Monday\'s response (or a ' +
156
+ 'BoardMetadata response-shape drift); verify the response and ' +
157
+ 'update responseSchema if Monday\'s contract has changed.',
158
+ });
159
+ const first = validated.boards?.[0];
160
+ if (first === undefined || first === null) {
161
+ throw new ApiError('not_found', `Monday returned no board for id ${boardId}`, { details: { board_id: boardId } });
162
+ }
163
+ return { metadata: projectBoard(first, boardId), complexity: response.complexity };
164
+ };
165
+ /**
166
+ * Loads board metadata, preferring a fresh on-disk cache entry over
167
+ * a live fetch. Cache writes are best-effort — if writing fails (disk
168
+ * full, permission flip), the live data still returns and a warning
169
+ * is suppressed (callers can opt in via the future `warnings`
170
+ * channel; v0.1 keeps cache-write errors local). Read errors raise.
171
+ */
172
+ export const loadBoardMetadata = async (inputs) => {
173
+ /* c8 ignore next — defensive fallback; tests always pass `env`. */
174
+ const env = inputs.env ?? process.env;
175
+ const boardId = BoardIdSchema.parse(inputs.boardId);
176
+ const root = resolveCacheRoot({ env });
177
+ const ttlSeconds = inputs.ttlSeconds ?? DEFAULT_CACHE_TTL_SECONDS;
178
+ const now = inputs.now;
179
+ if (inputs.noCache !== true && inputs.refresh !== true) {
180
+ let hit;
181
+ try {
182
+ hit = await readEntry(root, { kind: 'board', boardId }, parseCacheEntry, {
183
+ ttlSeconds,
184
+ ...(now === undefined ? {} : { now }),
185
+ });
186
+ }
187
+ catch {
188
+ // A corrupt or unreadable cache file is non-fatal — fall through
189
+ // to a live fetch. The on-disk error is surfaced separately by
190
+ // `cache list` / `cache stats`; an end-user metadata fetch
191
+ // shouldn't fail because of stale local state.
192
+ hit = undefined;
193
+ }
194
+ if (hit !== undefined) {
195
+ return {
196
+ metadata: hit.data,
197
+ source: 'cache',
198
+ cacheAgeSeconds: hit.ageSeconds,
199
+ complexity: null,
200
+ };
201
+ }
202
+ }
203
+ const live = await fetchLive(inputs.client, boardId);
204
+ if (inputs.noCache !== true) {
205
+ try {
206
+ await writeEntry(root, { kind: 'board', boardId }, live.metadata);
207
+ }
208
+ catch {
209
+ // Cache-write failures don't block the user — the live data is
210
+ // good and a future call will simply re-fetch.
211
+ }
212
+ }
213
+ return {
214
+ metadata: live.metadata,
215
+ source: 'live',
216
+ cacheAgeSeconds: null,
217
+ complexity: live.complexity,
218
+ };
219
+ };
220
+ /**
221
+ * Convenience used by `columns.ts`'s "refresh once before surfacing
222
+ * column_not_found" path. Idempotent; the cache write happens via
223
+ * `loadBoardMetadata({refresh:true})`.
224
+ */
225
+ export const refreshBoardMetadata = async (inputs) => loadBoardMetadata({ ...inputs, refresh: true });
226
+ /**
227
+ * Drops the on-disk metadata for a board. Used by tests and by future
228
+ * `cache clear --board <bid>` flows; M3 doesn't change the existing
229
+ * cache CLI surface.
230
+ */
231
+ export const evictBoardMetadata = async (boardId,
232
+ /* c8 ignore next — defensive default; callers pass an explicit env. */
233
+ env = process.env) => {
234
+ const id = BoardIdSchema.parse(boardId);
235
+ const root = resolveCacheRoot({ env });
236
+ await clearEntry(root, { kind: 'board', boardId: id });
237
+ };
238
+ //# sourceMappingURL=board-metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"board-metadata.js","sourceRoot":"","sources":["../../src/api/board-metadata.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,UAAU,EACV,SAAS,EACT,gBAAgB,EAChB,UAAU,EACV,yBAAyB,GAE1B,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,aAAa,EAAgB,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAG3D,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmC5B,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC;KAClB,MAAM,CAAC;IACN,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACrB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAChC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CAChC,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,YAAY,GAAG,CAAC;KACnB,MAAM,CAAC;IACN,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACrB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAChC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC7B,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC;KACjC,MAAM,CAAC;IACN,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACrB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACtC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1B,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACrC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC/B,6DAA6D;IAC7D,0DAA0D;IAC1D,8DAA8D;IAC9D,6DAA6D;IAC7D,yDAAyD;IACzD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACnD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC7C,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC;IAC5B,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC;CAC/B,CAAC;KACD,MAAM,EAAE,CAAC;AAUZ,MAAM,cAAc,GAAG,CAAC,CAAC,WAAW,CAAC;IACnC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;CACxC,CAAC,CAAC;AAuDH,MAAM,YAAY,GAAG,CAAC,GAAY,EAAE,OAAe,EAAiB,EAAE;AACpE,8DAA8D;AAC9D,kEAAkE;AAClE,4DAA4D;AAC5D,gEAAgE;AAChE,6DAA6D;AAC7D,gDAAgD;AAChD,aAAa,CAAC,mBAAmB,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE;IAChD,OAAO,EAAE,8DAA8D,OAAO,EAAE;IAChF,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE;IAC9B,IAAI,EACF,6DAA6D;QAC7D,4DAA4D;QAC5D,sDAAsD;CACzD,CAAC,CAAC;AAEL,4DAA4D;AAC5D,qEAAqE;AACrE,oEAAoE;AACpE,kEAAkE;AAClE,gEAAgE;AAChE,kCAAkC;AAClC,MAAM,eAAe,GAAG,CAAC,GAAY,EAAiB,EAAE,CACtD,mBAAmB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAOjC,MAAM,SAAS,GAAG,KAAK,EACrB,MAAoB,EACpB,OAAe,EACW,EAAE;IAC5B,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAC/B,oBAAoB,EACpB,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,EAClB,EAAE,aAAa,EAAE,eAAe,EAAE,CACnC,CAAC;IACF,kEAAkE;IAClE,6DAA6D;IAC7D,mEAAmE;IACnE,4DAA4D;IAC5D,+DAA+D;IAC/D,wBAAwB;IACxB,MAAM,SAAS,GAAG,aAAa,CAAC,cAAc,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;QACvE,OAAO,EAAE,6DAA6D,OAAO,EAAE;QAC/E,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE;QAC9B,IAAI,EACF,6DAA6D;YAC7D,+DAA+D;YAC/D,0DAA0D;KAC7D,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;IACpC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAC1C,MAAM,IAAI,QAAQ,CAChB,WAAW,EACX,mCAAmC,OAAO,EAAE,EAC5C,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,CACnC,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,CAAC;AACrF,CAAC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EACpC,MAA+B,EACG,EAAE;IACpC,mEAAmE;IACnE,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACtC,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACpD,MAAM,IAAI,GAAG,gBAAgB,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;IACvC,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,yBAAyB,CAAC;IAClE,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;IAEvB,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QACvD,IAAI,GAA+C,CAAC;QACpD,IAAI,CAAC;YACH,GAAG,GAAG,MAAM,SAAS,CACnB,IAAI,EACJ,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,EAC1B,eAAe,EACf;gBACE,UAAU;gBACV,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC;aACtC,CACF,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,iEAAiE;YACjE,+DAA+D;YAC/D,2DAA2D;YAC3D,+CAA+C;YAC/C,GAAG,GAAG,SAAS,CAAC;QAClB,CAAC;QACD,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,OAAO;gBACL,QAAQ,EAAE,GAAG,CAAC,IAAI;gBAClB,MAAM,EAAE,OAAO;gBACf,eAAe,EAAE,GAAG,CAAC,UAAU;gBAC/B,UAAU,EAAE,IAAI;aACjB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAErD,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC;YACH,MAAM,UAAU,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACpE,CAAC;QAAC,MAAM,CAAC;YACP,+DAA+D;YAC/D,+CAA+C;QACjD,CAAC;IACH,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,MAAM,EAAE,MAAM;QACd,eAAe,EAAE,IAAI;QACrB,UAAU,EAAE,IAAI,CAAC,UAAU;KAC5B,CAAC;AACJ,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,EACvC,MAAgD,EACd,EAAE,CACpC,iBAAiB,CAAC,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AAElD;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EACrC,OAAyB;AACzB,uEAAuE;AACvE,MAAyB,OAAO,CAAC,GAAG,EACrB,EAAE;IACjB,MAAM,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,gBAAgB,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;IACvC,MAAM,UAAU,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;AACzD,CAAC,CAAC"}
@@ -0,0 +1,153 @@
1
+ /**
2
+ * Eager-invalidation post-success projection wrappers for board-
3
+ * structure mutations (`v0.2-plan.md` §22 R46 lift).
4
+ *
5
+ * Lifts the cli-design §8 eager-invalidation timing rule from six
6
+ * inline call sites into two helpers that pin the timing in the
7
+ * type system. The §8 contract splits by leg-count:
8
+ *
9
+ * - **Single-leg verbs** (`column-create` / `column-delete` +
10
+ * M15-retrofit `board archive` / `board delete`). Invalidate
11
+ * AFTER the success envelope's `data` projection completes,
12
+ * never before the wire mutation, never between mutation and
13
+ * projection. Skip on the error path — a failed single-leg
14
+ * call didn't change board state.
15
+ * - **Fan-out verbs** (`column-update` per-attribute +
16
+ * M15-retrofit `board update` per-attribute). Issue all per-
17
+ * attribute wire calls first; AFTER the loop ends, invalidate
18
+ * IF at least one per-attribute call succeeded (the wire-
19
+ * state high-water mark). On whole-call success this is the
20
+ * same trigger as the single-leg case (every leg succeeded);
21
+ * on whole-call partial-application failure (call N+1 fails
22
+ * after call N succeeded) invalidation still fires because
23
+ * the cache must reflect partially-applied server state.
24
+ * Zero-legs-succeeded skips invalidation — server state didn't
25
+ * change.
26
+ *
27
+ * Both helpers order invalidation BEFORE returning so the consumer's
28
+ * `emitMutation` lands AFTER the cache is invalidated; a cache-unlink
29
+ * failure (permission flip, disk loss) surfaces through the runner's
30
+ * catch-all error envelope rather than double-emitting after a
31
+ * success envelope already hit stdout (Codex M16 round-1 F1 ordering
32
+ * pin).
33
+ *
34
+ * **Why a `recordLegSuccess()` callback rather than a returned
35
+ * `{succeededLegs, ...}` object** (the §22 R46 spec's draft shape).
36
+ * The fan-out's high-water-mark counter MUST survive a thrown
37
+ * `runFanOut` — if the closure throws partway through the loop,
38
+ * the helper still needs to know how many legs landed before the
39
+ * throw to decide on partial-application invalidation. Returning
40
+ * the counter would force every consumer to wrap its own
41
+ * try/catch to push the count out before re-throwing; routing it
42
+ * through a closure-captured callback owned by the helper hides
43
+ * the counter from the consumer's data flow entirely. The
44
+ * consumer just calls `recordLegSuccess()` after each successful
45
+ * leg; the helper owns the counter, the catch boundary, and the
46
+ * §8 invalidation gate.
47
+ *
48
+ * **Why a single `perform` callback for single-leg rather than a
49
+ * split `{runMutation, projectData}` (the §22 R46 spec draft).**
50
+ * Splitting "fire the wire call" from "project the response" was
51
+ * artificial in practice — the missing-root-key check + null-
52
+ * payload guard sit between the two and don't belong cleanly to
53
+ * either side. A single callback that owns wire-call + parse +
54
+ * missing-root + projection lets each consumer keep its existing
55
+ * structure, returning whatever shape it needs (typically
56
+ * `{data, response}` so `emitMutation` can take both `data` and
57
+ * `toEmit(response)` post-helper).
58
+ *
59
+ * **Six consumer sites (4 single-leg + 2 fan-out):**
60
+ * - `commands/board/column-create.ts` — single-leg.
61
+ * - `commands/board/column-delete.ts` — single-leg.
62
+ * - `commands/board/archive.ts` — single-leg (M15 retrofit).
63
+ * - `commands/board/delete.ts` — single-leg (M15 retrofit).
64
+ * - `commands/board/column-update.ts` — fan-out (per-attribute
65
+ * across two wire surfaces; trailing per-attribute response
66
+ * is authoritative).
67
+ * - `commands/board/update.ts` — fan-out (M15 retrofit; per-
68
+ * attribute loop + final force-live read; final-read response
69
+ * is authoritative). The `runFanOut` closure wraps loop +
70
+ * final read + projection so a final-read failure with
71
+ * succeededLegs > 0 still triggers invalidation per §8.
72
+ *
73
+ * **M17 trajectory.** The §8 contract is leg-count-shaped, not
74
+ * noun-shaped — M17's five group verbs (`group-create` /
75
+ * `group-update` / `group-archive` / `group-duplicate` /
76
+ * `group-delete`) adopt the helpers verbatim from day one
77
+ * (mirrors R29's M14-close-then-M15-adopts pattern). Site count
78
+ * projects to 9 by M17 close (4 + 5), well above the typical
79
+ * 3-consumer trigger threshold.
80
+ */
81
+ /**
82
+ * Tracker handed to the `runFanOut` closure so consumer loops can
83
+ * record successful per-attribute legs without owning the counter.
84
+ * The helper observes `recordLegSuccess()` calls to gate §8
85
+ * invalidation on the high-water-mark rule.
86
+ */
87
+ export interface BoardFanOutTracker {
88
+ /**
89
+ * Call once per successfully-committed per-attribute wire call.
90
+ * Drives the §8 fan-out invalidation gate: invalidation fires
91
+ * iff this is called at least once before `runFanOut` returns
92
+ * or throws.
93
+ */
94
+ readonly recordLegSuccess: () => void;
95
+ }
96
+ export interface WithBoardInvalidationSingleLegInputs<T> {
97
+ readonly boardId: string;
98
+ readonly env: NodeJS.ProcessEnv;
99
+ /**
100
+ * Performs the wire mutation, parses + projects the response,
101
+ * and returns whatever the consumer needs post-helper (typically
102
+ * `{data, response}` so `emitMutation` can take both `data` and
103
+ * `toEmit(response)`). If `perform` throws, invalidation is
104
+ * skipped — a failed single-leg call didn't change board state.
105
+ */
106
+ readonly perform: () => Promise<T>;
107
+ }
108
+ /**
109
+ * Single-leg eager-invalidation wrapper per cli-design §8. Runs
110
+ * `perform()` to completion, then calls `invalidateBoard(boardId,
111
+ * env)` before returning the perform result. On the error path
112
+ * (perform throws) invalidation is skipped — bypass-by-throw is
113
+ * the timing contract: a failed single-leg call didn't change
114
+ * server state, so the cache stays valid.
115
+ */
116
+ export declare const withBoardInvalidationSingleLeg: <T>({ boardId, env, perform, }: WithBoardInvalidationSingleLegInputs<T>) => Promise<T>;
117
+ export interface WithBoardInvalidationFanOutInputs<T> {
118
+ readonly boardId: string;
119
+ readonly env: NodeJS.ProcessEnv;
120
+ /**
121
+ * Runs the per-attribute wire-call loop (and any trailing read /
122
+ * projection legs). Calls `tracker.recordLegSuccess()` after each
123
+ * successful leg so the helper can apply the §8 high-water-mark
124
+ * invalidation rule. Returns whatever the consumer needs post-
125
+ * helper (typically `{data, response}` for `emitMutation` +
126
+ * `toEmit(response)`). When `runFanOut` throws after recording
127
+ * one or more leg successes, the helper invalidates BEFORE
128
+ * re-throwing so the cache reflects partially-applied state.
129
+ */
130
+ readonly runFanOut: (tracker: BoardFanOutTracker) => Promise<T>;
131
+ }
132
+ /**
133
+ * Fan-out eager-invalidation wrapper per cli-design §8. Runs
134
+ * `runFanOut(tracker)` and applies the high-water-mark rule:
135
+ *
136
+ * - Whole-call success → invalidate iff any leg succeeded
137
+ * (recordLegSuccess called at least once); return the result.
138
+ * - Whole-call partial-application failure → catch the throw;
139
+ * invalidate iff any leg succeeded; re-throw.
140
+ * - Whole-call zero-legs-succeeded failure (the very first leg
141
+ * threw before recordLegSuccess fired) → skip invalidation;
142
+ * re-throw. Server state didn't change, so the cache stays
143
+ * valid.
144
+ *
145
+ * The counter lives in this helper's closure — `runFanOut` cannot
146
+ * read or write it directly, only signal increments via
147
+ * `tracker.recordLegSuccess()`. This pins the §8 contract in the
148
+ * type system (the consumer can't accidentally invalidate before
149
+ * the wire call or skip invalidation on partial-application
150
+ * failure).
151
+ */
152
+ export declare const withBoardInvalidationFanOut: <T>({ boardId, env, runFanOut, }: WithBoardInvalidationFanOutInputs<T>) => Promise<T>;
153
+ //# sourceMappingURL=board-mutation-invalidation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"board-mutation-invalidation.d.ts","sourceRoot":"","sources":["../../src/api/board-mutation-invalidation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+EG;AAIH;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;;OAKG;IACH,QAAQ,CAAC,gBAAgB,EAAE,MAAM,IAAI,CAAC;CACvC;AAED,MAAM,WAAW,oCAAoC,CAAC,CAAC;IACrD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IAChC;;;;;;OAMG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;CACpC;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,8BAA8B,GAAU,CAAC,EAAE,4BAIrD,oCAAoC,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,CAAC,CAIrD,CAAC;AAEF,MAAM,WAAW,iCAAiC,CAAC,CAAC;IAClD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IAChC;;;;;;;;;OASG;IACH,QAAQ,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;CACjE;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,2BAA2B,GAAU,CAAC,EAAE,8BAIlD,iCAAiC,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,CAAC,CAmBlD,CAAC"}