@carddb/client 0.4.6 → 0.5.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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/configuration.ts","../src/user-agent.ts","../src/connection.ts","../src/cache.ts","../src/resources/base.ts","../src/resources/publishers.ts","../src/resources/games.ts","../src/resources/datasets.ts","../src/resources/decks.ts","../src/resources/records.ts","../src/resources/rules.ts","../src/resources/rulesets.ts","../src/resources/import-formats.ts","../src/resources/imports.ts","../src/resources/exports.ts","../src/resources/files.ts","../src/resources/scans.ts","../src/resources/scan-templates.ts","../src/client.ts"],"names":["RestrictedError","RateLimitError","ServerError","ConnectionError","TimeoutError","AuthenticationError","CardDBError","ValidationError","GraphQLError","QueryBuilder","Collection","resolveFilter","variables","cacheKey","query","result"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Configuration management for CardDB client\n */\n\nimport type { CardDBConfig, ResourceType, Logger, Cache, LogLevel } from '@carddb/core'\nimport { RestrictedError } from '@carddb/core'\n\nexport const DEFAULT_ENDPOINT = 'https://carddb.dev/query'\nexport const DEFAULT_TIMEOUT = 30000 // 30 seconds\nexport const DEFAULT_OPEN_TIMEOUT = 10000 // 10 seconds\nexport const DEFAULT_CACHE_TTL = 300 // 5 minutes\nexport const DEFAULT_MAX_RETRIES = 3\nexport const DEFAULT_MAX_NETWORK_RETRIES = 2\nexport const DEFAULT_RETRY_BASE_DELAY = 1000 // 1 second\nexport const DEFAULT_RETRY_MAX_DELAY = 30000 // 30 seconds\n\nexport class Configuration {\n apiKey?: string\n publishableKey?: string\n secretKey?: string\n accessToken?: string\n private legacyApiKey?: string\n environment?: 'TEST' | 'LIVE'\n endpoint: string\n timeout: number\n openTimeout: number\n defaultPublisher?: string\n defaultGame?: string\n allowedPublishers?: string[]\n allowedGames?: Record<string, string[]>\n logger?: Logger\n logLevel: LogLevel\n retryOnRateLimit: boolean\n maxRetries: number\n retryOnNetworkError: boolean\n maxNetworkRetries: number\n retryBaseDelay: number\n retryMaxDelay: number\n cache?: Cache\n cacheTtl: number\n cacheTtls: Partial<Record<ResourceType, number>>\n\n constructor(config: CardDBConfig = {}) {\n this.legacyApiKey = config.apiKey\n this.publishableKey = config.publishableKey\n this.secretKey = config.secretKey\n this.accessToken = config.accessToken\n this.apiKey = config.apiKey ?? config.publishableKey ?? config.secretKey\n this.environment = config.environment\n this.endpoint = config.endpoint ?? DEFAULT_ENDPOINT\n this.timeout = config.timeout ?? DEFAULT_TIMEOUT\n this.openTimeout = config.openTimeout ?? DEFAULT_OPEN_TIMEOUT\n this.defaultPublisher = config.defaultPublisher\n this.defaultGame = config.defaultGame\n this.allowedPublishers = config.allowedPublishers\n this.allowedGames = config.allowedGames\n this.logger = config.logger\n this.logLevel = config.logLevel ?? 'info'\n this.retryOnRateLimit = config.retryOnRateLimit ?? false\n this.maxRetries = config.maxRetries ?? DEFAULT_MAX_RETRIES\n this.retryOnNetworkError = config.retryOnNetworkError ?? true\n this.maxNetworkRetries = config.maxNetworkRetries ?? DEFAULT_MAX_NETWORK_RETRIES\n this.retryBaseDelay = config.retryBaseDelay ?? DEFAULT_RETRY_BASE_DELAY\n this.retryMaxDelay = config.retryMaxDelay ?? DEFAULT_RETRY_MAX_DELAY\n this.cache = config.cache\n this.cacheTtl = config.cacheTtl ?? DEFAULT_CACHE_TTL\n this.cacheTtls = config.cacheTtls ?? {}\n }\n\n /**\n * Calculate delay for exponential backoff\n * @param attempt - The attempt number (0-indexed)\n * @returns Delay in milliseconds with jitter\n */\n calculateRetryDelay(attempt: number): number {\n // Exponential backoff: baseDelay * 2^attempt\n const exponentialDelay = this.retryBaseDelay * Math.pow(2, attempt)\n // Cap at max delay\n const cappedDelay = Math.min(exponentialDelay, this.retryMaxDelay)\n // Add jitter (±25%)\n const jitter = cappedDelay * 0.25 * (Math.random() * 2 - 1)\n return Math.round(cappedDelay + jitter)\n }\n\n /**\n * Get the cache TTL for a specific resource type\n */\n cacheTtlFor(resource: ResourceType): number {\n return this.cacheTtls[resource] ?? this.cacheTtl\n }\n\n /**\n * Resolve publisher slug, using default if not provided\n */\n resolvePublisher(publisherSlug?: string): string | undefined {\n return publisherSlug ?? this.defaultPublisher\n }\n\n /**\n * Resolve game key, using default if not provided\n */\n resolveGame(gameKey?: string): string | undefined {\n return gameKey ?? this.defaultGame\n }\n\n /**\n * Validate that a publisher is allowed by the configuration\n */\n validatePublisher(publisherSlug: string): void {\n if (!this.allowedPublishers) return\n if (this.allowedPublishers.includes(publisherSlug)) return\n\n throw new RestrictedError(`Publisher '${publisherSlug}' is not in the allowed publishers list`)\n }\n\n /**\n * Validate that a game is allowed by the configuration\n */\n validateGame(publisherSlug: string, gameKey: string): void {\n if (!this.allowedGames) return\n const allowedForPublisher = this.allowedGames[publisherSlug]\n if (!allowedForPublisher) return // No restrictions for this publisher\n if (allowedForPublisher.includes(gameKey)) return\n\n throw new RestrictedError(`Game '${gameKey}' is not allowed for publisher '${publisherSlug}'`)\n }\n\n /**\n * Validate both publisher and game access\n */\n validateAccess(publisherSlug?: string, gameKey?: string): void {\n if (publisherSlug) {\n this.validatePublisher(publisherSlug)\n if (gameKey) {\n this.validateGame(publisherSlug, gameKey)\n }\n }\n }\n\n /**\n * Secret-key-only helpers are for server runtimes and trusted backend workflows.\n */\n requireSecretCredential(operation: string): void {\n if (!this.accessToken && (this.legacyApiKey || (this.secretKey && !this.publishableKey))) return\n\n throw new RestrictedError(\n `${operation} requires a server-side secretKey or legacy apiKey credential`\n )\n }\n\n /**\n * API key sent on requests when no OAuth bearer token is configured.\n */\n requestApiKey(): string | undefined {\n return this.legacyApiKey ?? this.publishableKey ?? this.secretKey\n }\n\n /**\n * Explicit legacy apiKey supplied by the caller, excluding publishable/secret aliases.\n */\n configApiKey(): string | undefined {\n return this.legacyApiKey\n }\n\n /**\n * Check if a log level should be logged\n */\n shouldLog(level: LogLevel): boolean {\n const levels: Record<LogLevel, number> = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3,\n }\n return levels[level] >= levels[this.logLevel]\n }\n\n /**\n * Create a copy of this configuration with overrides\n */\n merge(overrides: Partial<CardDBConfig>): Configuration {\n return new Configuration({\n apiKey: overrides.apiKey ?? this.legacyApiKey,\n publishableKey: overrides.publishableKey ?? this.publishableKey,\n secretKey: overrides.secretKey ?? this.secretKey,\n accessToken: overrides.accessToken ?? this.accessToken,\n environment: overrides.environment ?? this.environment,\n endpoint: overrides.endpoint ?? this.endpoint,\n timeout: overrides.timeout ?? this.timeout,\n openTimeout: overrides.openTimeout ?? this.openTimeout,\n defaultPublisher: overrides.defaultPublisher ?? this.defaultPublisher,\n defaultGame: overrides.defaultGame ?? this.defaultGame,\n allowedPublishers: overrides.allowedPublishers ?? this.allowedPublishers,\n allowedGames: overrides.allowedGames ?? this.allowedGames,\n logger: overrides.logger ?? this.logger,\n logLevel: overrides.logLevel ?? this.logLevel,\n retryOnRateLimit: overrides.retryOnRateLimit ?? this.retryOnRateLimit,\n maxRetries: overrides.maxRetries ?? this.maxRetries,\n retryOnNetworkError: overrides.retryOnNetworkError ?? this.retryOnNetworkError,\n maxNetworkRetries: overrides.maxNetworkRetries ?? this.maxNetworkRetries,\n retryBaseDelay: overrides.retryBaseDelay ?? this.retryBaseDelay,\n retryMaxDelay: overrides.retryMaxDelay ?? this.retryMaxDelay,\n cache: overrides.cache ?? this.cache,\n cacheTtl: overrides.cacheTtl ?? this.cacheTtl,\n cacheTtls: overrides.cacheTtls ?? this.cacheTtls,\n })\n }\n}\n","/**\n * User-Agent string generation for analytics tracking\n *\n * Format: CardDB-SDK/js/{version} ({runtime}/{runtime_version})\n * Examples:\n * - CardDB-SDK/js/0.4.1 (node/20.10.0)\n * - CardDB-SDK/js/0.4.1 (bun/1.0.0)\n * - CardDB-SDK/js/0.4.1 (chrome/120.0.0.0)\n * - CardDB-SDK/js/0.4.1 (firefox/121.0)\n */\n\nconst SDK_VERSION = '0.4.1'\n\ninterface RuntimeInfo {\n name: string\n version: string\n}\n\n/**\n * Detect the current JavaScript runtime\n */\nfunction detectRuntime(): RuntimeInfo {\n // Check for Bun first (it also has process.versions.node)\n if (typeof globalThis !== 'undefined' && 'Bun' in globalThis) {\n const bunVersion =\n (globalThis as Record<string, unknown>).Bun &&\n typeof (globalThis as Record<string, unknown>).Bun === 'object' &&\n ((globalThis as Record<string, unknown>).Bun as Record<string, unknown>).version\n return {\n name: 'bun',\n version: typeof bunVersion === 'string' ? bunVersion : 'unknown',\n }\n }\n\n // Check for Deno\n if (typeof globalThis !== 'undefined' && 'Deno' in globalThis) {\n const denoVersion =\n (globalThis as Record<string, unknown>).Deno &&\n typeof (globalThis as Record<string, unknown>).Deno === 'object' &&\n ((globalThis as Record<string, unknown>).Deno as Record<string, unknown>).version &&\n typeof ((globalThis as Record<string, unknown>).Deno as Record<string, unknown>).version ===\n 'object' &&\n (\n ((globalThis as Record<string, unknown>).Deno as Record<string, unknown>).version as Record<\n string,\n unknown\n >\n ).deno\n return {\n name: 'deno',\n version: typeof denoVersion === 'string' ? denoVersion : 'unknown',\n }\n }\n\n // Check for Node.js\n if (typeof process !== 'undefined' && process.versions && process.versions.node) {\n return {\n name: 'node',\n version: process.versions.node,\n }\n }\n\n // Check for browser\n if (typeof navigator !== 'undefined' && navigator.userAgent) {\n return detectBrowser(navigator.userAgent)\n }\n\n return { name: 'unknown', version: 'unknown' }\n}\n\n/**\n * Parse browser name and version from User-Agent string\n */\nfunction detectBrowser(userAgent: string): RuntimeInfo {\n // Order matters - check more specific browsers first\n\n // Edge (Chromium-based)\n const edgeMatch = userAgent.match(/Edg\\/(\\d+(?:\\.\\d+)*)/)\n if (edgeMatch) {\n return { name: 'edge', version: edgeMatch[1]! }\n }\n\n // Chrome\n const chromeMatch = userAgent.match(/Chrome\\/(\\d+(?:\\.\\d+)*)/)\n if (chromeMatch && !userAgent.includes('Edg/')) {\n return { name: 'chrome', version: chromeMatch[1]! }\n }\n\n // Firefox\n const firefoxMatch = userAgent.match(/Firefox\\/(\\d+(?:\\.\\d+)*)/)\n if (firefoxMatch) {\n return { name: 'firefox', version: firefoxMatch[1]! }\n }\n\n // Safari (check after Chrome since Chrome UA includes Safari)\n const safariMatch = userAgent.match(/Version\\/(\\d+(?:\\.\\d+)*).*Safari/)\n if (safariMatch) {\n return { name: 'safari', version: safariMatch[1]! }\n }\n\n // Generic browser fallback\n return { name: 'browser', version: 'unknown' }\n}\n\n/**\n * Generate the User-Agent string for CardDB SDK\n */\nexport function getUserAgent(): string {\n const runtime = detectRuntime()\n return `CardDB-SDK/js/${SDK_VERSION} (${runtime.name}/${runtime.version})`\n}\n\n/**\n * Get the SDK version\n */\nexport function getSDKVersion(): string {\n return SDK_VERSION\n}\n","/**\n * HTTP connection wrapper for GraphQL requests\n */\n\nimport {\n CardDBError,\n AuthenticationError,\n RateLimitError,\n ValidationError,\n GraphQLError,\n ConnectionError,\n TimeoutError,\n ServerError,\n} from '@carddb/core'\nimport type { GraphQLErrorInfo, RateLimitInfo } from '@carddb/core'\nimport type { Configuration } from './configuration.js'\nimport { getUserAgent } from './user-agent.js'\n\nexport interface GraphQLResponse {\n data?: Record<string, unknown>\n errors?: GraphQLErrorInfo[]\n}\n\n// Store rate limit info per-request (can be accessed after request)\nlet lastRateLimitInfo: RateLimitInfo | null = null\n\nexport function getRateLimitInfo(): RateLimitInfo | null {\n return lastRateLimitInfo\n}\n\nexport class Connection {\n private config: Configuration\n\n constructor(config: Configuration) {\n this.config = config\n }\n\n /**\n * Execute a GraphQL query\n */\n async execute(\n query: string,\n variables: Record<string, unknown> = {}\n ): Promise<Record<string, unknown>> {\n const operationName = this.extractOperationName(query)\n let rateLimitRetries = 0\n let networkRetries = 0\n\n while (true) {\n try {\n const startTime = Date.now()\n this.logRequest(operationName, variables)\n\n const response = await this.fetch(query, variables)\n const duration = Date.now() - startTime\n\n const result = await this.handleResponse(response)\n this.logResponse(operationName, duration)\n\n return result\n } catch (error) {\n // Handle rate limit errors\n if (error instanceof RateLimitError) {\n if (this.config.retryOnRateLimit && rateLimitRetries < this.config.maxRetries) {\n rateLimitRetries++\n const sleepTime = error.retryAfter ?? 60\n this.logRateLimitRetry(operationName, rateLimitRetries, sleepTime)\n await this.sleep(sleepTime * 1000)\n continue\n }\n }\n\n // Handle network errors (connection, timeout) with exponential backoff\n if (this.isRetryableNetworkError(error)) {\n if (this.config.retryOnNetworkError && networkRetries < this.config.maxNetworkRetries) {\n const delay = this.config.calculateRetryDelay(networkRetries)\n this.logNetworkRetry(operationName, networkRetries + 1, delay, error)\n networkRetries++\n await this.sleep(delay)\n continue\n }\n }\n\n // Handle server errors (5xx) with exponential backoff\n if (error instanceof ServerError) {\n if (this.config.retryOnNetworkError && networkRetries < this.config.maxNetworkRetries) {\n const delay = this.config.calculateRetryDelay(networkRetries)\n this.logNetworkRetry(operationName, networkRetries + 1, delay, error)\n networkRetries++\n await this.sleep(delay)\n continue\n }\n }\n\n throw error\n }\n }\n }\n\n /**\n * Check if an error is a retryable network error\n */\n private isRetryableNetworkError(error: unknown): boolean {\n return error instanceof ConnectionError || error instanceof TimeoutError\n }\n\n private async fetch(query: string, variables: Record<string, unknown>): Promise<Response> {\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), this.config.timeout)\n const apiKey = this.config.requestApiKey()\n\n try {\n const response = await fetch(this.config.endpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n 'User-Agent': getUserAgent(),\n ...(this.config.accessToken\n ? { Authorization: `Bearer ${this.config.accessToken}` }\n : {}),\n ...(!this.config.accessToken && apiKey ? { 'X-API-Key': apiKey } : {}),\n },\n body: JSON.stringify({ query, variables }),\n signal: controller.signal,\n })\n\n return response\n } catch (error) {\n if (error instanceof Error) {\n if (error.name === 'AbortError') {\n this.logError('Request timed out')\n throw new TimeoutError('Request timed out')\n }\n this.logError(`Connection failed: ${error.message}`)\n throw new ConnectionError(`Connection failed: ${error.message}`)\n }\n throw new ConnectionError('Connection failed')\n } finally {\n clearTimeout(timeoutId)\n }\n }\n\n private async handleResponse(response: Response): Promise<Record<string, unknown>> {\n // Extract rate limit headers\n this.extractRateLimitInfo(response)\n\n switch (response.status) {\n case 200:\n return this.handleSuccessResponse(response)\n case 401:\n throw new AuthenticationError('Invalid or missing API key')\n case 429:\n return this.handleRateLimitResponse(response)\n default:\n if (response.status >= 400 && response.status < 500) {\n return this.handleClientError(response)\n }\n if (response.status >= 500) {\n const body = await this.parseBody(response)\n throw new ServerError(`Server error (${response.status})`, {\n status: response.status,\n response: body,\n })\n }\n throw new CardDBError(`Unexpected response status: ${response.status}`)\n }\n }\n\n private async handleSuccessResponse(response: Response): Promise<Record<string, unknown>> {\n const body = (await this.parseBody(response)) as GraphQLResponse\n\n // Check for GraphQL errors\n if (body.errors && body.errors.length > 0) {\n this.handleGraphQLErrors(body.errors, body)\n }\n\n return body.data ?? {}\n }\n\n private handleGraphQLErrors(errors: GraphQLErrorInfo[], body: GraphQLResponse): never {\n const firstError = errors[0]!\n const message = firstError.message || 'GraphQL error'\n const code = firstError.extensions?.['code'] as string | undefined\n\n switch (code) {\n case 'UNAUTHENTICATED':\n throw new AuthenticationError(message, body)\n case 'RATE_LIMITED':\n throw new RateLimitError(message, { response: body })\n case 'NOT_FOUND':\n throw new CardDBError(message, body)\n case 'VALIDATION_ERROR':\n case 'BAD_USER_INPUT':\n throw new ValidationError(message, { errors, response: body })\n default:\n throw new GraphQLError(message, { errors, response: body })\n }\n }\n\n private async handleRateLimitResponse(response: Response): Promise<never> {\n const retryAfter = parseInt(response.headers.get('Retry-After') ?? '60', 10)\n const limit = parseInt(response.headers.get('X-RateLimit-Limit') ?? '', 10) || null\n const remaining = parseInt(response.headers.get('X-RateLimit-Remaining') ?? '', 10) || null\n const reset = parseInt(response.headers.get('X-RateLimit-Reset') ?? '', 10) || null\n const resetAt = reset ? new Date(reset * 1000) : null\n\n const body = await this.parseBody(response)\n\n throw new RateLimitError('Rate limit exceeded', {\n retryAfter,\n limit,\n remaining,\n resetAt,\n response: body,\n })\n }\n\n private async handleClientError(response: Response): Promise<never> {\n const body = (await this.parseBody(response)) as GraphQLResponse\n const message = body.errors?.[0]?.message ?? `Client error (${response.status})`\n throw new ValidationError(message, { response: body })\n }\n\n private async parseBody(response: Response): Promise<unknown> {\n try {\n return await response.json()\n } catch {\n return { raw: await response.text() }\n }\n }\n\n private extractRateLimitInfo(response: Response): void {\n const limit = parseInt(response.headers.get('X-RateLimit-Limit') ?? '', 10) || null\n const remaining = parseInt(response.headers.get('X-RateLimit-Remaining') ?? '', 10) || null\n const reset = parseInt(response.headers.get('X-RateLimit-Reset') ?? '', 10) || null\n\n lastRateLimitInfo = { limit, remaining, reset }\n }\n\n private extractOperationName(query: string): string {\n const match = query.match(/(?:query|mutation)\\s+(\\w+)/)\n return match ? match[1]! : 'Unknown'\n }\n\n private sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms))\n }\n\n // Logging helpers\n\n private logRequest(operationName: string, variables: Record<string, unknown>): void {\n if (!this.config.logger || !this.config.shouldLog('debug')) return\n this.config.logger.debug(`[CardDB] Executing ${operationName}`, { variables })\n }\n\n private logResponse(operationName: string, duration: number): void {\n if (!this.config.logger || !this.config.shouldLog('info')) return\n this.config.logger.info(`[CardDB] ${operationName} completed in ${duration}ms`)\n }\n\n private logRateLimitRetry(operationName: string, retry: number, sleepTime: number): void {\n if (!this.config.logger || !this.config.shouldLog('warn')) return\n this.config.logger.warn(\n `[CardDB] Rate limited on ${operationName}, retry ${retry}/${this.config.maxRetries} after ${sleepTime}s`\n )\n }\n\n private logNetworkRetry(\n operationName: string,\n retry: number,\n delay: number,\n error: unknown\n ): void {\n if (!this.config.logger || !this.config.shouldLog('warn')) return\n const errorType = error instanceof Error ? error.name : 'Unknown'\n this.config.logger.warn(\n `[CardDB] ${errorType} on ${operationName}, retry ${retry}/${this.config.maxNetworkRetries} after ${delay}ms`\n )\n }\n\n private logError(message: string): void {\n if (!this.config.logger || !this.config.shouldLog('error')) return\n this.config.logger.error(`[CardDB] ${message}`)\n }\n}\n","/**\n * Cache utilities for CardDB client\n */\n\nimport type { Cache } from '@carddb/core'\n\n/**\n * Generate a cache key from components\n */\nexport function cacheKey(\n resource: string,\n method: string,\n params: Record<string, unknown>\n): string {\n const sortedParams = Object.entries(params)\n .filter(([, v]) => v !== undefined)\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([k, v]) => `${k}=${JSON.stringify(v)}`)\n .join('&')\n return `carddb:${resource}:${method}:${sortedParams}`\n}\n\n/**\n * Read from cache (handles both sync and async caches)\n */\nexport async function readCache<T>(cache: Cache, key: string): Promise<T | null> {\n const result = cache.get<T>(key)\n if (result instanceof Promise) {\n return result\n }\n return result\n}\n\n/**\n * Write to cache (handles both sync and async caches)\n */\nexport async function writeCache<T>(\n cache: Cache,\n key: string,\n value: T,\n ttl: number\n): Promise<void> {\n const result = cache.set(key, value, ttl)\n if (result instanceof Promise) {\n await result\n }\n}\n","/**\n * Base resource class with common functionality\n */\n\nimport type { ResourceType } from '@carddb/core'\nimport type { Configuration } from '../configuration.js'\nimport type { Connection } from '../connection.js'\nimport { cacheKey, readCache, writeCache } from '../cache.js'\n\nexport abstract class BaseResource {\n protected connection: Connection\n protected config: Configuration\n\n constructor(connection: Connection, config: Configuration) {\n this.connection = connection\n this.config = config\n }\n\n /**\n * Resolve publisher slug, using default if not provided\n */\n protected resolvePublisher(publisherSlug?: string): string {\n const resolved = this.config.resolvePublisher(publisherSlug)\n if (!resolved) {\n throw new Error('publisher_slug is required (no default configured)')\n }\n return resolved\n }\n\n /**\n * Resolve game key, using default if not provided\n */\n protected resolveGame(gameKey?: string): string {\n const resolved = this.config.resolveGame(gameKey)\n if (!resolved) {\n throw new Error('game_key is required (no default configured)')\n }\n return resolved\n }\n\n /**\n * Validate access to publisher/game\n */\n protected validateAccess(publisherSlug?: string, gameKey?: string): void {\n this.config.validateAccess(publisherSlug, gameKey)\n }\n\n /**\n * Execute a query with optional caching\n */\n protected async withCache<T>(\n key: string,\n resource: ResourceType,\n options: { cache?: boolean },\n fn: () => Promise<T>\n ): Promise<T> {\n const useCache = options.cache ?? !!this.config.cache\n const cache = this.config.cache\n\n if (!useCache || !cache) {\n return fn()\n }\n\n // Try to read from cache\n const cached = await readCache<T>(cache, key)\n if (cached !== null) {\n return cached\n }\n\n // Execute query and cache result\n const result = await fn()\n if (result !== null && result !== undefined) {\n const ttl = this.config.cacheTtlFor(resource)\n await writeCache(cache, key, result, ttl)\n }\n\n return result\n }\n\n /**\n * Generate a cache key\n */\n protected cacheKey(resource: string, method: string, params: Record<string, unknown>): string {\n return cacheKey(resource, method, params)\n }\n}\n","/**\n * Publishers resource for CardDB API\n */\n\nimport type { Publisher, Connection as ConnectionType } from '@carddb/core'\nimport { Collection, QueryBuilder } from '@carddb/core'\nimport { BaseResource } from './base.js'\nimport type { Configuration } from '../configuration.js'\nimport type { Connection } from '../connection.js'\n\nexport interface SearchPublishersOptions {\n /** Search term to filter publishers by name */\n search?: string\n /** Maximum number of results per page (default: 20, max: 100) */\n first?: number\n /** Cursor for pagination */\n after?: string\n /** Whether to use cache (defaults to client config) */\n cache?: boolean\n}\n\nexport interface GetPublisherOptions {\n /** Whether to use cache (defaults to client config) */\n cache?: boolean\n}\n\nexport class PublishersResource extends BaseResource {\n constructor(connection: Connection, config: Configuration) {\n super(connection, config)\n }\n\n /**\n * Search for publishers\n *\n * @example\n * const publishers = await client.publishers.search({ search: 'pokemon' })\n * for await (const publisher of publishers) {\n * console.log(publisher.name)\n * }\n */\n async search(options: SearchPublishersOptions = {}): Promise<Collection<Publisher>> {\n const { query, variables } = QueryBuilder.searchPublishers({\n search: options.search,\n first: options.first,\n after: options.after,\n })\n\n const key = this.cacheKey('publishers', 'search', variables)\n\n const data = await this.withCache(key, 'publishers', options, async () => {\n const result = await this.connection.execute(query, variables)\n return result['searchPublishers'] as ConnectionType<Publisher>\n })\n\n return new Collection(data, {\n nextPageLoader: async (cursor: string) => {\n return this.search({ ...options, after: cursor })\n },\n })\n }\n\n /**\n * Get a single publisher by slug or ID\n *\n * @example\n * const publisher = await client.publishers.get('pokemon')\n * const publisher = await client.publishers.get('550e8400-e29b-41d4-a716-446655440000')\n */\n async get(slugOrId: string, options: GetPublisherOptions = {}): Promise<Publisher | null> {\n const isUUID = this.isUUID(slugOrId)\n const key = this.cacheKey('publishers', 'get', { [isUUID ? 'id' : 'slug']: slugOrId })\n\n return this.withCache(key, 'publishers', options, async () => {\n if (isUUID) {\n const { query } = QueryBuilder.fetchPublisherById()\n const result = await this.connection.execute(query, { id: slugOrId })\n return (result['fetchPublisher'] as Publisher) ?? null\n } else {\n const { query } = QueryBuilder.fetchPublisherBySlug()\n const result = await this.connection.execute(query, { slug: slugOrId })\n return (result['fetchPublisher'] as Publisher) ?? null\n }\n })\n }\n\n /**\n * Get multiple publishers by slug\n *\n * @example\n * const publishers = await client.publishers.getMany(['pokemon', 'wizards'])\n */\n async getMany(slugs: string[], options: GetPublisherOptions = {}): Promise<Publisher[]> {\n if (slugs.length === 0) return []\n\n const key = this.cacheKey('publishers', 'getMany', { slugs })\n\n return this.withCache(key, 'publishers', options, async () => {\n const { query } = QueryBuilder.fetchPublishers()\n const result = await this.connection.execute(query, { slugs })\n return (result['fetchPublishers'] as Publisher[]) ?? []\n })\n }\n\n /**\n * Check if a string is a valid UUID\n */\n private isUUID(value: string): boolean {\n const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i\n return uuidRegex.test(value)\n }\n}\n","/**\n * Games resource for CardDB API\n */\n\nimport type {\n Game,\n GameCreateInput,\n GameScanRegion,\n GameUpdateInput,\n Connection as ConnectionType,\n} from '@carddb/core'\nimport { Collection, QueryBuilder } from '@carddb/core'\nimport { BaseResource } from './base.js'\nimport type { Configuration } from '../configuration.js'\nimport type { Connection } from '../connection.js'\n\nexport interface SearchGamesOptions {\n /** Publisher slug to filter games */\n publisherSlug?: string\n /** Search term to filter games by name */\n search?: string\n /** Maximum number of results per page (default: 20, max: 100) */\n first?: number\n /** Cursor for pagination */\n after?: string\n /** Whether to use cache (defaults to client config) */\n cache?: boolean\n}\n\nexport interface GetGameOptions {\n /** Whether to use cache (defaults to client config) */\n cache?: boolean\n}\n\nexport interface ListGamesOptions extends GetGameOptions {\n /** Maximum number of results per page */\n first?: number\n /** Cursor for pagination */\n after?: string\n /** Include archived games */\n includeArchived?: boolean\n}\n\nexport interface GetGameByKeyOptions extends GetGameOptions {\n /** Publisher ID for authenticated publisher-management lookup */\n publisherId?: string\n /** Publisher slug for authenticated publisher-management lookup */\n publisherSlug?: string\n /** Stable game key */\n gameKey: string\n}\n\nexport interface GetGameBySlugOptions extends GetGameOptions {\n /** Publisher ID for authenticated publisher-management lookup */\n publisherId?: string\n /** Publisher slug for authenticated publisher-management lookup */\n publisherSlug?: string\n /** Stable game slug, currently backed by metafyGameSlug */\n gameSlug: string\n}\n\nexport interface GetGameRegionsOptions extends GetGameOptions {\n /** Publisher slug, defaults to client defaultPublisher */\n publisherSlug?: string\n /** Stable game key, defaults to client defaultGame */\n gameKey?: string\n /** Include inactive publisher-managed scan regions */\n includeInactive?: boolean\n}\n\nexport class GamesResource extends BaseResource {\n constructor(connection: Connection, config: Configuration) {\n super(connection, config)\n }\n\n /**\n * List games for a publisher-management context.\n */\n async list(publisherId: string, options: ListGamesOptions = {}): Promise<Collection<Game>> {\n const { query, variables } = QueryBuilder.listGames({\n publisherId,\n first: options.first,\n after: options.after,\n includeArchived: options.includeArchived,\n })\n const key = this.cacheKey('games', 'list', variables)\n\n const data = await this.withCache(key, 'games', options, async () => {\n const result = await this.connection.execute(query, variables)\n return result['games'] as ConnectionType<Game>\n })\n\n return new Collection(data, {\n nextPageLoader: async (cursor: string) =>\n this.list(publisherId, { ...options, after: cursor }),\n })\n }\n\n /**\n * Get a publisher-managed game by stable key.\n */\n async getByKey(options: GetGameByKeyOptions): Promise<Game | null> {\n const key = this.cacheKey('games', 'getByKey', {\n publisherId: options.publisherId,\n publisherSlug: options.publisherSlug,\n gameKey: options.gameKey,\n })\n\n return this.withCache(key, 'games', options, async () => {\n const { query, variables } = QueryBuilder.game(options)\n const result = await this.connection.execute(query, variables)\n return (result['game'] as Game) ?? null\n })\n }\n\n /**\n * Get a publisher-managed game by slug.\n */\n async getBySlug(options: GetGameBySlugOptions): Promise<Game | null> {\n const key = this.cacheKey('games', 'getBySlug', {\n publisherId: options.publisherId,\n publisherSlug: options.publisherSlug,\n gameSlug: options.gameSlug,\n })\n\n return this.withCache(key, 'games', options, async () => {\n const { query, variables } = QueryBuilder.game(options)\n const result = await this.connection.execute(query, variables)\n return (result['game'] as Game) ?? null\n })\n }\n\n /**\n * Create a publisher-managed game. Requires a server-side secret credential.\n */\n async create(input: GameCreateInput): Promise<Game> {\n this.config.requireSecretCredential('games.create')\n\n const { query } = QueryBuilder.createGame()\n const result = await this.connection.execute(query, QueryBuilder.gameCreateVariables(input))\n return result['gameCreate'] as Game\n }\n\n /**\n * Update a publisher-managed game. Requires a server-side secret credential.\n */\n async update(id: string, input: GameUpdateInput): Promise<Game> {\n this.config.requireSecretCredential('games.update')\n\n const { query } = QueryBuilder.updateGame()\n const result = await this.connection.execute(query, QueryBuilder.gameUpdateVariables(id, input))\n return result['gameUpdate'] as Game\n }\n\n /**\n * Get publisher-defined game region metadata for scan-capable clients.\n */\n async getRegions(options: GetGameRegionsOptions = {}): Promise<GameScanRegion[]> {\n const publisherSlug = this.resolvePublisher(options.publisherSlug)\n const gameKey = this.resolveGame(options.gameKey)\n this.validateAccess(publisherSlug, gameKey)\n\n const variables = QueryBuilder.gameScanRegionsVariables(\n publisherSlug,\n gameKey,\n options.includeInactive\n )\n const key = this.cacheKey('games', 'getRegions', variables)\n\n return this.withCache(key, 'games', options, async () => {\n const { query } = QueryBuilder.gameScanRegions()\n const result = await this.connection.execute(query, variables)\n return (result['gameScanRegions'] as GameScanRegion[]) ?? []\n })\n }\n\n /**\n * Search for games\n *\n * @example\n * // Search all games\n * const games = await client.games.search({ search: 'trading card' })\n *\n * // Search games from a specific publisher\n * const games = await client.games.search({ publisherSlug: 'pokemon' })\n */\n async search(options: SearchGamesOptions = {}): Promise<Collection<Game>> {\n const publisherSlug = this.config.resolvePublisher(options.publisherSlug)\n\n // Validate access if publisher is specified\n if (publisherSlug) {\n this.validateAccess(publisherSlug)\n }\n\n const { query, variables } = QueryBuilder.searchGames({\n publisherSlug,\n search: options.search,\n first: options.first,\n after: options.after,\n })\n\n const key = this.cacheKey('games', 'search', variables)\n\n const data = await this.withCache(key, 'games', options, async () => {\n const result = await this.connection.execute(query, variables)\n return result['searchGames'] as ConnectionType<Game>\n })\n\n return new Collection(data, {\n nextPageLoader: async (cursor: string) => {\n return this.search({ ...options, after: cursor })\n },\n })\n }\n\n /**\n * Get a single game by ID\n *\n * @example\n * const game = await client.games.get('550e8400-e29b-41d4-a716-446655440000')\n */\n async get(id: string, options?: GetGameOptions): Promise<Game | null>\n\n /**\n * Get a single game by publisher slug and game key\n *\n * @example\n * const game = await client.games.get('pokemon', 'tcg')\n */\n async get(publisherSlug: string, gameKey: string, options?: GetGameOptions): Promise<Game | null>\n\n async get(\n idOrPublisherSlug: string,\n gameKeyOrOptions?: string | GetGameOptions,\n options?: GetGameOptions\n ): Promise<Game | null> {\n // Determine if called with ID or with publisherSlug + gameKey\n if (typeof gameKeyOrOptions === 'string') {\n // Called as get(publisherSlug, gameKey, options?)\n const publisherSlug = idOrPublisherSlug\n const gameKey = gameKeyOrOptions\n const opts = options ?? {}\n\n this.validateAccess(publisherSlug, gameKey)\n\n const key = this.cacheKey('games', 'getByKeys', { publisherSlug, gameKey })\n\n return this.withCache(key, 'games', opts, async () => {\n const { query } = QueryBuilder.fetchGameByKeys()\n const result = await this.connection.execute(query, { publisherSlug, gameKey })\n return (result['fetchGame'] as Game) ?? null\n })\n } else {\n // Called as get(id, options?)\n const id = idOrPublisherSlug\n const opts = gameKeyOrOptions ?? {}\n\n const key = this.cacheKey('games', 'get', { id })\n\n return this.withCache(key, 'games', opts, async () => {\n const { query } = QueryBuilder.fetchGameById()\n const result = await this.connection.execute(query, { id })\n return (result['fetchGame'] as Game) ?? null\n })\n }\n }\n\n /**\n * Get multiple games by ID\n *\n * @example\n * const games = await client.games.getMany(['id1', 'id2', 'id3'])\n */\n async getMany(ids: string[], options: GetGameOptions = {}): Promise<Game[]> {\n if (ids.length === 0) return []\n\n const key = this.cacheKey('games', 'getMany', { ids })\n\n return this.withCache(key, 'games', options, async () => {\n const { query } = QueryBuilder.fetchGames()\n const result = await this.connection.execute(query, { ids })\n return (result['fetchGames'] as Game[]) ?? []\n })\n }\n}\n","/**\n * Datasets resource for CardDB API\n */\n\nimport type { Dataset, DatasetSchema, Connection as ConnectionType } from '@carddb/core'\nimport { Collection, QueryBuilder } from '@carddb/core'\nimport { BaseResource } from './base.js'\nimport type { Configuration } from '../configuration.js'\nimport type { Connection } from '../connection.js'\n\nexport interface SearchDatasetsOptions {\n /** Publisher slug to filter datasets */\n publisherSlug?: string\n /** Game key to filter datasets (requires publisherSlug) */\n gameKey?: string\n /** Search term to filter datasets by name */\n search?: string\n /** Dataset purpose to filter by */\n purpose?: 'DATA' | 'RULES'\n /** Maximum number of results per page (default: 20, max: 100) */\n first?: number\n /** Cursor for pagination */\n after?: string\n /** Whether to use cache (defaults to client config) */\n cache?: boolean\n}\n\nexport interface GetDatasetOptions {\n /** Whether to use cache (defaults to client config) */\n cache?: boolean\n}\n\nexport interface ListDatasetsOptions extends GetDatasetOptions {\n /** Game ID to filter datasets */\n gameId?: string\n /** Include archived datasets */\n includeArchived?: boolean\n /** Dataset purpose to filter by */\n purpose?: 'DATA' | 'RULES'\n /** Maximum number of results per page */\n first?: number\n /** Cursor for pagination */\n after?: string\n}\n\nexport interface GetDatasetByKeyOptions extends GetDatasetOptions {\n /** Optional publisher ID ownership check */\n publisherId?: string\n /** Game ID for stable dataset-key lookup */\n gameId: string\n /** Stable dataset key */\n datasetKey: string\n}\n\nexport class DatasetsResource extends BaseResource {\n constructor(connection: Connection, config: Configuration) {\n super(connection, config)\n }\n\n /**\n * List datasets for a publisher-management context.\n */\n async list(publisherId: string, options: ListDatasetsOptions = {}): Promise<Collection<Dataset>> {\n const { query, variables } = QueryBuilder.listDatasets({\n publisherId,\n gameId: options.gameId,\n includeArchived: options.includeArchived,\n purpose: options.purpose,\n first: options.first,\n after: options.after,\n })\n const key = this.cacheKey('datasets', 'list', variables)\n\n const data = await this.withCache(key, 'datasets', options, async () => {\n const result = await this.connection.execute(query, variables)\n return result['datasets'] as ConnectionType<Dataset>\n })\n\n return new Collection(data, {\n nextPageLoader: async (cursor: string) =>\n this.list(publisherId, { ...options, after: cursor }),\n })\n }\n\n /**\n * Get a dataset by game ID and stable dataset key.\n */\n async getByKey(options: GetDatasetByKeyOptions): Promise<Dataset | null> {\n const key = this.cacheKey('datasets', 'getByKey', {\n publisherId: options.publisherId,\n gameId: options.gameId,\n datasetKey: options.datasetKey,\n })\n\n return this.withCache(key, 'datasets', options, async () => {\n const { query, variables } = QueryBuilder.dataset(options)\n const result = await this.connection.execute(query, variables)\n return (result['dataset'] as Dataset) ?? null\n })\n }\n\n /**\n * Fetch only the schema portion for a dataset.\n */\n async getSchema(idOrOptions: string | GetDatasetByKeyOptions): Promise<DatasetSchema | null> {\n const dataset =\n typeof idOrOptions === 'string'\n ? await this.withCache(\n this.cacheKey('datasets', 'getSchema', { id: idOrOptions }),\n 'datasets',\n {},\n async () => {\n const { query, variables } = QueryBuilder.dataset({ id: idOrOptions })\n const result = await this.connection.execute(query, variables)\n return (result['dataset'] as Dataset) ?? null\n }\n )\n : await this.getByKey(idOrOptions)\n return dataset?.schema ?? null\n }\n\n /**\n * Search for datasets\n *\n * @example\n * // Search all datasets\n * const datasets = await client.datasets.search({ search: 'cards' })\n *\n * // Search datasets from a specific publisher and game\n * const datasets = await client.datasets.search({\n * publisherSlug: 'pokemon',\n * gameKey: 'tcg'\n * })\n */\n async search(options: SearchDatasetsOptions = {}): Promise<Collection<Dataset>> {\n const publisherSlug = this.config.resolvePublisher(options.publisherSlug)\n const gameKey = this.config.resolveGame(options.gameKey)\n\n // Validate access if specified\n if (publisherSlug) {\n this.validateAccess(publisherSlug, gameKey)\n }\n\n const { query, variables } = QueryBuilder.searchDatasets({\n publisherSlug,\n gameKey,\n search: options.search,\n purpose: options.purpose,\n first: options.first,\n after: options.after,\n })\n\n const key = this.cacheKey('datasets', 'search', variables)\n\n const data = await this.withCache(key, 'datasets', options, async () => {\n const result = await this.connection.execute(query, variables)\n return result['searchDatasets'] as ConnectionType<Dataset>\n })\n\n return new Collection(data, {\n nextPageLoader: async (cursor: string) => {\n return this.search({ ...options, after: cursor })\n },\n })\n }\n\n /**\n * Get a single dataset by ID (includes schema)\n *\n * @example\n * const dataset = await client.datasets.get('550e8400-e29b-41d4-a716-446655440000')\n */\n async get(id: string, options?: GetDatasetOptions): Promise<Dataset | null>\n\n /**\n * Get a single dataset by publisher slug, game key, and dataset key (includes schema)\n *\n * @example\n * const dataset = await client.datasets.get('pokemon', 'tcg', 'cards')\n */\n async get(\n publisherSlug: string,\n gameKey: string,\n datasetKey: string,\n options?: GetDatasetOptions\n ): Promise<Dataset | null>\n\n async get(\n idOrPublisherSlug: string,\n gameKeyOrOptions?: string | GetDatasetOptions,\n datasetKey?: string,\n options?: GetDatasetOptions\n ): Promise<Dataset | null> {\n // Determine if called with ID or with publisherSlug + gameKey + datasetKey\n if (typeof gameKeyOrOptions === 'string' && typeof datasetKey === 'string') {\n // Called as get(publisherSlug, gameKey, datasetKey, options?)\n const publisherSlug = idOrPublisherSlug\n const gameKey = gameKeyOrOptions\n const opts = options ?? {}\n\n this.validateAccess(publisherSlug, gameKey)\n\n const key = this.cacheKey('datasets', 'getByKeys', { publisherSlug, gameKey, datasetKey })\n\n return this.withCache(key, 'datasets', opts, async () => {\n const { query } = QueryBuilder.fetchDatasetByKeys()\n const result = await this.connection.execute(query, { publisherSlug, gameKey, datasetKey })\n return (result['fetchDataset'] as Dataset) ?? null\n })\n } else {\n // Called as get(id, options?)\n const id = idOrPublisherSlug\n const opts = (gameKeyOrOptions as GetDatasetOptions) ?? {}\n\n const key = this.cacheKey('datasets', 'get', { id })\n\n return this.withCache(key, 'datasets', opts, async () => {\n const { query } = QueryBuilder.fetchDatasetById()\n const result = await this.connection.execute(query, { id })\n return (result['fetchDataset'] as Dataset) ?? null\n })\n }\n }\n\n /**\n * Get multiple datasets by ID\n *\n * @example\n * const datasets = await client.datasets.getMany(['id1', 'id2', 'id3'])\n */\n async getMany(ids: string[], options: GetDatasetOptions = {}): Promise<Dataset[]> {\n if (ids.length === 0) return []\n\n const key = this.cacheKey('datasets', 'getMany', { ids })\n\n return this.withCache(key, 'datasets', options, async () => {\n const { query } = QueryBuilder.fetchDatasets()\n const result = await this.connection.execute(query, { ids })\n return (result['fetchDatasets'] as Dataset[]) ?? []\n })\n }\n}\n","/**\n * Decks resource for CardDB API\n */\n\nimport type {\n AppDecksFilterInput,\n Connection as ConnectionType,\n DatasetRecord,\n Deck,\n DeckAPIApplicationAccess,\n DeckAPIApplicationAccessGrantInput,\n DeckClaimInput,\n DeckCollaborator,\n DeckCollaboratorRole,\n DeckCopyInput,\n DeckCopyPayload,\n DeckCreateInput,\n DeckDiff,\n DeckEntriesReplaceInput,\n DeckEntriesReplacePayload,\n DeckEntryAddInput,\n DeckEntryMutationPayload,\n DeckEntryReorderInput,\n DeckEntryReorderPayload,\n DeckEntryUpdateInput,\n DeckExportFormat,\n DeckExportPayload,\n DeckHydrateEntriesInput,\n DeckHydrateEntriesPayload,\n DeckImportFormatCreateInput,\n DeckImportFormatDefinition,\n DeckImportFormatTestInput,\n DeckImportFormatTestPayload,\n DeckImportFormatUpdateInput,\n DeckImportInput,\n DeckImportPayload,\n DeckOwnershipTransferPayload,\n DeckPublishedVersionSelector,\n DeckPublishInput,\n DeckPublishPayload,\n DeckReadState,\n DeckRemoveInvalidEntriesInput,\n DeckSectionDefinition,\n DeckTokenExchangeInput,\n DeckTokenExchangePayload,\n DeckTokenIssuer,\n DeckTokenIssuerCreateInput,\n DeckTransferOwnershipInput,\n DeckUpsertByExternalRefInput,\n DeckUpsertByExternalRefPayload,\n DeckUpdateInput,\n DeckValidateInput,\n DeckValidation,\n DeckVersion,\n HydratedDeckEntry,\n HydrateDeckEntryInput,\n PublicDecksFilterInput,\n ViewerDecksFilterInput,\n} from '@carddb/core'\nimport { Collection, QueryBuilder } from '@carddb/core'\nimport { BaseResource } from './base.js'\nimport type { Configuration } from '../configuration.js'\nimport type { Connection } from '../connection.js'\n\nexport interface ListDecksOptions {\n /** Maximum number of results per page */\n first?: number\n /** Cursor for pagination */\n after?: string\n /** Include archived decks in owner lists */\n includeArchived?: boolean\n /** Whether to use cache (defaults to client config) */\n cache?: boolean\n}\n\nexport interface ListViewerDecksOptions extends ListDecksOptions {\n filter?: ViewerDecksFilterInput\n}\n\nexport interface ListAppDecksOptions extends ListDecksOptions {\n filter?: AppDecksFilterInput\n}\n\nexport interface ListPublicDecksOptions extends Omit<ListDecksOptions, 'includeArchived'> {\n filter?: PublicDecksFilterInput\n}\n\nexport interface FetchDeckOptions {\n /** Whether to use cache (defaults to client config) */\n cache?: boolean\n}\n\nexport interface DeckReadOptions extends FetchDeckOptions {\n /** Explicitly choose mutable draft data or immutable published data. */\n readState: DeckReadState\n /** Optional published version selector. Only valid with readState: 'PUBLISHED'. */\n version?: DeckPublishedVersionSelector\n}\n\nexport type FetchDeckByExternalRefOptions = FetchDeckOptions\n\nexport type DeckReadByExternalRefOptions = DeckReadOptions\n\nexport type FetchDeckBySlugOptions = FetchDeckOptions\n\nexport type ListDeckVersionsOptions = ListDecksOptions\n\nexport type ListDeckCollaboratorsOptions = FetchDeckOptions\n\nexport interface ListDeckApiApplicationAccessesOptions extends FetchDeckOptions {\n includeRevoked?: boolean\n}\n\nexport interface ListMyDeckApiApplicationAccessesOptions extends FetchDeckOptions {\n applicationId?: string\n}\n\nexport type ListDeckImportFormatsOptions = ListDecksOptions\n\nexport interface DeckSectionDefinitionsOptions extends FetchDeckOptions {\n publisherSlug?: string\n gameKey?: string\n gameId?: string\n rulesetKey?: string\n rulesetVersionId?: string\n}\n\nexport interface HydrateDeckEntriesOptions {\n /** Publisher slug (uses default if configured) */\n publisherSlug?: string\n /** Game key (uses default if configured) */\n gameKey?: string\n /** Dataset key containing the deck entries */\n datasetKey: string\n /** Field key used to map returned records to input identifiers */\n identifierField?: string\n /** Deck entries to hydrate */\n entries: HydrateDeckEntryInput[]\n /** Whether to use cache (defaults to client config) */\n cache?: boolean\n}\n\nexport class DecksResource extends BaseResource {\n constructor(connection: Connection, config: Configuration) {\n super(connection, config)\n }\n\n /**\n * Fetch a hosted deck by CardDB UUID.\n */\n async fetch(id: string, options: FetchDeckOptions = {}): Promise<Deck | null> {\n const key = this.cacheKey('decks', 'fetch', { id })\n\n return this.withCache(key, 'decks', options, async () => {\n const { query } = QueryBuilder.fetchDeckById()\n const result = await this.connection.execute(query, { id })\n return (result['fetchDeck'] as Deck) ?? null\n })\n }\n\n /**\n * Fetch a deck by UUID using the ownership-aware `deck` API.\n */\n async get(id: string, options: DeckReadOptions): Promise<Deck | null> {\n const variables = QueryBuilder.deckReadVariables(id, options.readState, options.version)\n const key = this.cacheKey('decks', 'get', variables)\n\n return this.withCache(key, 'decks', options, async () => {\n const { query } = QueryBuilder.deckById()\n const result = await this.connection.execute(query, variables)\n return (result['deck'] as Deck) ?? null\n })\n }\n\n /**\n * Fetch mutable draft data for a deck by UUID.\n */\n async getDraft(id: string, options: FetchDeckOptions = {}): Promise<Deck | null> {\n return this.get(id, { ...options, readState: 'DRAFT' })\n }\n\n /**\n * Fetch immutable published data for a deck by UUID.\n */\n async getPublished(\n id: string,\n options: FetchDeckOptions & { version?: DeckPublishedVersionSelector } = {}\n ): Promise<Deck | null> {\n return this.get(id, { ...options, readState: 'PUBLISHED', version: options.version })\n }\n\n /**\n * Fetch one deck owned by the current account or API application.\n */\n async fetchMine(id: string, options: FetchDeckOptions = {}): Promise<Deck | null> {\n const key = this.cacheKey('decks', 'fetchMine', { id })\n\n return this.withCache(key, 'decks', options, async () => {\n const { query } = QueryBuilder.myDeck()\n const result = await this.connection.execute(query, { id })\n return (result['myDeck'] as Deck) ?? null\n })\n }\n\n /**\n * Fetch a hosted deck by canonical or historical slug.\n */\n async fetchBySlug(\n publisherSlug: string,\n gameKey: string,\n slug: string,\n options: FetchDeckBySlugOptions = {}\n ): Promise<Deck | null> {\n const key = this.cacheKey('decks', 'fetchBySlug', { publisherSlug, gameKey, slug })\n\n return this.withCache(key, 'decks', options, async () => {\n const { query } = QueryBuilder.fetchDeckBySlug()\n const result = await this.connection.execute(query, { publisherSlug, gameKey, slug })\n return (result['fetchDeckBySlug'] as Deck) ?? null\n })\n }\n\n /**\n * Fetch by slug using the ownership-aware `deckBySlug` API.\n */\n async getBySlug(\n publisherSlug: string,\n gameKey: string,\n slug: string,\n options: FetchDeckBySlugOptions = {}\n ): Promise<Deck | null> {\n const key = this.cacheKey('decks', 'getBySlug', { publisherSlug, gameKey, slug })\n\n return this.withCache(key, 'decks', options, async () => {\n const { query } = QueryBuilder.deckBySlug()\n const result = await this.connection.execute(query, { publisherSlug, gameKey, slug })\n return (result['deckBySlug'] as Deck) ?? null\n })\n }\n\n /**\n * Fetch a hosted deck by external reference for the current API application.\n */\n async fetchByExternalRef(\n externalRef: string,\n options: FetchDeckByExternalRefOptions = {}\n ): Promise<Deck | null> {\n const key = this.cacheKey('decks', 'fetchByExternalRef', { externalRef })\n\n return this.withCache(key, 'decks', options, async () => {\n const { query } = QueryBuilder.fetchDeckByExternalRef()\n const result = await this.connection.execute(query, { externalRef })\n return (result['fetchDeckByExternalRef'] as Deck) ?? null\n })\n }\n\n /**\n * Fetch by external reference using the ownership-aware `deckByExternalRef` API.\n */\n async getByExternalRef(\n externalRef: string,\n options: DeckReadByExternalRefOptions\n ): Promise<Deck | null> {\n const variables = QueryBuilder.deckExternalRefReadVariables(\n externalRef,\n options.readState,\n options.version\n )\n const key = this.cacheKey('decks', 'getByExternalRef', variables)\n\n return this.withCache(key, 'decks', options, async () => {\n const { query } = QueryBuilder.deckByExternalRef()\n const result = await this.connection.execute(query, variables)\n return (result['deckByExternalRef'] as Deck) ?? null\n })\n }\n\n /**\n * Fetch mutable draft data by API-application external reference.\n */\n async getDraftByExternalRef(\n externalRef: string,\n options: FetchDeckOptions = {}\n ): Promise<Deck | null> {\n return this.getByExternalRef(externalRef, { ...options, readState: 'DRAFT' })\n }\n\n /**\n * Fetch immutable published data by API-application external reference.\n */\n async getPublishedByExternalRef(\n externalRef: string,\n options: FetchDeckOptions & { version?: DeckPublishedVersionSelector } = {}\n ): Promise<Deck | null> {\n return this.getByExternalRef(externalRef, {\n ...options,\n readState: 'PUBLISHED',\n version: options.version,\n })\n }\n\n /**\n * List decks owned by the current account or API application.\n */\n async listMine(options: ListDecksOptions = {}): Promise<Collection<Deck>> {\n const { query, variables } = QueryBuilder.listMyDecks({\n first: options.first,\n after: options.after,\n includeArchived: options.includeArchived,\n })\n const key = this.cacheKey('decks', 'listMine', variables)\n\n const data = await this.withCache(key, 'decks', options, async () => {\n const result = await this.connection.execute(query, variables)\n return result['myDecks'] as ConnectionType<Deck>\n })\n\n return new Collection(data, {\n nextPageLoader: async (cursor: string) => this.listMine({ ...options, after: cursor }),\n })\n }\n\n /**\n * List decks owned by the current account or OAuth grant.\n */\n async listViewer(options: ListViewerDecksOptions = {}): Promise<Collection<Deck>> {\n const { query, variables } = QueryBuilder.viewerDecks({\n filter: options.filter,\n first: options.first,\n after: options.after,\n })\n const key = this.cacheKey('decks', 'listViewer', variables)\n\n const data = await this.withCache(key, 'decks', options, async () => {\n const result = await this.connection.execute(query, variables)\n return result['viewerDecks'] as ConnectionType<Deck>\n })\n\n return new Collection(data, {\n nextPageLoader: async (cursor: string) => this.listViewer({ ...options, after: cursor }),\n })\n }\n\n /**\n * List app-owned decks for the current secret-key API application.\n */\n async listApp(options: ListAppDecksOptions = {}): Promise<Collection<Deck>> {\n this.config.requireSecretCredential('decks.listApp')\n\n const { query, variables } = QueryBuilder.appDecks({\n filter: options.filter,\n first: options.first,\n after: options.after,\n })\n const key = this.cacheKey('decks', 'listApp', variables)\n\n const data = await this.withCache(key, 'decks', options, async () => {\n const result = await this.connection.execute(query, variables)\n return result['appDecks'] as ConnectionType<Deck>\n })\n\n return new Collection(data, {\n nextPageLoader: async (cursor: string) => this.listApp({ ...options, after: cursor }),\n })\n }\n\n /**\n * List published live decks eligible for public discovery.\n */\n async listPublic(options: ListPublicDecksOptions = {}): Promise<Collection<Deck>> {\n const { query, variables } = QueryBuilder.publicDecks({\n filter: options.filter,\n first: options.first,\n after: options.after,\n })\n const key = this.cacheKey('decks', 'listPublic', variables)\n\n const data = await this.withCache(key, 'decks', options, async () => {\n const result = await this.connection.execute(query, variables)\n return result['publicDecks'] as ConnectionType<Deck>\n })\n\n return new Collection(data, {\n nextPageLoader: async (cursor: string) => this.listPublic({ ...options, after: cursor }),\n })\n }\n\n /**\n * Fetch one immutable published deck version.\n */\n async fetchVersion(id: string, options: FetchDeckOptions = {}): Promise<DeckVersion | null> {\n const key = this.cacheKey('decks', 'fetchVersion', { id })\n\n return this.withCache(key, 'decks', options, async () => {\n const { query } = QueryBuilder.deckVersion()\n const result = await this.connection.execute(query, { id })\n return (result['deckVersion'] as DeckVersion) ?? null\n })\n }\n\n /**\n * List immutable published versions for a deck.\n */\n async listVersions(\n deckId: string,\n options: ListDeckVersionsOptions = {}\n ): Promise<Collection<DeckVersion>> {\n const { query, variables: pageVariables } = QueryBuilder.deckVersions({\n first: options.first,\n after: options.after,\n })\n const variables = { deckId, ...pageVariables }\n const key = this.cacheKey('decks', 'listVersions', variables)\n\n const data = await this.withCache(key, 'decks', options, async () => {\n const result = await this.connection.execute(query, variables)\n return result['deckVersions'] as ConnectionType<DeckVersion>\n })\n\n return new Collection(data, {\n nextPageLoader: async (cursor: string) =>\n this.listVersions(deckId, { ...options, after: cursor }),\n })\n }\n\n /**\n * Compare the current draft against the latest published version.\n */\n async draftDiff(id: string, options: FetchDeckOptions = {}): Promise<DeckDiff> {\n const key = this.cacheKey('decks', 'draftDiff', { id })\n\n return this.withCache(key, 'decks', options, async () => {\n const { query } = QueryBuilder.deckDraftDiff()\n const result = await this.connection.execute(query, { id })\n return result['deckDraftDiff'] as DeckDiff\n })\n }\n\n /**\n * Compare any two readable immutable deck versions from the same deck.\n */\n async versionDiff(\n fromVersionId: string,\n toVersionId: string,\n options: FetchDeckOptions = {}\n ): Promise<DeckDiff> {\n const variables = QueryBuilder.deckVersionDiffVariables(fromVersionId, toVersionId)\n const key = this.cacheKey('decks', 'versionDiff', variables)\n\n return this.withCache(key, 'decks', options, async () => {\n const { query } = QueryBuilder.deckVersionDiff()\n const result = await this.connection.execute(query, variables)\n return result['deckVersionDiff'] as DeckDiff\n })\n }\n\n /**\n * Validate a draft against current or explicitly requested immutable rules/data.\n */\n async validate(\n id: string,\n input?: DeckValidateInput,\n options: FetchDeckOptions = {}\n ): Promise<DeckValidation> {\n const variables = QueryBuilder.deckValidateVariables(id, input)\n const key = this.cacheKey('decks', 'validate', variables)\n\n return this.withCache(key, 'decks', options, async () => {\n const { query } = QueryBuilder.deckValidate()\n const result = await this.connection.execute(query, variables)\n return result['deckValidate'] as DeckValidation\n })\n }\n\n /**\n * Hydrate unpersisted deck entries against a stored deck's game without mutating the deck.\n */\n async hydrateDeckEntries(\n input: DeckHydrateEntriesInput,\n options: FetchDeckOptions = {}\n ): Promise<DeckHydrateEntriesPayload> {\n const variables = QueryBuilder.deckHydrateEntriesVariables(input)\n const key = this.cacheKey('decks', 'hydrateDeckEntries', variables)\n\n return this.withCache(key, 'decks', options, async () => {\n const { query } = QueryBuilder.deckHydrateEntries()\n const result = await this.connection.execute(query, variables)\n return result['deckHydrateEntries'] as DeckHydrateEntriesPayload\n })\n }\n\n /**\n * Export a readable deck representation in a deterministic text format.\n */\n async exportDeck(\n id: string,\n format: DeckExportFormat = 'SIMPLE_TEXT',\n options: FetchDeckOptions = {}\n ): Promise<DeckExportPayload> {\n const variables = QueryBuilder.deckExportVariables(id, format)\n const key = this.cacheKey('decks', 'exportDeck', variables)\n\n return this.withCache(key, 'decks', options, async () => {\n const { query } = QueryBuilder.deckExport()\n const result = await this.connection.execute(query, variables)\n return result['deckExport'] as DeckExportPayload\n })\n }\n\n /**\n * Resolve current or historical ruleset section definitions.\n */\n async sectionDefinitions(\n options: DeckSectionDefinitionsOptions = {}\n ): Promise<DeckSectionDefinition[]> {\n const { query, variables } = QueryBuilder.deckSectionDefinitions({\n publisherSlug: options.publisherSlug,\n gameKey: options.gameKey,\n gameId: options.gameId,\n rulesetKey: options.rulesetKey,\n rulesetVersionId: options.rulesetVersionId,\n })\n const key = this.cacheKey('decks', 'sectionDefinitions', variables)\n\n return this.withCache(key, 'decks', options, async () => {\n const result = await this.connection.execute(query, variables)\n return result['deckSectionDefinitions'] as DeckSectionDefinition[]\n })\n }\n\n /**\n * List collaborators for a deck.\n */\n async listCollaborators(\n deckId: string,\n options: ListDeckCollaboratorsOptions = {}\n ): Promise<DeckCollaborator[]> {\n const key = this.cacheKey('decks', 'listCollaborators', { deckId })\n\n return this.withCache(key, 'decks', options, async () => {\n const { query } = QueryBuilder.deckCollaborators()\n const result = await this.connection.execute(query, { deckId })\n return result['deckCollaborators'] as DeckCollaborator[]\n })\n }\n\n /**\n * List API applications with explicit access to one owned deck.\n */\n async listApiApplicationAccesses(\n deckId: string,\n options: ListDeckApiApplicationAccessesOptions = {}\n ): Promise<DeckAPIApplicationAccess[]> {\n const variables = QueryBuilder.deckApiApplicationAccessesVariables(\n deckId,\n options.includeRevoked\n )\n const key = this.cacheKey('decks', 'listApiApplicationAccesses', variables)\n\n return this.withCache(key, 'decks', options, async () => {\n const { query } = QueryBuilder.deckApiApplicationAccesses()\n const result = await this.connection.execute(query, variables)\n return result['deckApiApplicationAccesses'] as DeckAPIApplicationAccess[]\n })\n }\n\n /**\n * List selected-deck grants for the current account.\n */\n async listMyApiApplicationAccesses(\n options: ListMyDeckApiApplicationAccessesOptions = {}\n ): Promise<DeckAPIApplicationAccess[]> {\n const variables = QueryBuilder.myDeckApiApplicationAccessesVariables(options.applicationId)\n const key = this.cacheKey('decks', 'listMyApiApplicationAccesses', variables)\n\n return this.withCache(key, 'decks', options, async () => {\n const { query } = QueryBuilder.myDeckApiApplicationAccesses()\n const result = await this.connection.execute(query, variables)\n return result['myDeckApiApplicationAccesses'] as DeckAPIApplicationAccess[]\n })\n }\n\n /**\n * Create a hosted deck.\n */\n async create(input: DeckCreateInput): Promise<Deck> {\n const { query } = QueryBuilder.createDeck()\n const variables = QueryBuilder.deckCreateVariables(input)\n const result = await this.connection.execute(query, variables)\n return result['deckCreate'] as Deck\n }\n\n /**\n * Update a hosted deck.\n */\n async update(id: string, input: DeckUpdateInput): Promise<Deck> {\n const { query } = QueryBuilder.updateDeck()\n const variables = QueryBuilder.deckUpdateVariables(id, input)\n const result = await this.connection.execute(query, variables)\n return result['deckUpdate'] as Deck\n }\n\n /**\n * Update deck-level metadata without mutating entries.\n */\n async updateMetadata(id: string, input: DeckUpdateInput): Promise<Deck> {\n return this.update(id, input)\n }\n\n /**\n * Create or replace a draft by API-application external reference.\n */\n async upsertByExternalRef(\n input: DeckUpsertByExternalRefInput\n ): Promise<DeckUpsertByExternalRefPayload> {\n this.config.requireSecretCredential('decks.upsertByExternalRef')\n\n const { query } = QueryBuilder.upsertDeckByExternalRef()\n const variables = QueryBuilder.deckUpsertByExternalRefVariables(input)\n const result = await this.connection.execute(query, variables)\n return result['deckUpsertByExternalRef'] as DeckUpsertByExternalRefPayload\n }\n\n /**\n * Claim an app-owned deck into the consenting OAuth user's account.\n */\n async claim(id: string, input: DeckClaimInput): Promise<DeckOwnershipTransferPayload> {\n const { query } = QueryBuilder.claimDeck()\n const variables = QueryBuilder.deckClaimVariables(id, input)\n const result = await this.connection.execute(query, variables)\n return result['deckClaim'] as DeckOwnershipTransferPayload\n }\n\n /**\n * Transfer a deck to another account.\n */\n async transferOwnership(\n id: string,\n input: DeckTransferOwnershipInput\n ): Promise<DeckOwnershipTransferPayload> {\n const { query } = QueryBuilder.transferDeckOwnership()\n const variables = QueryBuilder.deckTransferOwnershipVariables(id, input)\n const result = await this.connection.execute(query, variables)\n return result['deckTransferOwnership'] as DeckOwnershipTransferPayload\n }\n\n /**\n * Copy a deck into the current principal's ownership namespace.\n */\n async copy(id: string, input: DeckCopyInput): Promise<DeckCopyPayload> {\n const { query } = QueryBuilder.copyDeck()\n const variables = QueryBuilder.deckCopyVariables(id, input)\n const result = await this.connection.execute(query, variables)\n return result['deckCopy'] as DeckCopyPayload\n }\n\n /**\n * Add one entry to a deck draft.\n */\n async addEntry(input: DeckEntryAddInput): Promise<DeckEntryMutationPayload> {\n const { query } = QueryBuilder.addDeckEntry()\n const variables = QueryBuilder.deckEntryAddVariables(input)\n const result = await this.connection.execute(query, variables)\n return result['deckEntryAdd'] as DeckEntryMutationPayload\n }\n\n /**\n * Update one stable deck entry.\n */\n async updateEntry(id: string, input: DeckEntryUpdateInput): Promise<DeckEntryMutationPayload> {\n const { query } = QueryBuilder.updateDeckEntry()\n const variables = QueryBuilder.deckEntryUpdateVariables(id, input)\n const result = await this.connection.execute(query, variables)\n return result['deckEntryUpdate'] as DeckEntryMutationPayload\n }\n\n /**\n * Remove one stable deck entry.\n */\n async removeEntry(id: string, expectedDraftRevision: number): Promise<DeckEntryMutationPayload> {\n const { query } = QueryBuilder.removeDeckEntry()\n const variables = QueryBuilder.deckEntryRemoveVariables(id, expectedDraftRevision)\n const result = await this.connection.execute(query, variables)\n return result['deckEntryRemove'] as DeckEntryMutationPayload\n }\n\n /**\n * Reorder deck entries within or across sections.\n */\n async reorderEntries(\n deckId: string,\n input: DeckEntryReorderInput\n ): Promise<DeckEntryReorderPayload> {\n const { query } = QueryBuilder.reorderDeckEntries()\n const variables = QueryBuilder.deckEntryReorderVariables(deckId, input)\n const result = await this.connection.execute(query, variables)\n return result['deckEntryReorder'] as DeckEntryReorderPayload\n }\n\n /**\n * Explicitly replace all deck entries for import or repair flows.\n */\n async replaceEntries(\n deckId: string,\n input: DeckEntriesReplaceInput\n ): Promise<DeckEntriesReplacePayload> {\n const { query } = QueryBuilder.replaceDeckEntries()\n const variables = QueryBuilder.deckEntriesReplaceVariables(deckId, input)\n const result = await this.connection.execute(query, variables)\n return result['deckEntriesReplace'] as DeckEntriesReplacePayload\n }\n\n /**\n * Import a decklist into an existing deck or dry-run resolution.\n */\n async importDeck(input: DeckImportInput): Promise<DeckImportPayload> {\n const { query } = QueryBuilder.importDeck()\n const variables = QueryBuilder.deckImportVariables(input)\n const result = await this.connection.execute(query, variables)\n return result['deckImport'] as DeckImportPayload\n }\n\n /**\n * List publisher-managed configured import formats for a game.\n */\n async listImportFormats(\n gameId: string,\n options: ListDeckImportFormatsOptions = {}\n ): Promise<Collection<DeckImportFormatDefinition>> {\n const { query, variables } = QueryBuilder.deckImportFormats({\n gameId,\n includeArchived: options.includeArchived,\n first: options.first,\n after: options.after,\n })\n const key = this.cacheKey('decks', 'listImportFormats', variables)\n\n const data = await this.withCache(key, 'decks', options, async () => {\n const result = await this.connection.execute(query, variables)\n return result['deckImportFormats'] as ConnectionType<DeckImportFormatDefinition>\n })\n\n return new Collection(data, {\n nextPageLoader: async (cursor: string) =>\n this.listImportFormats(gameId, { ...options, after: cursor }),\n })\n }\n\n /**\n * Fetch one configured import format by UUID.\n */\n async fetchImportFormat(\n id: string,\n options: FetchDeckOptions = {}\n ): Promise<DeckImportFormatDefinition | null> {\n const key = this.cacheKey('decks', 'fetchImportFormat', { id })\n\n return this.withCache(key, 'decks', options, async () => {\n const { query } = QueryBuilder.deckImportFormat()\n const result = await this.connection.execute(query, { id })\n return (result['deckImportFormat'] as DeckImportFormatDefinition) ?? null\n })\n }\n\n /**\n * Preview configured import-format parsing and record resolution.\n */\n async testImportFormat(input: DeckImportFormatTestInput): Promise<DeckImportFormatTestPayload> {\n const { query } = QueryBuilder.deckImportFormatTest()\n const variables = QueryBuilder.deckImportFormatTestVariables(input)\n const result = await this.connection.execute(query, variables)\n return result['deckImportFormatTest'] as DeckImportFormatTestPayload\n }\n\n /**\n * Create a publisher-managed configured import format.\n */\n async createImportFormat(\n input: DeckImportFormatCreateInput\n ): Promise<DeckImportFormatDefinition> {\n const { query } = QueryBuilder.createDeckImportFormat()\n const variables = QueryBuilder.deckImportFormatCreateVariables(input)\n const result = await this.connection.execute(query, variables)\n return result['deckImportFormatCreate'] as DeckImportFormatDefinition\n }\n\n /**\n * Update a publisher-managed configured import format.\n */\n async updateImportFormat(\n id: string,\n input: DeckImportFormatUpdateInput\n ): Promise<DeckImportFormatDefinition> {\n const { query } = QueryBuilder.updateDeckImportFormat()\n const variables = QueryBuilder.deckImportFormatUpdateVariables(id, input)\n const result = await this.connection.execute(query, variables)\n return result['deckImportFormatUpdate'] as DeckImportFormatDefinition\n }\n\n /**\n * Archive a configured import format.\n */\n async archiveImportFormat(id: string): Promise<DeckImportFormatDefinition> {\n const { query } = QueryBuilder.archiveDeckImportFormat()\n const result = await this.connection.execute(query, { id })\n return result['deckImportFormatArchive'] as DeckImportFormatDefinition\n }\n\n /**\n * Restore an archived configured import format.\n */\n async unarchiveImportFormat(id: string): Promise<DeckImportFormatDefinition> {\n const { query } = QueryBuilder.unarchiveDeckImportFormat()\n const result = await this.connection.execute(query, { id })\n return result['deckImportFormatUnarchive'] as DeckImportFormatDefinition\n }\n\n /**\n * Delete a hosted deck.\n */\n async delete(id: string): Promise<boolean> {\n const { query } = QueryBuilder.deleteDeck()\n const result = await this.connection.execute(query, { id })\n return Boolean(result['deckDelete'])\n }\n\n /**\n * Recoverably hide a deck from normal owner and public lists.\n */\n async archive(id: string): Promise<Deck> {\n const { query } = QueryBuilder.archiveDeck()\n const result = await this.connection.execute(query, { id })\n return result['deckArchive'] as Deck\n }\n\n /**\n * Restore an archived deck to draft or published state.\n */\n async restore(id: string): Promise<Deck> {\n const { query } = QueryBuilder.restoreDeck()\n const result = await this.connection.execute(query, { id })\n return result['deckRestore'] as Deck\n }\n\n /**\n * Remove the current public published pointer while keeping version history.\n */\n async unpublish(id: string): Promise<Deck> {\n const { query } = QueryBuilder.unpublishDeck()\n const result = await this.connection.execute(query, { id })\n return result['deckUnpublish'] as Deck\n }\n\n /**\n * Publish the current draft as an immutable deck version.\n */\n async publish(id: string, input: DeckPublishInput): Promise<DeckPublishPayload> {\n const { query } = QueryBuilder.publishDeck()\n const variables = QueryBuilder.deckPublishVariables(id, input)\n const result = await this.connection.execute(query, variables)\n return result['deckPublish'] as DeckPublishPayload\n }\n\n /**\n * Remove draft entries that fail card-reference validation.\n */\n async removeInvalidEntries(id: string, input: DeckRemoveInvalidEntriesInput): Promise<Deck> {\n const { query } = QueryBuilder.removeInvalidDeckEntries()\n const variables = QueryBuilder.deckRemoveInvalidEntriesVariables(id, input)\n const result = await this.connection.execute(query, variables)\n return result['deckRemoveInvalidEntries'] as Deck\n }\n\n /**\n * Create or update a deck collaborator.\n */\n async upsertCollaborator(\n deckId: string,\n accountId: string,\n role: DeckCollaboratorRole\n ): Promise<DeckCollaborator> {\n const { query } = QueryBuilder.upsertDeckCollaborator()\n const variables = QueryBuilder.deckCollaboratorVariables(deckId, accountId, role)\n const result = await this.connection.execute(query, variables)\n return result['deckCollaboratorUpsert'] as DeckCollaborator\n }\n\n /**\n * Remove a deck collaborator.\n */\n async removeCollaborator(deckId: string, accountId: string): Promise<boolean> {\n const { query } = QueryBuilder.removeDeckCollaborator()\n const variables = QueryBuilder.deckCollaboratorVariables(deckId, accountId)\n const result = await this.connection.execute(query, variables)\n return Boolean(result['deckCollaboratorRemove'])\n }\n\n /**\n * Create a unified deck token issuer for the current secret-key API application.\n */\n async createTokenIssuer(input: DeckTokenIssuerCreateInput): Promise<DeckTokenIssuer> {\n this.config.requireSecretCredential('decks.createTokenIssuer')\n\n const { query } = QueryBuilder.createDeckTokenIssuer()\n const variables = QueryBuilder.deckTokenIssuerCreateVariables(input)\n const result = await this.connection.execute(query, variables)\n return result['deckTokenIssuerCreate'] as DeckTokenIssuer\n }\n\n /**\n * Revoke a unified deck token issuer.\n */\n async revokeTokenIssuer(id: string): Promise<boolean> {\n this.config.requireSecretCredential('decks.revokeTokenIssuer')\n\n const { query } = QueryBuilder.revokeDeckTokenIssuer()\n const result = await this.connection.execute(query, { id })\n return Boolean(result['deckTokenIssuerRevoke'])\n }\n\n /**\n * Revoke only the direct signing key for a unified deck token issuer.\n */\n async revokeTokenIssuerSigningKey(id: string): Promise<DeckTokenIssuer> {\n this.config.requireSecretCredential('decks.revokeTokenIssuerSigningKey')\n\n const { query } = QueryBuilder.revokeDeckTokenIssuerSigningKey()\n const result = await this.connection.execute(query, { id })\n return result['deckTokenIssuerSigningKeyRevoke'] as DeckTokenIssuer\n }\n\n /**\n * Grant or update one OAuth app's selected-deck access.\n */\n async grantApiApplicationAccess(\n input: DeckAPIApplicationAccessGrantInput\n ): Promise<DeckAPIApplicationAccess> {\n const { query } = QueryBuilder.grantDeckApiApplicationAccess()\n const variables = QueryBuilder.deckApiApplicationAccessGrantVariables(input)\n const result = await this.connection.execute(query, variables)\n return result['deckApiApplicationAccessGrant'] as DeckAPIApplicationAccess\n }\n\n /**\n * Revoke one OAuth app's selected-deck access.\n */\n async revokeApiApplicationAccess(deckId: string, apiApplicationId: string): Promise<boolean> {\n const { query } = QueryBuilder.revokeDeckApiApplicationAccess()\n const variables = QueryBuilder.deckApiApplicationAccessRevokeVariables(deckId, apiApplicationId)\n const result = await this.connection.execute(query, variables)\n return Boolean(result['deckApiApplicationAccessRevoke'])\n }\n\n /**\n * Exchange the current secret API application credential for a unified deck token.\n */\n async exchangeToken(input: DeckTokenExchangeInput): Promise<DeckTokenExchangePayload> {\n this.config.requireSecretCredential('decks.exchangeToken')\n\n const { query } = QueryBuilder.exchangeDeckToken()\n const variables = QueryBuilder.deckTokenExchangeVariables(input)\n const result = await this.connection.execute(query, variables)\n return result['deckTokenExchange'] as DeckTokenExchangePayload\n }\n\n /**\n * Revoke an exchanged unified deck token.\n */\n async revokeToken(id: string): Promise<boolean> {\n this.config.requireSecretCredential('decks.revokeToken')\n\n const { query } = QueryBuilder.revokeDeckToken()\n const result = await this.connection.execute(query, { id })\n return Boolean(result['deckTokenRevoke'])\n }\n\n /**\n * Hydrate third-party-owned deck entries without storing them in CardDB.\n */\n async hydrateEntries(options: HydrateDeckEntriesOptions): Promise<HydratedDeckEntry[]> {\n if (options.entries.length === 0) return []\n\n const publisherSlug = this.resolvePublisher(options.publisherSlug)\n const gameKey = this.resolveGame(options.gameKey)\n this.validateAccess(publisherSlug, gameKey)\n\n const identifiers = options.entries.map((entry) => entry.identifier)\n const key = this.cacheKey('decks', 'hydrateEntries', {\n publisherSlug,\n gameKey,\n datasetKey: options.datasetKey,\n identifiers,\n })\n\n const records = await this.withCache(key, 'decks', options, async () => {\n const { query } = QueryBuilder.fetchRecordsByIdentifier()\n const result = await this.connection.execute(query, {\n publisherSlug,\n gameKey,\n datasetKey: options.datasetKey,\n identifiers,\n })\n return result['fetchRecordsByIdentifier'] as DatasetRecord[]\n })\n\n const recordsByIdentifier = recordsByDeckIdentifier(\n records,\n identifiers,\n options.identifierField\n )\n return options.entries.map((entry) => ({\n ...entry,\n record: recordsByIdentifier.get(entry.identifier) ?? null,\n }))\n }\n}\n\nfunction recordsByDeckIdentifier(\n records: DatasetRecord[],\n identifiers: string[],\n identifierField?: string\n): Map<string, DatasetRecord> {\n const remaining = new Set(identifiers)\n const recordsByIdentifier = new Map<string, DatasetRecord>()\n\n for (const record of records) {\n const identifier = identifierField\n ? record.data[identifierField]\n : Object.values(record.data).find((value) => remaining.has(String(value)))\n\n if (identifier === undefined || identifier === null) continue\n\n const key = String(identifier)\n if (!remaining.has(key)) continue\n\n recordsByIdentifier.set(key, record)\n remaining.delete(key)\n }\n\n return recordsByIdentifier\n}\n","/**\n * Records resource for CardDB API\n */\n\nimport type {\n DatasetRecord,\n DatasetRecordDeleteJob,\n DatasetRecordDeleteJobConnection,\n DatasetRecordDeleteJobStatus,\n DatasetRecordsDeleteInput,\n DatasetRecordsUpsertInput,\n DatasetRecordsUpsertPayload,\n FilterInput,\n Connection as ConnectionType,\n} from '@carddb/core'\nimport { Collection, QueryBuilder, resolveFilter } from '@carddb/core'\nimport { BaseResource } from './base.js'\nimport type { Configuration } from '../configuration.js'\nimport type { Connection } from '../connection.js'\n\nexport interface SearchRecordsOptions {\n /** Publisher slug (uses default if configured) */\n publisherSlug?: string\n /** Game key (uses default if configured) */\n gameKey?: string\n /** Dataset key (required) */\n datasetKey: string\n /**\n * Filter conditions - can be an object or a builder function\n *\n * @example Object literal\n * filter: { hp: { gte: 100 }, type: 'Pokemon' }\n *\n * @example Builder function\n * filter: f => f\n * .where('hp', gte(100))\n * .where('type', 'Pokemon')\n * .any(or => or\n * .where('rarity', 'rare')\n * .where('rarity', 'mythic')\n * )\n */\n filter?: FilterInput\n /** Full-text search across searchable fields */\n search?: string\n /**\n * Order by field with direction\n * @example 'name:asc', 'hp:desc', 'createdAt:desc'\n */\n orderBy?: string\n /**\n * Link fields to resolve (returns linked record data)\n * @example ['set_id', 'artist_id']\n */\n resolveLinks?: string[]\n /** Maximum number of results per page (default: 20, max: 100) */\n first?: number\n /** Cursor for pagination */\n after?: string\n /** Whether to validate filter against schema (default: true) */\n validateSchema?: boolean\n /** Include live TCGPlayer pricing when configured for the dataset */\n includePricing?: boolean\n /** Whether to use cache (defaults to client config) */\n cache?: boolean\n}\n\nexport interface GetRecordOptions {\n /** Include live TCGPlayer pricing when configured for the dataset */\n includePricing?: boolean\n /** Whether to use cache (defaults to client config) */\n cache?: boolean\n}\n\nexport interface GetRecordByIdentifierOptions {\n /** Publisher slug (uses default if configured) */\n publisherSlug?: string\n /** Game key (uses default if configured) */\n gameKey?: string\n /** Dataset key (required) */\n datasetKey: string\n /** The identifier value to look up */\n identifier: string\n /** Include live TCGPlayer pricing when configured for the dataset */\n includePricing?: boolean\n /** Whether to use cache (defaults to client config) */\n cache?: boolean\n}\n\nexport interface GetRecordsByIdentifierOptions {\n /** Publisher slug (uses default if configured) */\n publisherSlug?: string\n /** Game key (uses default if configured) */\n gameKey?: string\n /** Dataset key (required) */\n datasetKey: string\n /** Identifier values to look up */\n identifiers: string[]\n /** Include live TCGPlayer pricing when configured for the dataset */\n includePricing?: boolean\n /** Whether to use cache (defaults to client config) */\n cache?: boolean\n}\n\nexport interface ListRecordsOptions {\n /** Dataset ID to list records from */\n datasetId: string\n /** Filter conditions - can be an object or a builder function */\n filter?: FilterInput\n /** Sort field and direction */\n orderBy?: { field: string; direction?: 'ASC' | 'DESC' }\n /** Maximum number of results per page */\n first?: number\n /** Cursor for forward pagination */\n after?: string\n /** Maximum number of results for backward pagination */\n last?: number\n /** Cursor for backward pagination */\n before?: string\n /** Validate and sanitize against schema */\n validateSchema?: boolean\n /** Whether to use cache (defaults to client config) */\n cache?: boolean\n}\n\nexport interface GetRecordByDatasetIdentifierOptions extends GetRecordOptions {\n /** Dataset ID to search */\n datasetId: string\n /** Identifier value to look up */\n identifier: string\n}\n\nexport interface ListRecordDeleteJobsOptions {\n /** Dataset ID to filter jobs */\n datasetId?: string\n /** Job status to filter by */\n status?: DatasetRecordDeleteJobStatus\n /** Maximum number of results per page */\n first?: number\n /** Cursor for pagination */\n after?: string\n /** Whether to use cache (defaults to client config) */\n cache?: boolean\n}\n\nexport interface WaitForRecordDeleteJobOptions {\n /** Polling interval in milliseconds */\n intervalMs?: number\n /** Max time to wait in milliseconds */\n timeoutMs?: number\n}\n\nexport class RecordsResource extends BaseResource {\n constructor(connection: Connection, config: Configuration) {\n super(connection, config)\n }\n\n /**\n * List records in a publisher-accessible dataset by dataset ID.\n */\n async list(options: ListRecordsOptions): Promise<Collection<DatasetRecord>> {\n const filter = resolveFilter(options.filter)\n const { query, variables } = QueryBuilder.listDatasetRecords({\n datasetId: options.datasetId,\n filter,\n orderBy: options.orderBy,\n first: options.first,\n after: options.after,\n last: options.last,\n before: options.before,\n validateSchema: options.validateSchema,\n })\n const key = this.cacheKey('records', 'list', variables)\n\n const data = await this.withCache(key, 'records', options, async () => {\n const result = await this.connection.execute(query, variables)\n return result['datasetRecords'] as ConnectionType<DatasetRecord>\n })\n\n return new Collection(data, {\n nextPageLoader: async (cursor: string) => this.list({ ...options, after: cursor }),\n })\n }\n\n /**\n * Get a publisher-accessible record by dataset ID and identifier value.\n */\n async getByDatasetIdentifier(\n options: GetRecordByDatasetIdentifierOptions\n ): Promise<DatasetRecord | null> {\n const key = this.cacheKey('records', 'getByDatasetIdentifier', {\n datasetId: options.datasetId,\n identifier: options.identifier,\n includePricing: options.includePricing ?? false,\n })\n\n return this.withCache(key, 'records', options, async () => {\n const { query, variables } = QueryBuilder.datasetRecord({\n datasetId: options.datasetId,\n identifier: options.identifier,\n includePricing: options.includePricing,\n })\n const result = await this.connection.execute(query, variables)\n return (result['datasetRecord'] as DatasetRecord) ?? null\n })\n }\n\n /**\n * Start an import-backed batch upsert, or return a dry-run result. Requires a secret credential.\n */\n async upsertBatch(input: DatasetRecordsUpsertInput): Promise<DatasetRecordsUpsertPayload> {\n this.config.requireSecretCredential('records.upsertBatch')\n\n const { query } = QueryBuilder.upsertDatasetRecords()\n const result = await this.connection.execute(\n query,\n QueryBuilder.datasetRecordsUpsertVariables(input)\n )\n return result['datasetRecordsUpsert'] as DatasetRecordsUpsertPayload\n }\n\n /**\n * Create a dry-run or destructive bulk delete/reconciliation job. Requires a secret credential.\n */\n async deleteBatch(input: DatasetRecordsDeleteInput): Promise<DatasetRecordDeleteJob> {\n this.config.requireSecretCredential('records.deleteBatch')\n\n const { query } = QueryBuilder.deleteDatasetRecords()\n const result = await this.connection.execute(\n query,\n QueryBuilder.datasetRecordsDeleteVariables(input)\n )\n return result['datasetRecordsDelete'] as DatasetRecordDeleteJob\n }\n\n /**\n * Get one bulk delete/reconciliation job.\n */\n async getDeleteJob(\n id: string,\n options: GetRecordOptions = {}\n ): Promise<DatasetRecordDeleteJob | null> {\n const key = this.cacheKey('records', 'getDeleteJob', { id })\n\n return this.withCache(key, 'records', options, async () => {\n const { query } = QueryBuilder.datasetRecordDeleteJob()\n const result = await this.connection.execute(query, { id })\n return (result['datasetRecordDeleteJob'] as DatasetRecordDeleteJob) ?? null\n })\n }\n\n /**\n * List bulk delete/reconciliation jobs for a publisher.\n */\n async listDeleteJobs(\n publisherId: string,\n options: ListRecordDeleteJobsOptions = {}\n ): Promise<Collection<DatasetRecordDeleteJob>> {\n const { query, variables } = QueryBuilder.datasetRecordDeleteJobs({\n publisherId,\n datasetId: options.datasetId,\n status: options.status,\n first: options.first,\n after: options.after,\n })\n const key = this.cacheKey('records', 'listDeleteJobs', variables)\n\n const data = await this.withCache(key, 'records', options, async () => {\n const result = await this.connection.execute(query, variables)\n return result['datasetRecordDeleteJobs'] as DatasetRecordDeleteJobConnection\n })\n\n return new Collection(data, {\n nextPageLoader: async (cursor: string) =>\n this.listDeleteJobs(publisherId, { ...options, after: cursor }),\n })\n }\n\n /**\n * Poll a delete job until it reaches a terminal state.\n */\n async waitForDeleteJob(\n id: string,\n options: WaitForRecordDeleteJobOptions = {}\n ): Promise<DatasetRecordDeleteJob> {\n const intervalMs = options.intervalMs ?? 1000\n const timeoutMs = options.timeoutMs ?? 300000\n const startedAt = Date.now()\n\n while (true) {\n const job = await this.getDeleteJob(id, { cache: false })\n if (!job) throw new Error(`Delete job '${id}' was not found`)\n if (job.status === 'COMPLETED' || job.status === 'FAILED') return job\n if (Date.now() - startedAt >= timeoutMs) {\n throw new Error(`Timed out waiting for delete job '${id}'`)\n }\n await new Promise((resolve) => setTimeout(resolve, intervalMs))\n }\n }\n\n /**\n * Search for records in a dataset with filtering, search, and pagination\n *\n * @example Basic search\n * const records = await client.records.search({\n * publisherSlug: 'pokemon',\n * gameKey: 'tcg',\n * datasetKey: 'cards',\n * })\n *\n * @example With defaults configured\n * // If client has defaultPublisher: 'pokemon', defaultGame: 'tcg'\n * const records = await client.records.search({ datasetKey: 'cards' })\n *\n * @example With filtering (object literal)\n * const records = await client.records.search({\n * datasetKey: 'cards',\n * filter: {\n * hp: { gte: 100 },\n * types: { contains: 'Fire' }\n * }\n * })\n *\n * @example With filtering (builder function)\n * const records = await client.records.search({\n * datasetKey: 'cards',\n * filter: f => f\n * .where('hp', gte(100))\n * .where('types', contains('Fire'))\n * .any(or => or\n * .where('rarity', 'Rare')\n * .where('rarity', 'Rare Holo')\n * )\n * })\n *\n * @example With link resolution\n * const records = await client.records.search({\n * datasetKey: 'cards',\n * resolveLinks: ['set_id'],\n * filter: f => f.whereLink('set_id', { code: 'BASE' })\n * })\n *\n * @example Iterate through all results\n * const records = await client.records.search({ datasetKey: 'cards' })\n * for await (const record of records) {\n * console.log(record.data.name)\n * }\n */\n async search(options: SearchRecordsOptions): Promise<Collection<DatasetRecord>> {\n const publisherSlug = this.resolvePublisher(options.publisherSlug)\n const gameKey = this.resolveGame(options.gameKey)\n\n this.validateAccess(publisherSlug, gameKey)\n\n // Resolve filter (handles both object and builder function)\n const filter = resolveFilter(options.filter)\n\n const { query, variables } = QueryBuilder.searchRecords({\n publisherSlug,\n gameKey,\n datasetKey: options.datasetKey,\n filter,\n search: options.search,\n orderBy: options.orderBy,\n resolveLinks: options.resolveLinks,\n first: options.first,\n after: options.after,\n validateSchema: options.validateSchema,\n includePricing: options.includePricing,\n })\n\n const key = this.cacheKey('records', 'search', {\n ...variables,\n includePricing: options.includePricing ?? false,\n })\n\n const data = await this.withCache(key, 'records', options, async () => {\n const result = await this.connection.execute(query, variables)\n return result['searchRecords'] as ConnectionType<DatasetRecord>\n })\n\n return new Collection(data, {\n nextPageLoader: async (cursor: string) => {\n return this.search({ ...options, after: cursor })\n },\n })\n }\n\n /**\n * Get a single record by ID\n *\n * @example\n * const record = await client.records.get('550e8400-e29b-41d4-a716-446655440000')\n */\n async get(id: string, options: GetRecordOptions = {}): Promise<DatasetRecord | null> {\n const key = this.cacheKey('records', 'get', {\n id,\n includePricing: options.includePricing ?? false,\n })\n\n return this.withCache(key, 'records', options, async () => {\n const { query } = QueryBuilder.fetchRecordById({ includePricing: options.includePricing })\n const result = await this.connection.execute(query, { id })\n return (result['fetchRecord'] as DatasetRecord) ?? null\n })\n }\n\n /**\n * Get a record by its identifier field value\n *\n * The identifier field is defined in the dataset schema (the field marked as isIdentifier)\n *\n * @example\n * const record = await client.records.getByIdentifier({\n * publisherSlug: 'pokemon',\n * gameKey: 'tcg',\n * datasetKey: 'cards',\n * identifier: 'base1-4'\n * })\n *\n * @example With defaults configured\n * const record = await client.records.getByIdentifier({\n * datasetKey: 'cards',\n * identifier: 'base1-4'\n * })\n */\n async getByIdentifier(options: GetRecordByIdentifierOptions): Promise<DatasetRecord | null> {\n const publisherSlug = this.resolvePublisher(options.publisherSlug)\n const gameKey = this.resolveGame(options.gameKey)\n\n this.validateAccess(publisherSlug, gameKey)\n\n const key = this.cacheKey('records', 'getByIdentifier', {\n publisherSlug,\n gameKey,\n datasetKey: options.datasetKey,\n identifier: options.identifier,\n includePricing: options.includePricing ?? false,\n })\n\n return this.withCache(key, 'records', options, async () => {\n const { query } = QueryBuilder.fetchRecordByIdentifier({\n includePricing: options.includePricing,\n })\n const result = await this.connection.execute(query, {\n publisherSlug,\n gameKey,\n datasetKey: options.datasetKey,\n identifier: options.identifier,\n })\n return (result['fetchRecordByIdentifier'] as DatasetRecord) ?? null\n })\n }\n\n /**\n * Get multiple records by their identifier field values\n *\n * Missing identifiers are omitted from the result.\n *\n * @example\n * const records = await client.records.getManyByIdentifier({\n * publisherSlug: 'pokemon',\n * gameKey: 'tcg',\n * datasetKey: 'cards',\n * identifiers: ['base1-4', 'base1-5']\n * })\n *\n * @example With defaults configured\n * const records = await client.records.getManyByIdentifier({\n * datasetKey: 'cards',\n * identifiers: ['base1-4', 'base1-5']\n * })\n */\n async getManyByIdentifier(options: GetRecordsByIdentifierOptions): Promise<DatasetRecord[]> {\n if (options.identifiers.length === 0) return []\n\n const publisherSlug = this.resolvePublisher(options.publisherSlug)\n const gameKey = this.resolveGame(options.gameKey)\n\n this.validateAccess(publisherSlug, gameKey)\n\n const key = this.cacheKey('records', 'getManyByIdentifier', {\n publisherSlug,\n gameKey,\n datasetKey: options.datasetKey,\n identifiers: options.identifiers,\n includePricing: options.includePricing ?? false,\n })\n\n return this.withCache(key, 'records', options, async () => {\n const { query } = QueryBuilder.fetchRecordsByIdentifier({\n includePricing: options.includePricing,\n })\n const result = await this.connection.execute(query, {\n publisherSlug,\n gameKey,\n datasetKey: options.datasetKey,\n identifiers: options.identifiers,\n })\n return (result['fetchRecordsByIdentifier'] as DatasetRecord[]) ?? []\n })\n }\n\n /**\n * Get multiple records by ID\n *\n * @example\n * const records = await client.records.getMany(['id1', 'id2', 'id3'])\n */\n async getMany(ids: string[], options: GetRecordOptions = {}): Promise<DatasetRecord[]> {\n if (ids.length === 0) return []\n\n const key = this.cacheKey('records', 'getMany', {\n ids,\n includePricing: options.includePricing ?? false,\n })\n\n return this.withCache(key, 'records', options, async () => {\n const { query } = QueryBuilder.fetchRecords({ includePricing: options.includePricing })\n const result = await this.connection.execute(query, { ids })\n return (result['fetchRecords'] as DatasetRecord[]) ?? []\n })\n }\n}\n","/**\n * Rules resource for CardDB API\n */\n\nimport type {\n Dataset,\n DatasetRecord,\n FilterInput,\n Connection as ConnectionType,\n} from '@carddb/core'\nimport { Collection, QueryBuilder, resolveFilter } from '@carddb/core'\nimport { BaseResource } from './base.js'\nimport type { Configuration } from '../configuration.js'\nimport type { Connection } from '../connection.js'\n\nexport interface ListRuleDatasetsOptions {\n /** Publisher slug (uses default if configured) */\n publisherSlug?: string\n /** Game key (uses default if configured) */\n gameKey?: string\n /** Search term to filter rule datasets by name */\n search?: string\n /** Maximum number of results per page (default: 20, max: 100) */\n first?: number\n /** Cursor for pagination */\n after?: string\n /** Whether to use cache (defaults to client config) */\n cache?: boolean\n}\n\nexport interface ListRulesOptions {\n /** Publisher slug (uses default if configured) */\n publisherSlug?: string\n /** Game key (uses default if configured) */\n gameKey?: string\n /** Rules dataset key (defaults to \"rules\") */\n datasetKey?: string\n /** Filter conditions */\n filter?: FilterInput\n /** Full-text search across searchable fields */\n search?: string\n /** Order by field with direction, e.g. \"name:asc\" */\n orderBy?: string\n /** Link fields to resolve */\n resolveLinks?: string[]\n /** Maximum number of results per page (default: 20, max: 100) */\n first?: number\n /** Cursor for pagination */\n after?: string\n /** Whether to validate filter against schema (default: true) */\n validateSchema?: boolean\n /** Whether to use cache (defaults to client config) */\n cache?: boolean\n}\n\nexport interface ListFormatsOptions extends Omit<ListRulesOptions, 'datasetKey'> {\n /** Formats dataset key (defaults to \"formats\") */\n datasetKey?: string\n}\n\nexport class RulesResource extends BaseResource {\n constructor(connection: Connection, config: Configuration) {\n super(connection, config)\n }\n\n /**\n * List rule-related datasets for a game.\n *\n * @example\n * const datasets = await client.rules.datasets({ publisherSlug: 'wotc', gameKey: 'magic' })\n */\n async datasets(options: ListRuleDatasetsOptions = {}): Promise<Collection<Dataset>> {\n const publisherSlug = this.resolvePublisher(options.publisherSlug)\n const gameKey = this.resolveGame(options.gameKey)\n\n this.validateAccess(publisherSlug, gameKey)\n\n const { query, variables } = QueryBuilder.searchDatasets({\n publisherSlug,\n gameKey,\n search: options.search,\n purpose: 'RULES',\n first: options.first,\n after: options.after,\n })\n\n const key = this.cacheKey('rules', 'datasets', variables)\n const data = await this.withCache(key, 'datasets', options, async () => {\n const result = await this.connection.execute(query, variables)\n return result['searchDatasets'] as ConnectionType<Dataset>\n })\n\n return new Collection(data, {\n nextPageLoader: async (cursor: string) => this.datasets({ ...options, after: cursor }),\n })\n }\n\n /**\n * List rules from the game's rules dataset.\n *\n * @example\n * const rules = await client.rules.list({ first: 100 })\n */\n async list(options: ListRulesOptions = {}): Promise<Collection<DatasetRecord>> {\n return this.searchRuleRecords('rules', options)\n }\n\n /**\n * List deck/game formats from the game's formats dataset.\n *\n * @example\n * const formats = await client.rules.formats({ first: 100 })\n * const names = formats.items.map(format => format.data.name)\n */\n async formats(options: ListFormatsOptions = {}): Promise<Collection<DatasetRecord>> {\n return this.searchRuleRecords(options.datasetKey ?? 'formats', options)\n }\n\n private async searchRuleRecords(\n defaultDatasetKey: string,\n options: ListRulesOptions\n ): Promise<Collection<DatasetRecord>> {\n const publisherSlug = this.resolvePublisher(options.publisherSlug)\n const gameKey = this.resolveGame(options.gameKey)\n const datasetKey = options.datasetKey ?? defaultDatasetKey\n\n this.validateAccess(publisherSlug, gameKey)\n\n const filter = resolveFilter(options.filter)\n const { query, variables } = QueryBuilder.searchRecords({\n publisherSlug,\n gameKey,\n datasetKey,\n filter,\n search: options.search,\n orderBy: options.orderBy,\n resolveLinks: options.resolveLinks,\n first: options.first,\n after: options.after,\n validateSchema: options.validateSchema,\n })\n\n const key = this.cacheKey('rules', 'records', variables)\n const data = await this.withCache(key, 'records', options, async () => {\n const result = await this.connection.execute(query, variables)\n return result['searchRecords'] as ConnectionType<DatasetRecord>\n })\n\n return new Collection(data, {\n nextPageLoader: async (cursor: string) =>\n this.searchRuleRecords(defaultDatasetKey, { ...options, after: cursor }),\n })\n }\n}\n","/**\n * First-class rulesets resource for CardDB API\n */\n\nimport type {\n Connection as ConnectionType,\n DeckValidationRules,\n Ruleset,\n RulesetCreateInput,\n RulesetValidationImpact,\n RulesetVersion,\n RulesetVersionDraftCreateInput,\n RulesetVersionDraftImportFromDatasetRecordInput,\n RulesetVersionDraftImportPreview,\n RulesetVersionDraftUpdateInput,\n RulesetVersionPublishInput,\n RulesetVersionStatus,\n RulesetUpdateInput,\n} from '@carddb/core'\nimport { Collection, QueryBuilder } from '@carddb/core'\nimport { BaseResource } from './base.js'\nimport type { Configuration } from '../configuration.js'\nimport type { Connection } from '../connection.js'\n\nexport interface ListRulesetsOptions {\n /** Include archived rulesets */\n includeArchived?: boolean\n /** Maximum number of results per page */\n first?: number\n /** Cursor for pagination */\n after?: string\n /** Whether to use cache (defaults to client config) */\n cache?: boolean\n}\n\nexport type ListPublicRulesetsOptions = Omit<ListRulesetsOptions, 'includeArchived'>\n\nexport interface GetRulesetOptions {\n /** Whether to use cache (defaults to client config) */\n cache?: boolean\n}\n\nexport interface GetRulesetByKeyOptions extends GetRulesetOptions {\n /** Game ID for stable ruleset-key lookup */\n gameId: string\n /** Stable ruleset key */\n key: string\n}\n\nexport interface ListRulesetVersionsOptions extends GetRulesetOptions {\n /** Optional status filter */\n status?: RulesetVersionStatus\n /** Maximum number of results per page */\n first?: number\n /** Cursor for pagination */\n after?: string\n}\n\nexport interface RulesetValidationRulesOptions extends GetRulesetOptions {\n /** Optional immutable ruleset version override */\n rulesetVersionId?: string\n}\n\nexport interface RulesetValidationImpactOptions extends GetRulesetOptions {\n /** Maximum number of affected decks to include */\n first?: number\n}\n\nexport class RulesetsResource extends BaseResource {\n constructor(connection: Connection, config: Configuration) {\n super(connection, config)\n }\n\n /**\n * List first-class rulesets for a game.\n */\n async list(gameId: string, options: ListRulesetsOptions = {}): Promise<Collection<Ruleset>> {\n const { query, variables } = QueryBuilder.rulesets({\n gameId,\n includeArchived: options.includeArchived,\n first: options.first,\n after: options.after,\n })\n const key = this.cacheKey('rulesets', 'list', variables)\n\n const data = await this.withCache(key, 'rulesets', options, async () => {\n const result = await this.connection.execute(query, variables)\n return result['rulesets'] as ConnectionType<Ruleset>\n })\n\n return new Collection(data, {\n nextPageLoader: async (cursor: string) => this.list(gameId, { ...options, after: cursor }),\n })\n }\n\n /**\n * List active public rulesets for a public game.\n */\n async listPublic(\n gameId: string,\n options: ListPublicRulesetsOptions = {}\n ): Promise<Collection<Ruleset>> {\n const { query, variables } = QueryBuilder.publicRulesets({\n gameId,\n first: options.first,\n after: options.after,\n })\n const key = this.cacheKey('rulesets', 'listPublic', variables)\n\n const data = await this.withCache(key, 'rulesets', options, async () => {\n const result = await this.connection.execute(query, variables)\n return result['publicRulesets'] as ConnectionType<Ruleset>\n })\n\n return new Collection(data, {\n nextPageLoader: async (cursor: string) =>\n this.listPublic(gameId, { ...options, after: cursor }),\n })\n }\n\n /**\n * Get one ruleset by UUID.\n */\n async get(id: string, options: GetRulesetOptions = {}): Promise<Ruleset | null> {\n const variables = { id }\n const key = this.cacheKey('rulesets', 'get', variables)\n\n return this.withCache(key, 'rulesets', options, async () => {\n const { query, variables } = QueryBuilder.ruleset({ id })\n const result = await this.connection.execute(query, variables)\n return (result['ruleset'] as Ruleset) ?? null\n })\n }\n\n /**\n * Get one ruleset by game ID and stable key.\n */\n async getByKey(options: GetRulesetByKeyOptions): Promise<Ruleset | null> {\n const variables = { gameId: options.gameId, key: options.key }\n const cacheKey = this.cacheKey('rulesets', 'getByKey', variables)\n\n return this.withCache(cacheKey, 'rulesets', options, async () => {\n const { query, variables } = QueryBuilder.ruleset({\n gameId: options.gameId,\n key: options.key,\n })\n const result = await this.connection.execute(query, variables)\n return (result['ruleset'] as Ruleset) ?? null\n })\n }\n\n /**\n * List immutable versions for a ruleset.\n */\n async versions(\n rulesetId: string,\n options: ListRulesetVersionsOptions = {}\n ): Promise<Collection<RulesetVersion>> {\n const { query, variables } = QueryBuilder.rulesetVersions({\n rulesetId,\n status: options.status,\n first: options.first,\n after: options.after,\n })\n const key = this.cacheKey('rulesets', 'versions', variables)\n\n const data = await this.withCache(key, 'rulesets', options, async () => {\n const result = await this.connection.execute(query, variables)\n return result['rulesetVersions'] as ConnectionType<RulesetVersion>\n })\n\n return new Collection(data, {\n nextPageLoader: async (cursor: string) =>\n this.versions(rulesetId, { ...options, after: cursor }),\n })\n }\n\n /**\n * Get one immutable ruleset version by UUID.\n */\n async getVersion(id: string, options: GetRulesetOptions = {}): Promise<RulesetVersion | null> {\n const key = this.cacheKey('rulesets', 'getVersion', { id })\n\n return this.withCache(key, 'rulesets', options, async () => {\n const { query } = QueryBuilder.rulesetVersion()\n const result = await this.connection.execute(query, { id })\n return (result['rulesetVersion'] as RulesetVersion) ?? null\n })\n }\n\n /**\n * Get the canonical active rules JSON for a ruleset.\n */\n async validationRules(\n gameId: string,\n rulesetKey: string,\n options: RulesetValidationRulesOptions = {}\n ): Promise<Record<string, unknown> | null> {\n const variables = QueryBuilder.rulesetValidationRulesVariables(\n gameId,\n rulesetKey,\n options.rulesetVersionId\n )\n const key = this.cacheKey('rulesets', 'validationRules', variables)\n\n return this.withCache(key, 'rulesets', options, async () => {\n const { query } = QueryBuilder.rulesetValidationRules()\n const result = await this.connection.execute(query, variables)\n return (result['rulesetValidationRules'] as Record<string, unknown>) ?? null\n })\n }\n\n /**\n * Get typed validation rules, including parsed deck sections.\n */\n async deckValidationRules(\n gameId: string,\n rulesetKey: string,\n options: RulesetValidationRulesOptions = {}\n ): Promise<DeckValidationRules | null> {\n const variables = QueryBuilder.rulesetValidationRulesVariables(\n gameId,\n rulesetKey,\n options.rulesetVersionId\n )\n const key = this.cacheKey('rulesets', 'deckValidationRules', variables)\n\n return this.withCache(key, 'rulesets', options, async () => {\n const { query } = QueryBuilder.deckValidationRules()\n const result = await this.connection.execute(query, variables)\n return (result['deckValidationRules'] as DeckValidationRules) ?? null\n })\n }\n\n /**\n * Preview compiling a legacy formats dataset record into a draft ruleset version.\n */\n async previewImport(\n rulesetId: string,\n input: RulesetVersionDraftImportFromDatasetRecordInput\n ): Promise<RulesetVersionDraftImportPreview> {\n const { query } = QueryBuilder.rulesetVersionDraftImportPreview()\n const variables = QueryBuilder.rulesetVersionDraftImportPreviewVariables(rulesetId, input)\n const result = await this.connection.execute(query, variables)\n return result['rulesetVersionDraftImportPreview'] as RulesetVersionDraftImportPreview\n }\n\n /**\n * Preview validation impact for decks that use a ruleset version's parent ruleset.\n */\n async validationImpact(\n rulesetVersionId: string,\n options: RulesetValidationImpactOptions = {}\n ): Promise<RulesetValidationImpact> {\n const { query, variables } = QueryBuilder.rulesetValidationImpact({\n rulesetVersionId,\n first: options.first,\n })\n const key = this.cacheKey('rulesets', 'validationImpact', variables)\n\n return this.withCache(key, 'rulesets', options, async () => {\n const result = await this.connection.execute(query, variables)\n return result['rulesetValidationImpact'] as RulesetValidationImpact\n })\n }\n\n /**\n * Create a first-class ruleset. Requires a server-side secret credential.\n */\n async create(input: RulesetCreateInput): Promise<Ruleset> {\n this.config.requireSecretCredential('rulesets.create')\n\n const { query } = QueryBuilder.createRuleset()\n const result = await this.connection.execute(query, QueryBuilder.rulesetCreateVariables(input))\n return result['rulesetCreate'] as Ruleset\n }\n\n /**\n * Update editable ruleset metadata. Requires a server-side secret credential.\n */\n async update(id: string, input: RulesetUpdateInput): Promise<Ruleset> {\n this.config.requireSecretCredential('rulesets.update')\n\n const { query } = QueryBuilder.updateRuleset()\n const result = await this.connection.execute(\n query,\n QueryBuilder.rulesetUpdateVariables(id, input)\n )\n return result['rulesetUpdate'] as Ruleset\n }\n\n /**\n * Create a draft ruleset version from an explicit canonical rules payload.\n */\n async createDraft(\n rulesetId: string,\n input: RulesetVersionDraftCreateInput\n ): Promise<RulesetVersion> {\n this.config.requireSecretCredential('rulesets.createDraft')\n\n const { query } = QueryBuilder.createRulesetVersionDraft()\n const result = await this.connection.execute(\n query,\n QueryBuilder.rulesetVersionDraftCreateVariables(rulesetId, input)\n )\n return result['rulesetVersionDraftCreate'] as RulesetVersion\n }\n\n /**\n * Create a draft by compiling a legacy formats dataset record.\n */\n async importDraftFromDatasetRecord(\n rulesetId: string,\n input: RulesetVersionDraftImportFromDatasetRecordInput\n ): Promise<RulesetVersion> {\n this.config.requireSecretCredential('rulesets.importDraftFromDatasetRecord')\n\n const { query } = QueryBuilder.importRulesetVersionDraftFromDatasetRecord()\n const result = await this.connection.execute(\n query,\n QueryBuilder.rulesetVersionDraftImportFromDatasetRecordVariables(rulesetId, input)\n )\n return result['rulesetVersionDraftImportFromDatasetRecord'] as RulesetVersion\n }\n\n /**\n * Update a draft ruleset version.\n */\n async updateDraft(id: string, input: RulesetVersionDraftUpdateInput): Promise<RulesetVersion> {\n this.config.requireSecretCredential('rulesets.updateDraft')\n\n const { query } = QueryBuilder.updateRulesetVersionDraft()\n const result = await this.connection.execute(\n query,\n QueryBuilder.rulesetVersionDraftUpdateVariables(id, input)\n )\n return result['rulesetVersionDraftUpdate'] as RulesetVersion\n }\n\n /**\n * Publish a draft and make it the current active ruleset version.\n */\n async publishVersion(id: string, input?: RulesetVersionPublishInput): Promise<RulesetVersion> {\n this.config.requireSecretCredential('rulesets.publishVersion')\n\n const { query } = QueryBuilder.publishRulesetVersion()\n const result = await this.connection.execute(\n query,\n QueryBuilder.rulesetVersionPublishVariables(id, input)\n )\n return result['rulesetVersionPublish'] as RulesetVersion\n }\n\n /**\n * Activate an already-published version for rollback.\n */\n async activateVersion(id: string): Promise<RulesetVersion> {\n this.config.requireSecretCredential('rulesets.activateVersion')\n\n const { query } = QueryBuilder.activateRulesetVersion()\n const result = await this.connection.execute(query, { id })\n return result['rulesetVersionActivate'] as RulesetVersion\n }\n}\n","/**\n * Publisher-managed import format resource for CardDB API\n */\n\nimport type {\n Connection as ConnectionType,\n DeckImportFormatCreateInput,\n DeckImportFormatDefinition,\n DeckImportFormatTestInput,\n DeckImportFormatTestPayload,\n DeckImportFormatUpdateInput,\n} from '@carddb/core'\nimport { Collection, QueryBuilder } from '@carddb/core'\nimport { BaseResource } from './base.js'\nimport type { Configuration } from '../configuration.js'\nimport type { Connection } from '../connection.js'\n\nexport interface ListImportFormatsOptions {\n /** Publisher ID for publisher-scoped listing */\n publisherId?: string\n /** Game ID for game-scoped listing */\n gameId?: string\n /** Include archived definitions */\n includeArchived?: boolean\n /** Maximum number of results per page */\n first?: number\n /** Cursor for pagination */\n after?: string\n /** Whether to use cache (defaults to client config) */\n cache?: boolean\n}\n\nexport interface GetImportFormatOptions {\n /** Whether to use cache (defaults to client config) */\n cache?: boolean\n}\n\nexport interface GetImportFormatByKeyOptions extends GetImportFormatOptions {\n /** Game ID for stable format-key lookup */\n gameId: string\n /** Stable import format key */\n key: string\n}\n\nexport class ImportFormatsResource extends BaseResource {\n constructor(connection: Connection, config: Configuration) {\n super(connection, config)\n }\n\n /**\n * List publisher-managed import formats by publisher or game scope.\n */\n async list(options: ListImportFormatsOptions): Promise<Collection<DeckImportFormatDefinition>> {\n const { query, variables } = QueryBuilder.deckImportFormats({\n publisherId: options.publisherId,\n gameId: options.gameId,\n includeArchived: options.includeArchived,\n first: options.first,\n after: options.after,\n })\n const key = this.cacheKey('importFormats', 'list', variables)\n\n const data = await this.withCache(key, 'importFormats', options, async () => {\n const result = await this.connection.execute(query, variables)\n return result['deckImportFormats'] as ConnectionType<DeckImportFormatDefinition>\n })\n\n return new Collection(data, {\n nextPageLoader: async (cursor: string) => this.list({ ...options, after: cursor }),\n })\n }\n\n /**\n * Get one import format by UUID.\n */\n async get(\n id: string,\n options: GetImportFormatOptions = {}\n ): Promise<DeckImportFormatDefinition | null> {\n const key = this.cacheKey('importFormats', 'get', { id })\n\n return this.withCache(key, 'importFormats', options, async () => {\n const { query } = QueryBuilder.deckImportFormat()\n const result = await this.connection.execute(query, { id })\n return (result['deckImportFormat'] as DeckImportFormatDefinition) ?? null\n })\n }\n\n /**\n * Get one import format by game ID and stable key.\n */\n async getByKey(options: GetImportFormatByKeyOptions): Promise<DeckImportFormatDefinition | null> {\n const key = this.cacheKey('importFormats', 'getByKey', {\n gameId: options.gameId,\n formatKey: options.key,\n })\n\n return this.withCache(key, 'importFormats', options, async () => {\n const { query } = QueryBuilder.deckImportFormat()\n const result = await this.connection.execute(query, {\n gameId: options.gameId,\n key: options.key,\n })\n return (result['deckImportFormat'] as DeckImportFormatDefinition) ?? null\n })\n }\n\n /**\n * Preview parsing and record resolution for a configured import format.\n */\n async test(input: DeckImportFormatTestInput): Promise<DeckImportFormatTestPayload> {\n const { query } = QueryBuilder.deckImportFormatTest()\n const result = await this.connection.execute(\n query,\n QueryBuilder.deckImportFormatTestVariables(input)\n )\n return result['deckImportFormatTest'] as DeckImportFormatTestPayload\n }\n\n /**\n * Create an import format. Requires a server-side secret credential.\n */\n async create(input: DeckImportFormatCreateInput): Promise<DeckImportFormatDefinition> {\n this.config.requireSecretCredential('importFormats.create')\n\n const { query } = QueryBuilder.createDeckImportFormat()\n const result = await this.connection.execute(\n query,\n QueryBuilder.deckImportFormatCreateVariables(input)\n )\n return result['deckImportFormatCreate'] as DeckImportFormatDefinition\n }\n\n /**\n * Update an import format. Requires a server-side secret credential.\n */\n async update(\n id: string,\n input: DeckImportFormatUpdateInput\n ): Promise<DeckImportFormatDefinition> {\n this.config.requireSecretCredential('importFormats.update')\n\n const { query } = QueryBuilder.updateDeckImportFormat()\n const result = await this.connection.execute(\n query,\n QueryBuilder.deckImportFormatUpdateVariables(id, input)\n )\n return result['deckImportFormatUpdate'] as DeckImportFormatDefinition\n }\n\n /**\n * Archive an import format. Requires a server-side secret credential.\n */\n async archive(id: string): Promise<DeckImportFormatDefinition> {\n this.config.requireSecretCredential('importFormats.archive')\n\n const { query } = QueryBuilder.archiveDeckImportFormat()\n const result = await this.connection.execute(query, { id })\n return result['deckImportFormatArchive'] as DeckImportFormatDefinition\n }\n\n /**\n * Restore an archived import format. Requires a server-side secret credential.\n */\n async unarchive(id: string): Promise<DeckImportFormatDefinition> {\n this.config.requireSecretCredential('importFormats.unarchive')\n\n const { query } = QueryBuilder.unarchiveDeckImportFormat()\n const result = await this.connection.execute(query, { id })\n return result['deckImportFormatUnarchive'] as DeckImportFormatDefinition\n }\n}\n","/**\n * Publisher import jobs resource for CardDB API\n */\n\nimport type {\n BulkImportResult,\n Connection as ConnectionType,\n DatasetImportFromPayloadInput,\n DatasetImportPreviewInput,\n DatasetImportPreviewResult,\n DatasetImportRunInput,\n DatasetImportValidateInput,\n GameImportJob,\n GameImportJobConnection,\n GameImportFromPayloadInput,\n GameImportPreview,\n GameImportPreviewInput,\n GameImportRunInput,\n ImportJob,\n ImportJobConnection,\n ImportJobLog,\n ImportJobLogConnection,\n ImportJobStatus,\n ImportLogLevel,\n} from '@carddb/core'\nimport { Collection, QueryBuilder } from '@carddb/core'\nimport { BaseResource } from './base.js'\nimport type { Configuration } from '../configuration.js'\nimport type { Connection } from '../connection.js'\n\nexport interface ListImportJobsOptions {\n /** Dataset ID to filter by */\n datasetId?: string\n /** Job status to filter by */\n status?: ImportJobStatus\n /** Maximum number of results per page */\n first?: number\n /** Cursor for pagination */\n after?: string\n /** Whether to use cache (defaults to client config) */\n cache?: boolean\n}\n\nexport interface ListGameImportJobsOptions {\n /** Job status to filter by */\n status?: ImportJobStatus\n /** Maximum number of results per page */\n first?: number\n /** Cursor for pagination */\n after?: string\n /** Whether to use cache (defaults to client config) */\n cache?: boolean\n}\n\nexport interface ListImportJobLogsOptions {\n /** Log level to filter by */\n level?: ImportLogLevel\n /** Dataset key to filter by */\n datasetKey?: string\n /** Maximum number of results per page */\n first?: number\n /** Cursor for pagination */\n after?: string\n /** Whether to use cache (defaults to client config) */\n cache?: boolean\n}\n\nexport interface WaitForImportJobOptions {\n /** Polling interval in milliseconds */\n intervalMs?: number\n /** Max time to wait in milliseconds */\n timeoutMs?: number\n}\n\nexport class ImportsResource extends BaseResource {\n constructor(connection: Connection, config: Configuration) {\n super(connection, config)\n }\n\n /**\n * Preview a single-dataset import source without writing records or schema.\n */\n async preview(input: DatasetImportPreviewInput): Promise<DatasetImportPreviewResult> {\n const { query } = QueryBuilder.datasetImportPreview()\n const result = await this.connection.execute(\n query,\n QueryBuilder.datasetImportPreviewVariables(input)\n )\n return result['datasetImportPreview'] as DatasetImportPreviewResult\n }\n\n /**\n * Validate a single-dataset import source with dry-run enforced.\n */\n async validate(input: DatasetImportValidateInput): Promise<BulkImportResult> {\n const { query } = QueryBuilder.datasetImportValidate()\n const result = await this.connection.execute(\n query,\n QueryBuilder.datasetImportValidateVariables(input)\n )\n return result['datasetImportValidate'] as BulkImportResult\n }\n\n /**\n * Start an async single-dataset import from `fileId`, `data`, or `sourceUrl`.\n */\n async run(input: DatasetImportRunInput): Promise<ImportJob> {\n this.config.requireSecretCredential('imports.run')\n\n if ('fileId' in input && input.fileId) {\n const { query } = QueryBuilder.datasetImportFromFile()\n const result = await this.connection.execute(\n query,\n QueryBuilder.datasetImportFromFileVariables(input)\n )\n return result['datasetImportFromFile'] as ImportJob\n }\n\n if ('sourceUrl' in input && input.sourceUrl) {\n const { query } = QueryBuilder.datasetImportFromUrl()\n const result = await this.connection.execute(\n query,\n QueryBuilder.datasetImportFromUrlVariables(input)\n )\n return result['datasetImportFromUrl'] as ImportJob\n }\n\n const { query } = QueryBuilder.datasetImportFromPayload()\n const result = await this.connection.execute(\n query,\n QueryBuilder.datasetImportFromPayloadVariables(input as DatasetImportFromPayloadInput)\n )\n return result['datasetImportFromPayload'] as ImportJob\n }\n\n /**\n * Fetch one single-dataset import job.\n */\n async getJob(id: string, options: { cache?: boolean } = {}): Promise<ImportJob | null> {\n const key = this.cacheKey('imports', 'getJob', { id })\n\n return this.withCache(key, 'imports', options, async () => {\n const { query } = QueryBuilder.importJob()\n const result = await this.connection.execute(query, { id })\n return (result['importJob'] as ImportJob) ?? null\n })\n }\n\n /**\n * List single-dataset import jobs for a publisher.\n */\n async listJobs(\n publisherId: string,\n options: ListImportJobsOptions = {}\n ): Promise<Collection<ImportJob>> {\n const { query, variables } = QueryBuilder.importJobs({\n publisherId,\n datasetId: options.datasetId,\n status: options.status,\n first: options.first,\n after: options.after,\n })\n const key = this.cacheKey('imports', 'listJobs', variables)\n\n const data = await this.withCache(key, 'imports', options, async () => {\n const result = await this.connection.execute(query, variables)\n return result['importJobs'] as ImportJobConnection\n })\n\n return new Collection(data, {\n nextPageLoader: async (cursor: string) =>\n this.listJobs(publisherId, { ...options, after: cursor }),\n })\n }\n\n /**\n * Cancel a pending or processing single-dataset import job.\n */\n async cancelJob(id: string): Promise<ImportJob> {\n this.config.requireSecretCredential('imports.cancelJob')\n\n const { query } = QueryBuilder.importJobCancel()\n const result = await this.connection.execute(query, { id })\n return result['importJobCancel'] as ImportJob\n }\n\n /**\n * List structured logs for one single-dataset import job.\n */\n async listJobLogs(\n importJobId: string,\n options: ListImportJobLogsOptions = {}\n ): Promise<Collection<ImportJobLog>> {\n const { query, variables } = QueryBuilder.importJobLogs({\n importJobId,\n level: options.level,\n datasetKey: options.datasetKey,\n first: options.first,\n after: options.after,\n })\n const key = this.cacheKey('imports', 'listJobLogs', variables)\n\n const data = await this.withCache(key, 'imports', options, async () => {\n const result = await this.connection.execute(query, variables)\n const job = result['importJob'] as { logs: ImportJobLogConnection } | null\n return job?.logs ?? emptyConnection<ImportJobLog>()\n })\n\n return new Collection(data, {\n nextPageLoader: async (cursor: string) =>\n this.listJobLogs(importJobId, { ...options, after: cursor }),\n })\n }\n\n /**\n * Poll a single-dataset import job until completion or failure.\n */\n async waitForJob(id: string, options: WaitForImportJobOptions = {}): Promise<ImportJob> {\n const intervalMs = options.intervalMs ?? 1000\n const timeoutMs = options.timeoutMs ?? 300000\n const startedAt = Date.now()\n\n while (true) {\n const job = await this.getJob(id, { cache: false })\n if (!job) throw new Error(`Import job '${id}' was not found`)\n if (job.status === 'COMPLETED' || job.status === 'FAILED') return job\n if (Date.now() - startedAt >= timeoutMs) {\n throw new Error(`Timed out waiting for import job '${id}'`)\n }\n await new Promise((resolve) => setTimeout(resolve, intervalMs))\n }\n }\n\n /**\n * Preview an advanced game-level import source without writing records or schema.\n */\n async previewGame(input: GameImportPreviewInput): Promise<GameImportPreview> {\n const { query } = QueryBuilder.gameImportPreview()\n const result = await this.connection.execute(\n query,\n QueryBuilder.gameImportPreviewVariables(input)\n )\n return result['gameImportPreview'] as GameImportPreview\n }\n\n /**\n * Start an async advanced game-level import from `fileId`, `data`, or `sourceUrl`.\n */\n async runGame(input: GameImportRunInput): Promise<GameImportJob> {\n this.config.requireSecretCredential('imports.runGame')\n\n if ('fileId' in input && input.fileId) {\n const { query } = QueryBuilder.gameImportFromFile()\n const result = await this.connection.execute(\n query,\n QueryBuilder.gameImportFromFileVariables(input)\n )\n return result['gameImportFromFile'] as GameImportJob\n }\n\n if ('sourceUrl' in input && input.sourceUrl) {\n const { query } = QueryBuilder.gameImportFromUrl()\n const result = await this.connection.execute(\n query,\n QueryBuilder.gameImportFromUrlVariables(input)\n )\n return result['gameImportFromUrl'] as GameImportJob\n }\n\n const { query } = QueryBuilder.gameImportFromPayload()\n const result = await this.connection.execute(\n query,\n QueryBuilder.gameImportFromPayloadVariables(input as GameImportFromPayloadInput)\n )\n return result['gameImportFromPayload'] as GameImportJob\n }\n\n /**\n * Fetch one advanced game-level import job.\n */\n async getGameJob(id: string, options: { cache?: boolean } = {}): Promise<GameImportJob | null> {\n const key = this.cacheKey('imports', 'getGameJob', { id })\n\n return this.withCache(key, 'imports', options, async () => {\n const { query } = QueryBuilder.gameImportJob()\n const result = await this.connection.execute(query, { id })\n return (result['gameImportJob'] as GameImportJob) ?? null\n })\n }\n\n /**\n * List advanced game-level import jobs.\n */\n async listGameJobs(\n gameId: string,\n options: ListGameImportJobsOptions = {}\n ): Promise<Collection<GameImportJob>> {\n const { query, variables } = QueryBuilder.gameImportJobs({\n gameId,\n status: options.status,\n first: options.first,\n after: options.after,\n })\n const key = this.cacheKey('imports', 'listGameJobs', variables)\n\n const data = await this.withCache(key, 'imports', options, async () => {\n const result = await this.connection.execute(query, variables)\n return result['gameImportJobs'] as GameImportJobConnection\n })\n\n return new Collection(data, {\n nextPageLoader: async (cursor: string) =>\n this.listGameJobs(gameId, { ...options, after: cursor }),\n })\n }\n\n /**\n * Cancel a pending or processing advanced game-level import job.\n */\n async cancelGameJob(id: string): Promise<GameImportJob> {\n this.config.requireSecretCredential('imports.cancelGameJob')\n\n const { query } = QueryBuilder.gameImportJobCancel()\n const result = await this.connection.execute(query, { id })\n return result['gameImportJobCancel'] as GameImportJob\n }\n\n /**\n * Poll an advanced game-level import job until completion or failure.\n */\n async waitForGameJob(id: string, options: WaitForImportJobOptions = {}): Promise<GameImportJob> {\n const intervalMs = options.intervalMs ?? 1000\n const timeoutMs = options.timeoutMs ?? 300000\n const startedAt = Date.now()\n\n while (true) {\n const job = await this.getGameJob(id, { cache: false })\n if (!job) throw new Error(`Game import job '${id}' was not found`)\n if (job.status === 'COMPLETED' || job.status === 'FAILED') return job\n if (Date.now() - startedAt >= timeoutMs) {\n throw new Error(`Timed out waiting for game import job '${id}'`)\n }\n await new Promise((resolve) => setTimeout(resolve, intervalMs))\n }\n }\n}\n\nfunction emptyConnection<T>(): ConnectionType<T> {\n return {\n totalCount: 0,\n pageInfo: {\n hasNextPage: false,\n hasPreviousPage: false,\n startCursor: null,\n endCursor: null,\n },\n edges: [],\n }\n}\n","/**\n * Publisher dataset export jobs resource for CardDB API\n */\n\nimport type {\n DatasetExportInput,\n ExportJob,\n ExportJobConnection,\n ExportJobStatus,\n} from '@carddb/core'\nimport { Collection, QueryBuilder } from '@carddb/core'\nimport { BaseResource } from './base.js'\nimport type { Configuration } from '../configuration.js'\nimport type { Connection } from '../connection.js'\n\nexport interface ListExportJobsOptions {\n /** Game ID to filter by */\n gameId?: string\n /** Dataset ID to filter by */\n datasetId?: string\n /** Job status to filter by */\n status?: ExportJobStatus\n /** Maximum number of results per page */\n first?: number\n /** Cursor for pagination */\n after?: string\n /** Whether to use cache (defaults to client config) */\n cache?: boolean\n}\n\nexport interface WaitForExportJobOptions {\n /** Polling interval in milliseconds */\n intervalMs?: number\n /** Max time to wait in milliseconds */\n timeoutMs?: number\n}\n\nexport class ExportsResource extends BaseResource {\n constructor(connection: Connection, config: Configuration) {\n super(connection, config)\n }\n\n /**\n * Start an async dataset export. Requires a server-side secret credential.\n */\n async run(input: DatasetExportInput): Promise<ExportJob> {\n this.config.requireSecretCredential('exports.run')\n\n const { query } = QueryBuilder.datasetExport()\n const result = await this.connection.execute(query, QueryBuilder.datasetExportVariables(input))\n return result['datasetExport'] as ExportJob\n }\n\n /** Alias for `run`. */\n async create(input: DatasetExportInput): Promise<ExportJob> {\n return this.run(input)\n }\n\n /**\n * Fetch one export job.\n */\n async getJob(id: string, options: { cache?: boolean } = {}): Promise<ExportJob | null> {\n const key = this.cacheKey('exports', 'getJob', { id })\n\n return this.withCache(key, 'exports', options, async () => {\n const { query } = QueryBuilder.exportJob()\n const result = await this.connection.execute(query, { id })\n return (result['exportJob'] as ExportJob) ?? null\n })\n }\n\n /**\n * List export jobs for a publisher, optionally filtered by game, dataset, or status.\n */\n async listJobs(\n publisherId: string,\n options: ListExportJobsOptions = {}\n ): Promise<Collection<ExportJob>> {\n const { query, variables } = QueryBuilder.exportJobs({\n publisherId,\n gameId: options.gameId,\n datasetId: options.datasetId,\n status: options.status,\n first: options.first,\n after: options.after,\n })\n const key = this.cacheKey('exports', 'listJobs', variables)\n\n const data = await this.withCache(key, 'exports', options, async () => {\n const result = await this.connection.execute(query, variables)\n return result['exportJobs'] as ExportJobConnection\n })\n\n return new Collection(data, {\n nextPageLoader: async (cursor: string) =>\n this.listJobs(publisherId, { ...options, after: cursor }),\n })\n }\n\n /**\n * Refresh the signed download URL for a completed export job.\n */\n async refreshUrl(id: string): Promise<ExportJob> {\n const { query } = QueryBuilder.exportJobRefreshUrl()\n const result = await this.connection.execute(query, { id })\n return result['exportJobRefreshUrl'] as ExportJob\n }\n\n /**\n * Cancel a pending or processing export job. Requires a server-side secret credential.\n */\n async cancel(id: string): Promise<ExportJob> {\n this.config.requireSecretCredential('exports.cancel')\n\n const { query } = QueryBuilder.exportJobCancel()\n const result = await this.connection.execute(query, { id })\n return result['exportJobCancel'] as ExportJob\n }\n\n /**\n * Poll an export job until completion or failure.\n */\n async waitForJob(id: string, options: WaitForExportJobOptions = {}): Promise<ExportJob> {\n const intervalMs = options.intervalMs ?? 1000\n const timeoutMs = options.timeoutMs ?? 300000\n const startedAt = Date.now()\n\n while (true) {\n const job = await this.getJob(id, { cache: false })\n if (!job) throw new Error(`Export job '${id}' was not found`)\n if (job.status === 'COMPLETED' || job.status === 'FAILED') return job\n if (Date.now() - startedAt >= timeoutMs) {\n throw new Error(`Timed out waiting for export job '${id}'`)\n }\n await new Promise((resolve) => setTimeout(resolve, intervalMs))\n }\n }\n}\n","/**\n * File upload helper resource for CardDB API\n */\n\nimport type {\n File as CardDBFile,\n FileUploadInput,\n PresignedUpload,\n UploadPurpose,\n} from '@carddb/core'\nimport { QueryBuilder } from '@carddb/core'\nimport { BaseResource } from './base.js'\nimport type { Configuration } from '../configuration.js'\nimport type { Connection } from '../connection.js'\n\nexport interface GetFileOptions {\n /** Whether to use cache (defaults to client config) */\n cache?: boolean\n}\n\nexport interface UploadFileInput {\n filename: string\n contentType: string\n body: unknown\n /** File size in bytes. Inferred for strings, ArrayBuffers, typed arrays, Blob/File-like values. */\n size?: number\n /** Defaults to false. */\n isPublic?: boolean\n /** Convenience purpose mapped onto existing file metadata. */\n purpose?: UploadPurpose\n /** Override the entity type sent to the API. */\n entityType?: string\n entityId?: string\n publisherId?: string\n datasetId?: string\n}\n\ntype UploadFetchResponse = {\n ok: boolean\n status: number\n statusText: string\n text(): Promise<string>\n}\n\ntype UploadFetch = (\n url: string,\n init: { method: 'PUT'; headers: Record<string, string>; body: unknown }\n) => Promise<UploadFetchResponse>\n\nexport class FilesResource extends BaseResource {\n constructor(connection: Connection, config: Configuration) {\n super(connection, config)\n }\n\n /**\n * Get one file by ID.\n */\n async get(id: string, options: GetFileOptions = {}): Promise<CardDBFile | null> {\n const key = this.cacheKey('files', 'get', { id })\n\n return this.withCache(key, 'files', options, async () => {\n const { query } = QueryBuilder.file()\n const result = await this.connection.execute(query, { id })\n return (result['file'] as CardDBFile) ?? null\n })\n }\n\n /**\n * Request a presigned URL for direct upload. Requires a server-side secret credential.\n */\n async requestUpload(input: FileUploadInput): Promise<PresignedUpload> {\n this.config.requireSecretCredential('files.requestUpload')\n\n const { query } = QueryBuilder.fileUploadRequest()\n const result = await this.connection.execute(\n query,\n QueryBuilder.fileUploadRequestVariables(input)\n )\n return result['fileUploadRequest'] as PresignedUpload\n }\n\n /**\n * Confirm that a presigned upload completed.\n */\n async confirmUpload(id: string): Promise<CardDBFile> {\n this.config.requireSecretCredential('files.confirmUpload')\n\n const { query } = QueryBuilder.fileUploadConfirm()\n const result = await this.connection.execute(query, { id })\n return result['fileUploadConfirm'] as CardDBFile\n }\n\n /**\n * Request a presigned upload URL, PUT bytes directly to storage, then confirm the file.\n */\n async upload(input: UploadFileInput): Promise<CardDBFile> {\n const size = input.size ?? inferUploadSize(input.body)\n if (!size || size <= 0) {\n throw new Error('files.upload requires a positive size or a body with an inferable size')\n }\n\n const upload = await this.requestUpload({\n filename: input.filename,\n contentType: input.contentType,\n size,\n isPublic: input.isPublic ?? false,\n entityType: input.entityType ?? entityTypeForPurpose(input.purpose),\n entityId: input.entityId,\n publisherId: input.publisherId,\n datasetId: input.datasetId,\n })\n\n await putUpload(upload.uploadUrl, input.contentType, input.body)\n return this.confirmUpload(upload.file.id)\n }\n\n /**\n * Delete a file. Requires a server-side secret credential.\n */\n async delete(id: string): Promise<boolean> {\n this.config.requireSecretCredential('files.delete')\n\n const { query } = QueryBuilder.fileDelete()\n const result = await this.connection.execute(query, { id })\n return Boolean(result['fileDelete'])\n }\n}\n\nasync function putUpload(uploadUrl: string, contentType: string, body: unknown): Promise<void> {\n const uploadFetch = (globalThis as { fetch?: UploadFetch }).fetch\n if (!uploadFetch) throw new Error('files.upload requires a runtime with fetch support')\n\n const response = await uploadFetch(uploadUrl, {\n method: 'PUT',\n headers: { 'Content-Type': contentType },\n body,\n })\n\n if (!response.ok) {\n const responseBody = await response.text().catch(() => '')\n throw new Error(\n `File upload failed with ${response.status} ${response.statusText}${responseBody ? `: ${responseBody}` : ''}`\n )\n }\n}\n\nfunction inferUploadSize(body: unknown): number | undefined {\n if (typeof body === 'string') return new TextEncoder().encode(body).byteLength\n if (body instanceof ArrayBuffer) return body.byteLength\n if (ArrayBuffer.isView(body)) return body.byteLength\n\n const sized = body as { size?: unknown; byteLength?: unknown; length?: unknown } | null\n if (typeof sized?.size === 'number') return sized.size\n if (typeof sized?.byteLength === 'number') return sized.byteLength\n if (typeof sized?.length === 'number') return sized.length\n\n return undefined\n}\n\nfunction entityTypeForPurpose(purpose: UploadPurpose | undefined): string | undefined {\n if (!purpose || purpose === 'scan_image') return undefined\n if (purpose === 'import') return 'import'\n if (purpose === 'scan_template_example') return 'scan_template_example'\n return purpose\n}\n","/**\n * Scan job resource for CardDB API\n */\n\nimport type {\n ConfirmScanUploadInput,\n CreateScanJobInput,\n CreateScanUploadSessionInput,\n File as CardDBFile,\n PresignedUpload,\n ScanFeedbackPayload,\n ScanJob,\n ScanJobPayload,\n ScanMetrics,\n ScanMetricsInput,\n SubmitScanFeedbackInput,\n} from '@carddb/core'\nimport { QueryBuilder } from '@carddb/core'\nimport { BaseResource } from './base.js'\nimport type { Configuration } from '../configuration.js'\nimport type { Connection } from '../connection.js'\n\nexport type CreateScanJobOptions = Omit<CreateScanJobInput, 'publisherSlug' | 'gameKey'> & {\n /** Publisher slug, defaults to client defaultPublisher */\n publisherSlug?: string\n /** Game key, defaults to client defaultGame */\n gameKey?: string\n}\n\nexport type CreateScanUploadSessionOptions = Omit<\n CreateScanUploadSessionInput,\n 'publisherSlug' | 'gameKey'\n> & {\n /** Publisher slug, defaults to client defaultPublisher */\n publisherSlug?: string\n /** Game key, defaults to client defaultGame */\n gameKey?: string\n}\n\nexport type ConfirmScanUploadOptions = Omit<ConfirmScanUploadInput, 'publisherSlug' | 'gameKey'> & {\n /** Publisher slug, defaults to client defaultPublisher */\n publisherSlug?: string\n /** Game key, defaults to client defaultGame */\n gameKey?: string\n}\n\nexport type ScanMetricsOptions = Omit<ScanMetricsInput, 'publisherSlug' | 'gameKey'> & {\n /** Publisher slug, defaults to client defaultPublisher */\n publisherSlug?: string\n /** Game key, defaults to client defaultGame */\n gameKey?: string\n}\n\nexport interface GetScanJobOptions {\n /** Whether to use cache (defaults to client config) */\n cache?: boolean\n}\n\nexport interface PollScanJobOptions {\n /** First delay between polling attempts in milliseconds */\n intervalMs?: number\n /** Maximum total polling time in milliseconds */\n timeoutMs?: number\n /** Multiplier applied to the delay after each non-terminal response */\n backoffFactor?: number\n /** Maximum delay between polling attempts in milliseconds */\n maxIntervalMs?: number\n /** Abort-like signal. The SDK checks `aborted` before each request and sleep. */\n signal?: PollSignal\n}\n\nexport interface PollSignal {\n aborted: boolean\n reason?: unknown\n throwIfAborted?: () => void\n}\n\nexport interface VerifyWebhookSignatureInput {\n body: string | ArrayBuffer | ArrayBufferView\n signature: string\n secret: string\n}\n\ntype SubtleCryptoLike = {\n importKey(\n format: string,\n keyData: Uint8Array,\n algorithm: { name: string; hash: string },\n extractable: boolean,\n keyUsages: string[]\n ): Promise<unknown>\n sign(algorithm: string, key: unknown, data: Uint8Array): Promise<ArrayBuffer>\n}\n\nexport class ScansResource extends BaseResource {\n constructor(connection: Connection, config: Configuration) {\n super(connection, config)\n }\n\n /**\n * Create a mobile-safe scan image upload session using a scan-scoped credential.\n */\n async createUploadSession(input: CreateScanUploadSessionOptions): Promise<PresignedUpload> {\n const scopedInput = this.resolveCreateUploadSessionInput(input)\n const { query } = QueryBuilder.createScanUploadSession()\n const result = await this.connection.execute(\n query,\n QueryBuilder.createScanUploadSessionVariables(scopedInput)\n )\n return result['createScanUploadSession'] as PresignedUpload\n }\n\n /**\n * Confirm that a scan image upload completed and return the uploaded file.\n */\n async confirmUpload(input: ConfirmScanUploadOptions): Promise<CardDBFile> {\n const scopedInput = this.resolveConfirmUploadInput(input)\n const { query } = QueryBuilder.confirmScanUpload()\n const result = await this.connection.execute(\n query,\n QueryBuilder.confirmScanUploadVariables(scopedInput)\n )\n return result['confirmScanUpload'] as CardDBFile\n }\n\n /**\n * Create a scan job for an already uploaded image file.\n */\n async createJob(input: CreateScanJobOptions): Promise<ScanJobPayload> {\n const scopedInput = this.resolveCreateJobInput(input)\n const { query } = QueryBuilder.createScanJob()\n const result = await this.connection.execute(\n query,\n QueryBuilder.createScanJobVariables(scopedInput)\n )\n return result['createScanJob'] as ScanJobPayload\n }\n\n /**\n * Get a scan job and its latest processing result.\n */\n async getJob(id: string, options: GetScanJobOptions = {}): Promise<ScanJob | null> {\n const key = this.cacheKey('scans', 'getJob', { id })\n\n return this.withCache(key, 'scans', options, async () => {\n const { query } = QueryBuilder.scanJob()\n const result = await this.connection.execute(query, { id })\n return (result['scanJob'] as ScanJob) ?? null\n })\n }\n\n /**\n * Poll a scan job until it reaches a terminal status.\n */\n async pollJob(id: string, options: PollScanJobOptions = {}): Promise<ScanJob> {\n const timeoutMs = options.timeoutMs ?? 300000\n const backoffFactor = Math.max(options.backoffFactor ?? 1.5, 1)\n const maxIntervalMs = options.maxIntervalMs ?? 10000\n const startedAt = Date.now()\n let intervalMs = Math.max(options.intervalMs ?? 1000, 1)\n\n while (true) {\n throwIfAborted(options.signal)\n\n const job = await this.getJob(id, { cache: false })\n if (!job) throw new Error(`Scan job '${id}' was not found`)\n if (isTerminalScanStatus(job.status)) return job\n\n const elapsedMs = Date.now() - startedAt\n const remainingMs = timeoutMs - elapsedMs\n if (remainingMs <= 0) {\n throw new Error(`Timed out waiting for scan job '${id}'`)\n }\n\n await sleep(Math.min(intervalMs, remainingMs))\n intervalMs = Math.min(Math.ceil(intervalMs * backoffFactor), maxIntervalMs)\n }\n }\n\n /**\n * Submit correctness feedback for a completed scan job.\n */\n async submitFeedback(input: SubmitScanFeedbackInput): Promise<ScanFeedbackPayload> {\n const { query } = QueryBuilder.submitScanFeedback()\n const result = await this.connection.execute(\n query,\n QueryBuilder.submitScanFeedbackVariables(input)\n )\n return result['submitScanFeedback'] as ScanFeedbackPayload\n }\n\n /**\n * Aggregate scan metrics for a publisher/game/dataset scope.\n */\n async metrics(input: ScanMetricsOptions): Promise<ScanMetrics> {\n const scopedInput = this.resolveMetricsInput(input)\n const { query } = QueryBuilder.scanMetrics()\n const result = await this.connection.execute(\n query,\n QueryBuilder.scanMetricsVariables(scopedInput)\n )\n return result['scanMetrics'] as ScanMetrics\n }\n\n /**\n * Verify an `X-CardDB-Signature` value for a webhook body.\n */\n async verifyWebhookSignature(input: VerifyWebhookSignatureInput): Promise<boolean> {\n const subtle = getSubtleCrypto()\n const key = await subtle.importKey(\n 'raw',\n encodeUtf8(input.secret),\n { name: 'HMAC', hash: 'SHA-256' },\n false,\n ['sign']\n )\n const digest = await subtle.sign('HMAC', key, bodyToBytes(input.body))\n const expected = `sha256=${toHex(new Uint8Array(digest))}`\n\n return constantTimeEqual(input.signature.trim().toLowerCase(), expected)\n }\n\n private resolveCreateJobInput(input: CreateScanJobOptions): CreateScanJobInput {\n const publisherSlug = this.resolvePublisher(input.publisherSlug)\n const gameKey = this.resolveGame(input.gameKey)\n this.validateAccess(publisherSlug, gameKey)\n\n return { ...input, publisherSlug, gameKey }\n }\n\n private resolveCreateUploadSessionInput(\n input: CreateScanUploadSessionOptions\n ): CreateScanUploadSessionInput {\n const publisherSlug = this.resolvePublisher(input.publisherSlug)\n const gameKey = this.resolveGame(input.gameKey)\n this.validateAccess(publisherSlug, gameKey)\n\n return { ...input, publisherSlug, gameKey }\n }\n\n private resolveConfirmUploadInput(input: ConfirmScanUploadOptions): ConfirmScanUploadInput {\n const publisherSlug = this.resolvePublisher(input.publisherSlug)\n const gameKey = this.resolveGame(input.gameKey)\n this.validateAccess(publisherSlug, gameKey)\n\n return { ...input, publisherSlug, gameKey }\n }\n\n private resolveMetricsInput(input: ScanMetricsOptions): ScanMetricsInput {\n const publisherSlug = this.resolvePublisher(input.publisherSlug)\n const gameKey = this.resolveGame(input.gameKey)\n this.validateAccess(publisherSlug, gameKey)\n\n return { ...input, publisherSlug, gameKey }\n }\n}\n\nfunction isTerminalScanStatus(status: string): boolean {\n const normalized = status.toLowerCase()\n return normalized === 'completed' || normalized === 'failed' || normalized === 'cancelled'\n}\n\nasync function sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n\nfunction throwIfAborted(signal: PollSignal | undefined): void {\n if (!signal) return\n if (signal.throwIfAborted) signal.throwIfAborted()\n if (signal.aborted) throw new Error('Scan job polling aborted')\n}\n\nfunction getSubtleCrypto(): SubtleCryptoLike {\n const cryptoLike = globalThis as { crypto?: { subtle?: SubtleCryptoLike } }\n const subtle = cryptoLike.crypto?.subtle\n if (!subtle) {\n throw new Error('Web Crypto HMAC support is not available in this runtime')\n }\n return subtle\n}\n\nfunction bodyToBytes(body: string | ArrayBuffer | ArrayBufferView): Uint8Array {\n if (typeof body === 'string') return encodeUtf8(body)\n if (body instanceof ArrayBuffer) return new Uint8Array(body)\n return new Uint8Array(body.buffer, body.byteOffset, body.byteLength)\n}\n\nfunction encodeUtf8(value: string): Uint8Array {\n return new TextEncoder().encode(value)\n}\n\nfunction toHex(bytes: Uint8Array): string {\n return Array.from(bytes, (byte) => byte.toString(16).padStart(2, '0')).join('')\n}\n\nfunction constantTimeEqual(left: string, right: string): boolean {\n const maxLength = Math.max(left.length, right.length)\n let diff = left.length ^ right.length\n\n for (let index = 0; index < maxLength; index++) {\n diff |= (left.charCodeAt(index) || 0) ^ (right.charCodeAt(index) || 0)\n }\n\n return diff === 0\n}\n","/**\n * Scan template resource for CardDB API\n */\n\nimport type {\n PreviewScanTemplateInput,\n ResolveScanTemplateInput,\n SaveScanTemplateInput,\n ScanTemplate,\n ScanTemplatePayload,\n ScanTemplatePreview,\n ScanTemplateResolution,\n ScanTemplatesInput,\n} from '@carddb/core'\nimport { QueryBuilder } from '@carddb/core'\nimport { BaseResource } from './base.js'\nimport type { Configuration } from '../configuration.js'\nimport type { Connection } from '../connection.js'\n\nexport type ResolveScanTemplateOptions = Omit<\n ResolveScanTemplateInput,\n 'publisherSlug' | 'gameKey'\n> & {\n /** Publisher slug, defaults to client defaultPublisher */\n publisherSlug?: string\n /** Game key, defaults to client defaultGame */\n gameKey?: string\n /** Whether to use cache (defaults to client config) */\n cache?: boolean\n}\n\nexport type ListScanTemplatesOptions = Omit<ScanTemplatesInput, 'publisherSlug' | 'gameKey'> & {\n /** Publisher slug, defaults to client defaultPublisher */\n publisherSlug?: string\n /** Game key, defaults to client defaultGame */\n gameKey?: string\n /** Whether to use cache (defaults to client config) */\n cache?: boolean\n}\n\nexport type SaveScanTemplateOptions = Omit<SaveScanTemplateInput, 'publisherSlug' | 'gameKey'> & {\n /** Publisher slug, defaults to client defaultPublisher */\n publisherSlug?: string\n /** Game key, defaults to client defaultGame */\n gameKey?: string\n}\n\nexport type PreviewScanTemplateOptions = Omit<\n PreviewScanTemplateInput,\n 'publisherSlug' | 'gameKey'\n> & {\n /** Publisher slug, defaults to client defaultPublisher */\n publisherSlug?: string\n /** Game key, defaults to client defaultGame */\n gameKey?: string\n}\n\nexport type UpdateScanTemplateOptions = SaveScanTemplateOptions & { id: string }\n\nexport class ScanTemplatesResource extends BaseResource {\n constructor(connection: Connection, config: Configuration) {\n super(connection, config)\n }\n\n /**\n * Resolve the active scan template for a game or dataset scope.\n */\n async resolve(input: ResolveScanTemplateOptions): Promise<ScanTemplateResolution> {\n const scopedInput = this.resolveTemplateScope(input)\n const key = this.cacheKey('scanTemplates', 'resolve', { ...scopedInput })\n\n return this.withCache(key, 'scanTemplates', input, async () => {\n const { query } = QueryBuilder.resolveScanTemplate()\n const result = await this.connection.execute(\n query,\n QueryBuilder.resolveScanTemplateVariables(scopedInput)\n )\n return result['resolveScanTemplate'] as ScanTemplateResolution\n })\n }\n\n /**\n * List publisher-managed scan templates for a game or dataset scope.\n */\n async list(input: ListScanTemplatesOptions): Promise<ScanTemplate[]> {\n const scopedInput = this.resolveListScope(input)\n const key = this.cacheKey('scanTemplates', 'list', { ...scopedInput })\n\n return this.withCache(key, 'scanTemplates', input, async () => {\n const { query } = QueryBuilder.scanTemplates()\n const result = await this.connection.execute(\n query,\n QueryBuilder.scanTemplatesVariables(scopedInput)\n )\n const payload = result['scanTemplates'] as { templates?: ScanTemplate[] } | null\n return payload?.templates ?? []\n })\n }\n\n /**\n * Create a publisher-managed scan template. Requires a server-side secret credential.\n */\n async create(input: SaveScanTemplateOptions): Promise<ScanTemplatePayload> {\n this.config.requireSecretCredential('scanTemplates.create')\n\n const scopedInput = this.resolveSaveInput(input)\n const { query } = QueryBuilder.createScanTemplate()\n const result = await this.connection.execute(\n query,\n QueryBuilder.createScanTemplateVariables(scopedInput)\n )\n return result['createScanTemplate'] as ScanTemplatePayload\n }\n\n async update(input: UpdateScanTemplateOptions): Promise<ScanTemplatePayload>\n async update(id: string, input: SaveScanTemplateOptions): Promise<ScanTemplatePayload>\n\n /**\n * Replace a publisher-managed scan template. Requires a server-side secret credential.\n */\n async update(\n idOrInput: string | UpdateScanTemplateOptions,\n input?: SaveScanTemplateOptions\n ): Promise<ScanTemplatePayload> {\n this.config.requireSecretCredential('scanTemplates.update')\n\n const id = typeof idOrInput === 'string' ? idOrInput : idOrInput.id\n const templateInput = typeof idOrInput === 'string' ? input : withoutId(idOrInput)\n if (!templateInput) throw new Error('scan template input is required')\n\n const scopedInput = this.resolveSaveInput(templateInput)\n const { query } = QueryBuilder.updateScanTemplate()\n const result = await this.connection.execute(\n query,\n QueryBuilder.updateScanTemplateVariables(id, scopedInput)\n )\n return result['updateScanTemplate'] as ScanTemplatePayload\n }\n\n /**\n * Validate a draft scan template and normalize provided region OCR hints.\n */\n async preview(input: PreviewScanTemplateOptions): Promise<ScanTemplatePreview> {\n const scopedInput = this.resolvePreviewInput(input)\n const { query } = QueryBuilder.previewScanTemplate()\n const result = await this.connection.execute(\n query,\n QueryBuilder.previewScanTemplateVariables(scopedInput)\n )\n return result['previewScanTemplate'] as ScanTemplatePreview\n }\n\n private resolveTemplateScope(input: ResolveScanTemplateOptions): ResolveScanTemplateInput {\n const publisherSlug = this.resolvePublisher(input.publisherSlug)\n const gameKey = this.resolveGame(input.gameKey)\n this.validateAccess(publisherSlug, gameKey)\n\n return {\n publisherSlug,\n gameKey,\n datasetKey: input.datasetKey,\n templateId: input.templateId,\n }\n }\n\n private resolveListScope(input: ListScanTemplatesOptions): ScanTemplatesInput {\n const publisherSlug = this.resolvePublisher(input.publisherSlug)\n const gameKey = this.resolveGame(input.gameKey)\n this.validateAccess(publisherSlug, gameKey)\n\n return {\n publisherSlug,\n gameKey,\n datasetKey: input.datasetKey,\n includeArchived: input.includeArchived,\n }\n }\n\n private resolveSaveInput(input: SaveScanTemplateOptions): SaveScanTemplateInput {\n const publisherSlug = this.resolvePublisher(input.publisherSlug)\n const gameKey = this.resolveGame(input.gameKey)\n this.validateAccess(publisherSlug, gameKey)\n\n return { ...input, publisherSlug, gameKey }\n }\n\n private resolvePreviewInput(input: PreviewScanTemplateOptions): PreviewScanTemplateInput {\n const publisherSlug = this.resolvePublisher(input.publisherSlug)\n const gameKey = this.resolveGame(input.gameKey)\n this.validateAccess(publisherSlug, gameKey)\n\n return { ...input, publisherSlug, gameKey }\n }\n}\n\nfunction withoutId(input: UpdateScanTemplateOptions): SaveScanTemplateOptions {\n const templateInput = { ...input } as SaveScanTemplateOptions & { id?: string }\n delete templateInput.id\n return templateInput\n}\n","/**\n * CardDB Client - Main entry point for the CardDB API\n */\n\nimport type { CardDBConfig, APIKeyInfo } from '@carddb/core'\nimport { QueryBuilder } from '@carddb/core'\nimport { Configuration } from './configuration.js'\nimport { Connection, getRateLimitInfo } from './connection.js'\nimport { PublishersResource } from './resources/publishers.js'\nimport { GamesResource } from './resources/games.js'\nimport { DatasetsResource } from './resources/datasets.js'\nimport { DecksResource } from './resources/decks.js'\nimport { RecordsResource } from './resources/records.js'\nimport { RulesResource } from './resources/rules.js'\nimport { RulesetsResource } from './resources/rulesets.js'\nimport { ImportFormatsResource } from './resources/import-formats.js'\nimport { ImportsResource } from './resources/imports.js'\nimport { ExportsResource } from './resources/exports.js'\nimport { FilesResource } from './resources/files.js'\nimport { ScansResource } from './resources/scans.js'\nimport { ScanTemplatesResource } from './resources/scan-templates.js'\n\n/**\n * CardDB API Client\n *\n * @example Basic usage\n * ```typescript\n * import { CardDBClient } from '@carddb/node'\n *\n * const client = new CardDBClient({\n * apiKey: 'carddb_xxx...'\n * })\n *\n * // Search for publishers\n * const publishers = await client.publishers.search()\n *\n * // Get records with filtering\n * const cards = await client.records.search({\n * publisherSlug: 'pokemon',\n * gameKey: 'tcg',\n * datasetKey: 'cards',\n * filter: { hp: { gte: 100 } }\n * })\n * ```\n *\n * @example With defaults configured\n * ```typescript\n * const client = new CardDBClient({\n * apiKey: 'carddb_xxx...',\n * defaultPublisher: 'pokemon',\n * defaultGame: 'tcg'\n * })\n *\n * // Now you can omit publisherSlug and gameKey\n * const cards = await client.records.search({\n * datasetKey: 'cards'\n * })\n * ```\n *\n * @example With caching\n * ```typescript\n * import { CardDBClient, MemoryCache } from '@carddb/node'\n *\n * const client = new CardDBClient({\n * apiKey: 'carddb_xxx...',\n * cache: new MemoryCache(),\n * cacheTtl: 300 // 5 minutes\n * })\n * ```\n */\nexport class CardDBClient {\n private config: Configuration\n private connection: Connection\n\n /** Publishers resource for searching and fetching publishers */\n readonly publishers: PublishersResource\n\n /** Games resource for searching and fetching games */\n readonly games: GamesResource\n\n /** Datasets resource for searching and fetching datasets */\n readonly datasets: DatasetsResource\n\n /** Records resource for searching and fetching records */\n readonly records: RecordsResource\n\n /** Decks resource for hosted decks and external deck hydration */\n readonly decks: DecksResource\n\n /** Rules resource for game rules and deck formats */\n readonly rules: RulesResource\n\n /** First-class rulesets resource for deck validation rules */\n readonly rulesets: RulesetsResource\n\n /** Publisher-managed import format resource */\n readonly importFormats: ImportFormatsResource\n\n /** Publisher import job resource */\n readonly imports: ImportsResource\n\n /** Publisher dataset export job resource */\n readonly exports: ExportsResource\n\n /** File upload helper resource */\n readonly files: FilesResource\n\n /** Scan job helper resource */\n readonly scans: ScansResource\n\n /** Scan template helper resource */\n readonly scanTemplates: ScanTemplatesResource\n\n /**\n * Create a new CardDB client\n *\n * @param config - Client configuration options\n */\n constructor(config: CardDBConfig = {}) {\n this.config = new Configuration(config)\n this.connection = new Connection(this.config)\n\n // Initialize resources\n this.publishers = new PublishersResource(this.connection, this.config)\n this.games = new GamesResource(this.connection, this.config)\n this.datasets = new DatasetsResource(this.connection, this.config)\n this.records = new RecordsResource(this.connection, this.config)\n this.decks = new DecksResource(this.connection, this.config)\n this.rules = new RulesResource(this.connection, this.config)\n this.rulesets = new RulesetsResource(this.connection, this.config)\n this.importFormats = new ImportFormatsResource(this.connection, this.config)\n this.imports = new ImportsResource(this.connection, this.config)\n this.exports = new ExportsResource(this.connection, this.config)\n this.files = new FilesResource(this.connection, this.config)\n this.scans = new ScansResource(this.connection, this.config)\n this.scanTemplates = new ScanTemplatesResource(this.connection, this.config)\n }\n\n /**\n * Get information about the current API key\n *\n * Returns null if no API key is configured or the key is invalid.\n *\n * @example\n * const info = await client.me()\n * if (info) {\n * console.log(`Logged in as: ${info.account.displayName}`)\n * console.log(`Application: ${info.application.name}`)\n * }\n */\n async me(): Promise<APIKeyInfo | null> {\n const { query } = QueryBuilder.fetchMe()\n const result = await this.connection.execute(query)\n return (result['fetchMe'] as APIKeyInfo) ?? null\n }\n\n /**\n * Get rate limit information from the last request\n *\n * @example\n * await client.publishers.search()\n * const rateLimit = client.getRateLimitInfo()\n * console.log(`Remaining: ${rateLimit?.remaining}/${rateLimit?.limit}`)\n */\n getRateLimitInfo() {\n return getRateLimitInfo()\n }\n\n /**\n * Create a new client with configuration overrides\n *\n * Useful for creating scoped clients with different defaults.\n *\n * @example\n * const pokemonClient = client.withConfig({\n * defaultPublisher: 'pokemon',\n * defaultGame: 'tcg'\n * })\n *\n * // Now all queries use these defaults\n * const cards = await pokemonClient.records.search({ datasetKey: 'cards' })\n */\n withConfig(overrides: Partial<CardDBConfig>): CardDBClient {\n const mergedConfig = this.config.merge(overrides)\n return new CardDBClient({\n apiKey: mergedConfig.configApiKey(),\n publishableKey: mergedConfig.publishableKey,\n secretKey: mergedConfig.secretKey,\n accessToken: mergedConfig.accessToken,\n environment: mergedConfig.environment,\n endpoint: mergedConfig.endpoint,\n timeout: mergedConfig.timeout,\n openTimeout: mergedConfig.openTimeout,\n defaultPublisher: mergedConfig.defaultPublisher,\n defaultGame: mergedConfig.defaultGame,\n allowedPublishers: mergedConfig.allowedPublishers,\n allowedGames: mergedConfig.allowedGames,\n logger: mergedConfig.logger,\n logLevel: mergedConfig.logLevel,\n retryOnRateLimit: mergedConfig.retryOnRateLimit,\n maxRetries: mergedConfig.maxRetries,\n retryOnNetworkError: mergedConfig.retryOnNetworkError,\n maxNetworkRetries: mergedConfig.maxNetworkRetries,\n retryBaseDelay: mergedConfig.retryBaseDelay,\n retryMaxDelay: mergedConfig.retryMaxDelay,\n cache: mergedConfig.cache,\n cacheTtl: mergedConfig.cacheTtl,\n cacheTtls: mergedConfig.cacheTtls,\n })\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/configuration.ts","../src/user-agent.ts","../src/connection.ts","../src/cache.ts","../src/resources/base.ts","../src/resources/publishers.ts","../src/resources/games.ts","../src/resources/datasets.ts","../src/resources/decks.ts","../src/resources/records.ts","../src/resources/rules.ts","../src/resources/rulesets.ts","../src/resources/import-formats.ts","../src/resources/imports.ts","../src/resources/exports.ts","../src/resources/files.ts","../src/resources/scans.ts","../src/resources/scan-templates.ts","../src/client.ts"],"names":["RestrictedError","RateLimitError","ServerError","ConnectionError","TimeoutError","AuthenticationError","CardDBError","ValidationError","GraphQLError","QueryBuilder","Collection","resolveFilter","variables","cacheKey","query","result"],"mappings":";;;;;AAOO,IAAM,gBAAA,GAAmB;AACzB,IAAM,eAAA,GAAkB;AACxB,IAAM,oBAAA,GAAuB;AAC7B,IAAM,iBAAA,GAAoB;AAC1B,IAAM,mBAAA,GAAsB;AAC5B,IAAM,2BAAA,GAA8B;AACpC,IAAM,wBAAA,GAA2B;AACjC,IAAM,uBAAA,GAA0B;AAEhC,IAAM,aAAA,GAAN,MAAM,cAAA,CAAc;AAAA,EACzB,MAAA;AAAA,EACA,cAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACQ,YAAA;AAAA,EACR,WAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,WAAA;AAAA,EACA,gBAAA;AAAA,EACA,WAAA;AAAA,EACA,iBAAA;AAAA,EACA,YAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,gBAAA;AAAA,EACA,UAAA;AAAA,EACA,mBAAA;AAAA,EACA,iBAAA;AAAA,EACA,cAAA;AAAA,EACA,aAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EAEA,WAAA,CAAY,MAAA,GAAuB,EAAC,EAAG;AACrC,IAAA,IAAA,CAAK,eAAe,MAAA,CAAO,MAAA;AAC3B,IAAA,IAAA,CAAK,iBAAiB,MAAA,CAAO,cAAA;AAC7B,IAAA,IAAA,CAAK,YAAY,MAAA,CAAO,SAAA;AACxB,IAAA,IAAA,CAAK,cAAc,MAAA,CAAO,WAAA;AAC1B,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA,CAAO,MAAA,IAAU,MAAA,CAAO,kBAAkB,MAAA,CAAO,SAAA;AAC/D,IAAA,IAAA,CAAK,cAAc,MAAA,CAAO,WAAA;AAC1B,IAAA,IAAA,CAAK,QAAA,GAAW,OAAO,QAAA,IAAY,gBAAA;AACnC,IAAA,IAAA,CAAK,OAAA,GAAU,OAAO,OAAA,IAAW,eAAA;AACjC,IAAA,IAAA,CAAK,WAAA,GAAc,OAAO,WAAA,IAAe,oBAAA;AACzC,IAAA,IAAA,CAAK,mBAAmB,MAAA,CAAO,gBAAA;AAC/B,IAAA,IAAA,CAAK,cAAc,MAAA,CAAO,WAAA;AAC1B,IAAA,IAAA,CAAK,oBAAoB,MAAA,CAAO,iBAAA;AAChC,IAAA,IAAA,CAAK,eAAe,MAAA,CAAO,YAAA;AAC3B,IAAA,IAAA,CAAK,SAAS,MAAA,CAAO,MAAA;AACrB,IAAA,IAAA,CAAK,QAAA,GAAW,OAAO,QAAA,IAAY,MAAA;AACnC,IAAA,IAAA,CAAK,gBAAA,GAAmB,OAAO,gBAAA,IAAoB,KAAA;AACnD,IAAA,IAAA,CAAK,UAAA,GAAa,OAAO,UAAA,IAAc,mBAAA;AACvC,IAAA,IAAA,CAAK,mBAAA,GAAsB,OAAO,mBAAA,IAAuB,IAAA;AACzD,IAAA,IAAA,CAAK,iBAAA,GAAoB,OAAO,iBAAA,IAAqB,2BAAA;AACrD,IAAA,IAAA,CAAK,cAAA,GAAiB,OAAO,cAAA,IAAkB,wBAAA;AAC/C,IAAA,IAAA,CAAK,aAAA,GAAgB,OAAO,aAAA,IAAiB,uBAAA;AAC7C,IAAA,IAAA,CAAK,QAAQ,MAAA,CAAO,KAAA;AACpB,IAAA,IAAA,CAAK,QAAA,GAAW,OAAO,QAAA,IAAY,iBAAA;AACnC,IAAA,IAAA,CAAK,SAAA,GAAY,MAAA,CAAO,SAAA,IAAa,EAAC;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,oBAAoB,OAAA,EAAyB;AAE3C,IAAA,MAAM,mBAAmB,IAAA,CAAK,cAAA,GAAiB,IAAA,CAAK,GAAA,CAAI,GAAG,OAAO,CAAA;AAElE,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,GAAA,CAAI,gBAAA,EAAkB,KAAK,aAAa,CAAA;AAEjE,IAAA,MAAM,SAAS,WAAA,GAAc,IAAA,IAAQ,IAAA,CAAK,MAAA,KAAW,CAAA,GAAI,CAAA,CAAA;AACzD,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,WAAA,GAAc,MAAM,CAAA;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA,EAKA,YAAY,QAAA,EAAgC;AAC1C,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,QAAQ,CAAA,IAAK,IAAA,CAAK,QAAA;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA,EAKA,iBAAiB,aAAA,EAA4C;AAC3D,IAAA,OAAO,iBAAiB,IAAA,CAAK,gBAAA;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA,EAKA,YAAY,OAAA,EAAsC;AAChD,IAAA,OAAO,WAAW,IAAA,CAAK,WAAA;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA,EAKA,kBAAkB,aAAA,EAA6B;AAC7C,IAAA,IAAI,CAAC,KAAK,iBAAA,EAAmB;AAC7B,IAAA,IAAI,IAAA,CAAK,iBAAA,CAAkB,QAAA,CAAS,aAAa,CAAA,EAAG;AAEpD,IAAA,MAAM,IAAIA,oBAAA,CAAgB,CAAA,WAAA,EAAc,aAAa,CAAA,uCAAA,CAAyC,CAAA;AAAA,EAChG;AAAA;AAAA;AAAA;AAAA,EAKA,YAAA,CAAa,eAAuB,OAAA,EAAuB;AACzD,IAAA,IAAI,CAAC,KAAK,YAAA,EAAc;AACxB,IAAA,MAAM,mBAAA,GAAsB,IAAA,CAAK,YAAA,CAAa,aAAa,CAAA;AAC3D,IAAA,IAAI,CAAC,mBAAA,EAAqB;AAC1B,IAAA,IAAI,mBAAA,CAAoB,QAAA,CAAS,OAAO,CAAA,EAAG;AAE3C,IAAA,MAAM,IAAIA,oBAAA,CAAgB,CAAA,MAAA,EAAS,OAAO,CAAA,gCAAA,EAAmC,aAAa,CAAA,CAAA,CAAG,CAAA;AAAA,EAC/F;AAAA;AAAA;AAAA;AAAA,EAKA,cAAA,CAAe,eAAwB,OAAA,EAAwB;AAC7D,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,IAAA,CAAK,kBAAkB,aAAa,CAAA;AACpC,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,IAAA,CAAK,YAAA,CAAa,eAAe,OAAO,CAAA;AAAA,MAC1C;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,wBAAwB,SAAA,EAAyB;AAC/C,IAAA,IAAI,CAAC,KAAK,WAAA,KAAgB,IAAA,CAAK,gBAAiB,IAAA,CAAK,SAAA,IAAa,CAAC,IAAA,CAAK,cAAA,CAAA,EAAkB;AAE1F,IAAA,MAAM,IAAIA,oBAAA;AAAA,MACR,GAAG,SAAS,CAAA,6DAAA;AAAA,KACd;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,aAAA,GAAoC;AAClC,IAAA,OAAO,IAAA,CAAK,YAAA,IAAgB,IAAA,CAAK,cAAA,IAAkB,IAAA,CAAK,SAAA;AAAA,EAC1D;AAAA;AAAA;AAAA;AAAA,EAKA,YAAA,GAAmC;AACjC,IAAA,OAAO,IAAA,CAAK,YAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,UAAU,KAAA,EAA0B;AAClC,IAAA,MAAM,MAAA,GAAmC;AAAA,MACvC,KAAA,EAAO,CAAA;AAAA,MACP,IAAA,EAAM,CAAA;AAAA,MACN,IAAA,EAAM,CAAA;AAAA,MACN,KAAA,EAAO;AAAA,KACT;AACA,IAAA,OAAO,MAAA,CAAO,KAAK,CAAA,IAAK,MAAA,CAAO,KAAK,QAAQ,CAAA;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SAAA,EAAiD;AACrD,IAAA,OAAO,IAAI,cAAA,CAAc;AAAA,MACvB,MAAA,EAAQ,SAAA,CAAU,MAAA,IAAU,IAAA,CAAK,YAAA;AAAA,MACjC,cAAA,EAAgB,SAAA,CAAU,cAAA,IAAkB,IAAA,CAAK,cAAA;AAAA,MACjD,SAAA,EAAW,SAAA,CAAU,SAAA,IAAa,IAAA,CAAK,SAAA;AAAA,MACvC,WAAA,EAAa,SAAA,CAAU,WAAA,IAAe,IAAA,CAAK,WAAA;AAAA,MAC3C,WAAA,EAAa,SAAA,CAAU,WAAA,IAAe,IAAA,CAAK,WAAA;AAAA,MAC3C,QAAA,EAAU,SAAA,CAAU,QAAA,IAAY,IAAA,CAAK,QAAA;AAAA,MACrC,OAAA,EAAS,SAAA,CAAU,OAAA,IAAW,IAAA,CAAK,OAAA;AAAA,MACnC,WAAA,EAAa,SAAA,CAAU,WAAA,IAAe,IAAA,CAAK,WAAA;AAAA,MAC3C,gBAAA,EAAkB,SAAA,CAAU,gBAAA,IAAoB,IAAA,CAAK,gBAAA;AAAA,MACrD,WAAA,EAAa,SAAA,CAAU,WAAA,IAAe,IAAA,CAAK,WAAA;AAAA,MAC3C,iBAAA,EAAmB,SAAA,CAAU,iBAAA,IAAqB,IAAA,CAAK,iBAAA;AAAA,MACvD,YAAA,EAAc,SAAA,CAAU,YAAA,IAAgB,IAAA,CAAK,YAAA;AAAA,MAC7C,MAAA,EAAQ,SAAA,CAAU,MAAA,IAAU,IAAA,CAAK,MAAA;AAAA,MACjC,QAAA,EAAU,SAAA,CAAU,QAAA,IAAY,IAAA,CAAK,QAAA;AAAA,MACrC,gBAAA,EAAkB,SAAA,CAAU,gBAAA,IAAoB,IAAA,CAAK,gBAAA;AAAA,MACrD,UAAA,EAAY,SAAA,CAAU,UAAA,IAAc,IAAA,CAAK,UAAA;AAAA,MACzC,mBAAA,EAAqB,SAAA,CAAU,mBAAA,IAAuB,IAAA,CAAK,mBAAA;AAAA,MAC3D,iBAAA,EAAmB,SAAA,CAAU,iBAAA,IAAqB,IAAA,CAAK,iBAAA;AAAA,MACvD,cAAA,EAAgB,SAAA,CAAU,cAAA,IAAkB,IAAA,CAAK,cAAA;AAAA,MACjD,aAAA,EAAe,SAAA,CAAU,aAAA,IAAiB,IAAA,CAAK,aAAA;AAAA,MAC/C,KAAA,EAAO,SAAA,CAAU,KAAA,IAAS,IAAA,CAAK,KAAA;AAAA,MAC/B,QAAA,EAAU,SAAA,CAAU,QAAA,IAAY,IAAA,CAAK,QAAA;AAAA,MACrC,SAAA,EAAW,SAAA,CAAU,SAAA,IAAa,IAAA,CAAK;AAAA,KACxC,CAAA;AAAA,EACH;AACF;;;ACpMA,IAAM,WAAA,GAAc,OAAA;AAUpB,SAAS,aAAA,GAA6B;AAEpC,EAAA,IAAI,OAAO,UAAA,KAAe,WAAA,IAAe,KAAA,IAAS,UAAA,EAAY;AAC5D,IAAA,MAAM,UAAA,GACH,WAAuC,GAAA,IACxC,OAAQ,WAAuC,GAAA,KAAQ,QAAA,IACrD,WAAuC,GAAA,CAAgC,OAAA;AAC3E,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,KAAA;AAAA,MACN,OAAA,EAAS,OAAO,UAAA,KAAe,QAAA,GAAW,UAAA,GAAa;AAAA,KACzD;AAAA,EACF;AAGA,EAAA,IAAI,OAAO,UAAA,KAAe,WAAA,IAAe,MAAA,IAAU,UAAA,EAAY;AAC7D,IAAA,MAAM,cACH,UAAA,CAAuC,IAAA,IACxC,OAAQ,UAAA,CAAuC,SAAS,QAAA,IACtD,UAAA,CAAuC,IAAA,CAAiC,OAAA,IAC1E,OAAS,UAAA,CAAuC,IAAA,CAAiC,YAC/E,QAAA,IAEE,UAAA,CAAuC,KAAiC,OAAA,CAI1E,IAAA;AACJ,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,MAAA;AAAA,MACN,OAAA,EAAS,OAAO,WAAA,KAAgB,QAAA,GAAW,WAAA,GAAc;AAAA,KAC3D;AAAA,EACF;AAGA,EAAA,IAAI,OAAO,OAAA,KAAY,WAAA,IAAe,QAAQ,QAAA,IAAY,OAAA,CAAQ,SAAS,IAAA,EAAM;AAC/E,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,MAAA;AAAA,MACN,OAAA,EAAS,QAAQ,QAAA,CAAS;AAAA,KAC5B;AAAA,EACF;AAGA,EAAA,IAAI,OAAO,SAAA,KAAc,WAAA,IAAe,SAAA,CAAU,SAAA,EAAW;AAC3D,IAAA,OAAO,aAAA,CAAc,UAAU,SAAS,CAAA;AAAA,EAC1C;AAEA,EAAA,OAAO,EAAE,IAAA,EAAM,SAAA,EAAW,OAAA,EAAS,SAAA,EAAU;AAC/C;AAKA,SAAS,cAAc,SAAA,EAAgC;AAIrD,EAAA,MAAM,SAAA,GAAY,SAAA,CAAU,KAAA,CAAM,sBAAsB,CAAA;AACxD,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,OAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,SAAA,CAAU,CAAC,CAAA,EAAG;AAAA,EAChD;AAGA,EAAA,MAAM,WAAA,GAAc,SAAA,CAAU,KAAA,CAAM,yBAAyB,CAAA;AAC7D,EAAA,IAAI,WAAA,IAAe,CAAC,SAAA,CAAU,QAAA,CAAS,MAAM,CAAA,EAAG;AAC9C,IAAA,OAAO,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,WAAA,CAAY,CAAC,CAAA,EAAG;AAAA,EACpD;AAGA,EAAA,MAAM,YAAA,GAAe,SAAA,CAAU,KAAA,CAAM,0BAA0B,CAAA;AAC/D,EAAA,IAAI,YAAA,EAAc;AAChB,IAAA,OAAO,EAAE,IAAA,EAAM,SAAA,EAAW,OAAA,EAAS,YAAA,CAAa,CAAC,CAAA,EAAG;AAAA,EACtD;AAGA,EAAA,MAAM,WAAA,GAAc,SAAA,CAAU,KAAA,CAAM,kCAAkC,CAAA;AACtE,EAAA,IAAI,WAAA,EAAa;AACf,IAAA,OAAO,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,WAAA,CAAY,CAAC,CAAA,EAAG;AAAA,EACpD;AAGA,EAAA,OAAO,EAAE,IAAA,EAAM,SAAA,EAAW,OAAA,EAAS,SAAA,EAAU;AAC/C;AAKO,SAAS,YAAA,GAAuB;AACrC,EAAA,MAAM,UAAU,aAAA,EAAc;AAC9B,EAAA,OAAO,iBAAiB,WAAW,CAAA,EAAA,EAAK,QAAQ,IAAI,CAAA,CAAA,EAAI,QAAQ,OAAO,CAAA,CAAA,CAAA;AACzE;AAKO,SAAS,aAAA,GAAwB;AACtC,EAAA,OAAO,WAAA;AACT;;;AC7FA,IAAI,iBAAA,GAA0C,IAAA;AAEvC,SAAS,gBAAA,GAAyC;AACvD,EAAA,OAAO,iBAAA;AACT;AAEO,IAAM,aAAN,MAAiB;AAAA,EACd,MAAA;AAAA,EAER,YAAY,MAAA,EAAuB;AACjC,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAA,CACJ,KAAA,EACA,SAAA,GAAqC,EAAC,EACJ;AAClC,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,oBAAA,CAAqB,KAAK,CAAA;AACrD,IAAA,IAAI,gBAAA,GAAmB,CAAA;AACvB,IAAA,IAAI,cAAA,GAAiB,CAAA;AAErB,IAAA,OAAO,IAAA,EAAM;AACX,MAAA,IAAI;AACF,QAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAC3B,QAAA,IAAA,CAAK,UAAA,CAAW,eAAe,SAAS,CAAA;AAExC,QAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,KAAA,CAAM,OAAO,SAAS,CAAA;AAClD,QAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA;AAE9B,QAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,cAAA,CAAe,QAAQ,CAAA;AACjD,QAAA,IAAA,CAAK,WAAA,CAAY,eAAe,QAAQ,CAAA;AAExC,QAAA,OAAO,MAAA;AAAA,MACT,SAAS,KAAA,EAAO;AAEd,QAAA,IAAI,iBAAiBC,mBAAA,EAAgB;AACnC,UAAA,IAAI,KAAK,MAAA,CAAO,gBAAA,IAAoB,gBAAA,GAAmB,IAAA,CAAK,OAAO,UAAA,EAAY;AAC7E,YAAA,gBAAA,EAAA;AACA,YAAA,MAAM,SAAA,GAAY,MAAM,UAAA,IAAc,EAAA;AACtC,YAAA,IAAA,CAAK,iBAAA,CAAkB,aAAA,EAAe,gBAAA,EAAkB,SAAS,CAAA;AACjE,YAAA,MAAM,IAAA,CAAK,KAAA,CAAM,SAAA,GAAY,GAAI,CAAA;AACjC,YAAA;AAAA,UACF;AAAA,QACF;AAGA,QAAA,IAAI,IAAA,CAAK,uBAAA,CAAwB,KAAK,CAAA,EAAG;AACvC,UAAA,IAAI,KAAK,MAAA,CAAO,mBAAA,IAAuB,cAAA,GAAiB,IAAA,CAAK,OAAO,iBAAA,EAAmB;AACrF,YAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,MAAA,CAAO,mBAAA,CAAoB,cAAc,CAAA;AAC5D,YAAA,IAAA,CAAK,eAAA,CAAgB,aAAA,EAAe,cAAA,GAAiB,CAAA,EAAG,OAAO,KAAK,CAAA;AACpE,YAAA,cAAA,EAAA;AACA,YAAA,MAAM,IAAA,CAAK,MAAM,KAAK,CAAA;AACtB,YAAA;AAAA,UACF;AAAA,QACF;AAGA,QAAA,IAAI,iBAAiBC,gBAAA,EAAa;AAChC,UAAA,IAAI,KAAK,MAAA,CAAO,mBAAA,IAAuB,cAAA,GAAiB,IAAA,CAAK,OAAO,iBAAA,EAAmB;AACrF,YAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,MAAA,CAAO,mBAAA,CAAoB,cAAc,CAAA;AAC5D,YAAA,IAAA,CAAK,eAAA,CAAgB,aAAA,EAAe,cAAA,GAAiB,CAAA,EAAG,OAAO,KAAK,CAAA;AACpE,YAAA,cAAA,EAAA;AACA,YAAA,MAAM,IAAA,CAAK,MAAM,KAAK,CAAA;AACtB,YAAA;AAAA,UACF;AAAA,QACF;AAEA,QAAA,MAAM,KAAA;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,wBAAwB,KAAA,EAAyB;AACvD,IAAA,OAAO,KAAA,YAAiBC,wBAAmB,KAAA,YAAiBC,iBAAA;AAAA,EAC9D;AAAA,EAEA,MAAc,KAAA,CAAM,KAAA,EAAe,SAAA,EAAuD;AACxF,IAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,IAAA,MAAM,SAAA,GAAY,WAAW,MAAM,UAAA,CAAW,OAAM,EAAG,IAAA,CAAK,OAAO,OAAO,CAAA;AAC1E,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,CAAO,aAAA,EAAc;AAEzC,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,IAAA,CAAK,OAAO,QAAA,EAAU;AAAA,QACjD,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS;AAAA,UACP,cAAA,EAAgB,kBAAA;AAAA,UAChB,MAAA,EAAQ,kBAAA;AAAA,UACR,cAAc,YAAA,EAAa;AAAA,UAC3B,GAAI,IAAA,CAAK,MAAA,CAAO,WAAA,GACZ,EAAE,aAAA,EAAe,CAAA,OAAA,EAAU,IAAA,CAAK,MAAA,CAAO,WAAW,CAAA,CAAA,EAAG,GACrD,EAAC;AAAA,UACL,GAAI,CAAC,IAAA,CAAK,MAAA,CAAO,WAAA,IAAe,SAAS,EAAE,WAAA,EAAa,MAAA,EAAO,GAAI;AAAC,SACtE;AAAA,QACA,MAAM,IAAA,CAAK,SAAA,CAAU,EAAE,KAAA,EAAO,WAAW,CAAA;AAAA,QACzC,QAAQ,UAAA,CAAW;AAAA,OACpB,CAAA;AAED,MAAA,OAAO,QAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,iBAAiB,KAAA,EAAO;AAC1B,QAAA,IAAI,KAAA,CAAM,SAAS,YAAA,EAAc;AAC/B,UAAA,IAAA,CAAK,SAAS,mBAAmB,CAAA;AACjC,UAAA,MAAM,IAAIA,kBAAa,mBAAmB,CAAA;AAAA,QAC5C;AACA,QAAA,IAAA,CAAK,QAAA,CAAS,CAAA,mBAAA,EAAsB,KAAA,CAAM,OAAO,CAAA,CAAE,CAAA;AACnD,QAAA,MAAM,IAAID,oBAAA,CAAgB,CAAA,mBAAA,EAAsB,KAAA,CAAM,OAAO,CAAA,CAAE,CAAA;AAAA,MACjE;AACA,MAAA,MAAM,IAAIA,qBAAgB,mBAAmB,CAAA;AAAA,IAC/C,CAAA,SAAE;AACA,MAAA,YAAA,CAAa,SAAS,CAAA;AAAA,IACxB;AAAA,EACF;AAAA,EAEA,MAAc,eAAe,QAAA,EAAsD;AAEjF,IAAA,IAAA,CAAK,qBAAqB,QAAQ,CAAA;AAElC,IAAA,QAAQ,SAAS,MAAA;AAAQ,MACvB,KAAK,GAAA;AACH,QAAA,OAAO,IAAA,CAAK,sBAAsB,QAAQ,CAAA;AAAA,MAC5C,KAAK,GAAA;AACH,QAAA,MAAM,IAAIE,yBAAoB,4BAA4B,CAAA;AAAA,MAC5D,KAAK,GAAA;AACH,QAAA,OAAO,IAAA,CAAK,wBAAwB,QAAQ,CAAA;AAAA,MAC9C;AACE,QAAA,IAAI,QAAA,CAAS,MAAA,IAAU,GAAA,IAAO,QAAA,CAAS,SAAS,GAAA,EAAK;AACnD,UAAA,OAAO,IAAA,CAAK,kBAAkB,QAAQ,CAAA;AAAA,QACxC;AACA,QAAA,IAAI,QAAA,CAAS,UAAU,GAAA,EAAK;AAC1B,UAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,SAAA,CAAU,QAAQ,CAAA;AAC1C,UAAA,MAAM,IAAIH,gBAAA,CAAY,CAAA,cAAA,EAAiB,QAAA,CAAS,MAAM,CAAA,CAAA,CAAA,EAAK;AAAA,YACzD,QAAQ,QAAA,CAAS,MAAA;AAAA,YACjB,QAAA,EAAU;AAAA,WACX,CAAA;AAAA,QACH;AACA,QAAA,MAAM,IAAII,gBAAA,CAAY,CAAA,4BAAA,EAA+B,QAAA,CAAS,MAAM,CAAA,CAAE,CAAA;AAAA;AAC1E,EACF;AAAA,EAEA,MAAc,sBAAsB,QAAA,EAAsD;AACxF,IAAA,MAAM,IAAA,GAAQ,MAAM,IAAA,CAAK,SAAA,CAAU,QAAQ,CAAA;AAG3C,IAAA,IAAI,IAAA,CAAK,MAAA,IAAU,IAAA,CAAK,MAAA,CAAO,SAAS,CAAA,EAAG;AACzC,MAAA,IAAA,CAAK,mBAAA,CAAoB,IAAA,CAAK,MAAA,EAAQ,IAAI,CAAA;AAAA,IAC5C;AAEA,IAAA,OAAO,IAAA,CAAK,QAAQ,EAAC;AAAA,EACvB;AAAA,EAEQ,mBAAA,CAAoB,QAA4B,IAAA,EAA8B;AACpF,IAAA,MAAM,UAAA,GAAa,OAAO,CAAC,CAAA;AAC3B,IAAA,MAAM,OAAA,GAAU,WAAW,OAAA,IAAW,eAAA;AACtC,IAAA,MAAM,IAAA,GAAO,UAAA,CAAW,UAAA,GAAa,MAAM,CAAA;AAE3C,IAAA,QAAQ,IAAA;AAAM,MACZ,KAAK,iBAAA;AACH,QAAA,MAAM,IAAID,wBAAA,CAAoB,OAAA,EAAS,IAAI,CAAA;AAAA,MAC7C,KAAK,cAAA;AACH,QAAA,MAAM,IAAIJ,mBAAA,CAAe,OAAA,EAAS,EAAE,QAAA,EAAU,MAAM,CAAA;AAAA,MACtD,KAAK,WAAA;AACH,QAAA,MAAM,IAAIK,gBAAA,CAAY,OAAA,EAAS,IAAI,CAAA;AAAA,MACrC,KAAK,kBAAA;AAAA,MACL,KAAK,gBAAA;AACH,QAAA,MAAM,IAAIC,oBAAA,CAAgB,OAAA,EAAS,EAAE,MAAA,EAAQ,QAAA,EAAU,MAAM,CAAA;AAAA,MAC/D;AACE,QAAA,MAAM,IAAIC,iBAAA,CAAa,OAAA,EAAS,EAAE,MAAA,EAAQ,QAAA,EAAU,MAAM,CAAA;AAAA;AAC9D,EACF;AAAA,EAEA,MAAc,wBAAwB,QAAA,EAAoC;AACxE,IAAA,MAAM,UAAA,GAAa,SAAS,QAAA,CAAS,OAAA,CAAQ,IAAI,aAAa,CAAA,IAAK,MAAM,EAAE,CAAA;AAC3E,IAAA,MAAM,KAAA,GAAQ,SAAS,QAAA,CAAS,OAAA,CAAQ,IAAI,mBAAmB,CAAA,IAAK,EAAA,EAAI,EAAE,CAAA,IAAK,IAAA;AAC/E,IAAA,MAAM,SAAA,GAAY,SAAS,QAAA,CAAS,OAAA,CAAQ,IAAI,uBAAuB,CAAA,IAAK,EAAA,EAAI,EAAE,CAAA,IAAK,IAAA;AACvF,IAAA,MAAM,KAAA,GAAQ,SAAS,QAAA,CAAS,OAAA,CAAQ,IAAI,mBAAmB,CAAA,IAAK,EAAA,EAAI,EAAE,CAAA,IAAK,IAAA;AAC/E,IAAA,MAAM,UAAU,KAAA,GAAQ,IAAI,IAAA,CAAK,KAAA,GAAQ,GAAI,CAAA,GAAI,IAAA;AAEjD,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,SAAA,CAAU,QAAQ,CAAA;AAE1C,IAAA,MAAM,IAAIP,oBAAe,qBAAA,EAAuB;AAAA,MAC9C,UAAA;AAAA,MACA,KAAA;AAAA,MACA,SAAA;AAAA,MACA,OAAA;AAAA,MACA,QAAA,EAAU;AAAA,KACX,CAAA;AAAA,EACH;AAAA,EAEA,MAAc,kBAAkB,QAAA,EAAoC;AAClE,IAAA,MAAM,IAAA,GAAQ,MAAM,IAAA,CAAK,SAAA,CAAU,QAAQ,CAAA;AAC3C,IAAA,MAAM,OAAA,GAAU,KAAK,MAAA,GAAS,CAAC,GAAG,OAAA,IAAW,CAAA,cAAA,EAAiB,SAAS,MAAM,CAAA,CAAA,CAAA;AAC7E,IAAA,MAAM,IAAIM,oBAAA,CAAgB,OAAA,EAAS,EAAE,QAAA,EAAU,MAAM,CAAA;AAAA,EACvD;AAAA,EAEA,MAAc,UAAU,QAAA,EAAsC;AAC5D,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,SAAS,IAAA,EAAK;AAAA,IAC7B,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,EAAE,GAAA,EAAK,MAAM,QAAA,CAAS,MAAK,EAAE;AAAA,IACtC;AAAA,EACF;AAAA,EAEQ,qBAAqB,QAAA,EAA0B;AACrD,IAAA,MAAM,KAAA,GAAQ,SAAS,QAAA,CAAS,OAAA,CAAQ,IAAI,mBAAmB,CAAA,IAAK,EAAA,EAAI,EAAE,CAAA,IAAK,IAAA;AAC/E,IAAA,MAAM,SAAA,GAAY,SAAS,QAAA,CAAS,OAAA,CAAQ,IAAI,uBAAuB,CAAA,IAAK,EAAA,EAAI,EAAE,CAAA,IAAK,IAAA;AACvF,IAAA,MAAM,KAAA,GAAQ,SAAS,QAAA,CAAS,OAAA,CAAQ,IAAI,mBAAmB,CAAA,IAAK,EAAA,EAAI,EAAE,CAAA,IAAK,IAAA;AAE/E,IAAA,iBAAA,GAAoB,EAAE,KAAA,EAAO,SAAA,EAAW,KAAA,EAAM;AAAA,EAChD;AAAA,EAEQ,qBAAqB,KAAA,EAAuB;AAClD,IAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAM,4BAA4B,CAAA;AACtD,IAAA,OAAO,KAAA,GAAQ,KAAA,CAAM,CAAC,CAAA,GAAK,SAAA;AAAA,EAC7B;AAAA,EAEQ,MAAM,EAAA,EAA2B;AACvC,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,YAAY,UAAA,CAAW,OAAA,EAAS,EAAE,CAAC,CAAA;AAAA,EACzD;AAAA;AAAA,EAIQ,UAAA,CAAW,eAAuB,SAAA,EAA0C;AAClF,IAAA,IAAI,CAAC,KAAK,MAAA,CAAO,MAAA,IAAU,CAAC,IAAA,CAAK,MAAA,CAAO,SAAA,CAAU,OAAO,CAAA,EAAG;AAC5D,IAAA,IAAA,CAAK,MAAA,CAAO,OAAO,KAAA,CAAM,CAAA,mBAAA,EAAsB,aAAa,CAAA,CAAA,EAAI,EAAE,WAAW,CAAA;AAAA,EAC/E;AAAA,EAEQ,WAAA,CAAY,eAAuB,QAAA,EAAwB;AACjE,IAAA,IAAI,CAAC,KAAK,MAAA,CAAO,MAAA,IAAU,CAAC,IAAA,CAAK,MAAA,CAAO,SAAA,CAAU,MAAM,CAAA,EAAG;AAC3D,IAAA,IAAA,CAAK,OAAO,MAAA,CAAO,IAAA,CAAK,YAAY,aAAa,CAAA,cAAA,EAAiB,QAAQ,CAAA,EAAA,CAAI,CAAA;AAAA,EAChF;AAAA,EAEQ,iBAAA,CAAkB,aAAA,EAAuB,KAAA,EAAe,SAAA,EAAyB;AACvF,IAAA,IAAI,CAAC,KAAK,MAAA,CAAO,MAAA,IAAU,CAAC,IAAA,CAAK,MAAA,CAAO,SAAA,CAAU,MAAM,CAAA,EAAG;AAC3D,IAAA,IAAA,CAAK,OAAO,MAAA,CAAO,IAAA;AAAA,MACjB,CAAA,yBAAA,EAA4B,aAAa,CAAA,QAAA,EAAW,KAAK,IAAI,IAAA,CAAK,MAAA,CAAO,UAAU,CAAA,OAAA,EAAU,SAAS,CAAA,CAAA;AAAA,KACxG;AAAA,EACF;AAAA,EAEQ,eAAA,CACN,aAAA,EACA,KAAA,EACA,KAAA,EACA,KAAA,EACM;AACN,IAAA,IAAI,CAAC,KAAK,MAAA,CAAO,MAAA,IAAU,CAAC,IAAA,CAAK,MAAA,CAAO,SAAA,CAAU,MAAM,CAAA,EAAG;AAC3D,IAAA,MAAM,SAAA,GAAY,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,IAAA,GAAO,SAAA;AACxD,IAAA,IAAA,CAAK,OAAO,MAAA,CAAO,IAAA;AAAA,MACjB,CAAA,SAAA,EAAY,SAAS,CAAA,IAAA,EAAO,aAAa,CAAA,QAAA,EAAW,KAAK,CAAA,CAAA,EAAI,IAAA,CAAK,MAAA,CAAO,iBAAiB,CAAA,OAAA,EAAU,KAAK,CAAA,EAAA;AAAA,KAC3G;AAAA,EACF;AAAA,EAEQ,SAAS,OAAA,EAAuB;AACtC,IAAA,IAAI,CAAC,KAAK,MAAA,CAAO,MAAA,IAAU,CAAC,IAAA,CAAK,MAAA,CAAO,SAAA,CAAU,OAAO,CAAA,EAAG;AAC5D,IAAA,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,KAAA,CAAM,CAAA,SAAA,EAAY,OAAO,CAAA,CAAE,CAAA;AAAA,EAChD;AACF;;;ACpRO,SAAS,QAAA,CACd,QAAA,EACA,MAAA,EACA,MAAA,EACQ;AACR,EAAA,MAAM,eAAe,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,CACvC,MAAA,CAAO,CAAC,GAAG,CAAC,CAAA,KAAM,CAAA,KAAM,MAAS,CAAA,CACjC,IAAA,CAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAA,CAAE,aAAA,CAAc,CAAC,CAAC,CAAA,CACrC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA,KAAM,GAAG,CAAC,CAAA,CAAA,EAAI,KAAK,SAAA,CAAU,CAAC,CAAC,CAAA,CAAE,CAAA,CAC3C,KAAK,GAAG,CAAA;AACX,EAAA,OAAO,CAAA,OAAA,EAAU,QAAQ,CAAA,CAAA,EAAI,MAAM,IAAI,YAAY,CAAA,CAAA;AACrD;AAKA,eAAsB,SAAA,CAAa,OAAc,GAAA,EAAgC;AAC/E,EAAA,MAAM,MAAA,GAAS,KAAA,CAAM,GAAA,CAAO,GAAG,CAAA;AAC/B,EAAA,IAAI,kBAAkB,OAAA,EAAS;AAC7B,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO,MAAA;AACT;AAKA,eAAsB,UAAA,CACpB,KAAA,EACA,GAAA,EACA,KAAA,EACA,GAAA,EACe;AACf,EAAA,MAAM,MAAA,GAAS,KAAA,CAAM,GAAA,CAAI,GAAA,EAAK,OAAO,GAAG,CAAA;AACxC,EAAA,IAAI,kBAAkB,OAAA,EAAS;AAC7B,IAAA,MAAM,MAAA;AAAA,EACR;AACF;;;ACrCO,IAAe,eAAf,MAA4B;AAAA,EACvB,UAAA;AAAA,EACA,MAAA;AAAA,EAEV,WAAA,CAAY,YAAwB,MAAA,EAAuB;AACzD,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAClB,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKU,iBAAiB,aAAA,EAAgC;AACzD,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,MAAA,CAAO,gBAAA,CAAiB,aAAa,CAAA;AAC3D,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,MAAM,IAAI,MAAM,oDAAoD,CAAA;AAAA,IACtE;AACA,IAAA,OAAO,QAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKU,YAAY,OAAA,EAA0B;AAC9C,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,MAAA,CAAO,WAAA,CAAY,OAAO,CAAA;AAChD,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,MAAM,IAAI,MAAM,8CAA8C,CAAA;AAAA,IAChE;AACA,IAAA,OAAO,QAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKU,cAAA,CAAe,eAAwB,OAAA,EAAwB;AACvE,IAAA,IAAA,CAAK,MAAA,CAAO,cAAA,CAAe,aAAA,EAAe,OAAO,CAAA;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAgB,SAAA,CACd,GAAA,EACA,QAAA,EACA,SACA,EAAA,EACY;AACZ,IAAA,MAAM,WAAW,OAAA,CAAQ,KAAA,IAAS,CAAC,CAAC,KAAK,MAAA,CAAO,KAAA;AAChD,IAAA,MAAM,KAAA,GAAQ,KAAK,MAAA,CAAO,KAAA;AAE1B,IAAA,IAAI,CAAC,QAAA,IAAY,CAAC,KAAA,EAAO;AACvB,MAAA,OAAO,EAAA,EAAG;AAAA,IACZ;AAGA,IAAA,MAAM,MAAA,GAAS,MAAM,SAAA,CAAa,KAAA,EAAO,GAAG,CAAA;AAC5C,IAAA,IAAI,WAAW,IAAA,EAAM;AACnB,MAAA,OAAO,MAAA;AAAA,IACT;AAGA,IAAA,MAAM,MAAA,GAAS,MAAM,EAAA,EAAG;AACxB,IAAA,IAAI,MAAA,KAAW,IAAA,IAAQ,MAAA,KAAW,MAAA,EAAW;AAC3C,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,MAAA,CAAO,WAAA,CAAY,QAAQ,CAAA;AAC5C,MAAA,MAAM,UAAA,CAAW,KAAA,EAAO,GAAA,EAAK,MAAA,EAAQ,GAAG,CAAA;AAAA,IAC1C;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKU,QAAA,CAAS,QAAA,EAAkB,MAAA,EAAgB,MAAA,EAAyC;AAC5F,IAAA,OAAO,QAAA,CAAS,QAAA,EAAU,MAAA,EAAQ,MAAM,CAAA;AAAA,EAC1C;AACF;;;AC3DO,IAAM,kBAAA,GAAN,cAAiC,YAAA,CAAa;AAAA,EACnD,WAAA,CAAY,YAAwB,MAAA,EAAuB;AACzD,IAAA,KAAA,CAAM,YAAY,MAAM,CAAA;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAM,MAAA,CAAO,OAAA,GAAmC,EAAC,EAAmC;AAClF,IAAA,MAAM,EAAE,KAAA,EAAO,SAAA,EAAU,GAAIE,kBAAa,gBAAA,CAAiB;AAAA,MACzD,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,OAAO,OAAA,CAAQ;AAAA,KAChB,CAAA;AAED,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,YAAA,EAAc,UAAU,SAAS,CAAA;AAE3D,IAAA,MAAM,OAAO,MAAM,IAAA,CAAK,UAAU,GAAA,EAAK,YAAA,EAAc,SAAS,YAAY;AACxE,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,MAAA,OAAO,OAAO,kBAAkB,CAAA;AAAA,IAClC,CAAC,CAAA;AAED,IAAA,OAAO,IAAIC,gBAAW,IAAA,EAAM;AAAA,MAC1B,cAAA,EAAgB,OAAO,MAAA,KAAmB;AACxC,QAAA,OAAO,KAAK,MAAA,CAAO,EAAE,GAAG,OAAA,EAAS,KAAA,EAAO,QAAQ,CAAA;AAAA,MAClD;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,GAAA,CAAI,QAAA,EAAkB,OAAA,GAA+B,EAAC,EAA8B;AACxF,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,CAAO,QAAQ,CAAA;AACnC,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,YAAA,EAAc,KAAA,EAAO,EAAE,CAAC,MAAA,GAAS,IAAA,GAAO,MAAM,GAAG,QAAA,EAAU,CAAA;AAErF,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,YAAA,EAAc,SAAS,YAAY;AAC5D,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,MAAM,EAAE,KAAA,EAAM,GAAID,iBAAA,CAAa,kBAAA,EAAmB;AAClD,QAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,QAAQ,KAAA,EAAO,EAAE,EAAA,EAAI,QAAA,EAAU,CAAA;AACpE,QAAA,OAAQ,MAAA,CAAO,gBAAgB,CAAA,IAAmB,IAAA;AAAA,MACpD,CAAA,MAAO;AACL,QAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAA,CAAa,oBAAA,EAAqB;AACpD,QAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,QAAQ,KAAA,EAAO,EAAE,IAAA,EAAM,QAAA,EAAU,CAAA;AACtE,QAAA,OAAQ,MAAA,CAAO,gBAAgB,CAAA,IAAmB,IAAA;AAAA,MACpD;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,OAAA,CAAQ,KAAA,EAAiB,OAAA,GAA+B,EAAC,EAAyB;AACtF,IAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,EAAC;AAEhC,IAAA,MAAM,MAAM,IAAA,CAAK,QAAA,CAAS,cAAc,SAAA,EAAW,EAAE,OAAO,CAAA;AAE5D,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,YAAA,EAAc,SAAS,YAAY;AAC5D,MAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAA,CAAa,eAAA,EAAgB;AAC/C,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,QAAQ,KAAA,EAAO,EAAE,OAAO,CAAA;AAC7D,MAAA,OAAQ,MAAA,CAAO,iBAAiB,CAAA,IAAqB,EAAC;AAAA,IACxD,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKQ,OAAO,KAAA,EAAwB;AACrC,IAAA,MAAM,SAAA,GAAY,4EAAA;AAClB,IAAA,OAAO,SAAA,CAAU,KAAK,KAAK,CAAA;AAAA,EAC7B;AACF;ACxCO,IAAM,aAAA,GAAN,cAA4B,YAAA,CAAa;AAAA,EAC9C,WAAA,CAAY,YAAwB,MAAA,EAAuB;AACzD,IAAA,KAAA,CAAM,YAAY,MAAM,CAAA;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,IAAA,CAAK,WAAA,EAAqB,OAAA,GAA4B,EAAC,EAA8B;AACzF,IAAA,MAAM,EAAE,KAAA,EAAO,SAAA,EAAU,GAAIA,kBAAa,SAAA,CAAU;AAAA,MAClD,WAAA;AAAA,MACA,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,iBAAiB,OAAA,CAAQ;AAAA,KAC1B,CAAA;AACD,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,OAAA,EAAS,QAAQ,SAAS,CAAA;AAEpD,IAAA,MAAM,OAAO,MAAM,IAAA,CAAK,UAAU,GAAA,EAAK,OAAA,EAAS,SAAS,YAAY;AACnE,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,MAAA,OAAO,OAAO,OAAO,CAAA;AAAA,IACvB,CAAC,CAAA;AAED,IAAA,OAAO,IAAIC,gBAAW,IAAA,EAAM;AAAA,MAC1B,cAAA,EAAgB,OAAO,MAAA,KACrB,IAAA,CAAK,IAAA,CAAK,WAAA,EAAa,EAAE,GAAG,OAAA,EAAS,KAAA,EAAO,MAAA,EAAQ;AAAA,KACvD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SAAS,OAAA,EAAoD;AACjE,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,OAAA,EAAS,UAAA,EAAY;AAAA,MAC7C,aAAa,OAAA,CAAQ,WAAA;AAAA,MACrB,eAAe,OAAA,CAAQ,aAAA;AAAA,MACvB,SAAS,OAAA,CAAQ;AAAA,KAClB,CAAA;AAED,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,OAAA,EAAS,SAAS,YAAY;AACvD,MAAA,MAAM,EAAE,KAAA,EAAO,SAAA,EAAU,GAAID,iBAAAA,CAAa,KAAK,OAAO,CAAA;AACtD,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,MAAA,OAAQ,MAAA,CAAO,MAAM,CAAA,IAAc,IAAA;AAAA,IACrC,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,UAAU,OAAA,EAAqD;AACnE,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,OAAA,EAAS,WAAA,EAAa;AAAA,MAC9C,aAAa,OAAA,CAAQ,WAAA;AAAA,MACrB,eAAe,OAAA,CAAQ,aAAA;AAAA,MACvB,UAAU,OAAA,CAAQ;AAAA,KACnB,CAAA;AAED,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,OAAA,EAAS,SAAS,YAAY;AACvD,MAAA,MAAM,EAAE,KAAA,EAAO,SAAA,EAAU,GAAIA,iBAAAA,CAAa,KAAK,OAAO,CAAA;AACtD,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,MAAA,OAAQ,MAAA,CAAO,MAAM,CAAA,IAAc,IAAA;AAAA,IACrC,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAO,KAAA,EAAuC;AAClD,IAAA,IAAA,CAAK,MAAA,CAAO,wBAAwB,cAAc,CAAA;AAElD,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,UAAA,EAAW;AAC1C,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,QAAQ,KAAA,EAAOA,iBAAAA,CAAa,mBAAA,CAAoB,KAAK,CAAC,CAAA;AAC3F,IAAA,OAAO,OAAO,YAAY,CAAA;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,MAAA,CAAO,EAAA,EAAY,KAAA,EAAuC;AAC9D,IAAA,IAAA,CAAK,MAAA,CAAO,wBAAwB,cAAc,CAAA;AAElD,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,UAAA,EAAW;AAC1C,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAOA,iBAAAA,CAAa,mBAAA,CAAoB,EAAA,EAAI,KAAK,CAAC,CAAA;AAC/F,IAAA,OAAO,OAAO,YAAY,CAAA;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,UAAA,CAAW,OAAA,GAAiC,EAAC,EAA8B;AAC/E,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,gBAAA,CAAiB,OAAA,CAAQ,aAAa,CAAA;AACjE,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,WAAA,CAAY,OAAA,CAAQ,OAAO,CAAA;AAChD,IAAA,IAAA,CAAK,cAAA,CAAe,eAAe,OAAO,CAAA;AAE1C,IAAA,MAAM,YAAYA,iBAAAA,CAAa,wBAAA;AAAA,MAC7B,aAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA,CAAQ;AAAA,KACV;AACA,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,OAAA,EAAS,cAAc,SAAS,CAAA;AAE1D,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,OAAA,EAAS,SAAS,YAAY;AACvD,MAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,eAAA,EAAgB;AAC/C,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,MAAA,OAAQ,MAAA,CAAO,iBAAiB,CAAA,IAA0B,EAAC;AAAA,IAC7D,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAM,MAAA,CAAO,OAAA,GAA8B,EAAC,EAA8B;AACxE,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,MAAA,CAAO,gBAAA,CAAiB,QAAQ,aAAa,CAAA;AAGxE,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,IAAA,CAAK,eAAe,aAAa,CAAA;AAAA,IACnC;AAEA,IAAA,MAAM,EAAE,KAAA,EAAO,SAAA,EAAU,GAAIA,kBAAa,WAAA,CAAY;AAAA,MACpD,aAAA;AAAA,MACA,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,OAAO,OAAA,CAAQ;AAAA,KAChB,CAAA;AAED,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,OAAA,EAAS,UAAU,SAAS,CAAA;AAEtD,IAAA,MAAM,OAAO,MAAM,IAAA,CAAK,UAAU,GAAA,EAAK,OAAA,EAAS,SAAS,YAAY;AACnE,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,MAAA,OAAO,OAAO,aAAa,CAAA;AAAA,IAC7B,CAAC,CAAA;AAED,IAAA,OAAO,IAAIC,gBAAW,IAAA,EAAM;AAAA,MAC1B,cAAA,EAAgB,OAAO,MAAA,KAAmB;AACxC,QAAA,OAAO,KAAK,MAAA,CAAO,EAAE,GAAG,OAAA,EAAS,KAAA,EAAO,QAAQ,CAAA;AAAA,MAClD;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAkBA,MAAM,GAAA,CACJ,iBAAA,EACA,gBAAA,EACA,OAAA,EACsB;AAEtB,IAAA,IAAI,OAAO,qBAAqB,QAAA,EAAU;AAExC,MAAA,MAAM,aAAA,GAAgB,iBAAA;AACtB,MAAA,MAAM,OAAA,GAAU,gBAAA;AAChB,MAAA,MAAM,IAAA,GAAO,WAAW,EAAC;AAEzB,MAAA,IAAA,CAAK,cAAA,CAAe,eAAe,OAAO,CAAA;AAE1C,MAAA,MAAM,GAAA,GAAM,KAAK,QAAA,CAAS,OAAA,EAAS,aAAa,EAAE,aAAA,EAAe,SAAS,CAAA;AAE1E,MAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,OAAA,EAAS,MAAM,YAAY;AACpD,QAAA,MAAM,EAAE,KAAA,EAAM,GAAID,iBAAAA,CAAa,eAAA,EAAgB;AAC/C,QAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,QAAQ,KAAA,EAAO,EAAE,aAAA,EAAe,OAAA,EAAS,CAAA;AAC9E,QAAA,OAAQ,MAAA,CAAO,WAAW,CAAA,IAAc,IAAA;AAAA,MAC1C,CAAC,CAAA;AAAA,IACH,CAAA,MAAO;AAEL,MAAA,MAAM,EAAA,GAAK,iBAAA;AACX,MAAA,MAAM,IAAA,GAAO,oBAAoB,EAAC;AAElC,MAAA,MAAM,MAAM,IAAA,CAAK,QAAA,CAAS,SAAS,KAAA,EAAO,EAAE,IAAI,CAAA;AAEhD,MAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,OAAA,EAAS,MAAM,YAAY;AACpD,QAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,aAAA,EAAc;AAC7C,QAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,QAAQ,KAAA,EAAO,EAAE,IAAI,CAAA;AAC1D,QAAA,OAAQ,MAAA,CAAO,WAAW,CAAA,IAAc,IAAA;AAAA,MAC1C,CAAC,CAAA;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,OAAA,CAAQ,GAAA,EAAe,OAAA,GAA0B,EAAC,EAAoB;AAC1E,IAAA,IAAI,GAAA,CAAI,MAAA,KAAW,CAAA,EAAG,OAAO,EAAC;AAE9B,IAAA,MAAM,MAAM,IAAA,CAAK,QAAA,CAAS,SAAS,SAAA,EAAW,EAAE,KAAK,CAAA;AAErD,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,OAAA,EAAS,SAAS,YAAY;AACvD,MAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,UAAA,EAAW;AAC1C,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,QAAQ,KAAA,EAAO,EAAE,KAAK,CAAA;AAC3D,MAAA,OAAQ,MAAA,CAAO,YAAY,CAAA,IAAgB,EAAC;AAAA,IAC9C,CAAC,CAAA;AAAA,EACH;AACF;ACtNO,IAAM,gBAAA,GAAN,cAA+B,YAAA,CAAa;AAAA,EACjD,WAAA,CAAY,YAAwB,MAAA,EAAuB;AACzD,IAAA,KAAA,CAAM,YAAY,MAAM,CAAA;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,IAAA,CAAK,WAAA,EAAqB,OAAA,GAA+B,EAAC,EAAiC;AAC/F,IAAA,MAAM,EAAE,KAAA,EAAO,SAAA,EAAU,GAAIA,kBAAa,YAAA,CAAa;AAAA,MACrD,WAAA;AAAA,MACA,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,iBAAiB,OAAA,CAAQ,eAAA;AAAA,MACzB,SAAS,OAAA,CAAQ,OAAA;AAAA,MACjB,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,OAAO,OAAA,CAAQ;AAAA,KAChB,CAAA;AACD,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,UAAA,EAAY,QAAQ,SAAS,CAAA;AAEvD,IAAA,MAAM,OAAO,MAAM,IAAA,CAAK,UAAU,GAAA,EAAK,UAAA,EAAY,SAAS,YAAY;AACtE,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,MAAA,OAAO,OAAO,UAAU,CAAA;AAAA,IAC1B,CAAC,CAAA;AAED,IAAA,OAAO,IAAIC,gBAAW,IAAA,EAAM;AAAA,MAC1B,cAAA,EAAgB,OAAO,MAAA,KACrB,IAAA,CAAK,IAAA,CAAK,WAAA,EAAa,EAAE,GAAG,OAAA,EAAS,KAAA,EAAO,MAAA,EAAQ;AAAA,KACvD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SAAS,OAAA,EAA0D;AACvE,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,UAAA,EAAY,UAAA,EAAY;AAAA,MAChD,aAAa,OAAA,CAAQ,WAAA;AAAA,MACrB,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,YAAY,OAAA,CAAQ;AAAA,KACrB,CAAA;AAED,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,UAAA,EAAY,SAAS,YAAY;AAC1D,MAAA,MAAM,EAAE,KAAA,EAAO,SAAA,EAAU,GAAID,iBAAAA,CAAa,QAAQ,OAAO,CAAA;AACzD,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,MAAA,OAAQ,MAAA,CAAO,SAAS,CAAA,IAAiB,IAAA;AAAA,IAC3C,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,UAAU,WAAA,EAA6E;AAC3F,IAAA,MAAM,OAAA,GACJ,OAAO,WAAA,KAAgB,QAAA,GACnB,MAAM,IAAA,CAAK,SAAA;AAAA,MACT,KAAK,QAAA,CAAS,UAAA,EAAY,aAAa,EAAE,EAAA,EAAI,aAAa,CAAA;AAAA,MAC1D,UAAA;AAAA,MACA,EAAC;AAAA,MACD,YAAY;AACV,QAAA,MAAM,EAAE,OAAO,SAAA,EAAU,GAAIA,kBAAa,OAAA,CAAQ,EAAE,EAAA,EAAI,WAAA,EAAa,CAAA;AACrE,QAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,QAAA,OAAQ,MAAA,CAAO,SAAS,CAAA,IAAiB,IAAA;AAAA,MAC3C;AAAA,KACF,GACA,MAAM,IAAA,CAAK,QAAA,CAAS,WAAW,CAAA;AACrC,IAAA,OAAO,SAAS,MAAA,IAAU,IAAA;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,MAAM,MAAA,CAAO,OAAA,GAAiC,EAAC,EAAiC;AAC9E,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,MAAA,CAAO,gBAAA,CAAiB,QAAQ,aAAa,CAAA;AACxE,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,MAAA,CAAO,WAAA,CAAY,QAAQ,OAAO,CAAA;AAGvD,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,IAAA,CAAK,cAAA,CAAe,eAAe,OAAO,CAAA;AAAA,IAC5C;AAEA,IAAA,MAAM,EAAE,KAAA,EAAO,SAAA,EAAU,GAAIA,kBAAa,cAAA,CAAe;AAAA,MACvD,aAAA;AAAA,MACA,OAAA;AAAA,MACA,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,SAAS,OAAA,CAAQ,OAAA;AAAA,MACjB,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,OAAO,OAAA,CAAQ;AAAA,KAChB,CAAA;AAED,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,UAAA,EAAY,UAAU,SAAS,CAAA;AAEzD,IAAA,MAAM,OAAO,MAAM,IAAA,CAAK,UAAU,GAAA,EAAK,UAAA,EAAY,SAAS,YAAY;AACtE,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,MAAA,OAAO,OAAO,gBAAgB,CAAA;AAAA,IAChC,CAAC,CAAA;AAED,IAAA,OAAO,IAAIC,gBAAW,IAAA,EAAM;AAAA,MAC1B,cAAA,EAAgB,OAAO,MAAA,KAAmB;AACxC,QAAA,OAAO,KAAK,MAAA,CAAO,EAAE,GAAG,OAAA,EAAS,KAAA,EAAO,QAAQ,CAAA;AAAA,MAClD;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAuBA,MAAM,GAAA,CACJ,iBAAA,EACA,gBAAA,EACA,YACA,OAAA,EACyB;AAEzB,IAAA,IAAI,OAAO,gBAAA,KAAqB,QAAA,IAAY,OAAO,eAAe,QAAA,EAAU;AAE1E,MAAA,MAAM,aAAA,GAAgB,iBAAA;AACtB,MAAA,MAAM,OAAA,GAAU,gBAAA;AAChB,MAAA,MAAM,IAAA,GAAO,WAAW,EAAC;AAEzB,MAAA,IAAA,CAAK,cAAA,CAAe,eAAe,OAAO,CAAA;AAE1C,MAAA,MAAM,GAAA,GAAM,KAAK,QAAA,CAAS,UAAA,EAAY,aAAa,EAAE,aAAA,EAAe,OAAA,EAAS,UAAA,EAAY,CAAA;AAEzF,MAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,UAAA,EAAY,MAAM,YAAY;AACvD,QAAA,MAAM,EAAE,KAAA,EAAM,GAAID,iBAAAA,CAAa,kBAAA,EAAmB;AAClD,QAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,EAAE,aAAA,EAAe,OAAA,EAAS,UAAA,EAAY,CAAA;AAC1F,QAAA,OAAQ,MAAA,CAAO,cAAc,CAAA,IAAiB,IAAA;AAAA,MAChD,CAAC,CAAA;AAAA,IACH,CAAA,MAAO;AAEL,MAAA,MAAM,EAAA,GAAK,iBAAA;AACX,MAAA,MAAM,IAAA,GAAQ,oBAA0C,EAAC;AAEzD,MAAA,MAAM,MAAM,IAAA,CAAK,QAAA,CAAS,YAAY,KAAA,EAAO,EAAE,IAAI,CAAA;AAEnD,MAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,UAAA,EAAY,MAAM,YAAY;AACvD,QAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,gBAAA,EAAiB;AAChD,QAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,QAAQ,KAAA,EAAO,EAAE,IAAI,CAAA;AAC1D,QAAA,OAAQ,MAAA,CAAO,cAAc,CAAA,IAAiB,IAAA;AAAA,MAChD,CAAC,CAAA;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,OAAA,CAAQ,GAAA,EAAe,OAAA,GAA6B,EAAC,EAAuB;AAChF,IAAA,IAAI,GAAA,CAAI,MAAA,KAAW,CAAA,EAAG,OAAO,EAAC;AAE9B,IAAA,MAAM,MAAM,IAAA,CAAK,QAAA,CAAS,YAAY,SAAA,EAAW,EAAE,KAAK,CAAA;AAExD,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,UAAA,EAAY,SAAS,YAAY;AAC1D,MAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,aAAA,EAAc;AAC7C,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,QAAQ,KAAA,EAAO,EAAE,KAAK,CAAA;AAC3D,MAAA,OAAQ,MAAA,CAAO,eAAe,CAAA,IAAmB,EAAC;AAAA,IACpD,CAAC,CAAA;AAAA,EACH;AAAA,EA4BA,MAAM,YAAA,CACJ,iBAAA,EACA,eAAA,EACA,kBAAA,EACA,iBACA,YAAA,EACyC;AACzC,IAAA,IAAI,WAAA;AAGJ,IAAA,IAAI,OAAA;AAEJ,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,eAAe,CAAA,EAAG;AAClC,MAAA,WAAA,GAAc,EAAE,EAAA,EAAI,iBAAA,EAAmB,MAAA,EAAQ,eAAA,EAAgB;AAC/D,MAAA,OAAA,GAAW,sBAAiE,EAAC;AAAA,IAC/E,CAAA,MAAO;AACL,MAAA,WAAA,GAAc;AAAA,QACZ,aAAA,EAAe,iBAAA;AAAA,QACf,OAAA,EAAS,eAAA;AAAA,QACT,UAAA,EAAY,kBAAA;AAAA,QACZ,MAAA,EAAQ;AAAA,OACV;AACA,MAAA,OAAA,GAAU,gBAAgB,EAAC;AAC3B,MAAA,IAAA,CAAK,cAAA,CAAe,WAAA,CAAY,aAAA,EAAe,WAAA,CAAY,OAAO,CAAA;AAAA,IACpE;AAEA,IAAA,MAAM,EAAE,KAAA,EAAO,SAAA,EAAU,GAAIA,kBAAa,wBAAA,CAAyB;AAAA,MACjE,GAAG,WAAA;AAAA,MACH,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,eAAe,OAAA,CAAQ,aAAA;AAAA,MACvB,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,OAAO,OAAA,CAAQ;AAAA,KAChB,CAAA;AACD,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,UAAA,EAAY,gBAAgB,SAAS,CAAA;AAE/D,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,UAAA,EAAY,SAAS,YAAY;AAC1D,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,MAAA,MAAM,OAAA,GAAU,OAAO,cAAc,CAAA;AACrC,MAAA,OAAO,OAAA,EAAS,gBAAgB,EAAC;AAAA,IACnC,CAAC,CAAA;AAAA,EACH;AACF;ACvLO,IAAM,aAAA,GAAN,cAA4B,YAAA,CAAa;AAAA,EAC9C,WAAA,CAAY,YAAwB,MAAA,EAAuB;AACzD,IAAA,KAAA,CAAM,YAAY,MAAM,CAAA;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,KAAA,CAAM,EAAA,EAAY,OAAA,GAA4B,EAAC,EAAyB;AAC5E,IAAA,MAAM,MAAM,IAAA,CAAK,QAAA,CAAS,SAAS,OAAA,EAAS,EAAE,IAAI,CAAA;AAElD,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,OAAA,EAAS,SAAS,YAAY;AACvD,MAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,aAAA,EAAc;AAC7C,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,QAAQ,KAAA,EAAO,EAAE,IAAI,CAAA;AAC1D,MAAA,OAAQ,MAAA,CAAO,WAAW,CAAA,IAAc,IAAA;AAAA,IAC1C,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,GAAA,CAAI,EAAA,EAAY,OAAA,EAAgD;AACpE,IAAA,MAAM,YAAYA,iBAAAA,CAAa,iBAAA,CAAkB,IAAI,OAAA,CAAQ,SAAA,EAAW,QAAQ,OAAO,CAAA;AACvF,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,OAAA,EAAS,OAAO,SAAS,CAAA;AAEnD,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,OAAA,EAAS,SAAS,YAAY;AACvD,MAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,QAAA,EAAS;AACxC,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,MAAA,OAAQ,MAAA,CAAO,MAAM,CAAA,IAAc,IAAA;AAAA,IACrC,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QAAA,CAAS,EAAA,EAAY,OAAA,GAA4B,EAAC,EAAyB;AAC/E,IAAA,OAAO,IAAA,CAAK,IAAI,EAAA,EAAI,EAAE,GAAG,OAAA,EAAS,SAAA,EAAW,SAAS,CAAA;AAAA,EACxD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,YAAA,CACJ,EAAA,EACA,OAAA,GAAyE,EAAC,EACpD;AACtB,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,EAAA,EAAI,EAAE,GAAG,OAAA,EAAS,SAAA,EAAW,WAAA,EAAa,OAAA,EAAS,OAAA,CAAQ,OAAA,EAAS,CAAA;AAAA,EACtF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SAAA,CAAU,EAAA,EAAY,OAAA,GAA4B,EAAC,EAAyB;AAChF,IAAA,MAAM,MAAM,IAAA,CAAK,QAAA,CAAS,SAAS,WAAA,EAAa,EAAE,IAAI,CAAA;AAEtD,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,OAAA,EAAS,SAAS,YAAY;AACvD,MAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,MAAA,EAAO;AACtC,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,QAAQ,KAAA,EAAO,EAAE,IAAI,CAAA;AAC1D,MAAA,OAAQ,MAAA,CAAO,QAAQ,CAAA,IAAc,IAAA;AAAA,IACvC,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,WAAA,CACJ,aAAA,EACA,SACA,IAAA,EACA,OAAA,GAAkC,EAAC,EACb;AACtB,IAAA,MAAM,GAAA,GAAM,KAAK,QAAA,CAAS,OAAA,EAAS,eAAe,EAAE,aAAA,EAAe,OAAA,EAAS,IAAA,EAAM,CAAA;AAElF,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,OAAA,EAAS,SAAS,YAAY;AACvD,MAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,eAAA,EAAgB;AAC/C,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,EAAE,aAAA,EAAe,OAAA,EAAS,IAAA,EAAM,CAAA;AACpF,MAAA,OAAQ,MAAA,CAAO,iBAAiB,CAAA,IAAc,IAAA;AAAA,IAChD,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SAAA,CACJ,aAAA,EACA,SACA,IAAA,EACA,OAAA,GAAkC,EAAC,EACb;AACtB,IAAA,MAAM,GAAA,GAAM,KAAK,QAAA,CAAS,OAAA,EAAS,aAAa,EAAE,aAAA,EAAe,OAAA,EAAS,IAAA,EAAM,CAAA;AAEhF,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,OAAA,EAAS,SAAS,YAAY;AACvD,MAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,UAAA,EAAW;AAC1C,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,EAAE,aAAA,EAAe,OAAA,EAAS,IAAA,EAAM,CAAA;AACpF,MAAA,OAAQ,MAAA,CAAO,YAAY,CAAA,IAAc,IAAA;AAAA,IAC3C,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,kBAAA,CACJ,WAAA,EACA,OAAA,GAAyC,EAAC,EACpB;AACtB,IAAA,MAAM,MAAM,IAAA,CAAK,QAAA,CAAS,SAAS,oBAAA,EAAsB,EAAE,aAAa,CAAA;AAExE,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,OAAA,EAAS,SAAS,YAAY;AACvD,MAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,sBAAA,EAAuB;AACtD,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,QAAQ,KAAA,EAAO,EAAE,aAAa,CAAA;AACnE,MAAA,OAAQ,MAAA,CAAO,wBAAwB,CAAA,IAAc,IAAA;AAAA,IACvD,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,gBAAA,CACJ,WAAA,EACA,OAAA,EACsB;AACtB,IAAA,MAAM,YAAYA,iBAAAA,CAAa,4BAAA;AAAA,MAC7B,WAAA;AAAA,MACA,OAAA,CAAQ,SAAA;AAAA,MACR,OAAA,CAAQ;AAAA,KACV;AACA,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,OAAA,EAAS,oBAAoB,SAAS,CAAA;AAEhE,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,OAAA,EAAS,SAAS,YAAY;AACvD,MAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,iBAAA,EAAkB;AACjD,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,MAAA,OAAQ,MAAA,CAAO,mBAAmB,CAAA,IAAc,IAAA;AAAA,IAClD,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,qBAAA,CACJ,WAAA,EACA,OAAA,GAA4B,EAAC,EACP;AACtB,IAAA,OAAO,IAAA,CAAK,iBAAiB,WAAA,EAAa,EAAE,GAAG,OAAA,EAAS,SAAA,EAAW,SAAS,CAAA;AAAA,EAC9E;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,yBAAA,CACJ,WAAA,EACA,OAAA,GAAyE,EAAC,EACpD;AACtB,IAAA,OAAO,IAAA,CAAK,iBAAiB,WAAA,EAAa;AAAA,MACxC,GAAG,OAAA;AAAA,MACH,SAAA,EAAW,WAAA;AAAA,MACX,SAAS,OAAA,CAAQ;AAAA,KAClB,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QAAA,CAAS,OAAA,GAA4B,EAAC,EAA8B;AACxE,IAAA,MAAM,EAAE,KAAA,EAAO,SAAA,EAAU,GAAIA,kBAAa,WAAA,CAAY;AAAA,MACpD,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,iBAAiB,OAAA,CAAQ;AAAA,KAC1B,CAAA;AACD,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,OAAA,EAAS,YAAY,SAAS,CAAA;AAExD,IAAA,MAAM,OAAO,MAAM,IAAA,CAAK,UAAU,GAAA,EAAK,OAAA,EAAS,SAAS,YAAY;AACnE,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,MAAA,OAAO,OAAO,SAAS,CAAA;AAAA,IACzB,CAAC,CAAA;AAED,IAAA,OAAO,IAAIC,gBAAW,IAAA,EAAM;AAAA,MAC1B,cAAA,EAAgB,OAAO,MAAA,KAAmB,IAAA,CAAK,QAAA,CAAS,EAAE,GAAG,OAAA,EAAS,KAAA,EAAO,MAAA,EAAQ;AAAA,KACtF,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,UAAA,CAAW,OAAA,GAAkC,EAAC,EAA8B;AAChF,IAAA,MAAM,EAAE,KAAA,EAAO,SAAA,EAAU,GAAID,kBAAa,WAAA,CAAY;AAAA,MACpD,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,OAAO,OAAA,CAAQ;AAAA,KAChB,CAAA;AACD,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,OAAA,EAAS,cAAc,SAAS,CAAA;AAE1D,IAAA,MAAM,OAAO,MAAM,IAAA,CAAK,UAAU,GAAA,EAAK,OAAA,EAAS,SAAS,YAAY;AACnE,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,MAAA,OAAO,OAAO,aAAa,CAAA;AAAA,IAC7B,CAAC,CAAA;AAED,IAAA,OAAO,IAAIC,gBAAW,IAAA,EAAM;AAAA,MAC1B,cAAA,EAAgB,OAAO,MAAA,KAAmB,IAAA,CAAK,UAAA,CAAW,EAAE,GAAG,OAAA,EAAS,KAAA,EAAO,MAAA,EAAQ;AAAA,KACxF,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAA,CAAQ,OAAA,GAA+B,EAAC,EAA8B;AAC1E,IAAA,IAAA,CAAK,MAAA,CAAO,wBAAwB,eAAe,CAAA;AAEnD,IAAA,MAAM,EAAE,KAAA,EAAO,SAAA,EAAU,GAAID,kBAAa,QAAA,CAAS;AAAA,MACjD,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,OAAO,OAAA,CAAQ;AAAA,KAChB,CAAA;AACD,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,OAAA,EAAS,WAAW,SAAS,CAAA;AAEvD,IAAA,MAAM,OAAO,MAAM,IAAA,CAAK,UAAU,GAAA,EAAK,OAAA,EAAS,SAAS,YAAY;AACnE,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,MAAA,OAAO,OAAO,UAAU,CAAA;AAAA,IAC1B,CAAC,CAAA;AAED,IAAA,OAAO,IAAIC,gBAAW,IAAA,EAAM;AAAA,MAC1B,cAAA,EAAgB,OAAO,MAAA,KAAmB,IAAA,CAAK,OAAA,CAAQ,EAAE,GAAG,OAAA,EAAS,KAAA,EAAO,MAAA,EAAQ;AAAA,KACrF,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,UAAA,CAAW,OAAA,GAAkC,EAAC,EAA8B;AAChF,IAAA,MAAM,EAAE,KAAA,EAAO,SAAA,EAAU,GAAID,kBAAa,WAAA,CAAY;AAAA,MACpD,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,OAAO,OAAA,CAAQ;AAAA,KAChB,CAAA;AACD,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,OAAA,EAAS,cAAc,SAAS,CAAA;AAE1D,IAAA,MAAM,OAAO,MAAM,IAAA,CAAK,UAAU,GAAA,EAAK,OAAA,EAAS,SAAS,YAAY;AACnE,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,MAAA,OAAO,OAAO,aAAa,CAAA;AAAA,IAC7B,CAAC,CAAA;AAED,IAAA,OAAO,IAAIC,gBAAW,IAAA,EAAM;AAAA,MAC1B,cAAA,EAAgB,OAAO,MAAA,KAAmB,IAAA,CAAK,UAAA,CAAW,EAAE,GAAG,OAAA,EAAS,KAAA,EAAO,MAAA,EAAQ;AAAA,KACxF,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,YAAA,CAAa,EAAA,EAAY,OAAA,GAA4B,EAAC,EAAgC;AAC1F,IAAA,MAAM,MAAM,IAAA,CAAK,QAAA,CAAS,SAAS,cAAA,EAAgB,EAAE,IAAI,CAAA;AAEzD,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,OAAA,EAAS,SAAS,YAAY;AACvD,MAAA,MAAM,EAAE,KAAA,EAAM,GAAID,iBAAAA,CAAa,WAAA,EAAY;AAC3C,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,QAAQ,KAAA,EAAO,EAAE,IAAI,CAAA;AAC1D,MAAA,OAAQ,MAAA,CAAO,aAAa,CAAA,IAAqB,IAAA;AAAA,IACnD,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,YAAA,CACJ,MAAA,EACA,OAAA,GAAmC,EAAC,EACF;AAClC,IAAA,MAAM,EAAE,KAAA,EAAO,SAAA,EAAW,aAAA,EAAc,GAAIA,kBAAa,YAAA,CAAa;AAAA,MACpE,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,OAAO,OAAA,CAAQ;AAAA,KAChB,CAAA;AACD,IAAA,MAAM,SAAA,GAAY,EAAE,MAAA,EAAQ,GAAG,aAAA,EAAc;AAC7C,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,OAAA,EAAS,gBAAgB,SAAS,CAAA;AAE5D,IAAA,MAAM,OAAO,MAAM,IAAA,CAAK,UAAU,GAAA,EAAK,OAAA,EAAS,SAAS,YAAY;AACnE,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,MAAA,OAAO,OAAO,cAAc,CAAA;AAAA,IAC9B,CAAC,CAAA;AAED,IAAA,OAAO,IAAIC,gBAAW,IAAA,EAAM;AAAA,MAC1B,cAAA,EAAgB,OAAO,MAAA,KACrB,IAAA,CAAK,YAAA,CAAa,MAAA,EAAQ,EAAE,GAAG,OAAA,EAAS,KAAA,EAAO,MAAA,EAAQ;AAAA,KAC1D,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SAAA,CAAU,EAAA,EAAY,OAAA,GAA4B,EAAC,EAAsB;AAC7E,IAAA,MAAM,MAAM,IAAA,CAAK,QAAA,CAAS,SAAS,WAAA,EAAa,EAAE,IAAI,CAAA;AAEtD,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,OAAA,EAAS,SAAS,YAAY;AACvD,MAAA,MAAM,EAAE,KAAA,EAAM,GAAID,iBAAAA,CAAa,aAAA,EAAc;AAC7C,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,QAAQ,KAAA,EAAO,EAAE,IAAI,CAAA;AAC1D,MAAA,OAAO,OAAO,eAAe,CAAA;AAAA,IAC/B,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,WAAA,CACJ,aAAA,EACA,WAAA,EACA,OAAA,GAA4B,EAAC,EACV;AACnB,IAAA,MAAM,SAAA,GAAYA,iBAAAA,CAAa,wBAAA,CAAyB,aAAA,EAAe,WAAW,CAAA;AAClF,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,OAAA,EAAS,eAAe,SAAS,CAAA;AAE3D,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,OAAA,EAAS,SAAS,YAAY;AACvD,MAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,eAAA,EAAgB;AAC/C,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,MAAA,OAAO,OAAO,iBAAiB,CAAA;AAAA,IACjC,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QAAA,CACJ,EAAA,EACA,KAAA,EACA,OAAA,GAA4B,EAAC,EACJ;AACzB,IAAA,MAAM,SAAA,GAAYA,iBAAAA,CAAa,qBAAA,CAAsB,EAAA,EAAI,KAAK,CAAA;AAC9D,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,OAAA,EAAS,YAAY,SAAS,CAAA;AAExD,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,OAAA,EAAS,SAAS,YAAY;AACvD,MAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,YAAA,EAAa;AAC5C,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,MAAA,OAAO,OAAO,cAAc,CAAA;AAAA,IAC9B,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,kBAAA,CACJ,KAAA,EACA,OAAA,GAA4B,EAAC,EACO;AACpC,IAAA,MAAM,SAAA,GAAYA,iBAAAA,CAAa,2BAAA,CAA4B,KAAK,CAAA;AAChE,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,OAAA,EAAS,sBAAsB,SAAS,CAAA;AAElE,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,OAAA,EAAS,SAAS,YAAY;AACvD,MAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,kBAAA,EAAmB;AAClD,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,MAAA,OAAO,OAAO,oBAAoB,CAAA;AAAA,IACpC,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,UAAA,CACJ,EAAA,EACA,SAA2B,aAAA,EAC3B,OAAA,GAA4B,EAAC,EACD;AAC5B,IAAA,MAAM,SAAA,GAAYA,iBAAAA,CAAa,mBAAA,CAAoB,EAAA,EAAI,MAAM,CAAA;AAC7D,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,OAAA,EAAS,cAAc,SAAS,CAAA;AAE1D,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,OAAA,EAAS,SAAS,YAAY;AACvD,MAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,UAAA,EAAW;AAC1C,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,MAAA,OAAO,OAAO,YAAY,CAAA;AAAA,IAC5B,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,kBAAA,CACJ,OAAA,GAAyC,EAAC,EACR;AAClC,IAAA,MAAM,EAAE,KAAA,EAAO,SAAA,EAAU,GAAIA,kBAAa,sBAAA,CAAuB;AAAA,MAC/D,eAAe,OAAA,CAAQ,aAAA;AAAA,MACvB,SAAS,OAAA,CAAQ,OAAA;AAAA,MACjB,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,YAAY,OAAA,CAAQ,UAAA;AAAA,MACpB,kBAAkB,OAAA,CAAQ;AAAA,KAC3B,CAAA;AACD,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,OAAA,EAAS,sBAAsB,SAAS,CAAA;AAElE,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,OAAA,EAAS,SAAS,YAAY;AACvD,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,MAAA,OAAO,OAAO,wBAAwB,CAAA;AAAA,IACxC,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,iBAAA,CACJ,MAAA,EACA,OAAA,GAAwC,EAAC,EACZ;AAC7B,IAAA,MAAM,MAAM,IAAA,CAAK,QAAA,CAAS,SAAS,mBAAA,EAAqB,EAAE,QAAQ,CAAA;AAElE,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,OAAA,EAAS,SAAS,YAAY;AACvD,MAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,iBAAA,EAAkB;AACjD,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,QAAQ,KAAA,EAAO,EAAE,QAAQ,CAAA;AAC9D,MAAA,OAAO,OAAO,mBAAmB,CAAA;AAAA,IACnC,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,0BAAA,CACJ,MAAA,EACA,OAAA,GAAiD,EAAC,EACb;AACrC,IAAA,MAAM,YAAYA,iBAAAA,CAAa,mCAAA;AAAA,MAC7B,MAAA;AAAA,MACA,OAAA,CAAQ;AAAA,KACV;AACA,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,OAAA,EAAS,8BAA8B,SAAS,CAAA;AAE1E,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,OAAA,EAAS,SAAS,YAAY;AACvD,MAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,0BAAA,EAA2B;AAC1D,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,MAAA,OAAO,OAAO,4BAA4B,CAAA;AAAA,IAC5C,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,4BAAA,CACJ,OAAA,GAAmD,EAAC,EACf;AACrC,IAAA,MAAM,SAAA,GAAYA,iBAAAA,CAAa,qCAAA,CAAsC,OAAA,CAAQ,aAAa,CAAA;AAC1F,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,OAAA,EAAS,gCAAgC,SAAS,CAAA;AAE5E,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,OAAA,EAAS,SAAS,YAAY;AACvD,MAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,4BAAA,EAA6B;AAC5D,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,MAAA,OAAO,OAAO,8BAA8B,CAAA;AAAA,IAC9C,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAO,KAAA,EAAuC;AAClD,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,UAAA,EAAW;AAC1C,IAAA,MAAM,SAAA,GAAYA,iBAAAA,CAAa,mBAAA,CAAoB,KAAK,CAAA;AACxD,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,IAAA,OAAO,OAAO,YAAY,CAAA;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,MAAA,CAAO,EAAA,EAAY,KAAA,EAAuC;AAC9D,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,UAAA,EAAW;AAC1C,IAAA,MAAM,SAAA,GAAYA,iBAAAA,CAAa,mBAAA,CAAoB,EAAA,EAAI,KAAK,CAAA;AAC5D,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,IAAA,OAAO,OAAO,YAAY,CAAA;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cAAA,CAAe,EAAA,EAAY,KAAA,EAAuC;AACtE,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,EAAA,EAAI,KAAK,CAAA;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,oBACJ,KAAA,EACyC;AACzC,IAAA,IAAA,CAAK,MAAA,CAAO,wBAAwB,2BAA2B,CAAA;AAE/D,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,uBAAA,EAAwB;AACvD,IAAA,MAAM,SAAA,GAAYA,iBAAAA,CAAa,gCAAA,CAAiC,KAAK,CAAA;AACrE,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,IAAA,OAAO,OAAO,yBAAyB,CAAA;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,KAAA,CAAM,EAAA,EAAY,KAAA,EAA8D;AACpF,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,SAAA,EAAU;AACzC,IAAA,MAAM,SAAA,GAAYA,iBAAAA,CAAa,kBAAA,CAAmB,EAAA,EAAI,KAAK,CAAA;AAC3D,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,IAAA,OAAO,OAAO,WAAW,CAAA;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,iBAAA,CACJ,EAAA,EACA,KAAA,EACuC;AACvC,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,qBAAA,EAAsB;AACrD,IAAA,MAAM,SAAA,GAAYA,iBAAAA,CAAa,8BAAA,CAA+B,EAAA,EAAI,KAAK,CAAA;AACvE,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,IAAA,OAAO,OAAO,uBAAuB,CAAA;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,IAAA,CAAK,EAAA,EAAY,KAAA,EAAgD;AACrE,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,QAAA,EAAS;AACxC,IAAA,MAAM,SAAA,GAAYA,iBAAAA,CAAa,iBAAA,CAAkB,EAAA,EAAI,KAAK,CAAA;AAC1D,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,IAAA,OAAO,OAAO,UAAU,CAAA;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SAAS,KAAA,EAA6D;AAC1E,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,YAAA,EAAa;AAC5C,IAAA,MAAM,SAAA,GAAYA,iBAAAA,CAAa,qBAAA,CAAsB,KAAK,CAAA;AAC1D,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,IAAA,OAAO,OAAO,cAAc,CAAA;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,WAAA,CAAY,EAAA,EAAY,KAAA,EAAgE;AAC5F,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,eAAA,EAAgB;AAC/C,IAAA,MAAM,SAAA,GAAYA,iBAAAA,CAAa,wBAAA,CAAyB,EAAA,EAAI,KAAK,CAAA;AACjE,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,IAAA,OAAO,OAAO,iBAAiB,CAAA;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,WAAA,CAAY,EAAA,EAAY,qBAAA,EAAkE;AAC9F,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,eAAA,EAAgB;AAC/C,IAAA,MAAM,SAAA,GAAYA,iBAAAA,CAAa,wBAAA,CAAyB,EAAA,EAAI,qBAAqB,CAAA;AACjF,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,IAAA,OAAO,OAAO,iBAAiB,CAAA;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cAAA,CACJ,MAAA,EACA,KAAA,EACkC;AAClC,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,kBAAA,EAAmB;AAClD,IAAA,MAAM,SAAA,GAAYA,iBAAAA,CAAa,yBAAA,CAA0B,MAAA,EAAQ,KAAK,CAAA;AACtE,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,IAAA,OAAO,OAAO,kBAAkB,CAAA;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cAAA,CACJ,MAAA,EACA,KAAA,EACoC;AACpC,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,kBAAA,EAAmB;AAClD,IAAA,MAAM,SAAA,GAAYA,iBAAAA,CAAa,2BAAA,CAA4B,MAAA,EAAQ,KAAK,CAAA;AACxE,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,IAAA,OAAO,OAAO,oBAAoB,CAAA;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,WAAW,KAAA,EAAoD;AACnE,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,UAAA,EAAW;AAC1C,IAAA,MAAM,SAAA,GAAYA,iBAAAA,CAAa,mBAAA,CAAoB,KAAK,CAAA;AACxD,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,IAAA,OAAO,OAAO,YAAY,CAAA;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,iBAAA,CACJ,MAAA,EACA,OAAA,GAAwC,EAAC,EACQ;AACjD,IAAA,MAAM,EAAE,KAAA,EAAO,SAAA,EAAU,GAAIA,kBAAa,iBAAA,CAAkB;AAAA,MAC1D,MAAA;AAAA,MACA,iBAAiB,OAAA,CAAQ,eAAA;AAAA,MACzB,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,OAAO,OAAA,CAAQ;AAAA,KAChB,CAAA;AACD,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,OAAA,EAAS,qBAAqB,SAAS,CAAA;AAEjE,IAAA,MAAM,OAAO,MAAM,IAAA,CAAK,UAAU,GAAA,EAAK,OAAA,EAAS,SAAS,YAAY;AACnE,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,MAAA,OAAO,OAAO,mBAAmB,CAAA;AAAA,IACnC,CAAC,CAAA;AAED,IAAA,OAAO,IAAIC,gBAAW,IAAA,EAAM;AAAA,MAC1B,cAAA,EAAgB,OAAO,MAAA,KACrB,IAAA,CAAK,iBAAA,CAAkB,MAAA,EAAQ,EAAE,GAAG,OAAA,EAAS,KAAA,EAAO,MAAA,EAAQ;AAAA,KAC/D,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,iBAAA,CACJ,EAAA,EACA,OAAA,GAA4B,EAAC,EACe;AAC5C,IAAA,MAAM,MAAM,IAAA,CAAK,QAAA,CAAS,SAAS,mBAAA,EAAqB,EAAE,IAAI,CAAA;AAE9D,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,OAAA,EAAS,SAAS,YAAY;AACvD,MAAA,MAAM,EAAE,KAAA,EAAM,GAAID,iBAAAA,CAAa,gBAAA,EAAiB;AAChD,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,QAAQ,KAAA,EAAO,EAAE,IAAI,CAAA;AAC1D,MAAA,OAAQ,MAAA,CAAO,kBAAkB,CAAA,IAAoC,IAAA;AAAA,IACvE,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,iBAAiB,KAAA,EAAwE;AAC7F,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,oBAAA,EAAqB;AACpD,IAAA,MAAM,SAAA,GAAYA,iBAAAA,CAAa,6BAAA,CAA8B,KAAK,CAAA;AAClE,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,IAAA,OAAO,OAAO,sBAAsB,CAAA;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,mBACJ,KAAA,EACqC;AACrC,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,sBAAA,EAAuB;AACtD,IAAA,MAAM,SAAA,GAAYA,iBAAAA,CAAa,+BAAA,CAAgC,KAAK,CAAA;AACpE,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,IAAA,OAAO,OAAO,wBAAwB,CAAA;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,kBAAA,CACJ,EAAA,EACA,KAAA,EACqC;AACrC,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,sBAAA,EAAuB;AACtD,IAAA,MAAM,SAAA,GAAYA,iBAAAA,CAAa,+BAAA,CAAgC,EAAA,EAAI,KAAK,CAAA;AACxE,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,IAAA,OAAO,OAAO,wBAAwB,CAAA;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,oBAAoB,EAAA,EAAiD;AACzE,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,uBAAA,EAAwB;AACvD,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,QAAQ,KAAA,EAAO,EAAE,IAAI,CAAA;AAC1D,IAAA,OAAO,OAAO,yBAAyB,CAAA;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,sBAAsB,EAAA,EAAiD;AAC3E,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,yBAAA,EAA0B;AACzD,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,QAAQ,KAAA,EAAO,EAAE,IAAI,CAAA;AAC1D,IAAA,OAAO,OAAO,2BAA2B,CAAA;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAO,EAAA,EAA8B;AACzC,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,UAAA,EAAW;AAC1C,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,QAAQ,KAAA,EAAO,EAAE,IAAI,CAAA;AAC1D,IAAA,OAAO,OAAA,CAAQ,MAAA,CAAO,YAAY,CAAC,CAAA;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QAAQ,EAAA,EAA2B;AACvC,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,WAAA,EAAY;AAC3C,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,QAAQ,KAAA,EAAO,EAAE,IAAI,CAAA;AAC1D,IAAA,OAAO,OAAO,aAAa,CAAA;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QAAQ,EAAA,EAA2B;AACvC,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,WAAA,EAAY;AAC3C,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,QAAQ,KAAA,EAAO,EAAE,IAAI,CAAA;AAC1D,IAAA,OAAO,OAAO,aAAa,CAAA;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,UAAU,EAAA,EAA2B;AACzC,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,aAAA,EAAc;AAC7C,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,QAAQ,KAAA,EAAO,EAAE,IAAI,CAAA;AAC1D,IAAA,OAAO,OAAO,eAAe,CAAA;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAA,CAAQ,EAAA,EAAY,KAAA,EAAsD;AAC9E,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,WAAA,EAAY;AAC3C,IAAA,MAAM,SAAA,GAAYA,iBAAAA,CAAa,oBAAA,CAAqB,EAAA,EAAI,KAAK,CAAA;AAC7D,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,IAAA,OAAO,OAAO,aAAa,CAAA;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,oBAAA,CAAqB,EAAA,EAAY,KAAA,EAAqD;AAC1F,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,wBAAA,EAAyB;AACxD,IAAA,MAAM,SAAA,GAAYA,iBAAAA,CAAa,iCAAA,CAAkC,EAAA,EAAI,KAAK,CAAA;AAC1E,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,IAAA,OAAO,OAAO,0BAA0B,CAAA;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,kBAAA,CACJ,MAAA,EACA,SAAA,EACA,IAAA,EAC2B;AAC3B,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,sBAAA,EAAuB;AACtD,IAAA,MAAM,SAAA,GAAYA,iBAAAA,CAAa,yBAAA,CAA0B,MAAA,EAAQ,WAAW,IAAI,CAAA;AAChF,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,IAAA,OAAO,OAAO,wBAAwB,CAAA;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,kBAAA,CAAmB,MAAA,EAAgB,SAAA,EAAqC;AAC5E,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,sBAAA,EAAuB;AACtD,IAAA,MAAM,SAAA,GAAYA,iBAAAA,CAAa,yBAAA,CAA0B,MAAA,EAAQ,SAAS,CAAA;AAC1E,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,IAAA,OAAO,OAAA,CAAQ,MAAA,CAAO,wBAAwB,CAAC,CAAA;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,kBAAkB,KAAA,EAA6D;AACnF,IAAA,IAAA,CAAK,MAAA,CAAO,wBAAwB,yBAAyB,CAAA;AAE7D,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,qBAAA,EAAsB;AACrD,IAAA,MAAM,SAAA,GAAYA,iBAAAA,CAAa,8BAAA,CAA+B,KAAK,CAAA;AACnE,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,IAAA,OAAO,OAAO,uBAAuB,CAAA;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,kBAAkB,EAAA,EAA8B;AACpD,IAAA,IAAA,CAAK,MAAA,CAAO,wBAAwB,yBAAyB,CAAA;AAE7D,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,qBAAA,EAAsB;AACrD,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,QAAQ,KAAA,EAAO,EAAE,IAAI,CAAA;AAC1D,IAAA,OAAO,OAAA,CAAQ,MAAA,CAAO,uBAAuB,CAAC,CAAA;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,4BAA4B,EAAA,EAAsC;AACtE,IAAA,IAAA,CAAK,MAAA,CAAO,wBAAwB,mCAAmC,CAAA;AAEvE,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,+BAAA,EAAgC;AAC/D,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,QAAQ,KAAA,EAAO,EAAE,IAAI,CAAA;AAC1D,IAAA,OAAO,OAAO,iCAAiC,CAAA;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,0BACJ,KAAA,EACmC;AACnC,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,6BAAA,EAA8B;AAC7D,IAAA,MAAM,SAAA,GAAYA,iBAAAA,CAAa,sCAAA,CAAuC,KAAK,CAAA;AAC3E,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,IAAA,OAAO,OAAO,+BAA+B,CAAA;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,0BAAA,CAA2B,MAAA,EAAgB,gBAAA,EAA4C;AAC3F,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,8BAAA,EAA+B;AAC9D,IAAA,MAAM,SAAA,GAAYA,iBAAAA,CAAa,uCAAA,CAAwC,MAAA,EAAQ,gBAAgB,CAAA;AAC/F,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,IAAA,OAAO,OAAA,CAAQ,MAAA,CAAO,gCAAgC,CAAC,CAAA;AAAA,EACzD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cAAc,KAAA,EAAkE;AACpF,IAAA,IAAA,CAAK,MAAA,CAAO,wBAAwB,qBAAqB,CAAA;AAEzD,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,iBAAA,EAAkB;AACjD,IAAA,MAAM,SAAA,GAAYA,iBAAAA,CAAa,0BAAA,CAA2B,KAAK,CAAA;AAC/D,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,IAAA,OAAO,OAAO,mBAAmB,CAAA;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,YAAY,EAAA,EAA8B;AAC9C,IAAA,IAAA,CAAK,MAAA,CAAO,wBAAwB,mBAAmB,CAAA;AAEvD,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,eAAA,EAAgB;AAC/C,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,QAAQ,KAAA,EAAO,EAAE,IAAI,CAAA;AAC1D,IAAA,OAAO,OAAA,CAAQ,MAAA,CAAO,iBAAiB,CAAC,CAAA;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,eAAe,OAAA,EAAkE;AACrF,IAAA,IAAI,OAAA,CAAQ,OAAA,CAAQ,MAAA,KAAW,CAAA,SAAU,EAAC;AAE1C,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,gBAAA,CAAiB,OAAA,CAAQ,aAAa,CAAA;AACjE,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,WAAA,CAAY,OAAA,CAAQ,OAAO,CAAA;AAChD,IAAA,IAAA,CAAK,cAAA,CAAe,eAAe,OAAO,CAAA;AAE1C,IAAA,MAAM,cAAc,OAAA,CAAQ,OAAA,CAAQ,IAAI,CAAC,KAAA,KAAU,MAAM,UAAU,CAAA;AACnE,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,OAAA,EAAS,gBAAA,EAAkB;AAAA,MACnD,aAAA;AAAA,MACA,OAAA;AAAA,MACA,YAAY,OAAA,CAAQ,UAAA;AAAA,MACpB;AAAA,KACD,CAAA;AAED,IAAA,MAAM,UAAU,MAAM,IAAA,CAAK,UAAU,GAAA,EAAK,OAAA,EAAS,SAAS,YAAY;AACtE,MAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,wBAAA,EAAyB;AACxD,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,QAAQ,KAAA,EAAO;AAAA,QAClD,aAAA;AAAA,QACA,OAAA;AAAA,QACA,YAAY,OAAA,CAAQ,UAAA;AAAA,QACpB;AAAA,OACD,CAAA;AACD,MAAA,OAAO,OAAO,0BAA0B,CAAA;AAAA,IAC1C,CAAC,CAAA;AAED,IAAA,MAAM,mBAAA,GAAsB,uBAAA;AAAA,MAC1B,OAAA;AAAA,MACA,WAAA;AAAA,MACA,OAAA,CAAQ;AAAA,KACV;AACA,IAAA,OAAO,OAAA,CAAQ,OAAA,CAAQ,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,MACrC,GAAG,KAAA;AAAA,MACH,MAAA,EAAQ,mBAAA,CAAoB,GAAA,CAAI,KAAA,CAAM,UAAU,CAAA,IAAK;AAAA,KACvD,CAAE,CAAA;AAAA,EACJ;AACF;AAEA,SAAS,uBAAA,CACP,OAAA,EACA,WAAA,EACA,eAAA,EAC4B;AAC5B,EAAA,MAAM,SAAA,GAAY,IAAI,GAAA,CAAI,WAAW,CAAA;AACrC,EAAA,MAAM,mBAAA,uBAA0B,GAAA,EAA2B;AAE3D,EAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,IAAA,MAAM,aAAa,eAAA,GACf,MAAA,CAAO,KAAK,eAAe,CAAA,GAC3B,OAAO,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA,CAAE,IAAA,CAAK,CAAC,KAAA,KAAU,SAAA,CAAU,IAAI,MAAA,CAAO,KAAK,CAAC,CAAC,CAAA;AAE3E,IAAA,IAAI,UAAA,KAAe,MAAA,IAAa,UAAA,KAAe,IAAA,EAAM;AAErD,IAAA,MAAM,GAAA,GAAM,OAAO,UAAU,CAAA;AAC7B,IAAA,IAAI,CAAC,SAAA,CAAU,GAAA,CAAI,GAAG,CAAA,EAAG;AAEzB,IAAA,mBAAA,CAAoB,GAAA,CAAI,KAAK,MAAM,CAAA;AACnC,IAAA,SAAA,CAAU,OAAO,GAAG,CAAA;AAAA,EACtB;AAEA,EAAA,OAAO,mBAAA;AACT;ACx3BO,IAAM,eAAA,GAAN,cAA8B,YAAA,CAAa;AAAA,EAChD,WAAA,CAAY,YAAwB,MAAA,EAAuB;AACzD,IAAA,KAAA,CAAM,YAAY,MAAM,CAAA;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,KAAK,OAAA,EAAiE;AAC1E,IAAA,MAAM,MAAA,GAASE,kBAAA,CAAc,OAAA,CAAQ,MAAM,CAAA;AAC3C,IAAA,MAAM,EAAE,KAAA,EAAO,SAAA,EAAU,GAAIF,kBAAa,kBAAA,CAAmB;AAAA,MAC3D,WAAW,OAAA,CAAQ,SAAA;AAAA,MACnB,MAAA;AAAA,MACA,SAAS,OAAA,CAAQ,OAAA;AAAA,MACjB,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,MAAM,OAAA,CAAQ,IAAA;AAAA,MACd,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,gBAAgB,OAAA,CAAQ;AAAA,KACzB,CAAA;AACD,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,SAAA,EAAW,QAAQ,SAAS,CAAA;AAEtD,IAAA,MAAM,OAAO,MAAM,IAAA,CAAK,UAAU,GAAA,EAAK,SAAA,EAAW,SAAS,YAAY;AACrE,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,MAAA,OAAO,OAAO,gBAAgB,CAAA;AAAA,IAChC,CAAC,CAAA;AAED,IAAA,OAAO,IAAIC,gBAAW,IAAA,EAAM;AAAA,MAC1B,cAAA,EAAgB,OAAO,MAAA,KAAmB,IAAA,CAAK,IAAA,CAAK,EAAE,GAAG,OAAA,EAAS,KAAA,EAAO,MAAA,EAAQ;AAAA,KAClF,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,uBACJ,OAAA,EAC+B;AAC/B,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,SAAA,EAAW,wBAAA,EAA0B;AAAA,MAC7D,WAAW,OAAA,CAAQ,SAAA;AAAA,MACnB,YAAY,OAAA,CAAQ,UAAA;AAAA,MACpB,cAAA,EAAgB,QAAQ,cAAA,IAAkB;AAAA,KAC3C,CAAA;AAED,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,SAAA,EAAW,SAAS,YAAY;AACzD,MAAA,MAAM,EAAE,KAAA,EAAO,SAAA,EAAU,GAAID,kBAAa,aAAA,CAAc;AAAA,QACtD,WAAW,OAAA,CAAQ,SAAA;AAAA,QACnB,YAAY,OAAA,CAAQ,UAAA;AAAA,QACpB,gBAAgB,OAAA,CAAQ;AAAA,OACzB,CAAA;AACD,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,MAAA,OAAQ,MAAA,CAAO,eAAe,CAAA,IAAuB,IAAA;AAAA,IACvD,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,YAAY,KAAA,EAAwE;AACxF,IAAA,IAAA,CAAK,MAAA,CAAO,wBAAwB,qBAAqB,CAAA;AAEzD,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,oBAAA,EAAqB;AACpD,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA;AAAA,MACnC,KAAA;AAAA,MACAA,iBAAAA,CAAa,8BAA8B,KAAK;AAAA,KAClD;AACA,IAAA,OAAO,OAAO,sBAAsB,CAAA;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,YAAY,KAAA,EAAmE;AACnF,IAAA,IAAA,CAAK,MAAA,CAAO,wBAAwB,qBAAqB,CAAA;AAEzD,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,oBAAA,EAAqB;AACpD,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA;AAAA,MACnC,KAAA;AAAA,MACAA,iBAAAA,CAAa,8BAA8B,KAAK;AAAA,KAClD;AACA,IAAA,OAAO,OAAO,sBAAsB,CAAA;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,YAAA,CACJ,EAAA,EACA,OAAA,GAA4B,EAAC,EACW;AACxC,IAAA,MAAM,MAAM,IAAA,CAAK,QAAA,CAAS,WAAW,cAAA,EAAgB,EAAE,IAAI,CAAA;AAE3D,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,SAAA,EAAW,SAAS,YAAY;AACzD,MAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,sBAAA,EAAuB;AACtD,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,QAAQ,KAAA,EAAO,EAAE,IAAI,CAAA;AAC1D,MAAA,OAAQ,MAAA,CAAO,wBAAwB,CAAA,IAAgC,IAAA;AAAA,IACzE,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cAAA,CACJ,WAAA,EACA,OAAA,GAAuC,EAAC,EACK;AAC7C,IAAA,MAAM,EAAE,KAAA,EAAO,SAAA,EAAU,GAAIA,kBAAa,uBAAA,CAAwB;AAAA,MAChE,WAAA;AAAA,MACA,WAAW,OAAA,CAAQ,SAAA;AAAA,MACnB,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,OAAO,OAAA,CAAQ;AAAA,KAChB,CAAA;AACD,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,SAAA,EAAW,kBAAkB,SAAS,CAAA;AAEhE,IAAA,MAAM,OAAO,MAAM,IAAA,CAAK,UAAU,GAAA,EAAK,SAAA,EAAW,SAAS,YAAY;AACrE,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,MAAA,OAAO,OAAO,yBAAyB,CAAA;AAAA,IACzC,CAAC,CAAA;AAED,IAAA,OAAO,IAAIC,gBAAW,IAAA,EAAM;AAAA,MAC1B,cAAA,EAAgB,OAAO,MAAA,KACrB,IAAA,CAAK,cAAA,CAAe,WAAA,EAAa,EAAE,GAAG,OAAA,EAAS,KAAA,EAAO,MAAA,EAAQ;AAAA,KACjE,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,gBAAA,CACJ,EAAA,EACA,OAAA,GAAyC,EAAC,EACT;AACjC,IAAA,MAAM,UAAA,GAAa,QAAQ,UAAA,IAAc,GAAA;AACzC,IAAA,MAAM,SAAA,GAAY,QAAQ,SAAA,IAAa,GAAA;AACvC,IAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAE3B,IAAA,OAAO,IAAA,EAAM;AACX,MAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,YAAA,CAAa,IAAI,EAAE,KAAA,EAAO,OAAO,CAAA;AACxD,MAAA,IAAI,CAAC,GAAA,EAAK,MAAM,IAAI,KAAA,CAAM,CAAA,YAAA,EAAe,EAAE,CAAA,eAAA,CAAiB,CAAA;AAC5D,MAAA,IAAI,IAAI,MAAA,KAAW,WAAA,IAAe,GAAA,CAAI,MAAA,KAAW,UAAU,OAAO,GAAA;AAClE,MAAA,IAAI,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA,IAAa,SAAA,EAAW;AACvC,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kCAAA,EAAqC,EAAE,CAAA,CAAA,CAAG,CAAA;AAAA,MAC5D;AACA,MAAA,MAAM,IAAI,OAAA,CAAQ,CAAC,YAAY,UAAA,CAAW,OAAA,EAAS,UAAU,CAAC,CAAA;AAAA,IAChE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkDA,MAAM,OAAO,OAAA,EAAmE;AAC9E,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,gBAAA,CAAiB,OAAA,CAAQ,aAAa,CAAA;AACjE,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,WAAA,CAAY,OAAA,CAAQ,OAAO,CAAA;AAEhD,IAAA,IAAA,CAAK,cAAA,CAAe,eAAe,OAAO,CAAA;AAG1C,IAAA,MAAM,MAAA,GAASC,kBAAA,CAAc,OAAA,CAAQ,MAAM,CAAA;AAE3C,IAAA,MAAM,EAAE,KAAA,EAAO,SAAA,EAAU,GAAIF,kBAAa,aAAA,CAAc;AAAA,MACtD,aAAA;AAAA,MACA,OAAA;AAAA,MACA,YAAY,OAAA,CAAQ,UAAA;AAAA,MACpB,MAAA;AAAA,MACA,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,SAAS,OAAA,CAAQ,OAAA;AAAA,MACjB,cAAc,OAAA,CAAQ,YAAA;AAAA,MACtB,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,gBAAgB,OAAA,CAAQ,cAAA;AAAA,MACxB,gBAAgB,OAAA,CAAQ;AAAA,KACzB,CAAA;AAED,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,SAAA,EAAW,QAAA,EAAU;AAAA,MAC7C,GAAG,SAAA;AAAA,MACH,cAAA,EAAgB,QAAQ,cAAA,IAAkB;AAAA,KAC3C,CAAA;AAED,IAAA,MAAM,OAAO,MAAM,IAAA,CAAK,UAAU,GAAA,EAAK,SAAA,EAAW,SAAS,YAAY;AACrE,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,MAAA,OAAO,OAAO,eAAe,CAAA;AAAA,IAC/B,CAAC,CAAA;AAED,IAAA,OAAO,IAAIC,gBAAW,IAAA,EAAM;AAAA,MAC1B,cAAA,EAAgB,OAAO,MAAA,KAAmB;AACxC,QAAA,OAAO,KAAK,MAAA,CAAO,EAAE,GAAG,OAAA,EAAS,KAAA,EAAO,QAAQ,CAAA;AAAA,MAClD;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,GAAA,CAAI,EAAA,EAAY,OAAA,GAA4B,EAAC,EAAkC;AACnF,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,SAAA,EAAW,KAAA,EAAO;AAAA,MAC1C,EAAA;AAAA,MACA,cAAA,EAAgB,QAAQ,cAAA,IAAkB;AAAA,KAC3C,CAAA;AAED,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,SAAA,EAAW,SAAS,YAAY;AACzD,MAAA,MAAM,EAAE,OAAM,GAAID,iBAAAA,CAAa,gBAAgB,EAAE,cAAA,EAAgB,OAAA,CAAQ,cAAA,EAAgB,CAAA;AACzF,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,QAAQ,KAAA,EAAO,EAAE,IAAI,CAAA;AAC1D,MAAA,OAAQ,MAAA,CAAO,aAAa,CAAA,IAAuB,IAAA;AAAA,IACrD,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBA,MAAM,gBAAgB,OAAA,EAAsE;AAC1F,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,gBAAA,CAAiB,OAAA,CAAQ,aAAa,CAAA;AACjE,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,WAAA,CAAY,OAAA,CAAQ,OAAO,CAAA;AAEhD,IAAA,IAAA,CAAK,cAAA,CAAe,eAAe,OAAO,CAAA;AAE1C,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,SAAA,EAAW,iBAAA,EAAmB;AAAA,MACtD,aAAA;AAAA,MACA,OAAA;AAAA,MACA,YAAY,OAAA,CAAQ,UAAA;AAAA,MACpB,YAAY,OAAA,CAAQ,UAAA;AAAA,MACpB,cAAA,EAAgB,QAAQ,cAAA,IAAkB;AAAA,KAC3C,CAAA;AAED,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,SAAA,EAAW,SAAS,YAAY;AACzD,MAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,uBAAA,CAAwB;AAAA,QACrD,gBAAgB,OAAA,CAAQ;AAAA,OACzB,CAAA;AACD,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,QAAQ,KAAA,EAAO;AAAA,QAClD,aAAA;AAAA,QACA,OAAA;AAAA,QACA,YAAY,OAAA,CAAQ,UAAA;AAAA,QACpB,YAAY,OAAA,CAAQ;AAAA,OACrB,CAAA;AACD,MAAA,OAAQ,MAAA,CAAO,yBAAyB,CAAA,IAAuB,IAAA;AAAA,IACjE,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBA,MAAM,oBAAoB,OAAA,EAAkE;AAC1F,IAAA,IAAI,OAAA,CAAQ,WAAA,CAAY,MAAA,KAAW,CAAA,SAAU,EAAC;AAE9C,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,gBAAA,CAAiB,OAAA,CAAQ,aAAa,CAAA;AACjE,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,WAAA,CAAY,OAAA,CAAQ,OAAO,CAAA;AAEhD,IAAA,IAAA,CAAK,cAAA,CAAe,eAAe,OAAO,CAAA;AAE1C,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,SAAA,EAAW,qBAAA,EAAuB;AAAA,MAC1D,aAAA;AAAA,MACA,OAAA;AAAA,MACA,YAAY,OAAA,CAAQ,UAAA;AAAA,MACpB,aAAa,OAAA,CAAQ,WAAA;AAAA,MACrB,cAAA,EAAgB,QAAQ,cAAA,IAAkB;AAAA,KAC3C,CAAA;AAED,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,SAAA,EAAW,SAAS,YAAY;AACzD,MAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,wBAAA,CAAyB;AAAA,QACtD,gBAAgB,OAAA,CAAQ;AAAA,OACzB,CAAA;AACD,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,QAAQ,KAAA,EAAO;AAAA,QAClD,aAAA;AAAA,QACA,OAAA;AAAA,QACA,YAAY,OAAA,CAAQ,UAAA;AAAA,QACpB,aAAa,OAAA,CAAQ;AAAA,OACtB,CAAA;AACD,MAAA,OAAQ,MAAA,CAAO,0BAA0B,CAAA,IAAyB,EAAC;AAAA,IACrE,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,OAAA,CAAQ,GAAA,EAAe,OAAA,GAA4B,EAAC,EAA6B;AACrF,IAAA,IAAI,GAAA,CAAI,MAAA,KAAW,CAAA,EAAG,OAAO,EAAC;AAE9B,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,SAAA,EAAW,SAAA,EAAW;AAAA,MAC9C,GAAA;AAAA,MACA,cAAA,EAAgB,QAAQ,cAAA,IAAkB;AAAA,KAC3C,CAAA;AAED,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,SAAA,EAAW,SAAS,YAAY;AACzD,MAAA,MAAM,EAAE,OAAM,GAAIA,iBAAAA,CAAa,aAAa,EAAE,cAAA,EAAgB,OAAA,CAAQ,cAAA,EAAgB,CAAA;AACtF,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,QAAQ,KAAA,EAAO,EAAE,KAAK,CAAA;AAC3D,MAAA,OAAQ,MAAA,CAAO,cAAc,CAAA,IAAyB,EAAC;AAAA,IACzD,CAAC,CAAA;AAAA,EACH;AACF;AC/cO,IAAM,aAAA,GAAN,cAA4B,YAAA,CAAa;AAAA,EAC9C,WAAA,CAAY,YAAwB,MAAA,EAAuB;AACzD,IAAA,KAAA,CAAM,YAAY,MAAM,CAAA;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,QAAA,CAAS,OAAA,GAAmC,EAAC,EAAiC;AAClF,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,gBAAA,CAAiB,OAAA,CAAQ,aAAa,CAAA;AACjE,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,WAAA,CAAY,OAAA,CAAQ,OAAO,CAAA;AAEhD,IAAA,IAAA,CAAK,cAAA,CAAe,eAAe,OAAO,CAAA;AAE1C,IAAA,MAAM,EAAE,KAAA,EAAO,SAAA,EAAU,GAAIA,kBAAa,cAAA,CAAe;AAAA,MACvD,aAAA;AAAA,MACA,OAAA;AAAA,MACA,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,OAAA,EAAS,OAAA;AAAA,MACT,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,OAAO,OAAA,CAAQ;AAAA,KAChB,CAAA;AAED,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,OAAA,EAAS,YAAY,SAAS,CAAA;AACxD,IAAA,MAAM,OAAO,MAAM,IAAA,CAAK,UAAU,GAAA,EAAK,UAAA,EAAY,SAAS,YAAY;AACtE,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,MAAA,OAAO,OAAO,gBAAgB,CAAA;AAAA,IAChC,CAAC,CAAA;AAED,IAAA,OAAO,IAAIC,gBAAW,IAAA,EAAM;AAAA,MAC1B,cAAA,EAAgB,OAAO,MAAA,KAAmB,IAAA,CAAK,QAAA,CAAS,EAAE,GAAG,OAAA,EAAS,KAAA,EAAO,MAAA,EAAQ;AAAA,KACtF,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,IAAA,CAAK,OAAA,GAA4B,EAAC,EAAuC;AAC7E,IAAA,OAAO,IAAA,CAAK,iBAAA,CAAkB,OAAA,EAAS,OAAO,CAAA;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,OAAA,CAAQ,OAAA,GAA8B,EAAC,EAAuC;AAClF,IAAA,OAAO,IAAA,CAAK,iBAAA,CAAkB,OAAA,CAAQ,UAAA,IAAc,WAAW,OAAO,CAAA;AAAA,EACxE;AAAA,EAEA,MAAc,iBAAA,CACZ,iBAAA,EACA,OAAA,EACoC;AACpC,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,gBAAA,CAAiB,OAAA,CAAQ,aAAa,CAAA;AACjE,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,WAAA,CAAY,OAAA,CAAQ,OAAO,CAAA;AAChD,IAAA,MAAM,UAAA,GAAa,QAAQ,UAAA,IAAc,iBAAA;AAEzC,IAAA,IAAA,CAAK,cAAA,CAAe,eAAe,OAAO,CAAA;AAE1C,IAAA,MAAM,MAAA,GAASC,kBAAAA,CAAc,OAAA,CAAQ,MAAM,CAAA;AAC3C,IAAA,MAAM,EAAE,KAAA,EAAO,SAAA,EAAU,GAAIF,kBAAa,aAAA,CAAc;AAAA,MACtD,aAAA;AAAA,MACA,OAAA;AAAA,MACA,UAAA;AAAA,MACA,MAAA;AAAA,MACA,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,SAAS,OAAA,CAAQ,OAAA;AAAA,MACjB,cAAc,OAAA,CAAQ,YAAA;AAAA,MACtB,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,gBAAgB,OAAA,CAAQ;AAAA,KACzB,CAAA;AAED,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,OAAA,EAAS,WAAW,SAAS,CAAA;AACvD,IAAA,MAAM,OAAO,MAAM,IAAA,CAAK,UAAU,GAAA,EAAK,SAAA,EAAW,SAAS,YAAY;AACrE,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,MAAA,OAAO,OAAO,eAAe,CAAA;AAAA,IAC/B,CAAC,CAAA;AAED,IAAA,OAAO,IAAIC,gBAAW,IAAA,EAAM;AAAA,MAC1B,cAAA,EAAgB,OAAO,MAAA,KACrB,IAAA,CAAK,iBAAA,CAAkB,iBAAA,EAAmB,EAAE,GAAG,OAAA,EAAS,KAAA,EAAO,MAAA,EAAQ;AAAA,KAC1E,CAAA;AAAA,EACH;AACF;ACrFO,IAAM,gBAAA,GAAN,cAA+B,YAAA,CAAa;AAAA,EACjD,WAAA,CAAY,YAAwB,MAAA,EAAuB;AACzD,IAAA,KAAA,CAAM,YAAY,MAAM,CAAA;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,IAAA,CAAK,MAAA,EAAgB,OAAA,GAA+B,EAAC,EAAiC;AAC1F,IAAA,MAAM,EAAE,KAAA,EAAO,SAAA,EAAU,GAAID,kBAAa,QAAA,CAAS;AAAA,MACjD,MAAA;AAAA,MACA,iBAAiB,OAAA,CAAQ,eAAA;AAAA,MACzB,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,OAAO,OAAA,CAAQ;AAAA,KAChB,CAAA;AACD,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,UAAA,EAAY,QAAQ,SAAS,CAAA;AAEvD,IAAA,MAAM,OAAO,MAAM,IAAA,CAAK,UAAU,GAAA,EAAK,UAAA,EAAY,SAAS,YAAY;AACtE,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,MAAA,OAAO,OAAO,UAAU,CAAA;AAAA,IAC1B,CAAC,CAAA;AAED,IAAA,OAAO,IAAIC,gBAAW,IAAA,EAAM;AAAA,MAC1B,cAAA,EAAgB,OAAO,MAAA,KAAmB,IAAA,CAAK,IAAA,CAAK,MAAA,EAAQ,EAAE,GAAG,OAAA,EAAS,KAAA,EAAO,MAAA,EAAQ;AAAA,KAC1F,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,UAAA,CACJ,MAAA,EACA,OAAA,GAAqC,EAAC,EACR;AAC9B,IAAA,MAAM,EAAE,KAAA,EAAO,SAAA,EAAU,GAAID,kBAAa,cAAA,CAAe;AAAA,MACvD,MAAA;AAAA,MACA,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,OAAO,OAAA,CAAQ;AAAA,KAChB,CAAA;AACD,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,UAAA,EAAY,cAAc,SAAS,CAAA;AAE7D,IAAA,MAAM,OAAO,MAAM,IAAA,CAAK,UAAU,GAAA,EAAK,UAAA,EAAY,SAAS,YAAY;AACtE,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,MAAA,OAAO,OAAO,gBAAgB,CAAA;AAAA,IAChC,CAAC,CAAA;AAED,IAAA,OAAO,IAAIC,gBAAW,IAAA,EAAM;AAAA,MAC1B,cAAA,EAAgB,OAAO,MAAA,KACrB,IAAA,CAAK,UAAA,CAAW,MAAA,EAAQ,EAAE,GAAG,OAAA,EAAS,KAAA,EAAO,MAAA,EAAQ;AAAA,KACxD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,GAAA,CAAI,EAAA,EAAY,OAAA,GAA6B,EAAC,EAA4B;AAC9E,IAAA,MAAM,SAAA,GAAY,EAAE,EAAA,EAAG;AACvB,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,UAAA,EAAY,OAAO,SAAS,CAAA;AAEtD,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,UAAA,EAAY,SAAS,YAAY;AAC1D,MAAA,MAAM,EAAE,OAAO,SAAA,EAAAE,UAAAA,KAAcH,iBAAAA,CAAa,OAAA,CAAQ,EAAE,EAAA,EAAI,CAAA;AACxD,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAOG,UAAS,CAAA;AAC7D,MAAA,OAAQ,MAAA,CAAO,SAAS,CAAA,IAAiB,IAAA;AAAA,IAC3C,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SAAS,OAAA,EAA0D;AACvE,IAAA,MAAM,YAAY,EAAE,MAAA,EAAQ,QAAQ,MAAA,EAAQ,GAAA,EAAK,QAAQ,GAAA,EAAI;AAC7D,IAAA,MAAMC,SAAAA,GAAW,IAAA,CAAK,QAAA,CAAS,UAAA,EAAY,YAAY,SAAS,CAAA;AAEhE,IAAA,OAAO,IAAA,CAAK,SAAA,CAAUA,SAAAA,EAAU,UAAA,EAAY,SAAS,YAAY;AAC/D,MAAA,MAAM,EAAE,KAAA,EAAO,SAAA,EAAAD,UAAAA,EAAU,GAAIH,kBAAa,OAAA,CAAQ;AAAA,QAChD,QAAQ,OAAA,CAAQ,MAAA;AAAA,QAChB,KAAK,OAAA,CAAQ;AAAA,OACd,CAAA;AACD,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAOG,UAAS,CAAA;AAC7D,MAAA,OAAQ,MAAA,CAAO,SAAS,CAAA,IAAiB,IAAA;AAAA,IAC3C,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QAAA,CACJ,SAAA,EACA,OAAA,GAAsC,EAAC,EACF;AACrC,IAAA,MAAM,EAAE,KAAA,EAAO,SAAA,EAAU,GAAIH,kBAAa,eAAA,CAAgB;AAAA,MACxD,SAAA;AAAA,MACA,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,OAAO,OAAA,CAAQ;AAAA,KAChB,CAAA;AACD,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,UAAA,EAAY,YAAY,SAAS,CAAA;AAE3D,IAAA,MAAM,OAAO,MAAM,IAAA,CAAK,UAAU,GAAA,EAAK,UAAA,EAAY,SAAS,YAAY;AACtE,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,MAAA,OAAO,OAAO,iBAAiB,CAAA;AAAA,IACjC,CAAC,CAAA;AAED,IAAA,OAAO,IAAIC,gBAAW,IAAA,EAAM;AAAA,MAC1B,cAAA,EAAgB,OAAO,MAAA,KACrB,IAAA,CAAK,QAAA,CAAS,SAAA,EAAW,EAAE,GAAG,OAAA,EAAS,KAAA,EAAO,MAAA,EAAQ;AAAA,KACzD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,UAAA,CAAW,EAAA,EAAY,OAAA,GAA6B,EAAC,EAAmC;AAC5F,IAAA,MAAM,MAAM,IAAA,CAAK,QAAA,CAAS,YAAY,YAAA,EAAc,EAAE,IAAI,CAAA;AAE1D,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,UAAA,EAAY,SAAS,YAAY;AAC1D,MAAA,MAAM,EAAE,KAAA,EAAM,GAAID,iBAAAA,CAAa,cAAA,EAAe;AAC9C,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,QAAQ,KAAA,EAAO,EAAE,IAAI,CAAA;AAC1D,MAAA,OAAQ,MAAA,CAAO,gBAAgB,CAAA,IAAwB,IAAA;AAAA,IACzD,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,eAAA,CACJ,MAAA,EACA,UAAA,EACA,OAAA,GAAyC,EAAC,EACD;AACzC,IAAA,MAAM,YAAYA,iBAAAA,CAAa,+BAAA;AAAA,MAC7B,MAAA;AAAA,MACA,UAAA;AAAA,MACA,OAAA,CAAQ;AAAA,KACV;AACA,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,UAAA,EAAY,mBAAmB,SAAS,CAAA;AAElE,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,UAAA,EAAY,SAAS,YAAY;AAC1D,MAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,sBAAA,EAAuB;AACtD,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,MAAA,OAAQ,MAAA,CAAO,wBAAwB,CAAA,IAAiC,IAAA;AAAA,IAC1E,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,mBAAA,CACJ,MAAA,EACA,UAAA,EACA,OAAA,GAAyC,EAAC,EACL;AACrC,IAAA,MAAM,YAAYA,iBAAAA,CAAa,+BAAA;AAAA,MAC7B,MAAA;AAAA,MACA,UAAA;AAAA,MACA,OAAA,CAAQ;AAAA,KACV;AACA,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,UAAA,EAAY,uBAAuB,SAAS,CAAA;AAEtE,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,UAAA,EAAY,SAAS,YAAY;AAC1D,MAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,mBAAA,EAAoB;AACnD,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,MAAA,OAAQ,MAAA,CAAO,qBAAqB,CAAA,IAA6B,IAAA;AAAA,IACnE,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,aAAA,CACJ,SAAA,EACA,KAAA,EAC2C;AAC3C,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,gCAAA,EAAiC;AAChE,IAAA,MAAM,SAAA,GAAYA,iBAAAA,CAAa,yCAAA,CAA0C,SAAA,EAAW,KAAK,CAAA;AACzF,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,IAAA,OAAO,OAAO,kCAAkC,CAAA;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,gBAAA,CACJ,gBAAA,EACA,OAAA,GAA0C,EAAC,EACT;AAClC,IAAA,MAAM,EAAE,KAAA,EAAO,SAAA,EAAU,GAAIA,kBAAa,uBAAA,CAAwB;AAAA,MAChE,gBAAA;AAAA,MACA,OAAO,OAAA,CAAQ;AAAA,KAChB,CAAA;AACD,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,UAAA,EAAY,oBAAoB,SAAS,CAAA;AAEnE,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,UAAA,EAAY,SAAS,YAAY;AAC1D,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,MAAA,OAAO,OAAO,yBAAyB,CAAA;AAAA,IACzC,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAO,KAAA,EAA6C;AACxD,IAAA,IAAA,CAAK,MAAA,CAAO,wBAAwB,iBAAiB,CAAA;AAErD,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,aAAA,EAAc;AAC7C,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,QAAQ,KAAA,EAAOA,iBAAAA,CAAa,sBAAA,CAAuB,KAAK,CAAC,CAAA;AAC9F,IAAA,OAAO,OAAO,eAAe,CAAA;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,MAAA,CAAO,EAAA,EAAY,KAAA,EAA6C;AACpE,IAAA,IAAA,CAAK,MAAA,CAAO,wBAAwB,iBAAiB,CAAA;AAErD,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,aAAA,EAAc;AAC7C,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA;AAAA,MACnC,KAAA;AAAA,MACAA,iBAAAA,CAAa,sBAAA,CAAuB,EAAA,EAAI,KAAK;AAAA,KAC/C;AACA,IAAA,OAAO,OAAO,eAAe,CAAA;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,WAAA,CACJ,SAAA,EACA,KAAA,EACyB;AACzB,IAAA,IAAA,CAAK,MAAA,CAAO,wBAAwB,sBAAsB,CAAA;AAE1D,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,yBAAA,EAA0B;AACzD,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA;AAAA,MACnC,KAAA;AAAA,MACAA,iBAAAA,CAAa,kCAAA,CAAmC,SAAA,EAAW,KAAK;AAAA,KAClE;AACA,IAAA,OAAO,OAAO,2BAA2B,CAAA;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,4BAAA,CACJ,SAAA,EACA,KAAA,EACyB;AACzB,IAAA,IAAA,CAAK,MAAA,CAAO,wBAAwB,uCAAuC,CAAA;AAE3E,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,0CAAA,EAA2C;AAC1E,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA;AAAA,MACnC,KAAA;AAAA,MACAA,iBAAAA,CAAa,mDAAA,CAAoD,SAAA,EAAW,KAAK;AAAA,KACnF;AACA,IAAA,OAAO,OAAO,4CAA4C,CAAA;AAAA,EAC5D;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,WAAA,CAAY,EAAA,EAAY,KAAA,EAAgE;AAC5F,IAAA,IAAA,CAAK,MAAA,CAAO,wBAAwB,sBAAsB,CAAA;AAE1D,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,yBAAA,EAA0B;AACzD,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA;AAAA,MACnC,KAAA;AAAA,MACAA,iBAAAA,CAAa,kCAAA,CAAmC,EAAA,EAAI,KAAK;AAAA,KAC3D;AACA,IAAA,OAAO,OAAO,2BAA2B,CAAA;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cAAA,CAAe,EAAA,EAAY,KAAA,EAA6D;AAC5F,IAAA,IAAA,CAAK,MAAA,CAAO,wBAAwB,yBAAyB,CAAA;AAE7D,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,qBAAA,EAAsB;AACrD,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA;AAAA,MACnC,KAAA;AAAA,MACAA,iBAAAA,CAAa,8BAAA,CAA+B,EAAA,EAAI,KAAK;AAAA,KACvD;AACA,IAAA,OAAO,OAAO,uBAAuB,CAAA;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,gBAAgB,EAAA,EAAqC;AACzD,IAAA,IAAA,CAAK,MAAA,CAAO,wBAAwB,0BAA0B,CAAA;AAE9D,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,sBAAA,EAAuB;AACtD,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,QAAQ,KAAA,EAAO,EAAE,IAAI,CAAA;AAC1D,IAAA,OAAO,OAAO,wBAAwB,CAAA;AAAA,EACxC;AACF;AC/TO,IAAM,qBAAA,GAAN,cAAoC,YAAA,CAAa;AAAA,EACtD,WAAA,CAAY,YAAwB,MAAA,EAAuB;AACzD,IAAA,KAAA,CAAM,YAAY,MAAM,CAAA;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,KAAK,OAAA,EAAoF;AAC7F,IAAA,MAAM,EAAE,KAAA,EAAO,SAAA,EAAU,GAAIA,kBAAa,iBAAA,CAAkB;AAAA,MAC1D,aAAa,OAAA,CAAQ,WAAA;AAAA,MACrB,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,iBAAiB,OAAA,CAAQ,eAAA;AAAA,MACzB,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,OAAO,OAAA,CAAQ;AAAA,KAChB,CAAA;AACD,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,eAAA,EAAiB,QAAQ,SAAS,CAAA;AAE5D,IAAA,MAAM,OAAO,MAAM,IAAA,CAAK,UAAU,GAAA,EAAK,eAAA,EAAiB,SAAS,YAAY;AAC3E,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,MAAA,OAAO,OAAO,mBAAmB,CAAA;AAAA,IACnC,CAAC,CAAA;AAED,IAAA,OAAO,IAAIC,gBAAW,IAAA,EAAM;AAAA,MAC1B,cAAA,EAAgB,OAAO,MAAA,KAAmB,IAAA,CAAK,IAAA,CAAK,EAAE,GAAG,OAAA,EAAS,KAAA,EAAO,MAAA,EAAQ;AAAA,KAClF,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,GAAA,CACJ,EAAA,EACA,OAAA,GAAkC,EAAC,EACS;AAC5C,IAAA,MAAM,MAAM,IAAA,CAAK,QAAA,CAAS,iBAAiB,KAAA,EAAO,EAAE,IAAI,CAAA;AAExD,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,eAAA,EAAiB,SAAS,YAAY;AAC/D,MAAA,MAAM,EAAE,KAAA,EAAM,GAAID,iBAAAA,CAAa,gBAAA,EAAiB;AAChD,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,QAAQ,KAAA,EAAO,EAAE,IAAI,CAAA;AAC1D,MAAA,OAAQ,MAAA,CAAO,kBAAkB,CAAA,IAAoC,IAAA;AAAA,IACvE,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SAAS,OAAA,EAAkF;AAC/F,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,eAAA,EAAiB,UAAA,EAAY;AAAA,MACrD,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,WAAW,OAAA,CAAQ;AAAA,KACpB,CAAA;AAED,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,eAAA,EAAiB,SAAS,YAAY;AAC/D,MAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,gBAAA,EAAiB;AAChD,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,QAAQ,KAAA,EAAO;AAAA,QAClD,QAAQ,OAAA,CAAQ,MAAA;AAAA,QAChB,KAAK,OAAA,CAAQ;AAAA,OACd,CAAA;AACD,MAAA,OAAQ,MAAA,CAAO,kBAAkB,CAAA,IAAoC,IAAA;AAAA,IACvE,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,KAAK,KAAA,EAAwE;AACjF,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,oBAAA,EAAqB;AACpD,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA;AAAA,MACnC,KAAA;AAAA,MACAA,iBAAAA,CAAa,8BAA8B,KAAK;AAAA,KAClD;AACA,IAAA,OAAO,OAAO,sBAAsB,CAAA;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAO,KAAA,EAAyE;AACpF,IAAA,IAAA,CAAK,MAAA,CAAO,wBAAwB,sBAAsB,CAAA;AAE1D,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,sBAAA,EAAuB;AACtD,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA;AAAA,MACnC,KAAA;AAAA,MACAA,iBAAAA,CAAa,gCAAgC,KAAK;AAAA,KACpD;AACA,IAAA,OAAO,OAAO,wBAAwB,CAAA;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,MAAA,CACJ,EAAA,EACA,KAAA,EACqC;AACrC,IAAA,IAAA,CAAK,MAAA,CAAO,wBAAwB,sBAAsB,CAAA;AAE1D,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,sBAAA,EAAuB;AACtD,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA;AAAA,MACnC,KAAA;AAAA,MACAA,iBAAAA,CAAa,+BAAA,CAAgC,EAAA,EAAI,KAAK;AAAA,KACxD;AACA,IAAA,OAAO,OAAO,wBAAwB,CAAA;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QAAQ,EAAA,EAAiD;AAC7D,IAAA,IAAA,CAAK,MAAA,CAAO,wBAAwB,uBAAuB,CAAA;AAE3D,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,uBAAA,EAAwB;AACvD,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,QAAQ,KAAA,EAAO,EAAE,IAAI,CAAA;AAC1D,IAAA,OAAO,OAAO,yBAAyB,CAAA;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,UAAU,EAAA,EAAiD;AAC/D,IAAA,IAAA,CAAK,MAAA,CAAO,wBAAwB,yBAAyB,CAAA;AAE7D,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,yBAAA,EAA0B;AACzD,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,QAAQ,KAAA,EAAO,EAAE,IAAI,CAAA;AAC1D,IAAA,OAAO,OAAO,2BAA2B,CAAA;AAAA,EAC3C;AACF;ACjGO,IAAM,eAAA,GAAN,cAA8B,YAAA,CAAa;AAAA,EAChD,WAAA,CAAY,YAAwB,MAAA,EAAuB;AACzD,IAAA,KAAA,CAAM,YAAY,MAAM,CAAA;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QAAQ,KAAA,EAAuE;AACnF,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,oBAAA,EAAqB;AACpD,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA;AAAA,MACnC,KAAA;AAAA,MACAA,iBAAAA,CAAa,8BAA8B,KAAK;AAAA,KAClD;AACA,IAAA,OAAO,OAAO,sBAAsB,CAAA;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SAAS,KAAA,EAA8D;AAC3E,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,qBAAA,EAAsB;AACrD,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA;AAAA,MACnC,KAAA;AAAA,MACAA,iBAAAA,CAAa,+BAA+B,KAAK;AAAA,KACnD;AACA,IAAA,OAAO,OAAO,uBAAuB,CAAA;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,IAAI,KAAA,EAAkD;AAC1D,IAAA,IAAA,CAAK,MAAA,CAAO,wBAAwB,aAAa,CAAA;AAEjD,IAAA,IAAI,QAAA,IAAY,KAAA,IAAS,KAAA,CAAM,MAAA,EAAQ;AACrC,MAAA,MAAM,EAAE,KAAA,EAAAK,MAAAA,EAAM,GAAIL,kBAAa,qBAAA,EAAsB;AACrD,MAAA,MAAMM,OAAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA;AAAA,QACnCD,MAAAA;AAAA,QACAL,iBAAAA,CAAa,+BAA+B,KAAK;AAAA,OACnD;AACA,MAAA,OAAOM,QAAO,uBAAuB,CAAA;AAAA,IACvC;AAEA,IAAA,IAAI,WAAA,IAAe,KAAA,IAAS,KAAA,CAAM,SAAA,EAAW;AAC3C,MAAA,MAAM,EAAE,KAAA,EAAAD,MAAAA,EAAM,GAAIL,kBAAa,oBAAA,EAAqB;AACpD,MAAA,MAAMM,OAAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA;AAAA,QACnCD,MAAAA;AAAA,QACAL,iBAAAA,CAAa,8BAA8B,KAAK;AAAA,OAClD;AACA,MAAA,OAAOM,QAAO,sBAAsB,CAAA;AAAA,IACtC;AAEA,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIN,iBAAAA,CAAa,wBAAA,EAAyB;AACxD,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA;AAAA,MACnC,KAAA;AAAA,MACAA,iBAAAA,CAAa,kCAAkC,KAAsC;AAAA,KACvF;AACA,IAAA,OAAO,OAAO,0BAA0B,CAAA;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,MAAA,CAAO,EAAA,EAAY,OAAA,GAA+B,EAAC,EAA8B;AACrF,IAAA,MAAM,MAAM,IAAA,CAAK,QAAA,CAAS,WAAW,QAAA,EAAU,EAAE,IAAI,CAAA;AAErD,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,SAAA,EAAW,SAAS,YAAY;AACzD,MAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,SAAA,EAAU;AACzC,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,QAAQ,KAAA,EAAO,EAAE,IAAI,CAAA;AAC1D,MAAA,OAAQ,MAAA,CAAO,WAAW,CAAA,IAAmB,IAAA;AAAA,IAC/C,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QAAA,CACJ,WAAA,EACA,OAAA,GAAiC,EAAC,EACF;AAChC,IAAA,MAAM,EAAE,KAAA,EAAO,SAAA,EAAU,GAAIA,kBAAa,UAAA,CAAW;AAAA,MACnD,WAAA;AAAA,MACA,WAAW,OAAA,CAAQ,SAAA;AAAA,MACnB,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,OAAO,OAAA,CAAQ;AAAA,KAChB,CAAA;AACD,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,SAAA,EAAW,YAAY,SAAS,CAAA;AAE1D,IAAA,MAAM,OAAO,MAAM,IAAA,CAAK,UAAU,GAAA,EAAK,SAAA,EAAW,SAAS,YAAY;AACrE,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,MAAA,OAAO,OAAO,YAAY,CAAA;AAAA,IAC5B,CAAC,CAAA;AAED,IAAA,OAAO,IAAIC,gBAAW,IAAA,EAAM;AAAA,MAC1B,cAAA,EAAgB,OAAO,MAAA,KACrB,IAAA,CAAK,QAAA,CAAS,WAAA,EAAa,EAAE,GAAG,OAAA,EAAS,KAAA,EAAO,MAAA,EAAQ;AAAA,KAC3D,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,UAAU,EAAA,EAAgC;AAC9C,IAAA,IAAA,CAAK,MAAA,CAAO,wBAAwB,mBAAmB,CAAA;AAEvD,IAAA,MAAM,EAAE,KAAA,EAAM,GAAID,iBAAAA,CAAa,eAAA,EAAgB;AAC/C,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,QAAQ,KAAA,EAAO,EAAE,IAAI,CAAA;AAC1D,IAAA,OAAO,OAAO,iBAAiB,CAAA;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,WAAA,CACJ,WAAA,EACA,OAAA,GAAoC,EAAC,EACF;AACnC,IAAA,MAAM,EAAE,KAAA,EAAO,SAAA,EAAU,GAAIA,kBAAa,aAAA,CAAc;AAAA,MACtD,WAAA;AAAA,MACA,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,YAAY,OAAA,CAAQ,UAAA;AAAA,MACpB,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,OAAO,OAAA,CAAQ;AAAA,KAChB,CAAA;AACD,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,SAAA,EAAW,eAAe,SAAS,CAAA;AAE7D,IAAA,MAAM,OAAO,MAAM,IAAA,CAAK,UAAU,GAAA,EAAK,SAAA,EAAW,SAAS,YAAY;AACrE,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,MAAA,MAAM,GAAA,GAAM,OAAO,WAAW,CAAA;AAC9B,MAAA,OAAO,GAAA,EAAK,QAAQ,eAAA,EAA8B;AAAA,IACpD,CAAC,CAAA;AAED,IAAA,OAAO,IAAIC,gBAAW,IAAA,EAAM;AAAA,MAC1B,cAAA,EAAgB,OAAO,MAAA,KACrB,IAAA,CAAK,WAAA,CAAY,WAAA,EAAa,EAAE,GAAG,OAAA,EAAS,KAAA,EAAO,MAAA,EAAQ;AAAA,KAC9D,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,UAAA,CAAW,EAAA,EAAY,OAAA,GAAmC,EAAC,EAAuB;AACtF,IAAA,MAAM,UAAA,GAAa,QAAQ,UAAA,IAAc,GAAA;AACzC,IAAA,MAAM,SAAA,GAAY,QAAQ,SAAA,IAAa,GAAA;AACvC,IAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAE3B,IAAA,OAAO,IAAA,EAAM;AACX,MAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,MAAA,CAAO,IAAI,EAAE,KAAA,EAAO,OAAO,CAAA;AAClD,MAAA,IAAI,CAAC,GAAA,EAAK,MAAM,IAAI,KAAA,CAAM,CAAA,YAAA,EAAe,EAAE,CAAA,eAAA,CAAiB,CAAA;AAC5D,MAAA,IAAI,IAAI,MAAA,KAAW,WAAA,IAAe,GAAA,CAAI,MAAA,KAAW,UAAU,OAAO,GAAA;AAClE,MAAA,IAAI,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA,IAAa,SAAA,EAAW;AACvC,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kCAAA,EAAqC,EAAE,CAAA,CAAA,CAAG,CAAA;AAAA,MAC5D;AACA,MAAA,MAAM,IAAI,OAAA,CAAQ,CAAC,YAAY,UAAA,CAAW,OAAA,EAAS,UAAU,CAAC,CAAA;AAAA,IAChE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,YAAY,KAAA,EAA2D;AAC3E,IAAA,MAAM,EAAE,KAAA,EAAM,GAAID,iBAAAA,CAAa,iBAAA,EAAkB;AACjD,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA;AAAA,MACnC,KAAA;AAAA,MACAA,iBAAAA,CAAa,2BAA2B,KAAK;AAAA,KAC/C;AACA,IAAA,OAAO,OAAO,mBAAmB,CAAA;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QAAQ,KAAA,EAAmD;AAC/D,IAAA,IAAA,CAAK,MAAA,CAAO,wBAAwB,iBAAiB,CAAA;AAErD,IAAA,IAAI,QAAA,IAAY,KAAA,IAAS,KAAA,CAAM,MAAA,EAAQ;AACrC,MAAA,MAAM,EAAE,KAAA,EAAAK,MAAAA,EAAM,GAAIL,kBAAa,kBAAA,EAAmB;AAClD,MAAA,MAAMM,OAAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA;AAAA,QACnCD,MAAAA;AAAA,QACAL,iBAAAA,CAAa,4BAA4B,KAAK;AAAA,OAChD;AACA,MAAA,OAAOM,QAAO,oBAAoB,CAAA;AAAA,IACpC;AAEA,IAAA,IAAI,WAAA,IAAe,KAAA,IAAS,KAAA,CAAM,SAAA,EAAW;AAC3C,MAAA,MAAM,EAAE,KAAA,EAAAD,MAAAA,EAAM,GAAIL,kBAAa,iBAAA,EAAkB;AACjD,MAAA,MAAMM,OAAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA;AAAA,QACnCD,MAAAA;AAAA,QACAL,iBAAAA,CAAa,2BAA2B,KAAK;AAAA,OAC/C;AACA,MAAA,OAAOM,QAAO,mBAAmB,CAAA;AAAA,IACnC;AAEA,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIN,iBAAAA,CAAa,qBAAA,EAAsB;AACrD,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA;AAAA,MACnC,KAAA;AAAA,MACAA,iBAAAA,CAAa,+BAA+B,KAAmC;AAAA,KACjF;AACA,IAAA,OAAO,OAAO,uBAAuB,CAAA;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,UAAA,CAAW,EAAA,EAAY,OAAA,GAA+B,EAAC,EAAkC;AAC7F,IAAA,MAAM,MAAM,IAAA,CAAK,QAAA,CAAS,WAAW,YAAA,EAAc,EAAE,IAAI,CAAA;AAEzD,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,SAAA,EAAW,SAAS,YAAY;AACzD,MAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,aAAA,EAAc;AAC7C,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,QAAQ,KAAA,EAAO,EAAE,IAAI,CAAA;AAC1D,MAAA,OAAQ,MAAA,CAAO,eAAe,CAAA,IAAuB,IAAA;AAAA,IACvD,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,YAAA,CACJ,MAAA,EACA,OAAA,GAAqC,EAAC,EACF;AACpC,IAAA,MAAM,EAAE,KAAA,EAAO,SAAA,EAAU,GAAIA,kBAAa,cAAA,CAAe;AAAA,MACvD,MAAA;AAAA,MACA,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,OAAO,OAAA,CAAQ;AAAA,KAChB,CAAA;AACD,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,SAAA,EAAW,gBAAgB,SAAS,CAAA;AAE9D,IAAA,MAAM,OAAO,MAAM,IAAA,CAAK,UAAU,GAAA,EAAK,SAAA,EAAW,SAAS,YAAY;AACrE,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,MAAA,OAAO,OAAO,gBAAgB,CAAA;AAAA,IAChC,CAAC,CAAA;AAED,IAAA,OAAO,IAAIC,gBAAW,IAAA,EAAM;AAAA,MAC1B,cAAA,EAAgB,OAAO,MAAA,KACrB,IAAA,CAAK,YAAA,CAAa,MAAA,EAAQ,EAAE,GAAG,OAAA,EAAS,KAAA,EAAO,MAAA,EAAQ;AAAA,KAC1D,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cAAc,EAAA,EAAoC;AACtD,IAAA,IAAA,CAAK,MAAA,CAAO,wBAAwB,uBAAuB,CAAA;AAE3D,IAAA,MAAM,EAAE,KAAA,EAAM,GAAID,iBAAAA,CAAa,mBAAA,EAAoB;AACnD,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,QAAQ,KAAA,EAAO,EAAE,IAAI,CAAA;AAC1D,IAAA,OAAO,OAAO,qBAAqB,CAAA;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cAAA,CAAe,EAAA,EAAY,OAAA,GAAmC,EAAC,EAA2B;AAC9F,IAAA,MAAM,UAAA,GAAa,QAAQ,UAAA,IAAc,GAAA;AACzC,IAAA,MAAM,SAAA,GAAY,QAAQ,SAAA,IAAa,GAAA;AACvC,IAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAE3B,IAAA,OAAO,IAAA,EAAM;AACX,MAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,UAAA,CAAW,IAAI,EAAE,KAAA,EAAO,OAAO,CAAA;AACtD,MAAA,IAAI,CAAC,GAAA,EAAK,MAAM,IAAI,KAAA,CAAM,CAAA,iBAAA,EAAoB,EAAE,CAAA,eAAA,CAAiB,CAAA;AACjE,MAAA,IAAI,IAAI,MAAA,KAAW,WAAA,IAAe,GAAA,CAAI,MAAA,KAAW,UAAU,OAAO,GAAA;AAClE,MAAA,IAAI,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA,IAAa,SAAA,EAAW;AACvC,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,uCAAA,EAA0C,EAAE,CAAA,CAAA,CAAG,CAAA;AAAA,MACjE;AACA,MAAA,MAAM,IAAI,OAAA,CAAQ,CAAC,YAAY,UAAA,CAAW,OAAA,EAAS,UAAU,CAAC,CAAA;AAAA,IAChE;AAAA,EACF;AACF;AAEA,SAAS,eAAA,GAAwC;AAC/C,EAAA,OAAO;AAAA,IACL,UAAA,EAAY,CAAA;AAAA,IACZ,QAAA,EAAU;AAAA,MACR,WAAA,EAAa,KAAA;AAAA,MACb,eAAA,EAAiB,KAAA;AAAA,MACjB,WAAA,EAAa,IAAA;AAAA,MACb,SAAA,EAAW;AAAA,KACb;AAAA,IACA,OAAO;AAAC,GACV;AACF;ACjUO,IAAM,eAAA,GAAN,cAA8B,YAAA,CAAa;AAAA,EAChD,WAAA,CAAY,YAAwB,MAAA,EAAuB;AACzD,IAAA,KAAA,CAAM,YAAY,MAAM,CAAA;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,IAAI,KAAA,EAA+C;AACvD,IAAA,IAAA,CAAK,MAAA,CAAO,wBAAwB,aAAa,CAAA;AAEjD,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,aAAA,EAAc;AAC7C,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,QAAQ,KAAA,EAAOA,iBAAAA,CAAa,sBAAA,CAAuB,KAAK,CAAC,CAAA;AAC9F,IAAA,OAAO,OAAO,eAAe,CAAA;AAAA,EAC/B;AAAA;AAAA,EAGA,MAAM,OAAO,KAAA,EAA+C;AAC1D,IAAA,OAAO,IAAA,CAAK,IAAI,KAAK,CAAA;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,MAAA,CAAO,EAAA,EAAY,OAAA,GAA+B,EAAC,EAA8B;AACrF,IAAA,MAAM,MAAM,IAAA,CAAK,QAAA,CAAS,WAAW,QAAA,EAAU,EAAE,IAAI,CAAA;AAErD,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,SAAA,EAAW,SAAS,YAAY;AACzD,MAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,SAAA,EAAU;AACzC,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,QAAQ,KAAA,EAAO,EAAE,IAAI,CAAA;AAC1D,MAAA,OAAQ,MAAA,CAAO,WAAW,CAAA,IAAmB,IAAA;AAAA,IAC/C,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QAAA,CACJ,WAAA,EACA,OAAA,GAAiC,EAAC,EACF;AAChC,IAAA,MAAM,EAAE,KAAA,EAAO,SAAA,EAAU,GAAIA,kBAAa,UAAA,CAAW;AAAA,MACnD,WAAA;AAAA,MACA,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,WAAW,OAAA,CAAQ,SAAA;AAAA,MACnB,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,OAAO,OAAA,CAAQ;AAAA,KAChB,CAAA;AACD,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,SAAA,EAAW,YAAY,SAAS,CAAA;AAE1D,IAAA,MAAM,OAAO,MAAM,IAAA,CAAK,UAAU,GAAA,EAAK,SAAA,EAAW,SAAS,YAAY;AACrE,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,OAAO,SAAS,CAAA;AAC7D,MAAA,OAAO,OAAO,YAAY,CAAA;AAAA,IAC5B,CAAC,CAAA;AAED,IAAA,OAAO,IAAIC,gBAAW,IAAA,EAAM;AAAA,MAC1B,cAAA,EAAgB,OAAO,MAAA,KACrB,IAAA,CAAK,QAAA,CAAS,WAAA,EAAa,EAAE,GAAG,OAAA,EAAS,KAAA,EAAO,MAAA,EAAQ;AAAA,KAC3D,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,WAAW,EAAA,EAAgC;AAC/C,IAAA,MAAM,EAAE,KAAA,EAAM,GAAID,iBAAAA,CAAa,mBAAA,EAAoB;AACnD,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,QAAQ,KAAA,EAAO,EAAE,IAAI,CAAA;AAC1D,IAAA,OAAO,OAAO,qBAAqB,CAAA;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAO,EAAA,EAAgC;AAC3C,IAAA,IAAA,CAAK,MAAA,CAAO,wBAAwB,gBAAgB,CAAA;AAEpD,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,eAAA,EAAgB;AAC/C,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,QAAQ,KAAA,EAAO,EAAE,IAAI,CAAA;AAC1D,IAAA,OAAO,OAAO,iBAAiB,CAAA;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,UAAA,CAAW,EAAA,EAAY,OAAA,GAAmC,EAAC,EAAuB;AACtF,IAAA,MAAM,UAAA,GAAa,QAAQ,UAAA,IAAc,GAAA;AACzC,IAAA,MAAM,SAAA,GAAY,QAAQ,SAAA,IAAa,GAAA;AACvC,IAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAE3B,IAAA,OAAO,IAAA,EAAM;AACX,MAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,MAAA,CAAO,IAAI,EAAE,KAAA,EAAO,OAAO,CAAA;AAClD,MAAA,IAAI,CAAC,GAAA,EAAK,MAAM,IAAI,KAAA,CAAM,CAAA,YAAA,EAAe,EAAE,CAAA,eAAA,CAAiB,CAAA;AAC5D,MAAA,IAAI,IAAI,MAAA,KAAW,WAAA,IAAe,GAAA,CAAI,MAAA,KAAW,UAAU,OAAO,GAAA;AAClE,MAAA,IAAI,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA,IAAa,SAAA,EAAW;AACvC,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kCAAA,EAAqC,EAAE,CAAA,CAAA,CAAG,CAAA;AAAA,MAC5D;AACA,MAAA,MAAM,IAAI,OAAA,CAAQ,CAAC,YAAY,UAAA,CAAW,OAAA,EAAS,UAAU,CAAC,CAAA;AAAA,IAChE;AAAA,EACF;AACF;ACxFO,IAAM,aAAA,GAAN,cAA4B,YAAA,CAAa;AAAA,EAC9C,WAAA,CAAY,YAAwB,MAAA,EAAuB;AACzD,IAAA,KAAA,CAAM,YAAY,MAAM,CAAA;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,GAAA,CAAI,EAAA,EAAY,OAAA,GAA0B,EAAC,EAA+B;AAC9E,IAAA,MAAM,MAAM,IAAA,CAAK,QAAA,CAAS,SAAS,KAAA,EAAO,EAAE,IAAI,CAAA;AAEhD,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,OAAA,EAAS,SAAS,YAAY;AACvD,MAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,IAAA,EAAK;AACpC,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,QAAQ,KAAA,EAAO,EAAE,IAAI,CAAA;AAC1D,MAAA,OAAQ,MAAA,CAAO,MAAM,CAAA,IAAoB,IAAA;AAAA,IAC3C,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cAAc,KAAA,EAAkD;AACpE,IAAA,IAAA,CAAK,MAAA,CAAO,wBAAwB,qBAAqB,CAAA;AAEzD,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,iBAAA,EAAkB;AACjD,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA;AAAA,MACnC,KAAA;AAAA,MACAA,iBAAAA,CAAa,2BAA2B,KAAK;AAAA,KAC/C;AACA,IAAA,OAAO,OAAO,mBAAmB,CAAA;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cAAc,EAAA,EAAiC;AACnD,IAAA,IAAA,CAAK,MAAA,CAAO,wBAAwB,qBAAqB,CAAA;AAEzD,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,iBAAA,EAAkB;AACjD,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,QAAQ,KAAA,EAAO,EAAE,IAAI,CAAA;AAC1D,IAAA,OAAO,OAAO,mBAAmB,CAAA;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAO,KAAA,EAA6C;AACxD,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,IAAA,IAAQ,eAAA,CAAgB,MAAM,IAAI,CAAA;AACrD,IAAA,IAAI,CAAC,IAAA,IAAQ,IAAA,IAAQ,CAAA,EAAG;AACtB,MAAA,MAAM,IAAI,MAAM,wEAAwE,CAAA;AAAA,IAC1F;AAEA,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,aAAA,CAAc;AAAA,MACtC,UAAU,KAAA,CAAM,QAAA;AAAA,MAChB,aAAa,KAAA,CAAM,WAAA;AAAA,MACnB,IAAA;AAAA,MACA,QAAA,EAAU,MAAM,QAAA,IAAY,KAAA;AAAA,MAC5B,UAAA,EAAY,KAAA,CAAM,UAAA,IAAc,oBAAA,CAAqB,MAAM,OAAO,CAAA;AAAA,MAClE,UAAU,KAAA,CAAM,QAAA;AAAA,MAChB,aAAa,KAAA,CAAM,WAAA;AAAA,MACnB,WAAW,KAAA,CAAM;AAAA,KAClB,CAAA;AAED,IAAA,MAAM,UAAU,MAAA,CAAO,SAAA,EAAW,KAAA,CAAM,WAAA,EAAa,MAAM,IAAI,CAAA;AAC/D,IAAA,OAAO,IAAA,CAAK,aAAA,CAAc,MAAA,CAAO,IAAA,CAAK,EAAE,CAAA;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAO,EAAA,EAA8B;AACzC,IAAA,IAAA,CAAK,MAAA,CAAO,wBAAwB,cAAc,CAAA;AAElD,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,UAAA,EAAW;AAC1C,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,QAAQ,KAAA,EAAO,EAAE,IAAI,CAAA;AAC1D,IAAA,OAAO,OAAA,CAAQ,MAAA,CAAO,YAAY,CAAC,CAAA;AAAA,EACrC;AACF;AAEA,eAAe,SAAA,CAAU,SAAA,EAAmB,WAAA,EAAqB,IAAA,EAA8B;AAC7F,EAAA,MAAM,cAAe,UAAA,CAAuC,KAAA;AAC5D,EAAA,IAAI,CAAC,WAAA,EAAa,MAAM,IAAI,MAAM,oDAAoD,CAAA;AAEtF,EAAA,MAAM,QAAA,GAAW,MAAM,WAAA,CAAY,SAAA,EAAW;AAAA,IAC5C,MAAA,EAAQ,KAAA;AAAA,IACR,OAAA,EAAS,EAAE,cAAA,EAAgB,WAAA,EAAY;AAAA,IACvC;AAAA,GACD,CAAA;AAED,EAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,IAAA,MAAM,eAAe,MAAM,QAAA,CAAS,MAAK,CAAE,KAAA,CAAM,MAAM,EAAE,CAAA;AACzD,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,wBAAA,EAA2B,QAAA,CAAS,MAAM,CAAA,CAAA,EAAI,QAAA,CAAS,UAAU,CAAA,EAAG,YAAA,GAAe,CAAA,EAAA,EAAK,YAAY,CAAA,CAAA,GAAK,EAAE,CAAA;AAAA,KAC7G;AAAA,EACF;AACF;AAEA,SAAS,gBAAgB,IAAA,EAAmC;AAC1D,EAAA,IAAI,OAAO,SAAS,QAAA,EAAU,OAAO,IAAI,WAAA,EAAY,CAAE,MAAA,CAAO,IAAI,CAAA,CAAE,UAAA;AACpE,EAAA,IAAI,IAAA,YAAgB,WAAA,EAAa,OAAO,IAAA,CAAK,UAAA;AAC7C,EAAA,IAAI,WAAA,CAAY,MAAA,CAAO,IAAI,CAAA,SAAU,IAAA,CAAK,UAAA;AAE1C,EAAA,MAAM,KAAA,GAAQ,IAAA;AACd,EAAA,IAAI,OAAO,KAAA,EAAO,IAAA,KAAS,QAAA,SAAiB,KAAA,CAAM,IAAA;AAClD,EAAA,IAAI,OAAO,KAAA,EAAO,UAAA,KAAe,QAAA,SAAiB,KAAA,CAAM,UAAA;AACxD,EAAA,IAAI,OAAO,KAAA,EAAO,MAAA,KAAW,QAAA,SAAiB,KAAA,CAAM,MAAA;AAEpD,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,qBAAqB,OAAA,EAAwD;AACpF,EAAA,IAAI,CAAC,OAAA,IAAW,OAAA,KAAY,YAAA,EAAc,OAAO,MAAA;AACjD,EAAA,IAAI,OAAA,KAAY,UAAU,OAAO,QAAA;AACjC,EAAA,IAAI,OAAA,KAAY,yBAAyB,OAAO,uBAAA;AAChD,EAAA,OAAO,OAAA;AACT;ACtEO,IAAM,aAAA,GAAN,cAA4B,YAAA,CAAa;AAAA,EAC9C,WAAA,CAAY,YAAwB,MAAA,EAAuB;AACzD,IAAA,KAAA,CAAM,YAAY,MAAM,CAAA;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,oBAAoB,KAAA,EAAiE;AACzF,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,+BAAA,CAAgC,KAAK,CAAA;AAC9D,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,uBAAA,EAAwB;AACvD,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA;AAAA,MACnC,KAAA;AAAA,MACAA,iBAAAA,CAAa,iCAAiC,WAAW;AAAA,KAC3D;AACA,IAAA,OAAO,OAAO,yBAAyB,CAAA;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cAAc,KAAA,EAAsD;AACxE,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,yBAAA,CAA0B,KAAK,CAAA;AACxD,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,iBAAA,EAAkB;AACjD,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA;AAAA,MACnC,KAAA;AAAA,MACAA,iBAAAA,CAAa,2BAA2B,WAAW;AAAA,KACrD;AACA,IAAA,OAAO,OAAO,mBAAmB,CAAA;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,UAAU,KAAA,EAAsD;AACpE,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,qBAAA,CAAsB,KAAK,CAAA;AACpD,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,aAAA,EAAc;AAC7C,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA;AAAA,MACnC,KAAA;AAAA,MACAA,iBAAAA,CAAa,uBAAuB,WAAW;AAAA,KACjD;AACA,IAAA,OAAO,OAAO,eAAe,CAAA;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,MAAA,CAAO,EAAA,EAAY,OAAA,GAA6B,EAAC,EAA4B;AACjF,IAAA,MAAM,MAAM,IAAA,CAAK,QAAA,CAAS,SAAS,QAAA,EAAU,EAAE,IAAI,CAAA;AAEnD,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,OAAA,EAAS,SAAS,YAAY;AACvD,MAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,OAAA,EAAQ;AACvC,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,QAAQ,KAAA,EAAO,EAAE,IAAI,CAAA;AAC1D,MAAA,OAAQ,MAAA,CAAO,SAAS,CAAA,IAAiB,IAAA;AAAA,IAC3C,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAA,CAAQ,EAAA,EAAY,OAAA,GAA8B,EAAC,EAAqB;AAC5E,IAAA,MAAM,SAAA,GAAY,QAAQ,SAAA,IAAa,GAAA;AACvC,IAAA,MAAM,gBAAgB,IAAA,CAAK,GAAA,CAAI,OAAA,CAAQ,aAAA,IAAiB,KAAK,CAAC,CAAA;AAC9D,IAAA,MAAM,aAAA,GAAgB,QAAQ,aAAA,IAAiB,GAAA;AAC/C,IAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAC3B,IAAA,IAAI,aAAa,IAAA,CAAK,GAAA,CAAI,OAAA,CAAQ,UAAA,IAAc,KAAM,CAAC,CAAA;AAEvD,IAAA,OAAO,IAAA,EAAM;AACX,MAAA,cAAA,CAAe,QAAQ,MAAM,CAAA;AAE7B,MAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,MAAA,CAAO,IAAI,EAAE,KAAA,EAAO,OAAO,CAAA;AAClD,MAAA,IAAI,CAAC,GAAA,EAAK,MAAM,IAAI,KAAA,CAAM,CAAA,UAAA,EAAa,EAAE,CAAA,eAAA,CAAiB,CAAA;AAC1D,MAAA,IAAI,oBAAA,CAAqB,GAAA,CAAI,MAAM,CAAA,EAAG,OAAO,GAAA;AAE7C,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA;AAC/B,MAAA,MAAM,cAAc,SAAA,GAAY,SAAA;AAChC,MAAA,IAAI,eAAe,CAAA,EAAG;AACpB,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,gCAAA,EAAmC,EAAE,CAAA,CAAA,CAAG,CAAA;AAAA,MAC1D;AAEA,MAAA,MAAM,KAAA,CAAM,IAAA,CAAK,GAAA,CAAI,UAAA,EAAY,WAAW,CAAC,CAAA;AAC7C,MAAA,UAAA,GAAa,KAAK,GAAA,CAAI,IAAA,CAAK,KAAK,UAAA,GAAa,aAAa,GAAG,aAAa,CAAA;AAAA,IAC5E;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,eAAe,KAAA,EAA8D;AACjF,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,kBAAA,EAAmB;AAClD,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA;AAAA,MACnC,KAAA;AAAA,MACAA,iBAAAA,CAAa,4BAA4B,KAAK;AAAA,KAChD;AACA,IAAA,OAAO,OAAO,oBAAoB,CAAA;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QAAQ,KAAA,EAAiD;AAC7D,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,mBAAA,CAAoB,KAAK,CAAA;AAClD,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,WAAA,EAAY;AAC3C,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA;AAAA,MACnC,KAAA;AAAA,MACAA,iBAAAA,CAAa,qBAAqB,WAAW;AAAA,KAC/C;AACA,IAAA,OAAO,OAAO,aAAa,CAAA;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,uBAAuB,KAAA,EAAsD;AACjF,IAAA,MAAM,SAAS,eAAA,EAAgB;AAC/B,IAAA,MAAM,GAAA,GAAM,MAAM,MAAA,CAAO,SAAA;AAAA,MACvB,KAAA;AAAA,MACA,UAAA,CAAW,MAAM,MAAM,CAAA;AAAA,MACvB,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,SAAA,EAAU;AAAA,MAChC,KAAA;AAAA,MACA,CAAC,MAAM;AAAA,KACT;AACA,IAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,IAAA,CAAK,QAAQ,GAAA,EAAK,WAAA,CAAY,KAAA,CAAM,IAAI,CAAC,CAAA;AACrE,IAAA,MAAM,WAAW,CAAA,OAAA,EAAU,KAAA,CAAM,IAAI,UAAA,CAAW,MAAM,CAAC,CAAC,CAAA,CAAA;AAExD,IAAA,OAAO,kBAAkB,KAAA,CAAM,SAAA,CAAU,MAAK,CAAE,WAAA,IAAe,QAAQ,CAAA;AAAA,EACzE;AAAA,EAEQ,sBAAsB,KAAA,EAAiD;AAC7E,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,gBAAA,CAAiB,KAAA,CAAM,aAAa,CAAA;AAC/D,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,WAAA,CAAY,KAAA,CAAM,OAAO,CAAA;AAC9C,IAAA,IAAA,CAAK,cAAA,CAAe,eAAe,OAAO,CAAA;AAE1C,IAAA,OAAO,EAAE,GAAG,KAAA,EAAO,aAAA,EAAe,OAAA,EAAQ;AAAA,EAC5C;AAAA,EAEQ,gCACN,KAAA,EAC8B;AAC9B,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,gBAAA,CAAiB,KAAA,CAAM,aAAa,CAAA;AAC/D,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,WAAA,CAAY,KAAA,CAAM,OAAO,CAAA;AAC9C,IAAA,IAAA,CAAK,cAAA,CAAe,eAAe,OAAO,CAAA;AAE1C,IAAA,OAAO,EAAE,GAAG,KAAA,EAAO,aAAA,EAAe,OAAA,EAAQ;AAAA,EAC5C;AAAA,EAEQ,0BAA0B,KAAA,EAAyD;AACzF,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,gBAAA,CAAiB,KAAA,CAAM,aAAa,CAAA;AAC/D,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,WAAA,CAAY,KAAA,CAAM,OAAO,CAAA;AAC9C,IAAA,IAAA,CAAK,cAAA,CAAe,eAAe,OAAO,CAAA;AAE1C,IAAA,OAAO,EAAE,GAAG,KAAA,EAAO,aAAA,EAAe,OAAA,EAAQ;AAAA,EAC5C;AAAA,EAEQ,oBAAoB,KAAA,EAA6C;AACvE,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,gBAAA,CAAiB,KAAA,CAAM,aAAa,CAAA;AAC/D,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,WAAA,CAAY,KAAA,CAAM,OAAO,CAAA;AAC9C,IAAA,IAAA,CAAK,cAAA,CAAe,eAAe,OAAO,CAAA;AAE1C,IAAA,OAAO,EAAE,GAAG,KAAA,EAAO,aAAA,EAAe,OAAA,EAAQ;AAAA,EAC5C;AACF;AAEA,SAAS,qBAAqB,MAAA,EAAyB;AACrD,EAAA,MAAM,UAAA,GAAa,OAAO,WAAA,EAAY;AACtC,EAAA,OAAO,UAAA,KAAe,WAAA,IAAe,UAAA,KAAe,QAAA,IAAY,UAAA,KAAe,WAAA;AACjF;AAEA,eAAe,MAAM,EAAA,EAA2B;AAC9C,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,YAAY,UAAA,CAAW,OAAA,EAAS,EAAE,CAAC,CAAA;AACzD;AAEA,SAAS,eAAe,MAAA,EAAsC;AAC5D,EAAA,IAAI,CAAC,MAAA,EAAQ;AACb,EAAA,IAAI,MAAA,CAAO,cAAA,EAAgB,MAAA,CAAO,cAAA,EAAe;AACjD,EAAA,IAAI,MAAA,CAAO,OAAA,EAAS,MAAM,IAAI,MAAM,0BAA0B,CAAA;AAChE;AAEA,SAAS,eAAA,GAAoC;AAC3C,EAAA,MAAM,UAAA,GAAa,UAAA;AACnB,EAAA,MAAM,MAAA,GAAS,WAAW,MAAA,EAAQ,MAAA;AAClC,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,MAAM,IAAI,MAAM,0DAA0D,CAAA;AAAA,EAC5E;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,YAAY,IAAA,EAA0D;AAC7E,EAAA,IAAI,OAAO,IAAA,KAAS,QAAA,EAAU,OAAO,WAAW,IAAI,CAAA;AACpD,EAAA,IAAI,IAAA,YAAgB,WAAA,EAAa,OAAO,IAAI,WAAW,IAAI,CAAA;AAC3D,EAAA,OAAO,IAAI,UAAA,CAAW,IAAA,CAAK,QAAQ,IAAA,CAAK,UAAA,EAAY,KAAK,UAAU,CAAA;AACrE;AAEA,SAAS,WAAW,KAAA,EAA2B;AAC7C,EAAA,OAAO,IAAI,WAAA,EAAY,CAAE,MAAA,CAAO,KAAK,CAAA;AACvC;AAEA,SAAS,MAAM,KAAA,EAA2B;AACxC,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,KAAA,EAAO,CAAC,SAAS,IAAA,CAAK,QAAA,CAAS,EAAE,CAAA,CAAE,SAAS,CAAA,EAAG,GAAG,CAAC,CAAA,CAAE,KAAK,EAAE,CAAA;AAChF;AAEA,SAAS,iBAAA,CAAkB,MAAc,KAAA,EAAwB;AAC/D,EAAA,MAAM,YAAY,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,MAAA,EAAQ,MAAM,MAAM,CAAA;AACpD,EAAA,IAAI,IAAA,GAAO,IAAA,CAAK,MAAA,GAAS,KAAA,CAAM,MAAA;AAE/B,EAAA,KAAA,IAAS,KAAA,GAAQ,CAAA,EAAG,KAAA,GAAQ,SAAA,EAAW,KAAA,EAAA,EAAS;AAC9C,IAAA,IAAA,IAAA,CAAS,IAAA,CAAK,WAAW,KAAK,CAAA,IAAK,MAAM,KAAA,CAAM,UAAA,CAAW,KAAK,CAAA,IAAK,CAAA,CAAA;AAAA,EACtE;AAEA,EAAA,OAAO,IAAA,KAAS,CAAA;AAClB;ACrPO,IAAM,qBAAA,GAAN,cAAoC,YAAA,CAAa;AAAA,EACtD,WAAA,CAAY,YAAwB,MAAA,EAAuB;AACzD,IAAA,KAAA,CAAM,YAAY,MAAM,CAAA;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QAAQ,KAAA,EAAoE;AAChF,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,oBAAA,CAAqB,KAAK,CAAA;AACnD,IAAA,MAAM,GAAA,GAAM,KAAK,QAAA,CAAS,eAAA,EAAiB,WAAW,EAAE,GAAG,aAAa,CAAA;AAExE,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,eAAA,EAAiB,OAAO,YAAY;AAC7D,MAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,mBAAA,EAAoB;AACnD,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA;AAAA,QACnC,KAAA;AAAA,QACAA,iBAAAA,CAAa,6BAA6B,WAAW;AAAA,OACvD;AACA,MAAA,OAAO,OAAO,qBAAqB,CAAA;AAAA,IACrC,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,KAAK,KAAA,EAA0D;AACnE,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,gBAAA,CAAiB,KAAK,CAAA;AAC/C,IAAA,MAAM,GAAA,GAAM,KAAK,QAAA,CAAS,eAAA,EAAiB,QAAQ,EAAE,GAAG,aAAa,CAAA;AAErE,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,eAAA,EAAiB,OAAO,YAAY;AAC7D,MAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,aAAA,EAAc;AAC7C,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA;AAAA,QACnC,KAAA;AAAA,QACAA,iBAAAA,CAAa,uBAAuB,WAAW;AAAA,OACjD;AACA,MAAA,MAAM,OAAA,GAAU,OAAO,eAAe,CAAA;AACtC,MAAA,OAAO,OAAA,EAAS,aAAa,EAAC;AAAA,IAChC,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAO,KAAA,EAA8D;AACzE,IAAA,IAAA,CAAK,MAAA,CAAO,wBAAwB,sBAAsB,CAAA;AAE1D,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,gBAAA,CAAiB,KAAK,CAAA;AAC/C,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,kBAAA,EAAmB;AAClD,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA;AAAA,MACnC,KAAA;AAAA,MACAA,iBAAAA,CAAa,4BAA4B,WAAW;AAAA,KACtD;AACA,IAAA,OAAO,OAAO,oBAAoB,CAAA;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,MAAA,CACJ,SAAA,EACA,KAAA,EAC8B;AAC9B,IAAA,IAAA,CAAK,MAAA,CAAO,wBAAwB,sBAAsB,CAAA;AAE1D,IAAA,MAAM,EAAA,GAAK,OAAO,SAAA,KAAc,QAAA,GAAW,YAAY,SAAA,CAAU,EAAA;AACjE,IAAA,MAAM,gBAAgB,OAAO,SAAA,KAAc,QAAA,GAAW,KAAA,GAAQ,UAAU,SAAS,CAAA;AACjF,IAAA,IAAI,CAAC,aAAA,EAAe,MAAM,IAAI,MAAM,iCAAiC,CAAA;AAErE,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,gBAAA,CAAiB,aAAa,CAAA;AACvD,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,kBAAA,EAAmB;AAClD,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA;AAAA,MACnC,KAAA;AAAA,MACAA,iBAAAA,CAAa,2BAAA,CAA4B,EAAA,EAAI,WAAW;AAAA,KAC1D;AACA,IAAA,OAAO,OAAO,oBAAoB,CAAA;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QAAQ,KAAA,EAAiE;AAC7E,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,mBAAA,CAAoB,KAAK,CAAA;AAClD,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,mBAAA,EAAoB;AACnD,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA;AAAA,MACnC,KAAA;AAAA,MACAA,iBAAAA,CAAa,6BAA6B,WAAW;AAAA,KACvD;AACA,IAAA,OAAO,OAAO,qBAAqB,CAAA;AAAA,EACrC;AAAA,EAEQ,qBAAqB,KAAA,EAA6D;AACxF,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,gBAAA,CAAiB,KAAA,CAAM,aAAa,CAAA;AAC/D,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,WAAA,CAAY,KAAA,CAAM,OAAO,CAAA;AAC9C,IAAA,IAAA,CAAK,cAAA,CAAe,eAAe,OAAO,CAAA;AAE1C,IAAA,OAAO;AAAA,MACL,aAAA;AAAA,MACA,OAAA;AAAA,MACA,YAAY,KAAA,CAAM,UAAA;AAAA,MAClB,YAAY,KAAA,CAAM;AAAA,KACpB;AAAA,EACF;AAAA,EAEQ,iBAAiB,KAAA,EAAqD;AAC5E,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,gBAAA,CAAiB,KAAA,CAAM,aAAa,CAAA;AAC/D,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,WAAA,CAAY,KAAA,CAAM,OAAO,CAAA;AAC9C,IAAA,IAAA,CAAK,cAAA,CAAe,eAAe,OAAO,CAAA;AAE1C,IAAA,OAAO;AAAA,MACL,aAAA;AAAA,MACA,OAAA;AAAA,MACA,YAAY,KAAA,CAAM,UAAA;AAAA,MAClB,iBAAiB,KAAA,CAAM;AAAA,KACzB;AAAA,EACF;AAAA,EAEQ,iBAAiB,KAAA,EAAuD;AAC9E,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,gBAAA,CAAiB,KAAA,CAAM,aAAa,CAAA;AAC/D,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,WAAA,CAAY,KAAA,CAAM,OAAO,CAAA;AAC9C,IAAA,IAAA,CAAK,cAAA,CAAe,eAAe,OAAO,CAAA;AAE1C,IAAA,OAAO,EAAE,GAAG,KAAA,EAAO,aAAA,EAAe,OAAA,EAAQ;AAAA,EAC5C;AAAA,EAEQ,oBAAoB,KAAA,EAA6D;AACvF,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,gBAAA,CAAiB,KAAA,CAAM,aAAa,CAAA;AAC/D,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,WAAA,CAAY,KAAA,CAAM,OAAO,CAAA;AAC9C,IAAA,IAAA,CAAK,cAAA,CAAe,eAAe,OAAO,CAAA;AAE1C,IAAA,OAAO,EAAE,GAAG,KAAA,EAAO,aAAA,EAAe,OAAA,EAAQ;AAAA,EAC5C;AACF;AAEA,SAAS,UAAU,KAAA,EAA2D;AAC5E,EAAA,MAAM,aAAA,GAAgB,EAAE,GAAG,KAAA,EAAM;AACjC,EAAA,OAAO,aAAA,CAAc,EAAA;AACrB,EAAA,OAAO,aAAA;AACT;;;ACjIO,IAAM,YAAA,GAAN,MAAM,aAAA,CAAa;AAAA,EAChB,MAAA;AAAA,EACA,UAAA;AAAA;AAAA,EAGC,UAAA;AAAA;AAAA,EAGA,KAAA;AAAA;AAAA,EAGA,QAAA;AAAA;AAAA,EAGA,OAAA;AAAA;AAAA,EAGA,KAAA;AAAA;AAAA,EAGA,KAAA;AAAA;AAAA,EAGA,QAAA;AAAA;AAAA,EAGA,aAAA;AAAA;AAAA,EAGA,OAAA;AAAA;AAAA,EAGA,OAAA;AAAA;AAAA,EAGA,KAAA;AAAA;AAAA,EAGA,KAAA;AAAA;AAAA,EAGA,aAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOT,WAAA,CAAY,MAAA,GAAuB,EAAC,EAAG;AACrC,IAAA,IAAA,CAAK,MAAA,GAAS,IAAI,aAAA,CAAc,MAAM,CAAA;AACtC,IAAA,IAAA,CAAK,UAAA,GAAa,IAAI,UAAA,CAAW,IAAA,CAAK,MAAM,CAAA;AAG5C,IAAA,IAAA,CAAK,aAAa,IAAI,kBAAA,CAAmB,IAAA,CAAK,UAAA,EAAY,KAAK,MAAM,CAAA;AACrE,IAAA,IAAA,CAAK,QAAQ,IAAI,aAAA,CAAc,IAAA,CAAK,UAAA,EAAY,KAAK,MAAM,CAAA;AAC3D,IAAA,IAAA,CAAK,WAAW,IAAI,gBAAA,CAAiB,IAAA,CAAK,UAAA,EAAY,KAAK,MAAM,CAAA;AACjE,IAAA,IAAA,CAAK,UAAU,IAAI,eAAA,CAAgB,IAAA,CAAK,UAAA,EAAY,KAAK,MAAM,CAAA;AAC/D,IAAA,IAAA,CAAK,QAAQ,IAAI,aAAA,CAAc,IAAA,CAAK,UAAA,EAAY,KAAK,MAAM,CAAA;AAC3D,IAAA,IAAA,CAAK,QAAQ,IAAI,aAAA,CAAc,IAAA,CAAK,UAAA,EAAY,KAAK,MAAM,CAAA;AAC3D,IAAA,IAAA,CAAK,WAAW,IAAI,gBAAA,CAAiB,IAAA,CAAK,UAAA,EAAY,KAAK,MAAM,CAAA;AACjE,IAAA,IAAA,CAAK,gBAAgB,IAAI,qBAAA,CAAsB,IAAA,CAAK,UAAA,EAAY,KAAK,MAAM,CAAA;AAC3E,IAAA,IAAA,CAAK,UAAU,IAAI,eAAA,CAAgB,IAAA,CAAK,UAAA,EAAY,KAAK,MAAM,CAAA;AAC/D,IAAA,IAAA,CAAK,UAAU,IAAI,eAAA,CAAgB,IAAA,CAAK,UAAA,EAAY,KAAK,MAAM,CAAA;AAC/D,IAAA,IAAA,CAAK,QAAQ,IAAI,aAAA,CAAc,IAAA,CAAK,UAAA,EAAY,KAAK,MAAM,CAAA;AAC3D,IAAA,IAAA,CAAK,QAAQ,IAAI,aAAA,CAAc,IAAA,CAAK,UAAA,EAAY,KAAK,MAAM,CAAA;AAC3D,IAAA,IAAA,CAAK,gBAAgB,IAAI,qBAAA,CAAsB,IAAA,CAAK,UAAA,EAAY,KAAK,MAAM,CAAA;AAAA,EAC7E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,MAAM,EAAA,GAAiC;AACrC,IAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,iBAAAA,CAAa,OAAA,EAAQ;AACvC,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,QAAQ,KAAK,CAAA;AAClD,IAAA,OAAQ,MAAA,CAAO,SAAS,CAAA,IAAoB,IAAA;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,gBAAA,GAAmB;AACjB,IAAA,OAAO,gBAAA,EAAiB;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBA,WAAW,SAAA,EAAgD;AACzD,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,SAAS,CAAA;AAChD,IAAA,OAAO,IAAI,aAAA,CAAa;AAAA,MACtB,MAAA,EAAQ,aAAa,YAAA,EAAa;AAAA,MAClC,gBAAgB,YAAA,CAAa,cAAA;AAAA,MAC7B,WAAW,YAAA,CAAa,SAAA;AAAA,MACxB,aAAa,YAAA,CAAa,WAAA;AAAA,MAC1B,aAAa,YAAA,CAAa,WAAA;AAAA,MAC1B,UAAU,YAAA,CAAa,QAAA;AAAA,MACvB,SAAS,YAAA,CAAa,OAAA;AAAA,MACtB,aAAa,YAAA,CAAa,WAAA;AAAA,MAC1B,kBAAkB,YAAA,CAAa,gBAAA;AAAA,MAC/B,aAAa,YAAA,CAAa,WAAA;AAAA,MAC1B,mBAAmB,YAAA,CAAa,iBAAA;AAAA,MAChC,cAAc,YAAA,CAAa,YAAA;AAAA,MAC3B,QAAQ,YAAA,CAAa,MAAA;AAAA,MACrB,UAAU,YAAA,CAAa,QAAA;AAAA,MACvB,kBAAkB,YAAA,CAAa,gBAAA;AAAA,MAC/B,YAAY,YAAA,CAAa,UAAA;AAAA,MACzB,qBAAqB,YAAA,CAAa,mBAAA;AAAA,MAClC,mBAAmB,YAAA,CAAa,iBAAA;AAAA,MAChC,gBAAgB,YAAA,CAAa,cAAA;AAAA,MAC7B,eAAe,YAAA,CAAa,aAAA;AAAA,MAC5B,OAAO,YAAA,CAAa,KAAA;AAAA,MACpB,UAAU,YAAA,CAAa,QAAA;AAAA,MACvB,WAAW,YAAA,CAAa;AAAA,KACzB,CAAA;AAAA,EACH;AACF","file":"index.cjs","sourcesContent":["/**\n * Configuration management for CardDB client\n */\n\nimport type { CardDBConfig, ResourceType, Logger, Cache, LogLevel } from '@carddb/core'\nimport { RestrictedError } from '@carddb/core'\n\nexport const DEFAULT_ENDPOINT = 'https://carddb.dev/query'\nexport const DEFAULT_TIMEOUT = 30000 // 30 seconds\nexport const DEFAULT_OPEN_TIMEOUT = 10000 // 10 seconds\nexport const DEFAULT_CACHE_TTL = 300 // 5 minutes\nexport const DEFAULT_MAX_RETRIES = 3\nexport const DEFAULT_MAX_NETWORK_RETRIES = 2\nexport const DEFAULT_RETRY_BASE_DELAY = 1000 // 1 second\nexport const DEFAULT_RETRY_MAX_DELAY = 30000 // 30 seconds\n\nexport class Configuration {\n apiKey?: string\n publishableKey?: string\n secretKey?: string\n accessToken?: string\n private legacyApiKey?: string\n environment?: 'TEST' | 'LIVE'\n endpoint: string\n timeout: number\n openTimeout: number\n defaultPublisher?: string\n defaultGame?: string\n allowedPublishers?: string[]\n allowedGames?: Record<string, string[]>\n logger?: Logger\n logLevel: LogLevel\n retryOnRateLimit: boolean\n maxRetries: number\n retryOnNetworkError: boolean\n maxNetworkRetries: number\n retryBaseDelay: number\n retryMaxDelay: number\n cache?: Cache\n cacheTtl: number\n cacheTtls: Partial<Record<ResourceType, number>>\n\n constructor(config: CardDBConfig = {}) {\n this.legacyApiKey = config.apiKey\n this.publishableKey = config.publishableKey\n this.secretKey = config.secretKey\n this.accessToken = config.accessToken\n this.apiKey = config.apiKey ?? config.publishableKey ?? config.secretKey\n this.environment = config.environment\n this.endpoint = config.endpoint ?? DEFAULT_ENDPOINT\n this.timeout = config.timeout ?? DEFAULT_TIMEOUT\n this.openTimeout = config.openTimeout ?? DEFAULT_OPEN_TIMEOUT\n this.defaultPublisher = config.defaultPublisher\n this.defaultGame = config.defaultGame\n this.allowedPublishers = config.allowedPublishers\n this.allowedGames = config.allowedGames\n this.logger = config.logger\n this.logLevel = config.logLevel ?? 'info'\n this.retryOnRateLimit = config.retryOnRateLimit ?? false\n this.maxRetries = config.maxRetries ?? DEFAULT_MAX_RETRIES\n this.retryOnNetworkError = config.retryOnNetworkError ?? true\n this.maxNetworkRetries = config.maxNetworkRetries ?? DEFAULT_MAX_NETWORK_RETRIES\n this.retryBaseDelay = config.retryBaseDelay ?? DEFAULT_RETRY_BASE_DELAY\n this.retryMaxDelay = config.retryMaxDelay ?? DEFAULT_RETRY_MAX_DELAY\n this.cache = config.cache\n this.cacheTtl = config.cacheTtl ?? DEFAULT_CACHE_TTL\n this.cacheTtls = config.cacheTtls ?? {}\n }\n\n /**\n * Calculate delay for exponential backoff\n * @param attempt - The attempt number (0-indexed)\n * @returns Delay in milliseconds with jitter\n */\n calculateRetryDelay(attempt: number): number {\n // Exponential backoff: baseDelay * 2^attempt\n const exponentialDelay = this.retryBaseDelay * Math.pow(2, attempt)\n // Cap at max delay\n const cappedDelay = Math.min(exponentialDelay, this.retryMaxDelay)\n // Add jitter (±25%)\n const jitter = cappedDelay * 0.25 * (Math.random() * 2 - 1)\n return Math.round(cappedDelay + jitter)\n }\n\n /**\n * Get the cache TTL for a specific resource type\n */\n cacheTtlFor(resource: ResourceType): number {\n return this.cacheTtls[resource] ?? this.cacheTtl\n }\n\n /**\n * Resolve publisher slug, using default if not provided\n */\n resolvePublisher(publisherSlug?: string): string | undefined {\n return publisherSlug ?? this.defaultPublisher\n }\n\n /**\n * Resolve game key, using default if not provided\n */\n resolveGame(gameKey?: string): string | undefined {\n return gameKey ?? this.defaultGame\n }\n\n /**\n * Validate that a publisher is allowed by the configuration\n */\n validatePublisher(publisherSlug: string): void {\n if (!this.allowedPublishers) return\n if (this.allowedPublishers.includes(publisherSlug)) return\n\n throw new RestrictedError(`Publisher '${publisherSlug}' is not in the allowed publishers list`)\n }\n\n /**\n * Validate that a game is allowed by the configuration\n */\n validateGame(publisherSlug: string, gameKey: string): void {\n if (!this.allowedGames) return\n const allowedForPublisher = this.allowedGames[publisherSlug]\n if (!allowedForPublisher) return // No restrictions for this publisher\n if (allowedForPublisher.includes(gameKey)) return\n\n throw new RestrictedError(`Game '${gameKey}' is not allowed for publisher '${publisherSlug}'`)\n }\n\n /**\n * Validate both publisher and game access\n */\n validateAccess(publisherSlug?: string, gameKey?: string): void {\n if (publisherSlug) {\n this.validatePublisher(publisherSlug)\n if (gameKey) {\n this.validateGame(publisherSlug, gameKey)\n }\n }\n }\n\n /**\n * Secret-key-only helpers are for server runtimes and trusted backend workflows.\n */\n requireSecretCredential(operation: string): void {\n if (!this.accessToken && (this.legacyApiKey || (this.secretKey && !this.publishableKey))) return\n\n throw new RestrictedError(\n `${operation} requires a server-side secretKey or legacy apiKey credential`\n )\n }\n\n /**\n * API key sent on requests when no OAuth bearer token is configured.\n */\n requestApiKey(): string | undefined {\n return this.legacyApiKey ?? this.publishableKey ?? this.secretKey\n }\n\n /**\n * Explicit legacy apiKey supplied by the caller, excluding publishable/secret aliases.\n */\n configApiKey(): string | undefined {\n return this.legacyApiKey\n }\n\n /**\n * Check if a log level should be logged\n */\n shouldLog(level: LogLevel): boolean {\n const levels: Record<LogLevel, number> = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3,\n }\n return levels[level] >= levels[this.logLevel]\n }\n\n /**\n * Create a copy of this configuration with overrides\n */\n merge(overrides: Partial<CardDBConfig>): Configuration {\n return new Configuration({\n apiKey: overrides.apiKey ?? this.legacyApiKey,\n publishableKey: overrides.publishableKey ?? this.publishableKey,\n secretKey: overrides.secretKey ?? this.secretKey,\n accessToken: overrides.accessToken ?? this.accessToken,\n environment: overrides.environment ?? this.environment,\n endpoint: overrides.endpoint ?? this.endpoint,\n timeout: overrides.timeout ?? this.timeout,\n openTimeout: overrides.openTimeout ?? this.openTimeout,\n defaultPublisher: overrides.defaultPublisher ?? this.defaultPublisher,\n defaultGame: overrides.defaultGame ?? this.defaultGame,\n allowedPublishers: overrides.allowedPublishers ?? this.allowedPublishers,\n allowedGames: overrides.allowedGames ?? this.allowedGames,\n logger: overrides.logger ?? this.logger,\n logLevel: overrides.logLevel ?? this.logLevel,\n retryOnRateLimit: overrides.retryOnRateLimit ?? this.retryOnRateLimit,\n maxRetries: overrides.maxRetries ?? this.maxRetries,\n retryOnNetworkError: overrides.retryOnNetworkError ?? this.retryOnNetworkError,\n maxNetworkRetries: overrides.maxNetworkRetries ?? this.maxNetworkRetries,\n retryBaseDelay: overrides.retryBaseDelay ?? this.retryBaseDelay,\n retryMaxDelay: overrides.retryMaxDelay ?? this.retryMaxDelay,\n cache: overrides.cache ?? this.cache,\n cacheTtl: overrides.cacheTtl ?? this.cacheTtl,\n cacheTtls: overrides.cacheTtls ?? this.cacheTtls,\n })\n }\n}\n","/**\n * User-Agent string generation for analytics tracking\n *\n * Format: CardDB-SDK/js/{version} ({runtime}/{runtime_version})\n * Examples:\n * - CardDB-SDK/js/0.4.1 (node/20.10.0)\n * - CardDB-SDK/js/0.4.1 (bun/1.0.0)\n * - CardDB-SDK/js/0.4.1 (chrome/120.0.0.0)\n * - CardDB-SDK/js/0.4.1 (firefox/121.0)\n */\n\nconst SDK_VERSION = '0.4.1'\n\ninterface RuntimeInfo {\n name: string\n version: string\n}\n\n/**\n * Detect the current JavaScript runtime\n */\nfunction detectRuntime(): RuntimeInfo {\n // Check for Bun first (it also has process.versions.node)\n if (typeof globalThis !== 'undefined' && 'Bun' in globalThis) {\n const bunVersion =\n (globalThis as Record<string, unknown>).Bun &&\n typeof (globalThis as Record<string, unknown>).Bun === 'object' &&\n ((globalThis as Record<string, unknown>).Bun as Record<string, unknown>).version\n return {\n name: 'bun',\n version: typeof bunVersion === 'string' ? bunVersion : 'unknown',\n }\n }\n\n // Check for Deno\n if (typeof globalThis !== 'undefined' && 'Deno' in globalThis) {\n const denoVersion =\n (globalThis as Record<string, unknown>).Deno &&\n typeof (globalThis as Record<string, unknown>).Deno === 'object' &&\n ((globalThis as Record<string, unknown>).Deno as Record<string, unknown>).version &&\n typeof ((globalThis as Record<string, unknown>).Deno as Record<string, unknown>).version ===\n 'object' &&\n (\n ((globalThis as Record<string, unknown>).Deno as Record<string, unknown>).version as Record<\n string,\n unknown\n >\n ).deno\n return {\n name: 'deno',\n version: typeof denoVersion === 'string' ? denoVersion : 'unknown',\n }\n }\n\n // Check for Node.js\n if (typeof process !== 'undefined' && process.versions && process.versions.node) {\n return {\n name: 'node',\n version: process.versions.node,\n }\n }\n\n // Check for browser\n if (typeof navigator !== 'undefined' && navigator.userAgent) {\n return detectBrowser(navigator.userAgent)\n }\n\n return { name: 'unknown', version: 'unknown' }\n}\n\n/**\n * Parse browser name and version from User-Agent string\n */\nfunction detectBrowser(userAgent: string): RuntimeInfo {\n // Order matters - check more specific browsers first\n\n // Edge (Chromium-based)\n const edgeMatch = userAgent.match(/Edg\\/(\\d+(?:\\.\\d+)*)/)\n if (edgeMatch) {\n return { name: 'edge', version: edgeMatch[1]! }\n }\n\n // Chrome\n const chromeMatch = userAgent.match(/Chrome\\/(\\d+(?:\\.\\d+)*)/)\n if (chromeMatch && !userAgent.includes('Edg/')) {\n return { name: 'chrome', version: chromeMatch[1]! }\n }\n\n // Firefox\n const firefoxMatch = userAgent.match(/Firefox\\/(\\d+(?:\\.\\d+)*)/)\n if (firefoxMatch) {\n return { name: 'firefox', version: firefoxMatch[1]! }\n }\n\n // Safari (check after Chrome since Chrome UA includes Safari)\n const safariMatch = userAgent.match(/Version\\/(\\d+(?:\\.\\d+)*).*Safari/)\n if (safariMatch) {\n return { name: 'safari', version: safariMatch[1]! }\n }\n\n // Generic browser fallback\n return { name: 'browser', version: 'unknown' }\n}\n\n/**\n * Generate the User-Agent string for CardDB SDK\n */\nexport function getUserAgent(): string {\n const runtime = detectRuntime()\n return `CardDB-SDK/js/${SDK_VERSION} (${runtime.name}/${runtime.version})`\n}\n\n/**\n * Get the SDK version\n */\nexport function getSDKVersion(): string {\n return SDK_VERSION\n}\n","/**\n * HTTP connection wrapper for GraphQL requests\n */\n\nimport {\n CardDBError,\n AuthenticationError,\n RateLimitError,\n ValidationError,\n GraphQLError,\n ConnectionError,\n TimeoutError,\n ServerError,\n} from '@carddb/core'\nimport type { GraphQLErrorInfo, RateLimitInfo } from '@carddb/core'\nimport type { Configuration } from './configuration.js'\nimport { getUserAgent } from './user-agent.js'\n\nexport interface GraphQLResponse {\n data?: Record<string, unknown>\n errors?: GraphQLErrorInfo[]\n}\n\n// Store rate limit info per-request (can be accessed after request)\nlet lastRateLimitInfo: RateLimitInfo | null = null\n\nexport function getRateLimitInfo(): RateLimitInfo | null {\n return lastRateLimitInfo\n}\n\nexport class Connection {\n private config: Configuration\n\n constructor(config: Configuration) {\n this.config = config\n }\n\n /**\n * Execute a GraphQL query\n */\n async execute(\n query: string,\n variables: Record<string, unknown> = {}\n ): Promise<Record<string, unknown>> {\n const operationName = this.extractOperationName(query)\n let rateLimitRetries = 0\n let networkRetries = 0\n\n while (true) {\n try {\n const startTime = Date.now()\n this.logRequest(operationName, variables)\n\n const response = await this.fetch(query, variables)\n const duration = Date.now() - startTime\n\n const result = await this.handleResponse(response)\n this.logResponse(operationName, duration)\n\n return result\n } catch (error) {\n // Handle rate limit errors\n if (error instanceof RateLimitError) {\n if (this.config.retryOnRateLimit && rateLimitRetries < this.config.maxRetries) {\n rateLimitRetries++\n const sleepTime = error.retryAfter ?? 60\n this.logRateLimitRetry(operationName, rateLimitRetries, sleepTime)\n await this.sleep(sleepTime * 1000)\n continue\n }\n }\n\n // Handle network errors (connection, timeout) with exponential backoff\n if (this.isRetryableNetworkError(error)) {\n if (this.config.retryOnNetworkError && networkRetries < this.config.maxNetworkRetries) {\n const delay = this.config.calculateRetryDelay(networkRetries)\n this.logNetworkRetry(operationName, networkRetries + 1, delay, error)\n networkRetries++\n await this.sleep(delay)\n continue\n }\n }\n\n // Handle server errors (5xx) with exponential backoff\n if (error instanceof ServerError) {\n if (this.config.retryOnNetworkError && networkRetries < this.config.maxNetworkRetries) {\n const delay = this.config.calculateRetryDelay(networkRetries)\n this.logNetworkRetry(operationName, networkRetries + 1, delay, error)\n networkRetries++\n await this.sleep(delay)\n continue\n }\n }\n\n throw error\n }\n }\n }\n\n /**\n * Check if an error is a retryable network error\n */\n private isRetryableNetworkError(error: unknown): boolean {\n return error instanceof ConnectionError || error instanceof TimeoutError\n }\n\n private async fetch(query: string, variables: Record<string, unknown>): Promise<Response> {\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), this.config.timeout)\n const apiKey = this.config.requestApiKey()\n\n try {\n const response = await fetch(this.config.endpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n 'User-Agent': getUserAgent(),\n ...(this.config.accessToken\n ? { Authorization: `Bearer ${this.config.accessToken}` }\n : {}),\n ...(!this.config.accessToken && apiKey ? { 'X-API-Key': apiKey } : {}),\n },\n body: JSON.stringify({ query, variables }),\n signal: controller.signal,\n })\n\n return response\n } catch (error) {\n if (error instanceof Error) {\n if (error.name === 'AbortError') {\n this.logError('Request timed out')\n throw new TimeoutError('Request timed out')\n }\n this.logError(`Connection failed: ${error.message}`)\n throw new ConnectionError(`Connection failed: ${error.message}`)\n }\n throw new ConnectionError('Connection failed')\n } finally {\n clearTimeout(timeoutId)\n }\n }\n\n private async handleResponse(response: Response): Promise<Record<string, unknown>> {\n // Extract rate limit headers\n this.extractRateLimitInfo(response)\n\n switch (response.status) {\n case 200:\n return this.handleSuccessResponse(response)\n case 401:\n throw new AuthenticationError('Invalid or missing API key')\n case 429:\n return this.handleRateLimitResponse(response)\n default:\n if (response.status >= 400 && response.status < 500) {\n return this.handleClientError(response)\n }\n if (response.status >= 500) {\n const body = await this.parseBody(response)\n throw new ServerError(`Server error (${response.status})`, {\n status: response.status,\n response: body,\n })\n }\n throw new CardDBError(`Unexpected response status: ${response.status}`)\n }\n }\n\n private async handleSuccessResponse(response: Response): Promise<Record<string, unknown>> {\n const body = (await this.parseBody(response)) as GraphQLResponse\n\n // Check for GraphQL errors\n if (body.errors && body.errors.length > 0) {\n this.handleGraphQLErrors(body.errors, body)\n }\n\n return body.data ?? {}\n }\n\n private handleGraphQLErrors(errors: GraphQLErrorInfo[], body: GraphQLResponse): never {\n const firstError = errors[0]!\n const message = firstError.message || 'GraphQL error'\n const code = firstError.extensions?.['code'] as string | undefined\n\n switch (code) {\n case 'UNAUTHENTICATED':\n throw new AuthenticationError(message, body)\n case 'RATE_LIMITED':\n throw new RateLimitError(message, { response: body })\n case 'NOT_FOUND':\n throw new CardDBError(message, body)\n case 'VALIDATION_ERROR':\n case 'BAD_USER_INPUT':\n throw new ValidationError(message, { errors, response: body })\n default:\n throw new GraphQLError(message, { errors, response: body })\n }\n }\n\n private async handleRateLimitResponse(response: Response): Promise<never> {\n const retryAfter = parseInt(response.headers.get('Retry-After') ?? '60', 10)\n const limit = parseInt(response.headers.get('X-RateLimit-Limit') ?? '', 10) || null\n const remaining = parseInt(response.headers.get('X-RateLimit-Remaining') ?? '', 10) || null\n const reset = parseInt(response.headers.get('X-RateLimit-Reset') ?? '', 10) || null\n const resetAt = reset ? new Date(reset * 1000) : null\n\n const body = await this.parseBody(response)\n\n throw new RateLimitError('Rate limit exceeded', {\n retryAfter,\n limit,\n remaining,\n resetAt,\n response: body,\n })\n }\n\n private async handleClientError(response: Response): Promise<never> {\n const body = (await this.parseBody(response)) as GraphQLResponse\n const message = body.errors?.[0]?.message ?? `Client error (${response.status})`\n throw new ValidationError(message, { response: body })\n }\n\n private async parseBody(response: Response): Promise<unknown> {\n try {\n return await response.json()\n } catch {\n return { raw: await response.text() }\n }\n }\n\n private extractRateLimitInfo(response: Response): void {\n const limit = parseInt(response.headers.get('X-RateLimit-Limit') ?? '', 10) || null\n const remaining = parseInt(response.headers.get('X-RateLimit-Remaining') ?? '', 10) || null\n const reset = parseInt(response.headers.get('X-RateLimit-Reset') ?? '', 10) || null\n\n lastRateLimitInfo = { limit, remaining, reset }\n }\n\n private extractOperationName(query: string): string {\n const match = query.match(/(?:query|mutation)\\s+(\\w+)/)\n return match ? match[1]! : 'Unknown'\n }\n\n private sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms))\n }\n\n // Logging helpers\n\n private logRequest(operationName: string, variables: Record<string, unknown>): void {\n if (!this.config.logger || !this.config.shouldLog('debug')) return\n this.config.logger.debug(`[CardDB] Executing ${operationName}`, { variables })\n }\n\n private logResponse(operationName: string, duration: number): void {\n if (!this.config.logger || !this.config.shouldLog('info')) return\n this.config.logger.info(`[CardDB] ${operationName} completed in ${duration}ms`)\n }\n\n private logRateLimitRetry(operationName: string, retry: number, sleepTime: number): void {\n if (!this.config.logger || !this.config.shouldLog('warn')) return\n this.config.logger.warn(\n `[CardDB] Rate limited on ${operationName}, retry ${retry}/${this.config.maxRetries} after ${sleepTime}s`\n )\n }\n\n private logNetworkRetry(\n operationName: string,\n retry: number,\n delay: number,\n error: unknown\n ): void {\n if (!this.config.logger || !this.config.shouldLog('warn')) return\n const errorType = error instanceof Error ? error.name : 'Unknown'\n this.config.logger.warn(\n `[CardDB] ${errorType} on ${operationName}, retry ${retry}/${this.config.maxNetworkRetries} after ${delay}ms`\n )\n }\n\n private logError(message: string): void {\n if (!this.config.logger || !this.config.shouldLog('error')) return\n this.config.logger.error(`[CardDB] ${message}`)\n }\n}\n","/**\n * Cache utilities for CardDB client\n */\n\nimport type { Cache } from '@carddb/core'\n\n/**\n * Generate a cache key from components\n */\nexport function cacheKey(\n resource: string,\n method: string,\n params: Record<string, unknown>\n): string {\n const sortedParams = Object.entries(params)\n .filter(([, v]) => v !== undefined)\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([k, v]) => `${k}=${JSON.stringify(v)}`)\n .join('&')\n return `carddb:${resource}:${method}:${sortedParams}`\n}\n\n/**\n * Read from cache (handles both sync and async caches)\n */\nexport async function readCache<T>(cache: Cache, key: string): Promise<T | null> {\n const result = cache.get<T>(key)\n if (result instanceof Promise) {\n return result\n }\n return result\n}\n\n/**\n * Write to cache (handles both sync and async caches)\n */\nexport async function writeCache<T>(\n cache: Cache,\n key: string,\n value: T,\n ttl: number\n): Promise<void> {\n const result = cache.set(key, value, ttl)\n if (result instanceof Promise) {\n await result\n }\n}\n","/**\n * Base resource class with common functionality\n */\n\nimport type { ResourceType } from '@carddb/core'\nimport type { Configuration } from '../configuration.js'\nimport type { Connection } from '../connection.js'\nimport { cacheKey, readCache, writeCache } from '../cache.js'\n\nexport abstract class BaseResource {\n protected connection: Connection\n protected config: Configuration\n\n constructor(connection: Connection, config: Configuration) {\n this.connection = connection\n this.config = config\n }\n\n /**\n * Resolve publisher slug, using default if not provided\n */\n protected resolvePublisher(publisherSlug?: string): string {\n const resolved = this.config.resolvePublisher(publisherSlug)\n if (!resolved) {\n throw new Error('publisher_slug is required (no default configured)')\n }\n return resolved\n }\n\n /**\n * Resolve game key, using default if not provided\n */\n protected resolveGame(gameKey?: string): string {\n const resolved = this.config.resolveGame(gameKey)\n if (!resolved) {\n throw new Error('game_key is required (no default configured)')\n }\n return resolved\n }\n\n /**\n * Validate access to publisher/game\n */\n protected validateAccess(publisherSlug?: string, gameKey?: string): void {\n this.config.validateAccess(publisherSlug, gameKey)\n }\n\n /**\n * Execute a query with optional caching\n */\n protected async withCache<T>(\n key: string,\n resource: ResourceType,\n options: { cache?: boolean },\n fn: () => Promise<T>\n ): Promise<T> {\n const useCache = options.cache ?? !!this.config.cache\n const cache = this.config.cache\n\n if (!useCache || !cache) {\n return fn()\n }\n\n // Try to read from cache\n const cached = await readCache<T>(cache, key)\n if (cached !== null) {\n return cached\n }\n\n // Execute query and cache result\n const result = await fn()\n if (result !== null && result !== undefined) {\n const ttl = this.config.cacheTtlFor(resource)\n await writeCache(cache, key, result, ttl)\n }\n\n return result\n }\n\n /**\n * Generate a cache key\n */\n protected cacheKey(resource: string, method: string, params: Record<string, unknown>): string {\n return cacheKey(resource, method, params)\n }\n}\n","/**\n * Publishers resource for CardDB API\n */\n\nimport type { Publisher, Connection as ConnectionType } from '@carddb/core'\nimport { Collection, QueryBuilder } from '@carddb/core'\nimport { BaseResource } from './base.js'\nimport type { Configuration } from '../configuration.js'\nimport type { Connection } from '../connection.js'\n\nexport interface SearchPublishersOptions {\n /** Search term to filter publishers by name */\n search?: string\n /** Maximum number of results per page (default: 20, max: 100) */\n first?: number\n /** Cursor for pagination */\n after?: string\n /** Whether to use cache (defaults to client config) */\n cache?: boolean\n}\n\nexport interface GetPublisherOptions {\n /** Whether to use cache (defaults to client config) */\n cache?: boolean\n}\n\nexport class PublishersResource extends BaseResource {\n constructor(connection: Connection, config: Configuration) {\n super(connection, config)\n }\n\n /**\n * Search for publishers\n *\n * @example\n * const publishers = await client.publishers.search({ search: 'pokemon' })\n * for await (const publisher of publishers) {\n * console.log(publisher.name)\n * }\n */\n async search(options: SearchPublishersOptions = {}): Promise<Collection<Publisher>> {\n const { query, variables } = QueryBuilder.searchPublishers({\n search: options.search,\n first: options.first,\n after: options.after,\n })\n\n const key = this.cacheKey('publishers', 'search', variables)\n\n const data = await this.withCache(key, 'publishers', options, async () => {\n const result = await this.connection.execute(query, variables)\n return result['searchPublishers'] as ConnectionType<Publisher>\n })\n\n return new Collection(data, {\n nextPageLoader: async (cursor: string) => {\n return this.search({ ...options, after: cursor })\n },\n })\n }\n\n /**\n * Get a single publisher by slug or ID\n *\n * @example\n * const publisher = await client.publishers.get('pokemon')\n * const publisher = await client.publishers.get('550e8400-e29b-41d4-a716-446655440000')\n */\n async get(slugOrId: string, options: GetPublisherOptions = {}): Promise<Publisher | null> {\n const isUUID = this.isUUID(slugOrId)\n const key = this.cacheKey('publishers', 'get', { [isUUID ? 'id' : 'slug']: slugOrId })\n\n return this.withCache(key, 'publishers', options, async () => {\n if (isUUID) {\n const { query } = QueryBuilder.fetchPublisherById()\n const result = await this.connection.execute(query, { id: slugOrId })\n return (result['fetchPublisher'] as Publisher) ?? null\n } else {\n const { query } = QueryBuilder.fetchPublisherBySlug()\n const result = await this.connection.execute(query, { slug: slugOrId })\n return (result['fetchPublisher'] as Publisher) ?? null\n }\n })\n }\n\n /**\n * Get multiple publishers by slug\n *\n * @example\n * const publishers = await client.publishers.getMany(['pokemon', 'wizards'])\n */\n async getMany(slugs: string[], options: GetPublisherOptions = {}): Promise<Publisher[]> {\n if (slugs.length === 0) return []\n\n const key = this.cacheKey('publishers', 'getMany', { slugs })\n\n return this.withCache(key, 'publishers', options, async () => {\n const { query } = QueryBuilder.fetchPublishers()\n const result = await this.connection.execute(query, { slugs })\n return (result['fetchPublishers'] as Publisher[]) ?? []\n })\n }\n\n /**\n * Check if a string is a valid UUID\n */\n private isUUID(value: string): boolean {\n const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i\n return uuidRegex.test(value)\n }\n}\n","/**\n * Games resource for CardDB API\n */\n\nimport type {\n Game,\n GameCreateInput,\n GameScanRegion,\n GameUpdateInput,\n Connection as ConnectionType,\n} from '@carddb/core'\nimport { Collection, QueryBuilder } from '@carddb/core'\nimport { BaseResource } from './base.js'\nimport type { Configuration } from '../configuration.js'\nimport type { Connection } from '../connection.js'\n\nexport interface SearchGamesOptions {\n /** Publisher slug to filter games */\n publisherSlug?: string\n /** Search term to filter games by name */\n search?: string\n /** Maximum number of results per page (default: 20, max: 100) */\n first?: number\n /** Cursor for pagination */\n after?: string\n /** Whether to use cache (defaults to client config) */\n cache?: boolean\n}\n\nexport interface GetGameOptions {\n /** Whether to use cache (defaults to client config) */\n cache?: boolean\n}\n\nexport interface ListGamesOptions extends GetGameOptions {\n /** Maximum number of results per page */\n first?: number\n /** Cursor for pagination */\n after?: string\n /** Include archived games */\n includeArchived?: boolean\n}\n\nexport interface GetGameByKeyOptions extends GetGameOptions {\n /** Publisher ID for authenticated publisher-management lookup */\n publisherId?: string\n /** Publisher slug for authenticated publisher-management lookup */\n publisherSlug?: string\n /** Stable game key */\n gameKey: string\n}\n\nexport interface GetGameBySlugOptions extends GetGameOptions {\n /** Publisher ID for authenticated publisher-management lookup */\n publisherId?: string\n /** Publisher slug for authenticated publisher-management lookup */\n publisherSlug?: string\n /** Stable game slug, currently backed by metafyGameSlug */\n gameSlug: string\n}\n\nexport interface GetGameRegionsOptions extends GetGameOptions {\n /** Publisher slug, defaults to client defaultPublisher */\n publisherSlug?: string\n /** Stable game key, defaults to client defaultGame */\n gameKey?: string\n /** Include inactive publisher-managed scan regions */\n includeInactive?: boolean\n}\n\nexport class GamesResource extends BaseResource {\n constructor(connection: Connection, config: Configuration) {\n super(connection, config)\n }\n\n /**\n * List games for a publisher-management context.\n */\n async list(publisherId: string, options: ListGamesOptions = {}): Promise<Collection<Game>> {\n const { query, variables } = QueryBuilder.listGames({\n publisherId,\n first: options.first,\n after: options.after,\n includeArchived: options.includeArchived,\n })\n const key = this.cacheKey('games', 'list', variables)\n\n const data = await this.withCache(key, 'games', options, async () => {\n const result = await this.connection.execute(query, variables)\n return result['games'] as ConnectionType<Game>\n })\n\n return new Collection(data, {\n nextPageLoader: async (cursor: string) =>\n this.list(publisherId, { ...options, after: cursor }),\n })\n }\n\n /**\n * Get a publisher-managed game by stable key.\n */\n async getByKey(options: GetGameByKeyOptions): Promise<Game | null> {\n const key = this.cacheKey('games', 'getByKey', {\n publisherId: options.publisherId,\n publisherSlug: options.publisherSlug,\n gameKey: options.gameKey,\n })\n\n return this.withCache(key, 'games', options, async () => {\n const { query, variables } = QueryBuilder.game(options)\n const result = await this.connection.execute(query, variables)\n return (result['game'] as Game) ?? null\n })\n }\n\n /**\n * Get a publisher-managed game by slug.\n */\n async getBySlug(options: GetGameBySlugOptions): Promise<Game | null> {\n const key = this.cacheKey('games', 'getBySlug', {\n publisherId: options.publisherId,\n publisherSlug: options.publisherSlug,\n gameSlug: options.gameSlug,\n })\n\n return this.withCache(key, 'games', options, async () => {\n const { query, variables } = QueryBuilder.game(options)\n const result = await this.connection.execute(query, variables)\n return (result['game'] as Game) ?? null\n })\n }\n\n /**\n * Create a publisher-managed game. Requires a server-side secret credential.\n */\n async create(input: GameCreateInput): Promise<Game> {\n this.config.requireSecretCredential('games.create')\n\n const { query } = QueryBuilder.createGame()\n const result = await this.connection.execute(query, QueryBuilder.gameCreateVariables(input))\n return result['gameCreate'] as Game\n }\n\n /**\n * Update a publisher-managed game. Requires a server-side secret credential.\n */\n async update(id: string, input: GameUpdateInput): Promise<Game> {\n this.config.requireSecretCredential('games.update')\n\n const { query } = QueryBuilder.updateGame()\n const result = await this.connection.execute(query, QueryBuilder.gameUpdateVariables(id, input))\n return result['gameUpdate'] as Game\n }\n\n /**\n * Get publisher-defined game region metadata for scan-capable clients.\n */\n async getRegions(options: GetGameRegionsOptions = {}): Promise<GameScanRegion[]> {\n const publisherSlug = this.resolvePublisher(options.publisherSlug)\n const gameKey = this.resolveGame(options.gameKey)\n this.validateAccess(publisherSlug, gameKey)\n\n const variables = QueryBuilder.gameScanRegionsVariables(\n publisherSlug,\n gameKey,\n options.includeInactive\n )\n const key = this.cacheKey('games', 'getRegions', variables)\n\n return this.withCache(key, 'games', options, async () => {\n const { query } = QueryBuilder.gameScanRegions()\n const result = await this.connection.execute(query, variables)\n return (result['gameScanRegions'] as GameScanRegion[]) ?? []\n })\n }\n\n /**\n * Search for games\n *\n * @example\n * // Search all games\n * const games = await client.games.search({ search: 'trading card' })\n *\n * // Search games from a specific publisher\n * const games = await client.games.search({ publisherSlug: 'pokemon' })\n */\n async search(options: SearchGamesOptions = {}): Promise<Collection<Game>> {\n const publisherSlug = this.config.resolvePublisher(options.publisherSlug)\n\n // Validate access if publisher is specified\n if (publisherSlug) {\n this.validateAccess(publisherSlug)\n }\n\n const { query, variables } = QueryBuilder.searchGames({\n publisherSlug,\n search: options.search,\n first: options.first,\n after: options.after,\n })\n\n const key = this.cacheKey('games', 'search', variables)\n\n const data = await this.withCache(key, 'games', options, async () => {\n const result = await this.connection.execute(query, variables)\n return result['searchGames'] as ConnectionType<Game>\n })\n\n return new Collection(data, {\n nextPageLoader: async (cursor: string) => {\n return this.search({ ...options, after: cursor })\n },\n })\n }\n\n /**\n * Get a single game by ID\n *\n * @example\n * const game = await client.games.get('550e8400-e29b-41d4-a716-446655440000')\n */\n async get(id: string, options?: GetGameOptions): Promise<Game | null>\n\n /**\n * Get a single game by publisher slug and game key\n *\n * @example\n * const game = await client.games.get('pokemon', 'tcg')\n */\n async get(publisherSlug: string, gameKey: string, options?: GetGameOptions): Promise<Game | null>\n\n async get(\n idOrPublisherSlug: string,\n gameKeyOrOptions?: string | GetGameOptions,\n options?: GetGameOptions\n ): Promise<Game | null> {\n // Determine if called with ID or with publisherSlug + gameKey\n if (typeof gameKeyOrOptions === 'string') {\n // Called as get(publisherSlug, gameKey, options?)\n const publisherSlug = idOrPublisherSlug\n const gameKey = gameKeyOrOptions\n const opts = options ?? {}\n\n this.validateAccess(publisherSlug, gameKey)\n\n const key = this.cacheKey('games', 'getByKeys', { publisherSlug, gameKey })\n\n return this.withCache(key, 'games', opts, async () => {\n const { query } = QueryBuilder.fetchGameByKeys()\n const result = await this.connection.execute(query, { publisherSlug, gameKey })\n return (result['fetchGame'] as Game) ?? null\n })\n } else {\n // Called as get(id, options?)\n const id = idOrPublisherSlug\n const opts = gameKeyOrOptions ?? {}\n\n const key = this.cacheKey('games', 'get', { id })\n\n return this.withCache(key, 'games', opts, async () => {\n const { query } = QueryBuilder.fetchGameById()\n const result = await this.connection.execute(query, { id })\n return (result['fetchGame'] as Game) ?? null\n })\n }\n }\n\n /**\n * Get multiple games by ID\n *\n * @example\n * const games = await client.games.getMany(['id1', 'id2', 'id3'])\n */\n async getMany(ids: string[], options: GetGameOptions = {}): Promise<Game[]> {\n if (ids.length === 0) return []\n\n const key = this.cacheKey('games', 'getMany', { ids })\n\n return this.withCache(key, 'games', options, async () => {\n const { query } = QueryBuilder.fetchGames()\n const result = await this.connection.execute(query, { ids })\n return (result['fetchGames'] as Game[]) ?? []\n })\n }\n}\n","/**\n * Datasets resource for CardDB API\n */\n\nimport type {\n Connection as ConnectionType,\n Dataset,\n DatasetFilterValueConnection,\n DatasetSchema,\n} from '@carddb/core'\nimport { Collection, QueryBuilder } from '@carddb/core'\nimport { BaseResource } from './base.js'\nimport type { Configuration } from '../configuration.js'\nimport type { Connection } from '../connection.js'\n\nexport interface SearchDatasetsOptions {\n /** Publisher slug to filter datasets */\n publisherSlug?: string\n /** Game key to filter datasets (requires publisherSlug) */\n gameKey?: string\n /** Search term to filter datasets by name */\n search?: string\n /** Dataset purpose to filter by */\n purpose?: 'DATA' | 'RULES'\n /** Maximum number of results per page (default: 20, max: 100) */\n first?: number\n /** Cursor for pagination */\n after?: string\n /** Whether to use cache (defaults to client config) */\n cache?: boolean\n}\n\nexport interface GetDatasetOptions {\n /** Whether to use cache (defaults to client config) */\n cache?: boolean\n}\n\nexport interface ListDatasetsOptions extends GetDatasetOptions {\n /** Game ID to filter datasets */\n gameId?: string\n /** Include archived datasets */\n includeArchived?: boolean\n /** Dataset purpose to filter by */\n purpose?: 'DATA' | 'RULES'\n /** Maximum number of results per page */\n first?: number\n /** Cursor for pagination */\n after?: string\n}\n\nexport interface GetDatasetByKeyOptions extends GetDatasetOptions {\n /** Optional publisher ID ownership check */\n publisherId?: string\n /** Game ID for stable dataset-key lookup */\n gameId: string\n /** Stable dataset key */\n datasetKey: string\n}\n\nexport interface DatasetFilterValuesOptions extends GetDatasetOptions {\n /** Optional case-insensitive search within values */\n search?: string\n /** Include per-value record counts. More expensive than listing values only. */\n includeCounts?: boolean\n /** Maximum number of values per field (default: 50, max: 500) */\n first?: number\n /** Cursor for pagination. Applies to each requested field. */\n after?: string\n}\n\nexport class DatasetsResource extends BaseResource {\n constructor(connection: Connection, config: Configuration) {\n super(connection, config)\n }\n\n /**\n * List datasets for a publisher-management context.\n */\n async list(publisherId: string, options: ListDatasetsOptions = {}): Promise<Collection<Dataset>> {\n const { query, variables } = QueryBuilder.listDatasets({\n publisherId,\n gameId: options.gameId,\n includeArchived: options.includeArchived,\n purpose: options.purpose,\n first: options.first,\n after: options.after,\n })\n const key = this.cacheKey('datasets', 'list', variables)\n\n const data = await this.withCache(key, 'datasets', options, async () => {\n const result = await this.connection.execute(query, variables)\n return result['datasets'] as ConnectionType<Dataset>\n })\n\n return new Collection(data, {\n nextPageLoader: async (cursor: string) =>\n this.list(publisherId, { ...options, after: cursor }),\n })\n }\n\n /**\n * Get a dataset by game ID and stable dataset key.\n */\n async getByKey(options: GetDatasetByKeyOptions): Promise<Dataset | null> {\n const key = this.cacheKey('datasets', 'getByKey', {\n publisherId: options.publisherId,\n gameId: options.gameId,\n datasetKey: options.datasetKey,\n })\n\n return this.withCache(key, 'datasets', options, async () => {\n const { query, variables } = QueryBuilder.dataset(options)\n const result = await this.connection.execute(query, variables)\n return (result['dataset'] as Dataset) ?? null\n })\n }\n\n /**\n * Fetch only the schema portion for a dataset.\n */\n async getSchema(idOrOptions: string | GetDatasetByKeyOptions): Promise<DatasetSchema | null> {\n const dataset =\n typeof idOrOptions === 'string'\n ? await this.withCache(\n this.cacheKey('datasets', 'getSchema', { id: idOrOptions }),\n 'datasets',\n {},\n async () => {\n const { query, variables } = QueryBuilder.dataset({ id: idOrOptions })\n const result = await this.connection.execute(query, variables)\n return (result['dataset'] as Dataset) ?? null\n }\n )\n : await this.getByKey(idOrOptions)\n return dataset?.schema ?? null\n }\n\n /**\n * Search for datasets\n *\n * @example\n * // Search all datasets\n * const datasets = await client.datasets.search({ search: 'cards' })\n *\n * // Search datasets from a specific publisher and game\n * const datasets = await client.datasets.search({\n * publisherSlug: 'pokemon',\n * gameKey: 'tcg'\n * })\n */\n async search(options: SearchDatasetsOptions = {}): Promise<Collection<Dataset>> {\n const publisherSlug = this.config.resolvePublisher(options.publisherSlug)\n const gameKey = this.config.resolveGame(options.gameKey)\n\n // Validate access if specified\n if (publisherSlug) {\n this.validateAccess(publisherSlug, gameKey)\n }\n\n const { query, variables } = QueryBuilder.searchDatasets({\n publisherSlug,\n gameKey,\n search: options.search,\n purpose: options.purpose,\n first: options.first,\n after: options.after,\n })\n\n const key = this.cacheKey('datasets', 'search', variables)\n\n const data = await this.withCache(key, 'datasets', options, async () => {\n const result = await this.connection.execute(query, variables)\n return result['searchDatasets'] as ConnectionType<Dataset>\n })\n\n return new Collection(data, {\n nextPageLoader: async (cursor: string) => {\n return this.search({ ...options, after: cursor })\n },\n })\n }\n\n /**\n * Get a single dataset by ID (includes schema)\n *\n * @example\n * const dataset = await client.datasets.get('550e8400-e29b-41d4-a716-446655440000')\n */\n async get(id: string, options?: GetDatasetOptions): Promise<Dataset | null>\n\n /**\n * Get a single dataset by publisher slug, game key, and dataset key (includes schema)\n *\n * @example\n * const dataset = await client.datasets.get('pokemon', 'tcg', 'cards')\n */\n async get(\n publisherSlug: string,\n gameKey: string,\n datasetKey: string,\n options?: GetDatasetOptions\n ): Promise<Dataset | null>\n\n async get(\n idOrPublisherSlug: string,\n gameKeyOrOptions?: string | GetDatasetOptions,\n datasetKey?: string,\n options?: GetDatasetOptions\n ): Promise<Dataset | null> {\n // Determine if called with ID or with publisherSlug + gameKey + datasetKey\n if (typeof gameKeyOrOptions === 'string' && typeof datasetKey === 'string') {\n // Called as get(publisherSlug, gameKey, datasetKey, options?)\n const publisherSlug = idOrPublisherSlug\n const gameKey = gameKeyOrOptions\n const opts = options ?? {}\n\n this.validateAccess(publisherSlug, gameKey)\n\n const key = this.cacheKey('datasets', 'getByKeys', { publisherSlug, gameKey, datasetKey })\n\n return this.withCache(key, 'datasets', opts, async () => {\n const { query } = QueryBuilder.fetchDatasetByKeys()\n const result = await this.connection.execute(query, { publisherSlug, gameKey, datasetKey })\n return (result['fetchDataset'] as Dataset) ?? null\n })\n } else {\n // Called as get(id, options?)\n const id = idOrPublisherSlug\n const opts = (gameKeyOrOptions as GetDatasetOptions) ?? {}\n\n const key = this.cacheKey('datasets', 'get', { id })\n\n return this.withCache(key, 'datasets', opts, async () => {\n const { query } = QueryBuilder.fetchDatasetById()\n const result = await this.connection.execute(query, { id })\n return (result['fetchDataset'] as Dataset) ?? null\n })\n }\n }\n\n /**\n * Get multiple datasets by ID\n *\n * @example\n * const datasets = await client.datasets.getMany(['id1', 'id2', 'id3'])\n */\n async getMany(ids: string[], options: GetDatasetOptions = {}): Promise<Dataset[]> {\n if (ids.length === 0) return []\n\n const key = this.cacheKey('datasets', 'getMany', { ids })\n\n return this.withCache(key, 'datasets', options, async () => {\n const { query } = QueryBuilder.fetchDatasets()\n const result = await this.connection.execute(query, { ids })\n return (result['fetchDatasets'] as Dataset[]) ?? []\n })\n }\n\n /**\n * Get distinct filter values for one or more filterable fields.\n *\n * @example\n * const values = await client.datasets.filterValues('dataset-id', ['name', 'colors'], {\n * includeCounts: true,\n * first: 500,\n * })\n */\n async filterValues(\n id: string,\n fields: string[],\n options?: DatasetFilterValuesOptions\n ): Promise<DatasetFilterValueConnection[]>\n\n /**\n * Get distinct filter values for a dataset by publisher/game/dataset keys.\n */\n async filterValues(\n publisherSlug: string,\n gameKey: string,\n datasetKey: string,\n fields: string[],\n options?: DatasetFilterValuesOptions\n ): Promise<DatasetFilterValueConnection[]>\n\n async filterValues(\n idOrPublisherSlug: string,\n fieldsOrGameKey: string[] | string,\n datasetKeyOrFields?: string | string[] | DatasetFilterValuesOptions,\n fieldsOrOptions?: string[] | DatasetFilterValuesOptions,\n maybeOptions?: DatasetFilterValuesOptions\n ): Promise<DatasetFilterValueConnection[]> {\n let queryParams:\n | { id: string; fields: string[] }\n | { publisherSlug: string; gameKey: string; datasetKey: string; fields: string[] }\n let options: DatasetFilterValuesOptions\n\n if (Array.isArray(fieldsOrGameKey)) {\n queryParams = { id: idOrPublisherSlug, fields: fieldsOrGameKey }\n options = (datasetKeyOrFields as DatasetFilterValuesOptions | undefined) ?? {}\n } else {\n queryParams = {\n publisherSlug: idOrPublisherSlug,\n gameKey: fieldsOrGameKey,\n datasetKey: datasetKeyOrFields as string,\n fields: fieldsOrOptions as string[],\n }\n options = maybeOptions ?? {}\n this.validateAccess(queryParams.publisherSlug, queryParams.gameKey)\n }\n\n const { query, variables } = QueryBuilder.fetchDatasetFilterValues({\n ...queryParams,\n search: options.search,\n includeCounts: options.includeCounts,\n first: options.first,\n after: options.after,\n })\n const key = this.cacheKey('datasets', 'filterValues', variables)\n\n return this.withCache(key, 'datasets', options, async () => {\n const result = await this.connection.execute(query, variables)\n const dataset = result['fetchDataset'] as { filterValues?: DatasetFilterValueConnection[] } | null\n return dataset?.filterValues ?? []\n })\n }\n}\n","/**\n * Decks resource for CardDB API\n */\n\nimport type {\n AppDecksFilterInput,\n Connection as ConnectionType,\n DatasetRecord,\n Deck,\n DeckAPIApplicationAccess,\n DeckAPIApplicationAccessGrantInput,\n DeckClaimInput,\n DeckCollaborator,\n DeckCollaboratorRole,\n DeckCopyInput,\n DeckCopyPayload,\n DeckCreateInput,\n DeckDiff,\n DeckEntriesReplaceInput,\n DeckEntriesReplacePayload,\n DeckEntryAddInput,\n DeckEntryMutationPayload,\n DeckEntryReorderInput,\n DeckEntryReorderPayload,\n DeckEntryUpdateInput,\n DeckExportFormat,\n DeckExportPayload,\n DeckHydrateEntriesInput,\n DeckHydrateEntriesPayload,\n DeckImportFormatCreateInput,\n DeckImportFormatDefinition,\n DeckImportFormatTestInput,\n DeckImportFormatTestPayload,\n DeckImportFormatUpdateInput,\n DeckImportInput,\n DeckImportPayload,\n DeckOwnershipTransferPayload,\n DeckPublishedVersionSelector,\n DeckPublishInput,\n DeckPublishPayload,\n DeckReadState,\n DeckRemoveInvalidEntriesInput,\n DeckSectionDefinition,\n DeckTokenExchangeInput,\n DeckTokenExchangePayload,\n DeckTokenIssuer,\n DeckTokenIssuerCreateInput,\n DeckTransferOwnershipInput,\n DeckUpsertByExternalRefInput,\n DeckUpsertByExternalRefPayload,\n DeckUpdateInput,\n DeckValidateInput,\n DeckValidation,\n DeckVersion,\n HydratedDeckEntry,\n HydrateDeckEntryInput,\n PublicDecksFilterInput,\n ViewerDecksFilterInput,\n} from '@carddb/core'\nimport { Collection, QueryBuilder } from '@carddb/core'\nimport { BaseResource } from './base.js'\nimport type { Configuration } from '../configuration.js'\nimport type { Connection } from '../connection.js'\n\nexport interface ListDecksOptions {\n /** Maximum number of results per page */\n first?: number\n /** Cursor for pagination */\n after?: string\n /** Include archived decks in owner lists */\n includeArchived?: boolean\n /** Whether to use cache (defaults to client config) */\n cache?: boolean\n}\n\nexport interface ListViewerDecksOptions extends ListDecksOptions {\n filter?: ViewerDecksFilterInput\n}\n\nexport interface ListAppDecksOptions extends ListDecksOptions {\n filter?: AppDecksFilterInput\n}\n\nexport interface ListPublicDecksOptions extends Omit<ListDecksOptions, 'includeArchived'> {\n filter?: PublicDecksFilterInput\n}\n\nexport interface FetchDeckOptions {\n /** Whether to use cache (defaults to client config) */\n cache?: boolean\n}\n\nexport interface DeckReadOptions extends FetchDeckOptions {\n /** Explicitly choose mutable draft data or immutable published data. */\n readState: DeckReadState\n /** Optional published version selector. Only valid with readState: 'PUBLISHED'. */\n version?: DeckPublishedVersionSelector\n}\n\nexport type FetchDeckByExternalRefOptions = FetchDeckOptions\n\nexport type DeckReadByExternalRefOptions = DeckReadOptions\n\nexport type FetchDeckBySlugOptions = FetchDeckOptions\n\nexport type ListDeckVersionsOptions = ListDecksOptions\n\nexport type ListDeckCollaboratorsOptions = FetchDeckOptions\n\nexport interface ListDeckApiApplicationAccessesOptions extends FetchDeckOptions {\n includeRevoked?: boolean\n}\n\nexport interface ListMyDeckApiApplicationAccessesOptions extends FetchDeckOptions {\n applicationId?: string\n}\n\nexport type ListDeckImportFormatsOptions = ListDecksOptions\n\nexport interface DeckSectionDefinitionsOptions extends FetchDeckOptions {\n publisherSlug?: string\n gameKey?: string\n gameId?: string\n rulesetKey?: string\n rulesetVersionId?: string\n}\n\nexport interface HydrateDeckEntriesOptions {\n /** Publisher slug (uses default if configured) */\n publisherSlug?: string\n /** Game key (uses default if configured) */\n gameKey?: string\n /** Dataset key containing the deck entries */\n datasetKey: string\n /** Field key used to map returned records to input identifiers */\n identifierField?: string\n /** Deck entries to hydrate */\n entries: HydrateDeckEntryInput[]\n /** Whether to use cache (defaults to client config) */\n cache?: boolean\n}\n\nexport class DecksResource extends BaseResource {\n constructor(connection: Connection, config: Configuration) {\n super(connection, config)\n }\n\n /**\n * Fetch a hosted deck by CardDB UUID.\n */\n async fetch(id: string, options: FetchDeckOptions = {}): Promise<Deck | null> {\n const key = this.cacheKey('decks', 'fetch', { id })\n\n return this.withCache(key, 'decks', options, async () => {\n const { query } = QueryBuilder.fetchDeckById()\n const result = await this.connection.execute(query, { id })\n return (result['fetchDeck'] as Deck) ?? null\n })\n }\n\n /**\n * Fetch a deck by UUID using the ownership-aware `deck` API.\n */\n async get(id: string, options: DeckReadOptions): Promise<Deck | null> {\n const variables = QueryBuilder.deckReadVariables(id, options.readState, options.version)\n const key = this.cacheKey('decks', 'get', variables)\n\n return this.withCache(key, 'decks', options, async () => {\n const { query } = QueryBuilder.deckById()\n const result = await this.connection.execute(query, variables)\n return (result['deck'] as Deck) ?? null\n })\n }\n\n /**\n * Fetch mutable draft data for a deck by UUID.\n */\n async getDraft(id: string, options: FetchDeckOptions = {}): Promise<Deck | null> {\n return this.get(id, { ...options, readState: 'DRAFT' })\n }\n\n /**\n * Fetch immutable published data for a deck by UUID.\n */\n async getPublished(\n id: string,\n options: FetchDeckOptions & { version?: DeckPublishedVersionSelector } = {}\n ): Promise<Deck | null> {\n return this.get(id, { ...options, readState: 'PUBLISHED', version: options.version })\n }\n\n /**\n * Fetch one deck owned by the current account or API application.\n */\n async fetchMine(id: string, options: FetchDeckOptions = {}): Promise<Deck | null> {\n const key = this.cacheKey('decks', 'fetchMine', { id })\n\n return this.withCache(key, 'decks', options, async () => {\n const { query } = QueryBuilder.myDeck()\n const result = await this.connection.execute(query, { id })\n return (result['myDeck'] as Deck) ?? null\n })\n }\n\n /**\n * Fetch a hosted deck by canonical or historical slug.\n */\n async fetchBySlug(\n publisherSlug: string,\n gameKey: string,\n slug: string,\n options: FetchDeckBySlugOptions = {}\n ): Promise<Deck | null> {\n const key = this.cacheKey('decks', 'fetchBySlug', { publisherSlug, gameKey, slug })\n\n return this.withCache(key, 'decks', options, async () => {\n const { query } = QueryBuilder.fetchDeckBySlug()\n const result = await this.connection.execute(query, { publisherSlug, gameKey, slug })\n return (result['fetchDeckBySlug'] as Deck) ?? null\n })\n }\n\n /**\n * Fetch by slug using the ownership-aware `deckBySlug` API.\n */\n async getBySlug(\n publisherSlug: string,\n gameKey: string,\n slug: string,\n options: FetchDeckBySlugOptions = {}\n ): Promise<Deck | null> {\n const key = this.cacheKey('decks', 'getBySlug', { publisherSlug, gameKey, slug })\n\n return this.withCache(key, 'decks', options, async () => {\n const { query } = QueryBuilder.deckBySlug()\n const result = await this.connection.execute(query, { publisherSlug, gameKey, slug })\n return (result['deckBySlug'] as Deck) ?? null\n })\n }\n\n /**\n * Fetch a hosted deck by external reference for the current API application.\n */\n async fetchByExternalRef(\n externalRef: string,\n options: FetchDeckByExternalRefOptions = {}\n ): Promise<Deck | null> {\n const key = this.cacheKey('decks', 'fetchByExternalRef', { externalRef })\n\n return this.withCache(key, 'decks', options, async () => {\n const { query } = QueryBuilder.fetchDeckByExternalRef()\n const result = await this.connection.execute(query, { externalRef })\n return (result['fetchDeckByExternalRef'] as Deck) ?? null\n })\n }\n\n /**\n * Fetch by external reference using the ownership-aware `deckByExternalRef` API.\n */\n async getByExternalRef(\n externalRef: string,\n options: DeckReadByExternalRefOptions\n ): Promise<Deck | null> {\n const variables = QueryBuilder.deckExternalRefReadVariables(\n externalRef,\n options.readState,\n options.version\n )\n const key = this.cacheKey('decks', 'getByExternalRef', variables)\n\n return this.withCache(key, 'decks', options, async () => {\n const { query } = QueryBuilder.deckByExternalRef()\n const result = await this.connection.execute(query, variables)\n return (result['deckByExternalRef'] as Deck) ?? null\n })\n }\n\n /**\n * Fetch mutable draft data by API-application external reference.\n */\n async getDraftByExternalRef(\n externalRef: string,\n options: FetchDeckOptions = {}\n ): Promise<Deck | null> {\n return this.getByExternalRef(externalRef, { ...options, readState: 'DRAFT' })\n }\n\n /**\n * Fetch immutable published data by API-application external reference.\n */\n async getPublishedByExternalRef(\n externalRef: string,\n options: FetchDeckOptions & { version?: DeckPublishedVersionSelector } = {}\n ): Promise<Deck | null> {\n return this.getByExternalRef(externalRef, {\n ...options,\n readState: 'PUBLISHED',\n version: options.version,\n })\n }\n\n /**\n * List decks owned by the current account or API application.\n */\n async listMine(options: ListDecksOptions = {}): Promise<Collection<Deck>> {\n const { query, variables } = QueryBuilder.listMyDecks({\n first: options.first,\n after: options.after,\n includeArchived: options.includeArchived,\n })\n const key = this.cacheKey('decks', 'listMine', variables)\n\n const data = await this.withCache(key, 'decks', options, async () => {\n const result = await this.connection.execute(query, variables)\n return result['myDecks'] as ConnectionType<Deck>\n })\n\n return new Collection(data, {\n nextPageLoader: async (cursor: string) => this.listMine({ ...options, after: cursor }),\n })\n }\n\n /**\n * List decks owned by the current account or OAuth grant.\n */\n async listViewer(options: ListViewerDecksOptions = {}): Promise<Collection<Deck>> {\n const { query, variables } = QueryBuilder.viewerDecks({\n filter: options.filter,\n first: options.first,\n after: options.after,\n })\n const key = this.cacheKey('decks', 'listViewer', variables)\n\n const data = await this.withCache(key, 'decks', options, async () => {\n const result = await this.connection.execute(query, variables)\n return result['viewerDecks'] as ConnectionType<Deck>\n })\n\n return new Collection(data, {\n nextPageLoader: async (cursor: string) => this.listViewer({ ...options, after: cursor }),\n })\n }\n\n /**\n * List app-owned decks for the current secret-key API application.\n */\n async listApp(options: ListAppDecksOptions = {}): Promise<Collection<Deck>> {\n this.config.requireSecretCredential('decks.listApp')\n\n const { query, variables } = QueryBuilder.appDecks({\n filter: options.filter,\n first: options.first,\n after: options.after,\n })\n const key = this.cacheKey('decks', 'listApp', variables)\n\n const data = await this.withCache(key, 'decks', options, async () => {\n const result = await this.connection.execute(query, variables)\n return result['appDecks'] as ConnectionType<Deck>\n })\n\n return new Collection(data, {\n nextPageLoader: async (cursor: string) => this.listApp({ ...options, after: cursor }),\n })\n }\n\n /**\n * List published live decks eligible for public discovery.\n */\n async listPublic(options: ListPublicDecksOptions = {}): Promise<Collection<Deck>> {\n const { query, variables } = QueryBuilder.publicDecks({\n filter: options.filter,\n first: options.first,\n after: options.after,\n })\n const key = this.cacheKey('decks', 'listPublic', variables)\n\n const data = await this.withCache(key, 'decks', options, async () => {\n const result = await this.connection.execute(query, variables)\n return result['publicDecks'] as ConnectionType<Deck>\n })\n\n return new Collection(data, {\n nextPageLoader: async (cursor: string) => this.listPublic({ ...options, after: cursor }),\n })\n }\n\n /**\n * Fetch one immutable published deck version.\n */\n async fetchVersion(id: string, options: FetchDeckOptions = {}): Promise<DeckVersion | null> {\n const key = this.cacheKey('decks', 'fetchVersion', { id })\n\n return this.withCache(key, 'decks', options, async () => {\n const { query } = QueryBuilder.deckVersion()\n const result = await this.connection.execute(query, { id })\n return (result['deckVersion'] as DeckVersion) ?? null\n })\n }\n\n /**\n * List immutable published versions for a deck.\n */\n async listVersions(\n deckId: string,\n options: ListDeckVersionsOptions = {}\n ): Promise<Collection<DeckVersion>> {\n const { query, variables: pageVariables } = QueryBuilder.deckVersions({\n first: options.first,\n after: options.after,\n })\n const variables = { deckId, ...pageVariables }\n const key = this.cacheKey('decks', 'listVersions', variables)\n\n const data = await this.withCache(key, 'decks', options, async () => {\n const result = await this.connection.execute(query, variables)\n return result['deckVersions'] as ConnectionType<DeckVersion>\n })\n\n return new Collection(data, {\n nextPageLoader: async (cursor: string) =>\n this.listVersions(deckId, { ...options, after: cursor }),\n })\n }\n\n /**\n * Compare the current draft against the latest published version.\n */\n async draftDiff(id: string, options: FetchDeckOptions = {}): Promise<DeckDiff> {\n const key = this.cacheKey('decks', 'draftDiff', { id })\n\n return this.withCache(key, 'decks', options, async () => {\n const { query } = QueryBuilder.deckDraftDiff()\n const result = await this.connection.execute(query, { id })\n return result['deckDraftDiff'] as DeckDiff\n })\n }\n\n /**\n * Compare any two readable immutable deck versions from the same deck.\n */\n async versionDiff(\n fromVersionId: string,\n toVersionId: string,\n options: FetchDeckOptions = {}\n ): Promise<DeckDiff> {\n const variables = QueryBuilder.deckVersionDiffVariables(fromVersionId, toVersionId)\n const key = this.cacheKey('decks', 'versionDiff', variables)\n\n return this.withCache(key, 'decks', options, async () => {\n const { query } = QueryBuilder.deckVersionDiff()\n const result = await this.connection.execute(query, variables)\n return result['deckVersionDiff'] as DeckDiff\n })\n }\n\n /**\n * Validate a draft against current or explicitly requested immutable rules/data.\n */\n async validate(\n id: string,\n input?: DeckValidateInput,\n options: FetchDeckOptions = {}\n ): Promise<DeckValidation> {\n const variables = QueryBuilder.deckValidateVariables(id, input)\n const key = this.cacheKey('decks', 'validate', variables)\n\n return this.withCache(key, 'decks', options, async () => {\n const { query } = QueryBuilder.deckValidate()\n const result = await this.connection.execute(query, variables)\n return result['deckValidate'] as DeckValidation\n })\n }\n\n /**\n * Hydrate unpersisted deck entries against a stored deck's game without mutating the deck.\n */\n async hydrateDeckEntries(\n input: DeckHydrateEntriesInput,\n options: FetchDeckOptions = {}\n ): Promise<DeckHydrateEntriesPayload> {\n const variables = QueryBuilder.deckHydrateEntriesVariables(input)\n const key = this.cacheKey('decks', 'hydrateDeckEntries', variables)\n\n return this.withCache(key, 'decks', options, async () => {\n const { query } = QueryBuilder.deckHydrateEntries()\n const result = await this.connection.execute(query, variables)\n return result['deckHydrateEntries'] as DeckHydrateEntriesPayload\n })\n }\n\n /**\n * Export a readable deck representation in a deterministic text format.\n */\n async exportDeck(\n id: string,\n format: DeckExportFormat = 'SIMPLE_TEXT',\n options: FetchDeckOptions = {}\n ): Promise<DeckExportPayload> {\n const variables = QueryBuilder.deckExportVariables(id, format)\n const key = this.cacheKey('decks', 'exportDeck', variables)\n\n return this.withCache(key, 'decks', options, async () => {\n const { query } = QueryBuilder.deckExport()\n const result = await this.connection.execute(query, variables)\n return result['deckExport'] as DeckExportPayload\n })\n }\n\n /**\n * Resolve current or historical ruleset section definitions.\n */\n async sectionDefinitions(\n options: DeckSectionDefinitionsOptions = {}\n ): Promise<DeckSectionDefinition[]> {\n const { query, variables } = QueryBuilder.deckSectionDefinitions({\n publisherSlug: options.publisherSlug,\n gameKey: options.gameKey,\n gameId: options.gameId,\n rulesetKey: options.rulesetKey,\n rulesetVersionId: options.rulesetVersionId,\n })\n const key = this.cacheKey('decks', 'sectionDefinitions', variables)\n\n return this.withCache(key, 'decks', options, async () => {\n const result = await this.connection.execute(query, variables)\n return result['deckSectionDefinitions'] as DeckSectionDefinition[]\n })\n }\n\n /**\n * List collaborators for a deck.\n */\n async listCollaborators(\n deckId: string,\n options: ListDeckCollaboratorsOptions = {}\n ): Promise<DeckCollaborator[]> {\n const key = this.cacheKey('decks', 'listCollaborators', { deckId })\n\n return this.withCache(key, 'decks', options, async () => {\n const { query } = QueryBuilder.deckCollaborators()\n const result = await this.connection.execute(query, { deckId })\n return result['deckCollaborators'] as DeckCollaborator[]\n })\n }\n\n /**\n * List API applications with explicit access to one owned deck.\n */\n async listApiApplicationAccesses(\n deckId: string,\n options: ListDeckApiApplicationAccessesOptions = {}\n ): Promise<DeckAPIApplicationAccess[]> {\n const variables = QueryBuilder.deckApiApplicationAccessesVariables(\n deckId,\n options.includeRevoked\n )\n const key = this.cacheKey('decks', 'listApiApplicationAccesses', variables)\n\n return this.withCache(key, 'decks', options, async () => {\n const { query } = QueryBuilder.deckApiApplicationAccesses()\n const result = await this.connection.execute(query, variables)\n return result['deckApiApplicationAccesses'] as DeckAPIApplicationAccess[]\n })\n }\n\n /**\n * List selected-deck grants for the current account.\n */\n async listMyApiApplicationAccesses(\n options: ListMyDeckApiApplicationAccessesOptions = {}\n ): Promise<DeckAPIApplicationAccess[]> {\n const variables = QueryBuilder.myDeckApiApplicationAccessesVariables(options.applicationId)\n const key = this.cacheKey('decks', 'listMyApiApplicationAccesses', variables)\n\n return this.withCache(key, 'decks', options, async () => {\n const { query } = QueryBuilder.myDeckApiApplicationAccesses()\n const result = await this.connection.execute(query, variables)\n return result['myDeckApiApplicationAccesses'] as DeckAPIApplicationAccess[]\n })\n }\n\n /**\n * Create a hosted deck.\n */\n async create(input: DeckCreateInput): Promise<Deck> {\n const { query } = QueryBuilder.createDeck()\n const variables = QueryBuilder.deckCreateVariables(input)\n const result = await this.connection.execute(query, variables)\n return result['deckCreate'] as Deck\n }\n\n /**\n * Update a hosted deck.\n */\n async update(id: string, input: DeckUpdateInput): Promise<Deck> {\n const { query } = QueryBuilder.updateDeck()\n const variables = QueryBuilder.deckUpdateVariables(id, input)\n const result = await this.connection.execute(query, variables)\n return result['deckUpdate'] as Deck\n }\n\n /**\n * Update deck-level metadata without mutating entries.\n */\n async updateMetadata(id: string, input: DeckUpdateInput): Promise<Deck> {\n return this.update(id, input)\n }\n\n /**\n * Create or replace a draft by API-application external reference.\n */\n async upsertByExternalRef(\n input: DeckUpsertByExternalRefInput\n ): Promise<DeckUpsertByExternalRefPayload> {\n this.config.requireSecretCredential('decks.upsertByExternalRef')\n\n const { query } = QueryBuilder.upsertDeckByExternalRef()\n const variables = QueryBuilder.deckUpsertByExternalRefVariables(input)\n const result = await this.connection.execute(query, variables)\n return result['deckUpsertByExternalRef'] as DeckUpsertByExternalRefPayload\n }\n\n /**\n * Claim an app-owned deck into the consenting OAuth user's account.\n */\n async claim(id: string, input: DeckClaimInput): Promise<DeckOwnershipTransferPayload> {\n const { query } = QueryBuilder.claimDeck()\n const variables = QueryBuilder.deckClaimVariables(id, input)\n const result = await this.connection.execute(query, variables)\n return result['deckClaim'] as DeckOwnershipTransferPayload\n }\n\n /**\n * Transfer a deck to another account.\n */\n async transferOwnership(\n id: string,\n input: DeckTransferOwnershipInput\n ): Promise<DeckOwnershipTransferPayload> {\n const { query } = QueryBuilder.transferDeckOwnership()\n const variables = QueryBuilder.deckTransferOwnershipVariables(id, input)\n const result = await this.connection.execute(query, variables)\n return result['deckTransferOwnership'] as DeckOwnershipTransferPayload\n }\n\n /**\n * Copy a deck into the current principal's ownership namespace.\n */\n async copy(id: string, input: DeckCopyInput): Promise<DeckCopyPayload> {\n const { query } = QueryBuilder.copyDeck()\n const variables = QueryBuilder.deckCopyVariables(id, input)\n const result = await this.connection.execute(query, variables)\n return result['deckCopy'] as DeckCopyPayload\n }\n\n /**\n * Add one entry to a deck draft.\n */\n async addEntry(input: DeckEntryAddInput): Promise<DeckEntryMutationPayload> {\n const { query } = QueryBuilder.addDeckEntry()\n const variables = QueryBuilder.deckEntryAddVariables(input)\n const result = await this.connection.execute(query, variables)\n return result['deckEntryAdd'] as DeckEntryMutationPayload\n }\n\n /**\n * Update one stable deck entry.\n */\n async updateEntry(id: string, input: DeckEntryUpdateInput): Promise<DeckEntryMutationPayload> {\n const { query } = QueryBuilder.updateDeckEntry()\n const variables = QueryBuilder.deckEntryUpdateVariables(id, input)\n const result = await this.connection.execute(query, variables)\n return result['deckEntryUpdate'] as DeckEntryMutationPayload\n }\n\n /**\n * Remove one stable deck entry.\n */\n async removeEntry(id: string, expectedDraftRevision: number): Promise<DeckEntryMutationPayload> {\n const { query } = QueryBuilder.removeDeckEntry()\n const variables = QueryBuilder.deckEntryRemoveVariables(id, expectedDraftRevision)\n const result = await this.connection.execute(query, variables)\n return result['deckEntryRemove'] as DeckEntryMutationPayload\n }\n\n /**\n * Reorder deck entries within or across sections.\n */\n async reorderEntries(\n deckId: string,\n input: DeckEntryReorderInput\n ): Promise<DeckEntryReorderPayload> {\n const { query } = QueryBuilder.reorderDeckEntries()\n const variables = QueryBuilder.deckEntryReorderVariables(deckId, input)\n const result = await this.connection.execute(query, variables)\n return result['deckEntryReorder'] as DeckEntryReorderPayload\n }\n\n /**\n * Explicitly replace all deck entries for import or repair flows.\n */\n async replaceEntries(\n deckId: string,\n input: DeckEntriesReplaceInput\n ): Promise<DeckEntriesReplacePayload> {\n const { query } = QueryBuilder.replaceDeckEntries()\n const variables = QueryBuilder.deckEntriesReplaceVariables(deckId, input)\n const result = await this.connection.execute(query, variables)\n return result['deckEntriesReplace'] as DeckEntriesReplacePayload\n }\n\n /**\n * Import a decklist into an existing deck or dry-run resolution.\n */\n async importDeck(input: DeckImportInput): Promise<DeckImportPayload> {\n const { query } = QueryBuilder.importDeck()\n const variables = QueryBuilder.deckImportVariables(input)\n const result = await this.connection.execute(query, variables)\n return result['deckImport'] as DeckImportPayload\n }\n\n /**\n * List publisher-managed configured import formats for a game.\n */\n async listImportFormats(\n gameId: string,\n options: ListDeckImportFormatsOptions = {}\n ): Promise<Collection<DeckImportFormatDefinition>> {\n const { query, variables } = QueryBuilder.deckImportFormats({\n gameId,\n includeArchived: options.includeArchived,\n first: options.first,\n after: options.after,\n })\n const key = this.cacheKey('decks', 'listImportFormats', variables)\n\n const data = await this.withCache(key, 'decks', options, async () => {\n const result = await this.connection.execute(query, variables)\n return result['deckImportFormats'] as ConnectionType<DeckImportFormatDefinition>\n })\n\n return new Collection(data, {\n nextPageLoader: async (cursor: string) =>\n this.listImportFormats(gameId, { ...options, after: cursor }),\n })\n }\n\n /**\n * Fetch one configured import format by UUID.\n */\n async fetchImportFormat(\n id: string,\n options: FetchDeckOptions = {}\n ): Promise<DeckImportFormatDefinition | null> {\n const key = this.cacheKey('decks', 'fetchImportFormat', { id })\n\n return this.withCache(key, 'decks', options, async () => {\n const { query } = QueryBuilder.deckImportFormat()\n const result = await this.connection.execute(query, { id })\n return (result['deckImportFormat'] as DeckImportFormatDefinition) ?? null\n })\n }\n\n /**\n * Preview configured import-format parsing and record resolution.\n */\n async testImportFormat(input: DeckImportFormatTestInput): Promise<DeckImportFormatTestPayload> {\n const { query } = QueryBuilder.deckImportFormatTest()\n const variables = QueryBuilder.deckImportFormatTestVariables(input)\n const result = await this.connection.execute(query, variables)\n return result['deckImportFormatTest'] as DeckImportFormatTestPayload\n }\n\n /**\n * Create a publisher-managed configured import format.\n */\n async createImportFormat(\n input: DeckImportFormatCreateInput\n ): Promise<DeckImportFormatDefinition> {\n const { query } = QueryBuilder.createDeckImportFormat()\n const variables = QueryBuilder.deckImportFormatCreateVariables(input)\n const result = await this.connection.execute(query, variables)\n return result['deckImportFormatCreate'] as DeckImportFormatDefinition\n }\n\n /**\n * Update a publisher-managed configured import format.\n */\n async updateImportFormat(\n id: string,\n input: DeckImportFormatUpdateInput\n ): Promise<DeckImportFormatDefinition> {\n const { query } = QueryBuilder.updateDeckImportFormat()\n const variables = QueryBuilder.deckImportFormatUpdateVariables(id, input)\n const result = await this.connection.execute(query, variables)\n return result['deckImportFormatUpdate'] as DeckImportFormatDefinition\n }\n\n /**\n * Archive a configured import format.\n */\n async archiveImportFormat(id: string): Promise<DeckImportFormatDefinition> {\n const { query } = QueryBuilder.archiveDeckImportFormat()\n const result = await this.connection.execute(query, { id })\n return result['deckImportFormatArchive'] as DeckImportFormatDefinition\n }\n\n /**\n * Restore an archived configured import format.\n */\n async unarchiveImportFormat(id: string): Promise<DeckImportFormatDefinition> {\n const { query } = QueryBuilder.unarchiveDeckImportFormat()\n const result = await this.connection.execute(query, { id })\n return result['deckImportFormatUnarchive'] as DeckImportFormatDefinition\n }\n\n /**\n * Delete a hosted deck.\n */\n async delete(id: string): Promise<boolean> {\n const { query } = QueryBuilder.deleteDeck()\n const result = await this.connection.execute(query, { id })\n return Boolean(result['deckDelete'])\n }\n\n /**\n * Recoverably hide a deck from normal owner and public lists.\n */\n async archive(id: string): Promise<Deck> {\n const { query } = QueryBuilder.archiveDeck()\n const result = await this.connection.execute(query, { id })\n return result['deckArchive'] as Deck\n }\n\n /**\n * Restore an archived deck to draft or published state.\n */\n async restore(id: string): Promise<Deck> {\n const { query } = QueryBuilder.restoreDeck()\n const result = await this.connection.execute(query, { id })\n return result['deckRestore'] as Deck\n }\n\n /**\n * Remove the current public published pointer while keeping version history.\n */\n async unpublish(id: string): Promise<Deck> {\n const { query } = QueryBuilder.unpublishDeck()\n const result = await this.connection.execute(query, { id })\n return result['deckUnpublish'] as Deck\n }\n\n /**\n * Publish the current draft as an immutable deck version.\n */\n async publish(id: string, input: DeckPublishInput): Promise<DeckPublishPayload> {\n const { query } = QueryBuilder.publishDeck()\n const variables = QueryBuilder.deckPublishVariables(id, input)\n const result = await this.connection.execute(query, variables)\n return result['deckPublish'] as DeckPublishPayload\n }\n\n /**\n * Remove draft entries that fail card-reference validation.\n */\n async removeInvalidEntries(id: string, input: DeckRemoveInvalidEntriesInput): Promise<Deck> {\n const { query } = QueryBuilder.removeInvalidDeckEntries()\n const variables = QueryBuilder.deckRemoveInvalidEntriesVariables(id, input)\n const result = await this.connection.execute(query, variables)\n return result['deckRemoveInvalidEntries'] as Deck\n }\n\n /**\n * Create or update a deck collaborator.\n */\n async upsertCollaborator(\n deckId: string,\n accountId: string,\n role: DeckCollaboratorRole\n ): Promise<DeckCollaborator> {\n const { query } = QueryBuilder.upsertDeckCollaborator()\n const variables = QueryBuilder.deckCollaboratorVariables(deckId, accountId, role)\n const result = await this.connection.execute(query, variables)\n return result['deckCollaboratorUpsert'] as DeckCollaborator\n }\n\n /**\n * Remove a deck collaborator.\n */\n async removeCollaborator(deckId: string, accountId: string): Promise<boolean> {\n const { query } = QueryBuilder.removeDeckCollaborator()\n const variables = QueryBuilder.deckCollaboratorVariables(deckId, accountId)\n const result = await this.connection.execute(query, variables)\n return Boolean(result['deckCollaboratorRemove'])\n }\n\n /**\n * Create a unified deck token issuer for the current secret-key API application.\n */\n async createTokenIssuer(input: DeckTokenIssuerCreateInput): Promise<DeckTokenIssuer> {\n this.config.requireSecretCredential('decks.createTokenIssuer')\n\n const { query } = QueryBuilder.createDeckTokenIssuer()\n const variables = QueryBuilder.deckTokenIssuerCreateVariables(input)\n const result = await this.connection.execute(query, variables)\n return result['deckTokenIssuerCreate'] as DeckTokenIssuer\n }\n\n /**\n * Revoke a unified deck token issuer.\n */\n async revokeTokenIssuer(id: string): Promise<boolean> {\n this.config.requireSecretCredential('decks.revokeTokenIssuer')\n\n const { query } = QueryBuilder.revokeDeckTokenIssuer()\n const result = await this.connection.execute(query, { id })\n return Boolean(result['deckTokenIssuerRevoke'])\n }\n\n /**\n * Revoke only the direct signing key for a unified deck token issuer.\n */\n async revokeTokenIssuerSigningKey(id: string): Promise<DeckTokenIssuer> {\n this.config.requireSecretCredential('decks.revokeTokenIssuerSigningKey')\n\n const { query } = QueryBuilder.revokeDeckTokenIssuerSigningKey()\n const result = await this.connection.execute(query, { id })\n return result['deckTokenIssuerSigningKeyRevoke'] as DeckTokenIssuer\n }\n\n /**\n * Grant or update one OAuth app's selected-deck access.\n */\n async grantApiApplicationAccess(\n input: DeckAPIApplicationAccessGrantInput\n ): Promise<DeckAPIApplicationAccess> {\n const { query } = QueryBuilder.grantDeckApiApplicationAccess()\n const variables = QueryBuilder.deckApiApplicationAccessGrantVariables(input)\n const result = await this.connection.execute(query, variables)\n return result['deckApiApplicationAccessGrant'] as DeckAPIApplicationAccess\n }\n\n /**\n * Revoke one OAuth app's selected-deck access.\n */\n async revokeApiApplicationAccess(deckId: string, apiApplicationId: string): Promise<boolean> {\n const { query } = QueryBuilder.revokeDeckApiApplicationAccess()\n const variables = QueryBuilder.deckApiApplicationAccessRevokeVariables(deckId, apiApplicationId)\n const result = await this.connection.execute(query, variables)\n return Boolean(result['deckApiApplicationAccessRevoke'])\n }\n\n /**\n * Exchange the current secret API application credential for a unified deck token.\n */\n async exchangeToken(input: DeckTokenExchangeInput): Promise<DeckTokenExchangePayload> {\n this.config.requireSecretCredential('decks.exchangeToken')\n\n const { query } = QueryBuilder.exchangeDeckToken()\n const variables = QueryBuilder.deckTokenExchangeVariables(input)\n const result = await this.connection.execute(query, variables)\n return result['deckTokenExchange'] as DeckTokenExchangePayload\n }\n\n /**\n * Revoke an exchanged unified deck token.\n */\n async revokeToken(id: string): Promise<boolean> {\n this.config.requireSecretCredential('decks.revokeToken')\n\n const { query } = QueryBuilder.revokeDeckToken()\n const result = await this.connection.execute(query, { id })\n return Boolean(result['deckTokenRevoke'])\n }\n\n /**\n * Hydrate third-party-owned deck entries without storing them in CardDB.\n */\n async hydrateEntries(options: HydrateDeckEntriesOptions): Promise<HydratedDeckEntry[]> {\n if (options.entries.length === 0) return []\n\n const publisherSlug = this.resolvePublisher(options.publisherSlug)\n const gameKey = this.resolveGame(options.gameKey)\n this.validateAccess(publisherSlug, gameKey)\n\n const identifiers = options.entries.map((entry) => entry.identifier)\n const key = this.cacheKey('decks', 'hydrateEntries', {\n publisherSlug,\n gameKey,\n datasetKey: options.datasetKey,\n identifiers,\n })\n\n const records = await this.withCache(key, 'decks', options, async () => {\n const { query } = QueryBuilder.fetchRecordsByIdentifier()\n const result = await this.connection.execute(query, {\n publisherSlug,\n gameKey,\n datasetKey: options.datasetKey,\n identifiers,\n })\n return result['fetchRecordsByIdentifier'] as DatasetRecord[]\n })\n\n const recordsByIdentifier = recordsByDeckIdentifier(\n records,\n identifiers,\n options.identifierField\n )\n return options.entries.map((entry) => ({\n ...entry,\n record: recordsByIdentifier.get(entry.identifier) ?? null,\n }))\n }\n}\n\nfunction recordsByDeckIdentifier(\n records: DatasetRecord[],\n identifiers: string[],\n identifierField?: string\n): Map<string, DatasetRecord> {\n const remaining = new Set(identifiers)\n const recordsByIdentifier = new Map<string, DatasetRecord>()\n\n for (const record of records) {\n const identifier = identifierField\n ? record.data[identifierField]\n : Object.values(record.data).find((value) => remaining.has(String(value)))\n\n if (identifier === undefined || identifier === null) continue\n\n const key = String(identifier)\n if (!remaining.has(key)) continue\n\n recordsByIdentifier.set(key, record)\n remaining.delete(key)\n }\n\n return recordsByIdentifier\n}\n","/**\n * Records resource for CardDB API\n */\n\nimport type {\n DatasetRecord,\n DatasetRecordDeleteJob,\n DatasetRecordDeleteJobConnection,\n DatasetRecordDeleteJobStatus,\n DatasetRecordsDeleteInput,\n DatasetRecordsUpsertInput,\n DatasetRecordsUpsertPayload,\n FilterInput,\n Connection as ConnectionType,\n} from '@carddb/core'\nimport { Collection, QueryBuilder, resolveFilter } from '@carddb/core'\nimport { BaseResource } from './base.js'\nimport type { Configuration } from '../configuration.js'\nimport type { Connection } from '../connection.js'\n\nexport interface SearchRecordsOptions {\n /** Publisher slug (uses default if configured) */\n publisherSlug?: string\n /** Game key (uses default if configured) */\n gameKey?: string\n /** Dataset key (required) */\n datasetKey: string\n /**\n * Filter conditions - can be an object or a builder function\n *\n * @example Object literal\n * filter: { hp: { gte: 100 }, type: 'Pokemon' }\n *\n * @example Builder function\n * filter: f => f\n * .where('hp', gte(100))\n * .where('type', 'Pokemon')\n * .any(or => or\n * .where('rarity', 'rare')\n * .where('rarity', 'mythic')\n * )\n */\n filter?: FilterInput\n /** Full-text search across searchable fields */\n search?: string\n /**\n * Order by field with direction\n * @example 'name:asc', 'hp:desc', 'createdAt:desc'\n */\n orderBy?: string\n /**\n * Link fields to resolve (returns linked record data)\n * @example ['set_id', 'artist_id']\n */\n resolveLinks?: string[]\n /** Maximum number of results per page (default: 20, max: 100) */\n first?: number\n /** Cursor for pagination */\n after?: string\n /** Whether to validate filter against schema (default: true) */\n validateSchema?: boolean\n /** Include live TCGPlayer pricing when configured for the dataset */\n includePricing?: boolean\n /** Whether to use cache (defaults to client config) */\n cache?: boolean\n}\n\nexport interface GetRecordOptions {\n /** Include live TCGPlayer pricing when configured for the dataset */\n includePricing?: boolean\n /** Whether to use cache (defaults to client config) */\n cache?: boolean\n}\n\nexport interface GetRecordByIdentifierOptions {\n /** Publisher slug (uses default if configured) */\n publisherSlug?: string\n /** Game key (uses default if configured) */\n gameKey?: string\n /** Dataset key (required) */\n datasetKey: string\n /** The identifier value to look up */\n identifier: string\n /** Include live TCGPlayer pricing when configured for the dataset */\n includePricing?: boolean\n /** Whether to use cache (defaults to client config) */\n cache?: boolean\n}\n\nexport interface GetRecordsByIdentifierOptions {\n /** Publisher slug (uses default if configured) */\n publisherSlug?: string\n /** Game key (uses default if configured) */\n gameKey?: string\n /** Dataset key (required) */\n datasetKey: string\n /** Identifier values to look up */\n identifiers: string[]\n /** Include live TCGPlayer pricing when configured for the dataset */\n includePricing?: boolean\n /** Whether to use cache (defaults to client config) */\n cache?: boolean\n}\n\nexport interface ListRecordsOptions {\n /** Dataset ID to list records from */\n datasetId: string\n /** Filter conditions - can be an object or a builder function */\n filter?: FilterInput\n /** Sort field and direction */\n orderBy?: { field: string; direction?: 'ASC' | 'DESC' }\n /** Maximum number of results per page */\n first?: number\n /** Cursor for forward pagination */\n after?: string\n /** Maximum number of results for backward pagination */\n last?: number\n /** Cursor for backward pagination */\n before?: string\n /** Validate and sanitize against schema */\n validateSchema?: boolean\n /** Whether to use cache (defaults to client config) */\n cache?: boolean\n}\n\nexport interface GetRecordByDatasetIdentifierOptions extends GetRecordOptions {\n /** Dataset ID to search */\n datasetId: string\n /** Identifier value to look up */\n identifier: string\n}\n\nexport interface ListRecordDeleteJobsOptions {\n /** Dataset ID to filter jobs */\n datasetId?: string\n /** Job status to filter by */\n status?: DatasetRecordDeleteJobStatus\n /** Maximum number of results per page */\n first?: number\n /** Cursor for pagination */\n after?: string\n /** Whether to use cache (defaults to client config) */\n cache?: boolean\n}\n\nexport interface WaitForRecordDeleteJobOptions {\n /** Polling interval in milliseconds */\n intervalMs?: number\n /** Max time to wait in milliseconds */\n timeoutMs?: number\n}\n\nexport class RecordsResource extends BaseResource {\n constructor(connection: Connection, config: Configuration) {\n super(connection, config)\n }\n\n /**\n * List records in a publisher-accessible dataset by dataset ID.\n */\n async list(options: ListRecordsOptions): Promise<Collection<DatasetRecord>> {\n const filter = resolveFilter(options.filter)\n const { query, variables } = QueryBuilder.listDatasetRecords({\n datasetId: options.datasetId,\n filter,\n orderBy: options.orderBy,\n first: options.first,\n after: options.after,\n last: options.last,\n before: options.before,\n validateSchema: options.validateSchema,\n })\n const key = this.cacheKey('records', 'list', variables)\n\n const data = await this.withCache(key, 'records', options, async () => {\n const result = await this.connection.execute(query, variables)\n return result['datasetRecords'] as ConnectionType<DatasetRecord>\n })\n\n return new Collection(data, {\n nextPageLoader: async (cursor: string) => this.list({ ...options, after: cursor }),\n })\n }\n\n /**\n * Get a publisher-accessible record by dataset ID and identifier value.\n */\n async getByDatasetIdentifier(\n options: GetRecordByDatasetIdentifierOptions\n ): Promise<DatasetRecord | null> {\n const key = this.cacheKey('records', 'getByDatasetIdentifier', {\n datasetId: options.datasetId,\n identifier: options.identifier,\n includePricing: options.includePricing ?? false,\n })\n\n return this.withCache(key, 'records', options, async () => {\n const { query, variables } = QueryBuilder.datasetRecord({\n datasetId: options.datasetId,\n identifier: options.identifier,\n includePricing: options.includePricing,\n })\n const result = await this.connection.execute(query, variables)\n return (result['datasetRecord'] as DatasetRecord) ?? null\n })\n }\n\n /**\n * Start an import-backed batch upsert, or return a dry-run result. Requires a secret credential.\n */\n async upsertBatch(input: DatasetRecordsUpsertInput): Promise<DatasetRecordsUpsertPayload> {\n this.config.requireSecretCredential('records.upsertBatch')\n\n const { query } = QueryBuilder.upsertDatasetRecords()\n const result = await this.connection.execute(\n query,\n QueryBuilder.datasetRecordsUpsertVariables(input)\n )\n return result['datasetRecordsUpsert'] as DatasetRecordsUpsertPayload\n }\n\n /**\n * Create a dry-run or destructive bulk delete/reconciliation job. Requires a secret credential.\n */\n async deleteBatch(input: DatasetRecordsDeleteInput): Promise<DatasetRecordDeleteJob> {\n this.config.requireSecretCredential('records.deleteBatch')\n\n const { query } = QueryBuilder.deleteDatasetRecords()\n const result = await this.connection.execute(\n query,\n QueryBuilder.datasetRecordsDeleteVariables(input)\n )\n return result['datasetRecordsDelete'] as DatasetRecordDeleteJob\n }\n\n /**\n * Get one bulk delete/reconciliation job.\n */\n async getDeleteJob(\n id: string,\n options: GetRecordOptions = {}\n ): Promise<DatasetRecordDeleteJob | null> {\n const key = this.cacheKey('records', 'getDeleteJob', { id })\n\n return this.withCache(key, 'records', options, async () => {\n const { query } = QueryBuilder.datasetRecordDeleteJob()\n const result = await this.connection.execute(query, { id })\n return (result['datasetRecordDeleteJob'] as DatasetRecordDeleteJob) ?? null\n })\n }\n\n /**\n * List bulk delete/reconciliation jobs for a publisher.\n */\n async listDeleteJobs(\n publisherId: string,\n options: ListRecordDeleteJobsOptions = {}\n ): Promise<Collection<DatasetRecordDeleteJob>> {\n const { query, variables } = QueryBuilder.datasetRecordDeleteJobs({\n publisherId,\n datasetId: options.datasetId,\n status: options.status,\n first: options.first,\n after: options.after,\n })\n const key = this.cacheKey('records', 'listDeleteJobs', variables)\n\n const data = await this.withCache(key, 'records', options, async () => {\n const result = await this.connection.execute(query, variables)\n return result['datasetRecordDeleteJobs'] as DatasetRecordDeleteJobConnection\n })\n\n return new Collection(data, {\n nextPageLoader: async (cursor: string) =>\n this.listDeleteJobs(publisherId, { ...options, after: cursor }),\n })\n }\n\n /**\n * Poll a delete job until it reaches a terminal state.\n */\n async waitForDeleteJob(\n id: string,\n options: WaitForRecordDeleteJobOptions = {}\n ): Promise<DatasetRecordDeleteJob> {\n const intervalMs = options.intervalMs ?? 1000\n const timeoutMs = options.timeoutMs ?? 300000\n const startedAt = Date.now()\n\n while (true) {\n const job = await this.getDeleteJob(id, { cache: false })\n if (!job) throw new Error(`Delete job '${id}' was not found`)\n if (job.status === 'COMPLETED' || job.status === 'FAILED') return job\n if (Date.now() - startedAt >= timeoutMs) {\n throw new Error(`Timed out waiting for delete job '${id}'`)\n }\n await new Promise((resolve) => setTimeout(resolve, intervalMs))\n }\n }\n\n /**\n * Search for records in a dataset with filtering, search, and pagination\n *\n * @example Basic search\n * const records = await client.records.search({\n * publisherSlug: 'pokemon',\n * gameKey: 'tcg',\n * datasetKey: 'cards',\n * })\n *\n * @example With defaults configured\n * // If client has defaultPublisher: 'pokemon', defaultGame: 'tcg'\n * const records = await client.records.search({ datasetKey: 'cards' })\n *\n * @example With filtering (object literal)\n * const records = await client.records.search({\n * datasetKey: 'cards',\n * filter: {\n * hp: { gte: 100 },\n * types: { contains: 'Fire' }\n * }\n * })\n *\n * @example With filtering (builder function)\n * const records = await client.records.search({\n * datasetKey: 'cards',\n * filter: f => f\n * .where('hp', gte(100))\n * .where('types', contains('Fire'))\n * .any(or => or\n * .where('rarity', 'Rare')\n * .where('rarity', 'Rare Holo')\n * )\n * })\n *\n * @example With link resolution\n * const records = await client.records.search({\n * datasetKey: 'cards',\n * resolveLinks: ['set_id'],\n * filter: f => f.whereLink('set_id', { code: 'BASE' })\n * })\n *\n * @example Iterate through all results\n * const records = await client.records.search({ datasetKey: 'cards' })\n * for await (const record of records) {\n * console.log(record.data.name)\n * }\n */\n async search(options: SearchRecordsOptions): Promise<Collection<DatasetRecord>> {\n const publisherSlug = this.resolvePublisher(options.publisherSlug)\n const gameKey = this.resolveGame(options.gameKey)\n\n this.validateAccess(publisherSlug, gameKey)\n\n // Resolve filter (handles both object and builder function)\n const filter = resolveFilter(options.filter)\n\n const { query, variables } = QueryBuilder.searchRecords({\n publisherSlug,\n gameKey,\n datasetKey: options.datasetKey,\n filter,\n search: options.search,\n orderBy: options.orderBy,\n resolveLinks: options.resolveLinks,\n first: options.first,\n after: options.after,\n validateSchema: options.validateSchema,\n includePricing: options.includePricing,\n })\n\n const key = this.cacheKey('records', 'search', {\n ...variables,\n includePricing: options.includePricing ?? false,\n })\n\n const data = await this.withCache(key, 'records', options, async () => {\n const result = await this.connection.execute(query, variables)\n return result['searchRecords'] as ConnectionType<DatasetRecord>\n })\n\n return new Collection(data, {\n nextPageLoader: async (cursor: string) => {\n return this.search({ ...options, after: cursor })\n },\n })\n }\n\n /**\n * Get a single record by ID\n *\n * @example\n * const record = await client.records.get('550e8400-e29b-41d4-a716-446655440000')\n */\n async get(id: string, options: GetRecordOptions = {}): Promise<DatasetRecord | null> {\n const key = this.cacheKey('records', 'get', {\n id,\n includePricing: options.includePricing ?? false,\n })\n\n return this.withCache(key, 'records', options, async () => {\n const { query } = QueryBuilder.fetchRecordById({ includePricing: options.includePricing })\n const result = await this.connection.execute(query, { id })\n return (result['fetchRecord'] as DatasetRecord) ?? null\n })\n }\n\n /**\n * Get a record by its identifier field value\n *\n * The identifier field is defined in the dataset schema (the field marked as isIdentifier)\n *\n * @example\n * const record = await client.records.getByIdentifier({\n * publisherSlug: 'pokemon',\n * gameKey: 'tcg',\n * datasetKey: 'cards',\n * identifier: 'base1-4'\n * })\n *\n * @example With defaults configured\n * const record = await client.records.getByIdentifier({\n * datasetKey: 'cards',\n * identifier: 'base1-4'\n * })\n */\n async getByIdentifier(options: GetRecordByIdentifierOptions): Promise<DatasetRecord | null> {\n const publisherSlug = this.resolvePublisher(options.publisherSlug)\n const gameKey = this.resolveGame(options.gameKey)\n\n this.validateAccess(publisherSlug, gameKey)\n\n const key = this.cacheKey('records', 'getByIdentifier', {\n publisherSlug,\n gameKey,\n datasetKey: options.datasetKey,\n identifier: options.identifier,\n includePricing: options.includePricing ?? false,\n })\n\n return this.withCache(key, 'records', options, async () => {\n const { query } = QueryBuilder.fetchRecordByIdentifier({\n includePricing: options.includePricing,\n })\n const result = await this.connection.execute(query, {\n publisherSlug,\n gameKey,\n datasetKey: options.datasetKey,\n identifier: options.identifier,\n })\n return (result['fetchRecordByIdentifier'] as DatasetRecord) ?? null\n })\n }\n\n /**\n * Get multiple records by their identifier field values\n *\n * Missing identifiers are omitted from the result.\n *\n * @example\n * const records = await client.records.getManyByIdentifier({\n * publisherSlug: 'pokemon',\n * gameKey: 'tcg',\n * datasetKey: 'cards',\n * identifiers: ['base1-4', 'base1-5']\n * })\n *\n * @example With defaults configured\n * const records = await client.records.getManyByIdentifier({\n * datasetKey: 'cards',\n * identifiers: ['base1-4', 'base1-5']\n * })\n */\n async getManyByIdentifier(options: GetRecordsByIdentifierOptions): Promise<DatasetRecord[]> {\n if (options.identifiers.length === 0) return []\n\n const publisherSlug = this.resolvePublisher(options.publisherSlug)\n const gameKey = this.resolveGame(options.gameKey)\n\n this.validateAccess(publisherSlug, gameKey)\n\n const key = this.cacheKey('records', 'getManyByIdentifier', {\n publisherSlug,\n gameKey,\n datasetKey: options.datasetKey,\n identifiers: options.identifiers,\n includePricing: options.includePricing ?? false,\n })\n\n return this.withCache(key, 'records', options, async () => {\n const { query } = QueryBuilder.fetchRecordsByIdentifier({\n includePricing: options.includePricing,\n })\n const result = await this.connection.execute(query, {\n publisherSlug,\n gameKey,\n datasetKey: options.datasetKey,\n identifiers: options.identifiers,\n })\n return (result['fetchRecordsByIdentifier'] as DatasetRecord[]) ?? []\n })\n }\n\n /**\n * Get multiple records by ID\n *\n * @example\n * const records = await client.records.getMany(['id1', 'id2', 'id3'])\n */\n async getMany(ids: string[], options: GetRecordOptions = {}): Promise<DatasetRecord[]> {\n if (ids.length === 0) return []\n\n const key = this.cacheKey('records', 'getMany', {\n ids,\n includePricing: options.includePricing ?? false,\n })\n\n return this.withCache(key, 'records', options, async () => {\n const { query } = QueryBuilder.fetchRecords({ includePricing: options.includePricing })\n const result = await this.connection.execute(query, { ids })\n return (result['fetchRecords'] as DatasetRecord[]) ?? []\n })\n }\n}\n","/**\n * Rules resource for CardDB API\n */\n\nimport type {\n Dataset,\n DatasetRecord,\n FilterInput,\n Connection as ConnectionType,\n} from '@carddb/core'\nimport { Collection, QueryBuilder, resolveFilter } from '@carddb/core'\nimport { BaseResource } from './base.js'\nimport type { Configuration } from '../configuration.js'\nimport type { Connection } from '../connection.js'\n\nexport interface ListRuleDatasetsOptions {\n /** Publisher slug (uses default if configured) */\n publisherSlug?: string\n /** Game key (uses default if configured) */\n gameKey?: string\n /** Search term to filter rule datasets by name */\n search?: string\n /** Maximum number of results per page (default: 20, max: 100) */\n first?: number\n /** Cursor for pagination */\n after?: string\n /** Whether to use cache (defaults to client config) */\n cache?: boolean\n}\n\nexport interface ListRulesOptions {\n /** Publisher slug (uses default if configured) */\n publisherSlug?: string\n /** Game key (uses default if configured) */\n gameKey?: string\n /** Rules dataset key (defaults to \"rules\") */\n datasetKey?: string\n /** Filter conditions */\n filter?: FilterInput\n /** Full-text search across searchable fields */\n search?: string\n /** Order by field with direction, e.g. \"name:asc\" */\n orderBy?: string\n /** Link fields to resolve */\n resolveLinks?: string[]\n /** Maximum number of results per page (default: 20, max: 100) */\n first?: number\n /** Cursor for pagination */\n after?: string\n /** Whether to validate filter against schema (default: true) */\n validateSchema?: boolean\n /** Whether to use cache (defaults to client config) */\n cache?: boolean\n}\n\nexport interface ListFormatsOptions extends Omit<ListRulesOptions, 'datasetKey'> {\n /** Formats dataset key (defaults to \"formats\") */\n datasetKey?: string\n}\n\nexport class RulesResource extends BaseResource {\n constructor(connection: Connection, config: Configuration) {\n super(connection, config)\n }\n\n /**\n * List rule-related datasets for a game.\n *\n * @example\n * const datasets = await client.rules.datasets({ publisherSlug: 'wotc', gameKey: 'magic' })\n */\n async datasets(options: ListRuleDatasetsOptions = {}): Promise<Collection<Dataset>> {\n const publisherSlug = this.resolvePublisher(options.publisherSlug)\n const gameKey = this.resolveGame(options.gameKey)\n\n this.validateAccess(publisherSlug, gameKey)\n\n const { query, variables } = QueryBuilder.searchDatasets({\n publisherSlug,\n gameKey,\n search: options.search,\n purpose: 'RULES',\n first: options.first,\n after: options.after,\n })\n\n const key = this.cacheKey('rules', 'datasets', variables)\n const data = await this.withCache(key, 'datasets', options, async () => {\n const result = await this.connection.execute(query, variables)\n return result['searchDatasets'] as ConnectionType<Dataset>\n })\n\n return new Collection(data, {\n nextPageLoader: async (cursor: string) => this.datasets({ ...options, after: cursor }),\n })\n }\n\n /**\n * List rules from the game's rules dataset.\n *\n * @example\n * const rules = await client.rules.list({ first: 100 })\n */\n async list(options: ListRulesOptions = {}): Promise<Collection<DatasetRecord>> {\n return this.searchRuleRecords('rules', options)\n }\n\n /**\n * List deck/game formats from the game's formats dataset.\n *\n * @example\n * const formats = await client.rules.formats({ first: 100 })\n * const names = formats.items.map(format => format.data.name)\n */\n async formats(options: ListFormatsOptions = {}): Promise<Collection<DatasetRecord>> {\n return this.searchRuleRecords(options.datasetKey ?? 'formats', options)\n }\n\n private async searchRuleRecords(\n defaultDatasetKey: string,\n options: ListRulesOptions\n ): Promise<Collection<DatasetRecord>> {\n const publisherSlug = this.resolvePublisher(options.publisherSlug)\n const gameKey = this.resolveGame(options.gameKey)\n const datasetKey = options.datasetKey ?? defaultDatasetKey\n\n this.validateAccess(publisherSlug, gameKey)\n\n const filter = resolveFilter(options.filter)\n const { query, variables } = QueryBuilder.searchRecords({\n publisherSlug,\n gameKey,\n datasetKey,\n filter,\n search: options.search,\n orderBy: options.orderBy,\n resolveLinks: options.resolveLinks,\n first: options.first,\n after: options.after,\n validateSchema: options.validateSchema,\n })\n\n const key = this.cacheKey('rules', 'records', variables)\n const data = await this.withCache(key, 'records', options, async () => {\n const result = await this.connection.execute(query, variables)\n return result['searchRecords'] as ConnectionType<DatasetRecord>\n })\n\n return new Collection(data, {\n nextPageLoader: async (cursor: string) =>\n this.searchRuleRecords(defaultDatasetKey, { ...options, after: cursor }),\n })\n }\n}\n","/**\n * First-class rulesets resource for CardDB API\n */\n\nimport type {\n Connection as ConnectionType,\n DeckValidationRules,\n Ruleset,\n RulesetCreateInput,\n RulesetValidationImpact,\n RulesetVersion,\n RulesetVersionDraftCreateInput,\n RulesetVersionDraftImportFromDatasetRecordInput,\n RulesetVersionDraftImportPreview,\n RulesetVersionDraftUpdateInput,\n RulesetVersionPublishInput,\n RulesetVersionStatus,\n RulesetUpdateInput,\n} from '@carddb/core'\nimport { Collection, QueryBuilder } from '@carddb/core'\nimport { BaseResource } from './base.js'\nimport type { Configuration } from '../configuration.js'\nimport type { Connection } from '../connection.js'\n\nexport interface ListRulesetsOptions {\n /** Include archived rulesets */\n includeArchived?: boolean\n /** Maximum number of results per page */\n first?: number\n /** Cursor for pagination */\n after?: string\n /** Whether to use cache (defaults to client config) */\n cache?: boolean\n}\n\nexport type ListPublicRulesetsOptions = Omit<ListRulesetsOptions, 'includeArchived'>\n\nexport interface GetRulesetOptions {\n /** Whether to use cache (defaults to client config) */\n cache?: boolean\n}\n\nexport interface GetRulesetByKeyOptions extends GetRulesetOptions {\n /** Game ID for stable ruleset-key lookup */\n gameId: string\n /** Stable ruleset key */\n key: string\n}\n\nexport interface ListRulesetVersionsOptions extends GetRulesetOptions {\n /** Optional status filter */\n status?: RulesetVersionStatus\n /** Maximum number of results per page */\n first?: number\n /** Cursor for pagination */\n after?: string\n}\n\nexport interface RulesetValidationRulesOptions extends GetRulesetOptions {\n /** Optional immutable ruleset version override */\n rulesetVersionId?: string\n}\n\nexport interface RulesetValidationImpactOptions extends GetRulesetOptions {\n /** Maximum number of affected decks to include */\n first?: number\n}\n\nexport class RulesetsResource extends BaseResource {\n constructor(connection: Connection, config: Configuration) {\n super(connection, config)\n }\n\n /**\n * List first-class rulesets for a game.\n */\n async list(gameId: string, options: ListRulesetsOptions = {}): Promise<Collection<Ruleset>> {\n const { query, variables } = QueryBuilder.rulesets({\n gameId,\n includeArchived: options.includeArchived,\n first: options.first,\n after: options.after,\n })\n const key = this.cacheKey('rulesets', 'list', variables)\n\n const data = await this.withCache(key, 'rulesets', options, async () => {\n const result = await this.connection.execute(query, variables)\n return result['rulesets'] as ConnectionType<Ruleset>\n })\n\n return new Collection(data, {\n nextPageLoader: async (cursor: string) => this.list(gameId, { ...options, after: cursor }),\n })\n }\n\n /**\n * List active public rulesets for a public game.\n */\n async listPublic(\n gameId: string,\n options: ListPublicRulesetsOptions = {}\n ): Promise<Collection<Ruleset>> {\n const { query, variables } = QueryBuilder.publicRulesets({\n gameId,\n first: options.first,\n after: options.after,\n })\n const key = this.cacheKey('rulesets', 'listPublic', variables)\n\n const data = await this.withCache(key, 'rulesets', options, async () => {\n const result = await this.connection.execute(query, variables)\n return result['publicRulesets'] as ConnectionType<Ruleset>\n })\n\n return new Collection(data, {\n nextPageLoader: async (cursor: string) =>\n this.listPublic(gameId, { ...options, after: cursor }),\n })\n }\n\n /**\n * Get one ruleset by UUID.\n */\n async get(id: string, options: GetRulesetOptions = {}): Promise<Ruleset | null> {\n const variables = { id }\n const key = this.cacheKey('rulesets', 'get', variables)\n\n return this.withCache(key, 'rulesets', options, async () => {\n const { query, variables } = QueryBuilder.ruleset({ id })\n const result = await this.connection.execute(query, variables)\n return (result['ruleset'] as Ruleset) ?? null\n })\n }\n\n /**\n * Get one ruleset by game ID and stable key.\n */\n async getByKey(options: GetRulesetByKeyOptions): Promise<Ruleset | null> {\n const variables = { gameId: options.gameId, key: options.key }\n const cacheKey = this.cacheKey('rulesets', 'getByKey', variables)\n\n return this.withCache(cacheKey, 'rulesets', options, async () => {\n const { query, variables } = QueryBuilder.ruleset({\n gameId: options.gameId,\n key: options.key,\n })\n const result = await this.connection.execute(query, variables)\n return (result['ruleset'] as Ruleset) ?? null\n })\n }\n\n /**\n * List immutable versions for a ruleset.\n */\n async versions(\n rulesetId: string,\n options: ListRulesetVersionsOptions = {}\n ): Promise<Collection<RulesetVersion>> {\n const { query, variables } = QueryBuilder.rulesetVersions({\n rulesetId,\n status: options.status,\n first: options.first,\n after: options.after,\n })\n const key = this.cacheKey('rulesets', 'versions', variables)\n\n const data = await this.withCache(key, 'rulesets', options, async () => {\n const result = await this.connection.execute(query, variables)\n return result['rulesetVersions'] as ConnectionType<RulesetVersion>\n })\n\n return new Collection(data, {\n nextPageLoader: async (cursor: string) =>\n this.versions(rulesetId, { ...options, after: cursor }),\n })\n }\n\n /**\n * Get one immutable ruleset version by UUID.\n */\n async getVersion(id: string, options: GetRulesetOptions = {}): Promise<RulesetVersion | null> {\n const key = this.cacheKey('rulesets', 'getVersion', { id })\n\n return this.withCache(key, 'rulesets', options, async () => {\n const { query } = QueryBuilder.rulesetVersion()\n const result = await this.connection.execute(query, { id })\n return (result['rulesetVersion'] as RulesetVersion) ?? null\n })\n }\n\n /**\n * Get the canonical active rules JSON for a ruleset.\n */\n async validationRules(\n gameId: string,\n rulesetKey: string,\n options: RulesetValidationRulesOptions = {}\n ): Promise<Record<string, unknown> | null> {\n const variables = QueryBuilder.rulesetValidationRulesVariables(\n gameId,\n rulesetKey,\n options.rulesetVersionId\n )\n const key = this.cacheKey('rulesets', 'validationRules', variables)\n\n return this.withCache(key, 'rulesets', options, async () => {\n const { query } = QueryBuilder.rulesetValidationRules()\n const result = await this.connection.execute(query, variables)\n return (result['rulesetValidationRules'] as Record<string, unknown>) ?? null\n })\n }\n\n /**\n * Get typed validation rules, including parsed deck sections.\n */\n async deckValidationRules(\n gameId: string,\n rulesetKey: string,\n options: RulesetValidationRulesOptions = {}\n ): Promise<DeckValidationRules | null> {\n const variables = QueryBuilder.rulesetValidationRulesVariables(\n gameId,\n rulesetKey,\n options.rulesetVersionId\n )\n const key = this.cacheKey('rulesets', 'deckValidationRules', variables)\n\n return this.withCache(key, 'rulesets', options, async () => {\n const { query } = QueryBuilder.deckValidationRules()\n const result = await this.connection.execute(query, variables)\n return (result['deckValidationRules'] as DeckValidationRules) ?? null\n })\n }\n\n /**\n * Preview compiling a legacy formats dataset record into a draft ruleset version.\n */\n async previewImport(\n rulesetId: string,\n input: RulesetVersionDraftImportFromDatasetRecordInput\n ): Promise<RulesetVersionDraftImportPreview> {\n const { query } = QueryBuilder.rulesetVersionDraftImportPreview()\n const variables = QueryBuilder.rulesetVersionDraftImportPreviewVariables(rulesetId, input)\n const result = await this.connection.execute(query, variables)\n return result['rulesetVersionDraftImportPreview'] as RulesetVersionDraftImportPreview\n }\n\n /**\n * Preview validation impact for decks that use a ruleset version's parent ruleset.\n */\n async validationImpact(\n rulesetVersionId: string,\n options: RulesetValidationImpactOptions = {}\n ): Promise<RulesetValidationImpact> {\n const { query, variables } = QueryBuilder.rulesetValidationImpact({\n rulesetVersionId,\n first: options.first,\n })\n const key = this.cacheKey('rulesets', 'validationImpact', variables)\n\n return this.withCache(key, 'rulesets', options, async () => {\n const result = await this.connection.execute(query, variables)\n return result['rulesetValidationImpact'] as RulesetValidationImpact\n })\n }\n\n /**\n * Create a first-class ruleset. Requires a server-side secret credential.\n */\n async create(input: RulesetCreateInput): Promise<Ruleset> {\n this.config.requireSecretCredential('rulesets.create')\n\n const { query } = QueryBuilder.createRuleset()\n const result = await this.connection.execute(query, QueryBuilder.rulesetCreateVariables(input))\n return result['rulesetCreate'] as Ruleset\n }\n\n /**\n * Update editable ruleset metadata. Requires a server-side secret credential.\n */\n async update(id: string, input: RulesetUpdateInput): Promise<Ruleset> {\n this.config.requireSecretCredential('rulesets.update')\n\n const { query } = QueryBuilder.updateRuleset()\n const result = await this.connection.execute(\n query,\n QueryBuilder.rulesetUpdateVariables(id, input)\n )\n return result['rulesetUpdate'] as Ruleset\n }\n\n /**\n * Create a draft ruleset version from an explicit canonical rules payload.\n */\n async createDraft(\n rulesetId: string,\n input: RulesetVersionDraftCreateInput\n ): Promise<RulesetVersion> {\n this.config.requireSecretCredential('rulesets.createDraft')\n\n const { query } = QueryBuilder.createRulesetVersionDraft()\n const result = await this.connection.execute(\n query,\n QueryBuilder.rulesetVersionDraftCreateVariables(rulesetId, input)\n )\n return result['rulesetVersionDraftCreate'] as RulesetVersion\n }\n\n /**\n * Create a draft by compiling a legacy formats dataset record.\n */\n async importDraftFromDatasetRecord(\n rulesetId: string,\n input: RulesetVersionDraftImportFromDatasetRecordInput\n ): Promise<RulesetVersion> {\n this.config.requireSecretCredential('rulesets.importDraftFromDatasetRecord')\n\n const { query } = QueryBuilder.importRulesetVersionDraftFromDatasetRecord()\n const result = await this.connection.execute(\n query,\n QueryBuilder.rulesetVersionDraftImportFromDatasetRecordVariables(rulesetId, input)\n )\n return result['rulesetVersionDraftImportFromDatasetRecord'] as RulesetVersion\n }\n\n /**\n * Update a draft ruleset version.\n */\n async updateDraft(id: string, input: RulesetVersionDraftUpdateInput): Promise<RulesetVersion> {\n this.config.requireSecretCredential('rulesets.updateDraft')\n\n const { query } = QueryBuilder.updateRulesetVersionDraft()\n const result = await this.connection.execute(\n query,\n QueryBuilder.rulesetVersionDraftUpdateVariables(id, input)\n )\n return result['rulesetVersionDraftUpdate'] as RulesetVersion\n }\n\n /**\n * Publish a draft and make it the current active ruleset version.\n */\n async publishVersion(id: string, input?: RulesetVersionPublishInput): Promise<RulesetVersion> {\n this.config.requireSecretCredential('rulesets.publishVersion')\n\n const { query } = QueryBuilder.publishRulesetVersion()\n const result = await this.connection.execute(\n query,\n QueryBuilder.rulesetVersionPublishVariables(id, input)\n )\n return result['rulesetVersionPublish'] as RulesetVersion\n }\n\n /**\n * Activate an already-published version for rollback.\n */\n async activateVersion(id: string): Promise<RulesetVersion> {\n this.config.requireSecretCredential('rulesets.activateVersion')\n\n const { query } = QueryBuilder.activateRulesetVersion()\n const result = await this.connection.execute(query, { id })\n return result['rulesetVersionActivate'] as RulesetVersion\n }\n}\n","/**\n * Publisher-managed import format resource for CardDB API\n */\n\nimport type {\n Connection as ConnectionType,\n DeckImportFormatCreateInput,\n DeckImportFormatDefinition,\n DeckImportFormatTestInput,\n DeckImportFormatTestPayload,\n DeckImportFormatUpdateInput,\n} from '@carddb/core'\nimport { Collection, QueryBuilder } from '@carddb/core'\nimport { BaseResource } from './base.js'\nimport type { Configuration } from '../configuration.js'\nimport type { Connection } from '../connection.js'\n\nexport interface ListImportFormatsOptions {\n /** Publisher ID for publisher-scoped listing */\n publisherId?: string\n /** Game ID for game-scoped listing */\n gameId?: string\n /** Include archived definitions */\n includeArchived?: boolean\n /** Maximum number of results per page */\n first?: number\n /** Cursor for pagination */\n after?: string\n /** Whether to use cache (defaults to client config) */\n cache?: boolean\n}\n\nexport interface GetImportFormatOptions {\n /** Whether to use cache (defaults to client config) */\n cache?: boolean\n}\n\nexport interface GetImportFormatByKeyOptions extends GetImportFormatOptions {\n /** Game ID for stable format-key lookup */\n gameId: string\n /** Stable import format key */\n key: string\n}\n\nexport class ImportFormatsResource extends BaseResource {\n constructor(connection: Connection, config: Configuration) {\n super(connection, config)\n }\n\n /**\n * List publisher-managed import formats by publisher or game scope.\n */\n async list(options: ListImportFormatsOptions): Promise<Collection<DeckImportFormatDefinition>> {\n const { query, variables } = QueryBuilder.deckImportFormats({\n publisherId: options.publisherId,\n gameId: options.gameId,\n includeArchived: options.includeArchived,\n first: options.first,\n after: options.after,\n })\n const key = this.cacheKey('importFormats', 'list', variables)\n\n const data = await this.withCache(key, 'importFormats', options, async () => {\n const result = await this.connection.execute(query, variables)\n return result['deckImportFormats'] as ConnectionType<DeckImportFormatDefinition>\n })\n\n return new Collection(data, {\n nextPageLoader: async (cursor: string) => this.list({ ...options, after: cursor }),\n })\n }\n\n /**\n * Get one import format by UUID.\n */\n async get(\n id: string,\n options: GetImportFormatOptions = {}\n ): Promise<DeckImportFormatDefinition | null> {\n const key = this.cacheKey('importFormats', 'get', { id })\n\n return this.withCache(key, 'importFormats', options, async () => {\n const { query } = QueryBuilder.deckImportFormat()\n const result = await this.connection.execute(query, { id })\n return (result['deckImportFormat'] as DeckImportFormatDefinition) ?? null\n })\n }\n\n /**\n * Get one import format by game ID and stable key.\n */\n async getByKey(options: GetImportFormatByKeyOptions): Promise<DeckImportFormatDefinition | null> {\n const key = this.cacheKey('importFormats', 'getByKey', {\n gameId: options.gameId,\n formatKey: options.key,\n })\n\n return this.withCache(key, 'importFormats', options, async () => {\n const { query } = QueryBuilder.deckImportFormat()\n const result = await this.connection.execute(query, {\n gameId: options.gameId,\n key: options.key,\n })\n return (result['deckImportFormat'] as DeckImportFormatDefinition) ?? null\n })\n }\n\n /**\n * Preview parsing and record resolution for a configured import format.\n */\n async test(input: DeckImportFormatTestInput): Promise<DeckImportFormatTestPayload> {\n const { query } = QueryBuilder.deckImportFormatTest()\n const result = await this.connection.execute(\n query,\n QueryBuilder.deckImportFormatTestVariables(input)\n )\n return result['deckImportFormatTest'] as DeckImportFormatTestPayload\n }\n\n /**\n * Create an import format. Requires a server-side secret credential.\n */\n async create(input: DeckImportFormatCreateInput): Promise<DeckImportFormatDefinition> {\n this.config.requireSecretCredential('importFormats.create')\n\n const { query } = QueryBuilder.createDeckImportFormat()\n const result = await this.connection.execute(\n query,\n QueryBuilder.deckImportFormatCreateVariables(input)\n )\n return result['deckImportFormatCreate'] as DeckImportFormatDefinition\n }\n\n /**\n * Update an import format. Requires a server-side secret credential.\n */\n async update(\n id: string,\n input: DeckImportFormatUpdateInput\n ): Promise<DeckImportFormatDefinition> {\n this.config.requireSecretCredential('importFormats.update')\n\n const { query } = QueryBuilder.updateDeckImportFormat()\n const result = await this.connection.execute(\n query,\n QueryBuilder.deckImportFormatUpdateVariables(id, input)\n )\n return result['deckImportFormatUpdate'] as DeckImportFormatDefinition\n }\n\n /**\n * Archive an import format. Requires a server-side secret credential.\n */\n async archive(id: string): Promise<DeckImportFormatDefinition> {\n this.config.requireSecretCredential('importFormats.archive')\n\n const { query } = QueryBuilder.archiveDeckImportFormat()\n const result = await this.connection.execute(query, { id })\n return result['deckImportFormatArchive'] as DeckImportFormatDefinition\n }\n\n /**\n * Restore an archived import format. Requires a server-side secret credential.\n */\n async unarchive(id: string): Promise<DeckImportFormatDefinition> {\n this.config.requireSecretCredential('importFormats.unarchive')\n\n const { query } = QueryBuilder.unarchiveDeckImportFormat()\n const result = await this.connection.execute(query, { id })\n return result['deckImportFormatUnarchive'] as DeckImportFormatDefinition\n }\n}\n","/**\n * Publisher import jobs resource for CardDB API\n */\n\nimport type {\n BulkImportResult,\n Connection as ConnectionType,\n DatasetImportFromPayloadInput,\n DatasetImportPreviewInput,\n DatasetImportPreviewResult,\n DatasetImportRunInput,\n DatasetImportValidateInput,\n GameImportJob,\n GameImportJobConnection,\n GameImportFromPayloadInput,\n GameImportPreview,\n GameImportPreviewInput,\n GameImportRunInput,\n ImportJob,\n ImportJobConnection,\n ImportJobLog,\n ImportJobLogConnection,\n ImportJobStatus,\n ImportLogLevel,\n} from '@carddb/core'\nimport { Collection, QueryBuilder } from '@carddb/core'\nimport { BaseResource } from './base.js'\nimport type { Configuration } from '../configuration.js'\nimport type { Connection } from '../connection.js'\n\nexport interface ListImportJobsOptions {\n /** Dataset ID to filter by */\n datasetId?: string\n /** Job status to filter by */\n status?: ImportJobStatus\n /** Maximum number of results per page */\n first?: number\n /** Cursor for pagination */\n after?: string\n /** Whether to use cache (defaults to client config) */\n cache?: boolean\n}\n\nexport interface ListGameImportJobsOptions {\n /** Job status to filter by */\n status?: ImportJobStatus\n /** Maximum number of results per page */\n first?: number\n /** Cursor for pagination */\n after?: string\n /** Whether to use cache (defaults to client config) */\n cache?: boolean\n}\n\nexport interface ListImportJobLogsOptions {\n /** Log level to filter by */\n level?: ImportLogLevel\n /** Dataset key to filter by */\n datasetKey?: string\n /** Maximum number of results per page */\n first?: number\n /** Cursor for pagination */\n after?: string\n /** Whether to use cache (defaults to client config) */\n cache?: boolean\n}\n\nexport interface WaitForImportJobOptions {\n /** Polling interval in milliseconds */\n intervalMs?: number\n /** Max time to wait in milliseconds */\n timeoutMs?: number\n}\n\nexport class ImportsResource extends BaseResource {\n constructor(connection: Connection, config: Configuration) {\n super(connection, config)\n }\n\n /**\n * Preview a single-dataset import source without writing records or schema.\n */\n async preview(input: DatasetImportPreviewInput): Promise<DatasetImportPreviewResult> {\n const { query } = QueryBuilder.datasetImportPreview()\n const result = await this.connection.execute(\n query,\n QueryBuilder.datasetImportPreviewVariables(input)\n )\n return result['datasetImportPreview'] as DatasetImportPreviewResult\n }\n\n /**\n * Validate a single-dataset import source with dry-run enforced.\n */\n async validate(input: DatasetImportValidateInput): Promise<BulkImportResult> {\n const { query } = QueryBuilder.datasetImportValidate()\n const result = await this.connection.execute(\n query,\n QueryBuilder.datasetImportValidateVariables(input)\n )\n return result['datasetImportValidate'] as BulkImportResult\n }\n\n /**\n * Start an async single-dataset import from `fileId`, `data`, or `sourceUrl`.\n */\n async run(input: DatasetImportRunInput): Promise<ImportJob> {\n this.config.requireSecretCredential('imports.run')\n\n if ('fileId' in input && input.fileId) {\n const { query } = QueryBuilder.datasetImportFromFile()\n const result = await this.connection.execute(\n query,\n QueryBuilder.datasetImportFromFileVariables(input)\n )\n return result['datasetImportFromFile'] as ImportJob\n }\n\n if ('sourceUrl' in input && input.sourceUrl) {\n const { query } = QueryBuilder.datasetImportFromUrl()\n const result = await this.connection.execute(\n query,\n QueryBuilder.datasetImportFromUrlVariables(input)\n )\n return result['datasetImportFromUrl'] as ImportJob\n }\n\n const { query } = QueryBuilder.datasetImportFromPayload()\n const result = await this.connection.execute(\n query,\n QueryBuilder.datasetImportFromPayloadVariables(input as DatasetImportFromPayloadInput)\n )\n return result['datasetImportFromPayload'] as ImportJob\n }\n\n /**\n * Fetch one single-dataset import job.\n */\n async getJob(id: string, options: { cache?: boolean } = {}): Promise<ImportJob | null> {\n const key = this.cacheKey('imports', 'getJob', { id })\n\n return this.withCache(key, 'imports', options, async () => {\n const { query } = QueryBuilder.importJob()\n const result = await this.connection.execute(query, { id })\n return (result['importJob'] as ImportJob) ?? null\n })\n }\n\n /**\n * List single-dataset import jobs for a publisher.\n */\n async listJobs(\n publisherId: string,\n options: ListImportJobsOptions = {}\n ): Promise<Collection<ImportJob>> {\n const { query, variables } = QueryBuilder.importJobs({\n publisherId,\n datasetId: options.datasetId,\n status: options.status,\n first: options.first,\n after: options.after,\n })\n const key = this.cacheKey('imports', 'listJobs', variables)\n\n const data = await this.withCache(key, 'imports', options, async () => {\n const result = await this.connection.execute(query, variables)\n return result['importJobs'] as ImportJobConnection\n })\n\n return new Collection(data, {\n nextPageLoader: async (cursor: string) =>\n this.listJobs(publisherId, { ...options, after: cursor }),\n })\n }\n\n /**\n * Cancel a pending or processing single-dataset import job.\n */\n async cancelJob(id: string): Promise<ImportJob> {\n this.config.requireSecretCredential('imports.cancelJob')\n\n const { query } = QueryBuilder.importJobCancel()\n const result = await this.connection.execute(query, { id })\n return result['importJobCancel'] as ImportJob\n }\n\n /**\n * List structured logs for one single-dataset import job.\n */\n async listJobLogs(\n importJobId: string,\n options: ListImportJobLogsOptions = {}\n ): Promise<Collection<ImportJobLog>> {\n const { query, variables } = QueryBuilder.importJobLogs({\n importJobId,\n level: options.level,\n datasetKey: options.datasetKey,\n first: options.first,\n after: options.after,\n })\n const key = this.cacheKey('imports', 'listJobLogs', variables)\n\n const data = await this.withCache(key, 'imports', options, async () => {\n const result = await this.connection.execute(query, variables)\n const job = result['importJob'] as { logs: ImportJobLogConnection } | null\n return job?.logs ?? emptyConnection<ImportJobLog>()\n })\n\n return new Collection(data, {\n nextPageLoader: async (cursor: string) =>\n this.listJobLogs(importJobId, { ...options, after: cursor }),\n })\n }\n\n /**\n * Poll a single-dataset import job until completion or failure.\n */\n async waitForJob(id: string, options: WaitForImportJobOptions = {}): Promise<ImportJob> {\n const intervalMs = options.intervalMs ?? 1000\n const timeoutMs = options.timeoutMs ?? 300000\n const startedAt = Date.now()\n\n while (true) {\n const job = await this.getJob(id, { cache: false })\n if (!job) throw new Error(`Import job '${id}' was not found`)\n if (job.status === 'COMPLETED' || job.status === 'FAILED') return job\n if (Date.now() - startedAt >= timeoutMs) {\n throw new Error(`Timed out waiting for import job '${id}'`)\n }\n await new Promise((resolve) => setTimeout(resolve, intervalMs))\n }\n }\n\n /**\n * Preview an advanced game-level import source without writing records or schema.\n */\n async previewGame(input: GameImportPreviewInput): Promise<GameImportPreview> {\n const { query } = QueryBuilder.gameImportPreview()\n const result = await this.connection.execute(\n query,\n QueryBuilder.gameImportPreviewVariables(input)\n )\n return result['gameImportPreview'] as GameImportPreview\n }\n\n /**\n * Start an async advanced game-level import from `fileId`, `data`, or `sourceUrl`.\n */\n async runGame(input: GameImportRunInput): Promise<GameImportJob> {\n this.config.requireSecretCredential('imports.runGame')\n\n if ('fileId' in input && input.fileId) {\n const { query } = QueryBuilder.gameImportFromFile()\n const result = await this.connection.execute(\n query,\n QueryBuilder.gameImportFromFileVariables(input)\n )\n return result['gameImportFromFile'] as GameImportJob\n }\n\n if ('sourceUrl' in input && input.sourceUrl) {\n const { query } = QueryBuilder.gameImportFromUrl()\n const result = await this.connection.execute(\n query,\n QueryBuilder.gameImportFromUrlVariables(input)\n )\n return result['gameImportFromUrl'] as GameImportJob\n }\n\n const { query } = QueryBuilder.gameImportFromPayload()\n const result = await this.connection.execute(\n query,\n QueryBuilder.gameImportFromPayloadVariables(input as GameImportFromPayloadInput)\n )\n return result['gameImportFromPayload'] as GameImportJob\n }\n\n /**\n * Fetch one advanced game-level import job.\n */\n async getGameJob(id: string, options: { cache?: boolean } = {}): Promise<GameImportJob | null> {\n const key = this.cacheKey('imports', 'getGameJob', { id })\n\n return this.withCache(key, 'imports', options, async () => {\n const { query } = QueryBuilder.gameImportJob()\n const result = await this.connection.execute(query, { id })\n return (result['gameImportJob'] as GameImportJob) ?? null\n })\n }\n\n /**\n * List advanced game-level import jobs.\n */\n async listGameJobs(\n gameId: string,\n options: ListGameImportJobsOptions = {}\n ): Promise<Collection<GameImportJob>> {\n const { query, variables } = QueryBuilder.gameImportJobs({\n gameId,\n status: options.status,\n first: options.first,\n after: options.after,\n })\n const key = this.cacheKey('imports', 'listGameJobs', variables)\n\n const data = await this.withCache(key, 'imports', options, async () => {\n const result = await this.connection.execute(query, variables)\n return result['gameImportJobs'] as GameImportJobConnection\n })\n\n return new Collection(data, {\n nextPageLoader: async (cursor: string) =>\n this.listGameJobs(gameId, { ...options, after: cursor }),\n })\n }\n\n /**\n * Cancel a pending or processing advanced game-level import job.\n */\n async cancelGameJob(id: string): Promise<GameImportJob> {\n this.config.requireSecretCredential('imports.cancelGameJob')\n\n const { query } = QueryBuilder.gameImportJobCancel()\n const result = await this.connection.execute(query, { id })\n return result['gameImportJobCancel'] as GameImportJob\n }\n\n /**\n * Poll an advanced game-level import job until completion or failure.\n */\n async waitForGameJob(id: string, options: WaitForImportJobOptions = {}): Promise<GameImportJob> {\n const intervalMs = options.intervalMs ?? 1000\n const timeoutMs = options.timeoutMs ?? 300000\n const startedAt = Date.now()\n\n while (true) {\n const job = await this.getGameJob(id, { cache: false })\n if (!job) throw new Error(`Game import job '${id}' was not found`)\n if (job.status === 'COMPLETED' || job.status === 'FAILED') return job\n if (Date.now() - startedAt >= timeoutMs) {\n throw new Error(`Timed out waiting for game import job '${id}'`)\n }\n await new Promise((resolve) => setTimeout(resolve, intervalMs))\n }\n }\n}\n\nfunction emptyConnection<T>(): ConnectionType<T> {\n return {\n totalCount: 0,\n pageInfo: {\n hasNextPage: false,\n hasPreviousPage: false,\n startCursor: null,\n endCursor: null,\n },\n edges: [],\n }\n}\n","/**\n * Publisher dataset export jobs resource for CardDB API\n */\n\nimport type {\n DatasetExportInput,\n ExportJob,\n ExportJobConnection,\n ExportJobStatus,\n} from '@carddb/core'\nimport { Collection, QueryBuilder } from '@carddb/core'\nimport { BaseResource } from './base.js'\nimport type { Configuration } from '../configuration.js'\nimport type { Connection } from '../connection.js'\n\nexport interface ListExportJobsOptions {\n /** Game ID to filter by */\n gameId?: string\n /** Dataset ID to filter by */\n datasetId?: string\n /** Job status to filter by */\n status?: ExportJobStatus\n /** Maximum number of results per page */\n first?: number\n /** Cursor for pagination */\n after?: string\n /** Whether to use cache (defaults to client config) */\n cache?: boolean\n}\n\nexport interface WaitForExportJobOptions {\n /** Polling interval in milliseconds */\n intervalMs?: number\n /** Max time to wait in milliseconds */\n timeoutMs?: number\n}\n\nexport class ExportsResource extends BaseResource {\n constructor(connection: Connection, config: Configuration) {\n super(connection, config)\n }\n\n /**\n * Start an async dataset export. Requires a server-side secret credential.\n */\n async run(input: DatasetExportInput): Promise<ExportJob> {\n this.config.requireSecretCredential('exports.run')\n\n const { query } = QueryBuilder.datasetExport()\n const result = await this.connection.execute(query, QueryBuilder.datasetExportVariables(input))\n return result['datasetExport'] as ExportJob\n }\n\n /** Alias for `run`. */\n async create(input: DatasetExportInput): Promise<ExportJob> {\n return this.run(input)\n }\n\n /**\n * Fetch one export job.\n */\n async getJob(id: string, options: { cache?: boolean } = {}): Promise<ExportJob | null> {\n const key = this.cacheKey('exports', 'getJob', { id })\n\n return this.withCache(key, 'exports', options, async () => {\n const { query } = QueryBuilder.exportJob()\n const result = await this.connection.execute(query, { id })\n return (result['exportJob'] as ExportJob) ?? null\n })\n }\n\n /**\n * List export jobs for a publisher, optionally filtered by game, dataset, or status.\n */\n async listJobs(\n publisherId: string,\n options: ListExportJobsOptions = {}\n ): Promise<Collection<ExportJob>> {\n const { query, variables } = QueryBuilder.exportJobs({\n publisherId,\n gameId: options.gameId,\n datasetId: options.datasetId,\n status: options.status,\n first: options.first,\n after: options.after,\n })\n const key = this.cacheKey('exports', 'listJobs', variables)\n\n const data = await this.withCache(key, 'exports', options, async () => {\n const result = await this.connection.execute(query, variables)\n return result['exportJobs'] as ExportJobConnection\n })\n\n return new Collection(data, {\n nextPageLoader: async (cursor: string) =>\n this.listJobs(publisherId, { ...options, after: cursor }),\n })\n }\n\n /**\n * Refresh the signed download URL for a completed export job.\n */\n async refreshUrl(id: string): Promise<ExportJob> {\n const { query } = QueryBuilder.exportJobRefreshUrl()\n const result = await this.connection.execute(query, { id })\n return result['exportJobRefreshUrl'] as ExportJob\n }\n\n /**\n * Cancel a pending or processing export job. Requires a server-side secret credential.\n */\n async cancel(id: string): Promise<ExportJob> {\n this.config.requireSecretCredential('exports.cancel')\n\n const { query } = QueryBuilder.exportJobCancel()\n const result = await this.connection.execute(query, { id })\n return result['exportJobCancel'] as ExportJob\n }\n\n /**\n * Poll an export job until completion or failure.\n */\n async waitForJob(id: string, options: WaitForExportJobOptions = {}): Promise<ExportJob> {\n const intervalMs = options.intervalMs ?? 1000\n const timeoutMs = options.timeoutMs ?? 300000\n const startedAt = Date.now()\n\n while (true) {\n const job = await this.getJob(id, { cache: false })\n if (!job) throw new Error(`Export job '${id}' was not found`)\n if (job.status === 'COMPLETED' || job.status === 'FAILED') return job\n if (Date.now() - startedAt >= timeoutMs) {\n throw new Error(`Timed out waiting for export job '${id}'`)\n }\n await new Promise((resolve) => setTimeout(resolve, intervalMs))\n }\n }\n}\n","/**\n * File upload helper resource for CardDB API\n */\n\nimport type {\n File as CardDBFile,\n FileUploadInput,\n PresignedUpload,\n UploadPurpose,\n} from '@carddb/core'\nimport { QueryBuilder } from '@carddb/core'\nimport { BaseResource } from './base.js'\nimport type { Configuration } from '../configuration.js'\nimport type { Connection } from '../connection.js'\n\nexport interface GetFileOptions {\n /** Whether to use cache (defaults to client config) */\n cache?: boolean\n}\n\nexport interface UploadFileInput {\n filename: string\n contentType: string\n body: unknown\n /** File size in bytes. Inferred for strings, ArrayBuffers, typed arrays, Blob/File-like values. */\n size?: number\n /** Defaults to false. */\n isPublic?: boolean\n /** Convenience purpose mapped onto existing file metadata. */\n purpose?: UploadPurpose\n /** Override the entity type sent to the API. */\n entityType?: string\n entityId?: string\n publisherId?: string\n datasetId?: string\n}\n\ntype UploadFetchResponse = {\n ok: boolean\n status: number\n statusText: string\n text(): Promise<string>\n}\n\ntype UploadFetch = (\n url: string,\n init: { method: 'PUT'; headers: Record<string, string>; body: unknown }\n) => Promise<UploadFetchResponse>\n\nexport class FilesResource extends BaseResource {\n constructor(connection: Connection, config: Configuration) {\n super(connection, config)\n }\n\n /**\n * Get one file by ID.\n */\n async get(id: string, options: GetFileOptions = {}): Promise<CardDBFile | null> {\n const key = this.cacheKey('files', 'get', { id })\n\n return this.withCache(key, 'files', options, async () => {\n const { query } = QueryBuilder.file()\n const result = await this.connection.execute(query, { id })\n return (result['file'] as CardDBFile) ?? null\n })\n }\n\n /**\n * Request a presigned URL for direct upload. Requires a server-side secret credential.\n */\n async requestUpload(input: FileUploadInput): Promise<PresignedUpload> {\n this.config.requireSecretCredential('files.requestUpload')\n\n const { query } = QueryBuilder.fileUploadRequest()\n const result = await this.connection.execute(\n query,\n QueryBuilder.fileUploadRequestVariables(input)\n )\n return result['fileUploadRequest'] as PresignedUpload\n }\n\n /**\n * Confirm that a presigned upload completed.\n */\n async confirmUpload(id: string): Promise<CardDBFile> {\n this.config.requireSecretCredential('files.confirmUpload')\n\n const { query } = QueryBuilder.fileUploadConfirm()\n const result = await this.connection.execute(query, { id })\n return result['fileUploadConfirm'] as CardDBFile\n }\n\n /**\n * Request a presigned upload URL, PUT bytes directly to storage, then confirm the file.\n */\n async upload(input: UploadFileInput): Promise<CardDBFile> {\n const size = input.size ?? inferUploadSize(input.body)\n if (!size || size <= 0) {\n throw new Error('files.upload requires a positive size or a body with an inferable size')\n }\n\n const upload = await this.requestUpload({\n filename: input.filename,\n contentType: input.contentType,\n size,\n isPublic: input.isPublic ?? false,\n entityType: input.entityType ?? entityTypeForPurpose(input.purpose),\n entityId: input.entityId,\n publisherId: input.publisherId,\n datasetId: input.datasetId,\n })\n\n await putUpload(upload.uploadUrl, input.contentType, input.body)\n return this.confirmUpload(upload.file.id)\n }\n\n /**\n * Delete a file. Requires a server-side secret credential.\n */\n async delete(id: string): Promise<boolean> {\n this.config.requireSecretCredential('files.delete')\n\n const { query } = QueryBuilder.fileDelete()\n const result = await this.connection.execute(query, { id })\n return Boolean(result['fileDelete'])\n }\n}\n\nasync function putUpload(uploadUrl: string, contentType: string, body: unknown): Promise<void> {\n const uploadFetch = (globalThis as { fetch?: UploadFetch }).fetch\n if (!uploadFetch) throw new Error('files.upload requires a runtime with fetch support')\n\n const response = await uploadFetch(uploadUrl, {\n method: 'PUT',\n headers: { 'Content-Type': contentType },\n body,\n })\n\n if (!response.ok) {\n const responseBody = await response.text().catch(() => '')\n throw new Error(\n `File upload failed with ${response.status} ${response.statusText}${responseBody ? `: ${responseBody}` : ''}`\n )\n }\n}\n\nfunction inferUploadSize(body: unknown): number | undefined {\n if (typeof body === 'string') return new TextEncoder().encode(body).byteLength\n if (body instanceof ArrayBuffer) return body.byteLength\n if (ArrayBuffer.isView(body)) return body.byteLength\n\n const sized = body as { size?: unknown; byteLength?: unknown; length?: unknown } | null\n if (typeof sized?.size === 'number') return sized.size\n if (typeof sized?.byteLength === 'number') return sized.byteLength\n if (typeof sized?.length === 'number') return sized.length\n\n return undefined\n}\n\nfunction entityTypeForPurpose(purpose: UploadPurpose | undefined): string | undefined {\n if (!purpose || purpose === 'scan_image') return undefined\n if (purpose === 'import') return 'import'\n if (purpose === 'scan_template_example') return 'scan_template_example'\n return purpose\n}\n","/**\n * Scan job resource for CardDB API\n */\n\nimport type {\n ConfirmScanUploadInput,\n CreateScanJobInput,\n CreateScanUploadSessionInput,\n File as CardDBFile,\n PresignedUpload,\n ScanFeedbackPayload,\n ScanJob,\n ScanJobPayload,\n ScanMetrics,\n ScanMetricsInput,\n SubmitScanFeedbackInput,\n} from '@carddb/core'\nimport { QueryBuilder } from '@carddb/core'\nimport { BaseResource } from './base.js'\nimport type { Configuration } from '../configuration.js'\nimport type { Connection } from '../connection.js'\n\nexport type CreateScanJobOptions = Omit<CreateScanJobInput, 'publisherSlug' | 'gameKey'> & {\n /** Publisher slug, defaults to client defaultPublisher */\n publisherSlug?: string\n /** Game key, defaults to client defaultGame */\n gameKey?: string\n}\n\nexport type CreateScanUploadSessionOptions = Omit<\n CreateScanUploadSessionInput,\n 'publisherSlug' | 'gameKey'\n> & {\n /** Publisher slug, defaults to client defaultPublisher */\n publisherSlug?: string\n /** Game key, defaults to client defaultGame */\n gameKey?: string\n}\n\nexport type ConfirmScanUploadOptions = Omit<ConfirmScanUploadInput, 'publisherSlug' | 'gameKey'> & {\n /** Publisher slug, defaults to client defaultPublisher */\n publisherSlug?: string\n /** Game key, defaults to client defaultGame */\n gameKey?: string\n}\n\nexport type ScanMetricsOptions = Omit<ScanMetricsInput, 'publisherSlug' | 'gameKey'> & {\n /** Publisher slug, defaults to client defaultPublisher */\n publisherSlug?: string\n /** Game key, defaults to client defaultGame */\n gameKey?: string\n}\n\nexport interface GetScanJobOptions {\n /** Whether to use cache (defaults to client config) */\n cache?: boolean\n}\n\nexport interface PollScanJobOptions {\n /** First delay between polling attempts in milliseconds */\n intervalMs?: number\n /** Maximum total polling time in milliseconds */\n timeoutMs?: number\n /** Multiplier applied to the delay after each non-terminal response */\n backoffFactor?: number\n /** Maximum delay between polling attempts in milliseconds */\n maxIntervalMs?: number\n /** Abort-like signal. The SDK checks `aborted` before each request and sleep. */\n signal?: PollSignal\n}\n\nexport interface PollSignal {\n aborted: boolean\n reason?: unknown\n throwIfAborted?: () => void\n}\n\nexport interface VerifyWebhookSignatureInput {\n body: string | ArrayBuffer | ArrayBufferView\n signature: string\n secret: string\n}\n\ntype SubtleCryptoLike = {\n importKey(\n format: string,\n keyData: Uint8Array,\n algorithm: { name: string; hash: string },\n extractable: boolean,\n keyUsages: string[]\n ): Promise<unknown>\n sign(algorithm: string, key: unknown, data: Uint8Array): Promise<ArrayBuffer>\n}\n\nexport class ScansResource extends BaseResource {\n constructor(connection: Connection, config: Configuration) {\n super(connection, config)\n }\n\n /**\n * Create a mobile-safe scan image upload session using a scan-scoped credential.\n */\n async createUploadSession(input: CreateScanUploadSessionOptions): Promise<PresignedUpload> {\n const scopedInput = this.resolveCreateUploadSessionInput(input)\n const { query } = QueryBuilder.createScanUploadSession()\n const result = await this.connection.execute(\n query,\n QueryBuilder.createScanUploadSessionVariables(scopedInput)\n )\n return result['createScanUploadSession'] as PresignedUpload\n }\n\n /**\n * Confirm that a scan image upload completed and return the uploaded file.\n */\n async confirmUpload(input: ConfirmScanUploadOptions): Promise<CardDBFile> {\n const scopedInput = this.resolveConfirmUploadInput(input)\n const { query } = QueryBuilder.confirmScanUpload()\n const result = await this.connection.execute(\n query,\n QueryBuilder.confirmScanUploadVariables(scopedInput)\n )\n return result['confirmScanUpload'] as CardDBFile\n }\n\n /**\n * Create a scan job for an already uploaded image file.\n */\n async createJob(input: CreateScanJobOptions): Promise<ScanJobPayload> {\n const scopedInput = this.resolveCreateJobInput(input)\n const { query } = QueryBuilder.createScanJob()\n const result = await this.connection.execute(\n query,\n QueryBuilder.createScanJobVariables(scopedInput)\n )\n return result['createScanJob'] as ScanJobPayload\n }\n\n /**\n * Get a scan job and its latest processing result.\n */\n async getJob(id: string, options: GetScanJobOptions = {}): Promise<ScanJob | null> {\n const key = this.cacheKey('scans', 'getJob', { id })\n\n return this.withCache(key, 'scans', options, async () => {\n const { query } = QueryBuilder.scanJob()\n const result = await this.connection.execute(query, { id })\n return (result['scanJob'] as ScanJob) ?? null\n })\n }\n\n /**\n * Poll a scan job until it reaches a terminal status.\n */\n async pollJob(id: string, options: PollScanJobOptions = {}): Promise<ScanJob> {\n const timeoutMs = options.timeoutMs ?? 300000\n const backoffFactor = Math.max(options.backoffFactor ?? 1.5, 1)\n const maxIntervalMs = options.maxIntervalMs ?? 10000\n const startedAt = Date.now()\n let intervalMs = Math.max(options.intervalMs ?? 1000, 1)\n\n while (true) {\n throwIfAborted(options.signal)\n\n const job = await this.getJob(id, { cache: false })\n if (!job) throw new Error(`Scan job '${id}' was not found`)\n if (isTerminalScanStatus(job.status)) return job\n\n const elapsedMs = Date.now() - startedAt\n const remainingMs = timeoutMs - elapsedMs\n if (remainingMs <= 0) {\n throw new Error(`Timed out waiting for scan job '${id}'`)\n }\n\n await sleep(Math.min(intervalMs, remainingMs))\n intervalMs = Math.min(Math.ceil(intervalMs * backoffFactor), maxIntervalMs)\n }\n }\n\n /**\n * Submit correctness feedback for a completed scan job.\n */\n async submitFeedback(input: SubmitScanFeedbackInput): Promise<ScanFeedbackPayload> {\n const { query } = QueryBuilder.submitScanFeedback()\n const result = await this.connection.execute(\n query,\n QueryBuilder.submitScanFeedbackVariables(input)\n )\n return result['submitScanFeedback'] as ScanFeedbackPayload\n }\n\n /**\n * Aggregate scan metrics for a publisher/game/dataset scope.\n */\n async metrics(input: ScanMetricsOptions): Promise<ScanMetrics> {\n const scopedInput = this.resolveMetricsInput(input)\n const { query } = QueryBuilder.scanMetrics()\n const result = await this.connection.execute(\n query,\n QueryBuilder.scanMetricsVariables(scopedInput)\n )\n return result['scanMetrics'] as ScanMetrics\n }\n\n /**\n * Verify an `X-CardDB-Signature` value for a webhook body.\n */\n async verifyWebhookSignature(input: VerifyWebhookSignatureInput): Promise<boolean> {\n const subtle = getSubtleCrypto()\n const key = await subtle.importKey(\n 'raw',\n encodeUtf8(input.secret),\n { name: 'HMAC', hash: 'SHA-256' },\n false,\n ['sign']\n )\n const digest = await subtle.sign('HMAC', key, bodyToBytes(input.body))\n const expected = `sha256=${toHex(new Uint8Array(digest))}`\n\n return constantTimeEqual(input.signature.trim().toLowerCase(), expected)\n }\n\n private resolveCreateJobInput(input: CreateScanJobOptions): CreateScanJobInput {\n const publisherSlug = this.resolvePublisher(input.publisherSlug)\n const gameKey = this.resolveGame(input.gameKey)\n this.validateAccess(publisherSlug, gameKey)\n\n return { ...input, publisherSlug, gameKey }\n }\n\n private resolveCreateUploadSessionInput(\n input: CreateScanUploadSessionOptions\n ): CreateScanUploadSessionInput {\n const publisherSlug = this.resolvePublisher(input.publisherSlug)\n const gameKey = this.resolveGame(input.gameKey)\n this.validateAccess(publisherSlug, gameKey)\n\n return { ...input, publisherSlug, gameKey }\n }\n\n private resolveConfirmUploadInput(input: ConfirmScanUploadOptions): ConfirmScanUploadInput {\n const publisherSlug = this.resolvePublisher(input.publisherSlug)\n const gameKey = this.resolveGame(input.gameKey)\n this.validateAccess(publisherSlug, gameKey)\n\n return { ...input, publisherSlug, gameKey }\n }\n\n private resolveMetricsInput(input: ScanMetricsOptions): ScanMetricsInput {\n const publisherSlug = this.resolvePublisher(input.publisherSlug)\n const gameKey = this.resolveGame(input.gameKey)\n this.validateAccess(publisherSlug, gameKey)\n\n return { ...input, publisherSlug, gameKey }\n }\n}\n\nfunction isTerminalScanStatus(status: string): boolean {\n const normalized = status.toLowerCase()\n return normalized === 'completed' || normalized === 'failed' || normalized === 'cancelled'\n}\n\nasync function sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n\nfunction throwIfAborted(signal: PollSignal | undefined): void {\n if (!signal) return\n if (signal.throwIfAborted) signal.throwIfAborted()\n if (signal.aborted) throw new Error('Scan job polling aborted')\n}\n\nfunction getSubtleCrypto(): SubtleCryptoLike {\n const cryptoLike = globalThis as { crypto?: { subtle?: SubtleCryptoLike } }\n const subtle = cryptoLike.crypto?.subtle\n if (!subtle) {\n throw new Error('Web Crypto HMAC support is not available in this runtime')\n }\n return subtle\n}\n\nfunction bodyToBytes(body: string | ArrayBuffer | ArrayBufferView): Uint8Array {\n if (typeof body === 'string') return encodeUtf8(body)\n if (body instanceof ArrayBuffer) return new Uint8Array(body)\n return new Uint8Array(body.buffer, body.byteOffset, body.byteLength)\n}\n\nfunction encodeUtf8(value: string): Uint8Array {\n return new TextEncoder().encode(value)\n}\n\nfunction toHex(bytes: Uint8Array): string {\n return Array.from(bytes, (byte) => byte.toString(16).padStart(2, '0')).join('')\n}\n\nfunction constantTimeEqual(left: string, right: string): boolean {\n const maxLength = Math.max(left.length, right.length)\n let diff = left.length ^ right.length\n\n for (let index = 0; index < maxLength; index++) {\n diff |= (left.charCodeAt(index) || 0) ^ (right.charCodeAt(index) || 0)\n }\n\n return diff === 0\n}\n","/**\n * Scan template resource for CardDB API\n */\n\nimport type {\n PreviewScanTemplateInput,\n ResolveScanTemplateInput,\n SaveScanTemplateInput,\n ScanTemplate,\n ScanTemplatePayload,\n ScanTemplatePreview,\n ScanTemplateResolution,\n ScanTemplatesInput,\n} from '@carddb/core'\nimport { QueryBuilder } from '@carddb/core'\nimport { BaseResource } from './base.js'\nimport type { Configuration } from '../configuration.js'\nimport type { Connection } from '../connection.js'\n\nexport type ResolveScanTemplateOptions = Omit<\n ResolveScanTemplateInput,\n 'publisherSlug' | 'gameKey'\n> & {\n /** Publisher slug, defaults to client defaultPublisher */\n publisherSlug?: string\n /** Game key, defaults to client defaultGame */\n gameKey?: string\n /** Whether to use cache (defaults to client config) */\n cache?: boolean\n}\n\nexport type ListScanTemplatesOptions = Omit<ScanTemplatesInput, 'publisherSlug' | 'gameKey'> & {\n /** Publisher slug, defaults to client defaultPublisher */\n publisherSlug?: string\n /** Game key, defaults to client defaultGame */\n gameKey?: string\n /** Whether to use cache (defaults to client config) */\n cache?: boolean\n}\n\nexport type SaveScanTemplateOptions = Omit<SaveScanTemplateInput, 'publisherSlug' | 'gameKey'> & {\n /** Publisher slug, defaults to client defaultPublisher */\n publisherSlug?: string\n /** Game key, defaults to client defaultGame */\n gameKey?: string\n}\n\nexport type PreviewScanTemplateOptions = Omit<\n PreviewScanTemplateInput,\n 'publisherSlug' | 'gameKey'\n> & {\n /** Publisher slug, defaults to client defaultPublisher */\n publisherSlug?: string\n /** Game key, defaults to client defaultGame */\n gameKey?: string\n}\n\nexport type UpdateScanTemplateOptions = SaveScanTemplateOptions & { id: string }\n\nexport class ScanTemplatesResource extends BaseResource {\n constructor(connection: Connection, config: Configuration) {\n super(connection, config)\n }\n\n /**\n * Resolve the active scan template for a game or dataset scope.\n */\n async resolve(input: ResolveScanTemplateOptions): Promise<ScanTemplateResolution> {\n const scopedInput = this.resolveTemplateScope(input)\n const key = this.cacheKey('scanTemplates', 'resolve', { ...scopedInput })\n\n return this.withCache(key, 'scanTemplates', input, async () => {\n const { query } = QueryBuilder.resolveScanTemplate()\n const result = await this.connection.execute(\n query,\n QueryBuilder.resolveScanTemplateVariables(scopedInput)\n )\n return result['resolveScanTemplate'] as ScanTemplateResolution\n })\n }\n\n /**\n * List publisher-managed scan templates for a game or dataset scope.\n */\n async list(input: ListScanTemplatesOptions): Promise<ScanTemplate[]> {\n const scopedInput = this.resolveListScope(input)\n const key = this.cacheKey('scanTemplates', 'list', { ...scopedInput })\n\n return this.withCache(key, 'scanTemplates', input, async () => {\n const { query } = QueryBuilder.scanTemplates()\n const result = await this.connection.execute(\n query,\n QueryBuilder.scanTemplatesVariables(scopedInput)\n )\n const payload = result['scanTemplates'] as { templates?: ScanTemplate[] } | null\n return payload?.templates ?? []\n })\n }\n\n /**\n * Create a publisher-managed scan template. Requires a server-side secret credential.\n */\n async create(input: SaveScanTemplateOptions): Promise<ScanTemplatePayload> {\n this.config.requireSecretCredential('scanTemplates.create')\n\n const scopedInput = this.resolveSaveInput(input)\n const { query } = QueryBuilder.createScanTemplate()\n const result = await this.connection.execute(\n query,\n QueryBuilder.createScanTemplateVariables(scopedInput)\n )\n return result['createScanTemplate'] as ScanTemplatePayload\n }\n\n async update(input: UpdateScanTemplateOptions): Promise<ScanTemplatePayload>\n async update(id: string, input: SaveScanTemplateOptions): Promise<ScanTemplatePayload>\n\n /**\n * Replace a publisher-managed scan template. Requires a server-side secret credential.\n */\n async update(\n idOrInput: string | UpdateScanTemplateOptions,\n input?: SaveScanTemplateOptions\n ): Promise<ScanTemplatePayload> {\n this.config.requireSecretCredential('scanTemplates.update')\n\n const id = typeof idOrInput === 'string' ? idOrInput : idOrInput.id\n const templateInput = typeof idOrInput === 'string' ? input : withoutId(idOrInput)\n if (!templateInput) throw new Error('scan template input is required')\n\n const scopedInput = this.resolveSaveInput(templateInput)\n const { query } = QueryBuilder.updateScanTemplate()\n const result = await this.connection.execute(\n query,\n QueryBuilder.updateScanTemplateVariables(id, scopedInput)\n )\n return result['updateScanTemplate'] as ScanTemplatePayload\n }\n\n /**\n * Validate a draft scan template and normalize provided region OCR hints.\n */\n async preview(input: PreviewScanTemplateOptions): Promise<ScanTemplatePreview> {\n const scopedInput = this.resolvePreviewInput(input)\n const { query } = QueryBuilder.previewScanTemplate()\n const result = await this.connection.execute(\n query,\n QueryBuilder.previewScanTemplateVariables(scopedInput)\n )\n return result['previewScanTemplate'] as ScanTemplatePreview\n }\n\n private resolveTemplateScope(input: ResolveScanTemplateOptions): ResolveScanTemplateInput {\n const publisherSlug = this.resolvePublisher(input.publisherSlug)\n const gameKey = this.resolveGame(input.gameKey)\n this.validateAccess(publisherSlug, gameKey)\n\n return {\n publisherSlug,\n gameKey,\n datasetKey: input.datasetKey,\n templateId: input.templateId,\n }\n }\n\n private resolveListScope(input: ListScanTemplatesOptions): ScanTemplatesInput {\n const publisherSlug = this.resolvePublisher(input.publisherSlug)\n const gameKey = this.resolveGame(input.gameKey)\n this.validateAccess(publisherSlug, gameKey)\n\n return {\n publisherSlug,\n gameKey,\n datasetKey: input.datasetKey,\n includeArchived: input.includeArchived,\n }\n }\n\n private resolveSaveInput(input: SaveScanTemplateOptions): SaveScanTemplateInput {\n const publisherSlug = this.resolvePublisher(input.publisherSlug)\n const gameKey = this.resolveGame(input.gameKey)\n this.validateAccess(publisherSlug, gameKey)\n\n return { ...input, publisherSlug, gameKey }\n }\n\n private resolvePreviewInput(input: PreviewScanTemplateOptions): PreviewScanTemplateInput {\n const publisherSlug = this.resolvePublisher(input.publisherSlug)\n const gameKey = this.resolveGame(input.gameKey)\n this.validateAccess(publisherSlug, gameKey)\n\n return { ...input, publisherSlug, gameKey }\n }\n}\n\nfunction withoutId(input: UpdateScanTemplateOptions): SaveScanTemplateOptions {\n const templateInput = { ...input } as SaveScanTemplateOptions & { id?: string }\n delete templateInput.id\n return templateInput\n}\n","/**\n * CardDB Client - Main entry point for the CardDB API\n */\n\nimport type { CardDBConfig, APIKeyInfo } from '@carddb/core'\nimport { QueryBuilder } from '@carddb/core'\nimport { Configuration } from './configuration.js'\nimport { Connection, getRateLimitInfo } from './connection.js'\nimport { PublishersResource } from './resources/publishers.js'\nimport { GamesResource } from './resources/games.js'\nimport { DatasetsResource } from './resources/datasets.js'\nimport { DecksResource } from './resources/decks.js'\nimport { RecordsResource } from './resources/records.js'\nimport { RulesResource } from './resources/rules.js'\nimport { RulesetsResource } from './resources/rulesets.js'\nimport { ImportFormatsResource } from './resources/import-formats.js'\nimport { ImportsResource } from './resources/imports.js'\nimport { ExportsResource } from './resources/exports.js'\nimport { FilesResource } from './resources/files.js'\nimport { ScansResource } from './resources/scans.js'\nimport { ScanTemplatesResource } from './resources/scan-templates.js'\n\n/**\n * CardDB API Client\n *\n * @example Basic usage\n * ```typescript\n * import { CardDBClient } from '@carddb/node'\n *\n * const client = new CardDBClient({\n * apiKey: 'carddb_xxx...'\n * })\n *\n * // Search for publishers\n * const publishers = await client.publishers.search()\n *\n * // Get records with filtering\n * const cards = await client.records.search({\n * publisherSlug: 'pokemon',\n * gameKey: 'tcg',\n * datasetKey: 'cards',\n * filter: { hp: { gte: 100 } }\n * })\n * ```\n *\n * @example With defaults configured\n * ```typescript\n * const client = new CardDBClient({\n * apiKey: 'carddb_xxx...',\n * defaultPublisher: 'pokemon',\n * defaultGame: 'tcg'\n * })\n *\n * // Now you can omit publisherSlug and gameKey\n * const cards = await client.records.search({\n * datasetKey: 'cards'\n * })\n * ```\n *\n * @example With caching\n * ```typescript\n * import { CardDBClient, MemoryCache } from '@carddb/node'\n *\n * const client = new CardDBClient({\n * apiKey: 'carddb_xxx...',\n * cache: new MemoryCache(),\n * cacheTtl: 300 // 5 minutes\n * })\n * ```\n */\nexport class CardDBClient {\n private config: Configuration\n private connection: Connection\n\n /** Publishers resource for searching and fetching publishers */\n readonly publishers: PublishersResource\n\n /** Games resource for searching and fetching games */\n readonly games: GamesResource\n\n /** Datasets resource for searching and fetching datasets */\n readonly datasets: DatasetsResource\n\n /** Records resource for searching and fetching records */\n readonly records: RecordsResource\n\n /** Decks resource for hosted decks and external deck hydration */\n readonly decks: DecksResource\n\n /** Rules resource for game rules and deck formats */\n readonly rules: RulesResource\n\n /** First-class rulesets resource for deck validation rules */\n readonly rulesets: RulesetsResource\n\n /** Publisher-managed import format resource */\n readonly importFormats: ImportFormatsResource\n\n /** Publisher import job resource */\n readonly imports: ImportsResource\n\n /** Publisher dataset export job resource */\n readonly exports: ExportsResource\n\n /** File upload helper resource */\n readonly files: FilesResource\n\n /** Scan job helper resource */\n readonly scans: ScansResource\n\n /** Scan template helper resource */\n readonly scanTemplates: ScanTemplatesResource\n\n /**\n * Create a new CardDB client\n *\n * @param config - Client configuration options\n */\n constructor(config: CardDBConfig = {}) {\n this.config = new Configuration(config)\n this.connection = new Connection(this.config)\n\n // Initialize resources\n this.publishers = new PublishersResource(this.connection, this.config)\n this.games = new GamesResource(this.connection, this.config)\n this.datasets = new DatasetsResource(this.connection, this.config)\n this.records = new RecordsResource(this.connection, this.config)\n this.decks = new DecksResource(this.connection, this.config)\n this.rules = new RulesResource(this.connection, this.config)\n this.rulesets = new RulesetsResource(this.connection, this.config)\n this.importFormats = new ImportFormatsResource(this.connection, this.config)\n this.imports = new ImportsResource(this.connection, this.config)\n this.exports = new ExportsResource(this.connection, this.config)\n this.files = new FilesResource(this.connection, this.config)\n this.scans = new ScansResource(this.connection, this.config)\n this.scanTemplates = new ScanTemplatesResource(this.connection, this.config)\n }\n\n /**\n * Get information about the current API key\n *\n * Returns null if no API key is configured or the key is invalid.\n *\n * @example\n * const info = await client.me()\n * if (info) {\n * console.log(`Logged in as: ${info.account.displayName}`)\n * console.log(`Application: ${info.application.name}`)\n * }\n */\n async me(): Promise<APIKeyInfo | null> {\n const { query } = QueryBuilder.fetchMe()\n const result = await this.connection.execute(query)\n return (result['fetchMe'] as APIKeyInfo) ?? null\n }\n\n /**\n * Get rate limit information from the last request\n *\n * @example\n * await client.publishers.search()\n * const rateLimit = client.getRateLimitInfo()\n * console.log(`Remaining: ${rateLimit?.remaining}/${rateLimit?.limit}`)\n */\n getRateLimitInfo() {\n return getRateLimitInfo()\n }\n\n /**\n * Create a new client with configuration overrides\n *\n * Useful for creating scoped clients with different defaults.\n *\n * @example\n * const pokemonClient = client.withConfig({\n * defaultPublisher: 'pokemon',\n * defaultGame: 'tcg'\n * })\n *\n * // Now all queries use these defaults\n * const cards = await pokemonClient.records.search({ datasetKey: 'cards' })\n */\n withConfig(overrides: Partial<CardDBConfig>): CardDBClient {\n const mergedConfig = this.config.merge(overrides)\n return new CardDBClient({\n apiKey: mergedConfig.configApiKey(),\n publishableKey: mergedConfig.publishableKey,\n secretKey: mergedConfig.secretKey,\n accessToken: mergedConfig.accessToken,\n environment: mergedConfig.environment,\n endpoint: mergedConfig.endpoint,\n timeout: mergedConfig.timeout,\n openTimeout: mergedConfig.openTimeout,\n defaultPublisher: mergedConfig.defaultPublisher,\n defaultGame: mergedConfig.defaultGame,\n allowedPublishers: mergedConfig.allowedPublishers,\n allowedGames: mergedConfig.allowedGames,\n logger: mergedConfig.logger,\n logLevel: mergedConfig.logLevel,\n retryOnRateLimit: mergedConfig.retryOnRateLimit,\n maxRetries: mergedConfig.maxRetries,\n retryOnNetworkError: mergedConfig.retryOnNetworkError,\n maxNetworkRetries: mergedConfig.maxNetworkRetries,\n retryBaseDelay: mergedConfig.retryBaseDelay,\n retryMaxDelay: mergedConfig.retryMaxDelay,\n cache: mergedConfig.cache,\n cacheTtl: mergedConfig.cacheTtl,\n cacheTtls: mergedConfig.cacheTtls,\n })\n }\n}\n"]}