Dashboard › cli › Distillation
7cc7bfe3-b4f6-4c34-8cec-b41ad8d48629["lore_tm_v1_IWgSTYRNwdCpBAGJ3fkbv78isv8LxAjWKNgIl2HXFJY","lore_tm_v1_zs0zHpPPRuYzFTGxmfWXLqgPWPWYjwV-5FiMJy-78NM","lore_tm_v1_eimXDd2BzndmPQSqykAOpd4meKNUi8fLbPa8NbBPSGQ","lore_tm_v1_A1PzgDn7N-LLfbuNX_ZN4wr23Gp3MnVFFczQGTFOFM8","lore_tm_v1_A5v6LZahwYNujnXsu4eP_0xV9w7t1y1ArBQET5kD0VE","lore_tm_v1_3myd2vg-AwmXve3yaphAocrnBYLIbu9riOW-N9ZFgto","lore_tm_v1_-ejpUcfDo1NSl82Qh1F7JwO0GbbQovD_Po10bTEWIqw"]
Date: Sep 10, 2026
packages/cli/src/lib/sentry-client.ts::fetchWithRetry() at lines 506β553 refreshes the token via refreshToken(), prepares headers with prepareHeaders(input, init, token), builds a replayable request factory via buildAttemptFactory(input, init), and resolves timeoutMs with resolveTimeoutMs(fullUrl) before looping from attempt = 0 through attempt <= MAX_RETRIES.fetchWithRetry() iteration, isLastAttempt is attempt === MAX_RETRIES; it invokes executeAttempt({ input: attemptInput, init: attemptInit, headers, isLastAttempt, timeoutMs }). "done" caches the response with cacheResponse(method, fullUrl, authHeaders(getAuthToken()), result.response), awaits invalidateAfterMutation(method, fullUrl, result.response), and returns the response; "throw" throws result.error; otherwise it computes backoffDelay(attempt), logs ${method} ${new URL(fullUrl).pathname} β retry ${attempt + 1}/${MAX_RETRIES} after ${delay}ms, and awaits sleepMs(delay).fetchWithRetry()βs last retry attempt always returns "done" or "throw"; therefore its throw new Error("Exhausted all retry attempts") at packages/cli/src/lib/sentry-client.ts:551β552 is unreachable.parseSntrysClaim never throws on adversarial input: every input must return either undefined or a valid claim object.packages/cli/test/lib/token-claims.test.ts has an adversarial-input test covering "sntrys___", "sntrys__", "sntrys_π₯_secret", "sntrys_\u0000_secret", "sntrys_/=+_secret", and sntrys_${Buffer.from("{", "utf8").toString("base64")}_secret (Base64-encoded incomplete JSON {); each is asserted not to throw from parseSntrysClaim(input).sntrys_ claims are treated the same as legitimate claims because parseSntrysClaim does not verify signatures or claim authenticity; callers must NEVER use the claim as a primary security signal, per src/lib/token-claims.ts JSDoc.packages/cli/test/lib/token-claims.test.ts documents a forged token minted with iat: 1_700_000_000, url: "https://evil.com", and org: "victim"; parseSntrysClaim(forged) is expected to return { url: "https://evil.com", regionUrl: undefined, org: "victim" }.packages/cli/test/lib/token-claims.property.test.ts property-tests parseSntrysClaim: it never throws; handles adversarial random strings, near-prefix matches, and malformed inputs; preserves valid encoded URLs; and explicitly does not validate authenticity, allowing forged URLs to be parsed.--period were updated from "2026-06-01..2026-07-01" and ">=2026-06-01" to "2026-08-01..2026-09-01" and ">=2026-08-01" in packages/cli/plugins/sentry-cli/skills/sentry-cli/references/dashboard.md, event.md, explore.md, feedback.md, issue.md (both issue-list and issue-event sections), log.md, replay.md, span.md, and trace.md (both trace-list and trace-log sections); relative "7d" examples and each commandβs existing defaults were retained.packages/cli/package.json identifies package sentry version 0.40.0-dev.0, ESM ("type": "module"), Node engine >=18.0, development Node runtime >=22.15, and package manager pnpm@10.11.0.packages/cli/package.json test scripts are: test β pnpm run test:unit; test:unit β pnpm run generate:docs && pnpm run generate:sdk && vitest run test/lib test/commands test/types test/script --coverage; test:changed β pnpm run generate:docs && pnpm run generate:sdk && vitest run --changed; test:e2e β pnpm run generate:docs && pnpm run generate:sdk && vitest run test/e2e; and test:init-eval β vitest run test/init-eval --testTimeout 600000.test.poolOptions was removed in Vitest 4 and prior poolOptions must be configured as top-level options; migration guide: https://vitest.dev/guide/migration#pool-rework.packages/cli passed: 2 test files and 32 tests passed; started at 09:12:43; duration 3.47s (transform 3.84s, setup 103ms, import 4.35s, tests 1.00s, environment 0ms) using Vitest v4.1.10.