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,94 @@
1
+ /**
2
+ * `meta.source` + `meta.cache_age_seconds` merge rules per cli-design
3
+ * §6.1 — first leg seeds; `mixed` is contagious; `cache + live → mixed`;
4
+ * for cache age the aggregate is the OLDEST cache age across legs (the
5
+ * worst-case staleness).
6
+ *
7
+ * Lifted from four sites — see v0.2-plan §12 R21:
8
+ * - `api/dry-run.ts` (`mergeSource` + `mergeCacheAge`, private)
9
+ * - `commands/item/update.ts` (`mergeSourceForRemap`)
10
+ * - `commands/item/create.ts` (`mergeSourceLeg` +
11
+ * `mergeSourceWithPreflight` + `mergeCacheAgeWithPreflight`)
12
+ * - inline `Math.max` cache-age folds
13
+ *
14
+ * The local copies all left a "If a third consumer arrives, lift to
15
+ * a shared module then" comment; create.ts was the third+fourth, so
16
+ * the lift fired post-M9.
17
+ */
18
+ export type EnvelopeSource = 'live' | 'cache' | 'mixed';
19
+ /**
20
+ * Planner/mutation surfaces that may claim `'none'` (no API call
21
+ * fired). The dry-run engine + create.ts surface this; once any
22
+ * leg fires it collapses to a real source via
23
+ * `mergeSourceWithPreflight`.
24
+ */
25
+ export type EnvelopeSourceOrNone = EnvelopeSource | 'none';
26
+ /**
27
+ * Merges a new leg's source into the running aggregate. First leg
28
+ * seeds (`undefined → next`); any `mixed` is contagious; otherwise
29
+ * `cache + live → mixed`; otherwise the unanimous value.
30
+ */
31
+ export declare const mergeSource: (current: EnvelopeSource | undefined, next: EnvelopeSource) => EnvelopeSource;
32
+ /**
33
+ * Folds a pre-planner preflight source ('live' / 'cache' / 'mixed' /
34
+ * `undefined` when no preflight leg fired) into a planner source
35
+ * ('live' / 'cache' / 'mixed' / 'none'). Used by create.ts's dry-run
36
+ * + live envelopes so `meta.source` reflects every wire leg that
37
+ * fired (Codex M9 P2 #1). When the planner is `'none'` and any
38
+ * preflight leg fired, the preflight source wins; otherwise the
39
+ * `mergeSource` rule applies.
40
+ */
41
+ export declare const mergeSourceWithPreflight: (planner: EnvelopeSourceOrNone, preflight: EnvelopeSource | undefined) => EnvelopeSourceOrNone;
42
+ /**
43
+ * Merges a new leg's `cacheAgeSeconds` into the running aggregate.
44
+ * Per cli-design §6.1, the envelope's `cache_age_seconds` is the
45
+ * **oldest** age across legs that hit cache — worst-case staleness.
46
+ * `null` legs (live fetches) don't update; if all legs are live the
47
+ * aggregate stays `null`.
48
+ */
49
+ export declare const mergeCacheAge: (current: number | null, next: number | null) => number | null;
50
+ /**
51
+ * Stateful accumulator wrapping `mergeSource` + `mergeCacheAge` for
52
+ * the multi-leg orchestrators in `commands/item/*` that fold per-leg
53
+ * `meta.source` / `cacheAgeSeconds` contributions into one aggregate
54
+ * before emitting the envelope. Lifted post-M11 (§16 R30) — five
55
+ * sites duplicated the same `let aggregate; record(source, cacheAge)`
56
+ * closure pattern (move's `runCrossBoardMove`, create's live path,
57
+ * update single, update bulk dry-run + live).
58
+ *
59
+ * The standalone `mergeSource` / `mergeCacheAge` exports stay — the
60
+ * `mergeSourceWithPreflight` shape in `create.ts` dry-run doesn't
61
+ * collapse cleanly into the class (it folds a `'none'`-claiming
62
+ * planner source against a preflight `EnvelopeSource | undefined`,
63
+ * not the class's per-leg `EnvelopeSource` shape).
64
+ */
65
+ export declare class SourceAggregator {
66
+ private source;
67
+ private cacheAge;
68
+ /**
69
+ * Optional seed for callers that already have a first leg's source
70
+ * + cacheAge in hand (e.g. update bulk's metadata leg). Equivalent
71
+ * to `new SourceAggregator()` followed by `.record(seed.source,
72
+ * seed.cacheAgeSeconds)`, but keeps the call site one line.
73
+ */
74
+ constructor(seed?: {
75
+ readonly source: EnvelopeSource;
76
+ readonly cacheAgeSeconds: number | null;
77
+ });
78
+ /**
79
+ * Folds a leg's `source` + `cacheAgeSeconds` into the running
80
+ * aggregate. First call seeds; subsequent calls apply the
81
+ * `mergeSource` / `mergeCacheAge` rules.
82
+ */
83
+ record(source: EnvelopeSource, cacheAgeSeconds: number | null): void;
84
+ /**
85
+ * Snapshot of the current aggregate. `fallback` (default `'live'`)
86
+ * is returned when no leg has been recorded — matches the
87
+ * `aggregate ?? 'live'` pattern every call site used pre-lift.
88
+ */
89
+ result(fallback?: EnvelopeSource): {
90
+ readonly source: EnvelopeSource;
91
+ readonly cacheAgeSeconds: number | null;
92
+ };
93
+ }
94
+ //# sourceMappingURL=source-aggregator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-aggregator.d.ts","sourceRoot":"","sources":["../../src/api/source-aggregator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;AACxD;;;;;GAKG;AACH,MAAM,MAAM,oBAAoB,GAAG,cAAc,GAAG,MAAM,CAAC;AAE3D;;;;GAIG;AACH,eAAO,MAAM,WAAW,GACtB,SAAS,cAAc,GAAG,SAAS,EACnC,MAAM,cAAc,KACnB,cAKF,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,wBAAwB,GACnC,SAAS,oBAAoB,EAC7B,WAAW,cAAc,GAAG,SAAS,KACpC,oBAIF,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,GACxB,SAAS,MAAM,GAAG,IAAI,EACtB,MAAM,MAAM,GAAG,IAAI,KAClB,MAAM,GAAG,IAIX,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAA6B;IAC3C,OAAO,CAAC,QAAQ,CAAgB;IAEhC;;;;;OAKG;gBAED,IAAI,CAAC,EAAE;QACL,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;QAChC,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;KACzC;IAMH;;;;OAIG;IACH,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAKpE;;;;OAIG;IACH,MAAM,CAAC,QAAQ,GAAE,cAAuB,GAAG;QACzC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;QAChC,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;KACzC;CAMF"}
@@ -0,0 +1,111 @@
1
+ /**
2
+ * `meta.source` + `meta.cache_age_seconds` merge rules per cli-design
3
+ * §6.1 — first leg seeds; `mixed` is contagious; `cache + live → mixed`;
4
+ * for cache age the aggregate is the OLDEST cache age across legs (the
5
+ * worst-case staleness).
6
+ *
7
+ * Lifted from four sites — see v0.2-plan §12 R21:
8
+ * - `api/dry-run.ts` (`mergeSource` + `mergeCacheAge`, private)
9
+ * - `commands/item/update.ts` (`mergeSourceForRemap`)
10
+ * - `commands/item/create.ts` (`mergeSourceLeg` +
11
+ * `mergeSourceWithPreflight` + `mergeCacheAgeWithPreflight`)
12
+ * - inline `Math.max` cache-age folds
13
+ *
14
+ * The local copies all left a "If a third consumer arrives, lift to
15
+ * a shared module then" comment; create.ts was the third+fourth, so
16
+ * the lift fired post-M9.
17
+ */
18
+ /**
19
+ * Merges a new leg's source into the running aggregate. First leg
20
+ * seeds (`undefined → next`); any `mixed` is contagious; otherwise
21
+ * `cache + live → mixed`; otherwise the unanimous value.
22
+ */
23
+ export const mergeSource = (current, next) => {
24
+ if (current === undefined)
25
+ return next;
26
+ if (current === 'mixed' || next === 'mixed')
27
+ return 'mixed';
28
+ if (current === next)
29
+ return current;
30
+ return 'mixed';
31
+ };
32
+ /**
33
+ * Folds a pre-planner preflight source ('live' / 'cache' / 'mixed' /
34
+ * `undefined` when no preflight leg fired) into a planner source
35
+ * ('live' / 'cache' / 'mixed' / 'none'). Used by create.ts's dry-run
36
+ * + live envelopes so `meta.source` reflects every wire leg that
37
+ * fired (Codex M9 P2 #1). When the planner is `'none'` and any
38
+ * preflight leg fired, the preflight source wins; otherwise the
39
+ * `mergeSource` rule applies.
40
+ */
41
+ export const mergeSourceWithPreflight = (planner, preflight) => {
42
+ if (preflight === undefined)
43
+ return planner;
44
+ if (planner === 'none')
45
+ return preflight;
46
+ return mergeSource(planner, preflight);
47
+ };
48
+ /**
49
+ * Merges a new leg's `cacheAgeSeconds` into the running aggregate.
50
+ * Per cli-design §6.1, the envelope's `cache_age_seconds` is the
51
+ * **oldest** age across legs that hit cache — worst-case staleness.
52
+ * `null` legs (live fetches) don't update; if all legs are live the
53
+ * aggregate stays `null`.
54
+ */
55
+ export const mergeCacheAge = (current, next) => {
56
+ if (next === null)
57
+ return current;
58
+ if (current === null)
59
+ return next;
60
+ return Math.max(current, next);
61
+ };
62
+ /**
63
+ * Stateful accumulator wrapping `mergeSource` + `mergeCacheAge` for
64
+ * the multi-leg orchestrators in `commands/item/*` that fold per-leg
65
+ * `meta.source` / `cacheAgeSeconds` contributions into one aggregate
66
+ * before emitting the envelope. Lifted post-M11 (§16 R30) — five
67
+ * sites duplicated the same `let aggregate; record(source, cacheAge)`
68
+ * closure pattern (move's `runCrossBoardMove`, create's live path,
69
+ * update single, update bulk dry-run + live).
70
+ *
71
+ * The standalone `mergeSource` / `mergeCacheAge` exports stay — the
72
+ * `mergeSourceWithPreflight` shape in `create.ts` dry-run doesn't
73
+ * collapse cleanly into the class (it folds a `'none'`-claiming
74
+ * planner source against a preflight `EnvelopeSource | undefined`,
75
+ * not the class's per-leg `EnvelopeSource` shape).
76
+ */
77
+ export class SourceAggregator {
78
+ source;
79
+ cacheAge;
80
+ /**
81
+ * Optional seed for callers that already have a first leg's source
82
+ * + cacheAge in hand (e.g. update bulk's metadata leg). Equivalent
83
+ * to `new SourceAggregator()` followed by `.record(seed.source,
84
+ * seed.cacheAgeSeconds)`, but keeps the call site one line.
85
+ */
86
+ constructor(seed) {
87
+ this.source = seed?.source;
88
+ this.cacheAge = seed?.cacheAgeSeconds ?? null;
89
+ }
90
+ /**
91
+ * Folds a leg's `source` + `cacheAgeSeconds` into the running
92
+ * aggregate. First call seeds; subsequent calls apply the
93
+ * `mergeSource` / `mergeCacheAge` rules.
94
+ */
95
+ record(source, cacheAgeSeconds) {
96
+ this.source = mergeSource(this.source, source);
97
+ this.cacheAge = mergeCacheAge(this.cacheAge, cacheAgeSeconds);
98
+ }
99
+ /**
100
+ * Snapshot of the current aggregate. `fallback` (default `'live'`)
101
+ * is returned when no leg has been recorded — matches the
102
+ * `aggregate ?? 'live'` pattern every call site used pre-lift.
103
+ */
104
+ result(fallback = 'live') {
105
+ return {
106
+ source: this.source ?? fallback,
107
+ cacheAgeSeconds: this.cacheAge,
108
+ };
109
+ }
110
+ }
111
+ //# sourceMappingURL=source-aggregator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-aggregator.js","sourceRoot":"","sources":["../../src/api/source-aggregator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAWH;;;;GAIG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,OAAmC,EACnC,IAAoB,EACJ,EAAE;IAClB,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACvC,IAAI,OAAO,KAAK,OAAO,IAAI,IAAI,KAAK,OAAO;QAAE,OAAO,OAAO,CAAC;IAC5D,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,OAAO,CAAC;IACrC,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACtC,OAA6B,EAC7B,SAAqC,EACf,EAAE;IACxB,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC;IAC5C,IAAI,OAAO,KAAK,MAAM;QAAE,OAAO,SAAS,CAAC;IACzC,OAAO,WAAW,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AACzC,CAAC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,OAAsB,EACtB,IAAmB,EACJ,EAAE;IACjB,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,OAAO,CAAC;IAClC,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAClC,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACjC,CAAC,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,gBAAgB;IACnB,MAAM,CAA6B;IACnC,QAAQ,CAAgB;IAEhC;;;;;OAKG;IACH,YACE,IAGC;QAED,IAAI,CAAC,MAAM,GAAG,IAAI,EAAE,MAAM,CAAC;QAC3B,IAAI,CAAC,QAAQ,GAAG,IAAI,EAAE,eAAe,IAAI,IAAI,CAAC;IAChD,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,MAAsB,EAAE,eAA8B;QAC3D,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC/C,IAAI,CAAC,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;IAChE,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,WAA2B,MAAM;QAItC,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,QAAQ;YAC/B,eAAe,EAAE,IAAI,CAAC,QAAQ;SAC/B,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Transport interface (`v0.1-plan.md` §2 pre-flight, §5.2).
3
+ *
4
+ * Sits between `commands/*` and the network. The injected
5
+ * `Transport` is what `run({ transport })` swaps under tests — a
6
+ * `FixtureTransport` substitutes for `FetchTransport` so the same
7
+ * commands → api → transport stack runs in tests as in production
8
+ * (header injection, abort handling, timeout, retry mapping). The
9
+ * alternative — `vi.spyOn`'ing the SDK's `request` method — was
10
+ * the original plan and got rejected in the Codex review because
11
+ * it bypasses too many layers.
12
+ *
13
+ * The transport does **not** map GraphQL errors to CLI error codes;
14
+ * that's `api/errors.ts` in M2. Network-level failures (refused
15
+ * connection, timeout, malformed JSON) become `ApiError`s here so
16
+ * the runner never sees a raw `fetch` exception.
17
+ */
18
+ export interface TransportRequest {
19
+ readonly query: string;
20
+ readonly variables?: Readonly<Record<string, unknown>>;
21
+ readonly headers?: Readonly<Record<string, string>>;
22
+ readonly signal?: AbortSignal;
23
+ readonly operationName?: string;
24
+ }
25
+ export interface TransportResponse {
26
+ readonly status: number;
27
+ readonly headers: Readonly<Record<string, string>>;
28
+ /**
29
+ * Parsed JSON body. GraphQL responses are JSON; if the upstream
30
+ * returns something else (HTML error page, etc.) the transport
31
+ * surfaces an `ApiError(network_error)` rather than a partially-
32
+ * decoded payload.
33
+ */
34
+ readonly body: unknown;
35
+ }
36
+ export interface Transport {
37
+ readonly request: (req: TransportRequest) => Promise<TransportResponse>;
38
+ }
39
+ export interface FetchTransportConfig {
40
+ readonly endpoint: string;
41
+ readonly apiToken: string;
42
+ readonly apiVersion: string;
43
+ readonly timeoutMs: number;
44
+ /** Override for tests; defaults to global `fetch`. */
45
+ readonly fetchImpl?: typeof fetch;
46
+ }
47
+ /**
48
+ * Builds a `Transport` over `fetch`. Owns:
49
+ * - `Authorization: <token>` (no `Bearer ` prefix per Monday's API).
50
+ * - `API-Version: <pinned>` per `cli-design.md` §2.
51
+ * - `Content-Type: application/json`.
52
+ * - Per-request timeout via `AbortSignal.timeout` chained with the
53
+ * caller's signal so external cancellation still wins.
54
+ *
55
+ * The token never reaches an error message, log line, or URL.
56
+ */
57
+ export declare const createFetchTransport: (config: FetchTransportConfig) => Transport;
58
+ //# sourceMappingURL=transport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/api/transport.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACvD,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACpD,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACnD;;;;;OAKG;IACH,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,gBAAgB,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACzE;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,sDAAsD;IACtD,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CACnC;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,oBAAoB,GAC/B,QAAQ,oBAAoB,KAC3B,SAoGF,CAAC"}
@@ -0,0 +1,190 @@
1
+ import { ApiError } from '../utils/errors.js';
2
+ /**
3
+ * Builds a `Transport` over `fetch`. Owns:
4
+ * - `Authorization: <token>` (no `Bearer ` prefix per Monday's API).
5
+ * - `API-Version: <pinned>` per `cli-design.md` §2.
6
+ * - `Content-Type: application/json`.
7
+ * - Per-request timeout via `AbortSignal.timeout` chained with the
8
+ * caller's signal so external cancellation still wins.
9
+ *
10
+ * The token never reaches an error message, log line, or URL.
11
+ */
12
+ export const createFetchTransport = (config) => {
13
+ const fetchImpl = config.fetchImpl ?? fetch;
14
+ return {
15
+ request: async ({ query, variables, headers, signal, operationName, }) => {
16
+ // Header lockdown: caller-supplied headers spread first so the
17
+ // transport-owned set (`Authorization`, `API-Version`,
18
+ // `Content-Type`) always wins. The previous order let any
19
+ // caller — including a buggy command or an injected
20
+ // `FixtureTransport` request — override auth or the API
21
+ // version pin silently. We also strip any case-variant of
22
+ // those names from the caller bag so a lowercase
23
+ // `authorization` can't sneak past the literal-key spread.
24
+ const reservedHeaderLowerNames = new Set([
25
+ 'authorization',
26
+ 'api-version',
27
+ 'content-type',
28
+ ]);
29
+ const callerHeaders = headers ?? {};
30
+ const safeCallerHeaders = {};
31
+ for (const [key, value] of Object.entries(callerHeaders)) {
32
+ if (!reservedHeaderLowerNames.has(key.toLowerCase())) {
33
+ safeCallerHeaders[key] = value;
34
+ }
35
+ }
36
+ const requestHeaders = {
37
+ ...safeCallerHeaders,
38
+ Authorization: config.apiToken,
39
+ 'API-Version': config.apiVersion,
40
+ 'Content-Type': 'application/json',
41
+ };
42
+ const body = { query };
43
+ if (variables !== undefined) {
44
+ body.variables = variables;
45
+ }
46
+ if (operationName !== undefined) {
47
+ body.operationName = operationName;
48
+ }
49
+ const combinedSignal = combineSignals(signal, AbortSignal.timeout(config.timeoutMs));
50
+ let response;
51
+ try {
52
+ response = await fetchImpl(config.endpoint, {
53
+ method: 'POST',
54
+ headers: requestHeaders,
55
+ body: JSON.stringify(body),
56
+ signal: combinedSignal,
57
+ });
58
+ }
59
+ catch (err) {
60
+ // Don't ever interpolate the token into the error string —
61
+ // `requestHeaders` stays out of the message; `cause` carries
62
+ // the raw error (which the redactor will scrub before emit).
63
+ if (isAbortError(err) && combinedSignal.reason !== signal?.reason) {
64
+ throw new ApiError('timeout', `request timed out after ${String(config.timeoutMs)}ms`, { cause: err, details: { timeout_ms: config.timeoutMs } });
65
+ }
66
+ throw new ApiError('network_error', describeFetchError(err), {
67
+ cause: err,
68
+ });
69
+ }
70
+ const responseHeaders = headersToRecord(response.headers);
71
+ let parsed;
72
+ try {
73
+ parsed = await response.json();
74
+ }
75
+ catch (err) {
76
+ // Don't interpolate `config.endpoint` into the message —
77
+ // a misconfigured URL containing the token (e.g. someone
78
+ // setting MONDAY_API_URL=...?token=...) would land here.
79
+ // The redactor would catch it on emit, but security.md
80
+ // explicitly forbids putting the token into Error.message
81
+ // in the first place. (Codex M2 review §4.)
82
+ throw new ApiError('network_error', `non-JSON response (status ${String(response.status)})`, { cause: err, httpStatus: response.status });
83
+ }
84
+ return {
85
+ status: response.status,
86
+ headers: responseHeaders,
87
+ body: parsed,
88
+ };
89
+ },
90
+ };
91
+ };
92
+ const isAbortError = (err) => {
93
+ if (err instanceof Error) {
94
+ return err.name === 'AbortError' || err.name === 'TimeoutError';
95
+ }
96
+ return false;
97
+ };
98
+ /**
99
+ * Builds a generic, URL-free message for a thrown `fetch` exception.
100
+ *
101
+ * Why not `err.message`. Node's undici embeds the request URL into
102
+ * the messages of common transport errors — `ECONNREFUSED https://
103
+ * api.example/v2?token=...`, `getaddrinfo ENOTFOUND
104
+ * api.example`, etc. If `MONDAY_API_URL` is misconfigured to carry
105
+ * the token (or any other secret), the literal token lands in
106
+ * `ApiError.message`. The runner's redactor would catch it on emit,
107
+ * but `security.md` forbids the token entering `Error.message` in
108
+ * the first place — the rule is defence-in-depth, not "we'll fix it
109
+ * downstream". The original error is still attached via `cause`,
110
+ * which a future debug log surfaces through `redact()` (key + value
111
+ * scan) rather than verbatim.
112
+ *
113
+ * Maps the common shapes to short, stable codes:
114
+ * - DNS / hostname unresolvable → `dns lookup failed`
115
+ * - ECONNREFUSED / ECONNRESET → `connection refused`
116
+ * - SSL/TLS issue → `tls error`
117
+ * - generic Error → `fetch failed`
118
+ * - non-Error throw → `fetch failed`
119
+ */
120
+ const describeFetchError = (err) => {
121
+ if (err instanceof Error) {
122
+ const code = err.code;
123
+ if (typeof code === 'string') {
124
+ if (code.startsWith('ENOTFOUND') || code.startsWith('EAI_')) {
125
+ return 'fetch failed: dns lookup failed';
126
+ }
127
+ if (code === 'ECONNREFUSED' || code === 'ECONNRESET') {
128
+ return 'fetch failed: connection refused';
129
+ }
130
+ if (code === 'CERT_HAS_EXPIRED' || code.startsWith('UNABLE_TO_')) {
131
+ return 'fetch failed: tls error';
132
+ }
133
+ }
134
+ // Sniff the message for the same common shapes when err.code
135
+ // isn't surfaced (older fetch impls, wrapped TypeErrors).
136
+ const lower = err.message.toLowerCase();
137
+ if (lower.includes('econnrefused') || lower.includes('connection refused')) {
138
+ return 'fetch failed: connection refused';
139
+ }
140
+ if (lower.includes('enotfound') ||
141
+ lower.includes('eai_again') ||
142
+ lower.includes('getaddrinfo')) {
143
+ return 'fetch failed: dns lookup failed';
144
+ }
145
+ return 'fetch failed';
146
+ }
147
+ return 'fetch failed';
148
+ };
149
+ const headersToRecord = (headers) => {
150
+ const out = {};
151
+ headers.forEach((value, key) => {
152
+ out[key] = value;
153
+ });
154
+ return out;
155
+ };
156
+ /**
157
+ * Mirrors `AbortSignal.any` in environments that don't have it yet.
158
+ * Prefers the platform implementation when available so tests
159
+ * exercise the real path.
160
+ */
161
+ const combineSignals = (...signals) => {
162
+ const real = signals.filter((s) => s !== undefined);
163
+ const [first, ...rest] = real;
164
+ if (first === undefined) {
165
+ return new AbortController().signal;
166
+ }
167
+ if (rest.length === 0) {
168
+ return first;
169
+ }
170
+ if (typeof AbortSignal.any === 'function') {
171
+ return AbortSignal.any(real);
172
+ }
173
+ /* c8 ignore start — legacy fallback for runtimes without
174
+ `AbortSignal.any` (Node < 19). Repo's engines pin to Node 22+,
175
+ so this path is never hit in CI or dev. Kept for safety in case
176
+ a downstream embedder runs an older Node. */
177
+ const ctrl = new AbortController();
178
+ for (const s of real) {
179
+ if (s.aborted) {
180
+ ctrl.abort(s.reason);
181
+ break;
182
+ }
183
+ s.addEventListener('abort', () => {
184
+ ctrl.abort(s.reason);
185
+ }, { once: true });
186
+ }
187
+ return ctrl.signal;
188
+ /* c8 ignore stop */
189
+ };
190
+ //# sourceMappingURL=transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../src/api/transport.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,133 @@
1
+ /**
2
+ * Update-mutation projection + GraphQL field-fragment, lifted from
3
+ * five M13 mutation verbs and two M3 / M5b read-or-write call sites
4
+ * (v0.2-plan §20 R37 + R38).
5
+ *
6
+ * **R37 — `projectMutationUpdate`.** Every M13 mutation verb (`update
7
+ * reply` / `edit` / `delete` plus the four toggle verbs `like` /
8
+ * `unlike` / `pin` / `unpin`) returns the post-mutation `Update` and
9
+ * guards a null payload with the same shape: a typed throw carrying
10
+ * `details.update_id` (or `parent_id` for reply, which keys errors
11
+ * off the parent the agent passed on argv), then a strict zod parse
12
+ * to surface the §6.4 mutation envelope's `data: <projected
13
+ * snapshot>`. Mirrors R28's `projectMutationItem` exactly with
14
+ * `Update` substituted for `Item`.
15
+ *
16
+ * Lifted from five sites — see v0.2-plan §20 R37:
17
+ * - `commands/update/reply.ts` (M13 — local `projectReply`,
18
+ * `idKey: 'parent_id'` because the argv input is the parent,
19
+ * not the new update).
20
+ * - `commands/update/edit.ts` (M13 — local `projectEdited`).
21
+ * - `commands/update/delete.ts` (M13 — local `projectDeleted`).
22
+ * - `commands/update/toggle.ts` (M13 — local `projectToggle`,
23
+ * consumed by four toggle verbs via per-verb `mutationName`).
24
+ * - `commands/update/clear-all.ts` (M13 — uses the null-check-only
25
+ * variant; see "Why two exports" below).
26
+ *
27
+ * **Why two exports.** Four of the five lift sites parse the wire
28
+ * payload against the full `updateProjectionSchema`. Clear-all's
29
+ * `DELETE_UPDATE_MUTATION` deliberately selects only `{ id }` (per-
30
+ * target round-trip; no projection is emitted in `data.results[i]`),
31
+ * so the strict schema would fail on every successful delete. The
32
+ * lift therefore exposes two seams:
33
+ *
34
+ * - `projectMutationUpdate({raw, updateId, mutationName, idKey?})`
35
+ * — null-check + strict parse + projection. Used by reply / edit
36
+ * / delete / toggle.
37
+ * - `assertUpdateMutationPresent({raw, updateId, mutationName,
38
+ * idKey?})` — null-check + typed throw, no projection. Used by
39
+ * clear-all's per-target dispatch.
40
+ *
41
+ * Both share `buildNotFoundError` so the typed throw's shape (code,
42
+ * message format, `details.<idKey>`) is identical across all five
43
+ * sites — agents key off `error.code` + `error.details.update_id`
44
+ * (or `parent_id`) without caring which verb threw.
45
+ *
46
+ * **R38 — `UPDATE_FIELDS_FRAGMENT`.** The GraphQL selection set every
47
+ * Update-shape mutation + the M3 `update get` read share. Mirrors
48
+ * `ITEM_FIELDS_FRAGMENT` (M5b lift in `item-helpers.ts`); a future
49
+ * §6.4 wire-shape addition is a one-touch fragment edit instead of
50
+ * a six-touch sweep across `update create` / `reply` / `edit` /
51
+ * `delete` / `toggle` / `get`. Indentation matches the 6-space
52
+ * continuation each consumer interpolates at, so rendered query
53
+ * bytes are unchanged post-lift.
54
+ *
55
+ * **What stays at the call site.** Reply's `parent_id` echo from
56
+ * argv (`{...projected, parent_id: parentId}`) is a caller-side
57
+ * extension — the helper returns the base `UpdateProjection` and
58
+ * reply spreads onto it before emit. Mirrors R28's handling of
59
+ * `item duplicate`'s `duplicated_from_id` extension. `update get`'s
60
+ * extra `edited_at` + `replies` slots are likewise composed at the
61
+ * call site (`${UPDATE_FIELDS_FRAGMENT}\n edited_at\n replies
62
+ * {...}`); the fragment is the shared subset, callers compose extras
63
+ * on top — same shape `item subitems` uses against
64
+ * `ITEM_FIELDS_FRAGMENT`.
65
+ */
66
+ import { z } from 'zod';
67
+ /**
68
+ * Shared GraphQL selection set for the Update shape — every M13
69
+ * mutation verb plus M5b's `update create` and M3's `update get`
70
+ * select these fields. 6-space continuation indent matches the
71
+ * column every consumer interpolates `${UPDATE_FIELDS_FRAGMENT}` at,
72
+ * so rendered query bytes are unchanged post-lift.
73
+ */
74
+ export declare const UPDATE_FIELDS_FRAGMENT = "id\n body\n text_body\n creator_id\n creator { id name email }\n item_id\n created_at\n updated_at";
75
+ /**
76
+ * Strict zod schema for the post-mutation `Update` projection — the
77
+ * exact shape `UPDATE_FIELDS_FRAGMENT` selects from the wire. Reply's
78
+ * output extends this with `parent_id` at the call site.
79
+ */
80
+ export declare const updateProjectionSchema: z.ZodObject<{
81
+ id: z.core.$ZodBranded<z.ZodString, "UpdateId", "out">;
82
+ body: z.ZodString;
83
+ text_body: z.ZodNullable<z.ZodString>;
84
+ creator_id: z.ZodNullable<z.ZodString>;
85
+ creator: z.ZodNullable<z.ZodObject<{
86
+ id: z.ZodString;
87
+ name: z.ZodString;
88
+ email: z.ZodString;
89
+ }, z.core.$strict>>;
90
+ item_id: z.ZodNullable<z.core.$ZodBranded<z.ZodString, "ItemId", "out">>;
91
+ created_at: z.ZodNullable<z.ZodString>;
92
+ updated_at: z.ZodNullable<z.ZodString>;
93
+ }, z.core.$strict>;
94
+ export type UpdateProjection = z.infer<typeof updateProjectionSchema>;
95
+ /** `'update_id'` for the M13 verbs; `'parent_id'` for `update reply`
96
+ * (the argv input is the parent, not the new update). */
97
+ export type UpdateMutationIdKey = 'update_id' | 'parent_id';
98
+ export interface UpdateMutationContext {
99
+ readonly updateId: string;
100
+ /** Mutation root-field name for the not_found message
101
+ * (`create_update` / `edit_update` / `delete_update` /
102
+ * `like_update` / `unlike_update` / `pin_to_top` /
103
+ * `unpin_from_top`). */
104
+ readonly mutationName: string;
105
+ /** Defaults to `'update_id'`. */
106
+ readonly idKey?: UpdateMutationIdKey;
107
+ }
108
+ export interface ProjectMutationUpdateInputs extends UpdateMutationContext {
109
+ readonly raw: unknown;
110
+ }
111
+ /**
112
+ * Null-check-only variant for sites whose GraphQL selection is too
113
+ * narrow to parse against `updateProjectionSchema` (currently just
114
+ * `update clear-all`'s per-target `delete_update` round-trip, which
115
+ * selects only `{ id }`). Throws the same typed `not_found` shape
116
+ * the projecting helper does so agents see one error contract across
117
+ * every M13 mutation verb.
118
+ */
119
+ export declare const assertUpdateMutationPresent: (raw: unknown, ctx: UpdateMutationContext) => void;
120
+ /**
121
+ * Parses + projects a post-mutation `Update` payload, throwing the
122
+ * typed `not_found` on null/undefined and `internal_error` (via the
123
+ * R18 parse-boundary wrap) on a malformed shape. The helper owns
124
+ * both error envelopes; callers compose post-projection extras
125
+ * (reply's `parent_id` echo) at the call site.
126
+ *
127
+ * `details: { <idKey>: updateId }` is supplied by the helper so
128
+ * every consumer carries the same envelope shape — agents key off
129
+ * `details.update_id` (or `details.parent_id` for reply's not_found
130
+ * path) regardless of which mutation verb threw.
131
+ */
132
+ export declare const projectMutationUpdate: (inputs: ProjectMutationUpdateInputs) => UpdateProjection;
133
+ //# sourceMappingURL=update-mutation-result.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-mutation-result.d.ts","sourceRoot":"","sources":["../../src/api/update-mutation-result.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,0IAOlB,CAAC;AAUlB;;;;GAIG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;kBAWxB,CAAC;AAEZ,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE;0DAC0D;AAC1D,MAAM,MAAM,mBAAmB,GAAG,WAAW,GAAG,WAAW,CAAC;AAE5D,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B;;;6BAGyB;IACzB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,iCAAiC;IACjC,QAAQ,CAAC,KAAK,CAAC,EAAE,mBAAmB,CAAC;CACtC;AAED,MAAM,WAAW,2BAA4B,SAAQ,qBAAqB;IACxE,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;CACvB;AAaD;;;;;;;GAOG;AACH,eAAO,MAAM,2BAA2B,GACtC,KAAK,OAAO,EACZ,KAAK,qBAAqB,KACzB,IAIF,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,qBAAqB,GAChC,QAAQ,2BAA2B,KAClC,gBASF,CAAC"}