@37signals/basecamp 0.12.0 → 0.14.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 (294) hide show
  1. package/README.md +114 -17
  2. package/dist/.build-complete +0 -0
  3. package/dist/client.d.ts +53 -11
  4. package/dist/client.d.ts.map +1 -1
  5. package/dist/client.js +132 -150
  6. package/dist/client.js.map +1 -1
  7. package/dist/download.d.ts +7 -0
  8. package/dist/download.d.ts.map +1 -1
  9. package/dist/download.js +82 -22
  10. package/dist/download.js.map +1 -1
  11. package/dist/errors.d.ts +19 -1
  12. package/dist/errors.d.ts.map +1 -1
  13. package/dist/errors.js +138 -14
  14. package/dist/errors.js.map +1 -1
  15. package/dist/generated/metadata.d.ts.map +1 -1
  16. package/dist/generated/metadata.js +291 -141
  17. package/dist/generated/metadata.js.map +1 -1
  18. package/dist/generated/metadata.ts +291 -141
  19. package/dist/generated/openapi-stripped.json +5954 -3523
  20. package/dist/generated/path-mapping.d.ts.map +1 -1
  21. package/dist/generated/path-mapping.js +28 -16
  22. package/dist/generated/path-mapping.js.map +1 -1
  23. package/dist/generated/path-mapping.ts +28 -16
  24. package/dist/generated/schema.d.ts +4390 -2357
  25. package/dist/generated/services/bookmarks.d.ts +1 -1
  26. package/dist/generated/services/bookmarks.d.ts.map +1 -1
  27. package/dist/generated/services/bookmarks.ts +1 -1
  28. package/dist/generated/services/boosts.d.ts +10 -0
  29. package/dist/generated/services/boosts.d.ts.map +1 -1
  30. package/dist/generated/services/boosts.js +8 -0
  31. package/dist/generated/services/boosts.js.map +1 -1
  32. package/dist/generated/services/boosts.ts +12 -0
  33. package/dist/generated/services/campfires.d.ts +54 -40
  34. package/dist/generated/services/campfires.d.ts.map +1 -1
  35. package/dist/generated/services/campfires.js +82 -65
  36. package/dist/generated/services/campfires.js.map +1 -1
  37. package/dist/generated/services/campfires.ts +107 -85
  38. package/dist/generated/services/cards.d.ts +5 -0
  39. package/dist/generated/services/cards.d.ts.map +1 -1
  40. package/dist/generated/services/cards.js +4 -0
  41. package/dist/generated/services/cards.js.map +1 -1
  42. package/dist/generated/services/cards.ts +6 -0
  43. package/dist/generated/services/checkins.d.ts +14 -0
  44. package/dist/generated/services/checkins.d.ts.map +1 -1
  45. package/dist/generated/services/checkins.js +14 -1
  46. package/dist/generated/services/checkins.js.map +1 -1
  47. package/dist/generated/services/checkins.ts +20 -0
  48. package/dist/generated/services/client-approvals.d.ts +6 -3
  49. package/dist/generated/services/client-approvals.d.ts.map +1 -1
  50. package/dist/generated/services/client-approvals.js +8 -5
  51. package/dist/generated/services/client-approvals.js.map +1 -1
  52. package/dist/generated/services/client-approvals.ts +10 -5
  53. package/dist/generated/services/client-correspondences.d.ts +6 -3
  54. package/dist/generated/services/client-correspondences.d.ts.map +1 -1
  55. package/dist/generated/services/client-correspondences.js +8 -5
  56. package/dist/generated/services/client-correspondences.js.map +1 -1
  57. package/dist/generated/services/client-correspondences.ts +10 -5
  58. package/dist/generated/services/client-replies.d.ts +11 -4
  59. package/dist/generated/services/client-replies.d.ts.map +1 -1
  60. package/dist/generated/services/client-replies.js +16 -8
  61. package/dist/generated/services/client-replies.js.map +1 -1
  62. package/dist/generated/services/client-replies.ts +18 -8
  63. package/dist/generated/services/cloud-files.d.ts +92 -0
  64. package/dist/generated/services/cloud-files.d.ts.map +1 -0
  65. package/dist/generated/services/cloud-files.js +121 -0
  66. package/dist/generated/services/cloud-files.js.map +1 -0
  67. package/dist/generated/services/cloud-files.ts +188 -0
  68. package/dist/generated/services/comments.d.ts +5 -0
  69. package/dist/generated/services/comments.d.ts.map +1 -1
  70. package/dist/generated/services/comments.js +4 -0
  71. package/dist/generated/services/comments.js.map +1 -1
  72. package/dist/generated/services/comments.ts +6 -0
  73. package/dist/generated/services/documents.d.ts +12 -7
  74. package/dist/generated/services/documents.d.ts.map +1 -1
  75. package/dist/generated/services/documents.js +10 -6
  76. package/dist/generated/services/documents.js.map +1 -1
  77. package/dist/generated/services/documents.ts +14 -8
  78. package/dist/generated/services/drafts.d.ts +1 -1
  79. package/dist/generated/services/drafts.d.ts.map +1 -1
  80. package/dist/generated/services/drafts.ts +1 -1
  81. package/dist/generated/services/events.d.ts +5 -0
  82. package/dist/generated/services/events.d.ts.map +1 -1
  83. package/dist/generated/services/events.js +4 -0
  84. package/dist/generated/services/events.js.map +1 -1
  85. package/dist/generated/services/events.ts +6 -0
  86. package/dist/generated/services/everything.d.ts +14 -14
  87. package/dist/generated/services/everything.d.ts.map +1 -1
  88. package/dist/generated/services/everything.ts +14 -14
  89. package/dist/generated/services/folders.d.ts +96 -0
  90. package/dist/generated/services/folders.d.ts.map +1 -0
  91. package/dist/generated/services/folders.js +140 -0
  92. package/dist/generated/services/folders.js.map +1 -0
  93. package/dist/generated/services/folders.ts +201 -0
  94. package/dist/generated/services/forwards.d.ts +7 -20
  95. package/dist/generated/services/forwards.d.ts.map +1 -1
  96. package/dist/generated/services/forwards.js +6 -35
  97. package/dist/generated/services/forwards.js.map +1 -1
  98. package/dist/generated/services/forwards.ts +10 -48
  99. package/dist/generated/services/gauges.d.ts +7 -0
  100. package/dist/generated/services/gauges.d.ts.map +1 -1
  101. package/dist/generated/services/gauges.js +5 -1
  102. package/dist/generated/services/gauges.js.map +1 -1
  103. package/dist/generated/services/gauges.ts +9 -1
  104. package/dist/generated/services/google-documents.d.ts +98 -0
  105. package/dist/generated/services/google-documents.d.ts.map +1 -0
  106. package/dist/generated/services/google-documents.js +123 -0
  107. package/dist/generated/services/google-documents.js.map +1 -0
  108. package/dist/generated/services/google-documents.ts +196 -0
  109. package/dist/generated/services/index.d.ts +7 -4
  110. package/dist/generated/services/index.d.ts.map +1 -1
  111. package/dist/generated/services/index.js +7 -4
  112. package/dist/generated/services/index.js.map +1 -1
  113. package/dist/generated/services/index.ts +7 -4
  114. package/dist/generated/services/messages.d.ts +2 -0
  115. package/dist/generated/services/messages.d.ts.map +1 -1
  116. package/dist/generated/services/messages.js +1 -1
  117. package/dist/generated/services/messages.js.map +1 -1
  118. package/dist/generated/services/messages.ts +3 -1
  119. package/dist/generated/services/my-notes.d.ts +1 -1
  120. package/dist/generated/services/my-notes.js +1 -1
  121. package/dist/generated/services/my-notes.ts +1 -1
  122. package/dist/generated/services/my-notifications.d.ts +4 -2
  123. package/dist/generated/services/my-notifications.d.ts.map +1 -1
  124. package/dist/generated/services/my-notifications.js.map +1 -1
  125. package/dist/generated/services/my-notifications.ts +4 -2
  126. package/dist/generated/services/people.d.ts +11 -1
  127. package/dist/generated/services/people.d.ts.map +1 -1
  128. package/dist/generated/services/people.js +13 -2
  129. package/dist/generated/services/people.js.map +1 -1
  130. package/dist/generated/services/people.ts +15 -1
  131. package/dist/generated/services/projects.d.ts +26 -0
  132. package/dist/generated/services/projects.d.ts.map +1 -1
  133. package/dist/generated/services/projects.js +49 -1
  134. package/dist/generated/services/projects.js.map +1 -1
  135. package/dist/generated/services/projects.ts +61 -1
  136. package/dist/generated/services/recordings.d.ts +2 -12
  137. package/dist/generated/services/recordings.d.ts.map +1 -1
  138. package/dist/generated/services/recordings.js +1 -26
  139. package/dist/generated/services/recordings.js.map +1 -1
  140. package/dist/generated/services/recordings.ts +3 -31
  141. package/dist/generated/services/reports.d.ts +8 -12
  142. package/dist/generated/services/reports.d.ts.map +1 -1
  143. package/dist/generated/services/reports.js +11 -5
  144. package/dist/generated/services/reports.js.map +1 -1
  145. package/dist/generated/services/reports.ts +13 -14
  146. package/dist/generated/services/schedules.d.ts +94 -15
  147. package/dist/generated/services/schedules.d.ts.map +1 -1
  148. package/dist/generated/services/schedules.js +19 -8
  149. package/dist/generated/services/schedules.js.map +1 -1
  150. package/dist/generated/services/schedules.ts +107 -17
  151. package/dist/generated/services/search.d.ts +2 -0
  152. package/dist/generated/services/search.d.ts.map +1 -1
  153. package/dist/generated/services/search.js +1 -1
  154. package/dist/generated/services/search.js.map +1 -1
  155. package/dist/generated/services/search.ts +3 -1
  156. package/dist/generated/services/templates.d.ts +2 -0
  157. package/dist/generated/services/templates.d.ts.map +1 -1
  158. package/dist/generated/services/templates.js +1 -1
  159. package/dist/generated/services/templates.js.map +1 -1
  160. package/dist/generated/services/templates.ts +3 -1
  161. package/dist/generated/services/timeline.d.ts +2 -0
  162. package/dist/generated/services/timeline.d.ts.map +1 -1
  163. package/dist/generated/services/timeline.js +1 -0
  164. package/dist/generated/services/timeline.js.map +1 -1
  165. package/dist/generated/services/timeline.ts +3 -0
  166. package/dist/generated/services/timesheets.d.ts +16 -0
  167. package/dist/generated/services/timesheets.d.ts.map +1 -1
  168. package/dist/generated/services/timesheets.js +26 -2
  169. package/dist/generated/services/timesheets.js.map +1 -1
  170. package/dist/generated/services/timesheets.ts +35 -2
  171. package/dist/generated/services/todolist-groups.d.ts +11 -6
  172. package/dist/generated/services/todolist-groups.d.ts.map +1 -1
  173. package/dist/generated/services/todolist-groups.js +7 -3
  174. package/dist/generated/services/todolist-groups.js.map +1 -1
  175. package/dist/generated/services/todolist-groups.ts +13 -7
  176. package/dist/generated/services/todolists.d.ts +15 -13
  177. package/dist/generated/services/todolists.d.ts.map +1 -1
  178. package/dist/generated/services/todolists.js +11 -8
  179. package/dist/generated/services/todolists.js.map +1 -1
  180. package/dist/generated/services/todolists.ts +19 -14
  181. package/dist/generated/services/todos.d.ts +2 -12
  182. package/dist/generated/services/todos.d.ts.map +1 -1
  183. package/dist/generated/services/todos.js +1 -25
  184. package/dist/generated/services/todos.js.map +1 -1
  185. package/dist/generated/services/todos.ts +3 -30
  186. package/dist/generated/services/uploads.d.ts +41 -2
  187. package/dist/generated/services/uploads.d.ts.map +1 -1
  188. package/dist/generated/services/uploads.js +41 -1
  189. package/dist/generated/services/uploads.js.map +1 -1
  190. package/dist/generated/services/uploads.ts +71 -2
  191. package/dist/generated/services/vaults.d.ts +5 -0
  192. package/dist/generated/services/vaults.d.ts.map +1 -1
  193. package/dist/generated/services/vaults.js +4 -0
  194. package/dist/generated/services/vaults.js.map +1 -1
  195. package/dist/generated/services/vaults.ts +6 -0
  196. package/dist/index.d.ts +16 -10
  197. package/dist/index.d.ts.map +1 -1
  198. package/dist/index.js +19 -8
  199. package/dist/index.js.map +1 -1
  200. package/dist/oauth/authorization-document.d.ts +201 -0
  201. package/dist/oauth/authorization-document.d.ts.map +1 -0
  202. package/dist/oauth/authorization-document.js +130 -0
  203. package/dist/oauth/authorization-document.js.map +1 -0
  204. package/dist/oauth/identity.d.ts +7 -1
  205. package/dist/oauth/identity.d.ts.map +1 -1
  206. package/dist/oauth/identity.js +8 -19
  207. package/dist/oauth/identity.js.map +1 -1
  208. package/dist/oauth/index.d.ts +1 -0
  209. package/dist/oauth/index.d.ts.map +1 -1
  210. package/dist/oauth/index.js +2 -0
  211. package/dist/oauth/index.js.map +1 -1
  212. package/dist/pagination-utils.d.ts +46 -0
  213. package/dist/pagination-utils.d.ts.map +1 -1
  214. package/dist/pagination-utils.js +85 -2
  215. package/dist/pagination-utils.js.map +1 -1
  216. package/dist/pagination.d.ts +11 -0
  217. package/dist/pagination.d.ts.map +1 -1
  218. package/dist/pagination.js.map +1 -1
  219. package/dist/retry.d.ts +110 -0
  220. package/dist/retry.d.ts.map +1 -0
  221. package/dist/retry.js +253 -0
  222. package/dist/retry.js.map +1 -0
  223. package/dist/services/authorization.d.ts +22 -52
  224. package/dist/services/authorization.d.ts.map +1 -1
  225. package/dist/services/authorization.js +14 -32
  226. package/dist/services/authorization.js.map +1 -1
  227. package/dist/services/base.d.ts.map +1 -1
  228. package/dist/services/base.js +59 -5
  229. package/dist/services/base.js.map +1 -1
  230. package/dist/services/cards-extensions.d.ts +26 -21
  231. package/dist/services/cards-extensions.d.ts.map +1 -1
  232. package/dist/services/cards-extensions.js +28 -31
  233. package/dist/services/cards-extensions.js.map +1 -1
  234. package/dist/services/documents-extensions.d.ts +122 -0
  235. package/dist/services/documents-extensions.d.ts.map +1 -0
  236. package/dist/services/documents-extensions.js +125 -0
  237. package/dist/services/documents-extensions.js.map +1 -0
  238. package/dist/services/merge-safe.d.ts +167 -0
  239. package/dist/services/merge-safe.d.ts.map +1 -0
  240. package/dist/services/merge-safe.js +217 -0
  241. package/dist/services/merge-safe.js.map +1 -0
  242. package/dist/services/schedules-extensions.d.ts +266 -0
  243. package/dist/services/schedules-extensions.d.ts.map +1 -0
  244. package/dist/services/schedules-extensions.js +268 -0
  245. package/dist/services/schedules-extensions.js.map +1 -0
  246. package/dist/services/todolists-extensions.d.ts +110 -0
  247. package/dist/services/todolists-extensions.d.ts.map +1 -0
  248. package/dist/services/todolists-extensions.js +262 -0
  249. package/dist/services/todolists-extensions.js.map +1 -0
  250. package/dist/services/todos-extensions.d.ts +12 -1
  251. package/dist/services/todos-extensions.d.ts.map +1 -1
  252. package/dist/services/todos-extensions.js +27 -8
  253. package/dist/services/todos-extensions.js.map +1 -1
  254. package/package.json +6 -5
  255. package/src/generated/metadata.ts +291 -141
  256. package/src/generated/openapi-stripped.json +5954 -3523
  257. package/src/generated/path-mapping.ts +28 -16
  258. package/src/generated/schema.d.ts +4390 -2357
  259. package/src/generated/services/bookmarks.ts +1 -1
  260. package/src/generated/services/boosts.ts +12 -0
  261. package/src/generated/services/campfires.ts +107 -85
  262. package/src/generated/services/cards.ts +6 -0
  263. package/src/generated/services/checkins.ts +20 -0
  264. package/src/generated/services/client-approvals.ts +10 -5
  265. package/src/generated/services/client-correspondences.ts +10 -5
  266. package/src/generated/services/client-replies.ts +18 -8
  267. package/src/generated/services/cloud-files.ts +188 -0
  268. package/src/generated/services/comments.ts +6 -0
  269. package/src/generated/services/documents.ts +14 -8
  270. package/src/generated/services/drafts.ts +1 -1
  271. package/src/generated/services/events.ts +6 -0
  272. package/src/generated/services/everything.ts +14 -14
  273. package/src/generated/services/folders.ts +201 -0
  274. package/src/generated/services/forwards.ts +10 -48
  275. package/src/generated/services/gauges.ts +9 -1
  276. package/src/generated/services/google-documents.ts +196 -0
  277. package/src/generated/services/index.ts +7 -4
  278. package/src/generated/services/messages.ts +3 -1
  279. package/src/generated/services/my-notes.ts +1 -1
  280. package/src/generated/services/my-notifications.ts +4 -2
  281. package/src/generated/services/people.ts +15 -1
  282. package/src/generated/services/projects.ts +61 -1
  283. package/src/generated/services/recordings.ts +3 -31
  284. package/src/generated/services/reports.ts +13 -14
  285. package/src/generated/services/schedules.ts +107 -17
  286. package/src/generated/services/search.ts +3 -1
  287. package/src/generated/services/templates.ts +3 -1
  288. package/src/generated/services/timeline.ts +3 -0
  289. package/src/generated/services/timesheets.ts +35 -2
  290. package/src/generated/services/todolist-groups.ts +13 -7
  291. package/src/generated/services/todolists.ts +19 -14
  292. package/src/generated/services/todos.ts +3 -30
  293. package/src/generated/services/uploads.ts +71 -2
  294. package/src/generated/services/vaults.ts +6 -0
