@vymalo/opencode-oauth2 0.11.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 (57) hide show
  1. package/dist/cache.d.ts +6 -6
  2. package/dist/cache.js +100 -104
  3. package/dist/cache.js.map +1 -1
  4. package/dist/config.d.ts +107 -107
  5. package/dist/config.js +173 -182
  6. package/dist/config.js.map +1 -1
  7. package/dist/index.js +1 -0
  8. package/dist/index.js.map +1 -1
  9. package/dist/lib.js +1 -0
  10. package/dist/lib.js.map +1 -1
  11. package/dist/logging.d.ts +6 -6
  12. package/dist/logging.js +57 -56
  13. package/dist/logging.js.map +1 -1
  14. package/dist/model-discovery.d.ts +3 -3
  15. package/dist/model-discovery.js +61 -66
  16. package/dist/model-discovery.js.map +1 -1
  17. package/dist/model-normalization.js +84 -73
  18. package/dist/model-normalization.js.map +1 -1
  19. package/dist/oauth/browser.js +29 -25
  20. package/dist/oauth/browser.js.map +1 -1
  21. package/dist/oauth/client.d.ts +46 -46
  22. package/dist/oauth/client.js +411 -430
  23. package/dist/oauth/client.js.map +1 -1
  24. package/dist/oauth/device-code.d.ts +23 -23
  25. package/dist/oauth/device-code.js +225 -235
  26. package/dist/oauth/device-code.js.map +1 -1
  27. package/dist/oauth/discovery.d.ts +5 -5
  28. package/dist/oauth/discovery.js +34 -34
  29. package/dist/oauth/discovery.js.map +1 -1
  30. package/dist/oauth/http-utils.d.ts +27 -27
  31. package/dist/oauth/http-utils.js +96 -107
  32. package/dist/oauth/http-utils.js.map +1 -1
  33. package/dist/oauth/local-callback.d.ts +5 -5
  34. package/dist/oauth/local-callback.js +76 -74
  35. package/dist/oauth/local-callback.js.map +1 -1
  36. package/dist/oauth/pkce.d.ts +2 -2
  37. package/dist/oauth/pkce.js +9 -5
  38. package/dist/oauth/pkce.js.map +1 -1
  39. package/dist/oauth/subject-token.d.ts +15 -15
  40. package/dist/oauth/subject-token.js +68 -73
  41. package/dist/oauth/subject-token.js.map +1 -1
  42. package/dist/opencode.d.ts +15 -15
  43. package/dist/opencode.js +477 -497
  44. package/dist/opencode.js.map +1 -1
  45. package/dist/plugin.d.ts +39 -39
  46. package/dist/plugin.js +270 -277
  47. package/dist/plugin.js.map +1 -1
  48. package/dist/responses-repair.d.ts +12 -35
  49. package/dist/responses-repair.js +119 -125
  50. package/dist/responses-repair.js.map +1 -1
  51. package/dist/scheduler.d.ts +5 -5
  52. package/dist/scheduler.js +43 -45
  53. package/dist/scheduler.js.map +1 -1
  54. package/dist/types.d.ts +25 -25
  55. package/dist/types.js +1 -0
  56. package/dist/types.js.map +1 -1
  57. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/oauth/client.ts"],"names":[],"mappings":"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"}
1
+ {"mappings":"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","names":[],"sources":["../../src/oauth/client.ts"],"version":3,"file":"client.js","sourceRoot":""}
@@ -1,28 +1,28 @@
1
1
  import type { Logger } from "../logging.js";
2
2
  import type { TokenSet } from "../types.js";
