@rustrak/client 0.1.3 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +81 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +53 -1
- package/dist/index.d.ts +53 -1
- package/dist/index.js +81 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -477,6 +477,30 @@ var createProjectSchema = zod.z.object({
|
|
|
477
477
|
var updateProjectSchema = zod.z.object({
|
|
478
478
|
name: zod.z.string().min(1).optional()
|
|
479
479
|
});
|
|
480
|
+
var chunkUploadCapabilitySchema = zod.z.object({
|
|
481
|
+
url: zod.z.string(),
|
|
482
|
+
chunkSize: zod.z.number().int(),
|
|
483
|
+
chunksPerRequest: zod.z.number().int(),
|
|
484
|
+
maxRequestSize: zod.z.number().int(),
|
|
485
|
+
hashAlgorithm: zod.z.string(),
|
|
486
|
+
accept: zod.z.array(zod.z.string()),
|
|
487
|
+
concurrency: zod.z.number().int().optional()
|
|
488
|
+
});
|
|
489
|
+
var assembleResponseSchema = zod.z.object({
|
|
490
|
+
state: zod.z.string(),
|
|
491
|
+
missingChunks: zod.z.array(zod.z.string()),
|
|
492
|
+
detail: zod.z.string().optional()
|
|
493
|
+
});
|
|
494
|
+
var sourceMapFileSchema = zod.z.object({
|
|
495
|
+
debugId: zod.z.string(),
|
|
496
|
+
fileType: zod.z.string(),
|
|
497
|
+
size: zod.z.number().int(),
|
|
498
|
+
timesUsed: zod.z.number().int(),
|
|
499
|
+
dateUploaded: zod.z.string()
|
|
500
|
+
});
|
|
501
|
+
var listSourceMapsResponseSchema = zod.z.object({
|
|
502
|
+
data: zod.z.array(sourceMapFileSchema)
|
|
503
|
+
});
|
|
480
504
|
var authTokenSchema = zod.z.object({
|
|
481
505
|
id: zod.z.number().int(),
|
|
482
506
|
token_prefix: zod.z.string(),
|
|
@@ -623,6 +647,58 @@ var ProjectsResource = class extends BaseResource {
|
|
|
623
647
|
}
|
|
624
648
|
};
|
|
625
649
|
|
|
650
|
+
// src/resources/sourcemaps.ts
|
|
651
|
+
var SourceMapsResource = class extends BaseResource {
|
|
652
|
+
/**
|
|
653
|
+
* Get chunk upload capabilities for an organization.
|
|
654
|
+
* Returns the upload URL, chunk size limits, and accepted artifact types.
|
|
655
|
+
*/
|
|
656
|
+
async getChunkUploadCapability(orgSlug) {
|
|
657
|
+
const data = await this.http.get(`api/0/organizations/${orgSlug}/chunk-upload/`).json();
|
|
658
|
+
return this.validate(data, chunkUploadCapabilitySchema);
|
|
659
|
+
}
|
|
660
|
+
/**
|
|
661
|
+
* Upload chunks as multipart/form-data, batching by `chunksPerRequest` (default 64).
|
|
662
|
+
* Each part's field name must be the pre-computed SHA-1 hash of its content — the server
|
|
663
|
+
* rejects mismatches with 400. Callers must supply the hash (also needed for assembleBundle).
|
|
664
|
+
*/
|
|
665
|
+
async uploadChunks(orgSlug, chunks, chunksPerRequest = 64) {
|
|
666
|
+
if (!Number.isInteger(chunksPerRequest) || chunksPerRequest <= 0) {
|
|
667
|
+
throw new Error("chunksPerRequest must be a positive integer");
|
|
668
|
+
}
|
|
669
|
+
for (let i = 0; i < chunks.length; i += chunksPerRequest) {
|
|
670
|
+
const batch = chunks.slice(i, i + chunksPerRequest);
|
|
671
|
+
const form = new FormData();
|
|
672
|
+
for (const chunk of batch) {
|
|
673
|
+
form.append(chunk.hash, chunk.data);
|
|
674
|
+
}
|
|
675
|
+
await this.http.post(`api/0/organizations/${orgSlug}/chunk-upload/`, {
|
|
676
|
+
body: form
|
|
677
|
+
});
|
|
678
|
+
}
|
|
679
|
+
}
|
|
680
|
+
/**
|
|
681
|
+
* Trigger assembly of a previously uploaded artifact bundle.
|
|
682
|
+
*
|
|
683
|
+
* @returns The assembly state. Poll until `state === "ok"` or `state === "error"`.
|
|
684
|
+
* When `state === "not_found"` the `missingChunks` array lists what
|
|
685
|
+
* still needs uploading via `uploadChunks`.
|
|
686
|
+
*/
|
|
687
|
+
async assembleBundle(orgSlug, input) {
|
|
688
|
+
const data = await this.http.post(`api/0/organizations/${orgSlug}/artifactbundle/assemble/`, {
|
|
689
|
+
json: input
|
|
690
|
+
}).json();
|
|
691
|
+
return this.validate(data, assembleResponseSchema);
|
|
692
|
+
}
|
|
693
|
+
/**
|
|
694
|
+
* List all source map files uploaded for a project.
|
|
695
|
+
*/
|
|
696
|
+
async list(orgSlug, projectSlug) {
|
|
697
|
+
const data = await this.http.get(`api/0/projects/${orgSlug}/${projectSlug}/files/source-maps/`).json();
|
|
698
|
+
return this.validate(data, listSourceMapsResponseSchema);
|
|
699
|
+
}
|
|
700
|
+
};
|
|
701
|
+
|
|
626
702
|
// src/resources/tokens.ts
|
|
627
703
|
var TokensResource = class extends BaseResource {
|
|
628
704
|
/**
|
|
@@ -750,6 +826,10 @@ var RustrakClient = class {
|
|
|
750
826
|
* Alert Rules API resource (per-project alert configuration)
|
|
751
827
|
*/
|
|
752
828
|
alertRules;
|
|
829
|
+
/**
|
|
830
|
+
* Source Maps API resource (sentry-cli artifact bundle upload protocol)
|
|
831
|
+
*/
|
|
832
|
+
sourceMaps;
|
|
753
833
|
/**
|
|
754
834
|
* Create a new Rustrak API client
|
|
755
835
|
*
|
|
@@ -764,6 +844,7 @@ var RustrakClient = class {
|
|
|
764
844
|
this.tokens = new TokensResource(this.http);
|
|
765
845
|
this.alertChannels = new AlertChannelsResource(this.http);
|
|
766
846
|
this.alertRules = new AlertRulesResource(this.http);
|
|
847
|
+
this.sourceMaps = new SourceMapsResource(this.http);
|
|
767
848
|
}
|
|
768
849
|
};
|
|
769
850
|
|
package/dist/index.cjs.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-channels.ts","../src/resources/alert-rules.ts","../src/schemas/user.ts","../src/resources/auth.ts","../src/schemas/event.ts","../src/schemas/issue.ts","../src/schemas/project.ts","../src/schemas/token.ts","../src/resources/events.ts","../src/resources/issues.ts","../src/resources/projects.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 * Channel type enum\n */\nexport const channelTypeSchema = z.enum(['webhook', 'email', 'slack']);\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 * Notification channel response schema\n */\nexport const notificationChannelSchema = z.object({\n id: z.number().int(),\n name: z.string(),\n channel_type: channelTypeSchema,\n config: z.record(z.string(), z.unknown()),\n is_enabled: z.boolean(),\n failure_count: z.number().int(),\n last_failure_at: dateTimeSchema.nullable(),\n last_failure_message: z.string().nullable(),\n last_success_at: dateTimeSchema.nullable(),\n created_at: dateTimeSchema,\n updated_at: dateTimeSchema,\n});\n\n/**\n * Create notification channel request schema\n */\nexport const createNotificationChannelSchema = z.object({\n name: z.string().min(1),\n channel_type: channelTypeSchema,\n config: z.record(z.string(), z.unknown()),\n is_enabled: z.boolean().optional(),\n});\n\n/**\n * Update notification channel request schema\n */\nexport const updateNotificationChannelSchema = z.object({\n name: z.string().min(1).optional(),\n config: z.record(z.string(), z.unknown()).optional(),\n is_enabled: z.boolean().optional(),\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 channel_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 channel_ids: z.array(z.number().int()).min(1),\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 channel_ids: z.array(z.number().int()).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 channel_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 * 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 createNotificationChannelSchema,\n notificationChannelSchema,\n testChannelResponseSchema,\n updateNotificationChannelSchema,\n} from '../schemas/alert.js';\nimport type {\n CreateNotificationChannel,\n NotificationChannel,\n TestChannelResponse,\n UpdateNotificationChannel,\n} from '../types/alert.js';\nimport { BaseResource } from './base.js';\n\n/**\n * Alert Channels API resource (global notification destinations)\n */\nexport class AlertChannelsResource extends BaseResource {\n /**\n * List all notification channels\n */\n async list(): Promise<NotificationChannel[]> {\n const data = await this.http.get('api/alert-channels').json();\n return this.validate(data, z.array(notificationChannelSchema));\n }\n\n /**\n * Get a single notification channel by ID\n */\n async get(id: number): Promise<NotificationChannel> {\n const data = await this.http.get(`api/alert-channels/${id}`).json();\n return this.validate(data, notificationChannelSchema);\n }\n\n /**\n * Create a new notification channel\n */\n async create(input: CreateNotificationChannel): Promise<NotificationChannel> {\n const validatedInput = this.validate(\n input,\n createNotificationChannelSchema,\n );\n\n const data = await this.http\n .post('api/alert-channels', { json: validatedInput })\n .json();\n\n return this.validate(data, notificationChannelSchema);\n }\n\n /**\n * Update an existing notification channel\n */\n async update(\n id: number,\n input: UpdateNotificationChannel,\n ): Promise<NotificationChannel> {\n const validatedInput = this.validate(\n input,\n updateNotificationChannelSchema,\n );\n\n const data = await this.http\n .patch(`api/alert-channels/${id}`, { json: validatedInput })\n .json();\n\n return this.validate(data, notificationChannelSchema);\n }\n\n /**\n * Delete a notification channel\n */\n async delete(id: number): Promise<void> {\n await this.http.delete(`api/alert-channels/${id}`);\n }\n\n /**\n * Send a test notification to verify channel configuration\n */\n async test(id: number): Promise<TestChannelResponse> {\n const data = await this.http.post(`api/alert-channels/${id}/test`).json();\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';\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 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(8),\n});\n\n/**\n * Register request schema\n */\nexport const registerRequestSchema = z.object({\n email: z.string().email(),\n password: z.string().min(8),\n});\n","import {\n authResponseSchema,\n loginRequestSchema,\n registerRequestSchema,\n userSchema,\n} from '../schemas/user.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","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, 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';\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 {\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 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 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 AlertChannelsResource,\n AlertRulesResource,\n AuthResource,\n EventsResource,\n IssuesResource,\n ProjectsResource,\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 Channels API resource (global notification destinations)\n */\n public readonly alertChannels: AlertChannelsResource;\n\n /**\n * Alert Rules API resource (per-project alert configuration)\n */\n public readonly alertRules: AlertRulesResource;\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.alertChannels = new AlertChannelsResource(this.http);\n this.alertRules = new AlertRulesResource(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-channels.ts","../src/resources/alert-rules.ts","../src/schemas/user.ts","../src/resources/auth.ts","../src/schemas/event.ts","../src/schemas/issue.ts","../src/schemas/project.ts","../src/schemas/sourcemap.ts","../src/schemas/token.ts","../src/resources/events.ts","../src/resources/issues.ts","../src/resources/projects.ts","../src/resources/sourcemaps.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 * Channel type enum\n */\nexport const channelTypeSchema = z.enum(['webhook', 'email', 'slack']);\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 * Notification channel response schema\n */\nexport const notificationChannelSchema = z.object({\n id: z.number().int(),\n name: z.string(),\n channel_type: channelTypeSchema,\n config: z.record(z.string(), z.unknown()),\n is_enabled: z.boolean(),\n failure_count: z.number().int(),\n last_failure_at: dateTimeSchema.nullable(),\n last_failure_message: z.string().nullable(),\n last_success_at: dateTimeSchema.nullable(),\n created_at: dateTimeSchema,\n updated_at: dateTimeSchema,\n});\n\n/**\n * Create notification channel request schema\n */\nexport const createNotificationChannelSchema = z.object({\n name: z.string().min(1),\n channel_type: channelTypeSchema,\n config: z.record(z.string(), z.unknown()),\n is_enabled: z.boolean().optional(),\n});\n\n/**\n * Update notification channel request schema\n */\nexport const updateNotificationChannelSchema = z.object({\n name: z.string().min(1).optional(),\n config: z.record(z.string(), z.unknown()).optional(),\n is_enabled: z.boolean().optional(),\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 channel_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 channel_ids: z.array(z.number().int()).min(1),\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 channel_ids: z.array(z.number().int()).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 channel_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 * 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 createNotificationChannelSchema,\n notificationChannelSchema,\n testChannelResponseSchema,\n updateNotificationChannelSchema,\n} from '../schemas/alert.js';\nimport type {\n CreateNotificationChannel,\n NotificationChannel,\n TestChannelResponse,\n UpdateNotificationChannel,\n} from '../types/alert.js';\nimport { BaseResource } from './base.js';\n\n/**\n * Alert Channels API resource (global notification destinations)\n */\nexport class AlertChannelsResource extends BaseResource {\n /**\n * List all notification channels\n */\n async list(): Promise<NotificationChannel[]> {\n const data = await this.http.get('api/alert-channels').json();\n return this.validate(data, z.array(notificationChannelSchema));\n }\n\n /**\n * Get a single notification channel by ID\n */\n async get(id: number): Promise<NotificationChannel> {\n const data = await this.http.get(`api/alert-channels/${id}`).json();\n return this.validate(data, notificationChannelSchema);\n }\n\n /**\n * Create a new notification channel\n */\n async create(input: CreateNotificationChannel): Promise<NotificationChannel> {\n const validatedInput = this.validate(\n input,\n createNotificationChannelSchema,\n );\n\n const data = await this.http\n .post('api/alert-channels', { json: validatedInput })\n .json();\n\n return this.validate(data, notificationChannelSchema);\n }\n\n /**\n * Update an existing notification channel\n */\n async update(\n id: number,\n input: UpdateNotificationChannel,\n ): Promise<NotificationChannel> {\n const validatedInput = this.validate(\n input,\n updateNotificationChannelSchema,\n );\n\n const data = await this.http\n .patch(`api/alert-channels/${id}`, { json: validatedInput })\n .json();\n\n return this.validate(data, notificationChannelSchema);\n }\n\n /**\n * Delete a notification channel\n */\n async delete(id: number): Promise<void> {\n await this.http.delete(`api/alert-channels/${id}`);\n }\n\n /**\n * Send a test notification to verify channel configuration\n */\n async test(id: number): Promise<TestChannelResponse> {\n const data = await this.http.post(`api/alert-channels/${id}/test`).json();\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';\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 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(8),\n});\n\n/**\n * Register request schema\n */\nexport const registerRequestSchema = z.object({\n email: z.string().email(),\n password: z.string().min(8),\n});\n","import {\n authResponseSchema,\n loginRequestSchema,\n registerRequestSchema,\n userSchema,\n} from '../schemas/user.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","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, 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 {\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 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 {\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 AlertChannelsResource,\n AlertRulesResource,\n AuthResource,\n EventsResource,\n IssuesResource,\n ProjectsResource,\n SourceMapsResource,\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 Channels API resource (global notification destinations)\n */\n public readonly alertChannels: AlertChannelsResource;\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 * 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.alertChannels = new AlertChannelsResource(this.http);\n this.alertRules = new AlertRulesResource(this.http);\n this.sourceMaps = new SourceMapsResource(this.http);\n }\n}\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -330,6 +330,47 @@ type Project = z.infer<typeof projectSchema>;
|
|
|
330
330
|
type CreateProject = z.infer<typeof createProjectSchema>;
|
|
331
331
|
type UpdateProject = z.infer<typeof updateProjectSchema>;
|
|
332
332
|
|
|
333
|
+
declare const chunkUploadCapabilitySchema: z.ZodObject<{
|
|
334
|
+
url: z.ZodString;
|
|
335
|
+
chunkSize: z.ZodNumber;
|
|
336
|
+
chunksPerRequest: z.ZodNumber;
|
|
337
|
+
maxRequestSize: z.ZodNumber;
|
|
338
|
+
hashAlgorithm: z.ZodString;
|
|
339
|
+
accept: z.ZodArray<z.ZodString>;
|
|
340
|
+
concurrency: z.ZodOptional<z.ZodNumber>;
|
|
341
|
+
}, z.core.$strip>;
|
|
342
|
+
declare const assembleResponseSchema: z.ZodObject<{
|
|
343
|
+
state: z.ZodString;
|
|
344
|
+
missingChunks: z.ZodArray<z.ZodString>;
|
|
345
|
+
detail: z.ZodOptional<z.ZodString>;
|
|
346
|
+
}, z.core.$strip>;
|
|
347
|
+
declare const sourceMapFileSchema: z.ZodObject<{
|
|
348
|
+
debugId: z.ZodString;
|
|
349
|
+
fileType: z.ZodString;
|
|
350
|
+
size: z.ZodNumber;
|
|
351
|
+
timesUsed: z.ZodNumber;
|
|
352
|
+
dateUploaded: z.ZodString;
|
|
353
|
+
}, z.core.$strip>;
|
|
354
|
+
declare const listSourceMapsResponseSchema: z.ZodObject<{
|
|
355
|
+
data: z.ZodArray<z.ZodObject<{
|
|
356
|
+
debugId: z.ZodString;
|
|
357
|
+
fileType: z.ZodString;
|
|
358
|
+
size: z.ZodNumber;
|
|
359
|
+
timesUsed: z.ZodNumber;
|
|
360
|
+
dateUploaded: z.ZodString;
|
|
361
|
+
}, z.core.$strip>>;
|
|
362
|
+
}, z.core.$strip>;
|
|
363
|
+
|
|
364
|
+
type ChunkUploadCapability = z.infer<typeof chunkUploadCapabilitySchema>;
|
|
365
|
+
type AssembleResponse = z.infer<typeof assembleResponseSchema>;
|
|
366
|
+
type SourceMapFile = z.infer<typeof sourceMapFileSchema>;
|
|
367
|
+
type ListSourceMapsResponse = z.infer<typeof listSourceMapsResponseSchema>;
|
|
368
|
+
interface AssembleInput {
|
|
369
|
+
checksum: string;
|
|
370
|
+
chunks: string[];
|
|
371
|
+
projects: string[];
|
|
372
|
+
}
|
|
373
|
+
|
|
333
374
|
declare const authTokenSchema: z.ZodObject<{
|
|
334
375
|
id: z.ZodNumber;
|
|
335
376
|
token_prefix: z.ZodString;
|
|
@@ -371,6 +412,16 @@ declare class ProjectsResource extends BaseResource {
|
|
|
371
412
|
delete(id: number): Promise<void>;
|
|
372
413
|
}
|
|
373
414
|
|
|
415
|
+
declare class SourceMapsResource extends BaseResource {
|
|
416
|
+
getChunkUploadCapability(orgSlug: string): Promise<ChunkUploadCapability>;
|
|
417
|
+
uploadChunks(orgSlug: string, chunks: {
|
|
418
|
+
hash: string;
|
|
419
|
+
data: Blob;
|
|
420
|
+
}[], chunksPerRequest?: number): Promise<void>;
|
|
421
|
+
assembleBundle(orgSlug: string, input: AssembleInput): Promise<AssembleResponse>;
|
|
422
|
+
list(orgSlug: string, projectSlug: string): Promise<ListSourceMapsResponse>;
|
|
423
|
+
}
|
|
424
|
+
|
|
374
425
|
declare class TokensResource extends BaseResource {
|
|
375
426
|
list(): Promise<AuthToken[]>;
|
|
376
427
|
get(id: number): Promise<AuthToken>;
|
|
@@ -387,6 +438,7 @@ declare class RustrakClient {
|
|
|
387
438
|
readonly tokens: TokensResource;
|
|
388
439
|
readonly alertChannels: AlertChannelsResource;
|
|
389
440
|
readonly alertRules: AlertRulesResource;
|
|
441
|
+
readonly sourceMaps: SourceMapsResource;
|
|
390
442
|
constructor(config: ClientConfig);
|
|
391
443
|
}
|
|
392
444
|
|
|
@@ -430,4 +482,4 @@ declare class ValidationError extends RustrakError {
|
|
|
430
482
|
getValidationDetails(): string;
|
|
431
483
|
}
|
|
432
484
|
|
|
433
|
-
export { type AlertHistory, type AlertRule, type AlertStatus, type AlertType, type ApiError, type AuthResponse, type AuthToken, type AuthTokenCreated, AuthenticationError, AuthorizationError, BadRequestError, type ChannelType, type ClientConfig, type CreateAlertRule, type CreateAuthToken, type CreateNotificationChannel, type CreateProject, type Event, type EventDetail, type Issue, type IssueFilter, type IssueSort, type ListAlertHistoryOptions, type ListEventsOptions, type ListIssuesOptions, type ListProjectsOptions, type LoginRequest, type LoginResult, NetworkError, NotFoundError, type NotificationChannel, type OffsetPaginatedResponse, type PaginatedResponse, type Project, RateLimitError, type RegisterRequest, RustrakClient, RustrakError, ServerError, type SortOrder, type TestChannelResponse, type UpdateAlertRule, type UpdateIssueState, type UpdateNotificationChannel, type UpdateProject, type User, ValidationError };
|
|
485
|
+
export { type AlertHistory, type AlertRule, 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 CreateAlertRule, type CreateAuthToken, type CreateNotificationChannel, type CreateProject, type Event, type EventDetail, 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, RateLimitError, type RegisterRequest, RustrakClient, RustrakError, ServerError, type SortOrder, type SourceMapFile, type TestChannelResponse, type UpdateAlertRule, type UpdateIssueState, type UpdateNotificationChannel, type UpdateProject, type User, ValidationError };
|
package/dist/index.d.ts
CHANGED
|
@@ -330,6 +330,47 @@ type Project = z.infer<typeof projectSchema>;
|
|
|
330
330
|
type CreateProject = z.infer<typeof createProjectSchema>;
|
|
331
331
|
type UpdateProject = z.infer<typeof updateProjectSchema>;
|
|
332
332
|
|
|
333
|
+
declare const chunkUploadCapabilitySchema: z.ZodObject<{
|
|
334
|
+
url: z.ZodString;
|
|
335
|
+
chunkSize: z.ZodNumber;
|
|
336
|
+
chunksPerRequest: z.ZodNumber;
|
|
337
|
+
maxRequestSize: z.ZodNumber;
|
|
338
|
+
hashAlgorithm: z.ZodString;
|
|
339
|
+
accept: z.ZodArray<z.ZodString>;
|
|
340
|
+
concurrency: z.ZodOptional<z.ZodNumber>;
|
|
341
|
+
}, z.core.$strip>;
|
|
342
|
+
declare const assembleResponseSchema: z.ZodObject<{
|
|
343
|
+
state: z.ZodString;
|
|
344
|
+
missingChunks: z.ZodArray<z.ZodString>;
|
|
345
|
+
detail: z.ZodOptional<z.ZodString>;
|
|
346
|
+
}, z.core.$strip>;
|
|
347
|
+
declare const sourceMapFileSchema: z.ZodObject<{
|
|
348
|
+
debugId: z.ZodString;
|
|
349
|
+
fileType: z.ZodString;
|
|
350
|
+
size: z.ZodNumber;
|
|
351
|
+
timesUsed: z.ZodNumber;
|
|
352
|
+
dateUploaded: z.ZodString;
|
|
353
|
+
}, z.core.$strip>;
|
|
354
|
+
declare const listSourceMapsResponseSchema: z.ZodObject<{
|
|
355
|
+
data: z.ZodArray<z.ZodObject<{
|
|
356
|
+
debugId: z.ZodString;
|
|
357
|
+
fileType: z.ZodString;
|
|
358
|
+
size: z.ZodNumber;
|
|
359
|
+
timesUsed: z.ZodNumber;
|
|
360
|
+
dateUploaded: z.ZodString;
|
|
361
|
+
}, z.core.$strip>>;
|
|
362
|
+
}, z.core.$strip>;
|
|
363
|
+
|
|
364
|
+
type ChunkUploadCapability = z.infer<typeof chunkUploadCapabilitySchema>;
|
|
365
|
+
type AssembleResponse = z.infer<typeof assembleResponseSchema>;
|
|
366
|
+
type SourceMapFile = z.infer<typeof sourceMapFileSchema>;
|
|
367
|
+
type ListSourceMapsResponse = z.infer<typeof listSourceMapsResponseSchema>;
|
|
368
|
+
interface AssembleInput {
|
|
369
|
+
checksum: string;
|
|
370
|
+
chunks: string[];
|
|
371
|
+
projects: string[];
|
|
372
|
+
}
|
|
373
|
+
|
|
333
374
|
declare const authTokenSchema: z.ZodObject<{
|
|
334
375
|
id: z.ZodNumber;
|
|
335
376
|
token_prefix: z.ZodString;
|
|
@@ -371,6 +412,16 @@ declare class ProjectsResource extends BaseResource {
|
|
|
371
412
|
delete(id: number): Promise<void>;
|
|
372
413
|
}
|
|
373
414
|
|
|
415
|
+
declare class SourceMapsResource extends BaseResource {
|
|
416
|
+
getChunkUploadCapability(orgSlug: string): Promise<ChunkUploadCapability>;
|
|
417
|
+
uploadChunks(orgSlug: string, chunks: {
|
|
418
|
+
hash: string;
|
|
419
|
+
data: Blob;
|
|
420
|
+
}[], chunksPerRequest?: number): Promise<void>;
|
|
421
|
+
assembleBundle(orgSlug: string, input: AssembleInput): Promise<AssembleResponse>;
|
|
422
|
+
list(orgSlug: string, projectSlug: string): Promise<ListSourceMapsResponse>;
|
|
423
|
+
}
|
|
424
|
+
|
|
374
425
|
declare class TokensResource extends BaseResource {
|
|
375
426
|
list(): Promise<AuthToken[]>;
|
|
376
427
|
get(id: number): Promise<AuthToken>;
|
|
@@ -387,6 +438,7 @@ declare class RustrakClient {
|
|
|
387
438
|
readonly tokens: TokensResource;
|
|
388
439
|
readonly alertChannels: AlertChannelsResource;
|
|
389
440
|
readonly alertRules: AlertRulesResource;
|
|
441
|
+
readonly sourceMaps: SourceMapsResource;
|
|
390
442
|
constructor(config: ClientConfig);
|
|
391
443
|
}
|
|
392
444
|
|
|
@@ -430,4 +482,4 @@ declare class ValidationError extends RustrakError {
|
|
|
430
482
|
getValidationDetails(): string;
|
|
431
483
|
}
|
|
432
484
|
|
|
433
|
-
export { type AlertHistory, type AlertRule, type AlertStatus, type AlertType, type ApiError, type AuthResponse, type AuthToken, type AuthTokenCreated, AuthenticationError, AuthorizationError, BadRequestError, type ChannelType, type ClientConfig, type CreateAlertRule, type CreateAuthToken, type CreateNotificationChannel, type CreateProject, type Event, type EventDetail, type Issue, type IssueFilter, type IssueSort, type ListAlertHistoryOptions, type ListEventsOptions, type ListIssuesOptions, type ListProjectsOptions, type LoginRequest, type LoginResult, NetworkError, NotFoundError, type NotificationChannel, type OffsetPaginatedResponse, type PaginatedResponse, type Project, RateLimitError, type RegisterRequest, RustrakClient, RustrakError, ServerError, type SortOrder, type TestChannelResponse, type UpdateAlertRule, type UpdateIssueState, type UpdateNotificationChannel, type UpdateProject, type User, ValidationError };
|
|
485
|
+
export { type AlertHistory, type AlertRule, 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 CreateAlertRule, type CreateAuthToken, type CreateNotificationChannel, type CreateProject, type Event, type EventDetail, 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, RateLimitError, type RegisterRequest, RustrakClient, RustrakError, ServerError, type SortOrder, type SourceMapFile, type TestChannelResponse, type UpdateAlertRule, type UpdateIssueState, type UpdateNotificationChannel, type UpdateProject, type User, ValidationError };
|
package/dist/index.js
CHANGED
|
@@ -471,6 +471,30 @@ var createProjectSchema = z.object({
|
|
|
471
471
|
var updateProjectSchema = z.object({
|
|
472
472
|
name: z.string().min(1).optional()
|
|
473
473
|
});
|
|
474
|
+
var chunkUploadCapabilitySchema = z.object({
|
|
475
|
+
url: z.string(),
|
|
476
|
+
chunkSize: z.number().int(),
|
|
477
|
+
chunksPerRequest: z.number().int(),
|
|
478
|
+
maxRequestSize: z.number().int(),
|
|
479
|
+
hashAlgorithm: z.string(),
|
|
480
|
+
accept: z.array(z.string()),
|
|
481
|
+
concurrency: z.number().int().optional()
|
|
482
|
+
});
|
|
483
|
+
var assembleResponseSchema = z.object({
|
|
484
|
+
state: z.string(),
|
|
485
|
+
missingChunks: z.array(z.string()),
|
|
486
|
+
detail: z.string().optional()
|
|
487
|
+
});
|
|
488
|
+
var sourceMapFileSchema = z.object({
|
|
489
|
+
debugId: z.string(),
|
|
490
|
+
fileType: z.string(),
|
|
491
|
+
size: z.number().int(),
|
|
492
|
+
timesUsed: z.number().int(),
|
|
493
|
+
dateUploaded: z.string()
|
|
494
|
+
});
|
|
495
|
+
var listSourceMapsResponseSchema = z.object({
|
|
496
|
+
data: z.array(sourceMapFileSchema)
|
|
497
|
+
});
|
|
474
498
|
var authTokenSchema = z.object({
|
|
475
499
|
id: z.number().int(),
|
|
476
500
|
token_prefix: z.string(),
|
|
@@ -617,6 +641,58 @@ var ProjectsResource = class extends BaseResource {
|
|
|
617
641
|
}
|
|
618
642
|
};
|
|
619
643
|
|
|
644
|
+
// src/resources/sourcemaps.ts
|
|
645
|
+
var SourceMapsResource = class extends BaseResource {
|
|
646
|
+
/**
|
|
647
|
+
* Get chunk upload capabilities for an organization.
|
|
648
|
+
* Returns the upload URL, chunk size limits, and accepted artifact types.
|
|
649
|
+
*/
|
|
650
|
+
async getChunkUploadCapability(orgSlug) {
|
|
651
|
+
const data = await this.http.get(`api/0/organizations/${orgSlug}/chunk-upload/`).json();
|
|
652
|
+
return this.validate(data, chunkUploadCapabilitySchema);
|
|
653
|
+
}
|
|
654
|
+
/**
|
|
655
|
+
* Upload chunks as multipart/form-data, batching by `chunksPerRequest` (default 64).
|
|
656
|
+
* Each part's field name must be the pre-computed SHA-1 hash of its content — the server
|
|
657
|
+
* rejects mismatches with 400. Callers must supply the hash (also needed for assembleBundle).
|
|
658
|
+
*/
|
|
659
|
+
async uploadChunks(orgSlug, chunks, chunksPerRequest = 64) {
|
|
660
|
+
if (!Number.isInteger(chunksPerRequest) || chunksPerRequest <= 0) {
|
|
661
|
+
throw new Error("chunksPerRequest must be a positive integer");
|
|
662
|
+
}
|
|
663
|
+
for (let i = 0; i < chunks.length; i += chunksPerRequest) {
|
|
664
|
+
const batch = chunks.slice(i, i + chunksPerRequest);
|
|
665
|
+
const form = new FormData();
|
|
666
|
+
for (const chunk of batch) {
|
|
667
|
+
form.append(chunk.hash, chunk.data);
|
|
668
|
+
}
|
|
669
|
+
await this.http.post(`api/0/organizations/${orgSlug}/chunk-upload/`, {
|
|
670
|
+
body: form
|
|
671
|
+
});
|
|
672
|
+
}
|
|
673
|
+
}
|
|
674
|
+
/**
|
|
675
|
+
* Trigger assembly of a previously uploaded artifact bundle.
|
|
676
|
+
*
|
|
677
|
+
* @returns The assembly state. Poll until `state === "ok"` or `state === "error"`.
|
|
678
|
+
* When `state === "not_found"` the `missingChunks` array lists what
|
|
679
|
+
* still needs uploading via `uploadChunks`.
|
|
680
|
+
*/
|
|
681
|
+
async assembleBundle(orgSlug, input) {
|
|
682
|
+
const data = await this.http.post(`api/0/organizations/${orgSlug}/artifactbundle/assemble/`, {
|
|
683
|
+
json: input
|
|
684
|
+
}).json();
|
|
685
|
+
return this.validate(data, assembleResponseSchema);
|
|
686
|
+
}
|
|
687
|
+
/**
|
|
688
|
+
* List all source map files uploaded for a project.
|
|
689
|
+
*/
|
|
690
|
+
async list(orgSlug, projectSlug) {
|
|
691
|
+
const data = await this.http.get(`api/0/projects/${orgSlug}/${projectSlug}/files/source-maps/`).json();
|
|
692
|
+
return this.validate(data, listSourceMapsResponseSchema);
|
|
693
|
+
}
|
|
694
|
+
};
|
|
695
|
+
|
|
620
696
|
// src/resources/tokens.ts
|
|
621
697
|
var TokensResource = class extends BaseResource {
|
|
622
698
|
/**
|
|
@@ -744,6 +820,10 @@ var RustrakClient = class {
|
|
|
744
820
|
* Alert Rules API resource (per-project alert configuration)
|
|
745
821
|
*/
|
|
746
822
|
alertRules;
|
|
823
|
+
/**
|
|
824
|
+
* Source Maps API resource (sentry-cli artifact bundle upload protocol)
|
|
825
|
+
*/
|
|
826
|
+
sourceMaps;
|
|
747
827
|
/**
|
|
748
828
|
* Create a new Rustrak API client
|
|
749
829
|
*
|
|
@@ -758,6 +838,7 @@ var RustrakClient = class {
|
|
|
758
838
|
this.tokens = new TokensResource(this.http);
|
|
759
839
|
this.alertChannels = new AlertChannelsResource(this.http);
|
|
760
840
|
this.alertRules = new AlertRulesResource(this.http);
|
|
841
|
+
this.sourceMaps = new SourceMapsResource(this.http);
|
|
761
842
|
}
|
|
762
843
|
};
|
|
763
844
|
|
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-channels.ts","../src/resources/alert-rules.ts","../src/schemas/user.ts","../src/resources/auth.ts","../src/schemas/event.ts","../src/schemas/issue.ts","../src/schemas/project.ts","../src/schemas/token.ts","../src/resources/events.ts","../src/resources/issues.ts","../src/resources/projects.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 * Channel type enum\n */\nexport const channelTypeSchema = z.enum(['webhook', 'email', 'slack']);\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 * Notification channel response schema\n */\nexport const notificationChannelSchema = z.object({\n id: z.number().int(),\n name: z.string(),\n channel_type: channelTypeSchema,\n config: z.record(z.string(), z.unknown()),\n is_enabled: z.boolean(),\n failure_count: z.number().int(),\n last_failure_at: dateTimeSchema.nullable(),\n last_failure_message: z.string().nullable(),\n last_success_at: dateTimeSchema.nullable(),\n created_at: dateTimeSchema,\n updated_at: dateTimeSchema,\n});\n\n/**\n * Create notification channel request schema\n */\nexport const createNotificationChannelSchema = z.object({\n name: z.string().min(1),\n channel_type: channelTypeSchema,\n config: z.record(z.string(), z.unknown()),\n is_enabled: z.boolean().optional(),\n});\n\n/**\n * Update notification channel request schema\n */\nexport const updateNotificationChannelSchema = z.object({\n name: z.string().min(1).optional(),\n config: z.record(z.string(), z.unknown()).optional(),\n is_enabled: z.boolean().optional(),\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 channel_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 channel_ids: z.array(z.number().int()).min(1),\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 channel_ids: z.array(z.number().int()).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 channel_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 * 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 createNotificationChannelSchema,\n notificationChannelSchema,\n testChannelResponseSchema,\n updateNotificationChannelSchema,\n} from '../schemas/alert.js';\nimport type {\n CreateNotificationChannel,\n NotificationChannel,\n TestChannelResponse,\n UpdateNotificationChannel,\n} from '../types/alert.js';\nimport { BaseResource } from './base.js';\n\n/**\n * Alert Channels API resource (global notification destinations)\n */\nexport class AlertChannelsResource extends BaseResource {\n /**\n * List all notification channels\n */\n async list(): Promise<NotificationChannel[]> {\n const data = await this.http.get('api/alert-channels').json();\n return this.validate(data, z.array(notificationChannelSchema));\n }\n\n /**\n * Get a single notification channel by ID\n */\n async get(id: number): Promise<NotificationChannel> {\n const data = await this.http.get(`api/alert-channels/${id}`).json();\n return this.validate(data, notificationChannelSchema);\n }\n\n /**\n * Create a new notification channel\n */\n async create(input: CreateNotificationChannel): Promise<NotificationChannel> {\n const validatedInput = this.validate(\n input,\n createNotificationChannelSchema,\n );\n\n const data = await this.http\n .post('api/alert-channels', { json: validatedInput })\n .json();\n\n return this.validate(data, notificationChannelSchema);\n }\n\n /**\n * Update an existing notification channel\n */\n async update(\n id: number,\n input: UpdateNotificationChannel,\n ): Promise<NotificationChannel> {\n const validatedInput = this.validate(\n input,\n updateNotificationChannelSchema,\n );\n\n const data = await this.http\n .patch(`api/alert-channels/${id}`, { json: validatedInput })\n .json();\n\n return this.validate(data, notificationChannelSchema);\n }\n\n /**\n * Delete a notification channel\n */\n async delete(id: number): Promise<void> {\n await this.http.delete(`api/alert-channels/${id}`);\n }\n\n /**\n * Send a test notification to verify channel configuration\n */\n async test(id: number): Promise<TestChannelResponse> {\n const data = await this.http.post(`api/alert-channels/${id}/test`).json();\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';\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 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(8),\n});\n\n/**\n * Register request schema\n */\nexport const registerRequestSchema = z.object({\n email: z.string().email(),\n password: z.string().min(8),\n});\n","import {\n authResponseSchema,\n loginRequestSchema,\n registerRequestSchema,\n userSchema,\n} from '../schemas/user.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","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, 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';\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 {\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 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 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 AlertChannelsResource,\n AlertRulesResource,\n AuthResource,\n EventsResource,\n IssuesResource,\n ProjectsResource,\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 Channels API resource (global notification destinations)\n */\n public readonly alertChannels: AlertChannelsResource;\n\n /**\n * Alert Rules API resource (per-project alert configuration)\n */\n public readonly alertRules: AlertRulesResource;\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.alertChannels = new AlertChannelsResource(this.http);\n this.alertRules = new AlertRulesResource(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-channels.ts","../src/resources/alert-rules.ts","../src/schemas/user.ts","../src/resources/auth.ts","../src/schemas/event.ts","../src/schemas/issue.ts","../src/schemas/project.ts","../src/schemas/sourcemap.ts","../src/schemas/token.ts","../src/resources/events.ts","../src/resources/issues.ts","../src/resources/projects.ts","../src/resources/sourcemaps.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 * Channel type enum\n */\nexport const channelTypeSchema = z.enum(['webhook', 'email', 'slack']);\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 * Notification channel response schema\n */\nexport const notificationChannelSchema = z.object({\n id: z.number().int(),\n name: z.string(),\n channel_type: channelTypeSchema,\n config: z.record(z.string(), z.unknown()),\n is_enabled: z.boolean(),\n failure_count: z.number().int(),\n last_failure_at: dateTimeSchema.nullable(),\n last_failure_message: z.string().nullable(),\n last_success_at: dateTimeSchema.nullable(),\n created_at: dateTimeSchema,\n updated_at: dateTimeSchema,\n});\n\n/**\n * Create notification channel request schema\n */\nexport const createNotificationChannelSchema = z.object({\n name: z.string().min(1),\n channel_type: channelTypeSchema,\n config: z.record(z.string(), z.unknown()),\n is_enabled: z.boolean().optional(),\n});\n\n/**\n * Update notification channel request schema\n */\nexport const updateNotificationChannelSchema = z.object({\n name: z.string().min(1).optional(),\n config: z.record(z.string(), z.unknown()).optional(),\n is_enabled: z.boolean().optional(),\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 channel_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 channel_ids: z.array(z.number().int()).min(1),\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 channel_ids: z.array(z.number().int()).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 channel_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 * 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 createNotificationChannelSchema,\n notificationChannelSchema,\n testChannelResponseSchema,\n updateNotificationChannelSchema,\n} from '../schemas/alert.js';\nimport type {\n CreateNotificationChannel,\n NotificationChannel,\n TestChannelResponse,\n UpdateNotificationChannel,\n} from '../types/alert.js';\nimport { BaseResource } from './base.js';\n\n/**\n * Alert Channels API resource (global notification destinations)\n */\nexport class AlertChannelsResource extends BaseResource {\n /**\n * List all notification channels\n */\n async list(): Promise<NotificationChannel[]> {\n const data = await this.http.get('api/alert-channels').json();\n return this.validate(data, z.array(notificationChannelSchema));\n }\n\n /**\n * Get a single notification channel by ID\n */\n async get(id: number): Promise<NotificationChannel> {\n const data = await this.http.get(`api/alert-channels/${id}`).json();\n return this.validate(data, notificationChannelSchema);\n }\n\n /**\n * Create a new notification channel\n */\n async create(input: CreateNotificationChannel): Promise<NotificationChannel> {\n const validatedInput = this.validate(\n input,\n createNotificationChannelSchema,\n );\n\n const data = await this.http\n .post('api/alert-channels', { json: validatedInput })\n .json();\n\n return this.validate(data, notificationChannelSchema);\n }\n\n /**\n * Update an existing notification channel\n */\n async update(\n id: number,\n input: UpdateNotificationChannel,\n ): Promise<NotificationChannel> {\n const validatedInput = this.validate(\n input,\n updateNotificationChannelSchema,\n );\n\n const data = await this.http\n .patch(`api/alert-channels/${id}`, { json: validatedInput })\n .json();\n\n return this.validate(data, notificationChannelSchema);\n }\n\n /**\n * Delete a notification channel\n */\n async delete(id: number): Promise<void> {\n await this.http.delete(`api/alert-channels/${id}`);\n }\n\n /**\n * Send a test notification to verify channel configuration\n */\n async test(id: number): Promise<TestChannelResponse> {\n const data = await this.http.post(`api/alert-channels/${id}/test`).json();\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';\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 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(8),\n});\n\n/**\n * Register request schema\n */\nexport const registerRequestSchema = z.object({\n email: z.string().email(),\n password: z.string().min(8),\n});\n","import {\n authResponseSchema,\n loginRequestSchema,\n registerRequestSchema,\n userSchema,\n} from '../schemas/user.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","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, 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 {\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 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 {\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 AlertChannelsResource,\n AlertRulesResource,\n AuthResource,\n EventsResource,\n IssuesResource,\n ProjectsResource,\n SourceMapsResource,\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 Channels API resource (global notification destinations)\n */\n public readonly alertChannels: AlertChannelsResource;\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 * 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.alertChannels = new AlertChannelsResource(this.http);\n this.alertRules = new AlertRulesResource(this.http);\n this.sourceMaps = new SourceMapsResource(this.http);\n }\n}\n"]}
|
package/package.json
CHANGED