@rustrak/client 0.3.0 → 0.3.2

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/dist/index.cjs CHANGED
@@ -566,6 +566,18 @@ var createProjectSchema = zod.z.object({
566
566
  var updateProjectSchema = zod.z.object({
567
567
  name: zod.z.string().min(1).optional()
568
568
  });
569
+ var releaseHealthRowSchema = zod.z.object({
570
+ release: zod.z.string(),
571
+ environment: zod.z.string(),
572
+ total: zod.z.number().int(),
573
+ errored: zod.z.number().int(),
574
+ crashed: zod.z.number().int(),
575
+ abnormal: zod.z.number().int(),
576
+ healthy: zod.z.number().int(),
577
+ crash_free_sessions_rate: zod.z.number().nullable(),
578
+ crash_free_users_rate: zod.z.number().nullable()
579
+ });
580
+ var releaseHealthSchema = zod.z.array(releaseHealthRowSchema);
569
581
  var chunkUploadCapabilitySchema = zod.z.object({
570
582
  url: zod.z.string(),
571
583
  chunkSize: zod.z.number().int(),
@@ -633,6 +645,17 @@ var EventsResource = class extends BaseResource {
633
645
  return this.validate(data, eventDetailSchema);
634
646
  }
635
647
  };
648
+ var serverVersionSchema = zod.z.object({
649
+ version: zod.z.string()
650
+ });
651
+
652
+ // src/resources/health.ts
653
+ var HealthResource = class extends BaseResource {
654
+ async getVersion() {
655
+ const data = await this.http.get("health/version").json();
656
+ return this.validate(data, serverVersionSchema);
657
+ }
658
+ };
636
659
 
637
660
  // src/resources/invitations.ts
638
661
  var InvitationsResource = class extends BaseResource {
@@ -794,6 +817,23 @@ var ProjectsResource = class extends BaseResource {
794
817
  }
795
818
  };
796
819
 
820
+ // src/resources/sessions.ts
821
+ var SessionsResource = class extends BaseResource {
822
+ /**
823
+ * Get per-release health stats for a project.
824
+ * @param projectId - Project ID
825
+ * @param period - Time window (e.g. '24h', '7d'). Defaults to '24h'.
826
+ */
827
+ async stats(projectId, period) {
828
+ const searchParams = {};
829
+ if (period) {
830
+ searchParams.period = period;
831
+ }
832
+ const data = await this.http.get(`api/projects/${projectId}/sessions/stats`, { searchParams }).json();
833
+ return this.validate(data, releaseHealthSchema);
834
+ }
835
+ };
836
+
797
837
  // src/resources/sourcemaps.ts
798
838
  var SourceMapsResource = class extends BaseResource {
799
839
  /**
@@ -1016,6 +1056,14 @@ var RustrakClient = class {
1016
1056
  * Project Members API resource (per-project membership and roles)
1017
1057
  */
1018
1058
  members;
1059
+ /**
1060
+ * Sessions API resource (release health)
1061
+ */
1062
+ sessions;
1063
+ /**
1064
+ * Health API resource (version info)
1065
+ */
1066
+ health;
1019
1067
  /**
1020
1068
  * Create a new Rustrak API client
1021
1069
  *
@@ -1034,6 +1082,8 @@ var RustrakClient = class {
1034
1082
  this.team = new TeamResource(this.http);
1035
1083
  this.invitations = new InvitationsResource(this.http);
1036
1084
  this.members = new MembersResource(this.http);
1085
+ this.sessions = new SessionsResource(this.http);
1086
+ this.health = new HealthResource(this.http);
1037
1087
  }
1038
1088
  };
1039
1089
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/schemas/common.ts","../src/schemas/alert.ts","../src/errors/base.ts","../src/errors/http.ts","../src/errors/validation.ts","../src/resources/base.ts","../src/resources/alert-integrations.ts","../src/resources/alert-rules.ts","../src/schemas/team.ts","../src/schemas/invitation.ts","../src/schemas/user.ts","../src/resources/auth.ts","../src/schemas/event.ts","../src/schemas/issue.ts","../src/schemas/member.ts","../src/schemas/project.ts","../src/schemas/sourcemap.ts","../src/schemas/token.ts","../src/resources/events.ts","../src/resources/invitations.ts","../src/resources/issues.ts","../src/resources/members.ts","../src/resources/projects.ts","../src/resources/sourcemaps.ts","../src/resources/team.ts","../src/resources/tokens.ts","../src/utils/http.ts","../src/client.ts"],"names":["z","ky","isHTTPError"],"mappings":"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","file":"index.cjs","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(['digest_order', 'last_seen']);\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\n */\nexport const uuidSchema = z.string().uuid();\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 * 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","/**\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 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 { 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 { 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","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 { z } from 'zod';\nimport { dateTimeSchema, 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: uuidSchema,\n issue_id: uuidSchema,\n title: z.string(),\n timestamp: dateTimeSchema,\n level: z.string(),\n platform: z.string(),\n release: z.string(),\n environment: 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: uuidSchema,\n issue_id: uuidSchema,\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 data: z.record(z.string(), z.any()), // Full Sentry event JSON\n});\n","import { z } from 'zod';\nimport { dateTimeSchema, uuidSchema } from './common.js';\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 first_seen: dateTimeSchema,\n last_seen: dateTimeSchema,\n event_count: z.number().int(),\n level: z.string().nullable(),\n platform: z.string().nullable(),\n is_resolved: z.boolean(),\n is_muted: z.boolean(),\n});\n\n/**\n * Update issue state request schema\n */\nexport const updateIssueStateSchema = z.object({\n is_resolved: z.boolean().optional(),\n is_muted: z.boolean().optional(),\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});\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});\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 * 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 {\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 { 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 {\n issueSchema,\n offsetPaginatedResponseSchema,\n updateIssueStateSchema,\n} from '../schemas/index.js';\nimport type {\n Issue,\n ListIssuesOptions,\n OffsetPaginatedResponse,\n UpdateIssueState,\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\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 (resolve, mute, etc.)\n */\n async updateState(\n projectId: number,\n issueId: string,\n input: UpdateIssueState,\n ): Promise<Issue> {\n // Validate input\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 * 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","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 {\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 { 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 (masked)\n */\n async get(id: number): Promise<AuthToken> {\n const data = await this.http.get(`api/tokens/${id}`).json();\n return this.validate(data, authTokenSchema);\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 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 AlertIntegrationsResource,\n AlertRulesResource,\n AuthResource,\n EventsResource,\n InvitationsResource,\n IssuesResource,\n MembersResource,\n ProjectsResource,\n SourceMapsResource,\n TeamResource,\n TokensResource,\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 * 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 }\n}\n"]}
1
+ {"version":3,"sources":["../src/schemas/common.ts","../src/schemas/alert.ts","../src/errors/base.ts","../src/errors/http.ts","../src/errors/validation.ts","../src/resources/base.ts","../src/resources/alert-integrations.ts","../src/resources/alert-rules.ts","../src/schemas/team.ts","../src/schemas/invitation.ts","../src/schemas/user.ts","../src/resources/auth.ts","../src/schemas/event.ts","../src/schemas/issue.ts","../src/schemas/member.ts","../src/schemas/project.ts","../src/schemas/session.ts","../src/schemas/sourcemap.ts","../src/schemas/token.ts","../src/resources/events.ts","../src/schemas/version.ts","../src/resources/health.ts","../src/resources/invitations.ts","../src/resources/issues.ts","../src/resources/members.ts","../src/resources/projects.ts","../src/resources/sessions.ts","../src/resources/sourcemaps.ts","../src/resources/team.ts","../src/resources/tokens.ts","../src/utils/http.ts","../src/client.ts"],"names":["z","ky","isHTTPError"],"mappings":"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","file":"index.cjs","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(['digest_order', 'last_seen']);\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\n */\nexport const uuidSchema = z.string().uuid();\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 * 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","/**\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 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 { 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 { 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","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 { z } from 'zod';\nimport { dateTimeSchema, 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: uuidSchema,\n issue_id: uuidSchema,\n title: z.string(),\n timestamp: dateTimeSchema,\n level: z.string(),\n platform: z.string(),\n release: z.string(),\n environment: 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: uuidSchema,\n issue_id: uuidSchema,\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 data: z.record(z.string(), z.any()), // Full Sentry event JSON\n});\n","import { z } from 'zod';\nimport { dateTimeSchema, uuidSchema } from './common.js';\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 first_seen: dateTimeSchema,\n last_seen: dateTimeSchema,\n event_count: z.number().int(),\n level: z.string().nullable(),\n platform: z.string().nullable(),\n is_resolved: z.boolean(),\n is_muted: z.boolean(),\n});\n\n/**\n * Update issue state request schema\n */\nexport const updateIssueStateSchema = z.object({\n is_resolved: z.boolean().optional(),\n is_muted: z.boolean().optional(),\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});\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});\n","import { z } from 'zod';\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 releaseHealthSchema = z.array(releaseHealthRowSchema);\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 * 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 {\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 {\n issueSchema,\n offsetPaginatedResponseSchema,\n updateIssueStateSchema,\n} from '../schemas/index.js';\nimport type {\n Issue,\n ListIssuesOptions,\n OffsetPaginatedResponse,\n UpdateIssueState,\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\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 (resolve, mute, etc.)\n */\n async updateState(\n projectId: number,\n issueId: string,\n input: UpdateIssueState,\n ): Promise<Issue> {\n // Validate input\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 * 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","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 { releaseHealthSchema } from '../schemas/session.js';\nimport type { ReleaseHealth } 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.\n * @param projectId - Project ID\n * @param period - Time window (e.g. '24h', '7d'). Defaults to '24h'.\n */\n async stats(projectId: number, period?: string): Promise<ReleaseHealth> {\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/stats`, { searchParams })\n .json();\n\n return this.validate(data, releaseHealthSchema);\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 { 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 (masked)\n */\n async get(id: number): Promise<AuthToken> {\n const data = await this.http.get(`api/tokens/${id}`).json();\n return this.validate(data, authTokenSchema);\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 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 AlertIntegrationsResource,\n AlertRulesResource,\n AuthResource,\n EventsResource,\n HealthResource,\n InvitationsResource,\n IssuesResource,\n MembersResource,\n ProjectsResource,\n SessionsResource,\n SourceMapsResource,\n TeamResource,\n TokensResource,\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 * 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.health = new HealthResource(this.http);\n }\n}\n"]}
package/dist/index.d.cts CHANGED
@@ -277,6 +277,11 @@ declare class AuthResource extends BaseResource {
277
277
  acceptInvitation(input: AcceptInvitation): Promise<LoginResult>;
278
278
  }
279
279
 
280
+ declare const serverVersionSchema: z.ZodObject<{
281
+ version: z.ZodString;
282
+ }, z.core.$strip>;
283
+ type ServerVersion = z.infer<typeof serverVersionSchema>;
284
+
280
285
  declare const sortOrderSchema: z.ZodEnum<{
281
286
  asc: "asc";
282
287
  desc: "desc";
@@ -433,6 +438,32 @@ type Project = z.infer<typeof projectSchema>;
433
438
  type CreateProject = z.infer<typeof createProjectSchema>;
434
439
  type UpdateProject = z.infer<typeof updateProjectSchema>;
435
440
 
441
+ declare const releaseHealthRowSchema: z.ZodObject<{
442
+ release: z.ZodString;
443
+ environment: z.ZodString;
444
+ total: z.ZodNumber;
445
+ errored: z.ZodNumber;
446
+ crashed: z.ZodNumber;
447
+ abnormal: z.ZodNumber;
448
+ healthy: z.ZodNumber;
449
+ crash_free_sessions_rate: z.ZodNullable<z.ZodNumber>;
450
+ crash_free_users_rate: z.ZodNullable<z.ZodNumber>;
451
+ }, z.core.$strip>;
452
+ declare const releaseHealthSchema: z.ZodArray<z.ZodObject<{
453
+ release: z.ZodString;
454
+ environment: z.ZodString;
455
+ total: z.ZodNumber;
456
+ errored: z.ZodNumber;
457
+ crashed: z.ZodNumber;
458
+ abnormal: z.ZodNumber;
459
+ healthy: z.ZodNumber;
460
+ crash_free_sessions_rate: z.ZodNullable<z.ZodNumber>;
461
+ crash_free_users_rate: z.ZodNullable<z.ZodNumber>;
462
+ }, z.core.$strip>>;
463
+
464
+ type ReleaseHealthRow = z.infer<typeof releaseHealthRowSchema>;
465
+ type ReleaseHealth = z.infer<typeof releaseHealthSchema>;
466
+
436
467
  declare const chunkUploadCapabilitySchema: z.ZodObject<{
437
468
  url: z.ZodString;
438
469
  chunkSize: z.ZodNumber;
@@ -527,6 +558,10 @@ declare class EventsResource extends BaseResource {
527
558
  get(projectId: number, issueId: string, eventId: string): Promise<EventDetail>;
528
559
  }
529
560
 
561
+ declare class HealthResource extends BaseResource {
562
+ getVersion(): Promise<ServerVersion>;
563
+ }
564
+
530
565
  declare class InvitationsResource extends BaseResource {
531
566
  create(input: CreateInvitation): Promise<Invitation>;
532
567
  list(): Promise<Invitation[]>;
@@ -554,6 +589,10 @@ declare class ProjectsResource extends BaseResource {
554
589
  delete(id: number): Promise<void>;
555
590
  }
556
591
 
592
+ declare class SessionsResource extends BaseResource {
593
+ stats(projectId: number, period?: string): Promise<ReleaseHealth>;
594
+ }
595
+
557
596
  declare class SourceMapsResource extends BaseResource {
558
597
  getChunkUploadCapability(orgSlug: string): Promise<ChunkUploadCapability>;
559
598
  uploadChunks(orgSlug: string, chunks: {
@@ -590,6 +629,8 @@ declare class RustrakClient {
590
629
  readonly team: TeamResource;
591
630
  readonly invitations: InvitationsResource;
592
631
  readonly members: MembersResource;
632
+ readonly sessions: SessionsResource;
633
+ readonly health: HealthResource;
593
634
  constructor(config: ClientConfig);
594
635
  }
595
636
 
@@ -633,4 +674,4 @@ declare class ValidationError extends RustrakError {
633
674
  getValidationDetails(): string;
634
675
  }
635
676
 
636
- export { type AcceptInvitation, type AlertHistory, type AlertIntegration, type AlertRule, type AlertRuleChannelInput, type AlertStatus, type AlertType, type ApiError, type AssembleInput, type AssembleResponse, type AuthResponse, type AuthToken, type AuthTokenCreated, AuthenticationError, AuthorizationError, BadRequestError, type ChannelType, type ChunkUploadCapability, type ClientConfig, type CreateAlertIntegration, type CreateAlertRule, type CreateAuthToken, type CreateInvitation, type CreateNotificationChannel, type CreateProject, type Event, type EventDetail, type GlobalRole, type Invitation, type InvitationInfo, type Issue, type IssueFilter, type IssueSort, type ListAlertHistoryOptions, type ListEventsOptions, type ListIssuesOptions, type ListProjectsOptions, type ListSourceMapsResponse, type LoginRequest, type LoginResult, NetworkError, NotFoundError, type NotificationChannel, type OffsetPaginatedResponse, type PaginatedResponse, type Project, type ProjectMember, type ProjectRole, type ProviderType, RateLimitError, type RegisterRequest, type RoutingOverride, RustrakClient, RustrakError, ServerError, type SortOrder, type SourceMapFile, type TeamMember, type TestChannelResponse, type TestIntegrationBody, type UpdateAlertIntegration, type UpdateAlertRule, type UpdateIssueState, type UpdateNotificationChannel, type UpdateProject, type UpdateUserRole, type UpsertProjectMember, type User, ValidationError };
677
+ export { type AcceptInvitation, type AlertHistory, type AlertIntegration, type AlertRule, type AlertRuleChannelInput, type AlertStatus, type AlertType, type ApiError, type AssembleInput, type AssembleResponse, type AuthResponse, type AuthToken, type AuthTokenCreated, AuthenticationError, AuthorizationError, BadRequestError, type ChannelType, type ChunkUploadCapability, type ClientConfig, type CreateAlertIntegration, type CreateAlertRule, type CreateAuthToken, type CreateInvitation, type CreateNotificationChannel, type CreateProject, type Event, type EventDetail, type GlobalRole, type Invitation, type InvitationInfo, type Issue, type IssueFilter, type IssueSort, type ListAlertHistoryOptions, type ListEventsOptions, type ListIssuesOptions, type ListProjectsOptions, type ListSourceMapsResponse, type LoginRequest, type LoginResult, NetworkError, NotFoundError, type NotificationChannel, type OffsetPaginatedResponse, type PaginatedResponse, type Project, type ProjectMember, type ProjectRole, type ProviderType, RateLimitError, type RegisterRequest, type ReleaseHealth, type ReleaseHealthRow, type RoutingOverride, RustrakClient, RustrakError, ServerError, type ServerVersion, type SortOrder, type SourceMapFile, type TeamMember, type TestChannelResponse, type TestIntegrationBody, type UpdateAlertIntegration, type UpdateAlertRule, type UpdateIssueState, type UpdateNotificationChannel, type UpdateProject, type UpdateUserRole, type UpsertProjectMember, type User, ValidationError };
package/dist/index.d.ts CHANGED
@@ -277,6 +277,11 @@ declare class AuthResource extends BaseResource {
277
277
  acceptInvitation(input: AcceptInvitation): Promise<LoginResult>;
278
278
  }
279
279
 
280
+ declare const serverVersionSchema: z.ZodObject<{
281
+ version: z.ZodString;
282
+ }, z.core.$strip>;
283
+ type ServerVersion = z.infer<typeof serverVersionSchema>;
284
+
280
285
  declare const sortOrderSchema: z.ZodEnum<{
281
286
  asc: "asc";
282
287
  desc: "desc";
@@ -433,6 +438,32 @@ type Project = z.infer<typeof projectSchema>;
433
438
  type CreateProject = z.infer<typeof createProjectSchema>;
434
439
  type UpdateProject = z.infer<typeof updateProjectSchema>;
435
440
 
441
+ declare const releaseHealthRowSchema: z.ZodObject<{
442
+ release: z.ZodString;
443
+ environment: z.ZodString;
444
+ total: z.ZodNumber;
445
+ errored: z.ZodNumber;
446
+ crashed: z.ZodNumber;
447
+ abnormal: z.ZodNumber;
448
+ healthy: z.ZodNumber;
449
+ crash_free_sessions_rate: z.ZodNullable<z.ZodNumber>;
450
+ crash_free_users_rate: z.ZodNullable<z.ZodNumber>;
451
+ }, z.core.$strip>;
452
+ declare const releaseHealthSchema: z.ZodArray<z.ZodObject<{
453
+ release: z.ZodString;
454
+ environment: z.ZodString;
455
+ total: z.ZodNumber;
456
+ errored: z.ZodNumber;
457
+ crashed: z.ZodNumber;
458
+ abnormal: z.ZodNumber;
459
+ healthy: z.ZodNumber;
460
+ crash_free_sessions_rate: z.ZodNullable<z.ZodNumber>;
461
+ crash_free_users_rate: z.ZodNullable<z.ZodNumber>;
462
+ }, z.core.$strip>>;
463
+
464
+ type ReleaseHealthRow = z.infer<typeof releaseHealthRowSchema>;
465
+ type ReleaseHealth = z.infer<typeof releaseHealthSchema>;
466
+
436
467
  declare const chunkUploadCapabilitySchema: z.ZodObject<{
437
468
  url: z.ZodString;
438
469
  chunkSize: z.ZodNumber;
@@ -527,6 +558,10 @@ declare class EventsResource extends BaseResource {
527
558
  get(projectId: number, issueId: string, eventId: string): Promise<EventDetail>;
528
559
  }
529
560
 
561
+ declare class HealthResource extends BaseResource {
562
+ getVersion(): Promise<ServerVersion>;
563
+ }
564
+
530
565
  declare class InvitationsResource extends BaseResource {
531
566
  create(input: CreateInvitation): Promise<Invitation>;
532
567
  list(): Promise<Invitation[]>;
@@ -554,6 +589,10 @@ declare class ProjectsResource extends BaseResource {
554
589
  delete(id: number): Promise<void>;
555
590
  }
556
591
 
592
+ declare class SessionsResource extends BaseResource {
593
+ stats(projectId: number, period?: string): Promise<ReleaseHealth>;
594
+ }
595
+
557
596
  declare class SourceMapsResource extends BaseResource {
558
597
  getChunkUploadCapability(orgSlug: string): Promise<ChunkUploadCapability>;
559
598
  uploadChunks(orgSlug: string, chunks: {
@@ -590,6 +629,8 @@ declare class RustrakClient {
590
629
  readonly team: TeamResource;
591
630
  readonly invitations: InvitationsResource;
592
631
  readonly members: MembersResource;
632
+ readonly sessions: SessionsResource;
633
+ readonly health: HealthResource;
593
634
  constructor(config: ClientConfig);
594
635
  }
595
636
 
@@ -633,4 +674,4 @@ declare class ValidationError extends RustrakError {
633
674
  getValidationDetails(): string;
634
675
  }
635
676
 
636
- export { type AcceptInvitation, type AlertHistory, type AlertIntegration, type AlertRule, type AlertRuleChannelInput, type AlertStatus, type AlertType, type ApiError, type AssembleInput, type AssembleResponse, type AuthResponse, type AuthToken, type AuthTokenCreated, AuthenticationError, AuthorizationError, BadRequestError, type ChannelType, type ChunkUploadCapability, type ClientConfig, type CreateAlertIntegration, type CreateAlertRule, type CreateAuthToken, type CreateInvitation, type CreateNotificationChannel, type CreateProject, type Event, type EventDetail, type GlobalRole, type Invitation, type InvitationInfo, type Issue, type IssueFilter, type IssueSort, type ListAlertHistoryOptions, type ListEventsOptions, type ListIssuesOptions, type ListProjectsOptions, type ListSourceMapsResponse, type LoginRequest, type LoginResult, NetworkError, NotFoundError, type NotificationChannel, type OffsetPaginatedResponse, type PaginatedResponse, type Project, type ProjectMember, type ProjectRole, type ProviderType, RateLimitError, type RegisterRequest, type RoutingOverride, RustrakClient, RustrakError, ServerError, type SortOrder, type SourceMapFile, type TeamMember, type TestChannelResponse, type TestIntegrationBody, type UpdateAlertIntegration, type UpdateAlertRule, type UpdateIssueState, type UpdateNotificationChannel, type UpdateProject, type UpdateUserRole, type UpsertProjectMember, type User, ValidationError };
677
+ export { type AcceptInvitation, type AlertHistory, type AlertIntegration, type AlertRule, type AlertRuleChannelInput, type AlertStatus, type AlertType, type ApiError, type AssembleInput, type AssembleResponse, type AuthResponse, type AuthToken, type AuthTokenCreated, AuthenticationError, AuthorizationError, BadRequestError, type ChannelType, type ChunkUploadCapability, type ClientConfig, type CreateAlertIntegration, type CreateAlertRule, type CreateAuthToken, type CreateInvitation, type CreateNotificationChannel, type CreateProject, type Event, type EventDetail, type GlobalRole, type Invitation, type InvitationInfo, type Issue, type IssueFilter, type IssueSort, type ListAlertHistoryOptions, type ListEventsOptions, type ListIssuesOptions, type ListProjectsOptions, type ListSourceMapsResponse, type LoginRequest, type LoginResult, NetworkError, NotFoundError, type NotificationChannel, type OffsetPaginatedResponse, type PaginatedResponse, type Project, type ProjectMember, type ProjectRole, type ProviderType, RateLimitError, type RegisterRequest, type ReleaseHealth, type ReleaseHealthRow, type RoutingOverride, RustrakClient, RustrakError, ServerError, type ServerVersion, type SortOrder, type SourceMapFile, type TeamMember, type TestChannelResponse, type TestIntegrationBody, type UpdateAlertIntegration, type UpdateAlertRule, type UpdateIssueState, type UpdateNotificationChannel, type UpdateProject, type UpdateUserRole, type UpsertProjectMember, type User, ValidationError };
package/dist/index.js CHANGED
@@ -560,6 +560,18 @@ var createProjectSchema = z.object({
560
560
  var updateProjectSchema = z.object({
561
561
  name: z.string().min(1).optional()
562
562
  });
563
+ var releaseHealthRowSchema = z.object({
564
+ release: z.string(),
565
+ environment: z.string(),
566
+ total: z.number().int(),
567
+ errored: z.number().int(),
568
+ crashed: z.number().int(),
569
+ abnormal: z.number().int(),
570
+ healthy: z.number().int(),
571
+ crash_free_sessions_rate: z.number().nullable(),
572
+ crash_free_users_rate: z.number().nullable()
573
+ });
574
+ var releaseHealthSchema = z.array(releaseHealthRowSchema);
563
575
  var chunkUploadCapabilitySchema = z.object({
564
576
  url: z.string(),
565
577
  chunkSize: z.number().int(),
@@ -627,6 +639,17 @@ var EventsResource = class extends BaseResource {
627
639
  return this.validate(data, eventDetailSchema);
628
640
  }
629
641
  };
642
+ var serverVersionSchema = z.object({
643
+ version: z.string()
644
+ });
645
+
646
+ // src/resources/health.ts
647
+ var HealthResource = class extends BaseResource {
648
+ async getVersion() {
649
+ const data = await this.http.get("health/version").json();
650
+ return this.validate(data, serverVersionSchema);
651
+ }
652
+ };
630
653
 
631
654
  // src/resources/invitations.ts
632
655
  var InvitationsResource = class extends BaseResource {
@@ -788,6 +811,23 @@ var ProjectsResource = class extends BaseResource {
788
811
  }
789
812
  };
790
813
 
814
+ // src/resources/sessions.ts
815
+ var SessionsResource = class extends BaseResource {
816
+ /**
817
+ * Get per-release health stats for a project.
818
+ * @param projectId - Project ID
819
+ * @param period - Time window (e.g. '24h', '7d'). Defaults to '24h'.
820
+ */
821
+ async stats(projectId, period) {
822
+ const searchParams = {};
823
+ if (period) {
824
+ searchParams.period = period;
825
+ }
826
+ const data = await this.http.get(`api/projects/${projectId}/sessions/stats`, { searchParams }).json();
827
+ return this.validate(data, releaseHealthSchema);
828
+ }
829
+ };
830
+
791
831
  // src/resources/sourcemaps.ts
792
832
  var SourceMapsResource = class extends BaseResource {
793
833
  /**
@@ -1010,6 +1050,14 @@ var RustrakClient = class {
1010
1050
  * Project Members API resource (per-project membership and roles)
1011
1051
  */
1012
1052
  members;
1053
+ /**
1054
+ * Sessions API resource (release health)
1055
+ */
1056
+ sessions;
1057
+ /**
1058
+ * Health API resource (version info)
1059
+ */
1060
+ health;
1013
1061
  /**
1014
1062
  * Create a new Rustrak API client
1015
1063
  *
@@ -1028,6 +1076,8 @@ var RustrakClient = class {
1028
1076
  this.team = new TeamResource(this.http);
1029
1077
  this.invitations = new InvitationsResource(this.http);
1030
1078
  this.members = new MembersResource(this.http);
1079
+ this.sessions = new SessionsResource(this.http);
1080
+ this.health = new HealthResource(this.http);
1031
1081
  }
1032
1082
  };
1033
1083
 
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/schemas/common.ts","../src/schemas/alert.ts","../src/errors/base.ts","../src/errors/http.ts","../src/errors/validation.ts","../src/resources/base.ts","../src/resources/alert-integrations.ts","../src/resources/alert-rules.ts","../src/schemas/team.ts","../src/schemas/invitation.ts","../src/schemas/user.ts","../src/resources/auth.ts","../src/schemas/event.ts","../src/schemas/issue.ts","../src/schemas/member.ts","../src/schemas/project.ts","../src/schemas/sourcemap.ts","../src/schemas/token.ts","../src/resources/events.ts","../src/resources/invitations.ts","../src/resources/issues.ts","../src/resources/members.ts","../src/resources/projects.ts","../src/resources/sourcemaps.ts","../src/resources/team.ts","../src/resources/tokens.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(['digest_order', 'last_seen']);\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\n */\nexport const uuidSchema = z.string().uuid();\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 * 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","/**\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 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 { 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 { 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","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 { z } from 'zod';\nimport { dateTimeSchema, 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: uuidSchema,\n issue_id: uuidSchema,\n title: z.string(),\n timestamp: dateTimeSchema,\n level: z.string(),\n platform: z.string(),\n release: z.string(),\n environment: 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: uuidSchema,\n issue_id: uuidSchema,\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 data: z.record(z.string(), z.any()), // Full Sentry event JSON\n});\n","import { z } from 'zod';\nimport { dateTimeSchema, uuidSchema } from './common.js';\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 first_seen: dateTimeSchema,\n last_seen: dateTimeSchema,\n event_count: z.number().int(),\n level: z.string().nullable(),\n platform: z.string().nullable(),\n is_resolved: z.boolean(),\n is_muted: z.boolean(),\n});\n\n/**\n * Update issue state request schema\n */\nexport const updateIssueStateSchema = z.object({\n is_resolved: z.boolean().optional(),\n is_muted: z.boolean().optional(),\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});\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});\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 * 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 {\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 { 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 {\n issueSchema,\n offsetPaginatedResponseSchema,\n updateIssueStateSchema,\n} from '../schemas/index.js';\nimport type {\n Issue,\n ListIssuesOptions,\n OffsetPaginatedResponse,\n UpdateIssueState,\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\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 (resolve, mute, etc.)\n */\n async updateState(\n projectId: number,\n issueId: string,\n input: UpdateIssueState,\n ): Promise<Issue> {\n // Validate input\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 * 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","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 {\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 { 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 (masked)\n */\n async get(id: number): Promise<AuthToken> {\n const data = await this.http.get(`api/tokens/${id}`).json();\n return this.validate(data, authTokenSchema);\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 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 AlertIntegrationsResource,\n AlertRulesResource,\n AuthResource,\n EventsResource,\n InvitationsResource,\n IssuesResource,\n MembersResource,\n ProjectsResource,\n SourceMapsResource,\n TeamResource,\n TokensResource,\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 * 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 }\n}\n"]}
1
+ {"version":3,"sources":["../src/schemas/common.ts","../src/schemas/alert.ts","../src/errors/base.ts","../src/errors/http.ts","../src/errors/validation.ts","../src/resources/base.ts","../src/resources/alert-integrations.ts","../src/resources/alert-rules.ts","../src/schemas/team.ts","../src/schemas/invitation.ts","../src/schemas/user.ts","../src/resources/auth.ts","../src/schemas/event.ts","../src/schemas/issue.ts","../src/schemas/member.ts","../src/schemas/project.ts","../src/schemas/session.ts","../src/schemas/sourcemap.ts","../src/schemas/token.ts","../src/resources/events.ts","../src/schemas/version.ts","../src/resources/health.ts","../src/resources/invitations.ts","../src/resources/issues.ts","../src/resources/members.ts","../src/resources/projects.ts","../src/resources/sessions.ts","../src/resources/sourcemaps.ts","../src/resources/team.ts","../src/resources/tokens.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(['digest_order', 'last_seen']);\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\n */\nexport const uuidSchema = z.string().uuid();\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 * 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","/**\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 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 { 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 { 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","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 { z } from 'zod';\nimport { dateTimeSchema, 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: uuidSchema,\n issue_id: uuidSchema,\n title: z.string(),\n timestamp: dateTimeSchema,\n level: z.string(),\n platform: z.string(),\n release: z.string(),\n environment: 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: uuidSchema,\n issue_id: uuidSchema,\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 data: z.record(z.string(), z.any()), // Full Sentry event JSON\n});\n","import { z } from 'zod';\nimport { dateTimeSchema, uuidSchema } from './common.js';\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 first_seen: dateTimeSchema,\n last_seen: dateTimeSchema,\n event_count: z.number().int(),\n level: z.string().nullable(),\n platform: z.string().nullable(),\n is_resolved: z.boolean(),\n is_muted: z.boolean(),\n});\n\n/**\n * Update issue state request schema\n */\nexport const updateIssueStateSchema = z.object({\n is_resolved: z.boolean().optional(),\n is_muted: z.boolean().optional(),\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});\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});\n","import { z } from 'zod';\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 releaseHealthSchema = z.array(releaseHealthRowSchema);\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 * 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 {\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 {\n issueSchema,\n offsetPaginatedResponseSchema,\n updateIssueStateSchema,\n} from '../schemas/index.js';\nimport type {\n Issue,\n ListIssuesOptions,\n OffsetPaginatedResponse,\n UpdateIssueState,\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\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 (resolve, mute, etc.)\n */\n async updateState(\n projectId: number,\n issueId: string,\n input: UpdateIssueState,\n ): Promise<Issue> {\n // Validate input\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 * 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","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 { releaseHealthSchema } from '../schemas/session.js';\nimport type { ReleaseHealth } 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.\n * @param projectId - Project ID\n * @param period - Time window (e.g. '24h', '7d'). Defaults to '24h'.\n */\n async stats(projectId: number, period?: string): Promise<ReleaseHealth> {\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/stats`, { searchParams })\n .json();\n\n return this.validate(data, releaseHealthSchema);\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 { 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 (masked)\n */\n async get(id: number): Promise<AuthToken> {\n const data = await this.http.get(`api/tokens/${id}`).json();\n return this.validate(data, authTokenSchema);\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 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 AlertIntegrationsResource,\n AlertRulesResource,\n AuthResource,\n EventsResource,\n HealthResource,\n InvitationsResource,\n IssuesResource,\n MembersResource,\n ProjectsResource,\n SessionsResource,\n SourceMapsResource,\n TeamResource,\n TokensResource,\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 * 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.health = new HealthResource(this.http);\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rustrak/client",
3
- "version": "0.3.0",
3
+ "version": "0.3.2",
4
4
  "description": "Type-safe TypeScript client for the Rustrak self-hosted error tracking API",
5
5
  "homepage": "https://rustrak.github.io/rustrak/sdks/client",
6
6
  "repository": {