@rustrak/client 0.12.3 → 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.
- package/README.md +123 -37
- package/dist/index.cjs +897 -422
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +225 -144
- package/dist/index.d.ts +225 -144
- package/dist/index.js +888 -414
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/schemas/common.ts","../src/schemas/agent.ts","../src/schemas/alert.ts","../src/schemas/event.ts","../src/schemas/team.ts","../src/schemas/invitation.ts","../src/schemas/issue.ts","../src/schemas/log.ts","../src/schemas/member.ts","../src/schemas/project.ts","../src/schemas/session.ts","../src/schemas/sourcemap.ts","../src/schemas/stats.ts","../src/schemas/storage.ts","../src/schemas/token.ts","../src/schemas/transaction.ts","../src/schemas/user.ts","../src/errors/base.ts","../src/errors/http.ts","../src/errors/validation.ts","../src/resources/base.ts","../src/resources/agents.ts","../src/resources/alert-integrations.ts","../src/resources/alert-rules.ts","../src/resources/auth.ts","../src/resources/events.ts","../src/schemas/version.ts","../src/resources/health.ts","../src/resources/invitations.ts","../src/resources/issues.ts","../src/resources/logs.ts","../src/resources/members.ts","../src/resources/projects.ts","../src/resources/releases.ts","../src/resources/sessions.ts","../src/resources/sourcemaps.ts","../src/resources/spans.ts","../src/resources/stats.ts","../src/resources/storage.ts","../src/resources/team.ts","../src/resources/tokens.ts","../src/resources/transactions.ts","../src/utils/http.ts","../src/client.ts"],"names":["z"],"mappings":"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","file":"index.js","sourcesContent":["import { z } from 'zod';\n\n/**\n * Generic paginated response schema (cursor-based)\n */\nexport const paginatedResponseSchema = <T extends z.ZodTypeAny>(\n itemSchema: T,\n) =>\n z.object({\n items: z.array(itemSchema),\n next_cursor: z.string().optional(),\n has_more: z.boolean(),\n });\n\n/**\n * Generic offset-based paginated response schema\n */\nexport const offsetPaginatedResponseSchema = <T extends z.ZodTypeAny>(\n itemSchema: T,\n) =>\n z.object({\n items: z.array(itemSchema),\n total_count: z.number().int(),\n page: z.number().int(),\n per_page: z.number().int(),\n total_pages: z.number().int(),\n });\n\n/**\n * Sort order enum\n */\nexport const sortOrderSchema = z.enum(['asc', 'desc']);\n\n/**\n * Issue sort field enum\n */\nexport const issueSortSchema = z.enum([\n 'digest_order',\n 'last_seen',\n 'event_count',\n]);\n\n/**\n * Issue filter enum\n */\nexport const issueFilterSchema = z.enum(['open', 'resolved', 'muted', 'all']);\n\n/**\n * ISO 8601 datetime string\n */\nexport const dateTimeSchema = z.string().datetime();\n\n/**\n * UUID v4 string (RFC 4122). Use for server-generated ids (row PKs, issue ids)\n * which are always created with `gen_random_uuid()`.\n */\nexport const uuidSchema = z.string().uuid();\n\n/**\n * Sentry event identifier.\n *\n * Sentry event ids are 32 random hex characters — they do NOT carry RFC-4122\n * version/variant bits. The server stores them in a UUID column and returns\n * them in canonical dashed form, but a strict `uuid()` check rejects the many\n * valid ids whose version nibble falls outside 1–8. Accept any hex UUID shape\n * regardless of version/variant so real SDK payloads validate.\n */\nexport const eventIdSchema = z\n .string()\n .regex(\n /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/,\n 'Invalid event id',\n );\n\n/**\n * API error response\n */\nexport const apiErrorSchema = z.object({\n error: z.string(),\n message: z.string().optional(),\n});\n","import { z } from 'zod';\nimport { dateTimeSchema } from './common.js';\n\n/**\n * One time-bucketed value (count or sum) — Agent Runs widget.\n */\nexport const agentTimeseriesPointSchema = z.object({\n bucket: dateTimeSchema,\n value: z.number(),\n});\n\n/**\n * avg/p95 duration for one time bucket — Duration widget.\n */\nexport const agentDurationPointSchema = z.object({\n bucket: dateTimeSchema,\n avg_ms: z.number(),\n p95_ms: z.number(),\n});\n\n/**\n * One row of a \"top N by X\" breakdown (model or tool name).\n */\nexport const genAiBreakdownRowSchema = z.object({\n label: z.string(),\n value: z.number(),\n});\n\n/**\n * One row of the Traces table — per-trace_id aggregate across all AI spans\n * sharing that trace, regardless of origin.\n */\nexport const agentTraceSummarySchema = z.object({\n trace_id: z.string(),\n /** Every distinct agent that ran in this trace, earliest first. */\n agent_names: z.array(z.string()),\n duration_ms: z.number().nullable(),\n total_tokens: z.number(),\n tool_call_count: z.number().int(),\n started_at: dateTimeSchema,\n});\n","import { z } from 'zod';\nimport { dateTimeSchema } from './common.js';\n\n/**\n * Provider type enum (replaces channel_type)\n */\nexport const providerTypeSchema = z.enum(['webhook', 'email', 'slack']);\n\n/** @deprecated Use providerTypeSchema */\nexport const channelTypeSchema = providerTypeSchema;\n\n/**\n * Alert type enum\n */\nexport const alertTypeSchema = z.enum(['new_issue', 'regression', 'unmute']);\n\n/**\n * Alert status enum\n */\nexport const alertStatusSchema = z.enum([\n 'pending',\n 'sent',\n 'failed',\n 'skipped',\n]);\n\n/**\n * Alert integration response schema (global credentials record)\n */\nexport const alertIntegrationSchema = z.object({\n id: z.number().int(),\n name: z.string(),\n provider_type: providerTypeSchema,\n credentials: z.record(z.string(), z.unknown()),\n is_enabled: z.boolean(),\n failure_count: z.number().int(),\n last_failure_at: dateTimeSchema.nullable(),\n last_failure_message: z.string().nullable(),\n last_success_at: dateTimeSchema.nullable(),\n created_at: dateTimeSchema,\n updated_at: dateTimeSchema,\n});\n\n/** @deprecated Use alertIntegrationSchema */\nexport const notificationChannelSchema = alertIntegrationSchema;\n\n/**\n * Create alert integration request schema\n */\nexport const createAlertIntegrationSchema = z.object({\n name: z.string().min(1),\n provider_type: providerTypeSchema,\n credentials: z.record(z.string(), z.unknown()),\n is_enabled: z.boolean().optional(),\n});\n\n/** @deprecated Use createAlertIntegrationSchema */\nexport const createNotificationChannelSchema = createAlertIntegrationSchema;\n\n/**\n * Update alert integration request schema\n */\nexport const updateAlertIntegrationSchema = z.object({\n name: z.string().min(1).optional(),\n credentials: z.record(z.string(), z.unknown()).optional(),\n is_enabled: z.boolean().optional(),\n});\n\n/** @deprecated Use updateAlertIntegrationSchema */\nexport const updateNotificationChannelSchema = updateAlertIntegrationSchema;\n\n/**\n * Per-rule channel routing entry schema\n */\nexport const alertRuleChannelInputSchema = z.object({\n integration_id: z.number().int(),\n routing_override: z.record(z.string(), z.unknown()).default({}),\n});\n\n/**\n * Alert rule response schema\n */\nexport const alertRuleSchema = z.object({\n id: z.number().int(),\n project_id: z.number().int(),\n name: z.string(),\n alert_type: alertTypeSchema,\n is_enabled: z.boolean(),\n conditions: z.record(z.string(), z.unknown()),\n cooldown_minutes: z.number().int(),\n last_triggered_at: dateTimeSchema.nullable(),\n created_at: dateTimeSchema,\n updated_at: dateTimeSchema,\n channels: z.array(alertRuleChannelInputSchema).default([]),\n integration_ids: z.array(z.number().int()),\n});\n\n/**\n * Create alert rule request schema\n */\nexport const createAlertRuleSchema = z.object({\n name: z.string().min(1),\n alert_type: alertTypeSchema,\n channels: z.array(alertRuleChannelInputSchema).default([]),\n is_enabled: z.boolean().optional(),\n conditions: z.record(z.string(), z.unknown()).optional(),\n cooldown_minutes: z.number().int().min(0).optional(),\n});\n\n/**\n * Update alert rule request schema\n */\nexport const updateAlertRuleSchema = z.object({\n name: z.string().min(1).optional(),\n is_enabled: z.boolean().optional(),\n conditions: z.record(z.string(), z.unknown()).optional(),\n cooldown_minutes: z.number().int().min(0).optional(),\n channels: z.array(alertRuleChannelInputSchema).optional(),\n});\n\n/**\n * Alert history entry schema\n */\nexport const alertHistorySchema = z.object({\n id: z.number().int(),\n alert_rule_id: z.number().int().nullable(),\n integration_id: z.number().int().nullable(),\n issue_id: z.string().uuid().nullable(),\n project_id: z.number().int().nullable(),\n alert_type: z.string(),\n channel_type: z.string(),\n channel_name: z.string(),\n status: alertStatusSchema,\n attempt_count: z.number().int(),\n next_retry_at: dateTimeSchema.nullable(),\n error_message: z.string().nullable(),\n http_status_code: z.number().int().nullable(),\n idempotency_key: z.string(),\n created_at: dateTimeSchema,\n sent_at: dateTimeSchema.nullable(),\n});\n\n/**\n * Test channel response schema\n */\nexport const testChannelResponseSchema = z.object({\n success: z.boolean(),\n message: z.string(),\n});\n\n/**\n * Test integration request body schema\n */\nexport const testIntegrationBodySchema = z.object({\n routing_override: z.record(z.string(), z.unknown()).optional(),\n});\n","import { z } from 'zod';\nimport { dateTimeSchema, eventIdSchema, uuidSchema } from './common.js';\n\n/**\n * Event response schema from list endpoint\n */\nexport const eventSchema = z.object({\n id: uuidSchema,\n event_id: eventIdSchema,\n issue_id: uuidSchema.nullable(),\n title: z.string(),\n timestamp: dateTimeSchema,\n level: z.string(),\n platform: z.string(),\n release: z.string(),\n environment: z.string(),\n event_type: z.string(),\n});\n\n/**\n * Event detail response schema from detail endpoint\n */\nexport const eventDetailSchema = z.object({\n id: uuidSchema,\n event_id: eventIdSchema,\n issue_id: uuidSchema.nullable(),\n title: z.string(),\n timestamp: dateTimeSchema,\n ingested_at: dateTimeSchema,\n level: z.string(),\n platform: z.string(),\n release: z.string(),\n environment: z.string(),\n server_name: z.string(),\n sdk_name: z.string(),\n sdk_version: z.string(),\n event_type: z.string(),\n data: z.record(z.string(), z.any()), // Full Sentry event JSON\n});\n","import { z } from 'zod';\nimport { dateTimeSchema } from './common.js';\n\n/**\n * Global role assignable to a user (admin has full access, member is standard).\n */\nexport const globalRoleSchema = z.enum(['admin', 'member']);\n\n/**\n * Team member schema - a user as exposed on the team roster.\n */\nexport const teamMemberSchema = z.object({\n id: z.number().int(),\n email: z.string().email(),\n role: globalRoleSchema,\n is_active: z.boolean(),\n /** True for the first-registered account, which cannot be demoted or deleted. */\n is_primary: z.boolean().optional(),\n created_at: dateTimeSchema,\n last_login: dateTimeSchema.nullable().optional(),\n});\n\n/**\n * Request body for changing a user's global role.\n */\nexport const updateUserRoleSchema = z.object({\n role: globalRoleSchema,\n});\n","import { z } from 'zod';\nimport { dateTimeSchema } from './common.js';\nimport { globalRoleSchema } from './team.js';\n\n/**\n * Status of an invitation lifecycle (server returns a free-form string;\n * kept permissive to tolerate new statuses without breaking validation).\n */\nexport const invitationStatusSchema = z.string();\n\n/**\n * Invitation schema - public-facing pending invitation.\n */\nexport const invitationSchema = z.object({\n token: z.string(),\n email: z.string().email(),\n role: globalRoleSchema,\n status: invitationStatusSchema,\n expires_at: dateTimeSchema,\n created_at: dateTimeSchema,\n});\n\n/**\n * Public-facing invitation info for the accept page (no token echoed back).\n */\nexport const invitationInfoSchema = z.object({\n email: z.string().email(),\n role: globalRoleSchema,\n status: invitationStatusSchema,\n expires_at: dateTimeSchema,\n});\n\n/**\n * Request body for creating an invitation.\n */\nexport const createInvitationSchema = z.object({\n email: z.string().email(),\n role: globalRoleSchema,\n});\n\n/**\n * Request body for accepting an invitation (public endpoint).\n */\nexport const acceptInvitationSchema = z.object({\n token: z.string().min(1),\n password: z.string().min(1),\n});\n","import { z } from 'zod';\nimport { dateTimeSchema, uuidSchema } from './common.js';\n\n/**\n * Canonical issue status values (Sentry-compatible).\n */\nexport const issueStatusSchema = z.enum(['unresolved', 'resolved', 'ignored']);\n\n/**\n * Issue priority tiers.\n */\nexport const issuePrioritySchema = z.enum(['low', 'medium', 'high']);\n\n/**\n * Issue response schema from API\n */\nexport const issueSchema = z.object({\n id: uuidSchema,\n project_id: z.number().int(),\n short_id: z.string(),\n title: z.string(),\n value: z.string(),\n culprit: z.string(),\n logger: z.string(),\n first_seen: dateTimeSchema,\n last_seen: dateTimeSchema,\n event_count: z.number().int(),\n level: z.string().nullable(),\n platform: z.string().nullable(),\n // Status model (#165)\n status: issueStatusSchema,\n substatus: z.string().nullable(),\n priority: issuePrioritySchema.nullable(),\n assigned_to: z.number().int().nullable(),\n assignee_type: z.string().nullable(),\n issue_type: z.string(),\n issue_category: z.string(),\n first_release: z.string(),\n last_release: z.string(),\n status_details: z.record(z.string(), z.unknown()),\n // Aggregate enrichment — only the single-issue GET populates this; the list\n // and PATCH endpoints return the lean response, so default to 0 when absent.\n user_report_count: z.number().int().optional().default(0),\n // Per-user fields — only present when the request carries a user session.\n is_bookmarked: z.boolean().optional(),\n is_subscribed: z.boolean().optional(),\n has_seen: z.boolean().optional(),\n // Bulk list stats — only the list endpoint populates these (computed once\n // per page); the single-issue GET and PATCH responses omit them.\n user_count: z.number().int().optional(),\n trend: z.array(z.number().int()).optional(),\n // Deprecated, derived from `status`; kept for backward compatibility.\n is_resolved: z.boolean(),\n is_muted: z.boolean(),\n});\n\n/**\n * Update issue state request schema.\n *\n * `status` (plus `substatus`/`priority`/assignment) is canonical;\n * `is_resolved`/`is_muted` remain as a deprecated compatibility shim.\n * `status` also accepts the special `resolvedInNextRelease` value.\n */\nexport const updateIssueStateSchema = z.object({\n status: z\n .union([issueStatusSchema, z.literal('resolvedInNextRelease')])\n .optional(),\n substatus: z.string().optional(),\n priority: issuePrioritySchema.optional(),\n assigned_to: z.number().int().nullable().optional(),\n assignee_type: z.string().nullable().optional(),\n is_resolved: z.boolean().optional(),\n is_muted: z.boolean().optional(),\n});\n\n/**\n * A grouping hash that maps to an issue.\n */\nexport const issueHashSchema = z.object({\n id: z.number().int(),\n project_id: z.number().int(),\n issue_id: uuidSchema,\n grouping_key: z.string(),\n grouping_key_hash: z.string(),\n created_at: dateTimeSchema,\n});\n\n/**\n * A tag value with its event count.\n */\nexport const tagValueCountSchema = z.object({\n value: z.string(),\n count: z.number().int(),\n});\n\n/**\n * A single tag value's usage within an issue — the shape `GET\n * /issues/{id}/tags/{key}` returns per entry (Sentry-compatible: a bare\n * list of these, not a `{key, values}` wrapper).\n */\nexport const issueTagValueSchema = z.object({\n key: z.string(),\n name: z.string(),\n value: z.string(),\n count: z.number().int(),\n first_seen: dateTimeSchema,\n last_seen: dateTimeSchema,\n});\n\n/**\n * A tag key with its most common values within an issue.\n */\nexport const tagSummarySchema = z.object({\n key: z.string(),\n total_values: z.number().int(),\n top_values: z.array(tagValueCountSchema),\n});\n\n/**\n * Per-issue aggregates: unique user count + top tags.\n */\nexport const issueAggregatesSchema = z.object({\n user_count: z.number().int(),\n tags: z.array(tagSummarySchema),\n});\n\n/**\n * Time window for issue stats.\n */\nexport const issueStatsWindowSchema = z.enum(['24h', '30d']);\n\n/**\n * Event-count timeseries for an issue: `[bucketStartUnix, count]` points.\n */\nexport const issueStatsSchema = z.object({\n data: z.array(z.tuple([z.number(), z.number()])),\n});\n\n/**\n * An entry in an issue's activity log (status changes, comments/notes, etc.).\n */\nexport const activityEntrySchema = z.object({\n id: uuidSchema,\n issue_id: uuidSchema,\n user_id: z.number().int().nullable(),\n type: z.string(),\n data: z.string(),\n created_at: dateTimeSchema,\n});\n\n/**\n * A user feedback report attached to an issue/event.\n */\nexport const userReportSchema = z.object({\n id: uuidSchema,\n project_id: z.number().int(),\n issue_id: uuidSchema.nullable(),\n event_id: uuidSchema.nullable(),\n name: z.string(),\n // Server stores '' for anonymous reports (column DEFAULT '' / unwrap_or_default),\n // matching real Sentry's own save_userreport(report.get(\"email\", \"\")) — accept it.\n email: z.union([z.email(), z.literal('')]),\n comments: z.string(),\n created_at: dateTimeSchema,\n});\n\n/**\n * Request to add a comment (note) to an issue.\n */\nexport const createCommentSchema = z.object({\n text: z.string(),\n});\n\n/**\n * Request to submit user feedback on an issue.\n */\nexport const createUserReportSchema = z.object({\n name: z.string().optional(),\n email: z.email().optional(),\n comments: z.string().optional(),\n event_id: uuidSchema.optional(),\n});\n\n/**\n * Request to bulk-mutate issues.\n */\nexport const bulkUpdateIssuesSchema = z.object({\n ids: z.array(uuidSchema),\n status: z\n .union([issueStatusSchema, z.literal('resolvedInNextRelease')])\n .optional(),\n priority: issuePrioritySchema.optional(),\n});\n\n/**\n * Request to bulk-delete issues.\n */\nexport const bulkDeleteIssuesSchema = z.object({\n ids: z.array(uuidSchema),\n});\n","import { z } from 'zod';\nimport { dateTimeSchema, uuidSchema } from './common.js';\n\n/**\n * Log response schema from the list endpoint (Sentry \"log\" item — OurLog).\n *\n * `attributes` keeps the OTel-style typed map as received\n * (`{\"key\":{\"value\":x,\"type\":\"string\"}}`); denormalized fields are surfaced\n * separately for filtering/sorting.\n */\nexport const logSchema = z.object({\n id: uuidSchema,\n trace_id: z.string().nullable(),\n span_id: z.string().nullable(),\n level: z.string(),\n /** OTel severity number (1=trace … 21=fatal). Null for unknown levels. */\n severity_number: z.number().int().nullable(),\n body: z.string(),\n attributes: z.record(z.string(), z.any()),\n timestamp: dateTimeSchema,\n ingested_at: dateTimeSchema,\n});\n","import { z } from 'zod';\nimport { dateTimeSchema } from './common.js';\n\n/**\n * Per-project role assignable to a member.\n */\nexport const projectRoleSchema = z.enum(['viewer', 'editor', 'admin']);\n\n/**\n * Project member schema - member row joined with the user's email.\n */\nexport const projectMemberSchema = z.object({\n user_id: z.number().int(),\n email: z.string().email(),\n role: projectRoleSchema,\n created_at: dateTimeSchema,\n});\n\n/**\n * Request body for adding or updating a project member.\n */\nexport const upsertProjectMemberSchema = z.object({\n user_id: z.number().int(),\n role: projectRoleSchema,\n});\n","import { z } from 'zod';\nimport { dateTimeSchema, uuidSchema } from './common.js';\n\n/**\n * Project response schema from API\n */\nexport const projectSchema = z.object({\n id: z.number().int(),\n name: z.string(),\n slug: z.string(),\n sentry_key: uuidSchema,\n dsn: z.string(),\n stored_event_count: z.number().int(),\n digested_event_count: z.number().int(),\n created_at: dateTimeSchema,\n updated_at: dateTimeSchema,\n platform: z.string().nullable(),\n});\n\n/**\n * Create project request schema\n */\nexport const createProjectSchema = z.object({\n name: z.string().min(1),\n slug: z.string().optional(),\n});\n\n/**\n * Update project request schema\n */\nexport const updateProjectSchema = z.object({\n name: z.string().min(1).optional(),\n platform: z.string().min(1).optional(),\n});\n","import { z } from 'zod';\nimport { dateTimeSchema } from './common.js';\n\nexport const releaseHealthRowSchema = z.object({\n release: z.string(),\n environment: z.string(),\n total: z.number().int(),\n errored: z.number().int(),\n crashed: z.number().int(),\n abnormal: z.number().int(),\n healthy: z.number().int(),\n crash_free_sessions_rate: z.number().nullable(),\n crash_free_users_rate: z.number().nullable(),\n});\n\nexport const sessionSummarySchema = z.object({\n total: z.number().int(),\n errored: z.number().int(),\n crashed: z.number().int(),\n abnormal: z.number().int(),\n crash_free_sessions_rate: z.number().nullable(),\n crash_free_users_rate: z.number().nullable(),\n active_releases: z.number().int(),\n});\n\nexport const sessionTimeseriesPointSchema = z.object({\n bucket: dateTimeSchema,\n total: z.number().int(),\n crashed: z.number().int(),\n crash_free_sessions_rate: z.number().nullable(),\n});\n\nexport const sessionTimeseriesSchema = z.array(sessionTimeseriesPointSchema);\n","import { z } from 'zod';\n\nexport const chunkUploadCapabilitySchema = z.object({\n url: z.string(),\n chunkSize: z.number().int(),\n chunksPerRequest: z.number().int(),\n maxRequestSize: z.number().int(),\n hashAlgorithm: z.string(),\n accept: z.array(z.string()),\n concurrency: z.number().int().optional(),\n});\n\nexport const assembleResponseSchema = z.object({\n state: z.string(),\n missingChunks: z.array(z.string()),\n detail: z.string().optional(),\n});\n\nexport const sourceMapFileSchema = z.object({\n debugId: z.string(),\n fileType: z.string(),\n size: z.number().int(),\n timesUsed: z.number().int(),\n dateUploaded: z.string(),\n});\n\nexport const listSourceMapsResponseSchema = z.object({\n data: z.array(sourceMapFileSchema),\n});\n","import { z } from 'zod';\nimport { dateTimeSchema } from './common.js';\n\n/**\n * One time bucket of error-event volume, split by severity.\n *\n * `total` always equals `fatal + error + warning + info`: the server folds\n * `debug` and any unrecognized level into `info`, so stacked chart segments\n * sum to the bar height.\n */\nexport const eventTimeseriesPointSchema = z.object({\n bucket: dateTimeSchema,\n total: z.number().int(),\n fatal: z.number().int(),\n error: z.number().int(),\n warning: z.number().int(),\n info: z.number().int(),\n});\n\nexport const eventTimeseriesSchema = z.array(eventTimeseriesPointSchema);\n\n/**\n * A counter over the requested window plus the same counter over the window\n * immediately before it.\n *\n * `previous` is `null` for all-time requests: there is no earlier window, and\n * treating that as `0` would render as a misleading \"+100%\".\n */\nexport const metricDeltaSchema = z.object({\n current: z.number().int(),\n previous: z.number().int().nullable(),\n});\n\n/**\n * Project-wide counters for the overview, each with its period comparison.\n */\nexport const projectStatsSummarySchema = z.object({\n /** Resolved window in hours, or `null` for all time. */\n period_hours: z.number().int().nullable(),\n events: metricDeltaSchema,\n new_issues: metricDeltaSchema,\n /** Currently unresolved issues, independent of the window. */\n open_issues: z.number().int(),\n});\n","import { z } from 'zod';\n\n/**\n * Exact source-map storage weight, summed from the `size` columns of the\n * in-DB chunk table and the on-disk source_file CAS.\n */\nexport const sourceMapStorageSchema = z.object({\n chunk_bytes: z.number(),\n source_file_bytes: z.number(),\n total_bytes: z.number(),\n file_count: z.number(),\n});\n\n/**\n * Instance-wide storage summary: row counts per data category, whole-DB size\n * (best-effort, backend-reported), and exact source-map weight.\n */\nexport const storageSummarySchema = z.object({\n total_db_size_bytes: z.number(),\n events_count: z.number(),\n transactions_count: z.number(),\n spans_count: z.number(),\n logs_count: z.number(),\n source_maps: sourceMapStorageSchema,\n});\n\n/**\n * Per-project storage breakdown (one row per project, including empty ones).\n * `estimated_bytes` is the summed JSON payload length the project owns.\n */\nexport const projectStorageSchema = z.object({\n project_id: z.number(),\n project_name: z.string(),\n events_count: z.number(),\n transactions_count: z.number(),\n spans_count: z.number(),\n logs_count: z.number(),\n source_maps_count: z.number(),\n estimated_bytes: z.number(),\n});\n\n/**\n * Rows affected by a cleanup — used symmetrically for the dry-run preview\n * (\"what would be removed\") and the executed result (\"what was removed\").\n */\nexport const cleanupCountsSchema = z.object({\n events: z.number(),\n transactions: z.number(),\n spans: z.number(),\n logs: z.number(),\n issues_removed: z.number(),\n});\n\n/**\n * Outcome of a source-map garbage collection: orphaned files removed from the\n * DB and unlinked from disk, plus the exact bytes freed.\n */\nexport const sourceMapGcResultSchema = z.object({\n files_removed: z.number(),\n bytes_freed: z.number(),\n});\n\n/**\n * Request body for a cleanup (preview or execute): remove data older than\n * `older_than_days`, optionally scoped to one project (omit for all) and to\n * specific data categories. The minimum of 1 mirrors the server contract — a\n * smaller window would wipe the whole dataset.\n *\n * The `include_*` flags select which data categories the cleanup acts on. Each\n * is optional and defaults to `true` server-side, so omitting all of them keeps\n * the \"delete everything older than the cutoff\" behaviour. `include_transactions`\n * also governs the cascaded spans, and `include_events` governs the emptied\n * issues that get removed alongside their events.\n */\nexport const cleanupOptionsSchema = z.object({\n older_than_days: z.number().int().min(1),\n project_id: z.number().int().optional(),\n include_events: z.boolean().optional(),\n include_transactions: z.boolean().optional(),\n include_logs: z.boolean().optional(),\n});\n","import { z } from 'zod';\nimport { dateTimeSchema } from './common.js';\n\n/**\n * Auth token response schema from list endpoint (masked)\n */\nexport const authTokenSchema = z.object({\n id: z.number().int(),\n token_prefix: z.string(),\n description: z.string().nullable(),\n created_at: dateTimeSchema,\n last_used_at: dateTimeSchema.nullable(),\n});\n\n/**\n * Auth token created response schema (full token shown once)\n */\nexport const authTokenCreatedSchema = z.object({\n id: z.number().int(),\n token: z.string(),\n description: z.string().nullable(),\n created_at: dateTimeSchema,\n});\n\n/**\n * Create auth token request schema\n */\nexport const createAuthTokenSchema = z.object({\n description: z.string().optional(),\n});\n","import { z } from 'zod';\nimport { dateTimeSchema, eventIdSchema, uuidSchema } from './common.js';\n\n/**\n * Transaction response schema from list endpoint\n */\nexport const transactionSchema = z.object({\n id: uuidSchema,\n event_id: eventIdSchema,\n transaction_name: z.string(),\n timestamp: dateTimeSchema,\n start_timestamp: dateTimeSchema.nullable(),\n duration_ms: z.number().nullable(),\n platform: z.string(),\n environment: z.string(),\n release: z.string(),\n ingested_at: dateTimeSchema,\n});\n\n/**\n * Transaction detail schema from the detail endpoint.\n *\n * Same summary fields as {@link transactionSchema} plus the full Sentry\n * payload under `data` (spans, contexts.trace, measurements, tags, request,\n * user) used to render the span waterfall and metrics view.\n */\nexport const transactionDetailSchema = z.object({\n id: uuidSchema,\n event_id: eventIdSchema,\n transaction_name: z.string(),\n timestamp: dateTimeSchema,\n start_timestamp: dateTimeSchema.nullable(),\n duration_ms: z.number().nullable(),\n platform: z.string(),\n environment: z.string(),\n release: z.string(),\n ingested_at: dateTimeSchema,\n data: z.record(z.string(), z.any()), // Full Sentry transaction payload\n});\n\n/**\n * A span row from the shared `spans` table — covers both origins\n * (transaction-embedded AND standalone \"span\" envelope items share this\n * table and this exact response shape), including gen_ai.* denormalized\n * fields when the span is recognized as an AI span.\n */\nexport const spanSchema = z.object({\n id: uuidSchema,\n /** Parent transaction, if this span was extracted from one. `null` for a standalone span. */\n transaction_id: uuidSchema.nullable(),\n span_id: z.string().nullable(),\n trace_id: z.string().nullable(),\n parent_span_id: z.string().nullable(),\n op: z.string().nullable(),\n description: z.string().nullable(),\n status: z.string().nullable(),\n start_timestamp: dateTimeSchema.nullable(),\n timestamp: dateTimeSchema.nullable(),\n duration_ms: z.number().nullable(),\n exclusive_time_ms: z.number().nullable(),\n is_segment: z.boolean(),\n segment_id: z.string().nullable(),\n /** Only ever set for standalone spans — a transaction-embedded span has no parent row to inherit these from. */\n platform: z.string().nullable(),\n release: z.string().nullable(),\n environment: z.string().nullable(),\n /** gen_ai.* denormalized fields — all null unless recognized as an AI span. */\n gen_ai_operation_type: z.string().nullable(),\n gen_ai_agent_name: z.string().nullable(),\n gen_ai_request_model: z.string().nullable(),\n gen_ai_response_model: z.string().nullable(),\n gen_ai_tool_name: z.string().nullable(),\n gen_ai_conversation_id: z.string().nullable(),\n gen_ai_usage_input_tokens: z.number().nullable(),\n gen_ai_usage_output_tokens: z.number().nullable(),\n gen_ai_usage_total_tokens: z.number().nullable(),\n});\n\n/**\n * Aggregate performance stats for one (transaction_name, op) group.\n */\nexport const transactionStatsSchema = z.object({\n transaction_name: z.string(),\n op: z.string().nullable(),\n count: z.number().int(),\n p50_ms: z.number(),\n p95_ms: z.number(),\n p99_ms: z.number(),\n failure_rate: z.number(),\n});\n","import { z } from 'zod';\nimport { globalRoleSchema } from './team.js';\n\n/**\n * User schema - authenticated user information\n */\nexport const userSchema = z.object({\n id: z.number().int().positive(),\n email: z.string().email(),\n role: globalRoleSchema,\n is_admin: z.boolean(),\n});\n\n/**\n * Auth response schema - returned after login/register\n */\nexport const authResponseSchema = z.object({\n user: userSchema,\n});\n\n/**\n * Login result schema - includes user and session cookies for Server Actions\n */\nexport const loginResultSchema = z.object({\n user: userSchema,\n cookies: z.array(z.string()),\n});\n\n/**\n * Login request schema\n */\nexport const loginRequestSchema = z.object({\n email: z.string().email(),\n password: z.string().min(1),\n});\n\n/**\n * Register request schema\n */\nexport const registerRequestSchema = z.object({\n email: z.string().email(),\n password: z.string().min(1),\n});\n","/**\n * Base error class for all Rustrak client errors\n */\nexport class RustrakError extends Error {\n /**\n * Whether this error is safe to retry\n */\n public readonly retryable: boolean;\n\n /**\n * HTTP status code if applicable\n */\n public readonly statusCode?: number;\n\n /**\n * Original error cause\n */\n public readonly cause?: Error;\n\n constructor(\n message: string,\n options?: {\n retryable?: boolean;\n statusCode?: number;\n cause?: Error;\n },\n ) {\n super(message);\n this.name = this.constructor.name;\n this.retryable = options?.retryable ?? false;\n this.statusCode = options?.statusCode;\n this.cause = options?.cause;\n\n // Maintains proper stack trace for where our error was thrown (only available on V8)\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n }\n}\n","import { RustrakError } from './base.js';\n\n/**\n * Network error (connection issues, timeouts)\n * Retryable by default\n */\nexport class NetworkError extends RustrakError {\n constructor(message: string, cause?: Error) {\n super(message, { retryable: true, cause });\n }\n}\n\n/**\n * Authentication error (401 Unauthorized)\n * Not retryable - requires new credentials\n */\nexport class AuthenticationError extends RustrakError {\n constructor(message = 'Authentication failed') {\n super(message, { retryable: false, statusCode: 401 });\n }\n}\n\n/**\n * Authorization error (403 Forbidden)\n * Not retryable - requires different permissions\n */\nexport class AuthorizationError extends RustrakError {\n constructor(message = 'Insufficient permissions') {\n super(message, { retryable: false, statusCode: 403 });\n }\n}\n\n/**\n * Not found error (404 Not Found)\n * Not retryable\n */\nexport class NotFoundError extends RustrakError {\n constructor(resource: string) {\n super(`Resource not found: ${resource}`, {\n retryable: false,\n statusCode: 404,\n });\n }\n}\n\n/**\n * Rate limit error (429 Too Many Requests)\n * Retryable after delay\n */\nexport class RateLimitError extends RustrakError {\n /**\n * Number of seconds to wait before retrying (from Retry-After header)\n */\n public readonly retryAfter?: number;\n\n constructor(message = 'Rate limit exceeded', retryAfter?: string | number) {\n super(message, { retryable: true, statusCode: 429 });\n\n if (retryAfter !== undefined) {\n this.retryAfter =\n typeof retryAfter === 'string' ? parseInt(retryAfter, 10) : retryAfter;\n }\n }\n}\n\n/**\n * Server error (500+)\n * Retryable by default\n */\nexport class ServerError extends RustrakError {\n constructor(message: string, statusCode = 500) {\n super(message, { retryable: true, statusCode });\n }\n}\n\n/**\n * Bad request error (400)\n * Not retryable - client error\n */\nexport class BadRequestError extends RustrakError {\n constructor(message: string) {\n super(message, { retryable: false, statusCode: 400 });\n }\n}\n","import type { ZodError } from 'zod';\nimport { RustrakError } from './base.js';\n\n/**\n * Validation error when API response doesn't match expected schema\n * Not retryable - indicates API contract mismatch\n */\nexport class ValidationError extends RustrakError {\n /**\n * Zod validation errors\n */\n public readonly validationErrors?: ZodError;\n\n constructor(message: string, validationErrors?: ZodError) {\n super(message, { retryable: false });\n this.validationErrors = validationErrors;\n }\n\n /**\n * Get a formatted string of validation errors\n */\n public getValidationDetails(): string {\n if (!this.validationErrors) {\n return this.message;\n }\n\n const errors = this.validationErrors.issues\n .map((err) => `${err.path.map(String).join('.')}: ${err.message}`)\n .join(', ');\n\n return `${this.message} - ${errors}`;\n }\n}\n","import type { KyInstance } from 'ky';\nimport type { ZodSchema } from 'zod';\nimport { ValidationError } from '../errors/index.js';\n\n/**\n * Base resource class with validation helper\n */\nexport abstract class BaseResource {\n protected readonly http: KyInstance;\n\n constructor(http: KyInstance) {\n this.http = http;\n }\n\n /**\n * Validate API response against Zod schema\n * @throws {ValidationError} if validation fails\n */\n protected validate<T>(data: unknown, schema: ZodSchema<T>): T {\n const result = schema.safeParse(data);\n\n if (!result.success) {\n throw new ValidationError('API response validation failed', result.error);\n }\n\n return result.data;\n }\n}\n","import { z } from 'zod';\nimport {\n agentDurationPointSchema,\n agentTimeseriesPointSchema,\n agentTraceSummarySchema,\n genAiBreakdownRowSchema,\n offsetPaginatedResponseSchema,\n} from '../schemas/index.js';\nimport type {\n AgentBreakdownOptions,\n AgentDurationPoint,\n AgentTimeseriesOptions,\n AgentTimeseriesPoint,\n AgentTraceSummary,\n AgentTracesOptions,\n GenAiBreakdownRow,\n OffsetPaginatedResponse,\n} from '../types/index.js';\nimport { BaseResource } from './base.js';\n\nfunction timeseriesSearchParams(\n options?: AgentTimeseriesOptions,\n): Record<string, string> {\n const searchParams: Record<string, string> = {};\n if (options?.period_hours) {\n searchParams.period_hours = String(options.period_hours);\n }\n if (options?.interval_hours) {\n searchParams.interval_hours = String(options.interval_hours);\n }\n return searchParams;\n}\n\nfunction breakdownSearchParams(\n options?: AgentBreakdownOptions,\n): Record<string, string> {\n const searchParams: Record<string, string> = {};\n if (options?.period_hours) {\n searchParams.period_hours = String(options.period_hours);\n }\n if (options?.limit) {\n searchParams.limit = String(options.limit);\n }\n return searchParams;\n}\n\n/**\n * AI Agent Monitoring dashboard API resource — powers the 6 dashboard\n * widgets (Agent Runs, Duration, LLM Calls by Model, Tokens Used by Model,\n * Tool Calls by Tool, Traces).\n */\nexport class AgentsResource extends BaseResource {\n /**\n * Time-bucketed count of agent-run spans (`gen_ai.operation.type:agent`).\n */\n async getRuns(\n projectId: number,\n options?: AgentTimeseriesOptions,\n ): Promise<AgentTimeseriesPoint[]> {\n const data = await this.http\n .get(`api/projects/${projectId}/agents/runs`, {\n searchParams: timeseriesSearchParams(options),\n })\n .json();\n\n return this.validate(data, z.array(agentTimeseriesPointSchema));\n }\n\n /**\n * Time-bucketed avg/p95 duration for `agent`/`ai_client` spans.\n */\n async getDuration(\n projectId: number,\n options?: AgentTimeseriesOptions,\n ): Promise<AgentDurationPoint[]> {\n const data = await this.http\n .get(`api/projects/${projectId}/agents/duration`, {\n searchParams: timeseriesSearchParams(options),\n })\n .json();\n\n return this.validate(data, z.array(agentDurationPointSchema));\n }\n\n /**\n * Top models by LLM call count (`gen_ai.operation.type:ai_client`).\n */\n async getModelsByCalls(\n projectId: number,\n options?: AgentBreakdownOptions,\n ): Promise<GenAiBreakdownRow[]> {\n const data = await this.http\n .get(`api/projects/${projectId}/agents/models/calls`, {\n searchParams: breakdownSearchParams(options),\n })\n .json();\n\n return this.validate(data, z.array(genAiBreakdownRowSchema));\n }\n\n /**\n * Top models by total tokens used (`gen_ai.operation.type:ai_client`).\n */\n async getModelsByTokens(\n projectId: number,\n options?: AgentBreakdownOptions,\n ): Promise<GenAiBreakdownRow[]> {\n const data = await this.http\n .get(`api/projects/${projectId}/agents/models/tokens`, {\n searchParams: breakdownSearchParams(options),\n })\n .json();\n\n return this.validate(data, z.array(genAiBreakdownRowSchema));\n }\n\n /**\n * Top tools by call count (`gen_ai.operation.type:tool`).\n */\n async getTools(\n projectId: number,\n options?: AgentBreakdownOptions,\n ): Promise<GenAiBreakdownRow[]> {\n const data = await this.http\n .get(`api/projects/${projectId}/agents/tools`, {\n searchParams: breakdownSearchParams(options),\n })\n .json();\n\n return this.validate(data, z.array(genAiBreakdownRowSchema));\n }\n\n /**\n * Paginated per-trace_id aggregate (duration, tokens, tool usage) across\n * all AI spans sharing that trace, regardless of origin.\n */\n async getTraces(\n projectId: number,\n options?: AgentTracesOptions,\n ): Promise<OffsetPaginatedResponse<AgentTraceSummary>> {\n const searchParams: Record<string, string> = {};\n if (options?.page) {\n searchParams.page = String(options.page);\n }\n if (options?.per_page) {\n searchParams.per_page = String(options.per_page);\n }\n\n const data = await this.http\n .get(`api/projects/${projectId}/agents/traces`, { searchParams })\n .json();\n\n return this.validate(\n data,\n offsetPaginatedResponseSchema(agentTraceSummarySchema),\n );\n }\n}\n","import { z } from 'zod';\nimport {\n alertIntegrationSchema,\n createAlertIntegrationSchema,\n testChannelResponseSchema,\n testIntegrationBodySchema,\n updateAlertIntegrationSchema,\n} from '../schemas/alert.js';\nimport type {\n AlertIntegration,\n CreateAlertIntegration,\n RoutingOverride,\n TestChannelResponse,\n UpdateAlertIntegration,\n} from '../types/alert.js';\nimport { BaseResource } from './base.js';\n\n/**\n * Alert Integrations API resource (global credential destinations)\n */\nexport class AlertIntegrationsResource extends BaseResource {\n /**\n * List all alert integrations\n */\n async list(): Promise<AlertIntegration[]> {\n const data = await this.http.get('api/integrations').json();\n return this.validate(data, z.array(alertIntegrationSchema));\n }\n\n /**\n * Get a single alert integration by ID\n */\n async get(id: number): Promise<AlertIntegration> {\n const data = await this.http.get(`api/integrations/${id}`).json();\n return this.validate(data, alertIntegrationSchema);\n }\n\n /**\n * Create a new alert integration\n */\n async create(input: CreateAlertIntegration): Promise<AlertIntegration> {\n const validatedInput = this.validate(input, createAlertIntegrationSchema);\n\n const data = await this.http\n .post('api/integrations', { json: validatedInput })\n .json();\n\n return this.validate(data, alertIntegrationSchema);\n }\n\n /**\n * Update an existing alert integration\n */\n async update(\n id: number,\n input: UpdateAlertIntegration,\n ): Promise<AlertIntegration> {\n const validatedInput = this.validate(input, updateAlertIntegrationSchema);\n\n const data = await this.http\n .patch(`api/integrations/${id}`, { json: validatedInput })\n .json();\n\n return this.validate(data, alertIntegrationSchema);\n }\n\n /**\n * Delete an alert integration\n */\n async delete(id: number): Promise<void> {\n await this.http.delete(`api/integrations/${id}`);\n }\n\n /**\n * Send a test notification to verify integration configuration.\n * For Slack bot_token integrations, routingOverride must include `channel`.\n */\n async test(\n id: number,\n routingOverride?: RoutingOverride,\n ): Promise<TestChannelResponse> {\n const body =\n routingOverride !== undefined\n ? this.validate(\n { routing_override: routingOverride },\n testIntegrationBodySchema,\n )\n : undefined;\n\n const data = await this.http\n .post(\n `api/integrations/${id}/test`,\n body !== undefined ? { json: body } : undefined,\n )\n .json();\n\n return this.validate(data, testChannelResponseSchema);\n }\n}\n","import { z } from 'zod';\nimport {\n alertHistorySchema,\n alertRuleSchema,\n createAlertRuleSchema,\n updateAlertRuleSchema,\n} from '../schemas/alert.js';\nimport type {\n AlertHistory,\n AlertRule,\n CreateAlertRule,\n ListAlertHistoryOptions,\n UpdateAlertRule,\n} from '../types/alert.js';\nimport { BaseResource } from './base.js';\n\n/**\n * Alert Rules API resource (per-project alert configuration)\n */\nexport class AlertRulesResource extends BaseResource {\n /**\n * List all alert rules for a project\n */\n async list(projectId: number): Promise<AlertRule[]> {\n const data = await this.http\n .get(`api/projects/${projectId}/alert-rules`)\n .json();\n return this.validate(data, z.array(alertRuleSchema));\n }\n\n /**\n * Get a single alert rule by ID\n */\n async get(projectId: number, ruleId: number): Promise<AlertRule> {\n const data = await this.http\n .get(`api/projects/${projectId}/alert-rules/${ruleId}`)\n .json();\n return this.validate(data, alertRuleSchema);\n }\n\n /**\n * Create a new alert rule for a project\n */\n async create(projectId: number, input: CreateAlertRule): Promise<AlertRule> {\n const validatedInput = this.validate(input, createAlertRuleSchema);\n\n const data = await this.http\n .post(`api/projects/${projectId}/alert-rules`, { json: validatedInput })\n .json();\n\n return this.validate(data, alertRuleSchema);\n }\n\n /**\n * Update an existing alert rule\n */\n async update(\n projectId: number,\n ruleId: number,\n input: UpdateAlertRule,\n ): Promise<AlertRule> {\n const validatedInput = this.validate(input, updateAlertRuleSchema);\n\n const data = await this.http\n .patch(`api/projects/${projectId}/alert-rules/${ruleId}`, {\n json: validatedInput,\n })\n .json();\n\n return this.validate(data, alertRuleSchema);\n }\n\n /**\n * Delete an alert rule\n */\n async delete(projectId: number, ruleId: number): Promise<void> {\n await this.http.delete(`api/projects/${projectId}/alert-rules/${ruleId}`);\n }\n\n /**\n * List alert history for a project\n */\n async listHistory(\n projectId: number,\n options?: ListAlertHistoryOptions,\n ): Promise<AlertHistory[]> {\n const searchParams = new URLSearchParams();\n\n if (options?.limit !== undefined) {\n searchParams.set('limit', options.limit.toString());\n }\n\n const query = searchParams.toString();\n const url = query\n ? `api/projects/${projectId}/alert-history?${query}`\n : `api/projects/${projectId}/alert-history`;\n\n const data = await this.http.get(url).json();\n return this.validate(data, z.array(alertHistorySchema));\n }\n}\n","import {\n acceptInvitationSchema,\n invitationInfoSchema,\n} from '../schemas/invitation.js';\nimport {\n authResponseSchema,\n loginRequestSchema,\n registerRequestSchema,\n userSchema,\n} from '../schemas/user.js';\nimport type { AcceptInvitation, InvitationInfo } from '../types/invitation.js';\nimport type {\n LoginRequest,\n LoginResult,\n RegisterRequest,\n User,\n} from '../types/user.js';\nimport { BaseResource } from './base.js';\n\n/**\n * Authentication API resource\n * Handles user registration, login, logout, and session management\n */\nexport class AuthResource extends BaseResource {\n /**\n * Register a new user account\n * Creates a new user and automatically logs them in (sets session cookie)\n * @param credentials - Email and password for the new account\n * @returns LoginResult with user information and session cookies\n */\n async register(credentials: RegisterRequest): Promise<LoginResult> {\n // Validate input\n const validatedInput = this.validate(credentials, registerRequestSchema);\n\n const response = await this.http.post('auth/register', {\n json: validatedInput,\n });\n\n // Extract Set-Cookie headers for Server Actions\n const cookies = response.headers.getSetCookie();\n\n const data = await response.json();\n const authResponse = this.validate(data, authResponseSchema);\n\n return {\n user: authResponse.user,\n cookies,\n };\n }\n\n /**\n * Login with email and password\n * Authenticates the user and sets a session cookie\n * @param credentials - Email and password\n * @returns LoginResult with user information and session cookies\n */\n async login(credentials: LoginRequest): Promise<LoginResult> {\n // Validate input\n const validatedInput = this.validate(credentials, loginRequestSchema);\n\n const response = await this.http.post('auth/login', {\n json: validatedInput,\n });\n\n // Extract Set-Cookie headers for Server Actions\n const cookies = response.headers.getSetCookie();\n\n const data = await response.json();\n const authResponse = this.validate(data, authResponseSchema);\n\n return {\n user: authResponse.user,\n cookies,\n };\n }\n\n /**\n * Logout the current user\n * Clears the session cookie\n * @returns Array of Set-Cookie headers (typically clearing cookies)\n */\n async logout(): Promise<string[]> {\n const response = await this.http.post('auth/logout');\n return response.headers.getSetCookie();\n }\n\n /**\n * Get current authenticated user\n * Requires a valid session cookie\n * @returns User information\n */\n async getCurrentUser(): Promise<User> {\n const data = await this.http.get('auth/me').json();\n return this.validate(data, userSchema);\n }\n\n /**\n * Get the details of a pending invitation by its token (public endpoint)\n * Used by the accept-invitation page before the user has an account\n * @param token - Invitation token\n * @returns Invitation info (email, role, status, expiry)\n */\n async getInvitation(token: string): Promise<InvitationInfo> {\n const data = await this.http.get(`auth/invitation/${token}`).json();\n return this.validate(data, invitationInfoSchema);\n }\n\n /**\n * Accept a pending invitation, creating the user account and logging in\n * @param input - Invitation token and the new account's password\n * @returns LoginResult with user information and session cookies\n */\n async acceptInvitation(input: AcceptInvitation): Promise<LoginResult> {\n const validatedInput = this.validate(input, acceptInvitationSchema);\n\n const response = await this.http.post('auth/accept-invitation', {\n json: validatedInput,\n });\n\n const cookies = response.headers.getSetCookie();\n\n const data = await response.json();\n const authResponse = this.validate(data, authResponseSchema);\n\n return {\n user: authResponse.user,\n cookies,\n };\n }\n}\n","import {\n eventDetailSchema,\n eventSchema,\n paginatedResponseSchema,\n} from '../schemas/index.js';\nimport type {\n Event,\n EventDetail,\n ListEventsOptions,\n PaginatedResponse,\n} from '../types/index.js';\nimport { BaseResource } from './base.js';\n\n/**\n * Events API resource\n */\nexport class EventsResource extends BaseResource {\n /**\n * List events for an issue with pagination\n */\n async list(\n projectId: number,\n issueId: string,\n options?: ListEventsOptions,\n ): Promise<PaginatedResponse<Event>> {\n const searchParams: Record<string, string> = {};\n\n if (options?.order) {\n searchParams.order = options.order;\n }\n if (options?.cursor) {\n searchParams.cursor = options.cursor;\n }\n\n const data = await this.http\n .get(`api/projects/${projectId}/issues/${issueId}/events`, {\n searchParams,\n })\n .json();\n\n return this.validate(data, paginatedResponseSchema(eventSchema));\n }\n\n /**\n * Get a single event by ID with full details\n */\n async get(\n projectId: number,\n issueId: string,\n eventId: string,\n ): Promise<EventDetail> {\n const data = await this.http\n .get(`api/projects/${projectId}/issues/${issueId}/events/${eventId}`)\n .json();\n\n return this.validate(data, eventDetailSchema);\n }\n}\n","import { z } from 'zod';\n\nexport const serverVersionSchema = z.object({\n version: z.string(),\n});\n\nexport type ServerVersion = z.infer<typeof serverVersionSchema>;\n","import type { ServerVersion } from '../schemas/version.js';\nimport { serverVersionSchema } from '../schemas/version.js';\nimport { BaseResource } from './base.js';\n\nexport class HealthResource extends BaseResource {\n async getVersion(): Promise<ServerVersion> {\n const data = await this.http.get('health/version').json();\n return this.validate(data, serverVersionSchema);\n }\n}\n","import { createInvitationSchema, invitationSchema } from '../schemas/index.js';\nimport type { CreateInvitation, Invitation } from '../types/index.js';\nimport { BaseResource } from './base.js';\n\n/**\n * Invitations API resource\n * Manages pending user invitations (admin only).\n */\nexport class InvitationsResource extends BaseResource {\n /**\n * Create a new invitation\n * @param input - Email and global role for the invited user\n */\n async create(input: CreateInvitation): Promise<Invitation> {\n const validatedInput = this.validate(input, createInvitationSchema);\n const data = await this.http\n .post('api/invitations', { json: validatedInput })\n .json();\n return this.validate(data, invitationSchema);\n }\n\n /**\n * List all invitations\n */\n async list(): Promise<Invitation[]> {\n const data = await this.http.get('api/invitations').json();\n return this.validate(data, invitationSchema.array());\n }\n\n /**\n * Revoke a pending invitation\n * @param token - Invitation token to revoke\n */\n async revoke(token: string): Promise<void> {\n await this.http.delete(`api/invitations/${token}`);\n }\n}\n","import { z } from 'zod';\nimport {\n activityEntrySchema,\n bulkDeleteIssuesSchema,\n bulkUpdateIssuesSchema,\n createCommentSchema,\n createUserReportSchema,\n issueAggregatesSchema,\n issueHashSchema,\n issueSchema,\n issueStatsSchema,\n issueTagValueSchema,\n offsetPaginatedResponseSchema,\n updateIssueStateSchema,\n userReportSchema,\n} from '../schemas/index.js';\nimport type {\n ActivityEntry,\n BulkDeleteIssues,\n BulkUpdateIssues,\n CreateComment,\n CreateUserReport,\n Issue,\n IssueAggregates,\n IssueHash,\n IssueStats,\n IssueStatsWindow,\n IssueTagValue,\n ListIssuesOptions,\n OffsetPaginatedResponse,\n UpdateIssueState,\n UserReport,\n} from '../types/index.js';\nimport { BaseResource } from './base.js';\n\n/**\n * Issues API resource\n */\nexport class IssuesResource extends BaseResource {\n /**\n * List issues for a project with offset-based pagination\n */\n async list(\n projectId: number,\n options?: ListIssuesOptions,\n ): Promise<OffsetPaginatedResponse<Issue>> {\n const searchParams: Record<string, string> = {};\n\n if (options?.page !== undefined) {\n searchParams.page = options.page.toString();\n }\n if (options?.per_page !== undefined) {\n searchParams.per_page = options.per_page.toString();\n }\n if (options?.sort) {\n searchParams.sort = options.sort;\n }\n if (options?.order) {\n searchParams.order = options.order;\n }\n if (options?.filter) {\n searchParams.filter = options.filter;\n }\n if (options?.q) {\n searchParams.q = options.q;\n }\n\n const data = await this.http\n .get(`api/projects/${projectId}/issues`, { searchParams })\n .json();\n\n return this.validate(data, offsetPaginatedResponseSchema(issueSchema));\n }\n\n /**\n * Get a single issue by ID\n */\n async get(projectId: number, issueId: string): Promise<Issue> {\n const data = await this.http\n .get(`api/projects/${projectId}/issues/${issueId}`)\n .json();\n\n return this.validate(data, issueSchema);\n }\n\n /**\n * Update issue state (status, substatus, priority, assignment, …)\n */\n async updateState(\n projectId: number,\n issueId: string,\n input: UpdateIssueState,\n ): Promise<Issue> {\n const validatedInput = this.validate(input, updateIssueStateSchema);\n\n const data = await this.http\n .patch(`api/projects/${projectId}/issues/${issueId}`, {\n json: validatedInput,\n })\n .json();\n\n return this.validate(data, issueSchema);\n }\n\n /**\n * Resolve an issue in the next release (suppresses regression until a deploy).\n */\n async resolveInNextRelease(\n projectId: number,\n issueId: string,\n ): Promise<Issue> {\n return this.updateState(projectId, issueId, {\n status: 'resolvedInNextRelease',\n });\n }\n\n /**\n * Delete an issue\n */\n async delete(projectId: number, issueId: string): Promise<void> {\n await this.http.delete(`api/projects/${projectId}/issues/${issueId}`);\n }\n\n /**\n * Bulk-mutate issues (status and/or priority).\n */\n async bulkUpdate(\n projectId: number,\n input: BulkUpdateIssues,\n ): Promise<{ updated: number }> {\n const validatedInput = this.validate(input, bulkUpdateIssuesSchema);\n const data = await this.http\n .put(`api/projects/${projectId}/issues`, { json: validatedInput })\n .json();\n return this.validate(data, z.object({ updated: z.number().int() }));\n }\n\n /**\n * Bulk-delete issues.\n */\n async bulkDelete(\n projectId: number,\n input: BulkDeleteIssues,\n ): Promise<{ deleted: number }> {\n const validatedInput = this.validate(input, bulkDeleteIssuesSchema);\n const data = await this.http\n .delete(`api/projects/${projectId}/issues`, { json: validatedInput })\n .json();\n return this.validate(data, z.object({ deleted: z.number().int() }));\n }\n\n /**\n * List the grouping hashes that map to an issue.\n */\n async getHashes(projectId: number, issueId: string): Promise<IssueHash[]> {\n const data = await this.http\n .get(`api/projects/${projectId}/issues/${issueId}/hashes`)\n .json();\n return this.validate(data, z.array(issueHashSchema));\n }\n\n /**\n * List the distinct values (with counts) for a tag key across the issue.\n * Returns a bare list, one entry per value (Sentry-compatible shape).\n */\n async getTagValues(\n projectId: number,\n issueId: string,\n key: string,\n ): Promise<IssueTagValue[]> {\n const data = await this.http\n .get(\n `api/projects/${projectId}/issues/${issueId}/tags/${encodeURIComponent(key)}`,\n )\n .json();\n return this.validate(data, z.array(issueTagValueSchema));\n }\n\n /**\n * Fetch per-issue aggregates (unique user count + top tags).\n */\n async getAggregates(\n projectId: number,\n issueId: string,\n ): Promise<IssueAggregates> {\n const data = await this.http\n .get(`api/projects/${projectId}/issues/${issueId}/aggregates`)\n .json();\n return this.validate(data, issueAggregatesSchema);\n }\n\n /**\n * Fetch a zero-filled event-count timeseries (24h or 30d).\n */\n async getStats(\n projectId: number,\n issueId: string,\n window: IssueStatsWindow = '24h',\n ): Promise<IssueStats> {\n const data = await this.http\n .get(`api/projects/${projectId}/issues/${issueId}/stats`, {\n searchParams: { window },\n })\n .json();\n return this.validate(data, issueStatsSchema);\n }\n\n /**\n * List an issue's activity log (status changes, comments/notes, …).\n */\n async getActivity(\n projectId: number,\n issueId: string,\n ): Promise<ActivityEntry[]> {\n const data = await this.http\n .get(`api/projects/${projectId}/issues/${issueId}/activity`)\n .json();\n return this.validate(data, z.array(activityEntrySchema));\n }\n\n /**\n * Add a comment (note) to an issue.\n */\n async addComment(\n projectId: number,\n issueId: string,\n input: CreateComment,\n ): Promise<ActivityEntry> {\n const validatedInput = this.validate(input, createCommentSchema);\n const data = await this.http\n .post(`api/projects/${projectId}/issues/${issueId}/comments`, {\n json: validatedInput,\n })\n .json();\n return this.validate(data, activityEntrySchema);\n }\n\n /**\n * Set or clear the current user's bookmark on an issue.\n */\n async setBookmark(\n projectId: number,\n issueId: string,\n enabled: boolean,\n ): Promise<{ is_bookmarked: boolean }> {\n const data = await this.http\n .put(`api/projects/${projectId}/issues/${issueId}/bookmark`, {\n json: { enabled },\n })\n .json();\n return this.validate(data, z.object({ is_bookmarked: z.boolean() }));\n }\n\n /**\n * Set or clear the current user's subscription to an issue.\n */\n async setSubscription(\n projectId: number,\n issueId: string,\n enabled: boolean,\n ): Promise<{ is_subscribed: boolean }> {\n const data = await this.http\n .put(`api/projects/${projectId}/issues/${issueId}/subscription`, {\n json: { enabled },\n })\n .json();\n return this.validate(data, z.object({ is_subscribed: z.boolean() }));\n }\n\n /**\n * Mark the issue as seen by the current user.\n */\n async markSeen(\n projectId: number,\n issueId: string,\n ): Promise<{ has_seen: boolean }> {\n const data = await this.http\n .post(`api/projects/${projectId}/issues/${issueId}/seen`)\n .json();\n return this.validate(data, z.object({ has_seen: z.boolean() }));\n }\n\n /**\n * List user feedback reports for an issue.\n */\n async listUserReports(\n projectId: number,\n issueId: string,\n ): Promise<UserReport[]> {\n const data = await this.http\n .get(`api/projects/${projectId}/issues/${issueId}/user-reports`)\n .json();\n return this.validate(data, z.array(userReportSchema));\n }\n\n /**\n * Attach a user feedback report to an issue.\n */\n async createUserReport(\n projectId: number,\n issueId: string,\n input: CreateUserReport,\n ): Promise<UserReport> {\n const validatedInput = this.validate(input, createUserReportSchema);\n const data = await this.http\n .post(`api/projects/${projectId}/issues/${issueId}/user-reports`, {\n json: validatedInput,\n })\n .json();\n return this.validate(data, userReportSchema);\n }\n}\n","import { logSchema, offsetPaginatedResponseSchema } from '../schemas/index.js';\nimport type {\n ListLogsOptions,\n Log,\n OffsetPaginatedResponse,\n} from '../types/index.js';\nimport { BaseResource } from './base.js';\n\n/**\n * Logs API resource (standalone logs — Sentry \"log\" item type)\n */\nexport class LogsResource extends BaseResource {\n /**\n * List logs for a project with offset-based pagination (newest first by log\n * timestamp), optionally filtered by level/trace_id.\n */\n async list(\n projectId: number,\n options?: ListLogsOptions,\n ): Promise<OffsetPaginatedResponse<Log>> {\n const searchParams: Record<string, string> = {};\n\n if (options?.page) {\n searchParams.page = String(options.page);\n }\n if (options?.per_page) {\n searchParams.per_page = String(options.per_page);\n }\n if (options?.level) {\n searchParams.level = options.level;\n }\n if (options?.trace_id) {\n searchParams.trace_id = options.trace_id;\n }\n\n const data = await this.http\n .get(`api/projects/${projectId}/logs`, { searchParams })\n .json();\n\n return this.validate(data, offsetPaginatedResponseSchema(logSchema));\n }\n}\n","import {\n projectMemberSchema,\n upsertProjectMemberSchema,\n} from '../schemas/index.js';\nimport type { ProjectMember, UpsertProjectMember } from '../types/index.js';\nimport { BaseResource } from './base.js';\n\n/**\n * Project Members API resource\n * Manages per-project membership and roles.\n */\nexport class MembersResource extends BaseResource {\n /**\n * List members of a project\n * @param projectId - ID of the project\n */\n async list(projectId: number): Promise<ProjectMember[]> {\n const data = await this.http\n .get(`api/projects/${projectId}/members`)\n .json();\n return this.validate(data, projectMemberSchema.array());\n }\n\n /**\n * Add or update a project member\n * @param projectId - ID of the project\n * @param input - User ID and per-project role\n */\n async upsert(projectId: number, input: UpsertProjectMember): Promise<void> {\n const validatedInput = this.validate(input, upsertProjectMemberSchema);\n await this.http.put(`api/projects/${projectId}/members`, {\n json: validatedInput,\n });\n }\n\n /**\n * Remove a member from a project\n * @param projectId - ID of the project\n * @param userId - ID of the user to remove\n */\n async remove(projectId: number, userId: number): Promise<void> {\n await this.http.delete(`api/projects/${projectId}/members/${userId}`);\n }\n}\n","import {\n createProjectSchema,\n offsetPaginatedResponseSchema,\n projectSchema,\n updateProjectSchema,\n} from '../schemas/index.js';\nimport type {\n CreateProject,\n ListProjectsOptions,\n OffsetPaginatedResponse,\n Project,\n UpdateProject,\n} from '../types/index.js';\nimport { BaseResource } from './base.js';\n\n/**\n * Projects API resource\n */\nexport class ProjectsResource extends BaseResource {\n /**\n * List projects with pagination\n */\n async list(\n options?: ListProjectsOptions,\n ): Promise<OffsetPaginatedResponse<Project>> {\n const searchParams = new URLSearchParams();\n\n if (options?.page !== undefined) {\n searchParams.set('page', options.page.toString());\n }\n if (options?.per_page !== undefined) {\n searchParams.set('per_page', options.per_page.toString());\n }\n if (options?.order) {\n searchParams.set('order', options.order);\n }\n\n const query = searchParams.toString();\n const url = query ? `api/projects?${query}` : 'api/projects';\n\n const data = await this.http.get(url).json();\n return this.validate(data, offsetPaginatedResponseSchema(projectSchema));\n }\n\n /**\n * Get a single project by ID\n */\n async get(id: number): Promise<Project> {\n const data = await this.http.get(`api/projects/${id}`).json();\n return this.validate(data, projectSchema);\n }\n\n /**\n * Create a new project\n */\n async create(input: CreateProject): Promise<Project> {\n // Validate input\n const validatedInput = this.validate(input, createProjectSchema);\n\n const data = await this.http\n .post('api/projects', { json: validatedInput })\n .json();\n\n return this.validate(data, projectSchema);\n }\n\n /**\n * Update an existing project\n */\n async update(id: number, input: UpdateProject): Promise<Project> {\n // Validate input\n const validatedInput = this.validate(input, updateProjectSchema);\n\n const data = await this.http\n .patch(`api/projects/${id}`, { json: validatedInput })\n .json();\n\n return this.validate(data, projectSchema);\n }\n\n /**\n * Delete a project\n */\n async delete(id: number): Promise<void> {\n await this.http.delete(`api/projects/${id}`);\n }\n}\n","import { z } from 'zod';\nimport { issueSchema } from '../schemas/index.js';\nimport type { Issue } from '../types/index.js';\nimport { BaseResource } from './base.js';\n\n/**\n * Releases API resource — data scoped to a specific release.\n */\nexport class ReleasesResource extends BaseResource {\n /**\n * Get issues first seen in a given release, most recently introduced first.\n *\n * @param projectId - Project ID\n * @param release - Release version\n * @param limit - Max issues to return (default: 10, max: 50)\n */\n async newIssues(\n projectId: number,\n release: string,\n limit?: number,\n ): Promise<Issue[]> {\n const searchParams: Record<string, string> = {};\n if (limit !== undefined) {\n searchParams.limit = limit.toString();\n }\n\n const data = await this.http\n .get(\n `api/projects/${projectId}/releases/${encodeURIComponent(release)}/new-issues`,\n { searchParams },\n )\n .json();\n\n return this.validate(data, z.array(issueSchema));\n }\n}\n","import { offsetPaginatedResponseSchema } from '../schemas/common.js';\nimport {\n releaseHealthRowSchema,\n sessionSummarySchema,\n sessionTimeseriesSchema,\n} from '../schemas/session.js';\nimport type {\n OffsetPaginatedResponse,\n ReleaseHealthStatsOptions,\n} from '../types/common.js';\nimport type {\n ReleaseHealthRow,\n SessionSummary,\n SessionTimeseries,\n} from '../types/session.js';\nimport { BaseResource } from './base.js';\n\n/**\n * Sessions API resource — release health stats.\n */\nexport class SessionsResource extends BaseResource {\n /**\n * Get per-release health stats for a project, one offset-based page of\n * (release, environment) rows at a time, ordered by session volume.\n * @param projectId - Project ID\n * @param options - Time window, release scoping and pagination.\n */\n async stats(\n projectId: number,\n options?: ReleaseHealthStatsOptions,\n ): Promise<OffsetPaginatedResponse<ReleaseHealthRow>> {\n const searchParams: Record<string, string> = {};\n if (options?.period) {\n searchParams.period = options.period;\n }\n if (options?.release) {\n searchParams.release = options.release;\n }\n if (options?.page) {\n searchParams.page = String(options.page);\n }\n if (options?.per_page) {\n searchParams.per_page = String(options.per_page);\n }\n\n const data = await this.http\n .get(`api/projects/${projectId}/sessions/stats`, { searchParams })\n .json();\n\n return this.validate(\n data,\n offsetPaginatedResponseSchema(releaseHealthRowSchema),\n );\n }\n\n /**\n * Get project-wide session health, aggregated across all releases and environments.\n * @param projectId - Project ID\n * @param period - Time window (e.g. '24h', '7d'). Defaults to '24h'.\n */\n async summary(projectId: number, period?: string): Promise<SessionSummary> {\n const searchParams: Record<string, string> = {};\n if (period) {\n searchParams.period = period;\n }\n\n const data = await this.http\n .get(`api/projects/${projectId}/sessions/summary`, { searchParams })\n .json();\n\n return this.validate(data, sessionSummarySchema);\n }\n\n /**\n * Get a time-bucketed session trend for a project, aggregated across all\n * releases and environments.\n * @param projectId - Project ID\n * @param period - Time window (e.g. '24h', '7d'). Defaults to '24h'.\n * @param interval - Bucket width in hours (default: 1, max: 24).\n */\n async timeseries(\n projectId: number,\n period?: string,\n interval?: number,\n ): Promise<SessionTimeseries> {\n const searchParams: Record<string, string> = {};\n if (period) {\n searchParams.period = period;\n }\n if (interval !== undefined) {\n searchParams.interval = interval.toString();\n }\n\n const data = await this.http\n .get(`api/projects/${projectId}/sessions/timeseries`, { searchParams })\n .json();\n\n return this.validate(data, sessionTimeseriesSchema);\n }\n}\n","import {\n assembleResponseSchema,\n chunkUploadCapabilitySchema,\n listSourceMapsResponseSchema,\n} from '../schemas/sourcemap.js';\nimport type {\n AssembleInput,\n AssembleResponse,\n ChunkUploadCapability,\n ListSourceMapsResponse,\n} from '../types/sourcemap.js';\nimport { BaseResource } from './base.js';\n\n/**\n * Source Maps API resource\n *\n * Implements the sentry-cli artifact bundle protocol for source map upload\n * and the project source map listing endpoint.\n */\nexport class SourceMapsResource extends BaseResource {\n /**\n * Get chunk upload capabilities for an organization.\n * Returns the upload URL, chunk size limits, and accepted artifact types.\n */\n async getChunkUploadCapability(\n orgSlug: string,\n ): Promise<ChunkUploadCapability> {\n const data = await this.http\n .get(`api/0/organizations/${orgSlug}/chunk-upload/`)\n .json();\n return this.validate(data, chunkUploadCapabilitySchema);\n }\n\n /**\n * Upload chunks as multipart/form-data, batching by `chunksPerRequest` (default 64).\n * Each part's field name must be the pre-computed SHA-1 hash of its content — the server\n * rejects mismatches with 400. Callers must supply the hash (also needed for assembleBundle).\n */\n async uploadChunks(\n orgSlug: string,\n chunks: { hash: string; data: Blob }[],\n chunksPerRequest = 64,\n ): Promise<void> {\n if (!Number.isInteger(chunksPerRequest) || chunksPerRequest <= 0) {\n throw new Error('chunksPerRequest must be a positive integer');\n }\n for (let i = 0; i < chunks.length; i += chunksPerRequest) {\n const batch = chunks.slice(i, i + chunksPerRequest);\n const form = new FormData();\n for (const chunk of batch) {\n form.append(chunk.hash, chunk.data);\n }\n await this.http.post(`api/0/organizations/${orgSlug}/chunk-upload/`, {\n body: form,\n });\n }\n }\n\n /**\n * Trigger assembly of a previously uploaded artifact bundle.\n *\n * @returns The assembly state. Poll until `state === \"ok\"` or `state === \"error\"`.\n * When `state === \"not_found\"` the `missingChunks` array lists what\n * still needs uploading via `uploadChunks`.\n */\n async assembleBundle(\n orgSlug: string,\n input: AssembleInput,\n ): Promise<AssembleResponse> {\n const data = await this.http\n .post(`api/0/organizations/${orgSlug}/artifactbundle/assemble/`, {\n json: input,\n })\n .json();\n return this.validate(data, assembleResponseSchema);\n }\n\n /**\n * List all source map files uploaded for a project.\n */\n async list(\n orgSlug: string,\n projectSlug: string,\n ): Promise<ListSourceMapsResponse> {\n const data = await this.http\n .get(`api/0/projects/${orgSlug}/${projectSlug}/files/source-maps/`)\n .json();\n return this.validate(data, listSourceMapsResponseSchema);\n }\n}\n","import { offsetPaginatedResponseSchema, spanSchema } from '../schemas/index.js';\nimport type {\n ListSpansOptions,\n OffsetPaginatedResponse,\n Span,\n} from '../types/index.js';\nimport { BaseResource } from './base.js';\n\n/**\n * Spans API resource — the shared `spans` table (standalone \"span\" envelope\n * items AND transaction-embedded spans both live here and share this\n * response shape).\n */\nexport class SpansResource extends BaseResource {\n /**\n * List spans for a project with offset-based pagination (newest first),\n * optionally filtered by op/status/trace_id/operation_type.\n */\n async list(\n projectId: number,\n options?: ListSpansOptions,\n ): Promise<OffsetPaginatedResponse<Span>> {\n const searchParams: Record<string, string> = {};\n\n if (options?.page) {\n searchParams.page = String(options.page);\n }\n if (options?.per_page) {\n searchParams.per_page = String(options.per_page);\n }\n if (options?.op) {\n searchParams.op = options.op;\n }\n if (options?.status) {\n searchParams.status = options.status;\n }\n if (options?.trace_id) {\n searchParams.trace_id = options.trace_id;\n }\n if (options?.operation_type) {\n searchParams.operation_type = options.operation_type;\n }\n\n const data = await this.http\n .get(`api/projects/${projectId}/spans`, { searchParams })\n .json();\n\n return this.validate(data, offsetPaginatedResponseSchema(spanSchema));\n }\n}\n","import {\n eventTimeseriesSchema,\n projectStatsSummarySchema,\n} from '../schemas/stats.js';\nimport type { EventTimeseries, ProjectStatsSummary } from '../types/stats.js';\nimport { BaseResource } from './base.js';\n\n/**\n * Stats API resource — project-wide aggregates for the overview dashboard.\n *\n * Distinct from {@link SessionsResource}, which reports release health from\n * SDK session data. Everything here is derived from ingested error events and\n * issues.\n */\nexport class StatsResource extends BaseResource {\n /**\n * Get time-bucketed error-event volume for a project, split by severity.\n *\n * Buckets are zero-filled across the window, so a quiet hour comes back as a\n * point with `total: 0` rather than being absent. All-time requests (no\n * `period`) are sparse: there is no lower bound to fill from.\n *\n * @param projectId - Project ID\n * @param period - Time window (e.g. '24h', '7d'). Omit for all time.\n * @param interval - Bucket width in hours (default: 1, max: 24).\n */\n async timeseries(\n projectId: number,\n period?: string,\n interval?: number,\n ): Promise<EventTimeseries> {\n const searchParams: Record<string, string> = {};\n if (period) {\n searchParams.period = period;\n }\n if (interval !== undefined) {\n searchParams.interval = interval.toString();\n }\n\n const data = await this.http\n .get(`api/projects/${projectId}/events/stats`, { searchParams })\n .json();\n\n return this.validate(data, eventTimeseriesSchema);\n }\n\n /**\n * Get project-wide counters for a window, each paired with the same counter\n * over the window immediately before it.\n *\n * @param projectId - Project ID\n * @param period - Time window (e.g. '24h', '7d'). Omit for all time, which\n * leaves every `previous` null.\n */\n async summary(\n projectId: number,\n period?: string,\n ): Promise<ProjectStatsSummary> {\n const searchParams: Record<string, string> = {};\n if (period) {\n searchParams.period = period;\n }\n\n const data = await this.http\n .get(`api/projects/${projectId}/stats/summary`, { searchParams })\n .json();\n\n return this.validate(data, projectStatsSummarySchema);\n }\n}\n","import { z } from 'zod';\nimport {\n cleanupCountsSchema,\n cleanupOptionsSchema,\n projectStorageSchema,\n sourceMapGcResultSchema,\n storageSummarySchema,\n} from '../schemas/index.js';\nimport type {\n CleanupCounts,\n CleanupOptions,\n ProjectStorage,\n SourceMapGcResult,\n StorageSummary,\n} from '../types/index.js';\nimport { BaseResource } from './base.js';\n\n/**\n * Storage API resource (admin only).\n *\n * Surfaces how much data the instance is holding and runs retention cleanups.\n */\nexport class StorageResource extends BaseResource {\n /**\n * Get the instance-wide storage summary: row counts per data category, the\n * whole-DB size, and exact source-map weight.\n */\n async getSummary(): Promise<StorageSummary> {\n const data = await this.http.get('api/storage/summary').json();\n return this.validate(data, storageSummarySchema);\n }\n\n /**\n * Get the per-project storage breakdown (one row per project, including\n * empty ones).\n */\n async getProjects(): Promise<ProjectStorage[]> {\n const data = await this.http.get('api/storage/projects').json();\n return this.validate(data, z.array(projectStorageSchema));\n }\n\n /**\n * Dry-run: count the rows a cleanup would remove. Mutates nothing — use it to\n * confirm impact before {@link executeCleanup}.\n */\n async previewCleanup(options: CleanupOptions): Promise<CleanupCounts> {\n const json = cleanupOptionsSchema.parse(options);\n const data = await this.http\n .post('api/storage/cleanup/preview', { json })\n .json();\n return this.validate(data, cleanupCountsSchema);\n }\n\n /**\n * Execute a cleanup: delete data older than `older_than_days` (optionally\n * scoped to one project) and remove any issue left with zero events.\n */\n async executeCleanup(options: CleanupOptions): Promise<CleanupCounts> {\n const json = cleanupOptionsSchema.parse(options);\n const data = await this.http.post('api/storage/cleanup', { json }).json();\n return this.validate(data, cleanupCountsSchema);\n }\n\n /**\n * Dry-run for {@link gcSourceMaps}: count the orphaned source-map files and\n * bytes a GC would reclaim. Mutates nothing.\n */\n async previewGcSourceMaps(): Promise<SourceMapGcResult> {\n const data = await this.http\n .post('api/storage/source-maps/gc/preview')\n .json();\n return this.validate(data, sourceMapGcResultSchema);\n }\n\n /**\n * Garbage-collect orphaned source maps: files no longer referenced by any\n * upload, removed from the DB and unlinked from disk. Safe — never touches\n * referenced files.\n */\n async gcSourceMaps(): Promise<SourceMapGcResult> {\n const data = await this.http.post('api/storage/source-maps/gc').json();\n return this.validate(data, sourceMapGcResultSchema);\n }\n}\n","import { teamMemberSchema, updateUserRoleSchema } from '../schemas/index.js';\nimport type { GlobalRole, TeamMember } from '../types/index.js';\nimport { BaseResource } from './base.js';\n\n/**\n * Team API resource\n * Manages the global user roster and their global roles (admin only).\n */\nexport class TeamResource extends BaseResource {\n /**\n * List all team members (users)\n */\n async list(): Promise<TeamMember[]> {\n const data = await this.http.get('api/team').json();\n return this.validate(data, teamMemberSchema.array());\n }\n\n /**\n * Change a user's global role\n * @param userId - ID of the user to update\n * @param role - New global role to assign\n */\n async updateRole(userId: number, role: GlobalRole): Promise<void> {\n const body = this.validate({ role }, updateUserRoleSchema);\n await this.http.patch(`api/team/${userId}/role`, { json: body });\n }\n\n /**\n * Permanently remove a user from the instance.\n * @param userId - ID of the user to delete\n */\n async remove(userId: number): Promise<void> {\n await this.http.delete(`api/team/${userId}`);\n }\n}\n","import {\n authTokenCreatedSchema,\n authTokenSchema,\n createAuthTokenSchema,\n} from '../schemas/index.js';\nimport type {\n AuthToken,\n AuthTokenCreated,\n CreateAuthToken,\n} from '../types/index.js';\nimport { BaseResource } from './base.js';\n\n/**\n * Auth Tokens API resource\n */\nexport class TokensResource extends BaseResource {\n /**\n * List all auth tokens (masked)\n */\n async list(): Promise<AuthToken[]> {\n const data = await this.http.get('api/tokens').json();\n return this.validate(data, authTokenSchema.array());\n }\n\n /**\n * Get a single auth token by ID (full token value).\n *\n * Previously returned a masked version, but the server now returns the\n * complete token for GET /api/tokens/{id}.\n */\n async get(id: number): Promise<AuthTokenCreated> {\n const data = await this.http.get(`api/tokens/${id}`).json();\n return this.validate(data, authTokenCreatedSchema);\n }\n\n /**\n * Create a new auth token\n * Note: The full token is only returned once during creation\n */\n async create(input: CreateAuthToken): Promise<AuthTokenCreated> {\n // Validate input\n const validatedInput = this.validate(input, createAuthTokenSchema);\n\n const data = await this.http\n .post('api/tokens', { json: validatedInput })\n .json();\n\n return this.validate(data, authTokenCreatedSchema);\n }\n\n /**\n * Delete an auth token\n */\n async delete(id: number): Promise<void> {\n await this.http.delete(`api/tokens/${id}`);\n }\n}\n","import { z } from 'zod';\nimport {\n offsetPaginatedResponseSchema,\n spanSchema,\n transactionDetailSchema,\n transactionSchema,\n transactionStatsSchema,\n} from '../schemas/index.js';\nimport type {\n ListTransactionsOptions,\n OffsetPaginatedResponse,\n Span,\n Transaction,\n TransactionDetail,\n TransactionStats,\n} from '../types/index.js';\nimport { BaseResource } from './base.js';\n\n/**\n * Transactions API resource\n */\nexport class TransactionsResource extends BaseResource {\n /**\n * List transactions for a project with offset-based pagination (newest first)\n */\n async list(\n projectId: number,\n options?: ListTransactionsOptions,\n ): Promise<OffsetPaginatedResponse<Transaction>> {\n const searchParams: Record<string, string> = {};\n\n if (options?.page) {\n searchParams.page = String(options.page);\n }\n if (options?.per_page) {\n searchParams.per_page = String(options.per_page);\n }\n if (options?.name) {\n searchParams.name = options.name;\n }\n if (options?.op) {\n searchParams.op = options.op;\n }\n if (options?.status) {\n searchParams.status = options.status;\n }\n if (options?.environment) {\n searchParams.environment = options.environment;\n }\n if (options?.release) {\n searchParams.release = options.release;\n }\n\n const data = await this.http\n .get(`api/projects/${projectId}/transactions`, {\n searchParams,\n })\n .json();\n\n return this.validate(\n data,\n offsetPaginatedResponseSchema(transactionSchema),\n );\n }\n\n /**\n * Get the indexed spans extracted from a transaction, in waterfall order.\n */\n async getSpans(projectId: number, transactionId: string): Promise<Span[]> {\n const data = await this.http\n .get(`api/projects/${projectId}/transactions/${transactionId}/spans`)\n .json();\n\n return this.validate(data, z.array(spanSchema));\n }\n\n /**\n * Get aggregate performance stats (count, p50/p95/p99 latency, failure rate)\n * grouped by transaction name + op, most frequent first, with offset-based\n * pagination — same shape as the other list endpoints.\n */\n async getStats(\n projectId: number,\n options?: { page?: number; per_page?: number },\n ): Promise<OffsetPaginatedResponse<TransactionStats>> {\n const searchParams: Record<string, string> = {};\n if (options?.page) {\n searchParams.page = String(options.page);\n }\n if (options?.per_page) {\n searchParams.per_page = String(options.per_page);\n }\n\n const data = await this.http\n .get(`api/projects/${projectId}/transactions/stats`, { searchParams })\n .json();\n\n return this.validate(\n data,\n offsetPaginatedResponseSchema(transactionStatsSchema),\n );\n }\n\n /**\n * Get aggregate stats for a single (transaction name, op) group — a direct\n * lookup that works regardless of how many groups the project has. Throws\n * NotFoundError when the group has no transactions.\n */\n async getStatForGroup(\n projectId: number,\n name: string,\n op?: string,\n ): Promise<TransactionStats> {\n const searchParams: Record<string, string> = { name };\n if (op) {\n searchParams.op = op;\n }\n\n const data = await this.http\n .get(`api/projects/${projectId}/transactions/stats/group`, {\n searchParams,\n })\n .json();\n\n return this.validate(data, transactionStatsSchema);\n }\n\n /**\n * Get a single transaction by ID with its full Sentry payload (spans,\n * contexts.trace, measurements, tags) for the performance detail view.\n */\n async get(\n projectId: number,\n transactionId: string,\n ): Promise<TransactionDetail> {\n const data = await this.http\n .get(`api/projects/${projectId}/transactions/${transactionId}`)\n .json();\n\n return this.validate(data, transactionDetailSchema);\n }\n}\n","import ky, { type HTTPError, isHTTPError, type KyInstance } from 'ky';\nimport type { ClientConfig } from '../config.js';\nimport {\n AuthenticationError,\n AuthorizationError,\n BadRequestError,\n NetworkError,\n NotFoundError,\n RateLimitError,\n RustrakError,\n ServerError,\n} from '../errors/index.js';\n\nfunction transformHttpError(error: HTTPError): RustrakError {\n const { response } = error;\n const status = response.status;\n\n let errorMessage = `HTTP ${status} error`;\n const body = error.data as { error?: string; message?: string } | null;\n if (body) {\n errorMessage = body.error || body.message || errorMessage;\n }\n\n switch (status) {\n case 400:\n return new BadRequestError(errorMessage);\n case 401:\n return new AuthenticationError(errorMessage);\n case 403:\n return new AuthorizationError(errorMessage);\n case 404:\n return new NotFoundError(errorMessage);\n case 429: {\n const retryAfter = response.headers.get('Retry-After');\n return new RateLimitError(errorMessage, retryAfter ?? undefined);\n }\n case 500:\n case 502:\n case 503:\n case 504:\n return new ServerError(errorMessage, status);\n default:\n return new RustrakError(errorMessage, { statusCode: status });\n }\n}\n\nexport function createKyInstance(config: ClientConfig): KyInstance {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n ...config.headers,\n };\n\n if (config.token) {\n headers.Authorization = `Bearer ${config.token}`;\n }\n\n return ky.create({\n prefix: config.baseUrl,\n timeout: config.timeout ?? 30000,\n credentials: 'include',\n retry: {\n limit: config.maxRetries ?? 2,\n statusCodes: [408, 500, 502, 503, 504],\n methods: ['get', 'post', 'put', 'patch', 'delete'],\n },\n headers,\n hooks: {\n beforeError: [\n ({ error }) => {\n if (error.name === 'TimeoutError') {\n throw new NetworkError('Request timed out', error);\n }\n\n if (isHTTPError(error)) {\n throw transformHttpError(error);\n }\n\n throw new NetworkError(error.message, error);\n },\n ],\n },\n });\n}\n","import type { KyInstance } from 'ky';\nimport type { ClientConfig } from './config.js';\nimport {\n AgentsResource,\n AlertIntegrationsResource,\n AlertRulesResource,\n AuthResource,\n EventsResource,\n HealthResource,\n InvitationsResource,\n IssuesResource,\n LogsResource,\n MembersResource,\n ProjectsResource,\n ReleasesResource,\n SessionsResource,\n SourceMapsResource,\n SpansResource,\n StatsResource,\n StorageResource,\n TeamResource,\n TokensResource,\n TransactionsResource,\n} from './resources/index.js';\nimport { createKyInstance } from './utils/index.js';\n\n/**\n * Main Rustrak API client\n *\n * @example\n * ```typescript\n * const client = new RustrakClient({\n * baseUrl: 'http://localhost:8080',\n * token: 'your-api-token'\n * });\n *\n * // List all projects\n * const projects = await client.projects.list();\n *\n * // Get issues for a project\n * const issues = await client.issues.list(1);\n *\n * // Get events for an issue\n * const events = await client.events.list(1, 'issue-uuid');\n * ```\n */\nexport class RustrakClient {\n private readonly http: KyInstance;\n\n /**\n * Authentication API resource\n */\n public readonly auth: AuthResource;\n\n /**\n * Projects API resource\n */\n public readonly projects: ProjectsResource;\n\n /**\n * Issues API resource\n */\n public readonly issues: IssuesResource;\n\n /**\n * Events API resource\n */\n public readonly events: EventsResource;\n\n /**\n * Auth Tokens API resource\n */\n public readonly tokens: TokensResource;\n\n /**\n * Alert Integrations API resource (global credential destinations)\n */\n public readonly alertIntegrations: AlertIntegrationsResource;\n\n /**\n * Alert Rules API resource (per-project alert configuration)\n */\n public readonly alertRules: AlertRulesResource;\n\n /**\n * Source Maps API resource (sentry-cli artifact bundle upload protocol)\n */\n public readonly sourceMaps: SourceMapsResource;\n\n /**\n * Team API resource (global user roster and roles)\n */\n public readonly team: TeamResource;\n\n /**\n * Invitations API resource (pending user invitations)\n */\n public readonly invitations: InvitationsResource;\n\n /**\n * Project Members API resource (per-project membership and roles)\n */\n public readonly members: MembersResource;\n\n /**\n * Sessions API resource (release health)\n */\n public readonly sessions: SessionsResource;\n\n /**\n * Releases API resource (data scoped to a specific release)\n */\n public readonly releases: ReleasesResource;\n\n /**\n * Transactions API resource (performance monitoring)\n */\n public readonly transactions: TransactionsResource;\n\n /**\n * Logs API resource (standalone logs)\n */\n public readonly logs: LogsResource;\n\n /**\n * Spans API resource (standalone + transaction-embedded spans, shared table)\n */\n public readonly spans: SpansResource;\n\n /**\n * AI Agent Monitoring dashboard API resource\n */\n public readonly agents: AgentsResource;\n\n /**\n * Stats API resource (project-wide overview aggregates)\n */\n public readonly stats: StatsResource;\n\n /**\n * Storage API resource (usage + retention cleanup, admin only)\n */\n public readonly storage: StorageResource;\n\n /**\n * Health API resource (version info)\n */\n public readonly health: HealthResource;\n\n /**\n * Create a new Rustrak API client\n *\n * @param config - Client configuration\n */\n constructor(config: ClientConfig) {\n this.http = createKyInstance(config);\n\n // Initialize resources\n this.auth = new AuthResource(this.http);\n this.projects = new ProjectsResource(this.http);\n this.issues = new IssuesResource(this.http);\n this.events = new EventsResource(this.http);\n this.tokens = new TokensResource(this.http);\n this.alertIntegrations = new AlertIntegrationsResource(this.http);\n this.alertRules = new AlertRulesResource(this.http);\n this.sourceMaps = new SourceMapsResource(this.http);\n this.team = new TeamResource(this.http);\n this.invitations = new InvitationsResource(this.http);\n this.members = new MembersResource(this.http);\n this.sessions = new SessionsResource(this.http);\n this.releases = new ReleasesResource(this.http);\n this.transactions = new TransactionsResource(this.http);\n this.logs = new LogsResource(this.http);\n this.spans = new SpansResource(this.http);\n this.agents = new AgentsResource(this.http);\n this.stats = new StatsResource(this.http);\n this.storage = new StorageResource(this.http);\n this.health = new HealthResource(this.http);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/schemas/common.ts","../src/schemas/agent.ts","../src/schemas/alert.ts","../src/schemas/event.ts","../src/schemas/team.ts","../src/schemas/invitation.ts","../src/schemas/issue.ts","../src/schemas/log.ts","../src/schemas/member.ts","../src/schemas/project.ts","../src/schemas/session.ts","../src/schemas/sourcemap.ts","../src/schemas/stats.ts","../src/schemas/storage.ts","../src/schemas/token.ts","../src/schemas/transaction.ts","../src/schemas/user.ts","../src/errors.ts","../src/result.ts","../src/utils/http.ts","../src/resources/base.ts","../src/resources/agents.ts","../src/resources/alert-integrations.ts","../src/resources/alert-rules.ts","../src/resources/auth.ts","../src/resources/events.ts","../src/schemas/version.ts","../src/resources/health.ts","../src/resources/invitations.ts","../src/resources/issues.ts","../src/resources/logs.ts","../src/resources/members.ts","../src/resources/projects.ts","../src/resources/releases.ts","../src/resources/sessions.ts","../src/resources/sourcemaps.ts","../src/resources/spans.ts","../src/resources/stats.ts","../src/resources/storage.ts","../src/resources/team.ts","../src/resources/tokens.ts","../src/resources/transactions.ts","../src/client.ts"],"names":["z","metricDeltaSchema"],"mappings":"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","file":"index.js","sourcesContent":["import { z } from 'zod';\n\n/**\n * Generic paginated response schema (cursor-based)\n */\nexport const paginatedResponseSchema = <T extends z.ZodTypeAny>(\n itemSchema: T,\n) =>\n z.object({\n items: z.array(itemSchema),\n next_cursor: z.string().optional(),\n has_more: z.boolean(),\n });\n\n/**\n * Generic offset-based paginated response schema\n */\nexport const offsetPaginatedResponseSchema = <T extends z.ZodTypeAny>(\n itemSchema: T,\n) =>\n z.object({\n items: z.array(itemSchema),\n total_count: z.number().int(),\n page: z.number().int(),\n per_page: z.number().int(),\n total_pages: z.number().int(),\n });\n\n/**\n * Sort order enum\n */\nexport const sortOrderSchema = z.enum(['asc', 'desc']);\n\n/**\n * Issue sort field enum\n */\nexport const issueSortSchema = z.enum([\n 'digest_order',\n 'last_seen',\n 'event_count',\n]);\n\n/**\n * Issue filter enum\n */\nexport const issueFilterSchema = z.enum(['open', 'resolved', 'muted', 'all']);\n\n/**\n * ISO 8601 datetime string\n */\nexport const dateTimeSchema = z.string().datetime();\n\n/**\n * UUID v4 string (RFC 4122). Use for server-generated ids (row PKs, issue ids)\n * which are always created with `gen_random_uuid()`.\n */\nexport const uuidSchema = z.string().uuid();\n\n/**\n * Sentry event identifier.\n *\n * Sentry event ids are 32 random hex characters — they do NOT carry RFC-4122\n * version/variant bits. The server stores them in a UUID column and returns\n * them in canonical dashed form, but a strict `uuid()` check rejects the many\n * valid ids whose version nibble falls outside 1–8. Accept any hex UUID shape\n * regardless of version/variant so real SDK payloads validate.\n */\nexport const eventIdSchema = z\n .string()\n .regex(\n /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/,\n 'Invalid event id',\n );\n\n/**\n * API error response\n */\nexport const apiErrorSchema = z.object({\n error: z.string(),\n message: z.string().optional(),\n});\n","import { z } from 'zod';\nimport { dateTimeSchema } from './common.js';\n\n/**\n * One time-bucketed value (count or sum) — Agent Runs widget.\n */\nexport const agentTimeseriesPointSchema = z.object({\n bucket: dateTimeSchema,\n value: z.number(),\n});\n\n/**\n * avg/p95 duration for one time bucket — Duration widget.\n */\nexport const agentDurationPointSchema = z.object({\n bucket: dateTimeSchema,\n avg_ms: z.number(),\n p95_ms: z.number(),\n});\n\n/**\n * One row of a \"top N by X\" breakdown (model or tool name).\n */\nexport const genAiBreakdownRowSchema = z.object({\n label: z.string(),\n value: z.number(),\n});\n\n/**\n * One row of the Traces table — per-trace_id aggregate across all AI spans\n * sharing that trace, regardless of origin.\n */\nexport const agentTraceSummarySchema = z.object({\n trace_id: z.string(),\n /** Every distinct agent that ran in this trace, earliest first. */\n agent_names: z.array(z.string()),\n duration_ms: z.number().nullable(),\n total_tokens: z.number(),\n tool_call_count: z.number().int(),\n started_at: dateTimeSchema,\n});\n","import { z } from 'zod';\nimport { dateTimeSchema } from './common.js';\n\n/**\n * Provider type enum (replaces channel_type)\n */\nexport const providerTypeSchema = z.enum(['webhook', 'email', 'slack']);\n\n/** @deprecated Use providerTypeSchema */\nexport const channelTypeSchema = providerTypeSchema;\n\n/**\n * Alert type enum\n */\nexport const alertTypeSchema = z.enum(['new_issue', 'regression', 'unmute']);\n\n/**\n * Alert status enum\n */\nexport const alertStatusSchema = z.enum([\n 'pending',\n 'sent',\n 'failed',\n 'skipped',\n]);\n\n/**\n * Alert integration response schema (global credentials record)\n */\nexport const alertIntegrationSchema = z.object({\n id: z.number().int(),\n name: z.string(),\n provider_type: providerTypeSchema,\n credentials: z.record(z.string(), z.unknown()),\n is_enabled: z.boolean(),\n failure_count: z.number().int(),\n last_failure_at: dateTimeSchema.nullable(),\n last_failure_message: z.string().nullable(),\n last_success_at: dateTimeSchema.nullable(),\n created_at: dateTimeSchema,\n updated_at: dateTimeSchema,\n});\n\n/**\n * Create alert integration request schema\n */\nexport const createAlertIntegrationSchema = z.object({\n name: z.string().min(1),\n provider_type: providerTypeSchema,\n credentials: z.record(z.string(), z.unknown()),\n is_enabled: z.boolean().optional(),\n});\n\n/**\n * Update alert integration request schema\n */\nexport const updateAlertIntegrationSchema = z.object({\n name: z.string().min(1).optional(),\n credentials: z.record(z.string(), z.unknown()).optional(),\n is_enabled: z.boolean().optional(),\n});\n\n/**\n * Per-rule channel routing entry schema\n */\nexport const alertRuleChannelInputSchema = z.object({\n integration_id: z.number().int(),\n routing_override: z.record(z.string(), z.unknown()).default({}),\n});\n\n/**\n * Alert rule response schema\n */\nexport const alertRuleSchema = z.object({\n id: z.number().int(),\n project_id: z.number().int(),\n name: z.string(),\n alert_type: alertTypeSchema,\n is_enabled: z.boolean(),\n conditions: z.record(z.string(), z.unknown()),\n cooldown_minutes: z.number().int(),\n last_triggered_at: dateTimeSchema.nullable(),\n created_at: dateTimeSchema,\n updated_at: dateTimeSchema,\n channels: z.array(alertRuleChannelInputSchema).default([]),\n integration_ids: z.array(z.number().int()),\n});\n\n/**\n * Create alert rule request schema\n */\nexport const createAlertRuleSchema = z.object({\n name: z.string().min(1),\n alert_type: alertTypeSchema,\n channels: z.array(alertRuleChannelInputSchema).default([]),\n is_enabled: z.boolean().optional(),\n conditions: z.record(z.string(), z.unknown()).optional(),\n cooldown_minutes: z.number().int().min(0).optional(),\n});\n\n/**\n * Update alert rule request schema\n */\nexport const updateAlertRuleSchema = z.object({\n name: z.string().min(1).optional(),\n is_enabled: z.boolean().optional(),\n conditions: z.record(z.string(), z.unknown()).optional(),\n cooldown_minutes: z.number().int().min(0).optional(),\n channels: z.array(alertRuleChannelInputSchema).optional(),\n});\n\n/**\n * Alert history entry schema\n */\nexport const alertHistorySchema = z.object({\n id: z.number().int(),\n alert_rule_id: z.number().int().nullable(),\n integration_id: z.number().int().nullable(),\n issue_id: z.string().uuid().nullable(),\n project_id: z.number().int().nullable(),\n alert_type: z.string(),\n channel_type: z.string(),\n channel_name: z.string(),\n status: alertStatusSchema,\n attempt_count: z.number().int(),\n next_retry_at: dateTimeSchema.nullable(),\n error_message: z.string().nullable(),\n http_status_code: z.number().int().nullable(),\n idempotency_key: z.string(),\n created_at: dateTimeSchema,\n sent_at: dateTimeSchema.nullable(),\n});\n\n/**\n * Test channel response schema\n */\nexport const testChannelResponseSchema = z.object({\n success: z.boolean(),\n message: z.string(),\n});\n\n/**\n * Test integration request body schema\n */\nexport const testIntegrationBodySchema = z.object({\n routing_override: z.record(z.string(), z.unknown()).optional(),\n});\n","import { z } from 'zod';\nimport { dateTimeSchema, eventIdSchema, uuidSchema } from './common.js';\n\n/**\n * Event response schema from list endpoint\n */\nexport const eventSchema = z.object({\n id: uuidSchema,\n event_id: eventIdSchema,\n issue_id: uuidSchema.nullable(),\n title: z.string(),\n timestamp: dateTimeSchema,\n level: z.string(),\n platform: z.string(),\n release: z.string(),\n environment: z.string(),\n event_type: z.string(),\n});\n\n/**\n * Event detail response schema from detail endpoint\n */\nexport const eventDetailSchema = z.object({\n id: uuidSchema,\n event_id: eventIdSchema,\n issue_id: uuidSchema.nullable(),\n title: z.string(),\n timestamp: dateTimeSchema,\n ingested_at: dateTimeSchema,\n level: z.string(),\n platform: z.string(),\n release: z.string(),\n environment: z.string(),\n server_name: z.string(),\n sdk_name: z.string(),\n sdk_version: z.string(),\n event_type: z.string(),\n data: z.record(z.string(), z.any()), // Full Sentry event JSON\n});\n","import { z } from 'zod';\nimport { dateTimeSchema } from './common.js';\n\n/**\n * Global role assignable to a user (admin has full access, member is standard).\n */\nexport const globalRoleSchema = z.enum(['admin', 'member']);\n\n/**\n * Team member schema - a user as exposed on the team roster.\n */\nexport const teamMemberSchema = z.object({\n id: z.number().int(),\n email: z.string().email(),\n role: globalRoleSchema,\n is_active: z.boolean(),\n /** True for the first-registered account, which cannot be demoted or deleted. */\n is_primary: z.boolean().optional(),\n created_at: dateTimeSchema,\n last_login: dateTimeSchema.nullable().optional(),\n});\n\n/**\n * Request body for changing a user's global role.\n */\nexport const updateUserRoleSchema = z.object({\n role: globalRoleSchema,\n});\n","import { z } from 'zod';\nimport { dateTimeSchema } from './common.js';\nimport { globalRoleSchema } from './team.js';\n\n/**\n * Status of an invitation lifecycle (server returns a free-form string;\n * kept permissive to tolerate new statuses without breaking validation).\n */\nexport const invitationStatusSchema = z.string();\n\n/**\n * Invitation schema - public-facing pending invitation.\n */\nexport const invitationSchema = z.object({\n token: z.string(),\n email: z.string().email(),\n role: globalRoleSchema,\n status: invitationStatusSchema,\n expires_at: dateTimeSchema,\n created_at: dateTimeSchema,\n});\n\n/**\n * Public-facing invitation info for the accept page (no token echoed back).\n */\nexport const invitationInfoSchema = z.object({\n email: z.string().email(),\n role: globalRoleSchema,\n status: invitationStatusSchema,\n expires_at: dateTimeSchema,\n});\n\n/**\n * Request body for creating an invitation.\n */\nexport const createInvitationSchema = z.object({\n email: z.string().email(),\n role: globalRoleSchema,\n});\n\n/**\n * Request body for accepting an invitation (public endpoint).\n */\nexport const acceptInvitationSchema = z.object({\n token: z.string().min(1),\n password: z.string().min(1),\n});\n","import { z } from 'zod';\nimport { dateTimeSchema, uuidSchema } from './common.js';\n\n/**\n * Canonical issue status values (Sentry-compatible).\n */\nexport const issueStatusSchema = z.enum(['unresolved', 'resolved', 'ignored']);\n\n/**\n * Issue priority tiers.\n */\nexport const issuePrioritySchema = z.enum(['low', 'medium', 'high']);\n\n/**\n * Issue response schema from API\n */\nexport const issueSchema = z.object({\n id: uuidSchema,\n project_id: z.number().int(),\n short_id: z.string(),\n title: z.string(),\n value: z.string(),\n culprit: z.string(),\n logger: z.string(),\n first_seen: dateTimeSchema,\n last_seen: dateTimeSchema,\n event_count: z.number().int(),\n level: z.string().nullable(),\n platform: z.string().nullable(),\n // Status model (#165)\n status: issueStatusSchema,\n substatus: z.string().nullable(),\n priority: issuePrioritySchema.nullable(),\n assigned_to: z.number().int().nullable(),\n assignee_type: z.string().nullable(),\n issue_type: z.string(),\n issue_category: z.string(),\n first_release: z.string(),\n last_release: z.string(),\n status_details: z.record(z.string(), z.unknown()),\n // Aggregate enrichment — only the single-issue GET populates this; the list\n // and PATCH endpoints return the lean response, so default to 0 when absent.\n user_report_count: z.number().int().optional().default(0),\n // Per-user fields — only present when the request carries a user session.\n is_bookmarked: z.boolean().optional(),\n is_subscribed: z.boolean().optional(),\n has_seen: z.boolean().optional(),\n // Bulk list stats — only the list endpoint populates these (computed once\n // per page); the single-issue GET and PATCH responses omit them.\n user_count: z.number().int().optional(),\n trend: z.array(z.number().int()).optional(),\n // Deprecated, derived from `status`; kept for backward compatibility.\n is_resolved: z.boolean(),\n is_muted: z.boolean(),\n});\n\n/**\n * Update issue state request schema.\n *\n * `status` (plus `substatus`/`priority`/assignment) is canonical;\n * `is_resolved`/`is_muted` remain as a deprecated compatibility shim.\n * `status` also accepts the special `resolvedInNextRelease` value.\n */\nexport const updateIssueStateSchema = z.object({\n status: z\n .union([issueStatusSchema, z.literal('resolvedInNextRelease')])\n .optional(),\n substatus: z.string().optional(),\n priority: issuePrioritySchema.optional(),\n assigned_to: z.number().int().nullable().optional(),\n assignee_type: z.string().nullable().optional(),\n is_resolved: z.boolean().optional(),\n is_muted: z.boolean().optional(),\n});\n\n/**\n * A grouping hash that maps to an issue.\n */\nexport const issueHashSchema = z.object({\n id: z.number().int(),\n project_id: z.number().int(),\n issue_id: uuidSchema,\n grouping_key: z.string(),\n grouping_key_hash: z.string(),\n created_at: dateTimeSchema,\n});\n\n/**\n * A tag value with its event count.\n */\nexport const tagValueCountSchema = z.object({\n value: z.string(),\n count: z.number().int(),\n});\n\n/**\n * A single tag value's usage within an issue — the shape `GET\n * /issues/{id}/tags/{key}` returns per entry (Sentry-compatible: a bare\n * list of these, not a `{key, values}` wrapper).\n */\nexport const issueTagValueSchema = z.object({\n key: z.string(),\n name: z.string(),\n value: z.string(),\n count: z.number().int(),\n first_seen: dateTimeSchema,\n last_seen: dateTimeSchema,\n});\n\n/**\n * A tag key with its most common values within an issue.\n */\nexport const tagSummarySchema = z.object({\n key: z.string(),\n total_values: z.number().int(),\n top_values: z.array(tagValueCountSchema),\n});\n\n/**\n * Per-issue aggregates: unique user count + top tags.\n */\nexport const issueAggregatesSchema = z.object({\n user_count: z.number().int(),\n tags: z.array(tagSummarySchema),\n});\n\n/**\n * Time window for issue stats.\n */\nexport const issueStatsWindowSchema = z.enum(['24h', '30d']);\n\n/**\n * Event-count timeseries for an issue: `[bucketStartUnix, count]` points.\n */\nexport const issueStatsSchema = z.object({\n data: z.array(z.tuple([z.number(), z.number()])),\n});\n\n/**\n * An entry in an issue's activity log (status changes, comments/notes, etc.).\n */\nexport const activityEntrySchema = z.object({\n id: uuidSchema,\n issue_id: uuidSchema,\n user_id: z.number().int().nullable(),\n type: z.string(),\n data: z.string(),\n created_at: dateTimeSchema,\n});\n\n/**\n * A user feedback report attached to an issue/event.\n */\nexport const userReportSchema = z.object({\n id: uuidSchema,\n project_id: z.number().int(),\n issue_id: uuidSchema.nullable(),\n event_id: uuidSchema.nullable(),\n name: z.string(),\n // Server stores '' for anonymous reports (column DEFAULT '' / unwrap_or_default),\n // matching real Sentry's own save_userreport(report.get(\"email\", \"\")) — accept it.\n email: z.union([z.email(), z.literal('')]),\n comments: z.string(),\n created_at: dateTimeSchema,\n});\n\n/**\n * Request to add a comment (note) to an issue.\n */\nexport const createCommentSchema = z.object({\n text: z.string(),\n});\n\n/**\n * Request to submit user feedback on an issue.\n */\nexport const createUserReportSchema = z.object({\n name: z.string().optional(),\n email: z.email().optional(),\n comments: z.string().optional(),\n event_id: uuidSchema.optional(),\n});\n\n/**\n * Request to bulk-mutate issues.\n */\nexport const bulkUpdateIssuesSchema = z.object({\n ids: z.array(uuidSchema),\n status: z\n .union([issueStatusSchema, z.literal('resolvedInNextRelease')])\n .optional(),\n priority: issuePrioritySchema.optional(),\n});\n\n/**\n * Request to bulk-delete issues.\n */\nexport const bulkDeleteIssuesSchema = z.object({\n ids: z.array(uuidSchema),\n});\n","import { z } from 'zod';\nimport { dateTimeSchema, uuidSchema } from './common.js';\n\n/**\n * Log response schema from the list endpoint (Sentry \"log\" item — OurLog).\n *\n * `attributes` keeps the OTel-style typed map as received\n * (`{\"key\":{\"value\":x,\"type\":\"string\"}}`); denormalized fields are surfaced\n * separately for filtering/sorting.\n */\nexport const logSchema = z.object({\n id: uuidSchema,\n trace_id: z.string().nullable(),\n span_id: z.string().nullable(),\n level: z.string(),\n /** OTel severity number (1=trace … 21=fatal). Null for unknown levels. */\n severity_number: z.number().int().nullable(),\n body: z.string(),\n attributes: z.record(z.string(), z.any()),\n timestamp: dateTimeSchema,\n ingested_at: dateTimeSchema,\n});\n","import { z } from 'zod';\nimport { dateTimeSchema } from './common.js';\n\n/**\n * Per-project role assignable to a member.\n */\nexport const projectRoleSchema = z.enum(['viewer', 'editor', 'admin']);\n\n/**\n * Project member schema - member row joined with the user's email.\n */\nexport const projectMemberSchema = z.object({\n user_id: z.number().int(),\n email: z.string().email(),\n role: projectRoleSchema,\n created_at: dateTimeSchema,\n});\n\n/**\n * Request body for adding or updating a project member.\n */\nexport const upsertProjectMemberSchema = z.object({\n user_id: z.number().int(),\n role: projectRoleSchema,\n});\n","import { z } from 'zod';\nimport { dateTimeSchema, uuidSchema } from './common.js';\n\nconst metricDeltaSchema = z.object({\n current: z.number().int(),\n /**\n * The same window immediately before this one. Null only for all-time\n * requests, where a `0` would render as a misleading \"+100%\".\n */\n previous: z.number().int().nullable(),\n});\n\n/**\n * Per-row aggregates for the project list table.\n *\n * Only present when the request passed `stats_period`.\n */\nexport const projectListStatsSchema = z.object({\n /**\n * Distinct issues active in each bucket, oldest first. A shape, not a\n * total: an issue firing all day appears in every bucket it touched.\n */\n trend: z.array(z.number().int()),\n events: metricDeltaSchema,\n /** Issues first seen in the window. Drives the \"getting worse\" signal. */\n new_issues: metricDeltaSchema,\n /** Unresolved issues right now, independent of the window. */\n open_issues: z.number().int(),\n /** The subset of `open_issues` at `fatal` level. */\n fatal_issues: z.number().int(),\n});\n\n/**\n * Project response schema from API\n */\nexport const projectSchema = z.object({\n id: z.number().int(),\n name: z.string(),\n slug: z.string(),\n sentry_key: uuidSchema,\n dsn: z.string(),\n stored_event_count: z.number().int(),\n digested_event_count: z.number().int(),\n created_at: dateTimeSchema,\n updated_at: dateTimeSchema,\n platform: z.string().nullable(),\n stats: projectListStatsSchema.optional(),\n});\n\n/**\n * Create project request schema\n */\nexport const createProjectSchema = z.object({\n name: z.string().min(1),\n /**\n * Slugified server-side. Supplying it means the user chose it, so a taken\n * slug is a 409. Omitting it derives one from the name and silently\n * de-duplicates, since nobody chose that value.\n */\n slug: z.string().min(1).optional(),\n /**\n * Validated server-side against SELECTABLE_PLATFORMS. Omitting it leaves the\n * project eligible for platform auto-detection from its first event.\n */\n platform: z.string().min(1).optional(),\n});\n\n/**\n * Update project request schema\n */\nexport const updateProjectSchema = z.object({\n name: z.string().min(1).optional(),\n platform: z.string().min(1).optional(),\n /**\n * Slugified server-side. Unlike on create, a taken slug is a 409 rather than\n * being silently de-duplicated.\n */\n slug: z.string().min(1).optional(),\n});\n","import { z } from 'zod';\nimport { dateTimeSchema } from './common.js';\n\nexport const releaseHealthRowSchema = z.object({\n release: z.string(),\n environment: z.string(),\n total: z.number().int(),\n errored: z.number().int(),\n crashed: z.number().int(),\n abnormal: z.number().int(),\n healthy: z.number().int(),\n crash_free_sessions_rate: z.number().nullable(),\n crash_free_users_rate: z.number().nullable(),\n});\n\nexport const sessionSummarySchema = z.object({\n total: z.number().int(),\n errored: z.number().int(),\n crashed: z.number().int(),\n abnormal: z.number().int(),\n crash_free_sessions_rate: z.number().nullable(),\n crash_free_users_rate: z.number().nullable(),\n active_releases: z.number().int(),\n});\n\nexport const sessionTimeseriesPointSchema = z.object({\n bucket: dateTimeSchema,\n total: z.number().int(),\n crashed: z.number().int(),\n crash_free_sessions_rate: z.number().nullable(),\n});\n\nexport const sessionTimeseriesSchema = z.array(sessionTimeseriesPointSchema);\n","import { z } from 'zod';\n\nexport const chunkUploadCapabilitySchema = z.object({\n url: z.string(),\n chunkSize: z.number().int(),\n chunksPerRequest: z.number().int(),\n maxRequestSize: z.number().int(),\n hashAlgorithm: z.string(),\n accept: z.array(z.string()),\n concurrency: z.number().int().optional(),\n});\n\n/**\n * The assemble request body, mirroring `AssembleBody` in\n * `apps/server/src/routes/sourcemaps.rs`.\n *\n * `projects` is the one field the server rejects outright when empty\n * (`routes/sourcemaps.rs`, 400 \"projects array must not be empty\"), so the\n * check is made locally: a request that cannot succeed should not be sent.\n * `checksum` and the chunk hashes stay plain non-empty strings rather than a\n * SHA-1 pattern, because the server compares them against stored chunks and a\n * client-side format guess would reject inputs the server would have accepted.\n */\nexport const assembleInputSchema = z.object({\n checksum: z.string().min(1),\n chunks: z.array(z.string().min(1)),\n projects: z.array(z.string().min(1)).min(1),\n});\n\nexport const assembleResponseSchema = z.object({\n state: z.string(),\n missingChunks: z.array(z.string()),\n detail: z.string().optional(),\n});\n\nexport const sourceMapFileSchema = z.object({\n debugId: z.string(),\n fileType: z.string(),\n size: z.number().int(),\n timesUsed: z.number().int(),\n dateUploaded: z.string(),\n});\n\nexport const listSourceMapsResponseSchema = z.object({\n data: z.array(sourceMapFileSchema),\n});\n","import { z } from 'zod';\nimport { dateTimeSchema } from './common.js';\n\n/**\n * One time bucket of error-event volume, split by severity.\n *\n * `total` always equals `fatal + error + warning + info`: the server folds\n * `debug` and any unrecognized level into `info`, so stacked chart segments\n * sum to the bar height.\n */\nexport const eventTimeseriesPointSchema = z.object({\n bucket: dateTimeSchema,\n total: z.number().int(),\n fatal: z.number().int(),\n error: z.number().int(),\n warning: z.number().int(),\n info: z.number().int(),\n});\n\nexport const eventTimeseriesSchema = z.array(eventTimeseriesPointSchema);\n\n/**\n * A counter over the requested window plus the same counter over the window\n * immediately before it.\n *\n * `previous` is `null` for all-time requests: there is no earlier window, and\n * treating that as `0` would render as a misleading \"+100%\".\n */\nexport const metricDeltaSchema = z.object({\n current: z.number().int(),\n previous: z.number().int().nullable(),\n});\n\n/**\n * Project-wide counters for the overview, each with its period comparison.\n */\nexport const projectStatsSummarySchema = z.object({\n /** Resolved window in hours, or `null` for all time. */\n period_hours: z.number().int().nullable(),\n events: metricDeltaSchema,\n new_issues: metricDeltaSchema,\n /** Currently unresolved issues, independent of the window. */\n open_issues: z.number().int(),\n});\n","import { z } from 'zod';\n\n/**\n * Exact source-map storage weight, summed from the `size` columns of the\n * in-DB chunk table and the on-disk source_file CAS.\n */\nexport const sourceMapStorageSchema = z.object({\n chunk_bytes: z.number(),\n source_file_bytes: z.number(),\n total_bytes: z.number(),\n file_count: z.number(),\n});\n\n/**\n * Instance-wide storage summary: row counts per data category, whole-DB size\n * (best-effort, backend-reported), and exact source-map weight.\n */\nexport const storageSummarySchema = z.object({\n total_db_size_bytes: z.number(),\n events_count: z.number(),\n transactions_count: z.number(),\n spans_count: z.number(),\n logs_count: z.number(),\n source_maps: sourceMapStorageSchema,\n});\n\n/**\n * Per-project storage breakdown (one row per project, including empty ones).\n * `estimated_bytes` is the summed JSON payload length the project owns.\n */\nexport const projectStorageSchema = z.object({\n project_id: z.number(),\n project_name: z.string(),\n events_count: z.number(),\n transactions_count: z.number(),\n spans_count: z.number(),\n logs_count: z.number(),\n source_maps_count: z.number(),\n estimated_bytes: z.number(),\n});\n\n/**\n * Rows affected by a cleanup — used symmetrically for the dry-run preview\n * (\"what would be removed\") and the executed result (\"what was removed\").\n */\nexport const cleanupCountsSchema = z.object({\n events: z.number(),\n transactions: z.number(),\n spans: z.number(),\n logs: z.number(),\n issues_removed: z.number(),\n});\n\n/**\n * Outcome of a source-map garbage collection: orphaned files removed from the\n * DB and unlinked from disk, plus the exact bytes freed.\n */\nexport const sourceMapGcResultSchema = z.object({\n files_removed: z.number(),\n bytes_freed: z.number(),\n});\n\n/**\n * Request body for a cleanup (preview or execute): remove data older than\n * `older_than_days`, optionally scoped to one project (omit for all) and to\n * specific data categories. The minimum of 1 mirrors the server contract — a\n * smaller window would wipe the whole dataset.\n *\n * The `include_*` flags select which data categories the cleanup acts on. Each\n * is optional and defaults to `true` server-side, so omitting all of them keeps\n * the \"delete everything older than the cutoff\" behaviour. `include_transactions`\n * also governs the cascaded spans, and `include_events` governs the emptied\n * issues that get removed alongside their events.\n */\nexport const cleanupOptionsSchema = z.object({\n older_than_days: z.number().int().min(1),\n project_id: z.number().int().optional(),\n include_events: z.boolean().optional(),\n include_transactions: z.boolean().optional(),\n include_logs: z.boolean().optional(),\n});\n","import { z } from 'zod';\nimport { dateTimeSchema } from './common.js';\n\n/**\n * Auth token response schema from list endpoint (masked)\n */\nexport const authTokenSchema = z.object({\n id: z.number().int(),\n token_prefix: z.string(),\n description: z.string().nullable(),\n created_at: dateTimeSchema,\n last_used_at: dateTimeSchema.nullable(),\n});\n\n/**\n * Auth token created response schema (full token shown once)\n */\nexport const authTokenCreatedSchema = z.object({\n id: z.number().int(),\n token: z.string(),\n description: z.string().nullable(),\n created_at: dateTimeSchema,\n});\n\n/**\n * Create auth token request schema\n */\nexport const createAuthTokenSchema = z.object({\n description: z.string().optional(),\n});\n","import { z } from 'zod';\nimport { dateTimeSchema, eventIdSchema, uuidSchema } from './common.js';\n\n/**\n * Transaction response schema from list endpoint\n */\nexport const transactionSchema = z.object({\n id: uuidSchema,\n event_id: eventIdSchema,\n transaction_name: z.string(),\n timestamp: dateTimeSchema,\n start_timestamp: dateTimeSchema.nullable(),\n duration_ms: z.number().nullable(),\n platform: z.string(),\n environment: z.string(),\n release: z.string(),\n ingested_at: dateTimeSchema,\n});\n\n/**\n * Transaction detail schema from the detail endpoint.\n *\n * Same summary fields as {@link transactionSchema} plus the full Sentry\n * payload under `data` (spans, contexts.trace, measurements, tags, request,\n * user) used to render the span waterfall and metrics view.\n */\nexport const transactionDetailSchema = z.object({\n id: uuidSchema,\n event_id: eventIdSchema,\n transaction_name: z.string(),\n timestamp: dateTimeSchema,\n start_timestamp: dateTimeSchema.nullable(),\n duration_ms: z.number().nullable(),\n platform: z.string(),\n environment: z.string(),\n release: z.string(),\n ingested_at: dateTimeSchema,\n data: z.record(z.string(), z.any()), // Full Sentry transaction payload\n});\n\n/**\n * A span row from the shared `spans` table — covers both origins\n * (transaction-embedded AND standalone \"span\" envelope items share this\n * table and this exact response shape), including gen_ai.* denormalized\n * fields when the span is recognized as an AI span.\n */\nexport const spanSchema = z.object({\n id: uuidSchema,\n /** Parent transaction, if this span was extracted from one. `null` for a standalone span. */\n transaction_id: uuidSchema.nullable(),\n span_id: z.string().nullable(),\n trace_id: z.string().nullable(),\n parent_span_id: z.string().nullable(),\n op: z.string().nullable(),\n description: z.string().nullable(),\n status: z.string().nullable(),\n start_timestamp: dateTimeSchema.nullable(),\n timestamp: dateTimeSchema.nullable(),\n duration_ms: z.number().nullable(),\n exclusive_time_ms: z.number().nullable(),\n is_segment: z.boolean(),\n segment_id: z.string().nullable(),\n /** Only ever set for standalone spans — a transaction-embedded span has no parent row to inherit these from. */\n platform: z.string().nullable(),\n release: z.string().nullable(),\n environment: z.string().nullable(),\n /** gen_ai.* denormalized fields — all null unless recognized as an AI span. */\n gen_ai_operation_type: z.string().nullable(),\n gen_ai_agent_name: z.string().nullable(),\n gen_ai_request_model: z.string().nullable(),\n gen_ai_response_model: z.string().nullable(),\n gen_ai_tool_name: z.string().nullable(),\n gen_ai_conversation_id: z.string().nullable(),\n gen_ai_usage_input_tokens: z.number().nullable(),\n gen_ai_usage_output_tokens: z.number().nullable(),\n gen_ai_usage_total_tokens: z.number().nullable(),\n});\n\n/**\n * Aggregate performance stats for one (transaction_name, op) group.\n */\nexport const transactionStatsSchema = z.object({\n transaction_name: z.string(),\n op: z.string().nullable(),\n count: z.number().int(),\n p50_ms: z.number(),\n p95_ms: z.number(),\n p99_ms: z.number(),\n failure_rate: z.number(),\n});\n","import { z } from 'zod';\nimport { globalRoleSchema } from './team.js';\n\n/**\n * User schema - authenticated user information\n */\nexport const userSchema = z.object({\n id: z.number().int().positive(),\n email: z.string().email(),\n role: globalRoleSchema,\n is_admin: z.boolean(),\n});\n\n/**\n * Auth response schema - returned after login/register\n */\nexport const authResponseSchema = z.object({\n user: userSchema,\n});\n\n/**\n * Login result schema - includes user and session cookies for Server Actions\n */\nexport const loginResultSchema = z.object({\n user: userSchema,\n cookies: z.array(z.string()),\n});\n\n/**\n * Login request schema\n */\nexport const loginRequestSchema = z.object({\n email: z.string().email(),\n password: z.string().min(1),\n});\n\n/**\n * Register request schema\n */\nexport const registerRequestSchema = z.object({\n email: z.string().email(),\n password: z.string().min(1),\n});\n","/**\n * The one closed error union `@rustrak/client` reports.\n *\n * It mirrors `apps/server/src/error.rs` variant by variant, plus the three\n * failures that never reach the server (`invalid_request`, `network`,\n * `invalid_response`) and a catch-all so an unanticipated status is still\n * representable rather than unrepresentable.\n *\n * Every member is a plain object: no class, no prototype chain, no `Error`\n * instance. That is what lets a failed `Result` survive `structuredClone` and\n * therefore React's server/client boundary.\n *\n * `status` is `number`, never a literal union. Pinning literals would make a\n * proxy-generated 502 or a future status a type error at the call site rather\n * than a value the consumer can log.\n *\n * `fields` appears on every member that can carry an `AppError` body, because\n * `AppError::with_field` works on all eight Rust variants: a `Forbidden` or a\n * `NotFound` may name an input just as a `Conflict` does. Only the members\n * that never carry a server body at all (`server_error`, which discards it,\n * plus `invalid_request`, `network` and `invalid_response`, which never had\n * one) omit it. See {@link FieldError}.\n */\nexport type RustrakError =\n /**\n * 400. `AppError::Validation`: the server rejected the request.\n *\n * `fields` is present only when the server named the offending inputs; a\n * consumer that ignores it behaves exactly as it did before.\n */\n | {\n readonly kind: 'validation';\n readonly status: number;\n readonly message: string;\n readonly fields?: readonly FieldError[];\n }\n /** 401. `AppError::Unauthorized`: no session, or the session expired. */\n | {\n readonly kind: 'unauthenticated';\n readonly status: number;\n readonly message: string;\n readonly fields?: readonly FieldError[];\n }\n /** 403. `AppError::Forbidden`: authenticated, but not allowed. */\n | {\n readonly kind: 'forbidden';\n readonly status: number;\n readonly message: string;\n readonly fields?: readonly FieldError[];\n }\n /** 404. `AppError::NotFound`. */\n | {\n readonly kind: 'not_found';\n readonly status: number;\n readonly message: string;\n readonly fields?: readonly FieldError[];\n }\n /**\n * 409. `AppError::Conflict`.\n *\n * Where `fields` earns its keep: uniqueness is the thing only the server can\n * know, and a taken name or slug is a 409, not a 400.\n */\n | {\n readonly kind: 'conflict';\n readonly status: number;\n readonly message: string;\n readonly fields?: readonly FieldError[];\n }\n /** 410. Reserved for endpoints that retire a resource rather than delete it. */\n | {\n readonly kind: 'gone';\n readonly status: number;\n readonly message: string;\n readonly fields?: readonly FieldError[];\n }\n /** 413. `AppError::PayloadTooLarge`: envelope ingestion only. */\n | {\n readonly kind: 'payload_too_large';\n readonly status: number;\n readonly message: string;\n readonly fields?: readonly FieldError[];\n }\n /** 429. The ingest rate limiter (`routes/ingest.rs`), the one flat body. */\n | {\n readonly kind: 'rate_limited';\n readonly status: number;\n readonly message: string;\n /** Seconds to wait, from the `Retry-After` header, when the server sent one. */\n readonly retryAfter?: number;\n readonly fields?: readonly FieldError[];\n }\n /**\n * Any status below 500 that no other member claims. The catch-all that keeps\n * the union closed but total.\n *\n * Not only 4xx: a 3xx that reached the error path (a redirect ky did not\n * follow), a 408, an unenumerated 4xx, and an opaque `status: 0` all land\n * here. `status` is the field to read; `kind` only says \"no dedicated\n * handling exists for this one\".\n */\n | {\n readonly kind: 'client_error';\n readonly status: number;\n readonly message: string;\n readonly fields?: readonly FieldError[];\n }\n /**\n * The caller's own input failed a pre-flight check. Never reached the\n * network, so it has no status.\n */\n | { readonly kind: 'invalid_request'; readonly message: string }\n /**\n * Any 5xx. `AppError::Database` and `AppError::Internal` both land here, and\n * so does anything a reverse proxy generates.\n *\n * `message` is always {@link SERVER_ERROR_MESSAGE}: the server's body is\n * discarded at construction, inside the client, so no consumer can leak a\n * connection string or a filesystem path into a UI. `incidentId` is the\n * forward-compatible slot for a correlation id the server does not send yet.\n */\n | {\n readonly kind: 'server_error';\n readonly status: number;\n readonly message: string;\n readonly incidentId?: string;\n }\n /**\n * The request never got an HTTP response: DNS, connection refused, TLS,\n * timeout, abort. Also a connection that died while the body was still being\n * read, which is a transport failure even though a status line arrived.\n *\n * `message` is always {@link NETWORK_ERROR_MESSAGE} or\n * {@link TIMEOUT_ERROR_MESSAGE}, never the underlying error's own: fetch\n * builds that message by interpolating the request method and URL\n * (`Request failed due to a network error: GET http://rustrak.internal:8080/api/projects`),\n * so echoing it prints a self-hosted deployment's internal host and port into\n * any UI that renders `error.message`.\n *\n * Carries no `cause` for the same reason. `reason` is the machine-readable\n * discriminator a caller needs instead, derived from the error's `name` and\n * never from its message.\n */\n | {\n readonly kind: 'network';\n readonly message: string;\n /** `timeout` when the client gave up waiting; `unreachable` otherwise. */\n readonly reason: 'timeout' | 'unreachable';\n }\n /**\n * A 2xx arrived but the body is not what the schema promises: not JSON, or\n * JSON of the wrong shape.\n *\n * Carries no Zod issues: they embed the offending response data.\n */\n | { readonly kind: 'invalid_response'; readonly message: string };\n\n/** The `kind` discriminant, useful for exhaustive `switch` in consumers. */\nexport type RustrakErrorKind = RustrakError['kind'];\n\n/**\n * Every `code` a {@link FieldError} may carry, mirroring the `FieldErrorCode`\n * enum in `apps/server/src/error.rs`.\n *\n * Deliberately tiny and resource-agnostic. `tests/unit/app-error-contract.test.ts`\n * parses that Rust enum and fails if this list stops matching it, so a variant\n * added on the server cannot ship without a matching entry here.\n *\n * Exported as a value, not only a type, so a consumer can exhaustively switch\n * or validate against it at runtime.\n */\nexport const FIELD_ERROR_CODES = [\n 'required',\n 'invalid',\n 'already_exists',\n 'too_short',\n 'too_long',\n 'custom',\n] as const;\n\n/** The `code` of a {@link FieldError}. */\nexport type FieldErrorCode = (typeof FIELD_ERROR_CODES)[number];\n\n/**\n * One input the server rejected, named as data.\n *\n * `field` is a **dot path into the request body** (`slug`,\n * `credentials.webhook_url`), which is exactly what a form library's\n * `setError` takes.\n *\n * Select the copy shown to the user from `(field, code)` and never from\n * `message`: that is what makes it translatable. `message` is populated only\n * for `code: 'custom'`, where the code set genuinely cannot express the\n * reason, and is then rendered verbatim. The client strips a `message` that\n * arrives on any other code, so the rule holds even against a server that\n * breaks it.\n *\n * The same `(field, code)` pair can mean two things at two statuses:\n * `(role, 'invalid')` is \"not a role at all\" on a 400 and \"a real role, but\n * not acceptable right now\" on a 409. Branch on `kind` as well when the copy\n * has to differ.\n *\n * A `field` naming an input the form does not have must fall back to a\n * form-level error. Passing an unknown path to `setError` registers a\n * phantom field that nothing can ever clear.\n */\nexport type FieldError = {\n readonly field: string;\n readonly code: FieldErrorCode;\n readonly message?: string;\n};\n\n/**\n * The fixed message every `server_error` carries. Exported so a consumer (or a\n * test) can assert that nothing server-supplied survived the 5xx redaction.\n */\nexport const SERVER_ERROR_MESSAGE = 'The server failed to handle the request.';\n\n/**\n * The fixed message a `network` error carries when the request never reached\n * the server. Fixed for the same reason as {@link SERVER_ERROR_MESSAGE}: the\n * underlying message interpolates the request URL, which is the deployment's\n * internal host and port. Read `reason` to branch, not `message`.\n */\nexport const NETWORK_ERROR_MESSAGE = 'The request could not reach the server.';\n\n/** The fixed message a `network` error carries when the client timed out. */\nexport const TIMEOUT_ERROR_MESSAGE = 'The request timed out.';\n\n/**\n * Whether retrying the same call could plausibly succeed.\n *\n * `network` and `server_error` are transient by nature; `rate_limited` clears\n * once its window rolls over. Everything else is deterministic: the same\n * request will fail the same way.\n */\nexport function isRetryable(error: RustrakError): boolean {\n return (\n error.kind === 'network' ||\n error.kind === 'server_error' ||\n error.kind === 'rate_limited'\n );\n}\n","/**\n * `Result` is how `@rustrak/client` reports an expected failure.\n *\n * The shape deliberately mirrors Zod's `safeParse`: discriminant `success`,\n * payload `data`. Everything inside is a plain object with `Object.prototype`,\n * no class instances and no methods, because React's Flight serializer refuses\n * to send anything else across the server/client boundary. Operations are\n * standalone functions for the same reason.\n */\nexport type Result<T, E> =\n | { readonly success: true; readonly data: T }\n | { readonly success: false; readonly error: E };\n\n/** Wrap a value as a successful `Result`. */\nexport function Ok<T>(data: T): Result<T, never> {\n return { success: true, data };\n}\n\n/** Wrap an error as a failed `Result`. */\nexport function Err<E>(error: E): Result<never, E> {\n return { success: false, error };\n}\n\n/**\n * Get the value, throwing if the `Result` is a failure.\n *\n * This is the caller explicitly opting back into exceptions. Nothing inside the\n * client calls it.\n */\nexport function unwrap<T, E>(result: Result<T, E>): T {\n if (result.success) {\n return result.data;\n }\n throw new Error(\n `unwrap() called on a failed Result: ${describe(result.error)}`,\n );\n}\n\n/**\n * Get the value, or `fallback` if the `Result` is a failure.\n *\n * **Do not use this to render a UI.** `unwrapOr(await client.projects.list(),\n * [])` collapses \"this account has no projects\" and \"the server is unreachable\"\n * into the same empty state, which is exactly the regression the `Result` API\n * exists to make impossible: the failure is discarded one line after it was\n * produced, and nothing downstream can tell there was one.\n *\n * It is appropriate where the fallback is genuinely correct regardless of why\n * the call failed: a cached-count optimisation, a best-effort telemetry read, a\n * script that already logged the error. Anywhere a human sees the outcome,\n * branch on `result.success` and read `error.kind`.\n */\nexport function unwrapOr<T, E>(result: Result<T, E>, fallback: T): T {\n return result.success ? result.data : fallback;\n}\n\n/** Apply `fn` to the value of a successful `Result`, passing failures through. */\nexport function mapResult<T, U, E>(\n result: Result<T, E>,\n fn: (value: T) => U,\n): Result<U, E> {\n return result.success ? Ok(fn(result.data)) : result;\n}\n\n/** Best-effort rendering of an unknown error value for `unwrap`'s message. */\nfunction describe(error: unknown): string {\n if (\n typeof error === 'object' &&\n error !== null &&\n 'message' in error &&\n typeof (error as { message: unknown }).message === 'string'\n ) {\n return (error as { message: string }).message;\n }\n return String(error);\n}\n","import ky, { type HTTPError, isHTTPError, type KyInstance } from 'ky';\nimport type { ClientConfig } from '../config.js';\nimport {\n FIELD_ERROR_CODES,\n type FieldError,\n type FieldErrorCode,\n NETWORK_ERROR_MESSAGE,\n type RustrakError,\n SERVER_ERROR_MESSAGE,\n TIMEOUT_ERROR_MESSAGE,\n} from '../errors.js';\n\n/**\n * Internal carrier for a `RustrakError` travelling out of ky.\n *\n * ky signals a non-2xx by rejecting, and a rejection must be caught somewhere.\n * `RustrakError` is a plain object by design and throwing a non-`Error` would\n * be indistinguishable from a bug, so the union is smuggled out inside a real\n * `Error` subclass that `BaseResource` unwraps into an `Err`.\n *\n * Never exported from `src/index.ts`: it exists only between `beforeError` and\n * `BaseResource`. Anything that is *not* one of these is a genuine programming\n * error and keeps propagating.\n */\nexport class RustrakTransportFailure extends Error {\n public readonly rustrakError: RustrakError;\n\n constructor(error: RustrakError) {\n super(error.message);\n this.name = 'RustrakTransportFailure';\n this.rustrakError = error;\n }\n}\n\n/** Narrow a caught value to the internal carrier. */\nexport function isTransportFailure(\n value: unknown,\n): value is RustrakTransportFailure {\n return value instanceof RustrakTransportFailure;\n}\n\n/**\n * Read the human-readable message out of an error body.\n *\n * Two shapes are live: every `AppError` sends `{error: {type, message}}` while\n * the ingest rate limiter sends a flat `{error: \"...\"}`. Reading only the flat\n * one turned every structured error into \"[object Object]\". See #204.\n */\nfunction readErrorMessage(error: HTTPError, status: number): string {\n const fallback = `HTTP ${status} error`;\n\n // `typeof body === 'object'` on purpose: ky puts a non-JSON body in\n // `error.data` as a plain string, and property access on a string primitive\n // yields undefined, so a bare `if (body)` fell through to the generic message\n // only by accident. Make the fallback deliberate.\n const body = error.data as {\n error?: string | { type?: string; message?: string };\n message?: string;\n } | null;\n\n if (body && typeof body === 'object') {\n const nested =\n typeof body.error === 'object' ? body.error?.message : body.error;\n return nested || body.message || fallback;\n }\n\n return fallback;\n}\n\nconst KNOWN_FIELD_ERROR_CODES = new Set<string>(FIELD_ERROR_CODES);\n\nfunction isFieldErrorCode(value: unknown): value is FieldErrorCode {\n return typeof value === 'string' && KNOWN_FIELD_ERROR_CODES.has(value);\n}\n\n/**\n * Codes already reported by {@link warnUnknownFieldErrorCode}.\n *\n * Module-scoped so a list page rendering fifty rows against a newer server\n * logs once per unknown code rather than once per row. Version skew does not\n * change within a process, so once is the whole signal.\n */\nconst warnedFieldErrorCodes = new Set<string>();\n\n/**\n * Make an unrecognised `code` visible without admitting it into the union.\n *\n * Dropping the entry is correct (see {@link readFieldErrors}), but a silent\n * drop is indistinguishable from \"the server named no field\": a client one\n * release behind a server that added a code loses every inline form error\n * site-wide with nothing anywhere to explain it.\n *\n * `console.warn` is the least intrusive mechanism that a support engineer can\n * actually act on. It needs no change to the public type, so no consumer has\n * to opt in to see it; it lands in the browser devtools console in a client\n * component and on stdout of the Node process (and therefore in whatever log\n * aggregation already exists) in a Server Component. The alternatives were\n * worse: throwing turns a cosmetic degradation into an outage, admitting the\n * code breaks the closed union this drop exists to protect, and a new\n * `fieldsDropped` flag on the union is invisible until somebody thinks to read\n * it, which is the same silence in a new place.\n */\nfunction warnUnknownFieldErrorCode(code: string, field: string): void {\n if (warnedFieldErrorCodes.has(code)) return;\n warnedFieldErrorCodes.add(code);\n\n console.warn(\n `[@rustrak/client] Dropped a field error with an unrecognised code ` +\n `\"${code}\" (field \"${field}\"). This client build does not know that ` +\n `code, so the affected inputs degrade to a form-level error. The ` +\n `server is most likely newer than @rustrak/client; upgrade the client ` +\n `to match the server version.`,\n );\n}\n\n/**\n * Read `error.fields` out of an `AppError` body.\n *\n * Returns `undefined` rather than `[]` when there is nothing usable, so the\n * key stays absent on the `RustrakError` and a consumer can test for it.\n *\n * Entries are validated one by one and a malformed or unrecognised one is\n * dropped, never coerced. `FieldErrorCode` is a closed union: admitting a code\n * this build has never heard of would hand a consumer a value its own\n * exhaustive `switch` cannot see. A newer server adding a code therefore\n * degrades to a form-level error here, which is the same place an older client\n * already lands, and is announced once via\n * {@link warnUnknownFieldErrorCode} so the skew is not silent.\n *\n * `message` survives only alongside `code: 'custom'`. The server enforces the\n * same rule at construction, but the docs on both sides tell consumers to\n * select translated copy from `(field, code)` for every other code, so a\n * `message` that reaches them there is untranslatable English a careless\n * consumer would render. Dropping it here makes the rule true of the value, not\n * only of its producer.\n */\nfunction readFieldErrors(error: HTTPError): FieldError[] | undefined {\n const body = error.data as { error?: { fields?: unknown } } | null;\n const raw = body && typeof body === 'object' ? body.error?.fields : undefined;\n\n if (!Array.isArray(raw)) {\n return undefined;\n }\n\n const fields: FieldError[] = [];\n for (const entry of raw) {\n if (typeof entry !== 'object' || entry === null) continue;\n\n const { field, code, message } = entry as Record<string, unknown>;\n if (typeof field !== 'string') continue;\n if (!isFieldErrorCode(code)) {\n if (typeof code === 'string') warnUnknownFieldErrorCode(code, field);\n continue;\n }\n\n fields.push(\n code === 'custom' && typeof message === 'string'\n ? { field, code, message }\n : { field, code },\n );\n }\n\n return fields.length > 0 ? fields : undefined;\n}\n\n/**\n * `Retry-After` in seconds, when the server sent a parseable one.\n *\n * RFC 9110 §10.2.3 allows two forms and a proxy in front of the Rust process\n * may send either. `Number.parseInt` read only the first, and read it too\n * loosely: it dropped the HTTP-date form entirely as `NaN`, and it returned\n * `-5` from `-5` and `3` from `3abc`, both of which a consumer would pass\n * straight to `setTimeout`.\n *\n * A date already in the past yields `0`, meaning \"retry now\", which is the\n * literal reading of the header.\n */\nfunction readRetryAfter(response: Response): number | undefined {\n const header = response.headers.get('Retry-After')?.trim();\n if (!header) {\n return undefined;\n }\n\n // delta-seconds: digits only. No sign, no trailing junk.\n if (/^\\d+$/.test(header)) {\n return Number.parseInt(header, 10);\n }\n\n // A signed number is neither a valid delta-seconds nor an HTTP-date, and it\n // must not reach `Date.parse`: V8 reads `-5` as a year and would turn a\n // nonsense header into \"retry now\".\n if (/^[+-]\\d+$/.test(header)) {\n return undefined;\n }\n\n const date = Date.parse(header);\n if (Number.isNaN(date)) {\n return undefined;\n }\n\n return Math.max(0, Math.ceil((date - Date.now()) / 1000));\n}\n\n/**\n * Attach `fields` to an error, or leave the key off entirely.\n *\n * The key is omitted rather than set to `undefined` so `'fields' in error`\n * stays an honest test and the object round-trips through `structuredClone`\n * with the same shape it was built with.\n */\nfunction annotate<E extends RustrakError & { fields?: readonly FieldError[] }>(\n base: E,\n fields: readonly FieldError[] | undefined,\n): E {\n return fields === undefined ? base : { ...base, fields };\n}\n\n/**\n * Map an HTTP status onto a `RustrakError` kind.\n *\n * Total by construction: every 5xx redacts, every other unanticipated status\n * lands on `client_error`, so no status is unrepresentable.\n */\nexport function transformHttpError(error: HTTPError): RustrakError {\n const { response } = error;\n const status = response.status;\n\n // 5xx never carries a server-supplied message. `AppError::Internal` and\n // `AppError::Database` interpolate arbitrary internal text (a pool error, an\n // OS errno, a filesystem path), and every consumer of this client renders\n // `error.message` somewhere. Discard it here, once, rather than trusting 128\n // call sites to remember.\n if (status >= 500) {\n return { kind: 'server_error', status, message: SERVER_ERROR_MESSAGE };\n }\n\n const message = readErrorMessage(error, status);\n\n // Read once, for every non-5xx status. `AppError::with_field` works on all\n // eight Rust variants, so restricting this to 400 and 409 meant an\n // annotation added to, say, the `Forbidden` in `routes/team.rs` would be\n // serialised, documented in `openapi.json`, and invisible to every consumer\n // with no test failing anywhere. It costs nothing when the key is absent:\n // `readFieldErrors` returns `undefined` without allocating.\n const fields = readFieldErrors(error);\n\n switch (status) {\n case 400:\n // The key is omitted rather than set to `undefined` so that\n // `'fields' in error` stays an honest test, matching `retryAfter` below.\n return annotate({ kind: 'validation', status, message }, fields);\n case 401:\n return annotate({ kind: 'unauthenticated', status, message }, fields);\n case 403:\n return annotate({ kind: 'forbidden', status, message }, fields);\n case 404:\n return annotate({ kind: 'not_found', status, message }, fields);\n case 409:\n return annotate({ kind: 'conflict', status, message }, fields);\n case 410:\n return annotate({ kind: 'gone', status, message }, fields);\n case 413:\n return annotate({ kind: 'payload_too_large', status, message }, fields);\n case 429: {\n const retryAfter = readRetryAfter(response);\n return annotate(\n retryAfter === undefined\n ? { kind: 'rate_limited', status, message }\n : { kind: 'rate_limited', status, message, retryAfter },\n fields,\n );\n }\n default:\n return annotate({ kind: 'client_error', status, message }, fields);\n }\n}\n\nexport function createKyInstance(config: ClientConfig): KyInstance {\n const headers: Record<string, string> = {\n // `Accept` is set here rather than relied on from ky. The `.json()`\n // shortcut sets it before the request is issued, and `BaseResource` no\n // longer uses that shortcut: it awaits the `Response` and parses the body\n // itself, so without this every one of the 86 methods would send `*/*` and\n // any content-negotiating hop could answer with HTML.\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n ...config.headers,\n };\n\n if (config.token) {\n headers.Authorization = `Bearer ${config.token}`;\n }\n\n return ky.create({\n prefix: config.baseUrl,\n timeout: config.timeout ?? 30000,\n credentials: 'include',\n retry: {\n limit: config.maxRetries ?? 2,\n statusCodes: [408, 500, 502, 503, 504],\n methods: ['get', 'post', 'put', 'patch', 'delete'],\n },\n headers,\n hooks: {\n beforeError: [\n ({ error }) => {\n if (error.name === 'TimeoutError') {\n // No `cause`: the underlying error embeds the resolved host and\n // port, which must not ride along into a serialized payload.\n throw new RustrakTransportFailure({\n kind: 'network',\n message: TIMEOUT_ERROR_MESSAGE,\n reason: 'timeout',\n });\n }\n\n if (isHTTPError(error)) {\n throw new RustrakTransportFailure(transformHttpError(error));\n }\n\n // Neither is `error.message` usable here, for the same reason the\n // timeout branch above discards it: ky's `NetworkError` builds it as\n // `Request failed due to a network error: ${method} ${url}`, so\n // forwarding it publishes the deployment's internal host and port to\n // every consumer that renders `error.message`. `reason` comes from\n // `error.name`, which carries no request data.\n throw new RustrakTransportFailure({\n kind: 'network',\n message: NETWORK_ERROR_MESSAGE,\n reason: 'unreachable',\n });\n },\n ],\n },\n });\n}\n","import type { KyInstance, ResponsePromise } from 'ky';\nimport type { ZodSchema } from 'zod';\nimport { NETWORK_ERROR_MESSAGE, type RustrakError } from '../errors.js';\nimport { Err, Ok, type Result } from '../result.js';\nimport { isTransportFailure } from '../utils/http.js';\n\n/**\n * A `TypeError` message that names a dead connection rather than a bad call.\n *\n * undici reports a socket that died mid-body as a bare `TypeError: terminated`,\n * indistinguishable by type from `x is not a function`. Node sets `cause` on\n * the transport one; this pattern covers the runtimes that do not.\n */\nconst TRANSPORT_TYPE_ERROR =\n /terminated|aborted|socket|network|closed|reset|fetch failed/i;\n\n/**\n * Whether a rejected body read is provably a bug in this client rather than a\n * connection that went away.\n *\n * The default is deliberately the other way round from the old bare `catch`:\n * only what is provably a programming error is rethrown, because reading the\n * body is a second trip over the socket and can fail for a transport reason\n * long after the status line arrived.\n */\nfunction isProgrammingError(error: unknown): boolean {\n if (!(error instanceof Error)) {\n // Nothing in a body read throws a non-`Error`. Whatever produced it is not\n // a transport fault, so let it crash where it can be debugged.\n return true;\n }\n\n if (error instanceof ReferenceError || error instanceof RangeError) {\n return true;\n }\n\n if (error instanceof TypeError) {\n return (\n error.cause === undefined && !TRANSPORT_TYPE_ERROR.test(error.message)\n );\n }\n\n return false;\n}\n\n/**\n * Decide what a rejected body read means.\n *\n * The three outcomes are deliberately distinct, and the old unqualified\n * `catch` collapsed them into one:\n *\n * - `SyntaxError` is the only proof the bytes arrived and were not JSON. That\n * is `invalid_response`, and `isRetryable` correctly says do not retry.\n * - A connection that died mid-body rejects with `TypeError: terminated`\n * (undici), an `AbortError`, or a plain `Error` from an interceptor. Calling\n * any of those `invalid_response` told the caller a transient fault was\n * permanent and blamed a schema drift that never happened, so they map to\n * `network`.\n * - A genuine `TypeError` from a bug is rethrown, which is what the boundary's\n * own design note promises: a programming error crashes rather than being\n * laundered into `{success: false}`.\n */\nfunction classifyBodyFailure(error: unknown): RustrakError | 'rethrow' {\n if (error instanceof SyntaxError) {\n return {\n kind: 'invalid_response',\n message: 'The server returned a body that is not valid JSON.',\n };\n }\n\n if (isProgrammingError(error)) {\n return 'rethrow';\n }\n\n // Same redaction as `utils/http.ts`: the underlying message can name the\n // resolved host and port. `reason` is the field to branch on.\n return {\n kind: 'network',\n message: NETWORK_ERROR_MESSAGE,\n reason:\n error instanceof Error && error.name === 'TimeoutError'\n ? 'timeout'\n : 'unreachable',\n };\n}\n\n/**\n * Release the socket for a response nobody will read.\n *\n * In Node an unconsumed body pins its connection out of the keep-alive pool\n * until GC, which every `delete`/`update` method and `auth.logout` would\n * otherwise do on each call. Cancelling can itself reject (the stream may\n * already be errored), and that must never become the call's result.\n */\nexport function discardBody(response: Response): void {\n try {\n void response.body?.cancel().catch(() => {});\n } catch {\n // A body that cannot even be cancelled is already gone. Nothing to release.\n }\n}\n\n/**\n * Base resource: the single place where a rejected ky promise becomes an `Err`.\n *\n * Every public method funnels through {@link BaseResource.requestResponse}\n * (directly or via {@link BaseResource.request} / {@link\n * BaseResource.requestVoid}) instead of carrying its own try/catch. One\n * boundary for 86 methods means the \"what counts as an expected failure\"\n * decision is made once, and it is auditable: only a\n * `RustrakTransportFailure`, the carrier `src/utils/http.ts` throws from ky's\n * `beforeError` hook, is converted. A `TypeError` from a genuine bug is\n * rethrown untouched, so a programming error still surfaces as a crash rather\n * than being laundered into `{success: false}`.\n *\n * Reading the body is a second failure point with the same rule: see\n * {@link classifyBodyFailure}, which separates \"not JSON\" from \"the connection\n * died\" from \"this is a bug\".\n */\nexport abstract class BaseResource {\n protected readonly http: KyInstance;\n\n constructor(http: KyInstance) {\n this.http = http;\n }\n\n /**\n * Validate an API response against its Zod schema.\n *\n * Failure is `invalid_response`: \"our own response schema did not match\",\n * never \"the user's input was rejected\". No Zod issues are attached: they\n * embed the offending response data.\n */\n protected validate<T>(\n data: unknown,\n schema: ZodSchema<T>,\n ): Result<T, RustrakError> {\n const result = schema.safeParse(data);\n\n if (!result.success) {\n return Err({\n kind: 'invalid_response',\n message: 'The server response did not match the expected schema.',\n });\n }\n\n return Ok(result.data);\n }\n\n /**\n * Validate caller-supplied input before it reaches the network.\n *\n * Failure is `invalid_request` and has no `status`: nothing was sent.\n */\n protected validateInput<T>(\n input: unknown,\n schema: ZodSchema<T>,\n ): Result<T, RustrakError> {\n const result = schema.safeParse(input);\n\n if (!result.success) {\n return Err({\n kind: 'invalid_request',\n message: 'The request input did not match the expected schema.',\n });\n }\n\n return Ok(result.data);\n }\n\n /**\n * The boundary. Runs `send`, converts a transport failure into an `Err`, and\n * hands the `Response` to `read`.\n *\n * Anything thrown that is not the internal carrier is a programming error and\n * is rethrown.\n */\n protected async requestResponse<T>(\n send: () => ResponsePromise,\n read: (response: Response) => Promise<Result<T, RustrakError>>,\n ): Promise<Result<T, RustrakError>> {\n let response: Response;\n\n try {\n response = await send();\n } catch (error) {\n if (isTransportFailure(error)) {\n return Err(error.rustrakError);\n }\n throw error;\n }\n\n return read(response);\n }\n\n /**\n * Read a JSON body, mapping a failed read onto the right `kind`.\n *\n * Shared with `AuthResource`, which needs the `Set-Cookie` headers off the\n * raw `Response` and so cannot go through {@link BaseResource.request}.\n */\n protected async readJson(\n response: Response,\n ): Promise<Result<unknown, RustrakError>> {\n try {\n return Ok(await response.json());\n } catch (error) {\n const failure = classifyBodyFailure(error);\n if (failure === 'rethrow') {\n throw error;\n }\n return Err(failure);\n }\n }\n\n /** Send a request and validate its JSON body against `schema`. */\n protected async request<T>(\n send: () => ResponsePromise,\n schema: ZodSchema<T>,\n ): Promise<Result<T, RustrakError>> {\n return this.requestResponse(send, async (response) => {\n const body = await this.readJson(response);\n if (!body.success) {\n return body;\n }\n\n return this.validate(body.data, schema);\n });\n }\n\n /** Send a request whose response body carries no contract (204, or ignored). */\n protected async requestVoid(\n send: () => ResponsePromise,\n ): Promise<Result<void, RustrakError>> {\n return this.requestResponse(send, async (response) => {\n discardBody(response);\n return Ok(undefined);\n });\n }\n}\n","import { z } from 'zod';\nimport type { RustrakError } from '../errors.js';\nimport type { Result } from '../result.js';\nimport {\n agentDurationPointSchema,\n agentTimeseriesPointSchema,\n agentTraceSummarySchema,\n genAiBreakdownRowSchema,\n offsetPaginatedResponseSchema,\n} from '../schemas/index.js';\nimport type {\n AgentBreakdownOptions,\n AgentDurationPoint,\n AgentTimeseriesOptions,\n AgentTimeseriesPoint,\n AgentTraceSummary,\n AgentTracesOptions,\n GenAiBreakdownRow,\n OffsetPaginatedResponse,\n} from '../types/index.js';\nimport { BaseResource } from './base.js';\n\nfunction timeseriesSearchParams(\n options?: AgentTimeseriesOptions,\n): Record<string, string> {\n const searchParams: Record<string, string> = {};\n if (options?.period_hours) {\n searchParams.period_hours = String(options.period_hours);\n }\n if (options?.interval_hours) {\n searchParams.interval_hours = String(options.interval_hours);\n }\n return searchParams;\n}\n\nfunction breakdownSearchParams(\n options?: AgentBreakdownOptions,\n): Record<string, string> {\n const searchParams: Record<string, string> = {};\n if (options?.period_hours) {\n searchParams.period_hours = String(options.period_hours);\n }\n if (options?.limit) {\n searchParams.limit = String(options.limit);\n }\n return searchParams;\n}\n\n/**\n * AI Agent Monitoring dashboard API resource — powers the 6 dashboard\n * widgets (Agent Runs, Duration, LLM Calls by Model, Tokens Used by Model,\n * Tool Calls by Tool, Traces).\n */\nexport class AgentsResource extends BaseResource {\n /**\n * Time-bucketed count of agent-run spans (`gen_ai.operation.type:agent`).\n */\n async getRuns(\n projectId: number,\n options?: AgentTimeseriesOptions,\n ): Promise<Result<AgentTimeseriesPoint[], RustrakError>> {\n return this.request(\n () =>\n this.http.get(`api/projects/${projectId}/agents/runs`, {\n searchParams: timeseriesSearchParams(options),\n }),\n z.array(agentTimeseriesPointSchema),\n );\n }\n\n /**\n * Time-bucketed avg/p95 duration for `agent`/`ai_client` spans.\n */\n async getDuration(\n projectId: number,\n options?: AgentTimeseriesOptions,\n ): Promise<Result<AgentDurationPoint[], RustrakError>> {\n return this.request(\n () =>\n this.http.get(`api/projects/${projectId}/agents/duration`, {\n searchParams: timeseriesSearchParams(options),\n }),\n z.array(agentDurationPointSchema),\n );\n }\n\n /**\n * Top models by LLM call count (`gen_ai.operation.type:ai_client`).\n */\n async getModelsByCalls(\n projectId: number,\n options?: AgentBreakdownOptions,\n ): Promise<Result<GenAiBreakdownRow[], RustrakError>> {\n return this.request(\n () =>\n this.http.get(`api/projects/${projectId}/agents/models/calls`, {\n searchParams: breakdownSearchParams(options),\n }),\n z.array(genAiBreakdownRowSchema),\n );\n }\n\n /**\n * Top models by total tokens used (`gen_ai.operation.type:ai_client`).\n */\n async getModelsByTokens(\n projectId: number,\n options?: AgentBreakdownOptions,\n ): Promise<Result<GenAiBreakdownRow[], RustrakError>> {\n return this.request(\n () =>\n this.http.get(`api/projects/${projectId}/agents/models/tokens`, {\n searchParams: breakdownSearchParams(options),\n }),\n z.array(genAiBreakdownRowSchema),\n );\n }\n\n /**\n * Top tools by call count (`gen_ai.operation.type:tool`).\n */\n async getTools(\n projectId: number,\n options?: AgentBreakdownOptions,\n ): Promise<Result<GenAiBreakdownRow[], RustrakError>> {\n return this.request(\n () =>\n this.http.get(`api/projects/${projectId}/agents/tools`, {\n searchParams: breakdownSearchParams(options),\n }),\n z.array(genAiBreakdownRowSchema),\n );\n }\n\n /**\n * Paginated per-trace_id aggregate (duration, tokens, tool usage) across\n * all AI spans sharing that trace, regardless of origin.\n */\n async getTraces(\n projectId: number,\n options?: AgentTracesOptions,\n ): Promise<Result<OffsetPaginatedResponse<AgentTraceSummary>, RustrakError>> {\n const searchParams: Record<string, string> = {};\n if (options?.page) {\n searchParams.page = String(options.page);\n }\n if (options?.per_page) {\n searchParams.per_page = String(options.per_page);\n }\n\n return this.request(\n () =>\n this.http.get(`api/projects/${projectId}/agents/traces`, {\n searchParams,\n }),\n offsetPaginatedResponseSchema(agentTraceSummarySchema),\n );\n }\n}\n","import { z } from 'zod';\nimport type { RustrakError } from '../errors.js';\nimport type { Result } from '../result.js';\nimport {\n alertIntegrationSchema,\n createAlertIntegrationSchema,\n testChannelResponseSchema,\n testIntegrationBodySchema,\n updateAlertIntegrationSchema,\n} from '../schemas/alert.js';\nimport type {\n AlertIntegration,\n CreateAlertIntegration,\n RoutingOverride,\n TestChannelResponse,\n UpdateAlertIntegration,\n} from '../types/alert.js';\nimport { BaseResource } from './base.js';\n\n/**\n * Alert Integrations API resource (global credential destinations)\n */\nexport class AlertIntegrationsResource extends BaseResource {\n /**\n * List all alert integrations\n */\n async list(): Promise<Result<AlertIntegration[], RustrakError>> {\n return this.request(\n () => this.http.get('api/integrations'),\n z.array(alertIntegrationSchema),\n );\n }\n\n /**\n * Get a single alert integration by ID\n */\n async get(id: number): Promise<Result<AlertIntegration, RustrakError>> {\n return this.request(\n () => this.http.get(`api/integrations/${id}`),\n alertIntegrationSchema,\n );\n }\n\n /**\n * Create a new alert integration\n */\n async create(\n input: CreateAlertIntegration,\n ): Promise<Result<AlertIntegration, RustrakError>> {\n const validatedInput = this.validateInput(\n input,\n createAlertIntegrationSchema,\n );\n if (!validatedInput.success) {\n return validatedInput;\n }\n\n return this.request(\n () => this.http.post('api/integrations', { json: validatedInput.data }),\n alertIntegrationSchema,\n );\n }\n\n /**\n * Update an existing alert integration\n */\n async update(\n id: number,\n input: UpdateAlertIntegration,\n ): Promise<Result<AlertIntegration, RustrakError>> {\n const validatedInput = this.validateInput(\n input,\n updateAlertIntegrationSchema,\n );\n if (!validatedInput.success) {\n return validatedInput;\n }\n\n return this.request(\n () =>\n this.http.patch(`api/integrations/${id}`, {\n json: validatedInput.data,\n }),\n alertIntegrationSchema,\n );\n }\n\n /**\n * Delete an alert integration\n */\n async delete(id: number): Promise<Result<void, RustrakError>> {\n return this.requestVoid(() => this.http.delete(`api/integrations/${id}`));\n }\n\n /**\n * Send a test notification to verify integration configuration.\n * For Slack bot_token integrations, routingOverride must include `channel`.\n */\n async test(\n id: number,\n routingOverride?: RoutingOverride,\n ): Promise<Result<TestChannelResponse, RustrakError>> {\n let body: unknown;\n\n if (routingOverride !== undefined) {\n const validatedInput = this.validateInput(\n { routing_override: routingOverride },\n testIntegrationBodySchema,\n );\n if (!validatedInput.success) {\n return validatedInput;\n }\n body = validatedInput.data;\n }\n\n return this.request(\n () =>\n this.http.post(\n `api/integrations/${id}/test`,\n body !== undefined ? { json: body } : undefined,\n ),\n testChannelResponseSchema,\n );\n }\n}\n","import { z } from 'zod';\nimport type { RustrakError } from '../errors.js';\nimport type { Result } from '../result.js';\nimport {\n alertHistorySchema,\n alertRuleSchema,\n createAlertRuleSchema,\n updateAlertRuleSchema,\n} from '../schemas/alert.js';\nimport type {\n AlertHistory,\n AlertRule,\n CreateAlertRule,\n ListAlertHistoryOptions,\n UpdateAlertRule,\n} from '../types/alert.js';\nimport { BaseResource } from './base.js';\n\n/**\n * Alert Rules API resource (per-project alert configuration)\n */\nexport class AlertRulesResource extends BaseResource {\n /**\n * List all alert rules for a project\n */\n async list(projectId: number): Promise<Result<AlertRule[], RustrakError>> {\n return this.request(\n () => this.http.get(`api/projects/${projectId}/alert-rules`),\n z.array(alertRuleSchema),\n );\n }\n\n /**\n * Get a single alert rule by ID\n */\n async get(\n projectId: number,\n ruleId: number,\n ): Promise<Result<AlertRule, RustrakError>> {\n return this.request(\n () => this.http.get(`api/projects/${projectId}/alert-rules/${ruleId}`),\n alertRuleSchema,\n );\n }\n\n /**\n * Create a new alert rule for a project\n */\n async create(\n projectId: number,\n input: CreateAlertRule,\n ): Promise<Result<AlertRule, RustrakError>> {\n const validatedInput = this.validateInput(input, createAlertRuleSchema);\n if (!validatedInput.success) {\n return validatedInput;\n }\n\n return this.request(\n () =>\n this.http.post(`api/projects/${projectId}/alert-rules`, {\n json: validatedInput.data,\n }),\n alertRuleSchema,\n );\n }\n\n /**\n * Update an existing alert rule\n */\n async update(\n projectId: number,\n ruleId: number,\n input: UpdateAlertRule,\n ): Promise<Result<AlertRule, RustrakError>> {\n const validatedInput = this.validateInput(input, updateAlertRuleSchema);\n if (!validatedInput.success) {\n return validatedInput;\n }\n\n return this.request(\n () =>\n this.http.patch(`api/projects/${projectId}/alert-rules/${ruleId}`, {\n json: validatedInput.data,\n }),\n alertRuleSchema,\n );\n }\n\n /**\n * Delete an alert rule\n */\n async delete(\n projectId: number,\n ruleId: number,\n ): Promise<Result<void, RustrakError>> {\n return this.requestVoid(() =>\n this.http.delete(`api/projects/${projectId}/alert-rules/${ruleId}`),\n );\n }\n\n /**\n * List alert history for a project\n */\n async listHistory(\n projectId: number,\n options?: ListAlertHistoryOptions,\n ): Promise<Result<AlertHistory[], RustrakError>> {\n const searchParams = new URLSearchParams();\n\n if (options?.limit !== undefined) {\n searchParams.set('limit', options.limit.toString());\n }\n\n const query = searchParams.toString();\n const url = query\n ? `api/projects/${projectId}/alert-history?${query}`\n : `api/projects/${projectId}/alert-history`;\n\n return this.request(() => this.http.get(url), z.array(alertHistorySchema));\n }\n}\n","import type { RustrakError } from '../errors.js';\nimport { Ok, type Result } from '../result.js';\nimport {\n acceptInvitationSchema,\n invitationInfoSchema,\n} from '../schemas/invitation.js';\nimport {\n authResponseSchema,\n loginRequestSchema,\n registerRequestSchema,\n userSchema,\n} from '../schemas/user.js';\nimport type { AcceptInvitation, InvitationInfo } from '../types/invitation.js';\nimport type {\n LoginRequest,\n LoginResult,\n RegisterRequest,\n User,\n} from '../types/user.js';\nimport { BaseResource, discardBody } from './base.js';\n\n/**\n * Every `Set-Cookie` on a response, without assuming `Headers.getSetCookie`.\n *\n * `getSetCookie` landed in Node 18.16, well below the supported floor, but\n * `engines` is advisory: npm does not enforce it unless the consumer opted in.\n * These are the session-establishing calls, so an older runtime would throw a\n * `TypeError` out of `login` precisely, from a method whose whole contract is\n * that it returns a `Result` instead of throwing. The fallback reads the folded\n * header, which is all the platform offers there.\n *\n * Exported for `tests/unit/base-resource.test.ts` only: the fallback is\n * unreachable on a runtime that has `getSetCookie`, which is every runtime the\n * suite can run on. It is not re-exported from `src/index.ts`.\n */\nexport function readSetCookie(response: Response): string[] {\n if (typeof response.headers.getSetCookie === 'function') {\n return response.headers.getSetCookie();\n }\n\n const folded = response.headers.get('set-cookie');\n return folded === null ? [] : [folded];\n}\n\n/**\n * Authentication API resource\n * Handles user registration, login, logout, and session management\n */\nexport class AuthResource extends BaseResource {\n /**\n * Register a new user account\n * Creates a new user and automatically logs them in (sets session cookie)\n * @param credentials - Email and password for the new account\n * @returns LoginResult with user information and session cookies\n */\n async register(\n credentials: RegisterRequest,\n ): Promise<Result<LoginResult, RustrakError>> {\n const validatedInput = this.validateInput(\n credentials,\n registerRequestSchema,\n );\n if (!validatedInput.success) {\n return validatedInput;\n }\n\n return this.requestResponse(\n () => this.http.post('auth/register', { json: validatedInput.data }),\n (response) => this.readLoginResult(response),\n );\n }\n\n /**\n * Login with email and password\n * Authenticates the user and sets a session cookie\n * @param credentials - Email and password\n * @returns LoginResult with user information and session cookies\n */\n async login(\n credentials: LoginRequest,\n ): Promise<Result<LoginResult, RustrakError>> {\n const validatedInput = this.validateInput(credentials, loginRequestSchema);\n if (!validatedInput.success) {\n return validatedInput;\n }\n\n return this.requestResponse(\n () => this.http.post('auth/login', { json: validatedInput.data }),\n (response) => this.readLoginResult(response),\n );\n }\n\n /**\n * Logout the current user\n * Clears the session cookie\n * @returns Array of Set-Cookie headers (typically clearing cookies)\n */\n async logout(): Promise<Result<string[], RustrakError>> {\n return this.requestResponse(\n () => this.http.post('auth/logout'),\n async (response) => {\n const cookies = readSetCookie(response);\n // Only the headers matter here, and an unread body holds its socket out\n // of Node's keep-alive pool.\n discardBody(response);\n return Ok(cookies);\n },\n );\n }\n\n /**\n * Get current authenticated user\n * Requires a valid session cookie\n *\n * No session is `{success: false, kind: 'unauthenticated'}`, not a `null`\n * user: it is the literal reading of the server's 401. Callers must send the\n * visitor to login on `unauthenticated` **only**. Treating `network` or\n * `server_error` the same way turns a flaky connection into a login loop.\n *\n * @returns The current user, or `unauthenticated` when there is no session\n */\n async getCurrentUser(): Promise<Result<User, RustrakError>> {\n return this.request(() => this.http.get('auth/me'), userSchema);\n }\n\n /**\n * Get the details of a pending invitation by its token (public endpoint)\n * Used by the accept-invitation page before the user has an account\n * @param token - Invitation token\n * @returns Invitation info (email, role, status, expiry)\n */\n async getInvitation(\n token: string,\n ): Promise<Result<InvitationInfo, RustrakError>> {\n return this.request(\n () => this.http.get(`auth/invitation/${token}`),\n invitationInfoSchema,\n );\n }\n\n /**\n * Accept a pending invitation, creating the user account and logging in\n * @param input - Invitation token and the new account's password\n * @returns LoginResult with user information and session cookies\n */\n async acceptInvitation(\n input: AcceptInvitation,\n ): Promise<Result<LoginResult, RustrakError>> {\n const validatedInput = this.validateInput(input, acceptInvitationSchema);\n if (!validatedInput.success) {\n return validatedInput;\n }\n\n return this.requestResponse(\n () =>\n this.http.post('auth/accept-invitation', {\n json: validatedInput.data,\n }),\n (response) => this.readLoginResult(response),\n );\n }\n\n /**\n * The three session-establishing endpoints share a body and need the\n * `Set-Cookie` headers off the raw `Response`, which is why they go through\n * `requestResponse` rather than the plain JSON path.\n */\n private async readLoginResult(\n response: Response,\n ): Promise<Result<LoginResult, RustrakError>> {\n const cookies = readSetCookie(response);\n\n // `readJson` rather than a bare try/catch: a connection dying mid-body is\n // `network`, not `invalid_response`, and a genuine bug still throws.\n const body = await this.readJson(response);\n if (!body.success) {\n return body;\n }\n\n const authResponse = this.validate(body.data, authResponseSchema);\n if (!authResponse.success) {\n return authResponse;\n }\n\n return Ok({ user: authResponse.data.user, cookies });\n }\n}\n","import type { RustrakError } from '../errors.js';\nimport type { Result } from '../result.js';\nimport {\n eventDetailSchema,\n eventSchema,\n paginatedResponseSchema,\n} from '../schemas/index.js';\nimport type {\n Event,\n EventDetail,\n ListEventsOptions,\n PaginatedResponse,\n} from '../types/index.js';\nimport { BaseResource } from './base.js';\n\n/**\n * Events API resource\n */\nexport class EventsResource extends BaseResource {\n /**\n * List events for an issue with pagination\n */\n async list(\n projectId: number,\n issueId: string,\n options?: ListEventsOptions,\n ): Promise<Result<PaginatedResponse<Event>, RustrakError>> {\n const searchParams: Record<string, string> = {};\n\n if (options?.order) {\n searchParams.order = options.order;\n }\n if (options?.cursor) {\n searchParams.cursor = options.cursor;\n }\n\n return this.request(\n () =>\n this.http.get(`api/projects/${projectId}/issues/${issueId}/events`, {\n searchParams,\n }),\n paginatedResponseSchema(eventSchema),\n );\n }\n\n /**\n * Get a single event by ID with full details\n */\n async get(\n projectId: number,\n issueId: string,\n eventId: string,\n ): Promise<Result<EventDetail, RustrakError>> {\n return this.request(\n () =>\n this.http.get(\n `api/projects/${projectId}/issues/${issueId}/events/${eventId}`,\n ),\n eventDetailSchema,\n );\n }\n}\n","import { z } from 'zod';\n\nexport const serverVersionSchema = z.object({\n version: z.string(),\n});\n\nexport type ServerVersion = z.infer<typeof serverVersionSchema>;\n","import type { RustrakError } from '../errors.js';\nimport type { Result } from '../result.js';\nimport type { ServerVersion } from '../schemas/version.js';\nimport { serverVersionSchema } from '../schemas/version.js';\nimport { BaseResource } from './base.js';\n\nexport class HealthResource extends BaseResource {\n async getVersion(): Promise<Result<ServerVersion, RustrakError>> {\n return this.request(\n () => this.http.get('health/version'),\n serverVersionSchema,\n );\n }\n}\n","import type { RustrakError } from '../errors.js';\nimport type { Result } from '../result.js';\nimport { createInvitationSchema, invitationSchema } from '../schemas/index.js';\nimport type { CreateInvitation, Invitation } from '../types/index.js';\nimport { BaseResource } from './base.js';\n\n/**\n * Invitations API resource\n * Manages pending user invitations (admin only).\n */\nexport class InvitationsResource extends BaseResource {\n /**\n * Create a new invitation\n * @param input - Email and global role for the invited user\n */\n async create(\n input: CreateInvitation,\n ): Promise<Result<Invitation, RustrakError>> {\n const validatedInput = this.validateInput(input, createInvitationSchema);\n if (!validatedInput.success) {\n return validatedInput;\n }\n\n return this.request(\n () => this.http.post('api/invitations', { json: validatedInput.data }),\n invitationSchema,\n );\n }\n\n /**\n * List all invitations\n */\n async list(): Promise<Result<Invitation[], RustrakError>> {\n return this.request(\n () => this.http.get('api/invitations'),\n invitationSchema.array(),\n );\n }\n\n /**\n * Revoke a pending invitation\n * @param token - Invitation token to revoke\n */\n async revoke(token: string): Promise<Result<void, RustrakError>> {\n return this.requestVoid(() => this.http.delete(`api/invitations/${token}`));\n }\n}\n","import { z } from 'zod';\nimport type { RustrakError } from '../errors.js';\nimport type { Result } from '../result.js';\nimport {\n activityEntrySchema,\n bulkDeleteIssuesSchema,\n bulkUpdateIssuesSchema,\n createCommentSchema,\n createUserReportSchema,\n issueAggregatesSchema,\n issueHashSchema,\n issueSchema,\n issueStatsSchema,\n issueTagValueSchema,\n offsetPaginatedResponseSchema,\n updateIssueStateSchema,\n userReportSchema,\n} from '../schemas/index.js';\nimport type {\n ActivityEntry,\n BulkDeleteIssues,\n BulkUpdateIssues,\n CreateComment,\n CreateUserReport,\n Issue,\n IssueAggregates,\n IssueHash,\n IssueStats,\n IssueStatsWindow,\n IssueTagValue,\n ListIssuesOptions,\n OffsetPaginatedResponse,\n UpdateIssueState,\n UserReport,\n} from '../types/index.js';\nimport { BaseResource } from './base.js';\n\n/**\n * Issues API resource\n */\nexport class IssuesResource extends BaseResource {\n /**\n * List issues for a project with offset-based pagination\n */\n async list(\n projectId: number,\n options?: ListIssuesOptions,\n ): Promise<Result<OffsetPaginatedResponse<Issue>, RustrakError>> {\n const searchParams: Record<string, string> = {};\n\n if (options?.page !== undefined) {\n searchParams.page = options.page.toString();\n }\n if (options?.per_page !== undefined) {\n searchParams.per_page = options.per_page.toString();\n }\n if (options?.sort) {\n searchParams.sort = options.sort;\n }\n if (options?.order) {\n searchParams.order = options.order;\n }\n if (options?.filter) {\n searchParams.filter = options.filter;\n }\n if (options?.q) {\n searchParams.q = options.q;\n }\n\n return this.request(\n () => this.http.get(`api/projects/${projectId}/issues`, { searchParams }),\n offsetPaginatedResponseSchema(issueSchema),\n );\n }\n\n /**\n * Get a single issue by ID\n */\n async get(\n projectId: number,\n issueId: string,\n ): Promise<Result<Issue, RustrakError>> {\n return this.request(\n () => this.http.get(`api/projects/${projectId}/issues/${issueId}`),\n issueSchema,\n );\n }\n\n /**\n * Update issue state (status, substatus, priority, assignment, …)\n */\n async updateState(\n projectId: number,\n issueId: string,\n input: UpdateIssueState,\n ): Promise<Result<Issue, RustrakError>> {\n const validatedInput = this.validateInput(input, updateIssueStateSchema);\n if (!validatedInput.success) {\n return validatedInput;\n }\n\n return this.request(\n () =>\n this.http.patch(`api/projects/${projectId}/issues/${issueId}`, {\n json: validatedInput.data,\n }),\n issueSchema,\n );\n }\n\n /**\n * Resolve an issue in the next release (suppresses regression until a deploy).\n */\n async resolveInNextRelease(\n projectId: number,\n issueId: string,\n ): Promise<Result<Issue, RustrakError>> {\n return this.updateState(projectId, issueId, {\n status: 'resolvedInNextRelease',\n });\n }\n\n /**\n * Delete an issue\n */\n async delete(\n projectId: number,\n issueId: string,\n ): Promise<Result<void, RustrakError>> {\n return this.requestVoid(() =>\n this.http.delete(`api/projects/${projectId}/issues/${issueId}`),\n );\n }\n\n /**\n * Bulk-mutate issues (status and/or priority).\n */\n async bulkUpdate(\n projectId: number,\n input: BulkUpdateIssues,\n ): Promise<Result<{ updated: number }, RustrakError>> {\n const validatedInput = this.validateInput(input, bulkUpdateIssuesSchema);\n if (!validatedInput.success) {\n return validatedInput;\n }\n\n return this.request(\n () =>\n this.http.put(`api/projects/${projectId}/issues`, {\n json: validatedInput.data,\n }),\n z.object({ updated: z.number().int() }),\n );\n }\n\n /**\n * Bulk-delete issues.\n */\n async bulkDelete(\n projectId: number,\n input: BulkDeleteIssues,\n ): Promise<Result<{ deleted: number }, RustrakError>> {\n const validatedInput = this.validateInput(input, bulkDeleteIssuesSchema);\n if (!validatedInput.success) {\n return validatedInput;\n }\n\n return this.request(\n () =>\n this.http.delete(`api/projects/${projectId}/issues`, {\n json: validatedInput.data,\n }),\n z.object({ deleted: z.number().int() }),\n );\n }\n\n /**\n * List the grouping hashes that map to an issue.\n */\n async getHashes(\n projectId: number,\n issueId: string,\n ): Promise<Result<IssueHash[], RustrakError>> {\n return this.request(\n () => this.http.get(`api/projects/${projectId}/issues/${issueId}/hashes`),\n z.array(issueHashSchema),\n );\n }\n\n /**\n * List the distinct values (with counts) for a tag key across the issue.\n * Returns a bare list, one entry per value (Sentry-compatible shape).\n */\n async getTagValues(\n projectId: number,\n issueId: string,\n key: string,\n ): Promise<Result<IssueTagValue[], RustrakError>> {\n return this.request(\n () =>\n this.http.get(\n `api/projects/${projectId}/issues/${issueId}/tags/${encodeURIComponent(key)}`,\n ),\n z.array(issueTagValueSchema),\n );\n }\n\n /**\n * Fetch per-issue aggregates (unique user count + top tags).\n */\n async getAggregates(\n projectId: number,\n issueId: string,\n ): Promise<Result<IssueAggregates, RustrakError>> {\n return this.request(\n () =>\n this.http.get(`api/projects/${projectId}/issues/${issueId}/aggregates`),\n issueAggregatesSchema,\n );\n }\n\n /**\n * Fetch a zero-filled event-count timeseries (24h or 30d).\n */\n async getStats(\n projectId: number,\n issueId: string,\n window: IssueStatsWindow = '24h',\n ): Promise<Result<IssueStats, RustrakError>> {\n return this.request(\n () =>\n this.http.get(`api/projects/${projectId}/issues/${issueId}/stats`, {\n searchParams: { window },\n }),\n issueStatsSchema,\n );\n }\n\n /**\n * List an issue's activity log (status changes, comments/notes, …).\n */\n async getActivity(\n projectId: number,\n issueId: string,\n ): Promise<Result<ActivityEntry[], RustrakError>> {\n return this.request(\n () =>\n this.http.get(`api/projects/${projectId}/issues/${issueId}/activity`),\n z.array(activityEntrySchema),\n );\n }\n\n /**\n * Add a comment (note) to an issue.\n */\n async addComment(\n projectId: number,\n issueId: string,\n input: CreateComment,\n ): Promise<Result<ActivityEntry, RustrakError>> {\n const validatedInput = this.validateInput(input, createCommentSchema);\n if (!validatedInput.success) {\n return validatedInput;\n }\n\n return this.request(\n () =>\n this.http.post(`api/projects/${projectId}/issues/${issueId}/comments`, {\n json: validatedInput.data,\n }),\n activityEntrySchema,\n );\n }\n\n /**\n * Set or clear the current user's bookmark on an issue.\n */\n async setBookmark(\n projectId: number,\n issueId: string,\n enabled: boolean,\n ): Promise<Result<{ is_bookmarked: boolean }, RustrakError>> {\n return this.request(\n () =>\n this.http.put(`api/projects/${projectId}/issues/${issueId}/bookmark`, {\n json: { enabled },\n }),\n z.object({ is_bookmarked: z.boolean() }),\n );\n }\n\n /**\n * Set or clear the current user's subscription to an issue.\n */\n async setSubscription(\n projectId: number,\n issueId: string,\n enabled: boolean,\n ): Promise<Result<{ is_subscribed: boolean }, RustrakError>> {\n return this.request(\n () =>\n this.http.put(\n `api/projects/${projectId}/issues/${issueId}/subscription`,\n { json: { enabled } },\n ),\n z.object({ is_subscribed: z.boolean() }),\n );\n }\n\n /**\n * Mark the issue as seen by the current user.\n */\n async markSeen(\n projectId: number,\n issueId: string,\n ): Promise<Result<{ has_seen: boolean }, RustrakError>> {\n return this.request(\n () => this.http.post(`api/projects/${projectId}/issues/${issueId}/seen`),\n z.object({ has_seen: z.boolean() }),\n );\n }\n\n /**\n * List user feedback reports for an issue.\n */\n async listUserReports(\n projectId: number,\n issueId: string,\n ): Promise<Result<UserReport[], RustrakError>> {\n return this.request(\n () =>\n this.http.get(\n `api/projects/${projectId}/issues/${issueId}/user-reports`,\n ),\n z.array(userReportSchema),\n );\n }\n\n /**\n * Attach a user feedback report to an issue.\n */\n async createUserReport(\n projectId: number,\n issueId: string,\n input: CreateUserReport,\n ): Promise<Result<UserReport, RustrakError>> {\n const validatedInput = this.validateInput(input, createUserReportSchema);\n if (!validatedInput.success) {\n return validatedInput;\n }\n\n return this.request(\n () =>\n this.http.post(\n `api/projects/${projectId}/issues/${issueId}/user-reports`,\n { json: validatedInput.data },\n ),\n userReportSchema,\n );\n }\n}\n","import type { RustrakError } from '../errors.js';\nimport type { Result } from '../result.js';\nimport { logSchema, offsetPaginatedResponseSchema } from '../schemas/index.js';\nimport type {\n ListLogsOptions,\n Log,\n OffsetPaginatedResponse,\n} from '../types/index.js';\nimport { BaseResource } from './base.js';\n\n/**\n * Logs API resource (standalone logs — Sentry \"log\" item type)\n */\nexport class LogsResource extends BaseResource {\n /**\n * List logs for a project with offset-based pagination (newest first by log\n * timestamp), optionally filtered by level/trace_id.\n */\n async list(\n projectId: number,\n options?: ListLogsOptions,\n ): Promise<Result<OffsetPaginatedResponse<Log>, RustrakError>> {\n const searchParams: Record<string, string> = {};\n\n if (options?.page) {\n searchParams.page = String(options.page);\n }\n if (options?.per_page) {\n searchParams.per_page = String(options.per_page);\n }\n if (options?.level) {\n searchParams.level = options.level;\n }\n if (options?.trace_id) {\n searchParams.trace_id = options.trace_id;\n }\n\n return this.request(\n () => this.http.get(`api/projects/${projectId}/logs`, { searchParams }),\n offsetPaginatedResponseSchema(logSchema),\n );\n }\n}\n","import type { RustrakError } from '../errors.js';\nimport type { Result } from '../result.js';\nimport {\n projectMemberSchema,\n upsertProjectMemberSchema,\n} from '../schemas/index.js';\nimport type { ProjectMember, UpsertProjectMember } from '../types/index.js';\nimport { BaseResource } from './base.js';\n\n/**\n * Project Members API resource\n * Manages per-project membership and roles.\n */\nexport class MembersResource extends BaseResource {\n /**\n * List members of a project\n * @param projectId - ID of the project\n */\n async list(\n projectId: number,\n ): Promise<Result<ProjectMember[], RustrakError>> {\n return this.request(\n () => this.http.get(`api/projects/${projectId}/members`),\n projectMemberSchema.array(),\n );\n }\n\n /**\n * Add or update a project member\n * @param projectId - ID of the project\n * @param input - User ID and per-project role\n */\n async upsert(\n projectId: number,\n input: UpsertProjectMember,\n ): Promise<Result<void, RustrakError>> {\n const validatedInput = this.validateInput(input, upsertProjectMemberSchema);\n if (!validatedInput.success) {\n return validatedInput;\n }\n\n return this.requestVoid(() =>\n this.http.put(`api/projects/${projectId}/members`, {\n json: validatedInput.data,\n }),\n );\n }\n\n /**\n * Remove a member from a project\n * @param projectId - ID of the project\n * @param userId - ID of the user to remove\n */\n async remove(\n projectId: number,\n userId: number,\n ): Promise<Result<void, RustrakError>> {\n return this.requestVoid(() =>\n this.http.delete(`api/projects/${projectId}/members/${userId}`),\n );\n }\n}\n","import type { RustrakError } from '../errors.js';\nimport type { Result } from '../result.js';\nimport {\n createProjectSchema,\n offsetPaginatedResponseSchema,\n projectSchema,\n updateProjectSchema,\n} from '../schemas/index.js';\nimport type {\n CreateProject,\n ListProjectsOptions,\n OffsetPaginatedResponse,\n Project,\n UpdateProject,\n} from '../types/index.js';\nimport { BaseResource } from './base.js';\n\n/**\n * Projects API resource\n */\nexport class ProjectsResource extends BaseResource {\n /**\n * List projects with pagination\n */\n async list(\n options?: ListProjectsOptions,\n ): Promise<Result<OffsetPaginatedResponse<Project>, RustrakError>> {\n const searchParams = new URLSearchParams();\n\n if (options?.page !== undefined) {\n searchParams.set('page', options.page.toString());\n }\n if (options?.per_page !== undefined) {\n searchParams.set('per_page', options.per_page.toString());\n }\n if (options?.order) {\n searchParams.set('order', options.order);\n }\n if (options?.stats_period) {\n searchParams.set('stats_period', options.stats_period);\n }\n\n const query = searchParams.toString();\n const url = query ? `api/projects?${query}` : 'api/projects';\n\n return this.request(\n () => this.http.get(url),\n offsetPaginatedResponseSchema(projectSchema),\n );\n }\n\n /**\n * Get a single project by ID\n */\n async get(id: number): Promise<Result<Project, RustrakError>> {\n return this.request(\n () => this.http.get(`api/projects/${id}`),\n projectSchema,\n );\n }\n\n /**\n * Create a new project\n */\n async create(input: CreateProject): Promise<Result<Project, RustrakError>> {\n const validatedInput = this.validateInput(input, createProjectSchema);\n if (!validatedInput.success) {\n return validatedInput;\n }\n\n return this.request(\n () => this.http.post('api/projects', { json: validatedInput.data }),\n projectSchema,\n );\n }\n\n /**\n * Update an existing project\n */\n async update(\n id: number,\n input: UpdateProject,\n ): Promise<Result<Project, RustrakError>> {\n const validatedInput = this.validateInput(input, updateProjectSchema);\n if (!validatedInput.success) {\n return validatedInput;\n }\n\n return this.request(\n () =>\n this.http.patch(`api/projects/${id}`, { json: validatedInput.data }),\n projectSchema,\n );\n }\n\n /**\n * Delete a project\n */\n async delete(id: number): Promise<Result<void, RustrakError>> {\n return this.requestVoid(() => this.http.delete(`api/projects/${id}`));\n }\n}\n","import { z } from 'zod';\nimport type { RustrakError } from '../errors.js';\nimport type { Result } from '../result.js';\nimport { issueSchema } from '../schemas/index.js';\nimport type { Issue } from '../types/index.js';\nimport { BaseResource } from './base.js';\n\n/**\n * Releases API resource — data scoped to a specific release.\n */\nexport class ReleasesResource extends BaseResource {\n /**\n * Get issues first seen in a given release, most recently introduced first.\n *\n * @param projectId - Project ID\n * @param release - Release version\n * @param limit - Max issues to return (default: 10, max: 50)\n */\n async newIssues(\n projectId: number,\n release: string,\n limit?: number,\n ): Promise<Result<Issue[], RustrakError>> {\n const searchParams: Record<string, string> = {};\n if (limit !== undefined) {\n searchParams.limit = limit.toString();\n }\n\n return this.request(\n () =>\n this.http.get(\n `api/projects/${projectId}/releases/${encodeURIComponent(release)}/new-issues`,\n { searchParams },\n ),\n z.array(issueSchema),\n );\n }\n}\n","import type { RustrakError } from '../errors.js';\nimport type { Result } from '../result.js';\nimport { offsetPaginatedResponseSchema } from '../schemas/common.js';\nimport {\n releaseHealthRowSchema,\n sessionSummarySchema,\n sessionTimeseriesSchema,\n} from '../schemas/session.js';\nimport type {\n OffsetPaginatedResponse,\n ReleaseHealthStatsOptions,\n} from '../types/common.js';\nimport type {\n ReleaseHealthRow,\n SessionSummary,\n SessionTimeseries,\n} from '../types/session.js';\nimport { BaseResource } from './base.js';\n\n/**\n * Sessions API resource — release health stats.\n */\nexport class SessionsResource extends BaseResource {\n /**\n * Get per-release health stats for a project, one offset-based page of\n * (release, environment) rows at a time, ordered by session volume.\n * @param projectId - Project ID\n * @param options - Time window, release scoping and pagination.\n */\n async stats(\n projectId: number,\n options?: ReleaseHealthStatsOptions,\n ): Promise<Result<OffsetPaginatedResponse<ReleaseHealthRow>, RustrakError>> {\n const searchParams: Record<string, string> = {};\n if (options?.period) {\n searchParams.period = options.period;\n }\n if (options?.release) {\n searchParams.release = options.release;\n }\n if (options?.page) {\n searchParams.page = String(options.page);\n }\n if (options?.per_page) {\n searchParams.per_page = String(options.per_page);\n }\n\n return this.request(\n () =>\n this.http.get(`api/projects/${projectId}/sessions/stats`, {\n searchParams,\n }),\n offsetPaginatedResponseSchema(releaseHealthRowSchema),\n );\n }\n\n /**\n * Get project-wide session health, aggregated across all releases and environments.\n * @param projectId - Project ID\n * @param period - Time window (e.g. '24h', '7d'). Defaults to '24h'.\n */\n async summary(\n projectId: number,\n period?: string,\n ): Promise<Result<SessionSummary, RustrakError>> {\n const searchParams: Record<string, string> = {};\n if (period) {\n searchParams.period = period;\n }\n\n return this.request(\n () =>\n this.http.get(`api/projects/${projectId}/sessions/summary`, {\n searchParams,\n }),\n sessionSummarySchema,\n );\n }\n\n /**\n * Get a time-bucketed session trend for a project, aggregated across all\n * releases and environments.\n * @param projectId - Project ID\n * @param period - Time window (e.g. '24h', '7d'). Defaults to '24h'.\n * @param interval - Bucket width in hours (default: 1, max: 24).\n */\n async timeseries(\n projectId: number,\n period?: string,\n interval?: number,\n ): Promise<Result<SessionTimeseries, RustrakError>> {\n const searchParams: Record<string, string> = {};\n if (period) {\n searchParams.period = period;\n }\n if (interval !== undefined) {\n searchParams.interval = interval.toString();\n }\n\n return this.request(\n () =>\n this.http.get(`api/projects/${projectId}/sessions/timeseries`, {\n searchParams,\n }),\n sessionTimeseriesSchema,\n );\n }\n}\n","import type { RustrakError } from '../errors.js';\nimport { Err, Ok, type Result } from '../result.js';\nimport {\n assembleInputSchema,\n assembleResponseSchema,\n chunkUploadCapabilitySchema,\n listSourceMapsResponseSchema,\n} from '../schemas/sourcemap.js';\nimport type {\n AssembleInput,\n AssembleResponse,\n ChunkUploadCapability,\n ListSourceMapsResponse,\n} from '../types/sourcemap.js';\nimport { BaseResource } from './base.js';\n\n/**\n * Source Maps API resource\n *\n * Implements the sentry-cli artifact bundle protocol for source map upload\n * and the project source map listing endpoint.\n */\nexport class SourceMapsResource extends BaseResource {\n /**\n * Get chunk upload capabilities for an organization.\n * Returns the upload URL, chunk size limits, and accepted artifact types.\n */\n async getChunkUploadCapability(\n orgSlug: string,\n ): Promise<Result<ChunkUploadCapability, RustrakError>> {\n return this.request(\n () => this.http.get(`api/0/organizations/${orgSlug}/chunk-upload/`),\n chunkUploadCapabilitySchema,\n );\n }\n\n /**\n * Upload chunks as multipart/form-data, batching by `chunksPerRequest` (default 64).\n * Each part's field name must be the pre-computed SHA-1 hash of its content — the server\n * rejects mismatches with 400. Callers must supply the hash (also needed for assembleBundle).\n */\n async uploadChunks(\n orgSlug: string,\n chunks: { hash: string; data: Blob }[],\n chunksPerRequest = 64,\n ): Promise<Result<void, RustrakError>> {\n // A caller-supplied batch size, checked before anything is sent: the\n // matrix's `invalid_request` row, not a thrown programming error.\n if (!Number.isInteger(chunksPerRequest) || chunksPerRequest <= 0) {\n return Err({\n kind: 'invalid_request',\n message: 'chunksPerRequest must be a positive integer.',\n });\n }\n\n for (let i = 0; i < chunks.length; i += chunksPerRequest) {\n const batch = chunks.slice(i, i + chunksPerRequest);\n const form = new FormData();\n for (const chunk of batch) {\n form.append(chunk.hash, chunk.data);\n }\n\n const uploaded = await this.requestVoid(() =>\n this.http.post(`api/0/organizations/${orgSlug}/chunk-upload/`, {\n body: form,\n }),\n );\n\n // Stop at the first failed batch: continuing would keep pushing bytes at\n // a server that has already refused, and the caller has to retry anyway.\n if (!uploaded.success) {\n return uploaded;\n }\n }\n\n return Ok(undefined);\n }\n\n /**\n * Trigger assembly of a previously uploaded artifact bundle.\n *\n * @returns The assembly state. Poll until `state === \"ok\"` or `state === \"error\"`.\n * When `state === \"not_found\"` the `missingChunks` array lists what\n * still needs uploading via `uploadChunks`.\n */\n async assembleBundle(\n orgSlug: string,\n input: AssembleInput,\n ): Promise<Result<AssembleResponse, RustrakError>> {\n const validatedInput = this.validateInput(input, assembleInputSchema);\n if (!validatedInput.success) {\n return validatedInput;\n }\n\n return this.request(\n () =>\n this.http.post(\n `api/0/organizations/${orgSlug}/artifactbundle/assemble/`,\n { json: validatedInput.data },\n ),\n assembleResponseSchema,\n );\n }\n\n /**\n * List all source map files uploaded for a project.\n */\n async list(\n orgSlug: string,\n projectSlug: string,\n ): Promise<Result<ListSourceMapsResponse, RustrakError>> {\n return this.request(\n () =>\n this.http.get(\n `api/0/projects/${orgSlug}/${projectSlug}/files/source-maps/`,\n ),\n listSourceMapsResponseSchema,\n );\n }\n}\n","import type { RustrakError } from '../errors.js';\nimport type { Result } from '../result.js';\nimport { offsetPaginatedResponseSchema, spanSchema } from '../schemas/index.js';\nimport type {\n ListSpansOptions,\n OffsetPaginatedResponse,\n Span,\n} from '../types/index.js';\nimport { BaseResource } from './base.js';\n\n/**\n * Spans API resource — the shared `spans` table (standalone \"span\" envelope\n * items AND transaction-embedded spans both live here and share this\n * response shape).\n */\nexport class SpansResource extends BaseResource {\n /**\n * List spans for a project with offset-based pagination (newest first),\n * optionally filtered by op/status/trace_id/operation_type.\n */\n async list(\n projectId: number,\n options?: ListSpansOptions,\n ): Promise<Result<OffsetPaginatedResponse<Span>, RustrakError>> {\n const searchParams: Record<string, string> = {};\n\n if (options?.page) {\n searchParams.page = String(options.page);\n }\n if (options?.per_page) {\n searchParams.per_page = String(options.per_page);\n }\n if (options?.op) {\n searchParams.op = options.op;\n }\n if (options?.status) {\n searchParams.status = options.status;\n }\n if (options?.trace_id) {\n searchParams.trace_id = options.trace_id;\n }\n if (options?.operation_type) {\n searchParams.operation_type = options.operation_type;\n }\n\n return this.request(\n () => this.http.get(`api/projects/${projectId}/spans`, { searchParams }),\n offsetPaginatedResponseSchema(spanSchema),\n );\n }\n}\n","import type { RustrakError } from '../errors.js';\nimport type { Result } from '../result.js';\nimport {\n eventTimeseriesSchema,\n projectStatsSummarySchema,\n} from '../schemas/stats.js';\nimport type { EventTimeseries, ProjectStatsSummary } from '../types/stats.js';\nimport { BaseResource } from './base.js';\n\n/**\n * Stats API resource — project-wide aggregates for the overview dashboard.\n *\n * Distinct from {@link SessionsResource}, which reports release health from\n * SDK session data. Everything here is derived from ingested error events and\n * issues.\n */\nexport class StatsResource extends BaseResource {\n /**\n * Get time-bucketed error-event volume for a project, split by severity.\n *\n * Buckets are zero-filled across the window, so a quiet hour comes back as a\n * point with `total: 0` rather than being absent. All-time requests (no\n * `period`) are sparse: there is no lower bound to fill from.\n *\n * @param projectId - Project ID\n * @param period - Time window (e.g. '24h', '7d'). Omit for all time.\n * @param interval - Bucket width in hours (default: 1, max: 24).\n */\n async timeseries(\n projectId: number,\n period?: string,\n interval?: number,\n ): Promise<Result<EventTimeseries, RustrakError>> {\n const searchParams: Record<string, string> = {};\n if (period) {\n searchParams.period = period;\n }\n if (interval !== undefined) {\n searchParams.interval = interval.toString();\n }\n\n return this.request(\n () =>\n this.http.get(`api/projects/${projectId}/events/stats`, {\n searchParams,\n }),\n eventTimeseriesSchema,\n );\n }\n\n /**\n * Get project-wide counters for a window, each paired with the same counter\n * over the window immediately before it.\n *\n * @param projectId - Project ID\n * @param period - Time window (e.g. '24h', '7d'). Omit for all time, which\n * leaves every `previous` null.\n */\n async summary(\n projectId: number,\n period?: string,\n ): Promise<Result<ProjectStatsSummary, RustrakError>> {\n const searchParams: Record<string, string> = {};\n if (period) {\n searchParams.period = period;\n }\n\n return this.request(\n () =>\n this.http.get(`api/projects/${projectId}/stats/summary`, {\n searchParams,\n }),\n projectStatsSummarySchema,\n );\n }\n}\n","import { z } from 'zod';\nimport type { RustrakError } from '../errors.js';\nimport type { Result } from '../result.js';\nimport {\n cleanupCountsSchema,\n cleanupOptionsSchema,\n projectStorageSchema,\n sourceMapGcResultSchema,\n storageSummarySchema,\n} from '../schemas/index.js';\nimport type {\n CleanupCounts,\n CleanupOptions,\n ProjectStorage,\n SourceMapGcResult,\n StorageSummary,\n} from '../types/index.js';\nimport { BaseResource } from './base.js';\n\n/**\n * Storage API resource (admin only).\n *\n * Surfaces how much data the instance is holding and runs retention cleanups.\n */\nexport class StorageResource extends BaseResource {\n /**\n * Get the instance-wide storage summary: row counts per data category, the\n * whole-DB size, and exact source-map weight.\n */\n async getSummary(): Promise<Result<StorageSummary, RustrakError>> {\n return this.request(\n () => this.http.get('api/storage/summary'),\n storageSummarySchema,\n );\n }\n\n /**\n * Get the per-project storage breakdown (one row per project, including\n * empty ones).\n */\n async getProjects(): Promise<Result<ProjectStorage[], RustrakError>> {\n return this.request(\n () => this.http.get('api/storage/projects'),\n z.array(projectStorageSchema),\n );\n }\n\n /**\n * Dry-run: count the rows a cleanup would remove. Mutates nothing — use it to\n * confirm impact before {@link executeCleanup}.\n */\n async previewCleanup(\n options: CleanupOptions,\n ): Promise<Result<CleanupCounts, RustrakError>> {\n const validatedInput = this.validateInput(options, cleanupOptionsSchema);\n if (!validatedInput.success) {\n return validatedInput;\n }\n\n return this.request(\n () =>\n this.http.post('api/storage/cleanup/preview', {\n json: validatedInput.data,\n }),\n cleanupCountsSchema,\n );\n }\n\n /**\n * Execute a cleanup: delete data older than `older_than_days` (optionally\n * scoped to one project) and remove any issue left with zero events.\n */\n async executeCleanup(\n options: CleanupOptions,\n ): Promise<Result<CleanupCounts, RustrakError>> {\n const validatedInput = this.validateInput(options, cleanupOptionsSchema);\n if (!validatedInput.success) {\n return validatedInput;\n }\n\n return this.request(\n () =>\n this.http.post('api/storage/cleanup', { json: validatedInput.data }),\n cleanupCountsSchema,\n );\n }\n\n /**\n * Dry-run for {@link gcSourceMaps}: count the orphaned source-map files and\n * bytes a GC would reclaim. Mutates nothing.\n */\n async previewGcSourceMaps(): Promise<\n Result<SourceMapGcResult, RustrakError>\n > {\n return this.request(\n () => this.http.post('api/storage/source-maps/gc/preview'),\n sourceMapGcResultSchema,\n );\n }\n\n /**\n * Garbage-collect orphaned source maps: files no longer referenced by any\n * upload, removed from the DB and unlinked from disk. Safe — never touches\n * referenced files.\n */\n async gcSourceMaps(): Promise<Result<SourceMapGcResult, RustrakError>> {\n return this.request(\n () => this.http.post('api/storage/source-maps/gc'),\n sourceMapGcResultSchema,\n );\n }\n}\n","import type { RustrakError } from '../errors.js';\nimport type { Result } from '../result.js';\nimport { teamMemberSchema, updateUserRoleSchema } from '../schemas/index.js';\nimport type { GlobalRole, TeamMember } from '../types/index.js';\nimport { BaseResource } from './base.js';\n\n/**\n * Team API resource\n * Manages the global user roster and their global roles (admin only).\n */\nexport class TeamResource extends BaseResource {\n /**\n * List all team members (users)\n */\n async list(): Promise<Result<TeamMember[], RustrakError>> {\n return this.request(\n () => this.http.get('api/team'),\n teamMemberSchema.array(),\n );\n }\n\n /**\n * Change a user's global role\n * @param userId - ID of the user to update\n * @param role - New global role to assign\n */\n async updateRole(\n userId: number,\n role: GlobalRole,\n ): Promise<Result<void, RustrakError>> {\n const body = this.validateInput({ role }, updateUserRoleSchema);\n if (!body.success) {\n return body;\n }\n\n return this.requestVoid(() =>\n this.http.patch(`api/team/${userId}/role`, { json: body.data }),\n );\n }\n\n /**\n * Permanently remove a user from the instance.\n * @param userId - ID of the user to delete\n */\n async remove(userId: number): Promise<Result<void, RustrakError>> {\n return this.requestVoid(() => this.http.delete(`api/team/${userId}`));\n }\n}\n","import type { RustrakError } from '../errors.js';\nimport type { Result } from '../result.js';\nimport {\n authTokenCreatedSchema,\n authTokenSchema,\n createAuthTokenSchema,\n} from '../schemas/index.js';\nimport type {\n AuthToken,\n AuthTokenCreated,\n CreateAuthToken,\n} from '../types/index.js';\nimport { BaseResource } from './base.js';\n\n/**\n * Auth Tokens API resource\n */\nexport class TokensResource extends BaseResource {\n /**\n * List all auth tokens (masked)\n */\n async list(): Promise<Result<AuthToken[], RustrakError>> {\n return this.request(\n () => this.http.get('api/tokens'),\n authTokenSchema.array(),\n );\n }\n\n /**\n * Get a single auth token by ID (full token value).\n *\n * Previously returned a masked version, but the server now returns the\n * complete token for GET /api/tokens/{id}.\n */\n async get(id: number): Promise<Result<AuthTokenCreated, RustrakError>> {\n return this.request(\n () => this.http.get(`api/tokens/${id}`),\n authTokenCreatedSchema,\n );\n }\n\n /**\n * Create a new auth token\n * Note: The full token is only returned once during creation\n */\n async create(\n input: CreateAuthToken,\n ): Promise<Result<AuthTokenCreated, RustrakError>> {\n const validatedInput = this.validateInput(input, createAuthTokenSchema);\n if (!validatedInput.success) {\n return validatedInput;\n }\n\n return this.request(\n () => this.http.post('api/tokens', { json: validatedInput.data }),\n authTokenCreatedSchema,\n );\n }\n\n /**\n * Delete an auth token\n */\n async delete(id: number): Promise<Result<void, RustrakError>> {\n return this.requestVoid(() => this.http.delete(`api/tokens/${id}`));\n }\n}\n","import { z } from 'zod';\nimport type { RustrakError } from '../errors.js';\nimport type { Result } from '../result.js';\nimport {\n offsetPaginatedResponseSchema,\n spanSchema,\n transactionDetailSchema,\n transactionSchema,\n transactionStatsSchema,\n} from '../schemas/index.js';\nimport type {\n ListTransactionsOptions,\n OffsetPaginatedResponse,\n Span,\n Transaction,\n TransactionDetail,\n TransactionStats,\n} from '../types/index.js';\nimport { BaseResource } from './base.js';\n\n/**\n * Transactions API resource\n */\nexport class TransactionsResource extends BaseResource {\n /**\n * List transactions for a project with offset-based pagination (newest first)\n */\n async list(\n projectId: number,\n options?: ListTransactionsOptions,\n ): Promise<Result<OffsetPaginatedResponse<Transaction>, RustrakError>> {\n const searchParams: Record<string, string> = {};\n\n if (options?.page) {\n searchParams.page = String(options.page);\n }\n if (options?.per_page) {\n searchParams.per_page = String(options.per_page);\n }\n if (options?.name) {\n searchParams.name = options.name;\n }\n if (options?.op) {\n searchParams.op = options.op;\n }\n if (options?.status) {\n searchParams.status = options.status;\n }\n if (options?.environment) {\n searchParams.environment = options.environment;\n }\n if (options?.release) {\n searchParams.release = options.release;\n }\n\n return this.request(\n () =>\n this.http.get(`api/projects/${projectId}/transactions`, {\n searchParams,\n }),\n offsetPaginatedResponseSchema(transactionSchema),\n );\n }\n\n /**\n * Get the indexed spans extracted from a transaction, in waterfall order.\n */\n async getSpans(\n projectId: number,\n transactionId: string,\n ): Promise<Result<Span[], RustrakError>> {\n return this.request(\n () =>\n this.http.get(\n `api/projects/${projectId}/transactions/${transactionId}/spans`,\n ),\n z.array(spanSchema),\n );\n }\n\n /**\n * Get aggregate performance stats (count, p50/p95/p99 latency, failure rate)\n * grouped by transaction name + op, most frequent first, with offset-based\n * pagination — same shape as the other list endpoints.\n */\n async getStats(\n projectId: number,\n options?: { page?: number; per_page?: number },\n ): Promise<Result<OffsetPaginatedResponse<TransactionStats>, RustrakError>> {\n const searchParams: Record<string, string> = {};\n if (options?.page) {\n searchParams.page = String(options.page);\n }\n if (options?.per_page) {\n searchParams.per_page = String(options.per_page);\n }\n\n return this.request(\n () =>\n this.http.get(`api/projects/${projectId}/transactions/stats`, {\n searchParams,\n }),\n offsetPaginatedResponseSchema(transactionStatsSchema),\n );\n }\n\n /**\n * Get aggregate stats for a single (transaction name, op) group — a direct\n * lookup that works regardless of how many groups the project has. Reports\n * `not_found` when the group has no transactions.\n */\n async getStatForGroup(\n projectId: number,\n name: string,\n op?: string,\n ): Promise<Result<TransactionStats, RustrakError>> {\n const searchParams: Record<string, string> = { name };\n if (op) {\n searchParams.op = op;\n }\n\n return this.request(\n () =>\n this.http.get(`api/projects/${projectId}/transactions/stats/group`, {\n searchParams,\n }),\n transactionStatsSchema,\n );\n }\n\n /**\n * Get a single transaction by ID with its full Sentry payload (spans,\n * contexts.trace, measurements, tags) for the performance detail view.\n */\n async get(\n projectId: number,\n transactionId: string,\n ): Promise<Result<TransactionDetail, RustrakError>> {\n return this.request(\n () =>\n this.http.get(\n `api/projects/${projectId}/transactions/${transactionId}`,\n ),\n transactionDetailSchema,\n );\n }\n}\n","import type { KyInstance } from 'ky';\nimport type { ClientConfig } from './config.js';\nimport {\n AgentsResource,\n AlertIntegrationsResource,\n AlertRulesResource,\n AuthResource,\n EventsResource,\n HealthResource,\n InvitationsResource,\n IssuesResource,\n LogsResource,\n MembersResource,\n ProjectsResource,\n ReleasesResource,\n SessionsResource,\n SourceMapsResource,\n SpansResource,\n StatsResource,\n StorageResource,\n TeamResource,\n TokensResource,\n TransactionsResource,\n} from './resources/index.js';\nimport { createKyInstance } from './utils/index.js';\n\n/**\n * Main Rustrak API client\n *\n * @example\n * ```typescript\n * const client = new RustrakClient({\n * baseUrl: 'http://localhost:8080',\n * token: 'your-api-token'\n * });\n *\n * // List all projects\n * const projects = await client.projects.list();\n *\n * // Get issues for a project\n * const issues = await client.issues.list(1);\n *\n * // Get events for an issue\n * const events = await client.events.list(1, 'issue-uuid');\n * ```\n */\nexport class RustrakClient {\n private readonly http: KyInstance;\n\n /**\n * Authentication API resource\n */\n public readonly auth: AuthResource;\n\n /**\n * Projects API resource\n */\n public readonly projects: ProjectsResource;\n\n /**\n * Issues API resource\n */\n public readonly issues: IssuesResource;\n\n /**\n * Events API resource\n */\n public readonly events: EventsResource;\n\n /**\n * Auth Tokens API resource\n */\n public readonly tokens: TokensResource;\n\n /**\n * Alert Integrations API resource (global credential destinations)\n */\n public readonly alertIntegrations: AlertIntegrationsResource;\n\n /**\n * Alert Rules API resource (per-project alert configuration)\n */\n public readonly alertRules: AlertRulesResource;\n\n /**\n * Source Maps API resource (sentry-cli artifact bundle upload protocol)\n */\n public readonly sourceMaps: SourceMapsResource;\n\n /**\n * Team API resource (global user roster and roles)\n */\n public readonly team: TeamResource;\n\n /**\n * Invitations API resource (pending user invitations)\n */\n public readonly invitations: InvitationsResource;\n\n /**\n * Project Members API resource (per-project membership and roles)\n */\n public readonly members: MembersResource;\n\n /**\n * Sessions API resource (release health)\n */\n public readonly sessions: SessionsResource;\n\n /**\n * Releases API resource (data scoped to a specific release)\n */\n public readonly releases: ReleasesResource;\n\n /**\n * Transactions API resource (performance monitoring)\n */\n public readonly transactions: TransactionsResource;\n\n /**\n * Logs API resource (standalone logs)\n */\n public readonly logs: LogsResource;\n\n /**\n * Spans API resource (standalone + transaction-embedded spans, shared table)\n */\n public readonly spans: SpansResource;\n\n /**\n * AI Agent Monitoring dashboard API resource\n */\n public readonly agents: AgentsResource;\n\n /**\n * Stats API resource (project-wide overview aggregates)\n */\n public readonly stats: StatsResource;\n\n /**\n * Storage API resource (usage + retention cleanup, admin only)\n */\n public readonly storage: StorageResource;\n\n /**\n * Health API resource (version info)\n */\n public readonly health: HealthResource;\n\n /**\n * Create a new Rustrak API client\n *\n * @param config - Client configuration\n */\n constructor(config: ClientConfig) {\n this.http = createKyInstance(config);\n\n // Initialize resources\n this.auth = new AuthResource(this.http);\n this.projects = new ProjectsResource(this.http);\n this.issues = new IssuesResource(this.http);\n this.events = new EventsResource(this.http);\n this.tokens = new TokensResource(this.http);\n this.alertIntegrations = new AlertIntegrationsResource(this.http);\n this.alertRules = new AlertRulesResource(this.http);\n this.sourceMaps = new SourceMapsResource(this.http);\n this.team = new TeamResource(this.http);\n this.invitations = new InvitationsResource(this.http);\n this.members = new MembersResource(this.http);\n this.sessions = new SessionsResource(this.http);\n this.releases = new ReleasesResource(this.http);\n this.transactions = new TransactionsResource(this.http);\n this.logs = new LogsResource(this.http);\n this.spans = new SpansResource(this.http);\n this.agents = new AgentsResource(this.http);\n this.stats = new StatsResource(this.http);\n this.storage = new StorageResource(this.http);\n this.health = new HealthResource(this.http);\n }\n}\n"]}
|