package/dist/download.js CHANGED
@@ -1,5 +1,17 @@
1
1
  import { BasecampError, Errors, errorFromResponse } from "./errors.js";
2
2
  import { safeInvoke } from "./hooks.js";
3
+ import { TerminalRetryError, executeWithRetry, } from "./retry.js";
4
+ /**
5
+ * The fixed hop-1 retry policy (SPEC §14): three total attempts when retry is
6
+ * enabled, retrying network errors plus {429, 502, 503, 504} — never 500 —
7
+ * with exponential backoff, honoring Retry-After on 429. DownloadURL is
8
+ * deliberately absent from behavior-model.json, so the policy is passed to
9
+ * the retry primitive directly rather than looked up by operation. There is
10
+ * no public knob for the attempt count.
11
+ */
12
+ const DOWNLOAD_MAX_ATTEMPTS = 3;
13
+ const DOWNLOAD_RETRY_ON = [429, 502, 503, 504];
14
+ const DOWNLOAD_RETRY_BASE_DELAY_MS = 1000;
3
15
  /**
4
16
  * Extracts a filename from the last path segment of a URL.
5
17
  * Falls back to "download" if the URL is unparseable or has no path segments.
@@ -42,7 +54,7 @@ function parseContentLength(headers) {
42
54
  * other signed-download URL that routes through the API.
43
55
  */
