monday-cli 0.7.0 → 0.8.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 (133) hide show
  1. package/CHANGELOG.md +250 -0
  2. package/README.md +87 -45
  3. package/dist/api/assets.d.ts +3 -3
  4. package/dist/api/board-metadata.d.ts +7 -4
  5. package/dist/api/board-metadata.d.ts.map +1 -1
  6. package/dist/api/board-metadata.js +21 -6
  7. package/dist/api/board-metadata.js.map +1 -1
  8. package/dist/api/column-types.d.ts +14 -7
  9. package/dist/api/column-types.d.ts.map +1 -1
  10. package/dist/api/column-types.js +14 -7
  11. package/dist/api/column-types.js.map +1 -1
  12. package/dist/api/error-decoration.d.ts +124 -0
  13. package/dist/api/error-decoration.d.ts.map +1 -0
  14. package/dist/api/error-decoration.js +161 -0
  15. package/dist/api/error-decoration.js.map +1 -0
  16. package/dist/api/fetch-transport-helpers.d.ts +97 -0
  17. package/dist/api/fetch-transport-helpers.d.ts.map +1 -0
  18. package/dist/api/fetch-transport-helpers.js +175 -0
  19. package/dist/api/fetch-transport-helpers.js.map +1 -0
  20. package/dist/api/file-column-set.d.ts +388 -82
  21. package/dist/api/file-column-set.d.ts.map +1 -1
  22. package/dist/api/file-column-set.js +466 -88
  23. package/dist/api/file-column-set.js.map +1 -1
  24. package/dist/api/multipart-transport.d.ts +95 -60
  25. package/dist/api/multipart-transport.d.ts.map +1 -1
  26. package/dist/api/multipart-transport.js +102 -120
  27. package/dist/api/multipart-transport.js.map +1 -1
  28. package/dist/api/transport.d.ts.map +1 -1
  29. package/dist/api/transport.js +2 -99
  30. package/dist/api/transport.js.map +1 -1
  31. package/dist/cli/program.js +1 -1
  32. package/dist/cli/program.js.map +1 -1
  33. package/dist/commands/auth/login.js +1 -1
  34. package/dist/commands/auth/login.js.map +1 -1
  35. package/dist/commands/auth/logout.js +1 -1
  36. package/dist/commands/auth/logout.js.map +1 -1
  37. package/dist/commands/board/column-create.d.ts +20 -2
  38. package/dist/commands/board/column-create.d.ts.map +1 -1
  39. package/dist/commands/board/column-create.js +191 -20
  40. package/dist/commands/board/column-create.js.map +1 -1
  41. package/dist/commands/board/describe.d.ts +5 -3
  42. package/dist/commands/board/describe.d.ts.map +1 -1
  43. package/dist/commands/board/describe.js +12 -4
  44. package/dist/commands/board/describe.js.map +1 -1
  45. package/dist/commands/completion.js +1 -1
  46. package/dist/commands/completion.js.map +1 -1
  47. package/dist/commands/dev/configure.js +1 -1
  48. package/dist/commands/dev/configure.js.map +1 -1
  49. package/dist/commands/dev/discover.js +1 -1
  50. package/dist/commands/dev/discover.js.map +1 -1
  51. package/dist/commands/dev/doctor.js +1 -1
  52. package/dist/commands/dev/doctor.js.map +1 -1
  53. package/dist/commands/dev/epic/items.js +2 -2
  54. package/dist/commands/dev/epic/items.js.map +1 -1
  55. package/dist/commands/dev/epic/list.js +2 -2
  56. package/dist/commands/dev/epic/list.js.map +1 -1
  57. package/dist/commands/dev/release/list.js +2 -2
  58. package/dist/commands/dev/release/list.js.map +1 -1
  59. package/dist/commands/dev/sprint/current.js +2 -2
  60. package/dist/commands/dev/sprint/current.js.map +1 -1
  61. package/dist/commands/dev/sprint/items.js +2 -2
  62. package/dist/commands/dev/sprint/items.js.map +1 -1
  63. package/dist/commands/dev/sprint/list.js +2 -2
  64. package/dist/commands/dev/sprint/list.js.map +1 -1
  65. package/dist/commands/dev/task/block.js +2 -2
  66. package/dist/commands/dev/task/block.js.map +1 -1
  67. package/dist/commands/dev/task/done.js +2 -2
  68. package/dist/commands/dev/task/done.js.map +1 -1
  69. package/dist/commands/dev/task/list.js +2 -2
  70. package/dist/commands/dev/task/list.js.map +1 -1
  71. package/dist/commands/dev/task/start.js +2 -2
  72. package/dist/commands/dev/task/start.js.map +1 -1
  73. package/dist/commands/doc/get.js +1 -1
  74. package/dist/commands/doc/get.js.map +1 -1
  75. package/dist/commands/doc/list.js +1 -1
  76. package/dist/commands/doc/list.js.map +1 -1
  77. package/dist/commands/emit.d.ts.map +1 -1
  78. package/dist/commands/emit.js +19 -16
  79. package/dist/commands/emit.js.map +1 -1
  80. package/dist/commands/item/clear.d.ts.map +1 -1
  81. package/dist/commands/item/clear.js +15 -41
  82. package/dist/commands/item/clear.js.map +1 -1
  83. package/dist/commands/item/create.d.ts +93 -1
  84. package/dist/commands/item/create.d.ts.map +1 -1
  85. package/dist/commands/item/create.js +474 -53
  86. package/dist/commands/item/create.js.map +1 -1
  87. package/dist/commands/item/search.js +7 -7
  88. package/dist/commands/item/search.js.map +1 -1
  89. package/dist/commands/item/set.d.ts +1 -0
  90. package/dist/commands/item/set.d.ts.map +1 -1
  91. package/dist/commands/item/set.js +94 -1
  92. package/dist/commands/item/set.js.map +1 -1
  93. package/dist/commands/item/time-track/start.js +2 -2
  94. package/dist/commands/item/time-track/start.js.map +1 -1
  95. package/dist/commands/item/time-track/stop.js +2 -2
  96. package/dist/commands/item/time-track/stop.js.map +1 -1
  97. package/dist/commands/item/update.d.ts +128 -11
  98. package/dist/commands/item/update.d.ts.map +1 -1
  99. package/dist/commands/item/update.js +784 -82
  100. package/dist/commands/item/update.js.map +1 -1
  101. package/dist/commands/item/upload.js +5 -5
  102. package/dist/commands/item/upload.js.map +1 -1
  103. package/dist/commands/item/watch.js +2 -2
  104. package/dist/commands/item/watch.js.map +1 -1
  105. package/dist/commands/notification/send.js +1 -1
  106. package/dist/commands/notification/send.js.map +1 -1
  107. package/dist/commands/update/upload.js +3 -3
  108. package/dist/commands/update/upload.js.map +1 -1
  109. package/dist/commands/user/team-add-members.js +1 -1
  110. package/dist/commands/user/team-add-members.js.map +1 -1
  111. package/dist/commands/user/team-create.js +1 -1
  112. package/dist/commands/user/team-create.js.map +1 -1
  113. package/dist/commands/user/team-remove-members.js +1 -1
  114. package/dist/commands/user/team-remove-members.js.map +1 -1
  115. package/dist/commands/webhook/create.js +1 -1
  116. package/dist/commands/webhook/create.js.map +1 -1
  117. package/dist/commands/webhook/delete.js +1 -1
  118. package/dist/commands/webhook/delete.js.map +1 -1
  119. package/dist/commands/webhook/list.js +1 -1
  120. package/dist/commands/webhook/list.js.map +1 -1
  121. package/dist/utils/file-source.d.ts +109 -0
  122. package/dist/utils/file-source.d.ts.map +1 -1
  123. package/dist/utils/file-source.js +123 -0
  124. package/dist/utils/file-source.js.map +1 -1
  125. package/dist/utils/output/select.d.ts +22 -0
  126. package/dist/utils/output/select.d.ts.map +1 -1
  127. package/dist/utils/output/select.js +30 -0
  128. package/dist/utils/output/select.js.map +1 -1
  129. package/dist/utils/output/table.d.ts +10 -0
  130. package/dist/utils/output/table.d.ts.map +1 -1
  131. package/dist/utils/output/table.js +40 -3
  132. package/dist/utils/output/table.js.map +1 -1
  133. package/package.json +2 -1
