/** * `errors` namespace — the release-error-rollup query surface (gateway * `release-error-rollup`). The platform's durable, grouped error memory: * every 5xx at the invoke choke points is fingerprinted (deploy-stable by * normalization) and collapsed into one hot row per distinct failure, each * baselined against the previous ACTIVE release. * * Verdict-first, gateway-authoritative: every page leads with a computed * promote-vs-revert verdict, and the SDK NEVER recomputes it. No client-side * fingerprinting, no re-baselining, no re-counting of `new_fingerprints` — the * gateway's numbers are the truth. `list`/`get` pass the envelope through * untouched; `watch` polls and reads `verdict.new_fingerprints`. * * The promote-gate golden path (run right after an apply/promote activates a * release): * * const w = await r.errors.watch(projectId, { newIn: releaseId }); * if (!w.clean) { * // w.verdict.new_fingerprints > 0 — new error identities under the new * // release. w.new_errors carries the grouped rows + fetch_logs drill-downs. * } * * `clean === (verdict.new_fingerprints === 0)` — the gateway's count, never a * client recount. Exposed both unscoped (`r.errors.list(projectId, …)`) and * project-scoped (`r.project(id).errors.list(…)`), mirroring `r.events`. * * Auth: the addressed project's OWN key when it is cached locally; otherwise * the client's principal (SIWX wallet / session / delegate) with * `project.read`. A key for a different project gets 403, never a 404 that * would confirm existence. */ import type { Client } from "../kernel.js"; import type { ErrorsPage, ErrorFingerprintDetail, ListErrorsOptions, WatchErrorsOptions, WatchErrorsResult } from "./errors.types.js"; export declare class Errors { private readonly client; constructor(client: Client); /** * Read a verdict-first page of a project's grouped error fingerprints * (`GET /projects/v1/:project_id/errors`). Filters map 1:1 to wire query * params except `newIn` → `new_in`; `newIn` (a release id or `"active"`) * drives the verdict's promote-gate `new_fingerprints`. Envelope is passed * through untouched. Authorized with the addressed project's OWN key. */ list(projectId: string, opts?: ListErrorsOptions): Promise; /** * Read one fingerprint's full detail — the same row shape as {@link list} * with the complete sample ring, a per-sample `fetch_logs` next action, and * `also_seen_in_functions` when the hash surfaced under more than one * function (`GET /projects/v1/:project_id/errors/:fingerprint_id`). Throws an * {@link ApiError} 404 (`RESOURCE_NOT_FOUND`) for an unknown id under an * authorized project. */ get(projectId: string, fingerprintId: string): Promise; /** * The promote-gate poll loop. Run it right after an apply/promote activates a * release to watch that release under real traffic. Polls {@link list} with * `{ newIn }` immediately, then every `intervalMs`, and does one final poll * when the `durationMs` window elapses. With `failFast` (the default), stops * the moment a poll reports `verdict.new_fingerprints > 0`. * * The verdict is the gateway's — `clean === (verdict.new_fingerprints === 0)` * is read straight off the last observed page; nothing is recomputed here. * `new_errors` is that page's `errors[]` (already server-filtered to * first-seen-under-release when `newIn` is passed). * * Fault tolerance so an outage can't masquerade as a verdict: a 4xx (other * than 408/429) rethrows immediately — auth/validation won't heal; network * errors, 5xx, 408, and 429 are tolerated, but three CONSECUTIVE failed polls * rethrow the last error (a successful poll resets the counter). * * `signal` aborts cleanly: if at least one poll succeeded, returns the * result-so-far with `aborted: true`; if none did, throws a {@link LocalError}. * * @throws {LocalError} when `projectId` or `opts.newIn` is missing, or when * aborted before any poll succeeded. */ watch(projectId: string, opts: WatchErrorsOptions): Promise; } //# sourceMappingURL=errors.d.ts.map