3
3
  export interface AcquireTokenViaDeviceCodeOptions {
4
- deviceAuthorizationEndpoint: string;
5
- tokenEndpoint: string;
6
- clientId: string;
7
- clientSecret?: string;
8
- scopes: string[];
9
- serverId: string;
10
- logger: Logger;
11
- fetchImpl?: typeof fetch;
12
- timeoutMs: number;
13
- /**
14
- * Send PKCE (`code_challenge` on the device-authorization request,
15
- * `code_verifier` on the token poll). Defaults to `true`. Set `false` only
16
- * for non-compliant IdPs that reject the extra parameters.
17
- */
18
- pkce?: boolean;
19
- /**
20
- * Sleep function used between polls. Overridable for tests.
21
- */
22
- sleep?: (ms: number) => Promise<void>;
23
- /**
24
- * Clock used to measure elapsed time. Overridable for tests.
25
- */
26
- now?: () => number;
4
+ deviceAuthorizationEndpoint: string;
5
+ tokenEndpoint: string;
6
+ clientId: string;
7
+ clientSecret?: string;
8
+ scopes: string[];
9
+ serverId: string;
10
+ logger: Logger;
11
+ fetchImpl?: typeof fetch;
12
+ timeoutMs: number;
13
+ /**
14
+ * Send PKCE (`code_challenge` on the device-authorization request,
15
+ * `code_verifier` on the token poll). Defaults to `true`. Set `false` only
16
+ * for non-compliant IdPs that reject the extra parameters.
17
+ */
18
+ pkce?: boolean;
19
+ /**
20
+ * Sleep function used between polls. Overridable for tests.
21
+ */
22
+ sleep?: (ms: number) => Promise<void>;
23
+ /**
24
+ * Clock used to measure elapsed time. Overridable for tests.
25
+ */
26
+ now?: () => number;
27
27
  }
28
28
  export declare function acquireTokenViaDeviceCode(options: AcquireTokenViaDeviceCodeOptions): Promise<TokenSet>;
@@ -12,246 +12,236 @@ const ERROR_BODY_PREVIEW_CHARS = 500;
12
12
  // without bound while we wait for transient conditions to clear.
13
13
  const MAX_POLL_INTERVAL_SECONDS = 60;
14
14
  function defaultSleep(ms) {
15
- return new Promise((resolve) => {
16
- setTimeout(resolve, ms);
17
- });
15
+ return new Promise((resolve) => {
16
+ setTimeout(resolve, ms);
17
+ });
18
18
  }
19
19
  async function readResponseBodyPreview(response) {
20
- return readResponsePreviewShared(response, ERROR_BODY_PREVIEW_CHARS);
20
+ return readResponsePreviewShared(response, ERROR_BODY_PREVIEW_CHARS);
21
21
  }
22
22
  function parseDeviceAuthorizationResponse(payload) {
23
- if (!payload || typeof payload !== "object") {
24
- throw new Error("device authorization response is not a JSON object");
25
- }
26
- const record = payload;
27
- const deviceCode = record.device_code;
28
- const userCode = record.user_code;
29
- const verificationUri = record.verification_uri;
30
- const expiresIn = record.expires_in;
31
- if (typeof deviceCode !== "string" || deviceCode.length === 0) {
32
- throw new Error("device authorization response is missing device_code");
33
- }
34
- if (typeof userCode !== "string" || userCode.length === 0) {
35
- throw new Error("device authorization response is missing user_code");
36
- }
37
- if (typeof verificationUri !== "string" || verificationUri.length === 0) {
38
- throw new Error("device authorization response is missing verification_uri");
39
- }
40
- if (typeof expiresIn !== "number" || !Number.isFinite(expiresIn) || expiresIn <= 0) {
41
- throw new Error("device authorization response is missing a valid expires_in");
42
- }
43
- const verificationUriComplete = typeof record.verification_uri_complete === "string" &&
44
- record.verification_uri_complete.length > 0
45
- ? record.verification_uri_complete
46
- : undefined;
47
- const interval = typeof record.interval === "number" && Number.isFinite(record.interval) && record.interval > 0
48
- ? Math.ceil(record.interval)
49
- : undefined;
50
- return {
51
- device_code: deviceCode,
52
- user_code: userCode,
53
- verification_uri: verificationUri,
54
- verification_uri_complete: verificationUriComplete,
55
- expires_in: expiresIn,
56
- interval
57
- };
23
+ if (!payload || typeof payload !== "object") {
24
+ throw new Error("device authorization response is not a JSON object");
25
+ }
26
+ const record = payload;
27
+ const deviceCode = record.device_code;
28
+ const userCode = record.user_code;
29
+ const verificationUri = record.verification_uri;
30
+ const expiresIn = record.expires_in;
31
+ if (typeof deviceCode !== "string" || deviceCode.length === 0) {
32
+ throw new Error("device authorization response is missing device_code");
33
+ }
34
+ if (typeof userCode !== "string" || userCode.length === 0) {
35
+ throw new Error("device authorization response is missing user_code");
36
+ }
37
+ if (typeof verificationUri !== "string" || verificationUri.length === 0) {
38
+ throw new Error("device authorization response is missing verification_uri");
39
+ }
40
+ if (typeof expiresIn !== "number" || !Number.isFinite(expiresIn) || expiresIn <= 0) {
41
+ throw new Error("device authorization response is missing a valid expires_in");
42
+ }
43
+ const verificationUriComplete = typeof record.verification_uri_complete === "string" && record.verification_uri_complete.length > 0 ? record.verification_uri_complete : undefined;
44
+ const interval = typeof record.interval === "number" && Number.isFinite(record.interval) && record.interval > 0 ? Math.ceil(record.interval) : undefined;
45
+ return {
46
+ device_code: deviceCode,
47
+ user_code: userCode,
48
+ verification_uri: verificationUri,
49
+ verification_uri_complete: verificationUriComplete,
50
+ expires_in: expiresIn,
51
+ interval
52
+ };
58
53
  }
