@37signals/basecamp 0.12.0 → 0.13.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.
- package/README.md +112 -16
- package/dist/.build-complete +0 -0
- package/dist/client.d.ts +53 -11
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +132 -150
- package/dist/client.js.map +1 -1
- package/dist/download.d.ts +7 -0
- package/dist/download.d.ts.map +1 -1
- package/dist/download.js +82 -22
- package/dist/download.js.map +1 -1
- package/dist/errors.d.ts +18 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +127 -14
- package/dist/errors.js.map +1 -1
- package/dist/generated/metadata.d.ts.map +1 -1
- package/dist/generated/metadata.js +280 -141
- package/dist/generated/metadata.js.map +1 -1
- package/dist/generated/metadata.ts +280 -141
- package/dist/generated/openapi-stripped.json +6435 -4283
- package/dist/generated/path-mapping.d.ts.map +1 -1
- package/dist/generated/path-mapping.js +27 -16
- package/dist/generated/path-mapping.js.map +1 -1
- package/dist/generated/path-mapping.ts +27 -16
- package/dist/generated/schema.d.ts +4283 -2457
- package/dist/generated/services/bookmarks.d.ts +1 -1
- package/dist/generated/services/bookmarks.d.ts.map +1 -1
- package/dist/generated/services/bookmarks.ts +1 -1
- package/dist/generated/services/boosts.d.ts +10 -0
- package/dist/generated/services/boosts.d.ts.map +1 -1
- package/dist/generated/services/boosts.js +8 -0
- package/dist/generated/services/boosts.js.map +1 -1
- package/dist/generated/services/boosts.ts +12 -0
- package/dist/generated/services/campfires.d.ts +54 -40
- package/dist/generated/services/campfires.d.ts.map +1 -1
- package/dist/generated/services/campfires.js +82 -65
- package/dist/generated/services/campfires.js.map +1 -1
- package/dist/generated/services/campfires.ts +107 -85
- package/dist/generated/services/cards.d.ts +5 -0
- package/dist/generated/services/cards.d.ts.map +1 -1
- package/dist/generated/services/cards.js +4 -0
- package/dist/generated/services/cards.js.map +1 -1
- package/dist/generated/services/cards.ts +6 -0
- package/dist/generated/services/checkins.d.ts +14 -0
- package/dist/generated/services/checkins.d.ts.map +1 -1
- package/dist/generated/services/checkins.js +14 -1
- package/dist/generated/services/checkins.js.map +1 -1
- package/dist/generated/services/checkins.ts +20 -0
- package/dist/generated/services/client-approvals.d.ts +6 -3
- package/dist/generated/services/client-approvals.d.ts.map +1 -1
- package/dist/generated/services/client-approvals.js +8 -5
- package/dist/generated/services/client-approvals.js.map +1 -1
- package/dist/generated/services/client-approvals.ts +10 -5
- package/dist/generated/services/client-correspondences.d.ts +6 -3
- package/dist/generated/services/client-correspondences.d.ts.map +1 -1
- package/dist/generated/services/client-correspondences.js +8 -5
- package/dist/generated/services/client-correspondences.js.map +1 -1
- package/dist/generated/services/client-correspondences.ts +10 -5
- package/dist/generated/services/client-replies.d.ts +11 -4
- package/dist/generated/services/client-replies.d.ts.map +1 -1
- package/dist/generated/services/client-replies.js +16 -8
- package/dist/generated/services/client-replies.js.map +1 -1
- package/dist/generated/services/client-replies.ts +18 -8
- package/dist/generated/services/cloud-files.d.ts +92 -0
- package/dist/generated/services/cloud-files.d.ts.map +1 -0
- package/dist/generated/services/cloud-files.js +121 -0
- package/dist/generated/services/cloud-files.js.map +1 -0
- package/dist/generated/services/cloud-files.ts +188 -0
- package/dist/generated/services/comments.d.ts +5 -0
- package/dist/generated/services/comments.d.ts.map +1 -1
- package/dist/generated/services/comments.js +4 -0
- package/dist/generated/services/comments.js.map +1 -1
- package/dist/generated/services/comments.ts +6 -0
- package/dist/generated/services/documents.d.ts +12 -7
- package/dist/generated/services/documents.d.ts.map +1 -1
- package/dist/generated/services/documents.js +10 -6
- package/dist/generated/services/documents.js.map +1 -1
- package/dist/generated/services/documents.ts +14 -8
- package/dist/generated/services/drafts.d.ts +1 -1
- package/dist/generated/services/drafts.d.ts.map +1 -1
- package/dist/generated/services/drafts.ts +1 -1
- package/dist/generated/services/events.d.ts +5 -0
- package/dist/generated/services/events.d.ts.map +1 -1
- package/dist/generated/services/events.js +4 -0
- package/dist/generated/services/events.js.map +1 -1
- package/dist/generated/services/events.ts +6 -0
- package/dist/generated/services/everything.d.ts +14 -14
- package/dist/generated/services/everything.d.ts.map +1 -1
- package/dist/generated/services/everything.ts +14 -14
- package/dist/generated/services/folders.d.ts +96 -0
- package/dist/generated/services/folders.d.ts.map +1 -0
- package/dist/generated/services/folders.js +140 -0
- package/dist/generated/services/folders.js.map +1 -0
- package/dist/generated/services/folders.ts +201 -0
- package/dist/generated/services/forwards.d.ts +7 -20
- package/dist/generated/services/forwards.d.ts.map +1 -1
- package/dist/generated/services/forwards.js +6 -35
- package/dist/generated/services/forwards.js.map +1 -1
- package/dist/generated/services/forwards.ts +10 -48
- package/dist/generated/services/gauges.d.ts +7 -0
- package/dist/generated/services/gauges.d.ts.map +1 -1
- package/dist/generated/services/gauges.js +5 -1
- package/dist/generated/services/gauges.js.map +1 -1
- package/dist/generated/services/gauges.ts +9 -1
- package/dist/generated/services/google-documents.d.ts +98 -0
- package/dist/generated/services/google-documents.d.ts.map +1 -0
- package/dist/generated/services/google-documents.js +123 -0
- package/dist/generated/services/google-documents.js.map +1 -0
- package/dist/generated/services/google-documents.ts +196 -0
- package/dist/generated/services/index.d.ts +7 -4
- package/dist/generated/services/index.d.ts.map +1 -1
- package/dist/generated/services/index.js +7 -4
- package/dist/generated/services/index.js.map +1 -1
- package/dist/generated/services/index.ts +7 -4
- package/dist/generated/services/messages.d.ts +2 -0
- package/dist/generated/services/messages.d.ts.map +1 -1
- package/dist/generated/services/messages.js +1 -1
- package/dist/generated/services/messages.js.map +1 -1
- package/dist/generated/services/messages.ts +3 -1
- package/dist/generated/services/my-notes.d.ts +1 -1
- package/dist/generated/services/my-notes.js +1 -1
- package/dist/generated/services/my-notes.ts +1 -1
- package/dist/generated/services/my-notifications.d.ts +4 -2
- package/dist/generated/services/my-notifications.d.ts.map +1 -1
- package/dist/generated/services/my-notifications.js.map +1 -1
- package/dist/generated/services/my-notifications.ts +4 -2
- package/dist/generated/services/people.d.ts +11 -1
- package/dist/generated/services/people.d.ts.map +1 -1
- package/dist/generated/services/people.js +13 -2
- package/dist/generated/services/people.js.map +1 -1
- package/dist/generated/services/people.ts +15 -1
- package/dist/generated/services/projects.d.ts +26 -0
- package/dist/generated/services/projects.d.ts.map +1 -1
- package/dist/generated/services/projects.js +49 -1
- package/dist/generated/services/projects.js.map +1 -1
- package/dist/generated/services/projects.ts +61 -1
- package/dist/generated/services/recordings.d.ts +2 -12
- package/dist/generated/services/recordings.d.ts.map +1 -1
- package/dist/generated/services/recordings.js +1 -26
- package/dist/generated/services/recordings.js.map +1 -1
- package/dist/generated/services/recordings.ts +3 -31
- package/dist/generated/services/reports.d.ts +8 -12
- package/dist/generated/services/reports.d.ts.map +1 -1
- package/dist/generated/services/reports.js +11 -5
- package/dist/generated/services/reports.js.map +1 -1
- package/dist/generated/services/reports.ts +13 -14
- package/dist/generated/services/schedules.d.ts +94 -15
- package/dist/generated/services/schedules.d.ts.map +1 -1
- package/dist/generated/services/schedules.js +19 -8
- package/dist/generated/services/schedules.js.map +1 -1
- package/dist/generated/services/schedules.ts +107 -17
- package/dist/generated/services/search.d.ts +2 -0
- package/dist/generated/services/search.d.ts.map +1 -1
- package/dist/generated/services/search.js +1 -1
- package/dist/generated/services/search.js.map +1 -1
- package/dist/generated/services/search.ts +3 -1
- package/dist/generated/services/templates.d.ts +2 -0
- package/dist/generated/services/templates.d.ts.map +1 -1
- package/dist/generated/services/templates.js +1 -1
- package/dist/generated/services/templates.js.map +1 -1
- package/dist/generated/services/templates.ts +3 -1
- package/dist/generated/services/timeline.d.ts +2 -0
- package/dist/generated/services/timeline.d.ts.map +1 -1
- package/dist/generated/services/timeline.js +1 -0
- package/dist/generated/services/timeline.js.map +1 -1
- package/dist/generated/services/timeline.ts +3 -0
- package/dist/generated/services/timesheets.d.ts +16 -0
- package/dist/generated/services/timesheets.d.ts.map +1 -1
- package/dist/generated/services/timesheets.js +26 -2
- package/dist/generated/services/timesheets.js.map +1 -1
- package/dist/generated/services/timesheets.ts +35 -2
- package/dist/generated/services/todolist-groups.d.ts +11 -6
- package/dist/generated/services/todolist-groups.d.ts.map +1 -1
- package/dist/generated/services/todolist-groups.js +7 -3
- package/dist/generated/services/todolist-groups.js.map +1 -1
- package/dist/generated/services/todolist-groups.ts +13 -7
- package/dist/generated/services/todolists.d.ts +15 -13
- package/dist/generated/services/todolists.d.ts.map +1 -1
- package/dist/generated/services/todolists.js +11 -8
- package/dist/generated/services/todolists.js.map +1 -1
- package/dist/generated/services/todolists.ts +19 -14
- package/dist/generated/services/todos.d.ts +2 -12
- package/dist/generated/services/todos.d.ts.map +1 -1
- package/dist/generated/services/todos.js +1 -25
- package/dist/generated/services/todos.js.map +1 -1
- package/dist/generated/services/todos.ts +3 -30
- package/dist/generated/services/uploads.d.ts +5 -0
- package/dist/generated/services/uploads.d.ts.map +1 -1
- package/dist/generated/services/uploads.js +4 -0
- package/dist/generated/services/uploads.js.map +1 -1
- package/dist/generated/services/uploads.ts +6 -0
- package/dist/generated/services/vaults.d.ts +5 -0
- package/dist/generated/services/vaults.d.ts.map +1 -1
- package/dist/generated/services/vaults.js +4 -0
- package/dist/generated/services/vaults.js.map +1 -1
- package/dist/generated/services/vaults.ts +6 -0
- package/dist/index.d.ts +15 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -8
- package/dist/index.js.map +1 -1
- package/dist/pagination-utils.d.ts +46 -0
- package/dist/pagination-utils.d.ts.map +1 -1
- package/dist/pagination-utils.js +85 -2
- package/dist/pagination-utils.js.map +1 -1
- package/dist/pagination.d.ts +11 -0
- package/dist/pagination.d.ts.map +1 -1
- package/dist/pagination.js.map +1 -1
- package/dist/retry.d.ts +110 -0
- package/dist/retry.d.ts.map +1 -0
- package/dist/retry.js +253 -0
- package/dist/retry.js.map +1 -0
- package/dist/services/base.d.ts.map +1 -1
- package/dist/services/base.js +59 -5
- package/dist/services/base.js.map +1 -1
- package/dist/services/cards-extensions.d.ts +26 -21
- package/dist/services/cards-extensions.d.ts.map +1 -1
- package/dist/services/cards-extensions.js +28 -31
- package/dist/services/cards-extensions.js.map +1 -1
- package/dist/services/documents-extensions.d.ts +122 -0
- package/dist/services/documents-extensions.d.ts.map +1 -0
- package/dist/services/documents-extensions.js +125 -0
- package/dist/services/documents-extensions.js.map +1 -0
- package/dist/services/merge-safe.d.ts +167 -0
- package/dist/services/merge-safe.d.ts.map +1 -0
- package/dist/services/merge-safe.js +217 -0
- package/dist/services/merge-safe.js.map +1 -0
- package/dist/services/schedules-extensions.d.ts +266 -0
- package/dist/services/schedules-extensions.d.ts.map +1 -0
- package/dist/services/schedules-extensions.js +268 -0
- package/dist/services/schedules-extensions.js.map +1 -0
- package/dist/services/todolists-extensions.d.ts +110 -0
- package/dist/services/todolists-extensions.d.ts.map +1 -0
- package/dist/services/todolists-extensions.js +262 -0
- package/dist/services/todolists-extensions.js.map +1 -0
- package/dist/services/todos-extensions.d.ts +12 -1
- package/dist/services/todos-extensions.d.ts.map +1 -1
- package/dist/services/todos-extensions.js +27 -8
- package/dist/services/todos-extensions.js.map +1 -1
- package/package.json +5 -4
- package/src/generated/metadata.ts +280 -141
- package/src/generated/openapi-stripped.json +6435 -4283
- package/src/generated/path-mapping.ts +27 -16
- package/src/generated/schema.d.ts +4283 -2457
- package/src/generated/services/bookmarks.ts +1 -1
- package/src/generated/services/boosts.ts +12 -0
- package/src/generated/services/campfires.ts +107 -85
- package/src/generated/services/cards.ts +6 -0
- package/src/generated/services/checkins.ts +20 -0
- package/src/generated/services/client-approvals.ts +10 -5
- package/src/generated/services/client-correspondences.ts +10 -5
- package/src/generated/services/client-replies.ts +18 -8
- package/src/generated/services/cloud-files.ts +188 -0
- package/src/generated/services/comments.ts +6 -0
- package/src/generated/services/documents.ts +14 -8
- package/src/generated/services/drafts.ts +1 -1
- package/src/generated/services/events.ts +6 -0
- package/src/generated/services/everything.ts +14 -14
- package/src/generated/services/folders.ts +201 -0
- package/src/generated/services/forwards.ts +10 -48
- package/src/generated/services/gauges.ts +9 -1
- package/src/generated/services/google-documents.ts +196 -0
- package/src/generated/services/index.ts +7 -4
- package/src/generated/services/messages.ts +3 -1
- package/src/generated/services/my-notes.ts +1 -1
- package/src/generated/services/my-notifications.ts +4 -2
- package/src/generated/services/people.ts +15 -1
- package/src/generated/services/projects.ts +61 -1
- package/src/generated/services/recordings.ts +3 -31
- package/src/generated/services/reports.ts +13 -14
- package/src/generated/services/schedules.ts +107 -17
- package/src/generated/services/search.ts +3 -1
- package/src/generated/services/templates.ts +3 -1
- package/src/generated/services/timeline.ts +3 -0
- package/src/generated/services/timesheets.ts +35 -2
- package/src/generated/services/todolist-groups.ts +13 -7
- package/src/generated/services/todolists.ts +19 -14
- package/src/generated/services/todos.ts +3 -30
- package/src/generated/services/uploads.ts +6 -0
- 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
|
|
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
|
|
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
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
115
|
-
|
|
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) {
|
package/dist/download.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"download.js","sourceRoot":"","sources":["../src/download.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"download.js","sourceRoot":"","sources":["../src/download.ts"],"names":[],"mappings":"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"}
|
package/dist/errors.d.ts
CHANGED
|
@@ -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
|
*/
|
package/dist/errors.d.ts.map
CHANGED
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
|
package/dist/errors.js
CHANGED
|
@@ -71,6 +71,15 @@ export class BasecampError extends Error {
|
|
|
71
71
|
retryAfter;
|
|
72
72
|
/** Request ID from the server for debugging */
|
|
73
73
|
requestId;
|
|
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
|
+
fieldErrors;
|
|
74
83
|
constructor(code, message, options) {
|
|
75
84
|
super(message);
|
|
76
85
|
this.name = "BasecampError";
|
|
@@ -80,6 +89,7 @@ export class BasecampError extends Error {
|
|
|
80
89
|
this.retryable = options?.retryable ?? false;
|
|
81
90
|
this.retryAfter = options?.retryAfter;
|
|
82
91
|
this.requestId = options?.requestId;
|
|
92
|
+
this.fieldErrors = options?.fieldErrors;
|
|
83
93
|
// Set cause if provided (ES2022+)
|
|
84
94
|
if (options?.cause) {
|
|
85
95
|
this.cause = options.cause;
|
|
@@ -109,6 +119,7 @@ export class BasecampError extends Error {
|
|
|
109
119
|
retryable: this.retryable,
|
|
110
120
|
retryAfter: this.retryAfter,
|
|
111
121
|
requestId: this.requestId,
|
|
122
|
+
fieldErrors: this.fieldErrors,
|
|
112
123
|
};
|
|
113
124
|
}
|
|
114
125
|
}
|
|
@@ -199,26 +210,55 @@ export const Errors = {
|
|
|
199
210
|
* Useful for mapping API responses to typed errors.
|
|
200
211
|
*/
|
|
201
212
|
export async function errorFromResponse(response, requestId) {
|
|
213
|
+
let body;
|
|
214
|
+
try {
|
|
215
|
+
body = await response.json();
|
|
216
|
+
}
|
|
217
|
+
catch {
|
|
218
|
+
// Body is not JSON or empty, use status text
|
|
219
|
+
body = undefined;
|
|
220
|
+
}
|
|
221
|
+
return errorFromParsedBody(response, body, requestId);
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Creates a BasecampError from an HTTP response whose body has already been
|
|
225
|
+
* read and parsed (e.g. by openapi-fetch, which consumes the error body before
|
|
226
|
+
* the service layer sees the response — re-reading it would throw and lose the
|
|
227
|
+
* server's message).
|
|
228
|
+
*/
|
|
229
|
+
export function errorFromParsedBody(response, body, requestId) {
|
|
202
230
|
const httpStatus = response.status;
|
|
203
231
|
const retryAfter = parseRetryAfter(response.headers.get("Retry-After"));
|
|
204
|
-
// Try to extract error message from
|
|
232
|
+
// Try to extract error message from the parsed body
|
|
205
233
|
let message = response.statusText || "Request failed";
|
|
234
|
+
let serverMessage;
|
|
206
235
|
let hint;
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
if (typeof body === "
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
236
|
+
let fieldErrors;
|
|
237
|
+
if (typeof body === "object" && body !== null) {
|
|
238
|
+
if ("error" in body && typeof body.error === "string") {
|
|
239
|
+
// Truncate error messages to prevent information leakage and unbounded memory growth
|
|
240
|
+
serverMessage = truncateErrorMessage(body.error);
|
|
241
|
+
message = serverMessage;
|
|
242
|
+
}
|
|
243
|
+
else if ("message" in body && typeof body.message === "string") {
|
|
244
|
+
// SPEC §6 step 4: "message" is the fallback for APIs that use it
|
|
245
|
+
// instead of "error".
|
|
246
|
+
serverMessage = truncateErrorMessage(body.message);
|
|
247
|
+
message = serverMessage;
|
|
248
|
+
}
|
|
249
|
+
if ("error_description" in body && typeof body.error_description === "string") {
|
|
250
|
+
hint = truncateErrorMessage(body.error_description);
|
|
251
|
+
}
|
|
252
|
+
if (httpStatus === 400 || httpStatus === 422) {
|
|
253
|
+
fieldErrors = parseFieldErrors(body);
|
|
254
|
+
if (fieldErrors) {
|
|
255
|
+
const flat = flattenFieldErrors(fieldErrors);
|
|
256
|
+
// Appended in parentheses after a top-level message, standing alone
|
|
257
|
+
// otherwise; truncated after flattening so the tail is capped too.
|
|
258
|
+
message = truncateErrorMessage(serverMessage ? `${serverMessage} (${flat})` : flat);
|
|
216
259
|
}
|
|
217
260
|
}
|
|
218
261
|
}
|
|
219
|
-
catch {
|
|
220
|
-
// Body is not JSON or empty, use status text
|
|
221
|
-
}
|
|
222
262
|
switch (httpStatus) {
|
|
223
263
|
case 401:
|
|
224
264
|
return new BasecampError("auth_required", message, { httpStatus, hint, requestId });
|
|
@@ -236,7 +276,7 @@ export async function errorFromResponse(response, requestId) {
|
|
|
236
276
|
});
|
|
237
277
|
case 400:
|
|
238
278
|
case 422:
|
|
239
|
-
return new BasecampError("validation", message, { httpStatus, hint, requestId });
|
|
279
|
+
return new BasecampError("validation", message, { httpStatus, hint, requestId, fieldErrors });
|
|
240
280
|
default:
|
|
241
281
|
// 5xx errors are retryable
|
|
242
282
|
const retryable = httpStatus >= 500 && httpStatus < 600;
|
|
@@ -248,6 +288,79 @@ export async function errorFromResponse(response, requestId) {
|
|
|
248
288
|
});
|
|
249
289
|
}
|
|
250
290
|
}
|
|
291
|
+
/**
|
|
292
|
+
* Extracts the field-keyed validation errors map from a parsed error body —
|
|
293
|
+
* the Rails RecordInvalid rendering `{"errors": {"field": ["msg", ...]}}`.
|
|
294
|
+
* Entries whose value is not an array are skipped, non-string elements are
|
|
295
|
+
* dropped, and a map with no usable entries is treated as absent (undefined).
|
|
296
|
+
*
|
|
297
|
+
* A body with no `errors` key falls through to `parseBareFieldErrors` for the
|
|
298
|
+
* unwrapped rendering.
|
|
299
|
+
*/
|
|
300
|
+
function parseFieldErrors(body) {
|
|
301
|
+
const errors = body.errors;
|
|
302
|
+
if (typeof errors !== "object" || errors === null || Array.isArray(errors)) {
|
|
303
|
+
return parseBareFieldErrors(body);
|
|
304
|
+
}
|
|
305
|
+
// Null prototype so an untrusted field name like "__proto__" becomes an
|
|
306
|
+
// ordinary own property instead of invoking the legacy prototype setter
|
|
307
|
+
// (which would both drop the entry and mutate the map's prototype).
|
|
308
|
+
const fieldErrors = Object.create(null);
|
|
309
|
+
let found = false;
|
|
310
|
+
for (const [field, value] of Object.entries(errors)) {
|
|
311
|
+
if (!Array.isArray(value))
|
|
312
|
+
continue;
|
|
313
|
+
const messages = value.filter((m) => typeof m === "string");
|
|
314
|
+
if (messages.length === 0)
|
|
315
|
+
continue;
|
|
316
|
+
fieldErrors[field] = messages;
|
|
317
|
+
found = true;
|
|
318
|
+
}
|
|
319
|
+
return found ? fieldErrors : undefined;
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Extracts an unwrapped field map — the `render json: @webhook.errors`
|
|
323
|
+
* rendering, where the whole body is `{"field": ["msg", ...]}`. The gate is
|
|
324
|
+
* all-or-nothing by design (SPEC §6 step 2): with no `errors` key to declare
|
|
325
|
+
* intent, only shape distinguishes a field map from any other JSON object, so
|
|
326
|
+
* a single non-conforming member means this is not one. Returns undefined
|
|
327
|
+
* unless every member is a non-empty array of non-empty strings.
|
|
328
|
+
*/
|
|
329
|
+
function parseBareFieldErrors(body) {
|
|
330
|
+
if (Array.isArray(body))
|
|
331
|
+
return undefined;
|
|
332
|
+
// Only "errors" is structurally reserved (it belongs to step 1). "error" and
|
|
333
|
+
// "message" are not excluded by name: a flat body carries them as strings,
|
|
334
|
+
// which the shape gate below already rejects.
|
|
335
|
+
if ("errors" in body)
|
|
336
|
+
return undefined;
|
|
337
|
+
const entries = Object.entries(body);
|
|
338
|
+
if (entries.length === 0)
|
|
339
|
+
return undefined;
|
|
340
|
+
// Null prototype, for the same reason as the wrapped map: field names are
|
|
341
|
+
// data, and "__proto__" must land as an ordinary own property.
|
|
342
|
+
const fieldErrors = Object.create(null);
|
|
343
|
+
for (const [field, value] of entries) {
|
|
344
|
+
if (!Array.isArray(value) || value.length === 0)
|
|
345
|
+
return undefined;
|
|
346
|
+
if (!value.every((m) => typeof m === "string" && m.length > 0))
|
|
347
|
+
return undefined;
|
|
348
|
+
fieldErrors[field] = value;
|
|
349
|
+
}
|
|
350
|
+
return fieldErrors;
|
|
351
|
+
}
|
|
352
|
+
/**
|
|
353
|
+
* Flattens a field-keyed errors map as "field: msg1; msg2, other: msg" —
|
|
354
|
+
* fields sorted lexicographically, a field's messages joined with "; ",
|
|
355
|
+
* fields joined with ", ". This shape is shared by all six SDKs; change it
|
|
356
|
+
* everywhere or nowhere.
|
|
357
|
+
*/
|
|
358
|
+
function flattenFieldErrors(fieldErrors) {
|
|
359
|
+
return Object.entries(fieldErrors)
|
|
360
|
+
.sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0))
|
|
361
|
+
.map(([field, messages]) => `${field}: ${messages.join("; ")}`)
|
|
362
|
+
.join(", ");
|
|
363
|
+
}
|
|
251
364
|
/**
|
|
252
365
|
* Parses the Retry-After header value.
|
|
253
366
|
* Supports both seconds (integer) and HTTP-date formats.
|
package/dist/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH;;GAEG;AACH,MAAM,wBAAwB,GAAG,GAAG,CAAC;AAErC;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,CAAS,EAAE,SAAiB,wBAAwB;IACvF,IAAI,CAAC,CAAC,MAAM,IAAI,MAAM;QAAE,OAAO,CAAC,CAAC;IACjC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;AACxC,CAAC;
|
|
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,
|
|
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,cAiuGf,CAAC;AAEF,eAAe,QAAQ,CAAC"}
|