Dashboard › cli › Distillation
ef185b4f-2272-400b-8bf7-c21b21c6dcca["lore_tm_v1__g6U-9Wk0yq4xn3jvRsKZdLlCuo8H4wFmzuy7AipzqU","lore_tm_v1_godcP56tlshki4pl4eYAFLECHdAT7pAItevobZB2_7I","lore_tm_v1_k6bHMPrx2Go9Xz6Ga65v5HRn58k1B0pm4t_MVGN-Oog","lore_tm_v1_HR1CmQeEUcIVVK4PBup7xz21rw6RgM2UbMdiboTiGxg","lore_tm_v1_rMgrRfS6exSpttXUFH8NMnHjgYFKcGxomVljH5_IXlc","lore_tm_v1_G3bykHQeufS46I2qz6Es0yI4_dImxny9kMLoNKaF1RA","lore_tm_v1_OXKBCYWBXm68ec570MaSFFYru_-QwlwVV0UUNeZbf6E","lore_tm_v1_7yfjKU8Nu3QUhzKa9M5zUGMljD5NccqWp27gQ2WDvWk","lore_tm_v1_wuX0fjv3Snqo1wNoM6JVMqGD467jSE3ZVgtjNgT0dvM","lore_tm_v1_e23CV5rQGYCFc1CxYxUcIwK21qFQjK-gEJ0gkkBoy5o","lore_tm_v1_0W6p7IXtOqhydEvpsoH54g9105vQ63rqF02WICao6yw","lore_tm_v1_69XO2vn3wALOXjkFqpYpg-lBCM7SQWovmO0AUbo2GLk"]
Date: Sep 10, 2026
apiRequestToRegion always sends JSON and explicitly sets Content-Type; SDK functions set their own Content-Type; rawApiRequest may intentionally omit Content-Type, including for string bodies.packages/cli/src/lib/sentry-client.ts was modified.packages/cli/src/lib/sentry-client.ts redirect-security implementation adds MAX_REDIRECTS = 20, documented as matching native fetch.packages/cli/src/lib/sentry-client.ts was changed to use manual redirects. Added FetchWithTimeoutArgs.token: string, FetchWithTimeoutResult containing { response: Response; headers: Headers }, isRedirect() for statuses 301, 302, 303, 307, and 308, getRedirectUrl(), and getRedirectRequest().getRedirectUrl(response, request) throws ApiError when a redirect has no Location header, with message Redirect (${response.status}) had no Location header, HTTP status, and request.url; it resolves redirect locations relative to request.url.packages/cli/src/lib/sentry-client.ts converts applicable redirects to new Request(destination, { method: "GET" }); the exact redirect-method/body conditions are not visible in the provided diff.fetchWithTimeout() was changed from native default redirect following to manual handling using redirect: "manual", rebuilding request headers for each validated redirect via prepareHeaders(request, undefined, token)."done" or "throw"; the "retry" AttemptResult branch is unreachable on the last attempt.AttemptResult’s retry variant in packages/cli/src/lib/sentry-client.ts changed from { action: "retry" } to { action: "retry"; token?: string }.SENTRY_FORCE_ENV_TOKEN and SENTRY_CUSTOM_HEADERS."not a URL"), credential-forwarding rejection expectations, manual redirect behavior, and captured fetchCalls; exact test names and full assertions were elided.handleUnauthorized() after token refresh. Planned correction: preserve that invariant and derive redirect credentials from the mutable headers.packages/cli/src/lib/sentry-client.ts and packages/cli/test/lib/security/sntrys-claim-mismatch.test.ts were modified to correct the mutable-header/token-refresh regression.v4.1.10 in packages/cli; 1 test file passed and 14 tests passed; duration 6.64s (transform 4.38s, setup 170ms, import 3.90s, tests 2.17s, environment 3ms). Vitest emitted a deprecation warning that test.poolOptions was removed in Vitest 4 and prior poolOptions are now top-level options.SENTRY_AUTH_TOKEN was detected but stored login for a stored OAuth user was used; SENTRY_FORCE_ENV_TOKEN=1 selects the environment token instead.packages/cli/test/lib/sentry-client.test.ts, which describes authenticated-fetch retry and timeout behavior for CLI-1D6; relevant sections include describe("fetchWithRetry / buildAttemptFactory", ...) at line 38 and a 503 retry response at line 186.