59
54
  export async function acquireTokenViaDeviceCode(options) {
60
- const fetchImpl = options.fetchImpl ?? fetch;
61
- const sleep = options.sleep ?? defaultSleep;
62
- const now = options.now ?? Date.now;
63
- const { logger, serverId } = options;
64
- // PKCE for the device flow (RFC 8628 + RFC 7636). Keycloak enforces this when
65
- // the client's "Proof Key for Code Exchange Code Challenge Method" is set, and
66
- // rejects the device-authorization request with
67
- // `invalid_request: Missing parameter: code_challenge_method` otherwise. On by
68
- // default — providers that don't require PKCE ignore it — and opt-out via the
69
- // `pkce` server option for non-compliant IdPs. Mirrors the authorization_code
70
- // flow.
71
- const usePkce = options.pkce !== false;
72
- const pkce = usePkce ? generatePkcePair() : undefined;
73
- // Step 1: request a device code.
74
- const deviceAuthBody = new URLSearchParams({
75
- client_id: options.clientId,
76
- scope: options.scopes.join(" ")
77
- });
78
- if (pkce) {
79
- deviceAuthBody.set("code_challenge", pkce.challenge);
80
- deviceAuthBody.set("code_challenge_method", "S256");
81
- }
82
- if (options.clientSecret) {
83
- deviceAuthBody.set("client_secret", options.clientSecret);
84
- }
85
- const deviceAuthController = new AbortController();
86
- const deviceAuthTimeout = setTimeout(() => deviceAuthController.abort(), options.timeoutMs);
87
- let deviceAuthResponse;
88
- try {
89
- deviceAuthResponse = await fetchImpl(options.deviceAuthorizationEndpoint, {
90
- method: "POST",
91
- headers: {
92
- "Content-Type": "application/x-www-form-urlencoded",
93
- Accept: "application/json"
94
- },
95
- body: deviceAuthBody,
96
- signal: deviceAuthController.signal
97
- });
98
- }
99
- finally {
100
- clearTimeout(deviceAuthTimeout);
101
- }
102
- if (!deviceAuthResponse.ok) {
103
- const preview = await readResponseBodyPreview(deviceAuthResponse);
104
- // Log the body separately at error-level so the logger's redaction filter
105
- // can scrub matching keys (e.g. a verbose provider echoing `client_secret`
106
- // back in the response). Never embed the body in error.message — callers
107
- // log error.message verbatim, bypassing the redaction filter.
108
- logger.error("oauth_device_authorization_failed", {
109
- serverId,
110
- status: deviceAuthResponse.status,
111
- bodyPreview: preview ? scrubSecrets(preview) : undefined
112
- });
113
- throw new Error(`device authorization request failed (${deviceAuthResponse.status})`);
114
- }
115
- const deviceAuthPayload = (await deviceAuthResponse.json());
116
- const deviceAuth = parseDeviceAuthorizationResponse(deviceAuthPayload);
117
- const verificationUri = deviceAuth.verification_uri_complete ?? deviceAuth.verification_uri;
118
- // user_code is an ephemeral, single-use code with no value outside the active
119
- // flow that is the spec's intent (RFC 8628). Log it so operators can see the
120
- // active code and forward it to the user if needed.
121
- logger.info("oauth_device_code_issued", {
122
- verificationUri,
123
- userCode: deviceAuth.user_code,
124
- expiresIn: deviceAuth.expires_in,
125
- serverId
126
- });
127
- // Also surface to stderr so terminal users can see the code regardless of log
128
- // routing. Mirrors the browser-fallback pattern in client.ts.
129
- process.stderr.write(`\n[opencode-oauth2] device-code login for ${serverId}:\n visit: ${verificationUri}\n code: ${deviceAuth.user_code}\n (expires in ${deviceAuth.expires_in}s)\n\n`);
130
- // Step 2: poll the token endpoint.
131
- let intervalSeconds = deviceAuth.interval ?? DEFAULT_POLL_INTERVAL_SECONDS;
132
- const deadlineMs = now() + deviceAuth.expires_in * 1000;
133
- let consecutiveTransientFailures = 0;
134
- while (true) {
135
- const remainingMs = deadlineMs - now();
136
- if (remainingMs <= 0) {
137
- throw new Error("device code expired before authorization completed");
138
- }
139
- await sleep(Math.min(intervalSeconds * 1000, remainingMs));
140
- const pollBody = new URLSearchParams({
141
- grant_type: DEVICE_CODE_GRANT_TYPE,
142
- device_code: deviceAuth.device_code,
143
- client_id: options.clientId
144
- });
145
- if (pkce) {
146
- pollBody.set("code_verifier", pkce.verifier);
147
- }
148
- if (options.clientSecret) {
149
- pollBody.set("client_secret", options.clientSecret);
150
- }
151
- const pollController = new AbortController();
152
- const pollTimeout = setTimeout(() => pollController.abort(), options.timeoutMs);
153
- let pollResponse;
154
- try {
155
- pollResponse = await fetchImpl(options.tokenEndpoint, {
156
- method: "POST",
157
- headers: {
158
- "Content-Type": "application/x-www-form-urlencoded",
159
- Accept: "application/json"
160
- },
161
- body: pollBody,
162
- signal: pollController.signal
163
- });
164
- // Reset the failure counter on any HTTP response even a non-2xx one
165
- // is a sign the network round-trip is working; only thrown exceptions
166
- // (network errors, timeouts) count as transient failures.
167
- consecutiveTransientFailures = 0;
168
- }
169
- catch (error) {
170
- // TypeError from fetch typically means a programming/configuration
171
- // error (malformed URL, unsupported scheme) that won't resolve on
172
- // retry. Fail fast on those instead of burning the expires_in window.
173
- // Everything else (AbortError from timeout, network errors, DNS
174
- // failures) is treated as transient and triggers backoff per
175
- // RFC 8628 §3.5.
176
- if (error instanceof TypeError) {
177
- logger.error("oauth_device_code_poll_failed", {
178
- serverId,
179
- error: error.message
180
- });
181
- throw error;
182
- }
183
- consecutiveTransientFailures++;
184
- // Exponential backoff (capped) on transient transport errors. We do
185
- // NOT hard-stop: VPN flaps, transient DNS/TLS outages, and similar
186
- // short-lived disruptions are normal during a multi-minute device-code
187
- // window. The `expires_in` deadline at the top of the loop is the
188
- // sole termination condition.
189
- intervalSeconds = Math.min(intervalSeconds + SLOW_DOWN_INCREMENT_SECONDS, MAX_POLL_INTERVAL_SECONDS);
190
- logger.warn("oauth_device_code_poll_transient_error", {
191
- serverId,
192
- error: error instanceof Error ? error.message : String(error),
193
- consecutiveFailures: consecutiveTransientFailures,
194
- nextIntervalSeconds: intervalSeconds
195
- });
196
- continue;
197
- }
198
- finally {
199
- clearTimeout(pollTimeout);
200
- }
201
- if (pollResponse.ok) {
202
- const payload = (await pollResponse.json());
203
- const token = toTokenSet(payload, { requireRefreshToken: true });
204
- logger.info("oauth_device_code_success", {
205
- serverId,
206
- hasRefreshToken: true
207
- });
208
- return token;
209
- }
210
- if (pollResponse.status >= 400 && pollResponse.status < 500) {
211
- let errorPayload = {};
212
- const text = await readResponseBodyPreview(pollResponse);
213
- try {
214
- if (text.length > 0) {
215
- errorPayload = JSON.parse(text);
216
- }
217
- }
218
- catch {
219
- // Body was not valid JSON; keep the raw preview for the error message.
220
- }
221
- const errorCode = errorPayload.error;
222
- if (errorCode === "authorization_pending") {
223
- continue;
224
- }
225
- if (errorCode === "slow_down") {
226
- intervalSeconds += SLOW_DOWN_INCREMENT_SECONDS;
227
- continue;
228
- }
229
- if (errorCode === "expired_token") {
230
- throw new Error("device code expired before user completed authorization");
231
- }
232
- if (errorCode === "access_denied") {
233
- throw new Error("device code authorization denied by user");
234
- }
235
- logger.error("oauth_device_code_poll_failed", {
236
- serverId,
237
- status: pollResponse.status,
238
- errorCode: errorCode || undefined,
239
- // Body preview goes here, not into the thrown error.message callers
240
- // log error.message verbatim and would bypass the logger's redaction.
241
- // scrubSecrets masks token-shaped substrings the field-name-based
242
- // logger redaction would otherwise miss.
243
- bodyPreview: text ? scrubSecrets(text) : undefined
244
- });
245
- throw new Error(`device code token poll failed (${pollResponse.status})${errorCode ? `: ${errorCode}` : ""}`);
246
- }
247
- // 5xx — surface to caller; do not retry indefinitely on server errors.
248
- const preview = await readResponseBodyPreview(pollResponse);
249
- logger.error("oauth_device_code_poll_failed", {
250
- serverId,
251
- status: pollResponse.status,
252
- bodyPreview: preview ? scrubSecrets(preview) : undefined
253
- });
254
- throw new Error(`device code token poll failed (${pollResponse.status})`);
255
- }
55
+ const fetchImpl = options.fetchImpl ?? fetch;
56
+ const sleep = options.sleep ?? defaultSleep;
57
+ const now = options.now ?? Date.now;
58
+ const { logger, serverId } = options;
59
+ // PKCE for the device flow (RFC 8628 + RFC 7636). Keycloak enforces this when
60
+ // the client's "Proof Key for Code Exchange Code Challenge Method" is set, and
61
+ // rejects the device-authorization request with
62
+ // `invalid_request: Missing parameter: code_challenge_method` otherwise. On by
63
+ // default — providers that don't require PKCE ignore it — and opt-out via the
64
+ // `pkce` server option for non-compliant IdPs. Mirrors the authorization_code
65
+ // flow.
66
+ const usePkce = options.pkce !== false;
67
+ const pkce = usePkce ? generatePkcePair() : undefined;
68
+ // Step 1: request a device code.
69
+ const deviceAuthBody = new URLSearchParams({
70
+ client_id: options.clientId,
71
+ scope: options.scopes.join(" ")
72
+ });
73
+ if (pkce) {
74
+ deviceAuthBody.set("code_challenge", pkce.challenge);
75
+ deviceAuthBody.set("code_challenge_method", "S256");
76
+ }
77
+ if (options.clientSecret) {
78
+ deviceAuthBody.set("client_secret", options.clientSecret);
79
+ }
80
+ const deviceAuthController = new AbortController();
81
+ const deviceAuthTimeout = setTimeout(() => deviceAuthController.abort(), options.timeoutMs);
82
+ let deviceAuthResponse;
83
+ try {
84
+ deviceAuthResponse = await fetchImpl(options.deviceAuthorizationEndpoint, {
85
+ method: "POST",
86
+ headers: {
87
+ "Content-Type": "application/x-www-form-urlencoded",
88
+ Accept: "application/json"
89
+ },
90
+ body: deviceAuthBody,
91
+ signal: deviceAuthController.signal
92
+ });
93
+ } finally {
94
+ clearTimeout(deviceAuthTimeout);
95
+ }
96
+ if (!deviceAuthResponse.ok) {
97
+ const preview = await readResponseBodyPreview(deviceAuthResponse);
98
+ // Log the body separately at error-level so the logger's redaction filter
99
+ // can scrub matching keys (e.g. a verbose provider echoing `client_secret`
100
+ // back in the response). Never embed the body in error.message — callers
101
+ // log error.message verbatim, bypassing the redaction filter.
102
+ logger.error("oauth_device_authorization_failed", {
103
+ serverId,
104
+ status: deviceAuthResponse.status,
105
+ bodyPreview: preview ? scrubSecrets(preview) : undefined
106
+ });
107
+ throw new Error(`device authorization request failed (${deviceAuthResponse.status})`);
108
+ }
109
+ const deviceAuthPayload = await deviceAuthResponse.json();
110
+ const deviceAuth = parseDeviceAuthorizationResponse(deviceAuthPayload);
111
+ const verificationUri = deviceAuth.verification_uri_complete ?? deviceAuth.verification_uri;
112
+ // user_code is an ephemeral, single-use code with no value outside the active
113
+ // flow — that is the spec's intent (RFC 8628). Log it so operators can see the
114
+ // active code and forward it to the user if needed.
115
+ logger.info("oauth_device_code_issued", {
116
+ verificationUri,
117
+ userCode: deviceAuth.user_code,
118
+ expiresIn: deviceAuth.expires_in,
119
+ serverId
120
+ });
121
+ // Also surface to stderr so terminal users can see the code regardless of log
122
+ // routing. Mirrors the browser-fallback pattern in client.ts.
123
+ process.stderr.write(`\n[opencode-oauth2] device-code login for ${serverId}:\n visit: ${verificationUri}\n code: ${deviceAuth.user_code}\n (expires in ${deviceAuth.expires_in}s)\n\n`);
124
+ // Step 2: poll the token endpoint.
125
+ let intervalSeconds = deviceAuth.interval ?? DEFAULT_POLL_INTERVAL_SECONDS;
126
+ const deadlineMs = now() + deviceAuth.expires_in * 1e3;
127
+ let consecutiveTransientFailures = 0;
128
+ while (true) {
129
+ const remainingMs = deadlineMs - now();
130
+ if (remainingMs <= 0) {
131
+ throw new Error("device code expired before authorization completed");
132
+ }
133
+ await sleep(Math.min(intervalSeconds * 1e3, remainingMs));
134
+ const pollBody = new URLSearchParams({
135
+ grant_type: DEVICE_CODE_GRANT_TYPE,
136
+ device_code: deviceAuth.device_code,
137
+ client_id: options.clientId
138
+ });
139
+ if (pkce) {
140
+ pollBody.set("code_verifier", pkce.verifier);
141
+ }
142
+ if (options.clientSecret) {
143
+ pollBody.set("client_secret", options.clientSecret);
144
+ }
145
+ const pollController = new AbortController();
146
+ const pollTimeout = setTimeout(() => pollController.abort(), options.timeoutMs);
147
+ let pollResponse;
148
+ try {
149
+ pollResponse = await fetchImpl(options.tokenEndpoint, {
150
+ method: "POST",
151
+ headers: {
152
+ "Content-Type": "application/x-www-form-urlencoded",
153
+ Accept: "application/json"
154
+ },
155
+ body: pollBody,
156
+ signal: pollController.signal
157
+ });
158
+ // Reset the failure counter on any HTTP response — even a non-2xx one
159
+ // is a sign the network round-trip is working; only thrown exceptions
160
+ // (network errors, timeouts) count as transient failures.
161
+ consecutiveTransientFailures = 0;
162
+ } catch (error) {
163
+ // TypeError from fetch typically means a programming/configuration
164
+ // error (malformed URL, unsupported scheme) that won't resolve on
165
+ // retry. Fail fast on those instead of burning the expires_in window.
166
+ // Everything else (AbortError from timeout, network errors, DNS
167
+ // failures) is treated as transient and triggers backoff per
168
+ // RFC 8628 §3.5.
169
+ if (error instanceof TypeError) {
170
+ logger.error("oauth_device_code_poll_failed", {
171
+ serverId,
172
+ error: error.message
173
+ });
174
+ throw error;
175
+ }
176
+ consecutiveTransientFailures++;
177
+ // Exponential backoff (capped) on transient transport errors. We do
178
+ // NOT hard-stop: VPN flaps, transient DNS/TLS outages, and similar
179
+ // short-lived disruptions are normal during a multi-minute device-code
180
+ // window. The `expires_in` deadline at the top of the loop is the
181
+ // sole termination condition.
182
+ intervalSeconds = Math.min(intervalSeconds + SLOW_DOWN_INCREMENT_SECONDS, MAX_POLL_INTERVAL_SECONDS);
183
+ logger.warn("oauth_device_code_poll_transient_error", {
184
+ serverId,
185
+ error: error instanceof Error ? error.message : String(error),
186
+ consecutiveFailures: consecutiveTransientFailures,
187
+ nextIntervalSeconds: intervalSeconds
188
+ });
189
+ continue;
190
+ } finally {
191
+ clearTimeout(pollTimeout);
192
+ }
193
+ if (pollResponse.ok) {
194
+ const payload = await pollResponse.json();
195
+ const token = toTokenSet(payload, { requireRefreshToken: true });
196
+ logger.info("oauth_device_code_success", {
197
+ serverId,
198
+ hasRefreshToken: true
199
+ });
200
+ return token;
201
+ }
202
+ if (pollResponse.status >= 400 && pollResponse.status < 500) {
203
+ let errorPayload = {};
204
+ const text = await readResponseBodyPreview(pollResponse);
205
+ try {
206
+ if (text.length > 0) {
207
+ errorPayload = JSON.parse(text);
208
+ }
209
+ } catch {}
210
+ const errorCode = errorPayload.error;
211
+ if (errorCode === "authorization_pending") {
212
+ continue;
213
+ }
214
+ if (errorCode === "slow_down") {
215
+ intervalSeconds += SLOW_DOWN_INCREMENT_SECONDS;
216
+ continue;
217
+ }
218
+ if (errorCode === "expired_token") {
219
+ throw new Error("device code expired before user completed authorization");
220
+ }
221
+ if (errorCode === "access_denied") {
222
+ throw new Error("device code authorization denied by user");
223
+ }
224
+ logger.error("oauth_device_code_poll_failed", {
225
+ serverId,
226
+ status: pollResponse.status,
227
+ errorCode: errorCode || undefined,
228
+ // Body preview goes here, not into the thrown error.message — callers
229
+ // log error.message verbatim and would bypass the logger's redaction.
230
+ // scrubSecrets masks token-shaped substrings the field-name-based
231
+ // logger redaction would otherwise miss.
232
+ bodyPreview: text ? scrubSecrets(text) : undefined
233
+ });
234
+ throw new Error(`device code token poll failed (${pollResponse.status})${errorCode ? `: ${errorCode}` : ""}`);
235
+ }
236
+ // 5xx surface to caller; do not retry indefinitely on server errors.
237
+ const preview = await readResponseBodyPreview(pollResponse);
238
+ logger.error("oauth_device_code_poll_failed", {
239
+ serverId,
240
+ status: pollResponse.status,
241
+ bodyPreview: preview ? scrubSecrets(preview) : undefined
242
+ });
243
+ throw new Error(`device code token poll failed (${pollResponse.status})`);
244
+ }
256
245
  }
246
+
257
247
  //# sourceMappingURL=device-code.js.map