44
56
  export function createDownloadURL(deps) {
45
- const { authStrategy, userAgent, baseUrl, hooks, requestTimeoutMs } = deps;
57
+ const { authStrategy, userAgent, baseUrl, hooks, requestTimeoutMs, enableRetry, retryBaseDelayMs } = deps;
46
58
  return async (rawURL) => {
47
59
  // Validation
48
60
  if (!rawURL) {
@@ -72,24 +84,69 @@ export function createDownloadURL(deps) {
72
84
  // URL rewriting: replace origin with baseUrl origin, preserve path+query
73
85
  const base = new URL(baseUrl);
74
86
  const rewrittenURL = `${base.origin}${parsed.pathname}${parsed.search}${parsed.hash}`;
75
- // Hop 1: Authenticated API request (capture redirect)
87
+ // Hop 1: Authenticated API request (capture redirect), under the fixed
88
+ // hop-1 retry policy. Attempt 1's auth runs here, outside the loop, so
89
+ // a failing strategy surfaces raw without request hooks — matching the
90
+ // client path, where the middleware authenticates before the loop.
76
91
  const headers = new Headers({
77
92
  "User-Agent": userAgent,
78
93
  });
79
94
  await authStrategy.authenticate(headers);
80
- const requestInfo = {
95
+ const downloadRetryConfig = {
96
+ maxAttempts: enableRetry ? DOWNLOAD_MAX_ATTEMPTS : 1,
97
+ baseDelayMs: retryBaseDelayMs ?? DOWNLOAD_RETRY_BASE_DELAY_MS,
98
+ backoff: "exponential",
99
+ retryOn: DOWNLOAD_RETRY_ON,
100
+ };
101
+ const requestInfoFor = (attempt) => ({
81
102
  method: "GET",
82
103
  url: rewrittenURL,
83
- attempt: 1,
104
+ attempt,
105
+ });
106
+ // The download path has no lifecycle middleware, so the emit seams fire
107
+ // the hooks directly. executeWithRetry finalizes only the attempts it
108
+ // abandons; the terminal outcome is finalized after the loop below.
109
+ let currentAttempt = 1;
110
+ let attemptStart = performance.now();
111
+ const emit = {
112
+ begin: (attempt) => {
113
+ currentAttempt = attempt;
114
+ attemptStart = performance.now();
115
+ safeInvoke(hooks, "onRequestStart", requestInfoFor(attempt));
116
+ },
117
+ finalize: (outcome) => {
118
+ const durationMs = Math.round(performance.now() - attemptStart);
119
+ safeInvoke(hooks, "onRequestEnd", requestInfoFor(currentAttempt), {
120
+ statusCode: outcome.statusCode,
121
+ durationMs,
122
+ fromCache: false,
123
+ ...(outcome.error ? { error: outcome.error } : {}),
124
+ });
125
+ },
126
+ retrying: (failedAttempt, error, delayMs) => {
127
+ safeInvoke(hooks, "onRetry", requestInfoFor(failedAttempt), failedAttempt + 1, error, delayMs);
128
+ },
84
129
  };
85
- safeInvoke(hooks, "onRequestStart", requestInfo);
86
- const reqStart = performance.now();
87
- let response;
88
- try {
130
+ const makeAttempt = async (attempt) => {
131
+ if (attempt > 1) {
132
+ // Refresh auth (the token may have rotated since the last attempt),
133
+ // so EVERY hop-1 attempt goes out authenticated. A throwing refresh
134
+ // is terminal: the marker carries it raw past retry classification.
135
+ try {
136
+ await authStrategy.authenticate(headers);
137
+ }
138
+ catch (error) {
139
+ throw new TerminalRetryError(error);
140
+ }
141
+ }
142
+ // Per-attempt timeout: the controller aborts only its own fetch, and
143
+ // an abort-shaped rejection is terminal in the loop — a request that
144
+ // consumed its whole time budget is a slowness shape a retry tends to
145
+ // repeat, not a transient blip.
89
146
  const controller = new AbortController();
90
147
  const timeoutId = setTimeout(() => controller.abort(), requestTimeoutMs);
91
148
  try {
92
- response = await fetch(rewrittenURL, {
149
+ return await fetch(rewrittenURL, {
93
150
  method: "GET",
94
151
  headers,
95
152
  redirect: "manual",
@@ -99,24 +156,27 @@ export function createDownloadURL(deps) {
99
156
  finally {
100
157
  clearTimeout(timeoutId);
101
158
  }
159
+ };
160
+ let response;
161
+ try {
162
+ response = await executeWithRetry(makeAttempt, downloadRetryConfig, emit);
102
163
  }
103
164
  catch (err) {
104
- const durationMs = Math.round(performance.now() - reqStart);
165
+ if (err instanceof TerminalRetryError) {
166
+ // A retry's auth refresh failed: finalize the live attempt, then
167
+ // surface the strategy's own error raw — auth faults are neither
168
+ // transport failures nor API errors.
169
+ const reason = err.reason;
170
+ const error = reason instanceof Error ? reason : new Error(String(reason));
171
+ emit.finalize({ statusCode: 0, error });
172
+ throw reason;
173
+ }
105
174
  const error = err instanceof Error ? err : new Error(String(err));
106
- safeInvoke(hooks, "onRequestEnd", requestInfo, {
107
- statusCode: 0,
108
- durationMs,
109
- fromCache: false,
110
- error,
111
- });
175
+ emit.finalize({ statusCode: 0, error });
112
176
  throw Errors.network(error.message, error);
113
177
  }
114
- const durationMs = Math.round(performance.now() - reqStart);
115
- safeInvoke(hooks, "onRequestEnd", requestInfo, {
116
- statusCode: response.status,
117
- durationMs,
118
- fromCache: false,
119
- });
178
+ // Terminal attempt's end — the loop deliberately leaves it to us.
179
+ emit.finalize({ statusCode: response.status });
120
180
  // Dispatch on response status
121
181
  const isRedirect = [301, 302, 303, 307, 308].includes(response.status);
122
182
  if (isRedirect) {
@@ -1 +1 @@
1
- {"version":3,"file":"download.js","sourceRoot":"","sources":["../src/download.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"download.js","sourceRoot":"","sources":["../src/download.ts"],"names":[],"mappings":"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"}
package/dist/errors.d.ts CHANGED
@@ -32,7 +32,7 @@ export declare function truncateErrorMessage(s: string, maxLen?: number): string
32
32
  /**
33
33
  * Error codes for categorizing Basecamp API errors.
34
34
  */
35
- export type ErrorCode = "auth_required" | "forbidden" | "not_found" | "rate_limit" | "validation" | "ambiguous" | "network" | "api_error" | "usage";
35
+ export type ErrorCode = "auth_required" | "forbidden" | "not_found" | "rate_limit" | "validation" | "ambiguous" | "network" | "api_error" | "usage" | "limit_exceeded";
36
36
  /**
37
37
  * Options for creating a BasecampError.
38
38
  */
@@ -49,6 +49,8 @@ export interface BasecampErrorOptions {
49
49
  retryAfter?: number;
50
50
  /** Request ID from the server for debugging */
51
51
  requestId?: string;
52
+ /** Field-keyed validation messages from a 400/422 body, wrapped ({"errors": {field: [messages]}}) or bare ({field: [messages]}) */
53
+ fieldErrors?: Record<string, string[]>;
52
54
  }
53
55
  /**
54
56
  * Structured error class for Basecamp API errors.
@@ -69,6 +71,15 @@ export declare class BasecampError extends Error {
69
71
  readonly retryAfter?: number;
70
72
  /** Request ID from the server for debugging */
71
73
  readonly requestId?: string;
74
+ /**
75
+ * Field-keyed validation messages from a 422 body of the form
76
+ * `{"errors": {"field": ["msg", ...]}}` — the Rails RecordInvalid rendering —
77
+ * or the same map with no wrapper at all (`{"field": ["msg", ...]}`), which
78
+ * some controllers emit. Undefined for every other error shape. The flattened
79
+ * form is also folded into `message`; this slot preserves the raw, untruncated
80
+ * per-field messages.
81
+ */
82
+ readonly fieldErrors?: Record<string, string[]>;
72
83
  /** Original error that caused this error (ES2022+) */
73
84
  readonly cause?: Error;
74
85
  constructor(code: ErrorCode, message: string, options?: BasecampErrorOptions);
@@ -140,6 +151,13 @@ export declare const Errors: {
140
151
  * Useful for mapping API responses to typed errors.
141
152
  */
142
153
  export declare function errorFromResponse(response: Response, requestId?: string): Promise<BasecampError>;
154
+ /**
155
+ * Creates a BasecampError from an HTTP response whose body has already been
156
+ * read and parsed (e.g. by openapi-fetch, which consumes the error body before
157
+ * the service layer sees the response — re-reading it would throw and lose the
158
+ * server's message).
159
+ */
160
+ export declare function errorFromParsedBody(response: Response, body: unknown, requestId?: string): BasecampError;
143
161
  /**
144
162
  * Type guard to check if an error is a BasecampError.
145
163
  */
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAOH;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,GAAE,MAAiC,GAAG,MAAM,CAGjG;AAED;;GAEG;AACH,MAAM,MAAM,SAAS,GACjB,eAAe,GACf,WAAW,GACX,WAAW,GACX,YAAY,GACZ,YAAY,GACZ,WAAW,GACX,SAAS,GACT,WAAW,GACX,OAAO,CAAC;AAEZ;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,iDAAiD;IACjD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2CAA2C;IAC3C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,4CAA4C;IAC5C,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,kEAAkE;IAClE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAkBD;;;;;GAKG;AACH,qBAAa,aAAc,SAAQ,KAAK;IACtC,0BAA0B;IAC1B,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAEzB,iDAAiD;IACjD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAEvB,6CAA6C;IAC7C,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAE7B,2CAA2C;IAC3C,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAE5B,kEAAkE;IAClE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAE7B,+CAA+C;IAC/C,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAE5B,sDAAsD;IACtD,SAAiB,KAAK,CAAC,EAAE,KAAK,CAAC;gBAEnB,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,oBAAoB;IAqB5E;;;OAGG;IACH,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED;;OAEG;IACH,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAYlC;AAED;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,MAAM;IACjB;;OAEG;kBACW,MAAM,UAAU,KAAK,KAAG,aAAa;IAOnD;;OAEG;uBACgB,MAAM,UAAU,KAAK,KAAG,aAAa;IAOxD;;OAEG;yBACkB,MAAM,OAAO,MAAM,GAAG,MAAM,KAAG,aAAa;IAOjE;;OAEG;6BACsB,MAAM,UAAU,KAAK,KAAG,aAAa;IAS9D;;OAEG;0BACmB,MAAM,SAAS,MAAM,KAAG,aAAa;IAM3D;;OAEG;0BACmB,MAAM,WAAW,MAAM,EAAE,KAAG,aAAa;IAO/D;;OAEG;uBACgB,MAAM,UAAU,KAAK,KAAG,aAAa;IAOxD;;OAEG;qBACc,MAAM,SAAS,MAAM,KAAG,aAAa;IAGtD;;OAEG;wBAEQ,MAAM,eACF,MAAM,YACT,IAAI,CAAC,oBAAoB,EAAE,MAAM,GAAG,WAAW,GAAG,WAAW,GAAG,OAAO,CAAC,KACjF,aAAa;CAKjB,CAAC;AAEF;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,QAAQ,EAClB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,aAAa,CAAC,CAmDxB;AA2BD;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAEtE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,GAAG,KAAK,IAAI,aAAa,CAEnF"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
package/dist/errors.js CHANGED
@@ -51,6 +51,7 @@ const EXIT_CODES = {
51
51
  api_error: 7, // API error
52
52
  ambiguous: 8, // Multiple matches found
53
53
  validation: 9, // Validation error (HTTP 400/422)
54
+ limit_exceeded: 10, // Account limit reached (HTTP 507)
54
55
  };
55
56
  /**
56
57
  * Structured error class for Basecamp API errors.
@@ -71,6 +72,15 @@ export class BasecampError extends Error {
71
72
  retryAfter;
72
73
  /** Request ID from the server for debugging */
73
74
  requestId;
75
+ /**
76
+ * Field-keyed validation messages from a 422 body of the form
77
+ * `{"errors": {"field": ["msg", ...]}}` — the Rails RecordInvalid rendering —
78
+ * or the same map with no wrapper at all (`{"field": ["msg", ...]}`), which
79
+ * some controllers emit. Undefined for every other error shape. The flattened
80
+ * form is also folded into `message`; this slot preserves the raw, untruncated
81
+ * per-field messages.
82
+ */
83
+ fieldErrors;
74
84
  constructor(code, message, options) {
75
85
  super(message);
76
86
  this.name = "BasecampError";
@@ -80,6 +90,7 @@ export class BasecampError extends Error {
80
90
  this.retryable = options?.retryable ?? false;
81
91
  this.retryAfter = options?.retryAfter;
82
92
  this.requestId = options?.requestId;
93
+ this.fieldErrors = options?.fieldErrors;
83
94
  // Set cause if provided (ES2022+)
84
95
  if (options?.cause) {
85
96
  this.cause = options.cause;
@@ -109,6 +120,7 @@ export class BasecampError extends Error {
109
120
  retryable: this.retryable,
110
121
  retryAfter: this.retryAfter,
111
122
  requestId: this.requestId,
123
+ fieldErrors: this.fieldErrors,
112
124
  };
113
125
  }
114
126
  }
@@ -199,26 +211,55 @@ export const Errors = {
199
211
  * Useful for mapping API responses to typed errors.
200
212
  */
201
213
  export async function errorFromResponse(response, requestId) {
214
+ let body;
215
+ try {
216
+ body = await response.json();
217
+ }
218
+ catch {
219
+ // Body is not JSON or empty, use status text
220
+ body = undefined;
221
+ }
222
+ return errorFromParsedBody(response, body, requestId);
223
+ }
224
+ /**
225
+ * Creates a BasecampError from an HTTP response whose body has already been
226
+ * read and parsed (e.g. by openapi-fetch, which consumes the error body before
227
+ * the service layer sees the response — re-reading it would throw and lose the
228
+ * server's message).
229
+ */
230
+ export function errorFromParsedBody(response, body, requestId) {
202
231
  const httpStatus = response.status;
203
232
  const retryAfter = parseRetryAfter(response.headers.get("Retry-After"));
204
- // Try to extract error message from response body
233
+ // Try to extract error message from the parsed body
205
234
  let message = response.statusText || "Request failed";
235
+ let serverMessage;
206
236
  let hint;
207
- try {
208
- const body = await response.json();
209
- if (typeof body === "object" && body !== null) {
210
- if ("error" in body && typeof body.error === "string") {
211
- // Truncate error messages to prevent information leakage and unbounded memory growth
212
- message = truncateErrorMessage(body.error);
213
- }
214
- if ("error_description" in body && typeof body.error_description === "string") {
215
- hint = truncateErrorMessage(body.error_description);
237
+ let fieldErrors;
238
+ if (typeof body === "object" && body !== null) {
239
+ if ("error" in body && typeof body.error === "string") {
240
+ // Truncate error messages to prevent information leakage and unbounded memory growth
241
+ serverMessage = truncateErrorMessage(body.error);
242
+ message = serverMessage;
243
+ }
244
+ else if ("message" in body && typeof body.message === "string") {
245
+ // SPEC §6 step 4: "message" is the fallback for APIs that use it
246
+ // instead of "error".
247
+ serverMessage = truncateErrorMessage(body.message);
248
+ message = serverMessage;
249
+ }
250
+ if ("error_description" in body && typeof body.error_description === "string") {
251
+ hint = truncateErrorMessage(body.error_description);
252
+ }
253
+ if (httpStatus === 400 || httpStatus === 422) {
254
+ fieldErrors = parseFieldErrors(body);
255
+ if (fieldErrors) {
256
+ const flat = flattenFieldErrors(fieldErrors);
257
+ // Appended in parentheses after a top-level message, standing alone
258
+ // otherwise; truncated after flattening so the tail is capped too.
259
+ message = truncateErrorMessage(serverMessage ? `${serverMessage} (${flat})` : flat);
216
260
  }
217
261
  }
218
262
  }
219
- catch {
220
- // Body is not JSON or empty, use status text
221
- }
222
263
  switch (httpStatus) {
223
264
  case 401:
224
265
  return new BasecampError("auth_required", message, { httpStatus, hint, requestId });
@@ -236,7 +277,17 @@ export async function errorFromResponse(response, requestId) {
236
277
  });
237
278
  case 400:
238
279
  case 422:
239
- return new BasecampError("validation", message, { httpStatus, hint, requestId });
280
+ return new BasecampError("validation", message, { httpStatus, hint, requestId, fieldErrors });
281
+ case 507:
282
+ // A 5xx status carrying a client fact: the account is out of storage, or
283
+ // at its webhook ceiling. Retrying cannot satisfy it, so this must be
284
+ // decided before the 5xx catch-all below.
285
+ return new BasecampError("limit_exceeded", message, {
286
+ httpStatus,
287
+ retryable: false,
288
+ hint,
289
+ requestId,
290
+ });
240
291
  default:
241
292
  // 5xx errors are retryable
242
293
  const retryable = httpStatus >= 500 && httpStatus < 600;
@@ -248,6 +299,79 @@ export async function errorFromResponse(response, requestId) {
248
299
  });
249
300
  }
250
301
  }
302
+ /**
303
+ * Extracts the field-keyed validation errors map from a parsed error body —
304
+ * the Rails RecordInvalid rendering `{"errors": {"field": ["msg", ...]}}`.
305
+ * Entries whose value is not an array are skipped, non-string elements are
306
+ * dropped, and a map with no usable entries is treated as absent (undefined).
307
+ *
308
+ * A body with no `errors` key falls through to `parseBareFieldErrors` for the
309
+ * unwrapped rendering.
310
+ */
311
+ function parseFieldErrors(body) {
312
+ const errors = body.errors;
313
+ if (typeof errors !== "object" || errors === null || Array.isArray(errors)) {
314
+ return parseBareFieldErrors(body);
315
+ }
316
+ // Null prototype so an untrusted field name like "__proto__" becomes an
317
+ // ordinary own property instead of invoking the legacy prototype setter
318
+ // (which would both drop the entry and mutate the map's prototype).
319
+ const fieldErrors = Object.create(null);
320
+ let found = false;
321
+ for (const [field, value] of Object.entries(errors)) {
322
+ if (!Array.isArray(value))
323
+ continue;
324
+ const messages = value.filter((m) => typeof m === "string");
325
+ if (messages.length === 0)
326
+ continue;
327
+ fieldErrors[field] = messages;
328
+ found = true;
329
+ }
330
+ return found ? fieldErrors : undefined;
331
+ }
332
+ /**
333
+ * Extracts an unwrapped field map — the `render json: @webhook.errors`
334
+ * rendering, where the whole body is `{"field": ["msg", ...]}`. The gate is
335
+ * all-or-nothing by design (SPEC §6 step 2): with no `errors` key to declare
336
+ * intent, only shape distinguishes a field map from any other JSON object, so
337
+ * a single non-conforming member means this is not one. Returns undefined
338
+ * unless every member is a non-empty array of non-empty strings.
339
+ */
340
+ function parseBareFieldErrors(body) {
341
+ if (Array.isArray(body))
342
+ return undefined;
343
+ // Only "errors" is structurally reserved (it belongs to step 1). "error" and
344
+ // "message" are not excluded by name: a flat body carries them as strings,
345
+ // which the shape gate below already rejects.
346
+ if ("errors" in body)
347
+ return undefined;
348
+ const entries = Object.entries(body);
349
+ if (entries.length === 0)
350
+ return undefined;
351
+ // Null prototype, for the same reason as the wrapped map: field names are
352
+ // data, and "__proto__" must land as an ordinary own property.
353
+ const fieldErrors = Object.create(null);
354
+ for (const [field, value] of entries) {
355
+ if (!Array.isArray(value) || value.length === 0)
356
+ return undefined;
357
+ if (!value.every((m) => typeof m === "string" && m.length > 0))
358
+ return undefined;
359
+ fieldErrors[field] = value;
360
+ }
361
+ return fieldErrors;
362
+ }
363
+ /**
364
+ * Flattens a field-keyed errors map as "field: msg1; msg2, other: msg" —
365
+ * fields sorted lexicographically, a field's messages joined with "; ",
366
+ * fields joined with ", ". This shape is shared by all six SDKs; change it
367
+ * everywhere or nowhere.
368
+ */
369
+ function flattenFieldErrors(fieldErrors) {
370
+ return Object.entries(fieldErrors)
371
+ .sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0))
372
+ .map(([field, messages]) => `${field}: ${messages.join("; ")}`)
373
+ .join(", ");
374
+ }
251
375
  /**
252
376
  * Parses the Retry-After header value.
253
377
  * Supports both seconds (integer) and HTTP-date formats.
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../src/generated/metadata.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,aAAa,GAAG,QAAQ,GAAG,UAAU,CAAC;IAC/C,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,UAAU,CAAC,EAAE,gBAAgB,CAAC;CAC/B;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;CAC/C;AAED,QAAA,MAAM,QAAQ,EAAE,cAslGf,CAAC;AAEF,eAAe,QAAQ,CAAC"}
1
+ {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../src/generated/metadata.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,aAAa,GAAG,QAAQ,GAAG,UAAU,CAAC;IAC/C,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,UAAU,CAAC,EAAE,gBAAgB,CAAC;CAC/B;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;CAC/C;AAED,QAAA,MAAM,QAAQ,EAAE,cA4uGf,CAAC;AAEF,eAAe,QAAQ,CAAC"}