@@ -0,0 +1,175 @@
1
+ /**
2
+ * Shared fetch-transport helpers (R-v0.8-NEW-11, v0.8). Both transport
3
+ * seams — the JSON `client.request`-over-`fetch` seam in
4
+ * `transport.ts` and the multipart `add_file_to_column`-over-`/v2/file`
5
+ * seam in `multipart-transport.ts` — need the same four primitives:
6
+ * a URL-/token-free fetch-error descriptor, an abort-vs-real-error
7
+ * discriminator, a `Headers` → record flattener, and an N-way
8
+ * `AbortSignal` combiner. Before this lift each module carried a
9
+ * verbatim-or-near-verbatim private copy; the multipart docstrings
10
+ * literally read "Mirrors `transport.ts:describeFetchError`" /
11
+ * "Mirrors `transport.ts:combineSignals`".
12
+ *
13
+ * **Why consolidate — not just tidy-up dedupe:**
14
+ *
15
+ * 1. **One test set covers the shared defensive branches once.** The
16
+ * `describeFetchError` TLS `UNABLE_TO_*` arm + `combineSignals`'s
17
+ * empty-input guard were uncovered in BOTH copies — duplicated
18
+ * uncovered branches that dragged global branch coverage below the
19
+ * 95.45% floor (R-v0.8-NEW-10, CI red). A single direct unit test
20
+ * on the shared module exercises every arm once instead of
21
+ * relying on two transports to drive each copy through `fetch`.
22
+ * 2. **The two `combineSignals` had already DRIFTED.**
23
+ * `transport.ts` hedged behind `typeof AbortSignal.any ===
24
+ * 'function'` + a legacy Node-<19 controller fallback;
25
+ * `multipart-transport.ts` assumed `AbortSignal.any` exists. The
26
+ * lift keeps `transport.ts`'s fallback — the safer SUPERSET — so a
27
+ * downstream embedder on an older Node still gets correct signal
28
+ * combination (R-v0.8-NEW-11 over-fit watch: the divergence is
29
+ * real, not cosmetic; do NOT collapse to multipart's narrower
30
+ * form).
31
+ * 3. **The fetch-error vocabulary is a contract surface.** Agents
32
+ * reading either transport's `error.message` see the SAME
33
+ * `connection refused` / `dns lookup failed` / `tls error`
34
+ * strings regardless of which seam issued the call — convergence
35
+ * was already an explicit goal in the old multipart docstring
36
+ * ("keep messaging stable across the JSON + multipart paths").
37
+ *
38
+ * This is helper-sharing, NOT a merge of the two transport seams —
39
+ * they keep separate modules + separate `Transport` /
40
+ * `MultipartTransport` interfaces per their different bodies (JSON
41
+ * `body: JSON.stringify(...)` vs `FormData` multipart). See
42
+ * `docs/architecture.md` "Wire-vs-CLI semantics documentation
43
+ * conventions" (R-NEW-41) for why the seams stay split.
44
+ */
45
+ import { errorCode } from '../utils/errors.js';
46
+ /**
47
+ * True for `fetch` rejections that mean "the request was aborted"
48
+ * (caller cancellation OR `AbortSignal.timeout`) rather than a real
49
+ * network failure. Callers use it to discriminate timeout from
50
+ * network_error: the timeout signal won iff the caller's own signal
51
+ * didn't fire first.
52
+ */
53
+ export const isAbortError = (err) => {
54
+ if (err instanceof Error) {
55
+ return err.name === 'AbortError' || err.name === 'TimeoutError';
56
+ }
57
+ return false;
58
+ };
59
+ /**
60
+ * Builds a generic, URL-free message for a thrown `fetch` exception.
61
+ *
62
+ * Why not `err.message`. Node's undici embeds the request URL into
63
+ * the messages of common transport errors — `ECONNREFUSED https://
64
+ * api.example/v2?token=...`, `getaddrinfo ENOTFOUND api.example`, etc.
65
+ * If `MONDAY_API_URL` is misconfigured to carry the token (or any
66
+ * other secret), the literal token lands in `ApiError.message`. The
67
+ * runner's redactor would catch it on emit, but `security.md` forbids
68
+ * the token entering `Error.message` in the first place — the rule is
69
+ * defence-in-depth, not "we'll fix it downstream". The original error
70
+ * is still attached via `cause`, which a future debug log surfaces
71
+ * through `redact()` (key + value scan) rather than verbatim.
72
+ *
73
+ * Maps the common shapes to short, stable codes:
74
+ * - DNS / hostname unresolvable → `dns lookup failed`
75
+ * - ECONNREFUSED / ECONNRESET → `connection refused`
76
+ * - SSL/TLS issue → `tls error`
77
+ * - generic Error → `fetch failed`
78
+ * - non-Error throw → `fetch failed`
79
+ */
80
+ export const describeFetchError = (err) => {
81
+ if (err instanceof Error) {
82
+ const code = errorCode(err);
83
+ if (code !== undefined) {
84
+ if (code.startsWith('ENOTFOUND') || code.startsWith('EAI_')) {
85
+ return 'fetch failed: dns lookup failed';
86
+ }
87
+ if (code === 'ECONNREFUSED' || code === 'ECONNRESET') {
88
+ return 'fetch failed: connection refused';
89
+ }
90
+ if (code === 'CERT_HAS_EXPIRED' || code.startsWith('UNABLE_TO_')) {
91
+ return 'fetch failed: tls error';
92
+ }
93
+ }
94
+ // Sniff the message for the same common shapes when err.code
95
+ // isn't surfaced (older fetch impls, wrapped TypeErrors).
96
+ const lower = err.message.toLowerCase();
97
+ if (lower.includes('econnrefused') || lower.includes('connection refused')) {
98
+ return 'fetch failed: connection refused';
99
+ }
100
+ if (lower.includes('enotfound') ||
101
+ lower.includes('eai_again') ||
102
+ lower.includes('getaddrinfo')) {
103
+ return 'fetch failed: dns lookup failed';
104
+ }
105
+ return 'fetch failed';
106
+ }
107
+ return 'fetch failed';
108
+ };
109
+ /**
110
+ * Flattens a `fetch` `Headers` instance into a plain record so the
111
+ * transport's `TransportResponse` / `MultipartTransportResponse` carry
112
+ * an inert snapshot (not a live `Headers` object) past the transport
113
+ * boundary.
114
+ */
115
+ export const headersToRecord = (headers) => {
116
+ const out = {};
117
+ headers.forEach((value, key) => {
118
+ out[key] = value;
119
+ });
120
+ return out;
121
+ };
122
+ /**
123
+ * Combines N optional `AbortSignal`s into one. The repo's Node 22+ pin
124
+ * always provides the platform `AbortSignal.any`, so that is the live,
125
+ * tested path; a legacy controller fallback ({@link combineSignalsLegacy})
126
+ * is kept for hypothetical downstream embedders on Node < 19.
127
+ *
128
+ * The fallback is `transport.ts`'s original — the safer SUPERSET kept
129
+ * deliberately over `multipart-transport.ts`'s narrower "assume
130
+ * `AbortSignal.any` exists" form (R-v0.8-NEW-11 over-fit watch). Only
131
+ * the feature-detect guard + the unreachable fallback are c8-ignored;
132
+ * the reachable `AbortSignal.any(real)` path stays counted so a
133
+ * regression in the multi-signal combination surfaces in coverage
134
+ * (Codex R1 P2-1).
135
+ */
136
+ export const combineSignals = (...signals) => {
137
+ const real = signals.filter((s) => s !== undefined);
138
+ const [first, ...rest] = real;
139
+ if (first === undefined) {
140
+ return new AbortController().signal;
141
+ }
142
+ if (rest.length === 0) {
143
+ return first;
144
+ }
145
+ // Node 22+ always has `AbortSignal.any`; the feature-detect guard +
146
+ // its legacy branch are unreachable on the pin, so the guard line is
147
+ // c8-ignored — but `AbortSignal.any(real)` below is NOT, so the
148
+ // multi-signal path is still coverage-counted.
149
+ /* c8 ignore next 3 */
150
+ if (typeof AbortSignal.any !== 'function') {
151
+ return combineSignalsLegacy(real);
152
+ }
153
+ return AbortSignal.any(real);
154
+ };
155
+ /**
156
+ * Pre-`AbortSignal.any` controller fallback (Node < 19). Unreachable on
157
+ * the repo's Node 22+ pin — kept as the safer superset for downstream
158
+ * embedders and c8-ignored as a block (testing.md block-wrap rule).
159
+ */
160
+ /* c8 ignore start */
161
+ const combineSignalsLegacy = (real) => {
162
+ const ctrl = new AbortController();
163
+ for (const s of real) {
164
+ if (s.aborted) {
165
+ ctrl.abort(s.reason);
166
+ break;
167
+ }
168
+ s.addEventListener('abort', () => {
169
+ ctrl.abort(s.reason);
170
+ }, { once: true });
171
+ }
172
+ return ctrl.signal;
173
+ };
174
+ /* c8 ignore stop */
175
+ //# sourceMappingURL=fetch-transport-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch-transport-helpers.js","sourceRoot":"","sources":["../../src/api/fetch-transport-helpers.ts"],"names":[],"mappings":"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"}