@lgriffin/esi.ts 9.4.0 → 9.6.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.
Files changed (77) hide show
  1. package/CHANGELOG.md +388 -388
  2. package/LICENSE +26 -26
  3. package/README.md +1030 -1018
  4. package/dist/EsiClient.d.ts +4 -0
  5. package/dist/EsiClient.d.ts.map +1 -1
  6. package/dist/clients/CosmeticsClient.d.ts +11 -0
  7. package/dist/clients/CosmeticsClient.d.ts.map +1 -0
  8. package/dist/clients/MercenaryClient.d.ts +19 -1
  9. package/dist/clients/MercenaryClient.d.ts.map +1 -1
  10. package/dist/clients/ParagonHubClient.d.ts +13 -0
  11. package/dist/clients/ParagonHubClient.d.ts.map +1 -0
  12. package/dist/clients/SkyhooksClient.d.ts +19 -1
  13. package/dist/clients/SkyhooksClient.d.ts.map +1 -1
  14. package/dist/core/ApiClient.d.ts.map +1 -1
  15. package/dist/core/ApiRequestHandler.d.ts.map +1 -1
  16. package/dist/core/ClientRegistry.d.ts +5 -3
  17. package/dist/core/ClientRegistry.d.ts.map +1 -1
  18. package/dist/core/cache/cacheKey.d.ts +3 -0
  19. package/dist/core/cache/cacheKey.d.ts.map +1 -0
  20. package/dist/core/endpoints/cosmeticsEndpoints.d.ts +52 -0
  21. package/dist/core/endpoints/cosmeticsEndpoints.d.ts.map +1 -0
  22. package/dist/core/endpoints/mercenaryEndpoints.d.ts +45 -0
  23. package/dist/core/endpoints/mercenaryEndpoints.d.ts.map +1 -1
  24. package/dist/core/endpoints/paragonHubEndpoints.d.ts +163 -0
  25. package/dist/core/endpoints/paragonHubEndpoints.d.ts.map +1 -0
  26. package/dist/core/endpoints/skyhookEndpoints.d.ts +64 -0
  27. package/dist/core/endpoints/skyhookEndpoints.d.ts.map +1 -1
  28. package/dist/core/requestPipeline/cachePolicy.d.ts +3 -3
  29. package/dist/core/requestPipeline/cachePolicy.d.ts.map +1 -1
  30. package/dist/core/requestPipeline/headers.d.ts.map +1 -1
  31. package/dist/core/requestPipeline/statusHandling.d.ts +2 -2
  32. package/dist/core/requestPipeline/statusHandling.d.ts.map +1 -1
  33. package/dist/errors.js.map +1 -1
  34. package/dist/errors.mjs.map +1 -1
  35. package/dist/index.d.ts +2 -0
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +497 -49
  38. package/dist/index.js.map +1 -1
  39. package/dist/index.mjs +495 -49
  40. package/dist/index.mjs.map +1 -1
  41. package/dist/schemas/cosmetics.d.ts +58 -0
  42. package/dist/schemas/cosmetics.d.ts.map +1 -0
  43. package/dist/schemas/index.d.ts +2 -0
  44. package/dist/schemas/index.d.ts.map +1 -1
  45. package/dist/schemas/index.js +1461 -1191
  46. package/dist/schemas/index.js.map +1 -1
  47. package/dist/schemas/index.mjs +1427 -1191
  48. package/dist/schemas/index.mjs.map +1 -1
  49. package/dist/schemas/mercenary.d.ts +54 -0
  50. package/dist/schemas/mercenary.d.ts.map +1 -1
  51. package/dist/schemas/paragon-hub.d.ts +96 -0
  52. package/dist/schemas/paragon-hub.d.ts.map +1 -0
  53. package/dist/schemas/skyhooks.d.ts +101 -0
  54. package/dist/schemas/skyhooks.d.ts.map +1 -1
  55. package/dist/sde/index.js +7 -5100
  56. package/dist/sde/index.js.map +1 -1
  57. package/dist/sde/index.mjs +12 -5134
  58. package/dist/sde/index.mjs.map +1 -1
  59. package/dist/sde/memory.d.ts +8 -0
  60. package/dist/sde/memory.d.ts.map +1 -0
  61. package/dist/sde/memory.js +1100 -0
  62. package/dist/sde/memory.js.map +1 -0
  63. package/dist/sde/memory.mjs +1064 -0
  64. package/dist/sde/memory.mjs.map +1 -0
  65. package/dist/testing/index.js.map +1 -1
  66. package/dist/testing/index.mjs.map +1 -1
  67. package/dist/types/api-responses.d.ts +2 -0
  68. package/dist/types/api-responses.d.ts.map +1 -1
  69. package/dist/types/cosmetics.d.ts +8 -0
  70. package/dist/types/cosmetics.d.ts.map +1 -0
  71. package/dist/types/mercenary.d.ts +3 -1
  72. package/dist/types/mercenary.d.ts.map +1 -1
  73. package/dist/types/paragon-hub.d.ts +8 -0
  74. package/dist/types/paragon-hub.d.ts.map +1 -0
  75. package/dist/types/skyhooks.d.ts +3 -1
  76. package/dist/types/skyhooks.d.ts.map +1 -1
  77. package/package.json +289 -282
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core/middleware/Middleware.ts","../src/core/ApiClient.ts","../src/core/logger/logger.ts","../src/core/logger/loggerUtil.ts","../src/core/circuitBreaker/CircuitBreaker.ts","../src/core/util/error.ts","../src/core/constants.ts","../src/core/requestPipeline/headers.ts","../src/core/util/stringUtil.ts","../src/core/endpoints/esi-cache-ttls.generated.ts","../src/core/requestPipeline/cachePolicy.ts","../src/core/requestPipeline/statusHandling.ts","../src/core/util/retry.ts","../src/core/util/sleep.ts","../src/core/RetryStrategy.ts","../src/core/requestPipeline/dependencies.ts","../src/core/pagination/PaginationHandler.ts","../src/core/requestPipeline/paginationOrchestration.ts","../src/core/requestPipeline/middlewareBridge.ts","../src/core/util/headersUtil.ts","../src/core/requestPipeline/fetchExecution.ts","../src/core/ApiRequestHandler.ts","../src/core/util/validation.ts","../src/core/endpoints/buildEndpointPath.ts","../src/core/endpoints/createClient.ts","../src/core/pagination/AsyncPaginationIterator.ts","../src/clients/BaseEsiClient.ts","../src/core/endpoints/allianceEndpoints.ts","../src/schemas/alliance.ts","../src/schemas/esiEnum.ts","../src/core/endpoints/contactEndpoints.ts","../src/schemas/contacts.ts","../src/clients/AllianceClient.ts","../src/core/endpoints/assetEndpoints.ts","../src/schemas/assets.ts","../src/clients/AssetsClient.ts","../src/core/endpoints/calendarEndpoints.ts","../src/schemas/calendar.ts","../src/clients/CalendarClient.ts","../src/core/endpoints/characterEndpoints.ts","../src/schemas/character.ts","../src/schemas/common.ts","../src/clients/CharacterClient.ts","../src/core/endpoints/cloneEndpoints.ts","../src/schemas/clones.ts","../src/clients/ClonesClient.ts","../src/clients/ContactsClient.ts","../src/core/endpoints/contractEndpoints.ts","../src/schemas/contracts.ts","../src/clients/ContractsClient.ts","../src/core/endpoints/corporationEndpoints.ts","../src/schemas/corporation.ts","../src/clients/CorporationsClient.ts","../src/core/endpoints/corporationProjectEndpoints.ts","../src/schemas/corporation-projects.ts","../src/clients/CorporationProjectsClient.ts","../src/core/endpoints/dogmaEndpoints.ts","../src/schemas/dogma.ts","../src/clients/DogmaClient.ts","../src/core/endpoints/factionEndpoints.ts","../src/schemas/faction-warfare.ts","../src/clients/FactionClient.ts","../src/core/endpoints/fittingEndpoints.ts","../src/schemas/fittings.ts","../src/clients/FittingsClient.ts","../src/core/endpoints/fleetEndpoints.ts","../src/schemas/fleet.ts","../src/clients/FleetClient.ts","../src/core/endpoints/incursionEndpoints.ts","../src/schemas/incursions.ts","../src/clients/IncursionsClient.ts","../src/core/endpoints/industryEndpoints.ts","../src/schemas/industry.ts","../src/clients/IndustryClient.ts","../src/core/endpoints/insuranceEndpoints.ts","../src/schemas/insurance.ts","../src/clients/InsuranceClient.ts","../src/core/endpoints/killmailEndpoints.ts","../src/schemas/killmails.ts","../src/clients/KillmailsClient.ts","../src/schemas/location.ts","../src/core/endpoints/locationEndpoints.ts","../src/clients/LocationClient.ts","../src/core/endpoints/loyaltyEndpoints.ts","../src/schemas/loyalty.ts","../src/clients/LoyaltyClient.ts","../src/core/endpoints/mailEndpoints.ts","../src/schemas/mail.ts","../src/clients/MailClient.ts","../src/core/endpoints/marketEndpoints.ts","../src/schemas/market.ts","../src/clients/MarketClient.ts","../src/core/endpoints/piEndpoints.ts","../src/schemas/pi.ts","../src/schemas/universe.ts","../src/clients/PiClient.ts","../src/core/endpoints/routeEndpoints.ts","../src/clients/RouteClient.ts","../src/core/endpoints/searchEndpoints.ts","../src/clients/SearchClient.ts","../src/core/endpoints/skillEndpoints.ts","../src/schemas/skills.ts","../src/clients/SkillsClient.ts","../src/core/endpoints/sovereigntyEndpoints.ts","../src/schemas/sovereignty.ts","../src/clients/SovereigntyClient.ts","../src/schemas/status.ts","../src/core/endpoints/statusEndpoints.ts","../src/clients/StatusClient.ts","../src/core/endpoints/uiEndpoints.ts","../src/clients/UiClient.ts","../src/core/endpoints/universeEndpoints.ts","../src/clients/UniverseClient.ts","../src/core/endpoints/walletEndpoints.ts","../src/schemas/wallet.ts","../src/clients/WalletClient.ts","../src/core/endpoints/warEndpoints.ts","../src/schemas/wars.ts","../src/clients/WarsClient.ts","../src/core/endpoints/metaEndpoints.ts","../src/schemas/meta.ts","../src/clients/MetaClient.ts","../src/core/endpoints/freelanceJobsEndpoints.ts","../src/schemas/freelance-jobs.ts","../src/clients/FreelanceJobsClient.ts","../src/core/endpoints/skyhookEndpoints.ts","../src/schemas/skyhooks.ts","../src/clients/SkyhooksClient.ts","../src/core/endpoints/mercenaryEndpoints.ts","../src/schemas/mercenary.ts","../src/clients/MercenaryClient.ts","../src/core/endpoints/accessListEndpoints.ts","../src/schemas/access-lists.ts","../src/clients/AccessListsClient.ts","../src/core/endpoints/militaryCampaignEndpoints.ts","../src/schemas/military-campaigns.ts","../src/clients/MilitaryCampaignsClient.ts","../src/core/ClientRegistry.ts","../src/core/EsiDiagnostics.ts","../src/core/BatchRequestHandler.ts","../src/core/cache/ETagCacheManager.ts","../src/core/endpoints/esi-rate-limit-groups.generated.ts","../src/core/rateLimiter/RateLimiter.ts","../src/core/RequestDeduplicator.ts","../src/core/configureApiClient.ts","../src/EsiClient.ts","../src/EsiClientBuilder.ts","../src/core/ApiClientBuilder.ts","../src/core/endpoints/esi-scopes.generated.ts","../src/types/branded.ts","../src/types/generated/esi-spec.generated.ts","../src/schemas/index.ts"],"sourcesContent":["export interface RequestContext {\n url: string;\n endpoint: string;\n method: string;\n headers: Record<string, string>;\n body?: unknown;\n}\n\nexport interface ResponseContext {\n url: string;\n endpoint: string;\n method: string;\n status: number;\n headers: Record<string, string>;\n body: unknown;\n durationMs: number;\n fromCache: boolean;\n}\n\nexport type RequestInterceptor = (\n context: RequestContext,\n) => RequestContext | Promise<RequestContext>;\n\nexport type ResponseInterceptor = (\n context: ResponseContext,\n) => ResponseContext | Promise<ResponseContext>;\n\nexport class MiddlewareManager {\n private requestInterceptors: RequestInterceptor[] = [];\n private responseInterceptors: ResponseInterceptor[] = [];\n\n addRequestInterceptor(fn: RequestInterceptor): () => void {\n this.requestInterceptors.push(fn);\n return () => {\n this.requestInterceptors = this.requestInterceptors.filter(\n (i) => i !== fn,\n );\n };\n }\n\n addResponseInterceptor(fn: ResponseInterceptor): () => void {\n this.responseInterceptors.push(fn);\n return () => {\n this.responseInterceptors = this.responseInterceptors.filter(\n (i) => i !== fn,\n );\n };\n }\n\n async applyRequestInterceptors(\n context: RequestContext,\n ): Promise<RequestContext> {\n let ctx = context;\n for (const interceptor of this.requestInterceptors) {\n ctx = await interceptor(ctx);\n }\n return ctx;\n }\n\n async applyResponseInterceptors(\n context: ResponseContext,\n ): Promise<ResponseContext> {\n let ctx = context;\n for (const interceptor of this.responseInterceptors) {\n ctx = await interceptor(ctx);\n }\n return ctx;\n }\n\n hasInterceptors(): boolean {\n return (\n this.requestInterceptors.length > 0 ||\n this.responseInterceptors.length > 0\n );\n }\n\n clear(): void {\n this.requestInterceptors = [];\n this.responseInterceptors = [];\n }\n}\n","import {\n MiddlewareManager,\n RequestInterceptor,\n ResponseInterceptor,\n} from './middleware/Middleware';\nimport { ICache } from './cache/ICache';\nimport { IRateLimiter } from './rateLimiter/IRateLimiter';\nimport { ICircuitBreaker } from './circuitBreaker/ICircuitBreaker';\nimport { IDeduplicator } from './IDeduplicator';\nimport { IRetryStrategy } from './IRetryStrategy';\nimport { RetryConfig } from './util/retry';\n\nexport type EsiDatasource = 'tranquility' | 'singularity';\n\nexport type TokenProvider = () => Promise<string>;\n\nexport class ApiClient {\n private datasource?: EsiDatasource;\n private tokenProvider?: TokenProvider;\n private refreshInFlight?: Promise<string>;\n private middleware: MiddlewareManager = new MiddlewareManager();\n private cache: ICache | null = null;\n private rateLimiter: IRateLimiter | null = null;\n private circuitBreaker: ICircuitBreaker | null = null;\n private timeout: number = 30_000;\n private deduplicator: IDeduplicator | null = null;\n private retryConfig: RetryConfig | null = null;\n private retryStrategy: IRetryStrategy | null = null;\n private validateResponse: boolean = true;\n private validateRequest: boolean = false;\n private language?: string;\n private compatibilityDate?: string;\n\n constructor(\n private clientId: string,\n private link: string,\n private accessToken?: string,\n ) {\n this.link = this.link.replace(/\\/$/, '');\n }\n\n getTimeout(): number {\n return this.timeout;\n }\n\n setTimeout(timeout: number): void {\n this.timeout = timeout;\n }\n\n getCache(): ICache | null {\n return this.cache;\n }\n\n setCache(cache: ICache | null): void {\n this.cache = cache;\n }\n\n getRateLimiter(): IRateLimiter | null {\n return this.rateLimiter;\n }\n\n setRateLimiter(limiter: IRateLimiter | null): void {\n this.rateLimiter = limiter;\n }\n\n getCircuitBreaker(): ICircuitBreaker | null {\n return this.circuitBreaker;\n }\n\n setCircuitBreaker(cb: ICircuitBreaker | null): void {\n this.circuitBreaker = cb;\n }\n\n getDeduplicator(): IDeduplicator | null {\n return this.deduplicator;\n }\n\n setDeduplicator(dedup: IDeduplicator | null): void {\n this.deduplicator = dedup;\n }\n\n getRetryConfig(): RetryConfig | null {\n return this.retryConfig;\n }\n\n setRetryConfig(config: RetryConfig | null): void {\n this.retryConfig = config;\n }\n\n getRetryStrategy(): IRetryStrategy | null {\n return this.retryStrategy;\n }\n\n setRetryStrategy(strategy: IRetryStrategy | null): void {\n this.retryStrategy = strategy;\n }\n\n getValidateResponse(): boolean {\n return this.validateResponse;\n }\n\n setValidateResponse(validate: boolean): void {\n this.validateResponse = validate;\n }\n\n getValidateRequest(): boolean {\n return this.validateRequest;\n }\n\n setValidateRequest(validate: boolean): void {\n this.validateRequest = validate;\n }\n\n getMiddleware(): MiddlewareManager {\n return this.middleware;\n }\n\n addRequestInterceptor(fn: RequestInterceptor): () => void {\n return this.middleware.addRequestInterceptor(fn);\n }\n\n addResponseInterceptor(fn: ResponseInterceptor): () => void {\n return this.middleware.addResponseInterceptor(fn);\n }\n\n getAuthorizationHeader(): string | undefined {\n return this.accessToken ? `Bearer ${this.accessToken}` : undefined;\n }\n\n getLink(): string {\n return this.link;\n }\n\n getDatasource(): EsiDatasource | undefined {\n return this.datasource;\n }\n\n setDatasource(datasource: EsiDatasource | undefined): void {\n this.datasource = datasource;\n }\n\n getLanguage(): string | undefined {\n return this.language;\n }\n\n setLanguage(language: string | undefined): void {\n this.language = language;\n }\n\n getCompatibilityDate(): string | undefined {\n return this.compatibilityDate;\n }\n\n setCompatibilityDate(date: string | undefined): void {\n this.compatibilityDate = date;\n }\n\n setAccessToken(token: string): void {\n if (this.accessToken !== token) {\n this.cache?.clear();\n }\n this.accessToken = token;\n }\n\n setTokenProvider(provider: TokenProvider | undefined): void {\n this.tokenProvider = provider;\n }\n\n hasTokenProvider(): boolean {\n return this.tokenProvider !== undefined;\n }\n\n toJSON(): Record<string, unknown> {\n return {\n link: this.link,\n datasource: this.datasource,\n timeout: this.timeout,\n hasCache: this.cache !== null,\n hasRateLimiter: this.rateLimiter !== null,\n hasCircuitBreaker: this.circuitBreaker !== null,\n hasDeduplicator: this.deduplicator !== null,\n hasTokenProvider: this.tokenProvider !== undefined,\n validateResponse: this.validateResponse,\n validateRequest: this.validateRequest,\n language: this.language,\n compatibilityDate: this.compatibilityDate,\n };\n }\n\n async refreshToken(): Promise<string> {\n if (!this.tokenProvider) {\n throw new Error('No token provider configured');\n }\n\n if (this.refreshInFlight) {\n return this.refreshInFlight;\n }\n\n this.refreshInFlight = this.tokenProvider().then(\n (token) => {\n if (this.accessToken !== token) {\n this.cache?.clear();\n }\n this.accessToken = token;\n this.refreshInFlight = undefined;\n return token;\n },\n (err) => {\n this.refreshInFlight = undefined;\n throw err;\n },\n );\n\n return this.refreshInFlight;\n }\n}\n","import pino from 'pino';\nimport { ILogger } from './ILogger';\n\nconst pinoLogger = pino({ level: process.env.ESI_LOG_LEVEL || 'warn' });\n\nconst logger: ILogger = {\n info: (msg: string) => {\n pinoLogger.info(msg);\n },\n warn: (msg: string) => {\n pinoLogger.warn(msg);\n },\n error: (msg: string) => {\n pinoLogger.error(msg);\n },\n debug: (msg: string) => {\n pinoLogger.debug(msg);\n },\n};\n\nexport default logger;\n","import logger from './logger';\nimport { ILogger } from './ILogger';\n\nexport type { ILogger } from './ILogger';\n\nlet activeLogger: ILogger = logger;\n\nexport const setLogger = (customLogger: ILogger): void => {\n activeLogger = customLogger;\n};\n\nexport const getLogger = (): ILogger => activeLogger;\n\nexport const logInfo = (message: string) => {\n activeLogger.info(message);\n};\n\nexport const logError = (message: string) => {\n activeLogger.error(message);\n};\n\nexport const logWarn = (message: string) => {\n activeLogger.warn(message);\n};\n\nexport const logDebug = (message: string) => {\n activeLogger.debug(message);\n};\n","import { logWarn, logInfo } from '../logger/loggerUtil';\nimport { ICircuitBreaker } from './ICircuitBreaker';\n\nexport type CircuitState = 'closed' | 'open' | 'half-open';\n\nexport interface CircuitBreakerConfig {\n failureThreshold?: number;\n resetTimeoutMs?: number;\n halfOpenMaxAttempts?: number;\n staleThresholdMs?: number;\n /** 'resolved' (default, current behavior) | 'template' (group by endpoint template path) */\n keyStrategy?: 'resolved' | 'template';\n /** Interval in ms for automatic cleanup of stale circuits. 0 or undefined disables. Recommended value: staleThresholdMs. */\n cleanupIntervalMs?: number;\n}\n\ninterface CircuitRecord {\n state: CircuitState;\n failures: number;\n lastFailureTime: number;\n halfOpenAttempts: number;\n}\n\nexport class CircuitBreaker implements ICircuitBreaker {\n private circuits: Map<string, CircuitRecord> = new Map();\n private readonly failureThreshold: number;\n private readonly resetTimeoutMs: number;\n private readonly halfOpenMaxAttempts: number;\n private readonly staleThresholdMs: number;\n private readonly keyStrategy: 'resolved' | 'template';\n private cleanupTimer: ReturnType<typeof setInterval> | null = null;\n\n constructor(config: CircuitBreakerConfig = {}) {\n this.failureThreshold = config.failureThreshold ?? 5;\n this.resetTimeoutMs = config.resetTimeoutMs ?? 30_000;\n this.halfOpenMaxAttempts = config.halfOpenMaxAttempts ?? 1;\n this.staleThresholdMs = config.staleThresholdMs ?? 3_600_000;\n this.keyStrategy = config.keyStrategy ?? 'resolved';\n\n const cleanupIntervalMs = config.cleanupIntervalMs;\n if (cleanupIntervalMs !== undefined && cleanupIntervalMs > 0) {\n this.startCleanupTimer(cleanupIntervalMs);\n }\n }\n\n private getKey(endpoint: string): string {\n return endpoint.split('?')[0]!;\n }\n\n private getOrCreate(key: string): CircuitRecord {\n let record = this.circuits.get(key);\n if (!record) {\n record = {\n state: 'closed',\n failures: 0,\n lastFailureTime: 0,\n halfOpenAttempts: 0,\n };\n this.circuits.set(key, record);\n }\n return record;\n }\n\n checkCircuit(endpoint: string): void {\n const key = this.getKey(endpoint);\n const record = this.getOrCreate(key);\n\n if (record.state === 'closed') return;\n\n if (record.state === 'open') {\n const elapsed = Date.now() - record.lastFailureTime;\n if (elapsed >= this.resetTimeoutMs) {\n record.state = 'half-open';\n record.halfOpenAttempts = 0;\n logInfo(`Circuit half-open for ${key}, allowing probe request`);\n return;\n }\n const remainingMs = this.resetTimeoutMs - elapsed;\n throw new CircuitOpenError(key, record.failures, remainingMs);\n }\n\n if (record.state === 'half-open') {\n if (record.halfOpenAttempts >= this.halfOpenMaxAttempts) {\n throw new CircuitOpenError(key, record.failures, this.resetTimeoutMs);\n }\n record.halfOpenAttempts++;\n }\n }\n\n recordSuccess(endpoint: string): void {\n const key = this.getKey(endpoint);\n const record = this.circuits.get(key);\n if (!record) return;\n\n if (record.state === 'half-open') {\n logInfo(`Circuit closed for ${key} after successful probe`);\n }\n\n record.state = 'closed';\n record.failures = 0;\n record.halfOpenAttempts = 0;\n }\n\n recordFailure(endpoint: string, statusCode: number): void {\n // statusCode 0 = network/timeout; 420/429 = rate limited; >=500 = server errors\n if (\n statusCode !== 0 &&\n statusCode < 500 &&\n statusCode !== 420 &&\n statusCode !== 429\n ) {\n return;\n }\n\n const key = this.getKey(endpoint);\n const record = this.getOrCreate(key);\n\n record.failures++;\n record.lastFailureTime = Date.now();\n\n if (record.state === 'half-open') {\n record.state = 'open';\n logWarn(\n `Circuit re-opened for ${key} after failed probe (${record.failures} failures)`,\n );\n return;\n }\n\n if (record.failures >= this.failureThreshold) {\n record.state = 'open';\n logWarn(\n `Circuit opened for ${key} after ${record.failures} consecutive failures`,\n );\n }\n }\n\n getState(endpoint: string): CircuitState {\n const key = this.getKey(endpoint);\n const record = this.circuits.get(key);\n if (!record) return 'closed';\n\n if (record.state === 'open') {\n const elapsed = Date.now() - record.lastFailureTime;\n if (elapsed >= this.resetTimeoutMs) {\n return 'half-open';\n }\n }\n\n return record.state;\n }\n\n getStats(): {\n totalCircuits: number;\n openCircuits: number;\n circuits: Record<string, { state: CircuitState; failures: number }>;\n } {\n const circuits: Record<string, { state: CircuitState; failures: number }> =\n {};\n let openCircuits = 0;\n\n for (const [key, record] of this.circuits.entries()) {\n const state = this.getState(key);\n // eslint-disable-next-line security/detect-object-injection\n circuits[key] = { state, failures: record.failures };\n if (state === 'open') openCircuits++;\n }\n\n return {\n totalCircuits: this.circuits.size,\n openCircuits,\n circuits,\n };\n }\n\n reset(endpoint?: string): void {\n if (endpoint) {\n this.circuits.delete(this.getKey(endpoint));\n } else {\n this.circuits.clear();\n }\n }\n\n cleanup(): number {\n const now = Date.now();\n let cleaned = 0;\n for (const [key, record] of this.circuits.entries()) {\n if (\n record.state === 'closed' &&\n record.failures === 0 &&\n record.lastFailureTime > 0 &&\n now - record.lastFailureTime > this.staleThresholdMs\n ) {\n this.circuits.delete(key);\n cleaned++;\n }\n }\n if (cleaned > 0) {\n logInfo(`Circuit breaker cleanup: removed ${cleaned} stale circuits`);\n }\n return cleaned;\n }\n\n getKeyStrategy(): 'resolved' | 'template' {\n return this.keyStrategy;\n }\n\n destroy(): void {\n if (this.cleanupTimer) {\n clearInterval(this.cleanupTimer);\n this.cleanupTimer = null;\n }\n this.circuits.clear();\n }\n\n shutdown(): void {\n this.destroy();\n }\n\n private startCleanupTimer(intervalMs: number): void {\n this.cleanupTimer = setInterval(() => {\n this.cleanup();\n }, intervalMs);\n // Don't prevent process exit (important for test runners and CLI tools)\n this.cleanupTimer.unref();\n }\n}\n\nexport class CircuitOpenError extends Error {\n readonly endpoint: string;\n readonly failures: number;\n readonly retryAfterMs: number;\n\n constructor(endpoint: string, failures: number, retryAfterMs: number) {\n super(\n `Circuit breaker open for ${endpoint} after ${failures} failures (retry after ${Math.ceil(retryAfterMs / 1000)}s)`,\n );\n this.name = 'CircuitOpenError';\n this.endpoint = endpoint;\n this.failures = failures;\n this.retryAfterMs = retryAfterMs;\n }\n}\n","const SENSITIVE_PARAMS = [\n 'token',\n 'access_token',\n 'api_key',\n 'refresh_token',\n 'client_secret',\n 'code',\n 'key',\n 'secret',\n 'auth',\n 'password',\n 'bearer',\n];\n\nexport function sanitizeUrl(url?: string): string | undefined {\n if (!url) return url;\n try {\n const parsed = new URL(url);\n for (const param of SENSITIVE_PARAMS) {\n if (parsed.searchParams.has(param)) {\n parsed.searchParams.set(param, '[REDACTED]');\n }\n }\n return parsed.toString();\n } catch {\n const qIndex = url.indexOf('?');\n return qIndex >= 0 ? url.substring(0, qIndex) + '?[params-redacted]' : url;\n }\n}\n\nexport class EsiError extends Error {\n public readonly url?: string;\n\n constructor(\n public readonly statusCode: number,\n message: string,\n url?: string,\n public readonly requestId?: string,\n ) {\n super(message);\n this.name = 'EsiError';\n this.url = sanitizeUrl(url);\n }\n\n isRateLimited(): boolean {\n return this.statusCode === 420 || this.statusCode === 429;\n }\n\n isNotFound(): boolean {\n return this.statusCode === 404;\n }\n\n isUnauthorized(): boolean {\n return this.statusCode === 401;\n }\n\n isForbidden(): boolean {\n return this.statusCode === 403;\n }\n\n isServerError(): boolean {\n return this.statusCode >= 500;\n }\n\n isTimeout(): boolean {\n return this.statusCode === 0;\n }\n\n get retryable(): boolean {\n return (\n this.statusCode === 0 ||\n this.statusCode === 420 ||\n this.statusCode === 429 ||\n this.statusCode === 502 ||\n this.statusCode === 503 ||\n this.statusCode === 504\n );\n }\n}\n\nexport function isEsiError(error: unknown): error is EsiError {\n return error instanceof EsiError;\n}\n\nexport function isRateLimited(error: unknown): error is EsiError {\n return error instanceof EsiError && error.isRateLimited();\n}\n\nexport function isNotFound(error: unknown): error is EsiError {\n return error instanceof EsiError && error.isNotFound();\n}\n\nexport function isUnauthorized(error: unknown): error is EsiError {\n return error instanceof EsiError && error.isUnauthorized();\n}\n\nexport function isForbidden(error: unknown): error is EsiError {\n return error instanceof EsiError && error.isForbidden();\n}\n\nexport function isServerError(error: unknown): error is EsiError {\n return error instanceof EsiError && error.isServerError();\n}\n\nexport class TimeoutError extends EsiError {\n constructor(\n public readonly timeoutMs: number,\n url?: string,\n requestId?: string,\n ) {\n super(0, `Request timed out after ${timeoutMs}ms`, url, requestId);\n this.name = 'TimeoutError';\n }\n}\n\nexport function isTimeout(error: unknown): error is TimeoutError {\n return error instanceof TimeoutError;\n}\n\nexport function isRetryable(error: unknown): error is EsiError {\n return error instanceof EsiError && error.retryable;\n}\n\n// Re-export CircuitOpenError for the type guard — avoid forcing consumers\n// to import from the circuitBreaker subpath just for error checking.\nimport { CircuitOpenError } from '../circuitBreaker/CircuitBreaker';\n\nexport function isCircuitOpen(error: unknown): error is CircuitOpenError {\n return error instanceof CircuitOpenError;\n}\n\nexport const buildError = (\n message: string,\n type: string = 'ERROR',\n url?: string,\n): Error => {\n const error = new Error(`[${type}] ${message}`);\n if (url) {\n (error as Error & { url: string }).url = url;\n }\n return error;\n};\n\nexport type ValidationDirection = 'request' | 'response';\n\nexport class EsiValidationError extends EsiError {\n public readonly validationError: unknown;\n public readonly direction: ValidationDirection;\n\n constructor(\n url: string,\n zodError: unknown,\n requestId?: string,\n direction: ValidationDirection = 'response',\n ) {\n const safeUrl = sanitizeUrl(url) ?? url;\n const label = direction === 'request' ? 'Request body' : 'Response';\n super(0, `${label} validation failed for ${safeUrl}`, url, requestId);\n this.name = 'EsiValidationError';\n this.validationError = zodError;\n this.direction = direction;\n }\n}\n\nexport function isValidationError(error: unknown): error is EsiValidationError {\n return error instanceof EsiValidationError;\n}\n","export const PACKAGE_NAME = 'esi.ts';\nexport const PACKAGE_VERSION = '9.2.0';\nexport const USER_AGENT = `${PACKAGE_NAME}/${PACKAGE_VERSION}`;\nexport const COMPATIBILITY_DATE = '2026-05-19';\n","import { ApiClient } from '../ApiClient';\nimport { buildError } from '../util/error';\nimport { logDebug } from '../logger/loggerUtil';\nimport { ICache } from '../cache/ICache';\nimport { USER_AGENT, COMPATIBILITY_DATE } from '../constants';\n\n/**\n * Parse Cache-Control header to extract max-age TTL in milliseconds.\n */\nexport const parseCacheControlTtl = (\n headers: Record<string, string>,\n): number | undefined => {\n const cacheControl = headers['cache-control'] ?? headers['Cache-Control'];\n if (!cacheControl) return undefined;\n const match = /max-age=(\\d+)/.exec(cacheControl);\n return match ? parseInt(match[1]!, 10) * 1000 : undefined;\n};\n\n/**\n * Build the request headers for an ESI API call.\n */\nexport function buildRequestHeaders(\n client: ApiClient,\n url: string,\n method: string,\n requiresAuth: boolean,\n useETag: boolean,\n body: unknown,\n resolveCache: (client: ApiClient) => ICache | null,\n): HeadersInit {\n const headers: HeadersInit = {\n Accept: 'application/json',\n 'Accept-Encoding': 'gzip, deflate, br',\n 'User-Agent': USER_AGENT,\n 'X-Compatibility-Date': client.getCompatibilityDate() ?? COMPATIBILITY_DATE,\n };\n\n const language = client.getLanguage();\n if (language) {\n headers['Accept-Language'] = language;\n }\n\n if (requiresAuth) {\n const authHeader = client.getAuthorizationHeader();\n if (!authHeader) {\n throw buildError(\n 'Authorization header is required but not provided',\n 'NO_AUTH_TOKEN',\n );\n }\n headers['Authorization'] = authHeader;\n }\n\n const cache = resolveCache(client);\n if (useETag && method === 'GET' && cache) {\n const cachedETag = cache.getETag(url);\n if (cachedETag) {\n headers['If-None-Match'] = cachedETag;\n logDebug(`Adding If-None-Match header: ${cachedETag}`);\n }\n }\n\n if (body) {\n headers['Content-Type'] = 'application/json';\n }\n\n return headers;\n}\n","export function camelToSnake(s: string): string {\n return s.replace(/[A-Z]/g, (c) => `_${c.toLowerCase()}`);\n}\n","// Auto-generated from ESI OpenAPI spec — do not edit manually\n// Endpoints with cache TTLs: 126\n\nexport const esiCacheTtls: Record<string, number> = {\n 'GET:alliances': 3600,\n 'GET:alliances/{alliance_id}': 3600,\n 'GET:alliances/{alliance_id}/contacts': 300,\n 'GET:alliances/{alliance_id}/contacts/labels': 300,\n 'GET:alliances/{alliance_id}/corporations': 3600,\n 'GET:characters/{character_id}': 86400,\n 'GET:characters/{character_id}/agents_research': 3600,\n 'GET:characters/{character_id}/assets': 3600,\n 'GET:characters/{character_id}/attributes': 120,\n 'GET:characters/{character_id}/blueprints': 3600,\n 'GET:characters/{character_id}/calendar': 5,\n 'GET:characters/{character_id}/calendar/{event_id}': 5,\n 'PUT:characters/{character_id}/calendar/{event_id}': 5,\n 'GET:characters/{character_id}/calendar/{event_id}/attendees': 600,\n 'GET:characters/{character_id}/clones': 120,\n 'GET:characters/{character_id}/contacts': 300,\n 'GET:characters/{character_id}/contacts/labels': 300,\n 'GET:characters/{character_id}/contracts': 300,\n 'GET:characters/{character_id}/contracts/{contract_id}/bids': 300,\n 'GET:characters/{character_id}/contracts/{contract_id}/items': 3600,\n 'GET:characters/{character_id}/corporationhistory': 86400,\n 'GET:characters/{character_id}/fatigue': 300,\n 'GET:characters/{character_id}/fittings': 300,\n 'GET:characters/{character_id}/fleet': 60,\n 'GET:characters/{character_id}/freelance-jobs': 60,\n 'GET:characters/{character_id}/freelance-jobs/{job_id}/participation': 60,\n 'GET:characters/{character_id}/implants': 120,\n 'GET:characters/{character_id}/industry/jobs': 300,\n 'GET:characters/{character_id}/killmails/recent': 300,\n 'GET:characters/{character_id}/location': 5,\n 'GET:characters/{character_id}/loyalty/points': 3600,\n 'GET:characters/{character_id}/mail': 30,\n 'GET:characters/{character_id}/mail/{mail_id}': 30,\n 'GET:characters/{character_id}/mail/labels': 30,\n 'GET:characters/{character_id}/mail/lists': 120,\n 'GET:characters/{character_id}/medals': 3600,\n 'GET:characters/{character_id}/mining': 600,\n 'GET:characters/{character_id}/notifications': 600,\n 'GET:characters/{character_id}/notifications/contacts': 600,\n 'GET:characters/{character_id}/online': 60,\n 'GET:characters/{character_id}/orders': 1200,\n 'GET:characters/{character_id}/orders/history': 3600,\n 'GET:characters/{character_id}/planets': 600,\n 'GET:characters/{character_id}/planets/{planet_id}': 600,\n 'GET:characters/{character_id}/roles': 3600,\n 'GET:characters/{character_id}/search': 3600,\n 'GET:characters/{character_id}/ship': 5,\n 'GET:characters/{character_id}/skillqueue': 60,\n 'GET:characters/{character_id}/skills': 60,\n 'GET:characters/{character_id}/standings': 3600,\n 'GET:characters/{character_id}/titles': 3600,\n 'GET:characters/{character_id}/wallet': 120,\n 'GET:characters/{character_id}/wallet/journal': 3600,\n 'GET:characters/{character_id}/wallet/transactions': 3600,\n 'POST:characters/affiliation': 3600,\n 'GET:contracts/public/{region_id}': 1800,\n 'GET:contracts/public/bids/{contract_id}': 300,\n 'GET:contracts/public/items/{contract_id}': 3600,\n 'GET:corporation/{corporation_id}/mining/extractions': 1800,\n 'GET:corporation/{corporation_id}/mining/observers': 3600,\n 'GET:corporation/{corporation_id}/mining/observers/{observer_id}': 3600,\n 'GET:corporations/{corporation_id}': 3600,\n 'GET:corporations/{corporation_id}/alliancehistory': 3600,\n 'GET:corporations/{corporation_id}/assets': 3600,\n 'GET:corporations/{corporation_id}/blueprints': 3600,\n 'GET:corporations/{corporation_id}/contacts': 300,\n 'GET:corporations/{corporation_id}/contacts/labels': 300,\n 'GET:corporations/{corporation_id}/containers/logs': 600,\n 'GET:corporations/{corporation_id}/contracts': 300,\n 'GET:corporations/{corporation_id}/contracts/{contract_id}/bids': 3600,\n 'GET:corporations/{corporation_id}/contracts/{contract_id}/items': 3600,\n 'GET:corporations/{corporation_id}/customs_offices': 3600,\n 'GET:corporations/{corporation_id}/divisions': 3600,\n 'GET:corporations/{corporation_id}/facilities': 3600,\n 'GET:corporations/{corporation_id}/icons': 3600,\n 'GET:corporations/{corporation_id}/industry/jobs': 300,\n 'GET:corporations/{corporation_id}/killmails/recent': 300,\n 'GET:corporations/{corporation_id}/medals': 3600,\n 'GET:corporations/{corporation_id}/medals/issued': 3600,\n 'GET:corporations/{corporation_id}/members': 3600,\n 'GET:corporations/{corporation_id}/members/limit': 3600,\n 'GET:corporations/{corporation_id}/members/titles': 3600,\n 'GET:corporations/{corporation_id}/membertracking': 3600,\n 'GET:corporations/{corporation_id}/orders': 1200,\n 'GET:corporations/{corporation_id}/orders/history': 3600,\n 'GET:corporations/{corporation_id}/projects/{project_id}': 60,\n 'GET:corporations/{corporation_id}/projects/{project_id}/contribution/{character_id}': 60,\n 'GET:corporations/{corporation_id}/roles': 3600,\n 'GET:corporations/{corporation_id}/roles/history': 3600,\n 'GET:corporations/{corporation_id}/shareholders': 3600,\n 'GET:corporations/{corporation_id}/standings': 3600,\n 'GET:corporations/{corporation_id}/starbases': 3600,\n 'GET:corporations/{corporation_id}/starbases/{starbase_id}': 3600,\n 'GET:corporations/{corporation_id}/structures': 3600,\n 'GET:corporations/{corporation_id}/titles': 3600,\n 'GET:corporations/{corporation_id}/wallets': 300,\n 'GET:corporations/{corporation_id}/wallets/{division}/journal': 3600,\n 'GET:corporations/{corporation_id}/wallets/{division}/transactions': 3600,\n 'GET:fleets/{fleet_id}': 5,\n 'GET:fleets/{fleet_id}/members': 5,\n 'GET:fleets/{fleet_id}/wings': 5,\n 'GET:freelance-jobs/{job_id}': 60,\n 'GET:fw/systems': 1800,\n 'GET:incursions': 300,\n 'GET:industry/facilities': 3600,\n 'GET:industry/systems': 3600,\n 'GET:insurance/prices': 3600,\n 'GET:killmails/{killmail_id}/{killmail_hash}': 2592000,\n 'GET:markets/{region_id}/orders': 300,\n 'GET:markets/{region_id}/types': 600,\n 'GET:markets/prices': 3600,\n 'GET:markets/structures/{structure_id}': 300,\n 'GET:meta/changelog': 600,\n 'GET:meta/compatibility-dates': 600,\n 'GET:sovereignty/campaigns': 5,\n 'GET:sovereignty/map': 3600,\n 'GET:sovereignty/structures': 120,\n 'GET:status': 30,\n 'GET:universe/schematics/{schematic_id}': 3600,\n 'GET:universe/structures': 3600,\n 'GET:universe/structures/{structure_id}': 3600,\n 'GET:universe/system_jumps': 3600,\n 'GET:universe/system_kills': 3600,\n 'GET:wars': 3600,\n 'GET:wars/{war_id}': 3600,\n 'GET:wars/{war_id}/killmails': 3600,\n};\n","import { ApiClient } from '../ApiClient';\nimport { logDebug } from '../logger/loggerUtil';\nimport { ICache } from '../cache/ICache';\nimport { ParsedHeaders } from '../util/headersUtil';\nimport { camelToSnake } from '../util/stringUtil';\nimport { esiCacheTtls } from '../endpoints/esi-cache-ttls.generated';\nimport { parseCacheControlTtl } from './headers';\n\nexport interface EsiHandlerResponse {\n headers: Record<string, string>;\n body: unknown;\n status?: number;\n fromCache?: boolean;\n stale?: boolean;\n cacheHitType?: 'spec-ttl' | 'etag-304' | 'stale-on-error';\n responseTimeMs?: number;\n cursors?: import('../pagination/CursorPaginationHandler').CursorTokens;\n}\n\n/**\n * Look up the spec-defined cache TTL for a given method + template path.\n * Returns TTL in milliseconds, or undefined if not found.\n */\nexport function lookupSpecTtl(\n method: string,\n templatePath: string,\n): number | undefined {\n const normalized = templatePath\n .replace(/\\/$/, '')\n .replace(/\\{(\\w+)\\}/g, (_, name: string) => `{${camelToSnake(name)}}`);\n const key = `${method}:${normalized}`;\n const seconds = esiCacheTtls[key];\n return typeof seconds === 'number' ? seconds * 1000 : undefined;\n}\n\n/**\n * Attempt a spec-aware cache hit (TTL-based, no network request).\n */\nexport function trySpecAwareCacheHit(\n client: ApiClient,\n url: string,\n method: string,\n templatePath: string | undefined,\n resolveCache: (client: ApiClient) => ICache | null,\n): EsiHandlerResponse | null {\n if (method !== 'GET' || !templatePath) return null;\n const specTtlMs = lookupSpecTtl(method, templatePath);\n if (!specTtlMs) return null;\n const cache = resolveCache(client);\n if (!cache) return null;\n const entry = cache.get(url);\n if (!entry) return null;\n const age = Date.now() - entry.timestamp;\n if (age < specTtlMs) {\n logDebug(\n `Spec-aware cache hit for ${url} (age=${Math.round(age / 1000)}s, ttl=${Math.round(specTtlMs / 1000)}s)`,\n );\n return {\n headers: entry.headers,\n body: entry.data,\n status: 200,\n fromCache: true,\n cacheHitType: 'spec-ttl',\n };\n }\n return null;\n}\n\n/**\n * Attempt to return a stale cached response (used on server errors).\n */\nexport function tryStaleCacheResponse(\n client: ApiClient,\n url: string,\n parsed: ParsedHeaders,\n resolveCache: (client: ApiClient) => ICache | null,\n): EsiHandlerResponse | null {\n const cache = resolveCache(client);\n if (!cache) return null;\n const cachedEntry = cache.get(url);\n if (!cachedEntry) return null;\n return {\n headers: { ...cachedEntry.headers, ...parsed.raw },\n body: cachedEntry.data,\n status: 200,\n fromCache: true,\n stale: true,\n cacheHitType: 'stale-on-error',\n };\n}\n\n/**\n * Cache a successful response, or invalidate cache for non-GET methods.\n */\nexport function cacheResponse(\n client: ApiClient,\n url: string,\n method: string,\n endpoint: string,\n parsed: ParsedHeaders,\n data: unknown,\n useETag: boolean,\n resolveCache: (client: ApiClient) => ICache | null,\n templatePath?: string,\n): void {\n const cache = resolveCache(client);\n if (useETag && method === 'GET' && cache && parsed.etag) {\n const headerTtl = parseCacheControlTtl(parsed.raw);\n const specTtlMs = templatePath\n ? lookupSpecTtl(method, templatePath)\n : undefined;\n const ttl = specTtlMs ?? headerTtl;\n cache.set(url, parsed.etag, data, parsed.raw, ttl);\n const ttlInfo = ttl ? ` (ttl=${ttl}ms)` : '';\n logDebug(`Cached response for ${url} with ETag ${parsed.etag}${ttlInfo}`);\n }\n\n if (method !== 'GET' && cache) {\n cache.deleteByPath(endpoint.split('?')[0]!);\n }\n}\n","import { ApiClient } from '../ApiClient';\nimport { EsiError } from '../util/error';\nimport { logInfo, logWarn } from '../logger/loggerUtil';\nimport { ICache } from '../cache/ICache';\nimport { ParsedHeaders } from '../util/headersUtil';\nimport { CircuitOpenError } from '../circuitBreaker/CircuitBreaker';\nimport { buildError } from '../util/error';\nimport { logError } from '../logger/loggerUtil';\nimport { tryStaleCacheResponse, EsiHandlerResponse } from './cachePolicy';\n\nexport const STATUS_MESSAGES: Record<number, string> = {\n 201: 'Created',\n 204: 'No Content',\n 304: 'Not Modified',\n 400: 'Bad Request',\n 401: 'Unauthorized',\n 403: 'Forbidden',\n 404: 'Resource not found',\n 420: 'Error Limited',\n 422: 'Unprocessable Entity',\n 429: 'Too many requests',\n 500: 'Internal server error',\n 503: 'Service Unavailable',\n 504: 'Gateway Timeout',\n 520: 'Internal server error, did the request terminate too soon?',\n};\n\n/**\n * Handle early-return HTTP statuses (201, 204, 304).\n */\nexport function handleEarlyStatus(\n client: ApiClient,\n status: number,\n url: string,\n parsed: ParsedHeaders,\n useETag: boolean,\n resolveCache: (client: ApiClient) => ICache | null,\n): EsiHandlerResponse | null {\n if (status === 201) {\n return { headers: parsed.raw, body: undefined, status: 201 };\n }\n\n if (status === 204) {\n logInfo(`No Content for endpoint: ${url}`);\n return { headers: parsed.raw, body: undefined, status: 204 };\n }\n\n if (status === 304) {\n const cache = resolveCache(client);\n if (useETag && cache) {\n const cachedEntry = cache.get(url);\n if (cachedEntry) {\n logInfo(`Cache hit (304) for endpoint: ${url}`);\n return {\n headers: { ...cachedEntry.headers, ...parsed.raw },\n body: cachedEntry.data,\n status: 304,\n fromCache: true,\n cacheHitType: 'etag-304',\n };\n }\n }\n throw new EsiError(\n 304,\n 'Not Modified — no cached data available',\n url,\n parsed.requestId ?? undefined,\n );\n }\n\n return null;\n}\n\n/**\n * Handle error HTTP responses (4xx, 5xx). May serve stale cache on 5xx.\n */\nexport function handleErrorResponse(\n client: ApiClient,\n response: Response,\n url: string,\n parsed: ParsedHeaders,\n useETag: boolean,\n resolveCache: (client: ApiClient) => ICache | null,\n): EsiHandlerResponse | never {\n const errorMessage = STATUS_MESSAGES[response.status] || response.statusText;\n\n if (response.status >= 500 && useETag) {\n const staleResult = tryStaleCacheResponse(\n client,\n url,\n parsed,\n resolveCache,\n );\n if (staleResult) {\n logWarn(`${errorMessage} for ${url} — serving stale cache`);\n return { ...staleResult, status: response.status };\n }\n }\n\n if (response.status === 420 || response.status === 429) {\n logWarn(`Rate limited (${response.status}) on ${url}`);\n }\n\n throw new EsiError(\n response.status,\n errorMessage,\n url,\n parsed.requestId ?? undefined,\n );\n}\n\n/**\n * Wrap an unknown error into an EsiError or rethrow known errors.\n */\nexport function wrapError(error: unknown): never {\n if (error instanceof EsiError || error instanceof CircuitOpenError) {\n throw error;\n }\n if (error instanceof Error) {\n logError(`Unexpected error: ${error.message}`);\n throw buildError(error.message, 'ESIJS_ERROR');\n }\n logError(`Unexpected error: ${String(error)}`);\n throw buildError(String(error), 'ESIJS_ERROR');\n}\n","export interface RetryConfig {\n maxRetries?: number;\n baseDelayMs?: number;\n maxDelayMs?: number;\n retryMutations?: boolean;\n}\n\nexport function retryDelay(\n attempt: number,\n baseMs: number,\n maxMs: number,\n): number {\n const exponential = baseMs * Math.pow(2, attempt);\n // eslint-disable-next-line sonarjs/pseudo-random\n const jitter = exponential * (0.75 + Math.random() * 0.5);\n return Math.min(jitter, maxMs);\n}\n","export function sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n","import { EsiError } from './util/error';\nimport { CircuitOpenError } from './circuitBreaker/CircuitBreaker';\nimport { RetryConfig, retryDelay } from './util/retry';\nimport { sleep } from './util/sleep';\nimport { logInfo, logWarn, logError } from './logger/loggerUtil';\nimport { buildError } from './util/error';\nimport { IRetryStrategy } from './IRetryStrategy';\n\nexport interface RetryContext {\n endpoint: string;\n method: string;\n requiresAuth: boolean;\n refreshToken?: () => Promise<void>;\n /** @deprecated Unused — after refresh the strategy re-enters the main operation loop. */\n retryOperation?: () => Promise<unknown>;\n}\n\nexport class RetryStrategy implements IRetryStrategy {\n private readonly maxRetries: number;\n private readonly baseDelayMs: number;\n private readonly maxDelayMs: number;\n private readonly retryMutations: boolean;\n\n constructor(config?: RetryConfig) {\n this.maxRetries = config?.maxRetries ?? 0;\n this.baseDelayMs = config?.baseDelayMs ?? 1000;\n this.maxDelayMs = config?.maxDelayMs ?? 30000;\n this.retryMutations = config?.retryMutations ?? false;\n }\n\n async execute<T>(\n operation: () => Promise<T>,\n context: RetryContext,\n ): Promise<T> {\n const canRetryMethod = context.method === 'GET' || this.retryMutations;\n\n let lastError: unknown;\n let refreshAttempted = false;\n\n for (let attempt = 0; attempt <= this.maxRetries; attempt++) {\n try {\n return await operation();\n } catch (error: unknown) {\n if (error instanceof CircuitOpenError) {\n throw error;\n }\n\n if (\n !refreshAttempted &&\n error instanceof EsiError &&\n error.statusCode === 401 &&\n context.requiresAuth &&\n context.refreshToken\n ) {\n refreshAttempted = true;\n logInfo('Received 401, attempting token refresh...');\n try {\n await context.refreshToken();\n } catch (refreshError: unknown) {\n if (\n refreshError instanceof EsiError ||\n refreshError instanceof CircuitOpenError\n ) {\n throw refreshError;\n }\n const msg =\n refreshError instanceof Error\n ? refreshError.message\n : String(refreshError);\n logError(`Token refresh failed: ${msg}`);\n throw buildError(\n `Token refresh failed: ${msg}`,\n 'TOKEN_REFRESH_FAILED',\n );\n }\n logInfo('Token refreshed, retrying request');\n // Re-enter the loop so post-refresh failures use normal retry/error handling\n // (and are never mislabeled as TOKEN_REFRESH_FAILED).\n attempt--;\n continue;\n }\n\n if (\n error instanceof EsiError &&\n error.retryable &&\n canRetryMethod &&\n attempt < this.maxRetries\n ) {\n const delay = retryDelay(attempt, this.baseDelayMs, this.maxDelayMs);\n logWarn(\n `Request to ${context.endpoint} failed (${error.statusCode}), retrying in ${Math.round(delay)}ms (attempt ${attempt + 1}/${this.maxRetries})`,\n );\n await sleep(delay);\n lastError = error;\n continue;\n }\n\n throw error;\n }\n }\n\n throw lastError;\n }\n}\n","import { ApiClient } from '../ApiClient';\nimport { buildError } from '../util/error';\nimport { ICache } from '../cache/ICache';\nimport { IRateLimiter } from '../rateLimiter/IRateLimiter';\nimport { ICircuitBreaker } from '../circuitBreaker/ICircuitBreaker';\nimport { IRetryStrategy } from '../IRetryStrategy';\nimport { RetryStrategy } from '../RetryStrategy';\n\nexport function resolveCache(client: ApiClient): ICache | null {\n return client.getCache();\n}\n\nexport function resolveRateLimiter(client: ApiClient): IRateLimiter {\n const limiter = client.getRateLimiter();\n if (!limiter) {\n throw buildError(\n 'No rate limiter configured on ApiClient. ' +\n 'Set one via apiClient.setRateLimiter(new RateLimiter()).',\n 'CONFIGURATION_ERROR',\n );\n }\n return limiter;\n}\n\nexport function resolveCircuitBreaker(\n client: ApiClient,\n): ICircuitBreaker | null {\n return client.getCircuitBreaker();\n}\n\nexport function resolveRetryStrategy(client: ApiClient): IRetryStrategy {\n return (\n client.getRetryStrategy() ??\n new RetryStrategy(client.getRetryConfig() ?? undefined)\n );\n}\n","/**\n * Pagination Handler for ESI API calls\n * Handles pagination with proper error handling and empty page detection\n */\n\nimport { ApiClient } from '../ApiClient';\nimport { logInfo, logWarn, logError } from '../logger/loggerUtil';\nimport { resolveRetryStrategy } from '../requestPipeline/dependencies';\n\nexport interface PaginationOptions {\n maxPages?: number;\n stopOnEmptyPage?: boolean;\n}\n\nexport type PageFetcher = (paginatedEndpoint: string) => Promise<unknown[]>;\n\nexport class PaginationHandler {\n private static readonly DEFAULT_OPTIONS: Required<PaginationOptions> = {\n maxPages: 1000,\n stopOnEmptyPage: true,\n };\n\n /**\n * Fetch remaining pages (2..totalPages) and combine with first page data.\n * The caller has already fetched page 1 and knows the total page count.\n */\n static async fetchRemainingPages(\n client: ApiClient,\n endpoint: string,\n method: string,\n requiresAuth: boolean,\n firstPageData: unknown[],\n totalPages: number,\n body: unknown,\n options: PaginationOptions,\n pageFetch: PageFetcher,\n templatePath?: string,\n ): Promise<unknown[]> {\n const opts = { ...this.DEFAULT_OPTIONS, ...options };\n const rateLimiter = client.getRateLimiter();\n const allData: unknown[] = [...firstPageData];\n\n const effectiveMaxPage = Math.min(totalPages, opts.maxPages);\n\n if (effectiveMaxPage <= 1) {\n return allData;\n }\n\n logInfo(`Fetching pages 2-${effectiveMaxPage} for ${endpoint}...`);\n\n for (let page = 2; page <= effectiveMaxPage; page++) {\n try {\n if (rateLimiter) await rateLimiter.checkRateLimit(templatePath, method);\n\n const pageData = await this.fetchPageWithRetry(\n client,\n endpoint,\n method,\n requiresAuth,\n page,\n pageFetch,\n );\n\n if (opts.stopOnEmptyPage && (!pageData || pageData.length === 0)) {\n logWarn(`Page ${page} is empty. Stopping pagination.`);\n break;\n }\n\n allData.push(...pageData);\n logInfo(\n `Fetched page ${page}/${effectiveMaxPage} (${pageData.length} items)`,\n );\n } catch (error) {\n logError(\n `Failed to fetch page ${page}: ${error instanceof Error ? error.message : String(error)}`,\n );\n throw error instanceof Error\n ? error\n : new Error(`Failed to fetch page ${page}: ${String(error)}`);\n }\n }\n\n logInfo(\n `Pagination complete. Fetched ${allData.length} total items from up to ${effectiveMaxPage} pages.`,\n );\n return allData;\n }\n\n /**\n * Fetch a single page with retry logic.\n *\n * Delegates to the configured `IRetryStrategy` (exponential backoff\n * with jitter) instead of implementing a custom retry loop.\n */\n private static async fetchPageWithRetry(\n client: ApiClient,\n endpoint: string,\n method: string,\n requiresAuth: boolean,\n page: number,\n pageFetch: PageFetcher,\n ): Promise<unknown[]> {\n const retryStrategy = resolveRetryStrategy(client);\n const paginatedEndpoint = this.buildPaginatedEndpoint(endpoint, page);\n\n return retryStrategy.execute(\n () => {\n logInfo(`Fetching page ${page} via pipeline: ${paginatedEndpoint}`);\n return pageFetch(paginatedEndpoint);\n },\n {\n endpoint: paginatedEndpoint,\n method,\n requiresAuth,\n refreshToken: client.hasTokenProvider()\n ? () => client.refreshToken().then(() => {})\n : undefined,\n },\n );\n }\n\n /**\n * Build a paginated endpoint path.\n * Preserves any existing query params on the endpoint and appends page=N.\n */\n private static buildPaginatedEndpoint(\n endpoint: string,\n page: number,\n ): string {\n const separator = endpoint.includes('?') ? '&' : '?';\n return `${endpoint}${separator}page=${page}`;\n }\n}\n","import { ApiClient } from '../ApiClient';\nimport { buildError, EsiError } from '../util/error';\nimport { logInfo, logWarn } from '../logger/loggerUtil';\nimport { ParsedHeaders } from '../util/headersUtil';\nimport {\n PaginationHandler,\n PageFetcher,\n} from '../pagination/PaginationHandler';\nimport { CursorTokens } from '../pagination/CursorPaginationHandler';\nimport { CircuitOpenError } from '../circuitBreaker/CircuitBreaker';\nimport { ICache } from '../cache/ICache';\nimport { cacheResponse, EsiHandlerResponse } from './cachePolicy';\n\n/**\n * Handle cursor-based pagination. Returns null if the response\n * does not contain cursor pagination headers.\n */\nexport function handleCursorPagination(\n parsed: ParsedHeaders,\n data: unknown,\n): EsiHandlerResponse | null {\n if (!parsed.hasCursorPagination) return null;\n\n const cursors: CursorTokens = {\n before: parsed.cursorBefore,\n after: parsed.cursorAfter,\n };\n\n return { headers: parsed.raw, body: data, status: 200, cursors };\n}\n\n/**\n * Handle offset-based pagination. Fetches remaining pages if xPages > 1.\n */\nexport async function handleOffsetPagination(\n client: ApiClient,\n endpoint: string,\n method: string,\n requiresAuth: boolean,\n parsed: ParsedHeaders,\n data: unknown,\n body: unknown,\n url: string,\n useETag: boolean,\n pageFetch: PageFetcher,\n resolveCache: (client: ApiClient) => ICache | null,\n templatePath?: string,\n): Promise<EsiHandlerResponse> {\n const totalPages = parsed.xPages;\n\n if (totalPages <= 1) {\n return { headers: parsed.raw, body: data, status: 200 };\n }\n\n logInfo(\n `Found ${totalPages} pages, fetching additional pages with rate limiting...`,\n );\n\n try {\n const firstPageData = Array.isArray(data) ? data : [data];\n const allData = await PaginationHandler.fetchRemainingPages(\n client,\n endpoint,\n method,\n requiresAuth,\n firstPageData,\n totalPages,\n body,\n {\n maxPages: Math.min(totalPages, 1000),\n stopOnEmptyPage: true,\n },\n pageFetch,\n templatePath,\n );\n\n cacheResponse(\n client,\n url,\n method,\n endpoint,\n parsed,\n allData,\n useETag,\n resolveCache,\n templatePath,\n );\n return { headers: parsed.raw, body: allData, status: 200 };\n } catch (paginationError: unknown) {\n const msg =\n paginationError instanceof Error\n ? paginationError.message\n : String(paginationError);\n logWarn(`Pagination failed for ${url}: ${msg}`);\n if (\n paginationError instanceof EsiError ||\n paginationError instanceof CircuitOpenError\n ) {\n throw paginationError;\n }\n throw buildError(\n `Pagination incomplete for ${url}: ${msg}`,\n 'PAGINATION_INCOMPLETE',\n url,\n );\n }\n}\n","import { ApiClient } from '../ApiClient';\nimport { RequestContext, ResponseContext } from '../middleware/Middleware';\nimport { EsiHandlerResponse } from './cachePolicy';\n\n/**\n * Apply request interceptors from the middleware pipeline.\n */\nexport async function applyRequestMiddleware(\n client: ApiClient,\n url: string,\n endpoint: string,\n method: string,\n headers: Record<string, string>,\n body: unknown,\n): Promise<{ url: string; headers: Record<string, string>; body: unknown }> {\n const middleware = client.getMiddleware();\n if (!middleware.hasInterceptors()) {\n return { url, headers, body };\n }\n const reqCtx: RequestContext = {\n url,\n endpoint,\n method,\n headers: { ...headers },\n body,\n };\n const modified = await middleware.applyRequestInterceptors(reqCtx);\n return {\n url: modified.url,\n headers: modified.headers,\n body: modified.body,\n };\n}\n\n/**\n * Apply response interceptors from the middleware pipeline.\n */\nexport async function applyResponseInterceptors(\n client: ApiClient,\n result: EsiHandlerResponse,\n url: string,\n endpoint: string,\n method: string,\n startTime: number,\n): Promise<EsiHandlerResponse> {\n const middleware = client.getMiddleware();\n if (!middleware.hasInterceptors()) return result;\n\n const responseCtx: ResponseContext = {\n url,\n endpoint,\n method,\n status: result.status ?? 200,\n headers: result.headers,\n body: result.body,\n durationMs: Date.now() - startTime,\n fromCache: result.fromCache ?? false,\n };\n\n const modified = await middleware.applyResponseInterceptors(responseCtx);\n return {\n ...result,\n headers: modified.headers,\n body: modified.body,\n };\n}\n","export interface EsiWarning {\n code: number;\n message: string;\n}\n\nexport interface ParsedHeaders {\n raw: Record<string, string>;\n xPages: number;\n etag: string | null;\n cacheControl: string | null;\n expires: string | null;\n lastModified: string | null;\n cursorBefore: string | null;\n cursorAfter: string | null;\n hasCursorPagination: boolean;\n warning: EsiWarning | null;\n requestId: string | null;\n date: string | null;\n contentLanguage: string | null;\n}\n\nexport function parseWarning(\n value: string | null | undefined,\n): EsiWarning | null {\n if (!value) return null;\n const match =\n /^(\\d{3}) - \"([^\"]+)\"$/.exec(value) ??\n /^(\\d{3}) - ([^ ].+[^ ])$/.exec(value);\n if (!match) return null;\n const [, code, message] = match;\n return { code: parseInt(code!, 10), message: message! };\n}\n\nexport function parseHeaders(fetchHeaders: Headers): ParsedHeaders {\n const raw: Record<string, string> = {};\n fetchHeaders.forEach((value, key) => {\n raw[key.toLowerCase()] = value;\n });\n\n const cursorBefore = raw['x-cursor-before'] ?? null;\n const cursorAfter = raw['x-cursor-after'] ?? null;\n\n return {\n raw,\n xPages: parseInt(raw['x-pages'] ?? '1', 10),\n etag: raw['etag'] ?? null,\n cacheControl: raw['cache-control'] ?? null,\n expires: raw['expires'] ?? null,\n lastModified: raw['last-modified'] ?? null,\n cursorBefore,\n cursorAfter,\n hasCursorPagination: 'x-cursor-before' in raw || 'x-cursor-after' in raw,\n warning: parseWarning(raw['warning']),\n requestId: raw['x-esi-request-id'] ?? null,\n date: raw['date'] ?? null,\n contentLanguage: raw['content-language'] ?? null,\n };\n}\n","import { ApiClient } from '../ApiClient';\nimport { EsiError, TimeoutError } from '../util/error';\nimport { logInfo, logWarn, logError } from '../logger/loggerUtil';\nimport { parseHeaders, ParsedHeaders } from '../util/headersUtil';\nimport { ICache } from '../cache/ICache';\nimport { IRateLimiter } from '../rateLimiter/IRateLimiter';\nimport { ICircuitBreaker } from '../circuitBreaker/ICircuitBreaker';\nimport { buildError } from '../util/error';\nimport { buildRequestHeaders } from './headers';\nimport { applyRequestMiddleware } from './middlewareBridge';\nimport { STATUS_MESSAGES } from './statusHandling';\n\nexport interface RawFetchResult {\n response: Response;\n parsed: ParsedHeaders;\n url: string;\n}\n\nexport interface SingleFetchResult {\n data: unknown;\n parsed: ParsedHeaders;\n url: string;\n}\n\n/**\n * Execute a single HTTP fetch with rate limiting, circuit breaker, and timeout.\n */\nexport async function executeSingleFetch(\n client: ApiClient,\n endpoint: string,\n method: string,\n body: unknown,\n requiresAuth: boolean,\n useETag: boolean,\n resolveCache: (client: ApiClient) => ICache | null,\n resolveRateLimiter: (client: ApiClient) => IRateLimiter,\n resolveCircuitBreaker: (client: ApiClient) => ICircuitBreaker | null,\n requestTimeout?: number,\n templatePath?: string,\n): Promise<RawFetchResult> {\n const rawUrl = `${client.getLink()}/${endpoint}`;\n const builtHeaders = buildRequestHeaders(\n client,\n rawUrl,\n method,\n requiresAuth,\n useETag,\n body,\n resolveCache,\n ) as Record<string, string>;\n\n const req = await applyRequestMiddleware(\n client,\n rawUrl,\n endpoint,\n method,\n builtHeaders,\n body,\n );\n\n const options: RequestInit = {\n method,\n headers: req.headers,\n body: req.body ? JSON.stringify(req.body) : undefined,\n };\n\n const url = req.url;\n logInfo(`Hitting endpoint: ${url}`);\n\n const cb = resolveCircuitBreaker(client);\n const cbKey =\n cb && templatePath && cb.getKeyStrategy?.() === 'template'\n ? templatePath\n : endpoint;\n\n if (cb) cb.checkCircuit(cbKey);\n\n let cbRecorded = false;\n\n try {\n const rateLimiter = resolveRateLimiter(client);\n await rateLimiter.checkRateLimit(templatePath, method, req.headers);\n\n const timeoutMs = requestTimeout ?? client.getTimeout();\n const controller = new AbortController();\n const timer = globalThis.setTimeout(() => controller.abort(), timeoutMs);\n options.signal = controller.signal;\n\n let response: Response;\n try {\n response = await fetch(url, options);\n } catch (err) {\n clearTimeout(timer);\n if (cb) {\n cb.recordFailure(cbKey, 0);\n cbRecorded = true;\n }\n if (err instanceof Error && err.name === 'AbortError') {\n throw new TimeoutError(timeoutMs, url);\n }\n throw err;\n }\n clearTimeout(timer);\n\n const parsed = parseHeaders(response.headers);\n\n rateLimiter.updateFromResponse(\n parsed.raw,\n response.status,\n templatePath,\n method,\n req.headers,\n );\n\n if (cb) {\n if (\n response.status >= 500 ||\n response.status === 420 ||\n response.status === 429\n ) {\n cb.recordFailure(cbKey, response.status);\n } else {\n cb.recordSuccess(cbKey);\n }\n cbRecorded = true;\n }\n\n if (parsed.warning) {\n logWarn(\n `ESI Warning ${parsed.warning.code} for ${url}: ${parsed.warning.message}`,\n );\n }\n\n return { response, parsed, url };\n } finally {\n if (cb && !cbRecorded) {\n cb.recordFailure(cbKey, 0);\n }\n }\n}\n\n/**\n * Parse a JSON response body, throwing on parse failure.\n */\nexport async function parseJsonBody(\n response: Response,\n _url: string,\n): Promise<unknown> {\n try {\n return (await response.json()) as unknown;\n } catch (jsonError) {\n const msg =\n jsonError instanceof Error ? jsonError.message : String(jsonError);\n logError(`Failed to parse JSON response: ${msg}`);\n throw buildError(`Invalid JSON response: ${msg}`, 'JSON_PARSE_ERROR');\n }\n}\n\n/**\n * Fetch a single page: execute the fetch, check for errors, parse JSON.\n */\nexport async function fetchOnePage(\n client: ApiClient,\n endpoint: string,\n method: string,\n body: unknown,\n requiresAuth: boolean,\n useETag: boolean,\n resolveCache: (client: ApiClient) => ICache | null,\n resolveRateLimiter: (client: ApiClient) => IRateLimiter,\n resolveCircuitBreaker: (client: ApiClient) => ICircuitBreaker | null,\n requestTimeout?: number,\n templatePath?: string,\n): Promise<SingleFetchResult> {\n const { response, parsed, url } = await executeSingleFetch(\n client,\n endpoint,\n method,\n body,\n requiresAuth,\n useETag,\n resolveCache,\n resolveRateLimiter,\n resolveCircuitBreaker,\n requestTimeout,\n templatePath,\n );\n\n if (!response.ok) {\n throw new EsiError(\n response.status,\n STATUS_MESSAGES[response.status] || response.statusText,\n url,\n parsed.requestId ?? undefined,\n );\n }\n\n const data = await parseJsonBody(response, url);\n return { data, parsed, url };\n}\n","import { ApiClient } from './ApiClient';\n\nimport {\n trySpecAwareCacheHit,\n cacheResponse,\n handleEarlyStatus,\n handleErrorResponse,\n wrapError,\n handleCursorPagination,\n handleOffsetPagination,\n applyResponseInterceptors,\n executeSingleFetch,\n fetchOnePage,\n parseJsonBody,\n resolveCache,\n resolveRateLimiter,\n resolveCircuitBreaker,\n resolveRetryStrategy,\n} from './requestPipeline';\nexport type { EsiHandlerResponse } from './requestPipeline';\nimport type { EsiHandlerResponse } from './requestPipeline';\n\n// --- Main request orchestration ---\n\nconst executeRequest = async (\n client: ApiClient,\n endpoint: string,\n method: string,\n body?: unknown,\n requiresAuth: boolean = false,\n useETag: boolean = true,\n requestTimeout?: number,\n templatePath?: string,\n): Promise<EsiHandlerResponse> => {\n const startTime = Date.now();\n const finish = (r: EsiHandlerResponse) => {\n r.responseTimeMs = Date.now() - startTime;\n const rawUrl = `${client.getLink()}/${endpoint}`;\n return applyResponseInterceptors(\n client,\n r,\n rawUrl,\n endpoint,\n method,\n startTime,\n );\n };\n\n try {\n const { response, parsed, url } = await executeSingleFetch(\n client,\n endpoint,\n method,\n body,\n requiresAuth,\n useETag,\n resolveCache,\n resolveRateLimiter,\n resolveCircuitBreaker,\n requestTimeout,\n templatePath,\n );\n\n if (response.status === 201) {\n let data: unknown;\n try {\n data = (await response.json()) as unknown;\n } catch {\n data = undefined;\n }\n return finish({ headers: parsed.raw, body: data, status: 201 });\n }\n\n const earlyResult = handleEarlyStatus(\n client,\n response.status,\n url,\n parsed,\n useETag,\n resolveCache,\n );\n if (earlyResult) return finish(earlyResult);\n\n if (!response.ok) {\n const staleOrThrow = handleErrorResponse(\n client,\n response,\n url,\n parsed,\n useETag,\n resolveCache,\n );\n return finish(staleOrThrow);\n }\n\n const data = await parseJsonBody(response, url);\n cacheResponse(\n client,\n url,\n method,\n endpoint,\n parsed,\n data,\n useETag,\n resolveCache,\n templatePath,\n );\n\n const cursorResult = handleCursorPagination(parsed, data);\n if (cursorResult) return finish(cursorResult);\n\n const pageFetch = async (paginatedEndpoint: string): Promise<unknown[]> => {\n const result = await fetchOnePage(\n client,\n paginatedEndpoint,\n method,\n body,\n requiresAuth,\n false,\n resolveCache,\n resolveRateLimiter,\n resolveCircuitBreaker,\n requestTimeout,\n templatePath,\n );\n return Array.isArray(result.data)\n ? (result.data as unknown[])\n : [result.data];\n };\n\n const paginatedResult = await handleOffsetPagination(\n client,\n endpoint,\n method,\n requiresAuth,\n parsed,\n data,\n body,\n url,\n useETag,\n pageFetch,\n resolveCache,\n templatePath,\n );\n return finish(paginatedResult);\n } catch (error: unknown) {\n wrapError(error);\n }\n};\n\nexport const handleSinglePageRequest = async (\n client: ApiClient,\n endpoint: string,\n method: string,\n body?: unknown,\n requiresAuth: boolean = false,\n templatePath?: string,\n requestTimeout?: number,\n): Promise<EsiHandlerResponse> => {\n const doExecute = () =>\n fetchOnePage(\n client,\n endpoint,\n method,\n body,\n requiresAuth,\n true,\n resolveCache,\n resolveRateLimiter,\n resolveCircuitBreaker,\n requestTimeout,\n templatePath,\n ).then(({ data, parsed }) => ({\n headers: parsed.raw,\n body: data,\n }));\n\n const retryStrategy = resolveRetryStrategy(client);\n\n return retryStrategy.execute<EsiHandlerResponse>(doExecute, {\n endpoint,\n method,\n requiresAuth,\n refreshToken: client.hasTokenProvider()\n ? () => client.refreshToken().then(() => {})\n : undefined,\n });\n};\n\nexport const handleRequest = async (\n client: ApiClient,\n endpoint: string,\n method: string,\n body?: unknown,\n requiresAuth: boolean = false,\n useETag: boolean = true,\n templatePath?: string,\n requestTimeout?: number,\n): Promise<EsiHandlerResponse> => {\n const rawUrl = `${client.getLink()}/${endpoint}`;\n const startTime = Date.now();\n const specHit = trySpecAwareCacheHit(\n client,\n rawUrl,\n method,\n templatePath,\n resolveCache,\n );\n if (specHit) {\n return applyResponseInterceptors(\n client,\n specHit,\n rawUrl,\n endpoint,\n method,\n startTime,\n );\n }\n\n const doExecute = () =>\n executeRequest(\n client,\n endpoint,\n method,\n body,\n requiresAuth,\n useETag,\n requestTimeout,\n templatePath,\n );\n\n const dedup = client.getDeduplicator();\n const canDedup = dedup && method === 'GET' && !body;\n\n const operation = () =>\n canDedup\n ? dedup.dedupe<EsiHandlerResponse>(endpoint, doExecute)\n : doExecute();\n\n const retryStrategy = resolveRetryStrategy(client);\n\n return retryStrategy.execute<EsiHandlerResponse>(operation, {\n endpoint,\n method,\n requiresAuth,\n refreshToken: client.hasTokenProvider()\n ? () => client.refreshToken().then(() => {})\n : undefined,\n });\n};\n","import { buildError } from './error';\n\nconst UNSAFE_PATH_CHARS = /[/\\\\?#@!$&'()*+,;=<>{}|^`]/;\n\nexport function validatePathParam(paramName: string, value: unknown): string {\n if (value === null || value === undefined || value === '') {\n throw buildError(\n `Path parameter '${paramName}' must not be empty`,\n 'VALIDATION_ERROR',\n );\n }\n\n const str = `${value as string | number}`;\n\n if (UNSAFE_PATH_CHARS.test(str)) {\n throw buildError(\n `Path parameter '${paramName}' contains invalid characters`,\n 'VALIDATION_ERROR',\n );\n }\n\n if (typeof value === 'number' && !Number.isFinite(value)) {\n throw buildError(\n `Path parameter '${paramName}' must be a finite number`,\n 'VALIDATION_ERROR',\n );\n }\n\n return str;\n}\n\nconst ALLOWED_ESI_HOSTS = ['esi.evetech.net'];\n\nexport function validateBaseUrl(\n url: string,\n allowCustomHost?: boolean,\n): string {\n let parsed: URL;\n try {\n parsed = new URL(url);\n } catch {\n throw buildError(`Invalid base URL: ${url}`, 'VALIDATION_ERROR');\n }\n\n if (parsed.protocol !== 'https:') {\n throw buildError('Base URL must use HTTPS protocol', 'VALIDATION_ERROR');\n }\n\n if (!allowCustomHost && !ALLOWED_ESI_HOSTS.includes(parsed.hostname)) {\n throw buildError(\n `Base URL host '${parsed.hostname}' is not in the allowlist. ` +\n `Allowed hosts: ${ALLOWED_ESI_HOSTS.join(', ')}. ` +\n `Set unsafeAllowCustomHost to bypass this check.`,\n 'VALIDATION_ERROR',\n );\n }\n\n return url.replace(/\\/$/, '');\n}\n\nexport function validateQueryParam(paramName: string, value: unknown): string {\n if (value === null || value === undefined) {\n throw buildError(\n `Query parameter '${paramName}' must not be null or undefined`,\n 'VALIDATION_ERROR',\n );\n }\n\n const str = `${value as string | number}`;\n\n if (typeof value === 'number' && !Number.isFinite(value)) {\n throw buildError(\n `Query parameter '${paramName}' must be a finite number`,\n 'VALIDATION_ERROR',\n );\n }\n\n if (str.length > 2000) {\n throw buildError(\n `Query parameter '${paramName}' exceeds maximum length`,\n 'VALIDATION_ERROR',\n );\n }\n\n return str;\n}\n","import { EndpointDefinition } from './EndpointDefinition';\nimport { validatePathParam, validateQueryParam } from '../util/validation';\n\nexport interface EndpointPathResult {\n path: string;\n body: unknown;\n}\n\nexport function buildEndpointPath(\n def: EndpointDefinition,\n args: unknown[],\n datasource?: string,\n): EndpointPathResult {\n let argIndex = 0;\n let path = def.path;\n\n if (def.pathParams) {\n for (const param of def.pathParams) {\n const raw = args[argIndex++];\n const validated = validatePathParam(param, raw);\n path = path.replace(`{${param}}`, encodeURIComponent(validated));\n }\n }\n\n if (def.queryParams) {\n const queryParts: string[] = [];\n for (const [paramName, queryKey] of Object.entries(def.queryParams)) {\n const value = args[argIndex++];\n if (value !== undefined) {\n const validated = validateQueryParam(paramName, value);\n queryParts.push(`${queryKey}=${encodeURIComponent(validated)}`);\n }\n }\n if (queryParts.length > 0) {\n path += (path.includes('?') ? '&' : '?') + queryParts.join('&');\n }\n }\n\n let body: unknown = undefined;\n if (def.bodyBuilder) {\n /* eslint-disable @typescript-eslint/no-unsafe-argument */\n body = def.bodyBuilder(\n ...(args.slice(argIndex) as Parameters<typeof def.bodyBuilder>),\n );\n /* eslint-enable @typescript-eslint/no-unsafe-argument */\n } else if (def.hasBody) {\n // eslint-disable-next-line security/detect-object-injection\n body = args[argIndex];\n }\n\n if (datasource) {\n path +=\n (path.includes('?') ? '&' : '?') +\n `datasource=${encodeURIComponent(datasource)}`;\n }\n\n return { path, body };\n}\n","import { ApiClient } from '../ApiClient';\nimport { handleRequest, EsiHandlerResponse } from '../ApiRequestHandler';\nimport { EndpointMap, EndpointArgs } from './EndpointDefinition';\nimport { CursorTokens } from '../pagination/CursorPaginationHandler';\nimport {\n EsiResponse,\n EsiResult,\n EsiResponseMeta,\n} from '../../types/api-responses';\nimport { buildEndpointPath } from './buildEndpointPath';\nimport { parseWarning } from '../util/headersUtil';\nimport { logWarn } from '../logger/loggerUtil';\nimport { EsiError, EsiValidationError } from '../util/error';\nimport type { z } from 'zod';\n\nexport interface CursorOptions {\n before?: string;\n after?: string;\n}\n\nexport interface CursorResult<T = unknown> {\n data: T[];\n cursors: CursorTokens;\n}\n\nexport interface CreateClientOptions {\n returnMetadata?: boolean;\n safeMode?: boolean;\n}\n\n/** Extract the element type from an array type, or return T unchanged. */\nexport type UnwrapArray<T> = T extends readonly (infer E)[] ? E : T;\n\n/**\n * Infer the result type from an endpoint definition's responseSchema.\n *\n * - When `cursorPagination: true`, wraps in `CursorResult<ElementType>`.\n * - When `responseSchema` is present, uses `z.infer` to extract the type.\n * - Falls back to `unknown` when no `responseSchema` is defined.\n */\nexport type InferEndpointResult<D> = D extends { cursorPagination: true }\n ? D extends { responseSchema: infer S extends z.ZodTypeAny }\n ? CursorResult<UnwrapArray<z.infer<S>>>\n : CursorResult\n : D extends { responseSchema: infer S extends z.ZodTypeAny }\n ? z.infer<S>\n : unknown;\n\ntype ClientMethods<T extends EndpointMap> = {\n [K in keyof T]: (\n ...args: EndpointArgs<T[K]>\n ) => Promise<InferEndpointResult<T[K]>>;\n};\n\nexport type WithMetadata<T> = {\n [K in keyof T]: T[K] extends (...args: infer A) => Promise<infer R>\n ? (...args: A) => Promise<EsiResponse<R>>\n : T[K];\n};\n\nexport type WithSafeMode<T> = {\n [K in keyof T]: T[K] extends (...args: infer A) => Promise<infer R>\n ? (...args: A) => Promise<EsiResult<R>>\n : T[K];\n};\n\nfunction buildMeta(response: EsiHandlerResponse): EsiResponseMeta {\n const meta: EsiResponseMeta = {\n headers: response.headers,\n fromCache: response.fromCache ?? false,\n stale: response.stale ?? false,\n };\n if (response.cacheHitType) meta.cacheHitType = response.cacheHitType;\n if (response.responseTimeMs !== undefined)\n meta.responseTimeMs = response.responseTimeMs;\n const w = parseWarning(response.headers['warning']);\n if (w) meta.warning = w;\n if (response.headers['x-esi-request-id'])\n meta.requestId = response.headers['x-esi-request-id'];\n if (response.headers['date']) meta.date = response.headers['date'];\n if (response.headers['content-language'])\n meta.contentLanguage = response.headers['content-language'];\n if (response.headers['x-ratelimit-remaining']) {\n meta.rateLimit = {\n remaining: parseInt(response.headers['x-ratelimit-remaining'], 10),\n limit: parseInt(response.headers['x-ratelimit-limit'] ?? '0', 10),\n used: parseInt(response.headers['x-ratelimit-used'] ?? '0', 10),\n group: response.headers['x-ratelimit-group'] ?? null,\n };\n }\n return meta;\n}\n\n/* eslint-disable sonarjs/cognitive-complexity */\nexport function createClient<T extends EndpointMap>(\n apiClient: ApiClient,\n endpoints: T,\n options?: CreateClientOptions,\n): ClientMethods<T> {\n const client = {} as ClientMethods<T>;\n const returnMetadata = options?.returnMetadata ?? false;\n const safeMode = options?.safeMode ?? false;\n\n for (const [methodName, def] of Object.entries(endpoints)) {\n // eslint-disable-next-line security/detect-object-injection\n (client as Record<string, (...args: unknown[]) => Promise<unknown>>)[\n methodName\n ] = async (...args: unknown[]) => {\n try {\n if (def.deprecated) {\n const parts = [`Endpoint '${methodName}' is deprecated.`];\n if (def.deprecated.message) parts.push(def.deprecated.message);\n if (def.deprecated.replacedBy)\n parts.push(`Use '${def.deprecated.replacedBy}' instead.`);\n if (def.deprecated.sunsetDate)\n parts.push(`Sunset date: ${def.deprecated.sunsetDate}.`);\n logWarn(parts.join(' '));\n }\n\n const built = buildEndpointPath(def, args, apiClient.getDatasource());\n let path = built.path;\n const body = built.body;\n\n // Opt-in request body validation\n if (\n apiClient.getValidateRequest() &&\n def.requestSchema &&\n body != null\n ) {\n const reqResult = def.requestSchema.safeParse(body);\n if (!reqResult.success) {\n throw new EsiValidationError(\n `${apiClient.getLink()}/${path}`,\n reqResult.error,\n undefined,\n 'request',\n );\n }\n }\n\n if (def.cursorPagination) {\n const lastArg = args[args.length - 1];\n const isCursorArg =\n lastArg != null &&\n typeof lastArg === 'object' &&\n ('before' in lastArg || 'after' in lastArg);\n const cursorOpts: CursorOptions | undefined = isCursorArg\n ? (lastArg as CursorOptions)\n : undefined;\n\n if (cursorOpts) {\n const parts: string[] = [];\n if (cursorOpts.before)\n parts.push(`before=${encodeURIComponent(cursorOpts.before)}`);\n if (cursorOpts.after)\n parts.push(`after=${encodeURIComponent(cursorOpts.after)}`);\n if (parts.length > 0) {\n path += (path.includes('?') ? '&' : '?') + parts.join('&');\n }\n }\n\n const response = await handleRequest(\n apiClient,\n path,\n def.method,\n body,\n def.requiresAuth,\n true,\n def.path,\n );\n let responseBody = response.body;\n if (def.responseSchema && apiClient.getValidateResponse()) {\n const result = def.responseSchema.safeParse(responseBody);\n if (!result.success) {\n throw new EsiValidationError(\n `${apiClient.getLink()}/${path}`,\n result.error,\n );\n }\n responseBody = result.data;\n }\n let data: unknown[];\n if (Array.isArray(responseBody)) {\n data = responseBody as unknown[];\n } else if (responseBody !== null && responseBody !== undefined) {\n data = [responseBody];\n } else {\n data = [];\n }\n const cursorResult: CursorResult = {\n data,\n cursors: response.cursors ?? { before: null, after: null },\n };\n\n if (returnMetadata || safeMode) {\n const meta = buildMeta(response);\n if (safeMode) {\n return { ok: true, data: cursorResult, meta };\n }\n return { data: cursorResult, meta };\n }\n return cursorResult;\n }\n\n const response = await handleRequest(\n apiClient,\n path,\n def.method,\n body,\n def.requiresAuth,\n true,\n def.path,\n );\n let responseBody = response.body;\n if (def.responseSchema && apiClient.getValidateResponse()) {\n const result = def.responseSchema.safeParse(responseBody);\n if (!result.success) {\n throw new EsiValidationError(\n `${apiClient.getLink()}/${path}`,\n result.error,\n );\n }\n responseBody = result.data;\n }\n if (safeMode) {\n return { ok: true, data: responseBody, meta: buildMeta(response) };\n }\n if (returnMetadata) {\n return { data: responseBody, meta: buildMeta(response) };\n }\n return responseBody;\n } catch (err) {\n if (safeMode) {\n const error =\n err instanceof EsiError\n ? err\n : new EsiError(\n 0,\n err instanceof Error ? err.message : String(err),\n );\n return { ok: false, error };\n }\n throw err;\n }\n };\n }\n\n return client;\n}\n/* eslint-enable sonarjs/cognitive-complexity */\n\n/**\n * Fetch all pages of a cursor-paginated endpoint.\n *\n * ESI returns cursor tokens in the response body. This helper follows\n * `after` tokens until the dataset is exhausted (empty items array).\n *\n * Usage with body-based cursors (ESI's actual format):\n * const allJobs = await fetchAllCursorPages(\n * (before, after) => client.freelanceJobs.getFreelanceJobs(before, after),\n * (response) => response.freelance_jobs,\n * (response) => response.cursor,\n * );\n *\n * Usage with CursorResult shape:\n * const all = await fetchAllCursorPages(\n * (before, after) => fetcher({ before, after }),\n * (r) => r.data,\n * (r) => r.cursors,\n * );\n */\nexport async function fetchAllCursorPages<TResponse, TItem = unknown>(\n fetcher: (before?: string, after?: string) => Promise<TResponse>,\n getItems: (response: TResponse) => TItem[],\n getCursor: (response: TResponse) => {\n before?: string | null;\n after?: string | null;\n },\n): Promise<TItem[]> {\n const allData: TItem[] = [];\n let afterToken: string | undefined;\n let hasMore = true;\n\n while (hasMore) {\n const response = await fetcher(undefined, afterToken);\n const items = getItems(response);\n\n if (!items || items.length === 0) {\n hasMore = false;\n continue;\n }\n\n allData.push(...items);\n\n const cursor = getCursor(response);\n if (!cursor.after) {\n hasMore = false;\n continue;\n }\n\n afterToken = cursor.after;\n }\n\n return allData;\n}\n","import { ApiClient } from '../ApiClient';\nimport { handleSinglePageRequest } from '../ApiRequestHandler';\nimport { logInfo } from '../logger/loggerUtil';\nimport { EsiValidationError } from '../util/error';\nimport type { EndpointDefinition } from '../endpoints/EndpointDefinition';\n\nexport interface PageResult<T = unknown> {\n data: T[];\n page: number;\n totalPages: number;\n}\n\ntype ResponseSchema = NonNullable<EndpointDefinition['responseSchema']>;\n\nfunction extractArray<T>(body: unknown): T[] {\n if (Array.isArray(body)) return body as T[];\n if (body !== undefined && body !== null) return [body as T];\n return [];\n}\n\nfunction validatePageBody(\n body: unknown,\n schema: ResponseSchema | undefined,\n url: string,\n validate: boolean,\n): unknown {\n if (!schema || !validate) return body;\n const result = schema.safeParse(body);\n if (!result.success) {\n throw new EsiValidationError(url, result.error);\n }\n return result.data;\n}\n\nexport async function* fetchPages<T = unknown>(\n client: ApiClient,\n endpoint: string,\n method: string,\n requiresAuth: boolean = false,\n body?: unknown,\n templatePath?: string,\n responseSchema?: ResponseSchema,\n): AsyncGenerator<PageResult<T>, void, undefined> {\n const validate = client.getValidateResponse();\n const firstResponse = await handleSinglePageRequest(\n client,\n endpoint,\n method,\n body,\n requiresAuth,\n templatePath,\n );\n\n const firstBody = validatePageBody(\n firstResponse.body,\n responseSchema,\n `${client.getLink()}/${endpoint}`,\n validate,\n );\n\n const totalPages = parseInt(firstResponse.headers['x-pages'] || '1', 10);\n\n yield { data: extractArray<T>(firstBody), page: 1, totalPages };\n\n for (let page = 2; page <= totalPages; page++) {\n const sep = endpoint.includes('?') ? '&' : '?';\n const pagedEndpoint = `${endpoint}${sep}page=${page}`;\n\n logInfo(`Fetching page ${page}/${totalPages}: ${pagedEndpoint}`);\n\n const response = await handleSinglePageRequest(\n client,\n pagedEndpoint,\n method,\n body,\n requiresAuth,\n templatePath,\n );\n\n const pageBody = validatePageBody(\n response.body,\n responseSchema,\n `${client.getLink()}/${pagedEndpoint}`,\n validate,\n );\n const pageData = extractArray<T>(pageBody);\n if (pageData.length === 0) break;\n\n yield { data: pageData, page, totalPages };\n }\n}\n","import { ApiClient } from '../core/ApiClient';\nimport {\n createClient,\n CreateClientOptions,\n WithMetadata,\n WithSafeMode,\n} from '../core/endpoints/createClient';\nimport { EndpointMap } from '../core/endpoints/EndpointDefinition';\nimport { buildEndpointPath } from '../core/endpoints/buildEndpointPath';\nimport {\n fetchPages,\n PageResult,\n} from '../core/pagination/AsyncPaginationIterator';\n\ntype ClientMethods<T extends EndpointMap> = ReturnType<typeof createClient<T>>;\n\nexport abstract class BaseEsiClient<T extends EndpointMap> {\n protected api: ClientMethods<T>;\n protected _client: ApiClient;\n protected _endpoints: T;\n private _metaApi?: ClientMethods<T>;\n private _safeApi?: ClientMethods<T>;\n\n constructor(client: ApiClient, endpoints: T) {\n this._client = client;\n this._endpoints = endpoints;\n this.api = createClient(client, endpoints);\n }\n\n public streamEndpoint<R>(\n endpointName: string & keyof T,\n ...args: unknown[]\n ): AsyncGenerator<PageResult<R>, void, undefined> {\n const def = this._endpoints[endpointName]!;\n const { path, body } = buildEndpointPath(\n def,\n args,\n this._client.getDatasource(),\n );\n return fetchPages<R>(\n this._client,\n path,\n def.method,\n def.requiresAuth,\n body,\n def.path,\n def.responseSchema,\n );\n }\n\n withMetadata(): WithMetadata<Omit<this, 'withMetadata' | 'withSafeMode'>> {\n if (!this._metaApi) {\n this._metaApi = createClient(this._client, this._endpoints, {\n returnMetadata: true,\n });\n }\n return this._metaApi as unknown as WithMetadata<\n Omit<this, 'withMetadata' | 'withSafeMode'>\n >;\n }\n\n withSafeMode(): WithSafeMode<Omit<this, 'withMetadata' | 'withSafeMode'>> {\n if (!this._safeApi) {\n this._safeApi = createClient(this._client, this._endpoints, {\n safeMode: true,\n });\n }\n return this._safeApi as unknown as WithSafeMode<\n Omit<this, 'withMetadata' | 'withSafeMode'>\n >;\n }\n}\n","import { z } from 'zod';\nimport { EndpointMap } from './EndpointDefinition';\nimport { AllianceInfoSchema, AllianceIconSchema } from '../../schemas/alliance';\n\nexport const allianceEndpoints = {\n getAllianceById: {\n path: 'alliances/{allianceId}/',\n method: 'GET',\n requiresAuth: false,\n pathParams: ['allianceId'],\n responseSchema: AllianceInfoSchema,\n },\n getCorporations: {\n path: 'alliances/{allianceId}/corporations/',\n method: 'GET',\n requiresAuth: false,\n pathParams: ['allianceId'],\n responseSchema: z.array(z.number()),\n },\n getIcons: {\n path: 'alliances/{allianceId}/icons/',\n method: 'GET',\n requiresAuth: false,\n pathParams: ['allianceId'],\n responseSchema: AllianceIconSchema,\n },\n getAlliances: {\n path: 'alliances',\n method: 'GET',\n requiresAuth: false,\n responseSchema: z.array(z.number()),\n },\n} as const satisfies EndpointMap;\n","import { z } from 'zod';\nimport { esiEnum } from './esiEnum';\n\nexport const AllianceInfoSchema = z.looseObject({\n alliance_id: z.number().optional(),\n name: z.string(),\n ticker: z.string(),\n creator_id: z.number(),\n creator_corporation_id: z.number(),\n executor_corporation_id: z.number().optional(),\n date_founded: z.string(),\n faction_id: z.number().optional(),\n});\n\nexport const AllianceContactSchema = z.looseObject({\n contact_id: z.number(),\n contact_type: esiEnum(['character', 'corporation', 'alliance']),\n standing: z.number(),\n label_ids: z.array(z.number()).optional(),\n});\n\nexport const AllianceContactLabelSchema = z.looseObject({\n label_id: z.number(),\n label_name: z.string(),\n});\n\nexport const AllianceIconSchema = z.looseObject({\n px64x64: z.string().optional(),\n px128x128: z.string().optional(),\n});\n","import { z } from 'zod';\n\nexport function esiEnum<const T extends readonly [string, ...string[]]>(\n values: T,\n): z.ZodType<T[number] | (string & {})> {\n return z.union([\n z.enum(values as unknown as [string, ...string[]]),\n z.string(),\n ]);\n}\n","import { z } from 'zod';\nimport { EndpointMap } from './EndpointDefinition';\nimport { ContactSchema, ContactLabelSchema } from '../../schemas/contacts';\n\nexport const contactEndpoints = {\n getAllianceContacts: {\n path: 'alliances/{allianceId}/contacts',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['allianceId'],\n responseSchema: z.array(ContactSchema),\n },\n getAllianceContactLabels: {\n path: 'alliances/{allianceId}/contacts/labels',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['allianceId'],\n responseSchema: z.array(ContactLabelSchema),\n },\n getCharacterContacts: {\n path: 'characters/{characterId}/contacts',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n responseSchema: z.array(ContactSchema),\n },\n getCharacterContactLabels: {\n path: 'characters/{characterId}/contacts/labels',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n responseSchema: z.array(ContactLabelSchema),\n },\n getCorporationContacts: {\n path: 'corporations/{corporationId}/contacts',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId'],\n responseSchema: z.array(ContactSchema),\n },\n getCorporationContactLabels: {\n path: 'corporations/{corporationId}/contacts/labels',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId'],\n responseSchema: z.array(ContactLabelSchema),\n },\n addContacts: {\n path: 'characters/{characterId}/contacts',\n method: 'POST',\n requiresAuth: true,\n pathParams: ['characterId'],\n queryParams: { standing: 'standing' },\n bodyBuilder: (contactIds: number[]) => contactIds,\n requestSchema: z.array(z.number().int()),\n },\n editContacts: {\n path: 'characters/{characterId}/contacts',\n method: 'PUT',\n requiresAuth: true,\n pathParams: ['characterId'],\n queryParams: { standing: 'standing' },\n bodyBuilder: (contactIds: number[]) => contactIds,\n },\n deleteCharacterContacts: {\n path: 'characters/{characterId}/contacts',\n method: 'DELETE',\n requiresAuth: true,\n pathParams: ['characterId'],\n queryParams: { contactIds: 'contact_ids' },\n },\n} as const satisfies EndpointMap;\n","import { z } from 'zod';\nimport { esiEnum } from './esiEnum';\n\nexport const ContactSchema = z.looseObject({\n contact_id: z.number(),\n contact_type: esiEnum(['character', 'corporation', 'alliance', 'faction']),\n standing: z.number(),\n label_ids: z.array(z.number()).optional(),\n is_blocked: z.boolean().optional(),\n is_watched: z.boolean().optional(),\n});\n\nexport const ContactLabelSchema = z.looseObject({\n label_id: z.number(),\n label_name: z.string(),\n});\n","import { ApiClient } from '../core/ApiClient';\nimport { BaseEsiClient } from './BaseEsiClient';\nimport { createClient } from '../core/endpoints/createClient';\nimport { allianceEndpoints } from '../core/endpoints/allianceEndpoints';\nimport { contactEndpoints } from '../core/endpoints/contactEndpoints';\nimport {\n AllianceInfo,\n AllianceContact,\n AllianceContactLabel,\n AllianceIcon,\n} from '../types/api-responses';\nimport { PageResult } from '../core/pagination/AsyncPaginationIterator';\nimport { logWarn } from '../core/logger/loggerUtil';\n\nexport class AllianceClient extends BaseEsiClient<typeof allianceEndpoints> {\n private contactApi: ReturnType<typeof createClient<typeof contactEndpoints>>;\n\n constructor(client: ApiClient) {\n super(client, allianceEndpoints);\n this.contactApi = createClient(client, contactEndpoints);\n }\n\n /**\n * Retrieve public information about an alliance.\n *\n * @param allianceId - The ID of the alliance to look up\n * @returns Public alliance information including name, ticker, and founding date\n */\n getAllianceById(allianceId: number): Promise<AllianceInfo> {\n return this.api.getAllianceById(allianceId);\n }\n\n /**\n * Retrieve contacts for an alliance.\n *\n * @deprecated Use ContactsClient.getAllianceContacts() instead\n * @param allianceId - The ID of the alliance whose contacts to retrieve\n * @returns A list of alliance contacts with standings and contact types\n * @requires Authentication\n */\n getContacts(allianceId: number): Promise<AllianceContact[]> {\n logWarn(\n 'AllianceClient.getContacts() is deprecated. Use ContactsClient.getAllianceContacts() instead. Planned removal in next major version.',\n );\n // Schema mismatch: ContactSchema uses a wider contact_type enum than AllianceContactSchema.\n // Cast through unknown until schemas are unified.\n return this.contactApi.getAllianceContacts(\n allianceId,\n ) as unknown as Promise<AllianceContact[]>;\n }\n\n /**\n * Retrieve custom contact labels for an alliance.\n *\n * @deprecated Use ContactsClient.getAllianceContactLabels() instead\n * @param allianceId - The ID of the alliance whose contact labels to retrieve\n * @returns A list of custom labels used to categorize alliance contacts\n * @requires Authentication\n */\n getContactLabels(allianceId: number): Promise<AllianceContactLabel[]> {\n logWarn(\n 'AllianceClient.getContactLabels() is deprecated. Use ContactsClient.getAllianceContactLabels() instead. Planned removal in next major version.',\n );\n // Schema mismatch: ContactLabelSchema vs AllianceContactLabelSchema are structurally\n // identical but TypeScript treats them as distinct nominal types from different schemas.\n return this.contactApi.getAllianceContactLabels(allianceId);\n }\n\n /**\n * Retrieve the list of corporation IDs that are members of an alliance.\n *\n * @param allianceId - The ID of the alliance whose member corporations to retrieve\n * @returns An array of corporation IDs belonging to the alliance\n */\n getCorporations(allianceId: number): Promise<number[]> {\n return this.api.getCorporations(allianceId);\n }\n\n /**\n * Retrieve icon URLs for an alliance.\n *\n * @param allianceId - The ID of the alliance whose icons to retrieve\n * @returns Icon URLs at various resolutions for the alliance\n */\n getIcons(allianceId: number): Promise<AllianceIcon> {\n return this.api.getIcons(allianceId);\n }\n\n /**\n * Retrieve a list of all active alliance IDs in EVE Online.\n *\n * @returns An array of all active alliance IDs\n */\n getAlliances(): Promise<number[]> {\n return this.api.getAlliances();\n }\n\n streamAlliances(): AsyncGenerator<PageResult<number>, void, undefined> {\n return this.streamEndpoint<number>('getAlliances');\n }\n\n streamCorporations(\n allianceId: number,\n ): AsyncGenerator<PageResult<number>, void, undefined> {\n return this.streamEndpoint<number>('getCorporations', allianceId);\n }\n}\n","import { z } from 'zod';\nimport { EndpointMap } from './EndpointDefinition';\nimport {\n CharacterAssetSchema,\n AssetLocationSchema,\n AssetNameSchema,\n} from '../../schemas/assets';\n\nexport const assetEndpoints = {\n getCharacterAssets: {\n path: 'characters/{characterId}/assets/',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n responseSchema: z.array(CharacterAssetSchema),\n },\n getCorporationAssets: {\n path: 'corporations/{corporationId}/assets/',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId'],\n responseSchema: z.array(CharacterAssetSchema),\n },\n postCharacterAssetLocations: {\n path: 'characters/{characterId}/assets/locations/',\n method: 'POST',\n requiresAuth: true,\n pathParams: ['characterId'],\n bodyBuilder: (itemIds: number[]) => itemIds,\n responseSchema: z.array(AssetLocationSchema),\n },\n postCharacterAssetNames: {\n path: 'characters/{characterId}/assets/names/',\n method: 'POST',\n requiresAuth: true,\n pathParams: ['characterId'],\n bodyBuilder: (itemIds: number[]) => itemIds,\n responseSchema: z.array(AssetNameSchema),\n },\n postCorporationAssetLocations: {\n path: 'corporations/{corporationId}/assets/locations/',\n method: 'POST',\n requiresAuth: true,\n pathParams: ['corporationId'],\n bodyBuilder: (itemIds: number[]) => itemIds,\n },\n postCorporationAssetNames: {\n path: 'corporations/{corporationId}/assets/names/',\n method: 'POST',\n requiresAuth: true,\n pathParams: ['corporationId'],\n bodyBuilder: (itemIds: number[]) => itemIds,\n },\n} as const satisfies EndpointMap;\n","import { z } from 'zod';\nimport { esiEnum } from './esiEnum';\n\nexport const CharacterAssetSchema = z.looseObject({\n item_id: z.number(),\n type_id: z.number(),\n quantity: z.number(),\n location_id: z.number(),\n location_type: esiEnum(['station', 'solar_system', 'item', 'other']),\n location_flag: z.string(),\n is_singleton: z.boolean(),\n is_blueprint_copy: z.boolean().optional(),\n});\n\nexport const AssetLocationSchema = z.looseObject({\n item_id: z.number(),\n position: z.looseObject({\n x: z.number(),\n y: z.number(),\n z: z.number(),\n }),\n});\n\nexport const AssetNameSchema = z.looseObject({\n item_id: z.number(),\n name: z.string(),\n});\n","import { ApiClient } from '../core/ApiClient';\nimport { BaseEsiClient } from './BaseEsiClient';\nimport { assetEndpoints } from '../core/endpoints/assetEndpoints';\nimport {\n CharacterAsset,\n AssetLocation,\n AssetName,\n} from '../types/api-responses';\nimport { PageResult } from '../core/pagination/AsyncPaginationIterator';\n\nexport class AssetsClient extends BaseEsiClient<typeof assetEndpoints> {\n constructor(client: ApiClient) {\n super(client, assetEndpoints);\n }\n\n /**\n * Retrieve a list of assets owned by a character.\n *\n * @param characterId - The ID of the character whose assets to retrieve\n * @returns A list of the character's assets including type, quantity, and location\n * @requires Authentication\n */\n getCharacterAssets(characterId: number): Promise<CharacterAsset[]> {\n return this.api.getCharacterAssets(characterId) as Promise<\n CharacterAsset[]\n >;\n }\n\n /**\n * Look up the locations of specific assets owned by a character via a bulk POST request.\n *\n * @param characterId - The ID of the character who owns the assets\n * @param itemIds - An array of item IDs to look up locations for\n * @returns Location information for each requested asset\n * @requires Authentication\n */\n postCharacterAssetLocations(\n characterId: number,\n itemIds: number[],\n ): Promise<AssetLocation[]> {\n return this.api.postCharacterAssetLocations(\n characterId,\n itemIds,\n ) as Promise<AssetLocation[]>;\n }\n\n /**\n * Look up the names of specific assets owned by a character via a bulk POST request.\n *\n * @param characterId - The ID of the character who owns the assets\n * @param itemIds - An array of item IDs to look up names for\n * @returns The user-assigned names for each requested asset\n * @requires Authentication\n */\n postCharacterAssetNames(\n characterId: number,\n itemIds: number[],\n ): Promise<AssetName[]> {\n return this.api.postCharacterAssetNames(characterId, itemIds) as Promise<\n AssetName[]\n >;\n }\n\n /**\n * Retrieve a list of assets owned by a corporation.\n *\n * @param corporationId - The ID of the corporation whose assets to retrieve\n * @returns A list of the corporation's assets including type, quantity, and location\n * @requires Authentication\n */\n getCorporationAssets(corporationId: number): Promise<CharacterAsset[]> {\n return this.api.getCorporationAssets(corporationId) as Promise<\n CharacterAsset[]\n >;\n }\n\n /**\n * Look up the locations of specific assets owned by a corporation via a bulk POST request.\n *\n * @param corporationId - The ID of the corporation that owns the assets\n * @param itemIds - An array of item IDs to look up locations for\n * @returns Location information for each requested asset\n * @requires Authentication\n */\n postCorporationAssetLocations(\n corporationId: number,\n itemIds: number[],\n ): Promise<AssetLocation[]> {\n return this.api.postCorporationAssetLocations(\n corporationId,\n itemIds,\n ) as Promise<AssetLocation[]>;\n }\n\n /**\n * Look up the names of specific assets owned by a corporation via a bulk POST request.\n *\n * @param corporationId - The ID of the corporation that owns the assets\n * @param itemIds - An array of item IDs to look up names for\n * @returns The user-assigned names for each requested asset\n * @requires Authentication\n */\n postCorporationAssetNames(\n corporationId: number,\n itemIds: number[],\n ): Promise<AssetName[]> {\n return this.api.postCorporationAssetNames(\n corporationId,\n itemIds,\n ) as Promise<AssetName[]>;\n }\n\n streamCharacterAssets(\n characterId: number,\n ): AsyncGenerator<PageResult<CharacterAsset>, void, undefined> {\n return this.streamEndpoint<CharacterAsset>(\n 'getCharacterAssets',\n characterId,\n );\n }\n\n streamCorporationAssets(\n corporationId: number,\n ): AsyncGenerator<PageResult<CharacterAsset>, void, undefined> {\n return this.streamEndpoint<CharacterAsset>(\n 'getCorporationAssets',\n corporationId,\n );\n }\n}\n","import { z } from 'zod';\nimport { EndpointMap } from './EndpointDefinition';\nimport {\n CalendarEventSchema,\n CalendarEventDetailSchema,\n CalendarEventAttendeeSchema,\n} from '../../schemas/calendar';\n\nexport const calendarEndpoints = {\n getCalendarEvents: {\n path: 'characters/{characterId}/calendar/',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n responseSchema: z.array(CalendarEventSchema),\n },\n getCalendarEventById: {\n path: 'characters/{characterId}/calendar/{eventId}/',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId', 'eventId'],\n responseSchema: CalendarEventDetailSchema,\n },\n getEventAttendees: {\n path: 'characters/{characterId}/calendar/{eventId}/attendees/',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId', 'eventId'],\n responseSchema: z.array(CalendarEventAttendeeSchema),\n },\n respondToCalendarEvent: {\n path: 'characters/{characterId}/calendar/{eventId}/',\n method: 'PUT',\n requiresAuth: true,\n pathParams: ['characterId', 'eventId'],\n bodyBuilder: (response: string) => ({ response }),\n },\n} as const satisfies EndpointMap;\n","import { z } from 'zod';\nimport { esiEnum } from './esiEnum';\n\nexport const CalendarEventSchema = z.looseObject({\n event_id: z.number(),\n event_date: z.string(),\n title: z.string(),\n importance: z.number(),\n event_response: esiEnum([\n 'declined',\n 'not_responded',\n 'accepted',\n 'tentative',\n ]),\n});\n\nexport const CalendarEventDetailSchema = z.looseObject({\n event_id: z.number(),\n date: z.string(),\n title: z.string(),\n text: z.string(),\n owner_id: z.number(),\n owner_name: z.string(),\n owner_type: esiEnum([\n 'eve_server',\n 'corporation',\n 'faction',\n 'character',\n 'alliance',\n ]),\n duration: z.number(),\n importance: z.number(),\n response: z.string(),\n});\n\nexport const CalendarEventAttendeeSchema = z.looseObject({\n character_id: z.number(),\n event_response: esiEnum([\n 'declined',\n 'not_responded',\n 'accepted',\n 'tentative',\n ]),\n});\n","import { ApiClient } from '../core/ApiClient';\nimport { BaseEsiClient } from './BaseEsiClient';\nimport { calendarEndpoints } from '../core/endpoints/calendarEndpoints';\nimport {\n CalendarEvent,\n CalendarEventDetail,\n CalendarEventAttendee,\n} from '../types/api-responses';\nimport { PageResult } from '../core/pagination/AsyncPaginationIterator';\n\nexport class CalendarClient extends BaseEsiClient<typeof calendarEndpoints> {\n constructor(client: ApiClient) {\n super(client, calendarEndpoints);\n }\n\n /**\n * Retrieve a character's upcoming calendar events.\n *\n * @param characterId - The ID of the character whose calendar events to retrieve\n * @returns A list of upcoming calendar events\n * @requires Authentication\n */\n getCalendarEvents(characterId: number): Promise<CalendarEvent[]> {\n return this.api.getCalendarEvents(characterId);\n }\n\n /**\n * Retrieve detailed information about a specific calendar event for a character.\n *\n * @param characterId - The ID of the character who owns the event\n * @param eventId - The ID of the calendar event to retrieve\n * @returns Detailed event information including title, description, and timing\n * @requires Authentication\n */\n getCalendarEventById(\n characterId: number,\n eventId: number,\n ): Promise<CalendarEventDetail> {\n return this.api.getCalendarEventById(characterId, eventId);\n }\n\n /**\n * Set a character's response to a calendar event (accepted, declined, or tentative).\n *\n * @param characterId - The ID of the character responding to the event\n * @param eventId - The ID of the calendar event to respond to\n * @param response - The response status to set for this event\n * @requires Authentication\n */\n respondToCalendarEvent(\n characterId: number,\n eventId: number,\n response: string,\n ): Promise<void> {\n return this.api.respondToCalendarEvent(\n characterId,\n eventId,\n response,\n ) as Promise<void>;\n }\n\n /**\n * Retrieve the list of attendees and their response statuses for a calendar event.\n *\n * @param characterId - The ID of the character who owns the event\n * @param eventId - The ID of the calendar event whose attendees to retrieve\n * @returns A list of attendees with their response statuses\n * @requires Authentication\n */\n getEventAttendees(\n characterId: number,\n eventId: number,\n ): Promise<CalendarEventAttendee[]> {\n return this.api.getEventAttendees(characterId, eventId);\n }\n\n streamCalendarEvents(\n characterId: number,\n ): AsyncGenerator<PageResult<CalendarEvent>, void, undefined> {\n return this.streamEndpoint<CalendarEvent>('getCalendarEvents', characterId);\n }\n\n streamEventAttendees(\n characterId: number,\n eventId: number,\n ): AsyncGenerator<PageResult<CalendarEventAttendee>, void, undefined> {\n return this.streamEndpoint<CalendarEventAttendee>(\n 'getEventAttendees',\n characterId,\n eventId,\n );\n }\n}\n","import { z } from 'zod';\nimport { EndpointMap } from './EndpointDefinition';\nimport {\n CharacterInfoSchema,\n CharacterPortraitSchema,\n AgentResearchSchema,\n BlueprintSchema,\n CorporationHistorySchema,\n JumpFatigueSchema,\n MedalSchema,\n NotificationSchema,\n CharacterTitleSchema,\n CharacterRoleSchema,\n ContactNotificationSchema,\n} from '../../schemas/character';\nimport { StandingSchema } from '../../schemas/common';\n\nexport const characterEndpoints = {\n getCharacterPublicInfo: {\n path: 'characters/{characterId}/',\n method: 'GET',\n requiresAuth: false,\n pathParams: ['characterId'],\n responseSchema: CharacterInfoSchema,\n },\n getAgentsResearch: {\n path: 'characters/{characterId}/agents_research/',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n responseSchema: z.array(AgentResearchSchema),\n },\n getBlueprints: {\n path: 'characters/{characterId}/blueprints/',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n responseSchema: z.array(BlueprintSchema),\n },\n getRoles: {\n path: 'characters/{characterId}/roles',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n responseSchema: CharacterRoleSchema,\n },\n getStandings: {\n path: 'characters/{characterId}/standings',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n responseSchema: z.array(StandingSchema),\n },\n getTitles: {\n path: 'characters/{characterId}/titles',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n responseSchema: z.array(CharacterTitleSchema),\n },\n getContactNotifications: {\n path: 'characters/{characterId}/notifications/contacts/',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n responseSchema: z.array(ContactNotificationSchema),\n },\n getCorporationHistory: {\n path: 'characters/{characterId}/corporationhistory/',\n method: 'GET',\n requiresAuth: false,\n pathParams: ['characterId'],\n responseSchema: z.array(CorporationHistorySchema),\n },\n getJumpFatigue: {\n path: 'characters/{characterId}/fatigue/',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n responseSchema: JumpFatigueSchema,\n },\n getMedals: {\n path: 'characters/{characterId}/medals/',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n responseSchema: z.array(MedalSchema),\n },\n getNotifications: {\n path: 'characters/{characterId}/notifications/',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n responseSchema: z.array(NotificationSchema),\n },\n getPortrait: {\n path: 'characters/{characterId}/portrait/',\n method: 'GET',\n requiresAuth: false,\n pathParams: ['characterId'],\n responseSchema: CharacterPortraitSchema,\n },\n postCharacterAffiliation: {\n path: 'characters/affiliation',\n method: 'POST',\n requiresAuth: false,\n hasBody: true,\n },\n calculateCspaChargeCost: {\n path: 'characters/{characterId}/cspa/',\n method: 'POST',\n requiresAuth: true,\n pathParams: ['characterId'],\n hasBody: true,\n },\n} as const satisfies EndpointMap;\n","import { z } from 'zod';\nimport { esiEnum } from './esiEnum';\n\nexport const CharacterInfoSchema = z.looseObject({\n character_id: z.number().optional(),\n name: z.string(),\n description: z.string().optional(),\n corporation_id: z.number(),\n alliance_id: z.number().optional(),\n faction_id: z.number().optional(),\n ancestry_id: z.number().optional(),\n bloodline_id: z.number(),\n race_id: z.number(),\n gender: esiEnum(['male', 'female']),\n security_status: z.number().optional(),\n title: z.string().optional(),\n birthday: z.string(),\n});\n\nexport const CharacterPortraitSchema = z.looseObject({\n px64x64: z.string().optional(),\n px128x128: z.string().optional(),\n px256x256: z.string().optional(),\n px512x512: z.string().optional(),\n});\n\nexport const CharacterAttributesSchema = z.looseObject({\n charisma: z.number(),\n intelligence: z.number(),\n memory: z.number(),\n perception: z.number(),\n willpower: z.number(),\n bonus_remaps: z.number().optional(),\n last_remap_date: z.string().optional(),\n accrued_remap_cooldown_date: z.string().optional(),\n});\n\nexport const AgentResearchSchema = z.looseObject({\n agent_id: z.number(),\n skill_type_id: z.number(),\n started_at: z.string(),\n points_per_day: z.number(),\n remainder_points: z.number(),\n});\n\nexport const BlueprintSchema = z.looseObject({\n item_id: z.number(),\n type_id: z.number(),\n location_id: z.number(),\n location_flag: z.string(),\n quantity: z.number(),\n time_efficiency: z.number(),\n material_efficiency: z.number(),\n runs: z.number(),\n});\n\nexport const CorporationHistorySchema = z.looseObject({\n corporation_id: z.number(),\n record_id: z.number(),\n start_date: z.string(),\n is_deleted: z.boolean().optional(),\n});\n\nexport const JumpFatigueSchema = z.looseObject({\n jump_fatigue_expire_date: z.string().optional(),\n last_jump_date: z.string().optional(),\n last_update_date: z.string().optional(),\n});\n\nexport const MedalSchema = z.looseObject({\n medal_id: z.number(),\n title: z.string(),\n description: z.string(),\n date: z.string(),\n issuer_id: z.number(),\n corporation_id: z.number(),\n reason: z.string(),\n status: esiEnum(['private', 'public']),\n graphics: z.array(\n z.looseObject({\n part: z.number(),\n layer: z.number(),\n graphic: z.string(),\n color: z.number().optional(),\n }),\n ),\n});\n\nexport const NotificationSchema = z.looseObject({\n notification_id: z.number(),\n type: z.string(),\n sender_id: z.number(),\n sender_type: esiEnum([\n 'character',\n 'corporation',\n 'alliance',\n 'faction',\n 'other',\n ]),\n timestamp: z.string(),\n text: z.string().optional(),\n is_read: z.boolean().optional(),\n});\n\nexport const CharacterTitleSchema = z.looseObject({\n title_id: z.number(),\n name: z.string(),\n});\n\nexport const CharacterAffiliationSchema = z.looseObject({\n character_id: z.number(),\n corporation_id: z.number(),\n alliance_id: z.number().optional(),\n faction_id: z.number().optional(),\n});\n\nexport const ContactNotificationSchema = z.looseObject({\n notification_id: z.number(),\n sender_character_id: z.number(),\n message: z.string(),\n send_date: z.string(),\n standing_level: z.number(),\n});\n\nexport const CharacterRoleSchema = z.looseObject({\n roles: z.array(z.string()).optional(),\n roles_at_hq: z.array(z.string()).optional(),\n roles_at_base: z.array(z.string()).optional(),\n roles_at_other: z.array(z.string()).optional(),\n});\n","import { z } from 'zod';\nimport { esiEnum } from './esiEnum';\n\nexport const StandingSchema = z.looseObject({\n from_id: z.number(),\n from_type: esiEnum(['agent', 'npc_corp', 'faction']),\n standing: z.number(),\n});\n\nexport const RateLimitMetaSchema = z.object({\n remaining: z.number(),\n limit: z.number(),\n used: z.number(),\n group: z.string().nullable(),\n});\n\nexport const EsiResponseMetaSchema = z.looseObject({\n headers: z.record(z.string(), z.string()),\n fromCache: z.boolean(),\n stale: z.boolean(),\n cacheHitType: z.enum(['spec-ttl', 'etag-304', 'stale-on-error']).optional(),\n warning: z\n .object({\n code: z.number(),\n message: z.string(),\n })\n .optional(),\n requestId: z.string().optional(),\n date: z.string().optional(),\n contentLanguage: z.string().optional(),\n rateLimit: RateLimitMetaSchema.optional(),\n responseTimeMs: z.number().optional(),\n});\n\nexport function esiResponse<T extends z.ZodTypeAny>(dataSchema: T) {\n return z.object({\n data: dataSchema,\n meta: EsiResponseMetaSchema,\n });\n}\n","import { ApiClient } from '../core/ApiClient';\nimport { BaseEsiClient } from './BaseEsiClient';\nimport { characterEndpoints } from '../core/endpoints/characterEndpoints';\nimport {\n CharacterInfo,\n CharacterPortrait,\n AgentResearch,\n Blueprint,\n CorporationHistory,\n JumpFatigue,\n Medal,\n Notification,\n Standing,\n CharacterTitle,\n CharacterAffiliation,\n CharacterRole,\n} from '../types/api-responses';\nimport { PageResult } from '../core/pagination/AsyncPaginationIterator';\n\nexport class CharacterClient extends BaseEsiClient<typeof characterEndpoints> {\n constructor(client: ApiClient) {\n super(client, characterEndpoints);\n }\n\n /**\n * Retrieve publicly available information about a character.\n *\n * @param characterId - The ID of the character to look up\n * @returns Public character information including name, corporation, and birthday\n */\n getCharacterPublicInfo(characterId: number): Promise<CharacterInfo> {\n return this.api.getCharacterPublicInfo(characterId);\n }\n\n /**\n * Retrieve a character's active research agents and their accumulated research points.\n *\n * @param characterId - The ID of the character whose research agents to retrieve\n * @returns A list of research agents with skill, points, and start date information\n * @requires Authentication\n */\n getCharacterAgentsResearch(characterId: number): Promise<AgentResearch[]> {\n return this.api.getAgentsResearch(characterId);\n }\n\n /**\n * Retrieve blueprints owned by a character.\n *\n * @param characterId - The ID of the character whose blueprints to retrieve\n * @returns A list of blueprints with material/time efficiency and run information\n * @requires Authentication\n */\n getCharacterBlueprints(characterId: number): Promise<Blueprint[]> {\n return this.api.getBlueprints(characterId);\n }\n\n /**\n * Retrieve the corporation membership history of a character (public endpoint).\n *\n * @param characterId - The ID of the character whose corporation history to retrieve\n * @returns A chronological list of corporations the character has been a member of\n */\n getCharacterCorporationHistory(\n characterId: number,\n ): Promise<CorporationHistory[]> {\n return this.api.getCorporationHistory(characterId);\n }\n\n /**\n * Calculate the CSPA (CONCORD Spam Prevention Act) charge cost for sending mail to a set of characters.\n *\n * @param characterId - The ID of the character who would be sending mail\n * @param characters - An array of character IDs to calculate CSPA charges for\n * @returns The total CSPA charge cost in ISK\n * @requires Authentication\n */\n postCspaChargeCost(\n characterId: number,\n characters: number[],\n ): Promise<number> {\n return this.api.calculateCspaChargeCost(\n characterId,\n characters,\n ) as Promise<number>;\n }\n\n /**\n * Retrieve a character's current jump fatigue and activation cooldown timers.\n *\n * @param characterId - The ID of the character whose jump fatigue to retrieve\n * @returns Jump fatigue expiry dates and last jump information\n * @requires Authentication\n */\n getCharacterFatigue(characterId: number): Promise<JumpFatigue> {\n return this.api.getJumpFatigue(characterId);\n }\n\n /**\n * Retrieve medals awarded to a character.\n *\n * @param characterId - The ID of the character whose medals to retrieve\n * @returns A list of medals the character has been awarded\n * @requires Authentication\n */\n getCharacterMedals(characterId: number): Promise<Medal[]> {\n return this.api.getMedals(characterId);\n }\n\n /**\n * Retrieve a character's notifications from the notification center.\n *\n * @param characterId - The ID of the character whose notifications to retrieve\n * @returns A list of notifications including type, sender, and timestamp\n * @requires Authentication\n */\n getCharacterNotifications(characterId: number): Promise<Notification[]> {\n return this.api.getNotifications(characterId);\n }\n\n /**\n * Retrieve notifications related to contact changes for a character.\n *\n * @param characterId - The ID of the character whose contact notifications to retrieve\n * @returns A list of contact-related notifications\n * @requires Authentication\n */\n getCharacterNotificationsContacts(\n characterId: number,\n ): Promise<Notification[]> {\n // Schema mismatch: ContactNotification schema differs from Notification type.\n // Cast through unknown until schema is aligned with the type.\n return this.api.getContactNotifications(characterId) as unknown as Promise<\n Notification[]\n >;\n }\n\n /**\n * Retrieve portrait image URLs for a character at various resolutions.\n *\n * @param characterId - The ID of the character whose portrait to retrieve\n * @returns Portrait URLs at different resolutions (64x64, 128x128, 256x256, 512x512)\n */\n getCharacterPortrait(characterId: number): Promise<CharacterPortrait> {\n return this.api.getPortrait(characterId);\n }\n\n /**\n * Retrieve the corporation roles assigned to a character.\n *\n * @param characterId - The ID of the character whose roles to retrieve\n * @returns The character's roles including regular, HQ, base, and other role categories\n * @requires Authentication\n */\n getCharacterRoles(characterId: number): Promise<CharacterRole> {\n return this.api.getRoles(characterId);\n }\n\n /**\n * Retrieve a character's standings with NPC factions, corporations, and agents.\n *\n * @param characterId - The ID of the character whose standings to retrieve\n * @returns A list of standings with from_type, from_id, and standing value\n * @requires Authentication\n */\n getCharacterStandings(characterId: number): Promise<Standing[]> {\n return this.api.getStandings(characterId);\n }\n\n /**\n * Retrieve the corporation titles held by a character.\n *\n * @param characterId - The ID of the character whose titles to retrieve\n * @returns A list of corporation titles assigned to the character\n * @requires Authentication\n */\n getCharacterTitles(characterId: number): Promise<CharacterTitle[]> {\n return this.api.getTitles(characterId);\n }\n\n /**\n * Look up the current corporation, alliance, and faction affiliations for a set of characters via a bulk POST request.\n *\n * @param characters - An array of character IDs to look up affiliations for\n * @returns Affiliation data including corporation, alliance, and faction IDs for each character\n */\n postCharacterAffiliation(\n characters: number[],\n ): Promise<CharacterAffiliation[]> {\n return this.api.postCharacterAffiliation(characters) as Promise<\n CharacterAffiliation[]\n >;\n }\n\n streamCharacterAgentsResearch(\n characterId: number,\n ): AsyncGenerator<PageResult<AgentResearch>, void, undefined> {\n return this.streamEndpoint<AgentResearch>('getAgentsResearch', characterId);\n }\n\n streamCharacterBlueprints(\n characterId: number,\n ): AsyncGenerator<PageResult<Blueprint>, void, undefined> {\n return this.streamEndpoint<Blueprint>('getBlueprints', characterId);\n }\n\n streamCharacterCorporationHistory(\n characterId: number,\n ): AsyncGenerator<PageResult<CorporationHistory>, void, undefined> {\n return this.streamEndpoint<CorporationHistory>(\n 'getCorporationHistory',\n characterId,\n );\n }\n\n streamCharacterMedals(\n characterId: number,\n ): AsyncGenerator<PageResult<Medal>, void, undefined> {\n return this.streamEndpoint<Medal>('getMedals', characterId);\n }\n\n streamCharacterNotifications(\n characterId: number,\n ): AsyncGenerator<PageResult<Notification>, void, undefined> {\n return this.streamEndpoint<Notification>('getNotifications', characterId);\n }\n\n streamCharacterNotificationsContacts(\n characterId: number,\n ): AsyncGenerator<PageResult<Notification>, void, undefined> {\n return this.streamEndpoint<Notification>(\n 'getContactNotifications',\n characterId,\n );\n }\n\n streamCharacterStandings(\n characterId: number,\n ): AsyncGenerator<PageResult<Standing>, void, undefined> {\n return this.streamEndpoint<Standing>('getStandings', characterId);\n }\n\n streamCharacterTitles(\n characterId: number,\n ): AsyncGenerator<PageResult<CharacterTitle>, void, undefined> {\n return this.streamEndpoint<CharacterTitle>('getTitles', characterId);\n }\n}\n","import { z } from 'zod';\nimport { EndpointMap } from './EndpointDefinition';\nimport { CloneInfoSchema } from '../../schemas/clones';\n\nexport const cloneEndpoints = {\n getClones: {\n path: 'characters/{characterId}/clones',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n responseSchema: CloneInfoSchema,\n },\n getImplants: {\n path: 'characters/{characterId}/implants',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n responseSchema: z.array(z.number()),\n },\n} as const satisfies EndpointMap;\n","import { z } from 'zod';\nimport { esiEnum } from './esiEnum';\n\nexport const CloneInfoSchema = z.looseObject({\n home_location: z\n .looseObject({\n location_id: z.number(),\n location_type: esiEnum(['station', 'structure']),\n })\n .optional(),\n jump_clones: z.array(\n z.looseObject({\n jump_clone_id: z.number(),\n location_id: z.number(),\n location_type: esiEnum(['station', 'structure']),\n implants: z.array(z.number()),\n name: z.string().optional(),\n }),\n ),\n last_clone_jump_date: z.string().optional(),\n last_station_change_date: z.string().optional(),\n});\n","import { ApiClient } from '../core/ApiClient';\nimport { BaseEsiClient } from './BaseEsiClient';\nimport { cloneEndpoints } from '../core/endpoints/cloneEndpoints';\nimport { CloneInfo } from '../types/api-responses';\nimport { PageResult } from '../core/pagination/AsyncPaginationIterator';\n\nexport class ClonesClient extends BaseEsiClient<typeof cloneEndpoints> {\n constructor(client: ApiClient) {\n super(client, cloneEndpoints);\n }\n\n /**\n * Retrieve a character's clone state, including home station and available jump clones.\n *\n * @param characterId - The ID of the character whose clone information to retrieve\n * @returns Clone information including home location and jump clone details\n * @requires Authentication\n */\n getClones(characterId: number): Promise<CloneInfo> {\n return this.api.getClones(characterId);\n }\n\n /**\n * Retrieve the implants currently installed in a character's active clone.\n *\n * @param characterId - The ID of the character whose implants to retrieve\n * @returns An array of type IDs for the currently installed implants\n * @requires Authentication\n */\n getImplants(characterId: number): Promise<number[]> {\n return this.api.getImplants(characterId);\n }\n\n streamImplants(\n characterId: number,\n ): AsyncGenerator<PageResult<number>, void, undefined> {\n return this.streamEndpoint<number>('getImplants', characterId);\n }\n}\n","import { ApiClient } from '../core/ApiClient';\nimport { BaseEsiClient } from './BaseEsiClient';\nimport { contactEndpoints } from '../core/endpoints/contactEndpoints';\nimport { Contact, ContactLabel } from '../types/api-responses';\nimport { PageResult } from '../core/pagination/AsyncPaginationIterator';\n\nexport class ContactsClient extends BaseEsiClient<typeof contactEndpoints> {\n constructor(client: ApiClient) {\n super(client, contactEndpoints);\n }\n\n /**\n * Retrieve contacts for an alliance.\n *\n * @param allianceId - The ID of the alliance whose contacts to retrieve\n * @returns A list of alliance contacts with standings and contact types\n * @requires Authentication\n */\n getAllianceContacts(allianceId: number): Promise<Contact[]> {\n return this.api.getAllianceContacts(allianceId);\n }\n\n /**\n * Retrieve custom contact labels for an alliance.\n *\n * @param allianceId - The ID of the alliance whose contact labels to retrieve\n * @returns A list of custom labels used to categorize alliance contacts\n * @requires Authentication\n */\n getAllianceContactLabels(allianceId: number): Promise<ContactLabel[]> {\n return this.api.getAllianceContactLabels(allianceId);\n }\n\n /**\n * Delete contacts from a character's contact list.\n *\n * @param characterId - The ID of the character whose contacts to delete\n * @param contactIds - An array of contact IDs to remove\n * @requires Authentication\n */\n deleteCharacterContacts(\n characterId: number,\n contactIds: number[],\n ): Promise<void> {\n return this.api.deleteCharacterContacts(\n characterId,\n contactIds.join(','),\n ) as Promise<void>;\n }\n\n /**\n * Retrieve a character's contact list.\n *\n * @param characterId - The ID of the character whose contacts to retrieve\n * @returns A list of character contacts with standings, labels, and contact types\n * @requires Authentication\n */\n getCharacterContacts(characterId: number): Promise<Contact[]> {\n return this.api.getCharacterContacts(characterId);\n }\n\n /**\n * Add contacts to a character's contact list via a POST request.\n *\n * @param characterId - The ID of the character to add contacts for\n * @param standing - Standing value for the contacts (-10 to 10)\n * @param contactIds - Array of character/corporation/alliance IDs to add\n * @returns An array of contact IDs that were successfully added\n * @requires Authentication\n */\n postCharacterContacts(\n characterId: number,\n standing: number,\n contactIds: number[],\n ): Promise<number[]> {\n return this.api.addContacts(characterId, standing, contactIds) as Promise<\n number[]\n >;\n }\n\n /**\n * Update existing contacts in a character's contact list via a PUT request.\n *\n * @param characterId - The ID of the character whose contacts to update\n * @param standing - New standing value for the contacts (-10 to 10)\n * @param contactIds - Array of contact IDs to update\n * @requires Authentication\n */\n putCharacterContacts(\n characterId: number,\n standing: number,\n contactIds: number[],\n ): Promise<void> {\n return this.api.editContacts(\n characterId,\n standing,\n contactIds,\n ) as Promise<void>;\n }\n\n /**\n * Retrieve custom contact labels for a character.\n *\n * @param characterId - The ID of the character whose contact labels to retrieve\n * @returns A list of custom labels used to categorize character contacts\n * @requires Authentication\n */\n getCharacterContactLabels(characterId: number): Promise<ContactLabel[]> {\n return this.api.getCharacterContactLabels(characterId);\n }\n\n /**\n * Retrieve contacts for a corporation.\n *\n * @param corporationId - The ID of the corporation whose contacts to retrieve\n * @returns A list of corporation contacts with standings and contact types\n * @requires Authentication\n */\n getCorporationContacts(corporationId: number): Promise<Contact[]> {\n return this.api.getCorporationContacts(corporationId);\n }\n\n /**\n * Retrieve custom contact labels for a corporation.\n *\n * @param corporationId - The ID of the corporation whose contact labels to retrieve\n * @returns A list of custom labels used to categorize corporation contacts\n * @requires Authentication\n */\n getCorporationContactLabels(corporationId: number): Promise<ContactLabel[]> {\n return this.api.getCorporationContactLabels(corporationId);\n }\n\n streamAllianceContacts(\n allianceId: number,\n ): AsyncGenerator<PageResult<Contact>, void, undefined> {\n return this.streamEndpoint<Contact>('getAllianceContacts', allianceId);\n }\n\n streamAllianceContactLabels(\n allianceId: number,\n ): AsyncGenerator<PageResult<ContactLabel>, void, undefined> {\n return this.streamEndpoint<ContactLabel>(\n 'getAllianceContactLabels',\n allianceId,\n );\n }\n\n streamCharacterContacts(\n characterId: number,\n ): AsyncGenerator<PageResult<Contact>, void, undefined> {\n return this.streamEndpoint<Contact>('getCharacterContacts', characterId);\n }\n\n streamCharacterContactLabels(\n characterId: number,\n ): AsyncGenerator<PageResult<ContactLabel>, void, undefined> {\n return this.streamEndpoint<ContactLabel>(\n 'getCharacterContactLabels',\n characterId,\n );\n }\n\n streamCorporationContacts(\n corporationId: number,\n ): AsyncGenerator<PageResult<Contact>, void, undefined> {\n return this.streamEndpoint<Contact>(\n 'getCorporationContacts',\n corporationId,\n );\n }\n\n streamCorporationContactLabels(\n corporationId: number,\n ): AsyncGenerator<PageResult<ContactLabel>, void, undefined> {\n return this.streamEndpoint<ContactLabel>(\n 'getCorporationContactLabels',\n corporationId,\n );\n }\n}\n","import { z } from 'zod';\nimport { EndpointMap } from './EndpointDefinition';\nimport {\n ContractSchema,\n ContractBidSchema,\n ContractItemSchema,\n} from '../../schemas/contracts';\n\nexport const contractEndpoints = {\n getCharacterContracts: {\n path: 'characters/{characterId}/contracts',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n responseSchema: z.array(ContractSchema),\n },\n getCharacterContractBids: {\n path: 'characters/{characterId}/contracts/{contractId}/bids',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId', 'contractId'],\n responseSchema: z.array(ContractBidSchema),\n },\n getCharacterContractItems: {\n path: 'characters/{characterId}/contracts/{contractId}/items',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId', 'contractId'],\n responseSchema: z.array(ContractItemSchema),\n },\n getCorporationContracts: {\n path: 'corporations/{corporationId}/contracts',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId'],\n responseSchema: z.array(ContractSchema),\n },\n getCorporationContractBids: {\n path: 'corporations/{corporationId}/contracts/{contractId}/bids',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId', 'contractId'],\n responseSchema: z.array(ContractBidSchema),\n },\n getCorporationContractItems: {\n path: 'corporations/{corporationId}/contracts/{contractId}/items',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId', 'contractId'],\n responseSchema: z.array(ContractItemSchema),\n },\n getPublicContracts: {\n path: 'contracts/public/{regionId}',\n method: 'GET',\n requiresAuth: false,\n pathParams: ['regionId'],\n responseSchema: z.array(ContractSchema),\n },\n getPublicContractBids: {\n path: 'contracts/public/bids/{contractId}',\n method: 'GET',\n requiresAuth: false,\n pathParams: ['contractId'],\n responseSchema: z.array(ContractBidSchema),\n },\n getPublicContractItems: {\n path: 'contracts/public/items/{contractId}',\n method: 'GET',\n requiresAuth: false,\n pathParams: ['contractId'],\n responseSchema: z.array(ContractItemSchema),\n },\n} as const satisfies EndpointMap;\n","import { z } from 'zod';\nimport { esiEnum } from './esiEnum';\n\nexport const ContractSchema = z.looseObject({\n contract_id: z.number(),\n issuer_id: z.number(),\n issuer_corporation_id: z.number(),\n assignee_id: z.number().optional(),\n acceptor_id: z.number().optional(),\n start_location_id: z.number().optional(),\n end_location_id: z.number().optional(),\n type: esiEnum(['unknown', 'item_exchange', 'auction', 'courier', 'loan']),\n status: esiEnum([\n 'outstanding',\n 'in_progress',\n 'finished_issuer',\n 'finished_contractor',\n 'finished',\n 'cancelled',\n 'rejected',\n 'failed',\n 'deleted',\n 'reversed',\n ]).optional(),\n title: z.string().optional(),\n for_corporation: z.boolean().optional(),\n availability: esiEnum([\n 'public',\n 'personal',\n 'corporation',\n 'alliance',\n ]).optional(),\n date_issued: z.string(),\n date_expired: z.string(),\n date_accepted: z.string().optional(),\n date_completed: z.string().optional(),\n days_to_complete: z.number().optional(),\n price: z.number().optional(),\n reward: z.number().optional(),\n collateral: z.number().optional(),\n buyout: z.number().optional(),\n volume: z.number().optional(),\n});\n\nexport const ContractItemSchema = z.looseObject({\n record_id: z.number(),\n type_id: z.number(),\n quantity: z.number(),\n raw_quantity: z.number().optional(),\n is_singleton: z.boolean(),\n is_blueprint_copy: z.boolean().optional(),\n is_included: z.boolean(),\n});\n\nexport const ContractBidSchema = z.looseObject({\n bid_id: z.number(),\n bidder_id: z.number(),\n date_bid: z.string(),\n amount: z.number(),\n});\n","import { ApiClient } from '../core/ApiClient';\nimport { BaseEsiClient } from './BaseEsiClient';\nimport { contractEndpoints } from '../core/endpoints/contractEndpoints';\nimport { Contract, ContractBid, ContractItem } from '../types/api-responses';\nimport { PageResult } from '../core/pagination/AsyncPaginationIterator';\n\nexport class ContractsClient extends BaseEsiClient<typeof contractEndpoints> {\n constructor(client: ApiClient) {\n super(client, contractEndpoints);\n }\n\n /**\n * Retrieve contracts issued by or assigned to a character.\n *\n * @param characterId - The ID of the character whose contracts to retrieve\n * @returns A list of contracts with type, status, and pricing information\n * @requires Authentication\n */\n getCharacterContracts(characterId: number): Promise<Contract[]> {\n return this.api.getCharacterContracts(characterId) as Promise<Contract[]>;\n }\n\n /**\n * Retrieve bids placed on an auction contract owned by a character.\n *\n * @param characterId - The ID of the character who owns the contract\n * @param contractId - The ID of the contract whose bids to retrieve\n * @returns A list of bids with bidder, amount, and timestamp\n * @requires Authentication\n */\n getCharacterContractBids(\n characterId: number,\n contractId: number,\n ): Promise<ContractBid[]> {\n return this.api.getCharacterContractBids(\n characterId,\n contractId,\n ) as Promise<ContractBid[]>;\n }\n\n /**\n * Retrieve the items included in a contract owned by a character.\n *\n * @param characterId - The ID of the character who owns the contract\n * @param contractId - The ID of the contract whose items to retrieve\n * @returns A list of items in the contract with type, quantity, and included/excluded status\n * @requires Authentication\n */\n getCharacterContractItems(\n characterId: number,\n contractId: number,\n ): Promise<ContractItem[]> {\n return this.api.getCharacterContractItems(\n characterId,\n contractId,\n ) as Promise<ContractItem[]>;\n }\n\n /**\n * Retrieve publicly available contracts in a specific region.\n *\n * @param regionId - The ID of the region whose public contracts to retrieve\n * @returns A list of public contracts in the region\n */\n getPublicContracts(regionId: number): Promise<Contract[]> {\n return this.api.getPublicContracts(regionId) as Promise<Contract[]>;\n }\n\n /**\n * Retrieve bids placed on a public auction contract.\n *\n * @param contractId - The ID of the public contract whose bids to retrieve\n * @returns A list of bids with bidder, amount, and timestamp\n */\n getPublicContractBids(contractId: number): Promise<ContractBid[]> {\n return this.api.getPublicContractBids(contractId) as Promise<ContractBid[]>;\n }\n\n /**\n * Retrieve the items included in a public contract.\n *\n * @param contractId - The ID of the public contract whose items to retrieve\n * @returns A list of items in the contract with type, quantity, and included/excluded status\n */\n getPublicContractItems(contractId: number): Promise<ContractItem[]> {\n return this.api.getPublicContractItems(contractId) as Promise<\n ContractItem[]\n >;\n }\n\n /**\n * Retrieve contracts issued by or assigned to a corporation.\n *\n * @param corporationId - The ID of the corporation whose contracts to retrieve\n * @returns A list of contracts with type, status, and pricing information\n * @requires Authentication\n */\n getCorporationContracts(corporationId: number): Promise<Contract[]> {\n return this.api.getCorporationContracts(corporationId) as Promise<\n Contract[]\n >;\n }\n\n /**\n * Retrieve bids placed on an auction contract owned by a corporation.\n *\n * @param corporationId - The ID of the corporation that owns the contract\n * @param contractId - The ID of the contract whose bids to retrieve\n * @returns A list of bids with bidder, amount, and timestamp\n * @requires Authentication\n */\n getCorporationContractBids(\n corporationId: number,\n contractId: number,\n ): Promise<ContractBid[]> {\n return this.api.getCorporationContractBids(\n corporationId,\n contractId,\n ) as Promise<ContractBid[]>;\n }\n\n /**\n * Retrieve the items included in a contract owned by a corporation.\n *\n * @param corporationId - The ID of the corporation that owns the contract\n * @param contractId - The ID of the contract whose items to retrieve\n * @returns A list of items in the contract with type, quantity, and included/excluded status\n * @requires Authentication\n */\n getCorporationContractItems(\n corporationId: number,\n contractId: number,\n ): Promise<ContractItem[]> {\n return this.api.getCorporationContractItems(\n corporationId,\n contractId,\n ) as Promise<ContractItem[]>;\n }\n\n streamPublicContracts(\n regionId: number,\n ): AsyncGenerator<PageResult<Contract>, void, undefined> {\n return this.streamEndpoint<Contract>('getPublicContracts', regionId);\n }\n\n streamCharacterContracts(\n characterId: number,\n ): AsyncGenerator<PageResult<Contract>, void, undefined> {\n return this.streamEndpoint<Contract>('getCharacterContracts', characterId);\n }\n\n streamCorporationContracts(\n corporationId: number,\n ): AsyncGenerator<PageResult<Contract>, void, undefined> {\n return this.streamEndpoint<Contract>(\n 'getCorporationContracts',\n corporationId,\n );\n }\n}\n","import { z } from 'zod';\nimport { EndpointMap } from './EndpointDefinition';\nimport {\n CorporationInfoSchema,\n CorporationAllianceHistorySchema,\n ContainerLogSchema,\n CorporationDivisionsSchema,\n CorporationFacilitySchema,\n CorporationMedalSchema,\n CorporationIssuedMedalSchema,\n CorporationMemberTitleSchema,\n CorporationMemberTrackingSchema,\n CorporationMemberRoleSchema,\n CorporationRoleHistorySchema,\n CorporationShareholderSchema,\n CorporationStarbaseSchema,\n CorporationStarbaseDetailSchema,\n CorporationStructureSchema,\n CorporationTitleSchema,\n CorporationIconSchema,\n CorporationStandingSchema,\n CorporationWalletDivisionSchema,\n} from '../../schemas/corporation';\nimport { BlueprintSchema } from '../../schemas/character';\n\nexport const corporationEndpoints = {\n getCorporationInfo: {\n path: 'corporations/{corporationId}',\n method: 'GET',\n requiresAuth: false,\n pathParams: ['corporationId'],\n responseSchema: CorporationInfoSchema,\n },\n getCorporationAllianceHistory: {\n path: 'corporations/{corporationId}/alliancehistory',\n method: 'GET',\n requiresAuth: false,\n pathParams: ['corporationId'],\n responseSchema: z.array(CorporationAllianceHistorySchema),\n },\n getCorporationBlueprints: {\n path: 'corporations/{corporationId}/blueprints',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId'],\n responseSchema: z.array(BlueprintSchema),\n },\n getCorporationAlscLogs: {\n path: 'corporations/{corporationId}/containers/logs',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId'],\n responseSchema: z.array(ContainerLogSchema),\n },\n getCorporationDivisions: {\n path: 'corporations/{corporationId}/divisions',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId'],\n responseSchema: CorporationDivisionsSchema,\n },\n getCorporationFacilities: {\n path: 'corporations/{corporationId}/facilities',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId'],\n responseSchema: z.array(CorporationFacilitySchema),\n },\n getCorporationIcon: {\n path: 'corporations/{corporationId}/icons',\n method: 'GET',\n requiresAuth: false,\n pathParams: ['corporationId'],\n responseSchema: CorporationIconSchema,\n },\n getCorporationMedals: {\n path: 'corporations/{corporationId}/medals',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId'],\n responseSchema: z.array(CorporationMedalSchema),\n },\n getCorporationIssuedMedals: {\n path: 'corporations/{corporationId}/medals/issued',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId'],\n responseSchema: z.array(CorporationIssuedMedalSchema),\n },\n getCorporationMembers: {\n path: 'corporations/{corporationId}/members',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId'],\n responseSchema: z.array(z.number()),\n },\n getCorporationMemberLimit: {\n path: 'corporations/{corporationId}/members/limit',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId'],\n responseSchema: z.number(),\n },\n getCorporationMembersTitles: {\n path: 'corporations/{corporationId}/members/titles',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId'],\n responseSchema: z.array(CorporationMemberTitleSchema),\n },\n getCorporationMemberTracking: {\n path: 'corporations/{corporationId}/membertracking',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId'],\n responseSchema: z.array(CorporationMemberTrackingSchema),\n },\n getCorporationMemberRoles: {\n path: 'corporations/{corporationId}/roles',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId'],\n responseSchema: z.array(CorporationMemberRoleSchema),\n },\n getCorporationMemberRolesHistory: {\n path: 'corporations/{corporationId}/roles/history',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId'],\n responseSchema: z.array(CorporationRoleHistorySchema),\n },\n getCorporationShareholders: {\n path: 'corporations/{corporationId}/shareholders',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId'],\n responseSchema: z.array(CorporationShareholderSchema),\n },\n getCorporationStandings: {\n path: 'corporations/{corporationId}/standings',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId'],\n responseSchema: z.array(CorporationStandingSchema),\n },\n getCorporationStarbases: {\n path: 'corporations/{corporationId}/starbases',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId'],\n responseSchema: z.array(CorporationStarbaseSchema),\n },\n getCorporationStarbaseDetail: {\n path: 'corporations/{corporationId}/starbases/{starbaseId}',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId', 'starbaseId'],\n responseSchema: CorporationStarbaseDetailSchema,\n },\n getCorporationStructures: {\n path: 'corporations/{corporationId}/structures',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId'],\n responseSchema: z.array(CorporationStructureSchema),\n },\n getCorporationTitles: {\n path: 'corporations/{corporationId}/titles',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId'],\n responseSchema: z.array(CorporationTitleSchema),\n },\n getNpcCorporations: {\n path: 'corporations/npccorps',\n method: 'GET',\n requiresAuth: false,\n responseSchema: z.array(z.number()),\n },\n} as const satisfies EndpointMap;\n","import { z } from 'zod';\nimport { esiEnum } from './esiEnum';\n\nexport const CorporationInfoSchema = z.looseObject({\n corporation_id: z.number().optional(),\n name: z.string(),\n ticker: z.string(),\n description: z.string().optional(),\n url: z.string().optional(),\n alliance_id: z.number().optional(),\n ceo_id: z.number(),\n creator_id: z.number(),\n date_founded: z.string().optional(),\n faction_id: z.number().optional(),\n home_station_id: z.number().optional(),\n member_count: z.number(),\n shares: z.number().optional(),\n tax_rate: z.number(),\n war_eligible: z.boolean().optional(),\n});\n\nexport const CorporationAllianceHistorySchema = z.looseObject({\n alliance_id: z.number().optional(),\n is_deleted: z.boolean().optional(),\n record_id: z.number(),\n start_date: z.string(),\n});\n\nexport const CorporationMedalSchema = z.looseObject({\n medal_id: z.number(),\n title: z.string(),\n description: z.string(),\n creator_id: z.number(),\n date: z.string(),\n});\n\nexport const CorporationStarbaseSchema = z.looseObject({\n starbase_id: z.number(),\n type_id: z.number(),\n system_id: z.number(),\n state: esiEnum([\n 'offline',\n 'online',\n 'onlining',\n 'reinforced',\n 'unanchoring',\n ]),\n moon_id: z.number().optional(),\n onlined_since: z.string().optional(),\n reinforced_until: z.string().optional(),\n unanchor_at: z.string().optional(),\n});\n\nexport const CorporationDivisionsSchema = z.looseObject({\n hangar: z\n .array(\n z.looseObject({\n division: z.number(),\n name: z.string().optional(),\n }),\n )\n .optional(),\n wallet: z\n .array(\n z.looseObject({\n division: z.number(),\n name: z.string().optional(),\n }),\n )\n .optional(),\n});\n\nexport const CorporationFacilitySchema = z.looseObject({\n facility_id: z.number(),\n type_id: z.number(),\n system_id: z.number(),\n});\n\nexport const CorporationIssuedMedalSchema = z.looseObject({\n medal_id: z.number(),\n title: z.string(),\n description: z.string(),\n character_id: z.number(),\n issued_at: z.string(),\n issuer_id: z.number(),\n reason: z.string(),\n status: esiEnum(['private', 'public']),\n});\n\nexport const CorporationMemberTitleSchema = z.looseObject({\n character_id: z.number(),\n titles: z.array(z.number()),\n});\n\nexport const CorporationMemberTrackingSchema = z.looseObject({\n character_id: z.number(),\n start_date: z.string(),\n base_id: z.number().optional(),\n location_id: z.number().optional(),\n logoff_date: z.string().optional(),\n logon_date: z.string().optional(),\n online: z.boolean().optional(),\n ship_type_id: z.number().optional(),\n});\n\nexport const CorporationMemberRoleSchema = z.looseObject({\n character_id: z.number(),\n roles: z.array(z.string()).optional(),\n grantable_roles: z.array(z.string()).optional(),\n roles_at_hq: z.array(z.string()).optional(),\n grantable_roles_at_hq: z.array(z.string()).optional(),\n roles_at_base: z.array(z.string()).optional(),\n grantable_roles_at_base: z.array(z.string()).optional(),\n roles_at_other: z.array(z.string()).optional(),\n grantable_roles_at_other: z.array(z.string()).optional(),\n});\n\nexport const CorporationRoleHistorySchema = z.looseObject({\n character_id: z.number(),\n changed_at: z.string(),\n issuer_id: z.number(),\n role_type: z.string(),\n before: z.array(z.string()),\n after: z.array(z.string()),\n});\n\nexport const CorporationShareholderSchema = z.looseObject({\n shareholder_id: z.number(),\n shareholder_type: esiEnum(['character', 'corporation']),\n share_count: z.number(),\n});\n\nexport const CorporationStarbaseDetailSchema = z.looseObject({\n state: esiEnum([\n 'offline',\n 'online',\n 'onlining',\n 'reinforced',\n 'unanchoring',\n ]),\n fuels: z\n .array(\n z.looseObject({\n type_id: z.number(),\n quantity: z.number(),\n }),\n )\n .optional(),\n allow_alliance_members: z.boolean().optional(),\n allow_corporation_members: z.boolean().optional(),\n anchor: z.string().optional(),\n attack_if_at_war: z.boolean().optional(),\n attack_if_other_security_status_dropping: z.boolean().optional(),\n attack_security_status_threshold: z.number().optional(),\n attack_standing_threshold: z.number().optional(),\n fuel_bay_take: z.string().optional(),\n fuel_bay_view: z.string().optional(),\n offline: z.string().optional(),\n online: z.string().optional(),\n unanchor: z.string().optional(),\n use_alliance_standings: z.boolean().optional(),\n});\n\nexport const CorporationStructureSchema = z.looseObject({\n structure_id: z.number(),\n corporation_id: z.number(),\n type_id: z.number(),\n system_id: z.number(),\n profile_id: z.number(),\n services: z\n .array(\n z.looseObject({\n name: z.string(),\n state: esiEnum(['online', 'offline', 'cleanup']),\n }),\n )\n .optional(),\n fuel_expires: z.string().optional(),\n name: z.string().optional(),\n state: z.string(),\n state_timer_start: z.string().optional(),\n state_timer_end: z.string().optional(),\n unanchors_at: z.string().optional(),\n reinforce_hour: z.number().optional(),\n next_reinforce_hour: z.number().optional(),\n next_reinforce_apply: z.string().optional(),\n});\n\nexport const CorporationTitleSchema = z.looseObject({\n title_id: z.number(),\n name: z.string().optional(),\n roles: z.array(z.string()).optional(),\n grantable_roles: z.array(z.string()).optional(),\n roles_at_hq: z.array(z.string()).optional(),\n grantable_roles_at_hq: z.array(z.string()).optional(),\n roles_at_base: z.array(z.string()).optional(),\n grantable_roles_at_base: z.array(z.string()).optional(),\n roles_at_other: z.array(z.string()).optional(),\n grantable_roles_at_other: z.array(z.string()).optional(),\n});\n\nexport const CorporationIconSchema = z.looseObject({\n px64x64: z.string().optional(),\n px128x128: z.string().optional(),\n px256x256: z.string().optional(),\n});\n\nexport { StandingSchema as CorporationStandingSchema } from './common';\n\nexport const CorporationWalletDivisionSchema = z.looseObject({\n division: z.number(),\n balance: z.number(),\n});\n\nexport const ContainerLogSchema = z.looseObject({\n logged_at: z.string(),\n container_id: z.number(),\n container_type_id: z.number(),\n character_id: z.number(),\n location_id: z.number(),\n location_flag: z.string(),\n action: z.string(),\n password_type: esiEnum(['config', 'general']).optional(),\n type_id: z.number().optional(),\n quantity: z.number().optional(),\n old_config_bitmask: z.number().optional(),\n new_config_bitmask: z.number().optional(),\n});\n","import { ApiClient } from '../core/ApiClient';\nimport { BaseEsiClient } from './BaseEsiClient';\nimport { corporationEndpoints } from '../core/endpoints/corporationEndpoints';\nimport {\n Blueprint,\n CorporationInfo,\n CorporationAllianceHistory,\n CorporationDivisions,\n CorporationFacility,\n CorporationIssuedMedal,\n CorporationMedal,\n CorporationMemberRole,\n CorporationMemberTitle,\n CorporationMemberTracking,\n CorporationRoleHistory,\n CorporationShareholder,\n CorporationStarbase,\n CorporationStarbaseDetail,\n CorporationStructure,\n CorporationTitle,\n ContainerLog,\n Standing,\n} from '../types/api-responses';\nimport { PageResult } from '../core/pagination/AsyncPaginationIterator';\n\nexport class CorporationsClient extends BaseEsiClient<\n typeof corporationEndpoints\n> {\n constructor(client: ApiClient) {\n super(client, corporationEndpoints);\n }\n\n /**\n * Retrieve public information about a corporation.\n *\n * @param corporationId - The ID of the corporation to look up\n * @returns Public corporation information including name, ticker, member count, and CEO\n */\n getCorporationInfo(corporationId: number): Promise<CorporationInfo> {\n return this.api.getCorporationInfo(corporationId);\n }\n\n /**\n * Retrieve the alliance membership history of a corporation.\n *\n * @param corporationId - The ID of the corporation whose alliance history to retrieve\n * @returns A chronological list of alliances the corporation has been a member of\n */\n getCorporationAllianceHistory(\n corporationId: number,\n ): Promise<CorporationAllianceHistory[]> {\n return this.api.getCorporationAllianceHistory(corporationId);\n }\n\n /**\n * Retrieve blueprints owned by a corporation.\n *\n * @param corporationId - The ID of the corporation whose blueprints to retrieve\n * @returns A list of blueprints with material/time efficiency and run information\n * @requires Authentication\n */\n getCorporationBlueprints(corporationId: number): Promise<Blueprint[]> {\n return this.api.getCorporationBlueprints(corporationId);\n }\n\n /**\n * Retrieve audit log secure container (ALSC) logs for a corporation.\n *\n * @param corporationId - The ID of the corporation whose container logs to retrieve\n * @returns A list of container access logs with action, character, and timestamp details\n * @requires Authentication\n */\n getCorporationAlscLogs(corporationId: number): Promise<ContainerLog[]> {\n return this.api.getCorporationAlscLogs(corporationId);\n }\n\n /**\n * Retrieve the hangar and wallet division names for a corporation.\n *\n * @param corporationId - The ID of the corporation whose divisions to retrieve\n * @returns Hangar and wallet division configurations with custom names\n * @requires Authentication\n */\n getCorporationDivisions(\n corporationId: number,\n ): Promise<CorporationDivisions> {\n return this.api.getCorporationDivisions(corporationId);\n }\n\n /**\n * Retrieve the industrial facilities owned by a corporation.\n *\n * @param corporationId - The ID of the corporation whose facilities to retrieve\n * @returns A list of corporation-owned facilities with type and solar system information\n * @requires Authentication\n */\n getCorporationFacilities(\n corporationId: number,\n ): Promise<CorporationFacility[]> {\n return this.api.getCorporationFacilities(corporationId);\n }\n\n /**\n * Retrieve icon URLs for a corporation at various resolutions.\n *\n * @param corporationId - The ID of the corporation whose icons to retrieve\n * @returns Icon URLs at 64x64, 128x128, and 256x256 resolutions\n */\n getCorporationIcon(\n corporationId: number,\n ): Promise<{ px64x64?: string; px128x128?: string; px256x256?: string }> {\n return this.api.getCorporationIcon(corporationId);\n }\n\n /**\n * Retrieve medals created by a corporation.\n *\n * @param corporationId - The ID of the corporation whose medals to retrieve\n * @returns A list of medals defined by the corporation\n * @requires Authentication\n */\n getCorporationMedals(corporationId: number): Promise<CorporationMedal[]> {\n return this.api.getCorporationMedals(corporationId);\n }\n\n /**\n * Retrieve medals that have been issued to members by a corporation.\n *\n * @param corporationId - The ID of the corporation whose issued medals to retrieve\n * @returns A list of medals issued to corporation members with recipient and issuer details\n * @requires Authentication\n */\n getCorporationIssuedMedals(\n corporationId: number,\n ): Promise<CorporationIssuedMedal[]> {\n return this.api.getCorporationIssuedMedals(corporationId);\n }\n\n /**\n * Retrieve the character IDs of all members in a corporation.\n *\n * @param corporationId - The ID of the corporation whose members to retrieve\n * @returns An array of character IDs for all corporation members\n * @requires Authentication\n */\n getCorporationMembers(corporationId: number): Promise<number[]> {\n return this.api.getCorporationMembers(corporationId);\n }\n\n /**\n * Retrieve the maximum number of members a corporation can have based on its current skills.\n *\n * @param corporationId - The ID of the corporation whose member limit to retrieve\n * @returns The maximum member count for the corporation\n * @requires Authentication\n */\n getCorporationMemberLimit(corporationId: number): Promise<number> {\n return this.api.getCorporationMemberLimit(corporationId);\n }\n\n /**\n * Retrieve the titles assigned to each member of a corporation.\n *\n * @param corporationId - The ID of the corporation whose member titles to retrieve\n * @returns A list of members and their assigned title IDs\n * @requires Authentication\n */\n getCorporationMemberTitles(\n corporationId: number,\n ): Promise<CorporationMemberTitle[]> {\n return this.api.getCorporationMembersTitles(corporationId);\n }\n\n /**\n * Retrieve tracking information for corporation members including last login and location.\n *\n * @param corporationId - The ID of the corporation whose member tracking data to retrieve\n * @returns A list of members with login times, ship types, and location details\n * @requires Authentication\n */\n getCorporationMemberTracking(\n corporationId: number,\n ): Promise<CorporationMemberTracking[]> {\n return this.api.getCorporationMemberTracking(corporationId);\n }\n\n /**\n * Retrieve the roles assigned to each member of a corporation.\n *\n * @param corporationId - The ID of the corporation whose member roles to retrieve\n * @returns A list of members and their assigned roles across all role categories\n * @requires Authentication\n */\n getCorporationRoles(corporationId: number): Promise<CorporationMemberRole[]> {\n return this.api.getCorporationMemberRoles(corporationId);\n }\n\n /**\n * Retrieve the history of role changes for members of a corporation.\n *\n * @param corporationId - The ID of the corporation whose role change history to retrieve\n * @returns A chronological list of role changes with before/after states and issuer details\n * @requires Authentication\n */\n getCorporationRolesHistory(\n corporationId: number,\n ): Promise<CorporationRoleHistory[]> {\n return this.api.getCorporationMemberRolesHistory(corporationId);\n }\n\n /**\n * Retrieve the shareholders of a corporation, including characters and corporations holding shares.\n *\n * @param corporationId - The ID of the corporation whose shareholders to retrieve\n * @returns A list of shareholders with share counts and holder types\n * @requires Authentication\n */\n getCorporationShareholders(\n corporationId: number,\n ): Promise<CorporationShareholder[]> {\n return this.api.getCorporationShareholders(corporationId);\n }\n\n /**\n * Retrieve a corporation's standings with NPC factions, corporations, and agents.\n *\n * @param corporationId - The ID of the corporation whose standings to retrieve\n * @returns A list of standings with from_type, from_id, and standing value\n * @requires Authentication\n */\n getCorporationStandings(corporationId: number): Promise<Standing[]> {\n return this.api.getCorporationStandings(corporationId);\n }\n\n /**\n * Retrieve the list of starbases (POSes) owned by a corporation.\n *\n * @param corporationId - The ID of the corporation whose starbases to retrieve\n * @returns A list of starbases with type, system, and state information\n * @requires Authentication\n */\n getCorporationStarbases(\n corporationId: number,\n ): Promise<CorporationStarbase[]> {\n return this.api.getCorporationStarbases(corporationId);\n }\n\n /**\n * Retrieve detailed configuration and fuel information for a specific starbase (POS).\n *\n * @param corporationId - The ID of the corporation that owns the starbase\n * @param starbaseId - The ID of the starbase to retrieve details for\n * @returns Detailed starbase information including fuel levels and access settings\n * @requires Authentication\n */\n getCorporationStarbaseDetail(\n corporationId: number,\n starbaseId: number,\n ): Promise<CorporationStarbaseDetail> {\n return this.api.getCorporationStarbaseDetail(corporationId, starbaseId);\n }\n\n /**\n * Retrieve citadel and other upwell structures owned by a corporation.\n *\n * @param corporationId - The ID of the corporation whose structures to retrieve\n * @returns A list of structures with type, location, state, and service information\n * @requires Authentication\n */\n getCorporationStructures(\n corporationId: number,\n ): Promise<CorporationStructure[]> {\n return this.api.getCorporationStructures(corporationId);\n }\n\n /**\n * Retrieve the titles defined by a corporation and their associated roles.\n *\n * @param corporationId - The ID of the corporation whose titles to retrieve\n * @returns A list of corporation titles with names and granted roles\n * @requires Authentication\n */\n getCorporationTitles(corporationId: number): Promise<CorporationTitle[]> {\n return this.api.getCorporationTitles(corporationId);\n }\n\n /**\n * Retrieve a list of all NPC corporation IDs in EVE Online.\n *\n * @returns An array of NPC corporation IDs\n */\n getNpcCorporations(): Promise<number[]> {\n return this.api.getNpcCorporations();\n }\n\n streamCorporationAllianceHistory(\n corporationId: number,\n ): AsyncGenerator<PageResult<CorporationAllianceHistory>, void, undefined> {\n return this.streamEndpoint<CorporationAllianceHistory>(\n 'getCorporationAllianceHistory',\n corporationId,\n );\n }\n\n streamCorporationBlueprints(\n corporationId: number,\n ): AsyncGenerator<PageResult<Blueprint>, void, undefined> {\n return this.streamEndpoint<Blueprint>(\n 'getCorporationBlueprints',\n corporationId,\n );\n }\n\n streamCorporationAlscLogs(\n corporationId: number,\n ): AsyncGenerator<PageResult<ContainerLog>, void, undefined> {\n return this.streamEndpoint<ContainerLog>(\n 'getCorporationAlscLogs',\n corporationId,\n );\n }\n\n streamCorporationFacilities(\n corporationId: number,\n ): AsyncGenerator<PageResult<CorporationFacility>, void, undefined> {\n return this.streamEndpoint<CorporationFacility>(\n 'getCorporationFacilities',\n corporationId,\n );\n }\n\n streamCorporationMedals(\n corporationId: number,\n ): AsyncGenerator<PageResult<CorporationMedal>, void, undefined> {\n return this.streamEndpoint<CorporationMedal>(\n 'getCorporationMedals',\n corporationId,\n );\n }\n\n streamCorporationIssuedMedals(\n corporationId: number,\n ): AsyncGenerator<PageResult<CorporationIssuedMedal>, void, undefined> {\n return this.streamEndpoint<CorporationIssuedMedal>(\n 'getCorporationIssuedMedals',\n corporationId,\n );\n }\n\n streamCorporationMembers(\n corporationId: number,\n ): AsyncGenerator<PageResult<number>, void, undefined> {\n return this.streamEndpoint<number>('getCorporationMembers', corporationId);\n }\n\n streamCorporationMemberTitles(\n corporationId: number,\n ): AsyncGenerator<PageResult<CorporationMemberTitle>, void, undefined> {\n return this.streamEndpoint<CorporationMemberTitle>(\n 'getCorporationMembersTitles',\n corporationId,\n );\n }\n\n streamCorporationMemberTracking(\n corporationId: number,\n ): AsyncGenerator<PageResult<CorporationMemberTracking>, void, undefined> {\n return this.streamEndpoint<CorporationMemberTracking>(\n 'getCorporationMemberTracking',\n corporationId,\n );\n }\n\n streamCorporationRoles(\n corporationId: number,\n ): AsyncGenerator<PageResult<CorporationMemberRole>, void, undefined> {\n return this.streamEndpoint<CorporationMemberRole>(\n 'getCorporationMemberRoles',\n corporationId,\n );\n }\n\n streamCorporationRolesHistory(\n corporationId: number,\n ): AsyncGenerator<PageResult<CorporationRoleHistory>, void, undefined> {\n return this.streamEndpoint<CorporationRoleHistory>(\n 'getCorporationMemberRolesHistory',\n corporationId,\n );\n }\n\n streamCorporationShareholders(\n corporationId: number,\n ): AsyncGenerator<PageResult<CorporationShareholder>, void, undefined> {\n return this.streamEndpoint<CorporationShareholder>(\n 'getCorporationShareholders',\n corporationId,\n );\n }\n\n streamCorporationStandings(\n corporationId: number,\n ): AsyncGenerator<PageResult<Standing>, void, undefined> {\n return this.streamEndpoint<Standing>(\n 'getCorporationStandings',\n corporationId,\n );\n }\n\n streamCorporationStarbases(\n corporationId: number,\n ): AsyncGenerator<PageResult<CorporationStarbase>, void, undefined> {\n return this.streamEndpoint<CorporationStarbase>(\n 'getCorporationStarbases',\n corporationId,\n );\n }\n\n streamCorporationStructures(\n corporationId: number,\n ): AsyncGenerator<PageResult<CorporationStructure>, void, undefined> {\n return this.streamEndpoint<CorporationStructure>(\n 'getCorporationStructures',\n corporationId,\n );\n }\n\n streamCorporationTitles(\n corporationId: number,\n ): AsyncGenerator<PageResult<CorporationTitle>, void, undefined> {\n return this.streamEndpoint<CorporationTitle>(\n 'getCorporationTitles',\n corporationId,\n );\n }\n\n streamNpcCorporations(): AsyncGenerator<PageResult<number>, void, undefined> {\n return this.streamEndpoint<number>('getNpcCorporations');\n }\n}\n","import { z } from 'zod';\nimport { EndpointMap } from './EndpointDefinition';\nimport {\n CorporationProjectSchema,\n CorporationProjectContributionSchema,\n CorporationProjectContributorSchema,\n} from '../../schemas/corporation-projects';\n\nexport const corporationProjectEndpoints = {\n getCorporationProjects: {\n path: 'corporations/{corporationId}/projects',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId'],\n responseSchema: z.array(CorporationProjectSchema),\n },\n getCorporationProject: {\n path: 'corporations/{corporationId}/projects/{projectId}',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId', 'projectId'],\n responseSchema: CorporationProjectSchema,\n },\n getCorporationProjectContribution: {\n path: 'corporations/{corporationId}/projects/{projectId}/contribution/{characterId}',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId', 'projectId', 'characterId'],\n responseSchema: CorporationProjectContributionSchema,\n },\n getCorporationProjectContributors: {\n path: 'corporations/{corporationId}/projects/{projectId}/contributors',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId', 'projectId'],\n responseSchema: z.array(CorporationProjectContributorSchema),\n },\n} as const satisfies EndpointMap;\n","import { z } from 'zod';\n\nexport const CorporationProjectSchema = z.looseObject({\n project_id: z.number(),\n state: z.string(),\n progress: z.number(),\n start_time: z.string(),\n finish_time: z.string().optional(),\n});\n\nexport const CorporationProjectContributionSchema = z.looseObject({\n character_id: z.number(),\n contribution: z.number(),\n});\n\nexport const CorporationProjectContributorSchema = z.looseObject({\n character_id: z.number(),\n contribution: z.number(),\n});\n","import { ApiClient } from '../core/ApiClient';\nimport { BaseEsiClient } from './BaseEsiClient';\nimport { corporationProjectEndpoints } from '../core/endpoints/corporationProjectEndpoints';\nimport {\n CorporationProject,\n CorporationProjectContribution,\n CorporationProjectContributor,\n} from '../types/api-responses';\n\nexport class CorporationProjectsClient extends BaseEsiClient<\n typeof corporationProjectEndpoints\n> {\n constructor(client: ApiClient) {\n super(client, corporationProjectEndpoints);\n }\n\n /**\n * Retrieves a list of projects for a corporation.\n *\n * @param corporationId - The ID of the corporation\n * @returns An array of corporation projects\n * @requires Authentication\n */\n getCorporationProjects(corporationId: number): Promise<CorporationProject[]> {\n return this.api.getCorporationProjects(corporationId);\n }\n\n /**\n * Retrieves details of a specific corporation project.\n *\n * @param corporationId - The ID of the corporation\n * @param projectId - The ID of the project\n * @returns The corporation project details\n * @requires Authentication\n */\n getCorporationProject(\n corporationId: number,\n projectId: number,\n ): Promise<CorporationProject> {\n return this.api.getCorporationProject(corporationId, projectId);\n }\n\n /**\n * Retrieves a character's contribution to a specific corporation project.\n *\n * @param corporationId - The ID of the corporation\n * @param projectId - The ID of the project\n * @param characterId - The ID of the character\n * @returns The character's contribution details\n * @requires Authentication\n */\n getCorporationProjectContribution(\n corporationId: number,\n projectId: number,\n characterId: number,\n ): Promise<CorporationProjectContribution> {\n return this.api.getCorporationProjectContribution(\n corporationId,\n projectId,\n characterId,\n );\n }\n\n /**\n * Retrieves a list of contributors to a specific corporation project.\n *\n * @param corporationId - The ID of the corporation\n * @param projectId - The ID of the project\n * @returns An array of project contributors\n * @requires Authentication\n */\n getCorporationProjectContributors(\n corporationId: number,\n projectId: number,\n ): Promise<CorporationProjectContributor[]> {\n return this.api.getCorporationProjectContributors(corporationId, projectId);\n }\n}\n","import { z } from 'zod';\nimport { EndpointMap } from './EndpointDefinition';\nimport {\n DogmaAttributeSchema,\n DogmaEffectSchema,\n DogmaDynamicItemSchema,\n} from '../../schemas/dogma';\n\nexport const dogmaEndpoints = {\n getAttributes: {\n path: 'dogma/attributes',\n method: 'GET',\n requiresAuth: false,\n responseSchema: z.array(z.number()),\n },\n getAttributeById: {\n path: 'dogma/attributes/{attributeId}',\n method: 'GET',\n requiresAuth: false,\n pathParams: ['attributeId'],\n responseSchema: DogmaAttributeSchema,\n },\n getEffects: {\n path: 'dogma/effects',\n method: 'GET',\n requiresAuth: false,\n responseSchema: z.array(z.number()),\n },\n getEffectById: {\n path: 'dogma/effects/{effectId}',\n method: 'GET',\n requiresAuth: false,\n pathParams: ['effectId'],\n responseSchema: DogmaEffectSchema,\n },\n getDynamicItemInfo: {\n path: 'dogma/dynamic/items/{typeId}/{itemId}',\n method: 'GET',\n requiresAuth: false,\n pathParams: ['typeId', 'itemId'],\n responseSchema: DogmaDynamicItemSchema,\n },\n} as const satisfies EndpointMap;\n","import { z } from 'zod';\n\nexport const DogmaAttributeSchema = z.looseObject({\n attribute_id: z.number(),\n name: z.string(),\n description: z.string().optional(),\n icon_id: z.number().optional(),\n default_value: z.number().optional(),\n published: z.boolean().optional(),\n display_name: z.string().optional(),\n unit_id: z.number().optional(),\n stackable: z.boolean().optional(),\n high_is_good: z.boolean().optional(),\n});\n\nexport const DogmaEffectSchema = z.looseObject({\n effect_id: z.number(),\n name: z.string(),\n description: z.string().optional(),\n icon_id: z.number().optional(),\n display_name: z.string().optional(),\n published: z.boolean().optional(),\n effect_category: z.number().optional(),\n is_assistance: z.boolean().optional(),\n is_offensive: z.boolean().optional(),\n is_warp_safe: z.boolean().optional(),\n disallow_auto_repeat: z.boolean().optional(),\n discharge_attribute_id: z.number().optional(),\n duration_attribute_id: z.number().optional(),\n electronic_chance: z.boolean().optional(),\n falloff_attribute_id: z.number().optional(),\n modifiers: z\n .array(\n z.looseObject({\n domain: z.string().optional(),\n effect_id: z.number().optional(),\n func: z.string(),\n modified_attribute_id: z.number().optional(),\n modifying_attribute_id: z.number().optional(),\n operator: z.number().optional(),\n }),\n )\n .optional(),\n post_expression: z.number().optional(),\n pre_expression: z.number().optional(),\n range_attribute_id: z.number().optional(),\n range_chance: z.boolean().optional(),\n tracking_speed_attribute_id: z.number().optional(),\n});\n\nexport const DogmaDynamicItemSchema = z.looseObject({\n created_by: z.number(),\n dogma_attributes: z.array(\n z.looseObject({\n attribute_id: z.number(),\n value: z.number(),\n }),\n ),\n dogma_effects: z.array(\n z.looseObject({\n effect_id: z.number(),\n is_default: z.boolean(),\n }),\n ),\n mutator_type_id: z.number(),\n source_type_id: z.number(),\n});\n","import { ApiClient } from '../core/ApiClient';\nimport { BaseEsiClient } from './BaseEsiClient';\nimport { dogmaEndpoints } from '../core/endpoints/dogmaEndpoints';\nimport {\n DogmaAttribute,\n DogmaEffect,\n DogmaDynamicItem,\n} from '../types/api-responses';\n\nexport class DogmaClient extends BaseEsiClient<typeof dogmaEndpoints> {\n constructor(client: ApiClient) {\n super(client, dogmaEndpoints);\n }\n\n /**\n * Retrieves a list of all dogma attribute IDs.\n *\n * @returns An array of dogma attribute IDs\n */\n getAttributes(): Promise<number[]> {\n return this.api.getAttributes() as Promise<number[]>;\n }\n\n /**\n * Retrieves detailed information about a specific dogma attribute.\n *\n * @param attributeId - The ID of the dogma attribute to look up\n * @returns Detailed information about the dogma attribute\n */\n getAttributeById(attributeId: number): Promise<DogmaAttribute> {\n return this.api.getAttributeById(attributeId) as Promise<DogmaAttribute>;\n }\n\n /**\n * Retrieves the dynamic dogma information for a specific mutated item, including its modified attributes.\n *\n * @param typeId - The type ID of the item\n * @param itemId - The item ID of the specific dynamic item\n * @returns Dynamic dogma information for the mutated item\n */\n getDynamicItemInfo(\n typeId: number,\n itemId: number,\n ): Promise<DogmaDynamicItem> {\n return this.api.getDynamicItemInfo(\n typeId,\n itemId,\n ) as Promise<DogmaDynamicItem>;\n }\n\n /**\n * Retrieves a list of all dogma effect IDs.\n *\n * @returns An array of dogma effect IDs\n */\n getEffects(): Promise<number[]> {\n return this.api.getEffects() as Promise<number[]>;\n }\n\n /**\n * Retrieves detailed information about a specific dogma effect.\n *\n * @param effectId - The ID of the dogma effect to look up\n * @returns Detailed information about the dogma effect\n */\n getEffectById(effectId: number): Promise<DogmaEffect> {\n return this.api.getEffectById(effectId) as Promise<DogmaEffect>;\n }\n}\n","import { z } from 'zod';\nimport { EndpointMap } from './EndpointDefinition';\nimport {\n FactionWarfareStatsSchema,\n FactionWarfareCharacterStatsSchema,\n FactionWarfareSystemSchema,\n FactionWarfareWarSchema,\n FactionWarfareLeaderboardSchema,\n FactionWarfareCorporationStatsSchema,\n} from '../../schemas/faction-warfare';\n\nexport const factionEndpoints = {\n getCharacterStats: {\n path: 'characters/{characterId}/fw/stats',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n responseSchema: FactionWarfareCharacterStatsSchema,\n },\n getCorporationStats: {\n path: 'corporations/{corporationId}/fw/stats',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId'],\n responseSchema: FactionWarfareCorporationStatsSchema,\n },\n getOverall: {\n path: 'fw/leaderboards',\n method: 'GET',\n requiresAuth: false,\n responseSchema: FactionWarfareLeaderboardSchema,\n },\n getCharacters: {\n path: 'fw/leaderboards/characters',\n method: 'GET',\n requiresAuth: false,\n responseSchema: FactionWarfareLeaderboardSchema,\n },\n getCorporations: {\n path: 'fw/leaderboards/corporations',\n method: 'GET',\n requiresAuth: false,\n responseSchema: FactionWarfareLeaderboardSchema,\n },\n getStats: {\n path: 'fw/stats',\n method: 'GET',\n requiresAuth: false,\n responseSchema: z.array(FactionWarfareStatsSchema),\n },\n getSystems: {\n path: 'fw/systems',\n method: 'GET',\n requiresAuth: false,\n responseSchema: z.array(FactionWarfareSystemSchema),\n },\n getWars: {\n path: 'fw/wars',\n method: 'GET',\n requiresAuth: false,\n responseSchema: z.array(FactionWarfareWarSchema),\n },\n} as const satisfies EndpointMap;\n","import { z } from 'zod';\nimport { esiEnum } from './esiEnum';\n\nexport const FactionWarfareStatsSchema = z.looseObject({\n faction_id: z.number(),\n pilots: z.number(),\n systems_controlled: z.number(),\n kills: z.looseObject({\n yesterday: z.number(),\n last_week: z.number(),\n total: z.number(),\n }),\n victory_points: z.looseObject({\n yesterday: z.number(),\n last_week: z.number(),\n total: z.number(),\n }),\n});\n\nexport const FactionWarfareCharacterStatsSchema = z.looseObject({\n faction_id: z.number().optional(),\n enlisted_on: z.string().optional(),\n current_rank: z.number().optional(),\n highest_rank: z.number().optional(),\n kills: z.looseObject({\n yesterday: z.number(),\n last_week: z.number(),\n total: z.number(),\n }),\n victory_points: z.looseObject({\n yesterday: z.number(),\n last_week: z.number(),\n total: z.number(),\n }),\n});\n\nexport const FactionWarfareSystemSchema = z.looseObject({\n solar_system_id: z.number(),\n owner_faction_id: z.number(),\n occupier_faction_id: z.number(),\n contested: esiEnum(['captured', 'contested', 'uncontested', 'vulnerable']),\n victory_points: z.number(),\n victory_points_threshold: z.number(),\n});\n\nexport const FactionWarfareWarSchema = z.looseObject({\n faction_id: z.number(),\n against_id: z.number(),\n});\n\nexport const FactionWarfareLeaderboardSchema = z.looseObject({\n kills: z.looseObject({\n yesterday: z.array(\n z.looseObject({\n amount: z.number(),\n id: z.number().optional(),\n }),\n ),\n last_week: z.array(\n z.looseObject({\n amount: z.number(),\n id: z.number().optional(),\n }),\n ),\n active_total: z.array(\n z.looseObject({\n amount: z.number(),\n id: z.number().optional(),\n }),\n ),\n }),\n victory_points: z.looseObject({\n yesterday: z.array(\n z.looseObject({\n amount: z.number(),\n id: z.number().optional(),\n }),\n ),\n last_week: z.array(\n z.looseObject({\n amount: z.number(),\n id: z.number().optional(),\n }),\n ),\n active_total: z.array(\n z.looseObject({\n amount: z.number(),\n id: z.number().optional(),\n }),\n ),\n }),\n});\n\nexport const FactionWarfareCorporationStatsSchema = z.looseObject({\n faction_id: z.number().optional(),\n enlisted_on: z.string().optional(),\n pilots: z.number().optional(),\n kills: z.looseObject({\n yesterday: z.number(),\n last_week: z.number(),\n total: z.number(),\n }),\n victory_points: z.looseObject({\n yesterday: z.number(),\n last_week: z.number(),\n total: z.number(),\n }),\n});\n","import { ApiClient } from '../core/ApiClient';\nimport { BaseEsiClient } from './BaseEsiClient';\nimport { factionEndpoints } from '../core/endpoints/factionEndpoints';\nimport {\n FactionWarfareStats,\n FactionWarfareCharacterStats,\n FactionWarfareCorporationStats,\n FactionWarfareLeaderboard,\n FactionWarfareSystem,\n FactionWarfareWar,\n} from '../types/api-responses';\n\nexport class FactionClient extends BaseEsiClient<typeof factionEndpoints> {\n constructor(client: ApiClient) {\n super(client, factionEndpoints);\n }\n\n /**\n * Retrieves the top characters in faction warfare leaderboards.\n *\n * @returns Faction warfare character leaderboard rankings\n */\n getLeaderboardsCharacters(): Promise<FactionWarfareLeaderboard> {\n return this.api.getCharacters() as Promise<FactionWarfareLeaderboard>;\n }\n\n /**\n * Retrieves the top corporations in faction warfare leaderboards.\n *\n * @returns Faction warfare corporation leaderboard rankings\n */\n getLeaderboardsCorporations(): Promise<FactionWarfareLeaderboard> {\n return this.api.getCorporations() as Promise<FactionWarfareLeaderboard>;\n }\n\n /**\n * Retrieves the overall faction warfare leaderboards across all factions.\n *\n * @returns Overall faction warfare leaderboard rankings\n */\n getLeaderboardsOverall(): Promise<FactionWarfareLeaderboard> {\n return this.api.getOverall() as Promise<FactionWarfareLeaderboard>;\n }\n\n /**\n * Retrieves faction warfare statistics for all factions, including kill and victory point totals.\n *\n * @returns An array of per-faction warfare statistics\n */\n getStats(): Promise<FactionWarfareStats[]> {\n return this.api.getStats() as Promise<FactionWarfareStats[]>;\n }\n\n /**\n * Retrieves faction warfare statistics for a specific character, including enlistment info and kill counts.\n *\n * @param characterId - The ID of the character\n * @returns Faction warfare statistics for the character\n * @requires Authentication\n */\n getCharacterStats(\n characterId: number,\n ): Promise<FactionWarfareCharacterStats> {\n return this.api.getCharacterStats(\n characterId,\n ) as Promise<FactionWarfareCharacterStats>;\n }\n\n /**\n * Retrieves faction warfare statistics for a specific corporation, including kill counts and victory points.\n *\n * @param corporationId - The ID of the corporation\n * @returns Faction warfare statistics for the corporation\n * @requires Authentication\n */\n getCorporationStats(\n corporationId: number,\n ): Promise<FactionWarfareCorporationStats> {\n return this.api.getCorporationStats(\n corporationId,\n ) as Promise<FactionWarfareCorporationStats>;\n }\n\n /**\n * Retrieves the current ownership and contested status of all faction warfare systems.\n *\n * @returns An array of faction warfare system statuses\n */\n getSystems(): Promise<FactionWarfareSystem[]> {\n return this.api.getSystems() as Promise<FactionWarfareSystem[]>;\n }\n\n /**\n * Retrieves the list of active faction warfare wars, showing which factions are fighting each other.\n *\n * @returns An array of active faction warfare wars\n */\n getWars(): Promise<FactionWarfareWar[]> {\n return this.api.getWars() as Promise<FactionWarfareWar[]>;\n }\n}\n","import { z } from 'zod';\nimport { EndpointMap } from './EndpointDefinition';\nimport { FittingSchema } from '../../schemas/fittings';\n\nexport const fittingEndpoints = {\n getFittings: {\n path: 'characters/{characterId}/fittings',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n responseSchema: z.array(FittingSchema),\n },\n createFitting: {\n path: 'characters/{characterId}/fittings',\n method: 'POST',\n requiresAuth: true,\n pathParams: ['characterId'],\n hasBody: true,\n },\n deleteFitting: {\n path: 'characters/{characterId}/fittings/{fittingId}',\n method: 'DELETE',\n requiresAuth: true,\n pathParams: ['characterId', 'fittingId'],\n },\n} as const satisfies EndpointMap;\n","import { z } from 'zod';\n\nexport const FittingSchema = z.looseObject({\n fitting_id: z.number(),\n name: z.string(),\n description: z.string(),\n ship_type_id: z.number(),\n items: z.array(\n z.looseObject({\n type_id: z.number(),\n flag: z.union([z.number(), z.string()]),\n quantity: z.number(),\n }),\n ),\n});\n","import { ApiClient } from '../core/ApiClient';\nimport { BaseEsiClient } from './BaseEsiClient';\nimport { fittingEndpoints } from '../core/endpoints/fittingEndpoints';\nimport { Fitting } from '../types/api-responses';\nimport { PageResult } from '../core/pagination/AsyncPaginationIterator';\n\nexport class FittingsClient extends BaseEsiClient<typeof fittingEndpoints> {\n constructor(client: ApiClient) {\n super(client, fittingEndpoints);\n }\n\n /**\n * Retrieves all saved ship fittings for a character.\n *\n * @param characterId - The ID of the character\n * @returns An array of the character's saved fittings\n * @requires Authentication\n */\n getFittings(characterId: number): Promise<Fitting[]> {\n return this.api.getFittings(characterId);\n }\n\n /**\n * Creates a new saved ship fitting for a character via POST.\n *\n * @param characterId - The ID of the character\n * @param fittingData - The fitting details including ship type and module layout\n * @returns The ID of the newly created fitting\n * @requires Authentication\n */\n createFitting(\n characterId: number,\n fittingData: object,\n ): Promise<{ fitting_id: number }> {\n return this.api.createFitting(characterId, fittingData) as Promise<{\n fitting_id: number;\n }>;\n }\n\n /**\n * Deletes a saved ship fitting for a character.\n *\n * @param characterId - The ID of the character\n * @param fittingId - The ID of the fitting to delete\n * @requires Authentication\n */\n deleteFitting(characterId: number, fittingId: number): Promise<void> {\n return this.api.deleteFitting(characterId, fittingId) as Promise<void>;\n }\n\n streamFittings(\n characterId: number,\n ): AsyncGenerator<PageResult<Fitting>, void, undefined> {\n return this.streamEndpoint<Fitting>('getFittings', characterId);\n }\n}\n","import { z } from 'zod';\nimport { EndpointMap } from './EndpointDefinition';\nimport {\n FleetInfoSchema,\n FleetMemberSchema,\n FleetWingSchema,\n CharacterFleetInfoSchema,\n} from '../../schemas/fleet';\n\nexport const fleetEndpoints = {\n getCharacterFleetInfo: {\n path: 'characters/{characterId}/fleet',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n responseSchema: CharacterFleetInfoSchema,\n },\n getFleetInfo: {\n path: 'fleets/{fleetId}',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['fleetId'],\n responseSchema: FleetInfoSchema,\n },\n updateFleet: {\n path: 'fleets/{fleetId}',\n method: 'PUT',\n requiresAuth: true,\n pathParams: ['fleetId'],\n hasBody: true,\n requestSchema: z.looseObject({\n is_free_move: z.boolean().optional(),\n motd: z.string().optional(),\n }),\n },\n getFleetMembers: {\n path: 'fleets/{fleetId}/members',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['fleetId'],\n responseSchema: z.array(FleetMemberSchema),\n },\n createFleetInvitation: {\n path: 'fleets/{fleetId}/members/',\n method: 'POST',\n requiresAuth: true,\n pathParams: ['fleetId'],\n hasBody: true,\n },\n kickFleetMember: {\n path: 'fleets/{fleetId}/members/{memberId}/',\n method: 'DELETE',\n requiresAuth: true,\n pathParams: ['fleetId', 'memberId'],\n },\n moveFleetMember: {\n path: 'fleets/{fleetId}/members/{memberId}/',\n method: 'PUT',\n requiresAuth: true,\n pathParams: ['fleetId', 'memberId'],\n hasBody: true,\n },\n deleteFleetSquad: {\n path: 'fleets/{fleetId}/squads/{squadId}/',\n method: 'DELETE',\n requiresAuth: true,\n pathParams: ['fleetId', 'squadId'],\n },\n renameFleetSquad: {\n path: 'fleets/{fleetId}/squads/{squadId}/',\n method: 'PUT',\n requiresAuth: true,\n pathParams: ['fleetId', 'squadId'],\n bodyBuilder: (name: string) => ({ name }),\n },\n getFleetWings: {\n path: 'fleets/{fleetId}/wings/',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['fleetId'],\n responseSchema: z.array(FleetWingSchema),\n },\n createFleetWing: {\n path: 'fleets/{fleetId}/wings/',\n method: 'POST',\n requiresAuth: true,\n pathParams: ['fleetId'],\n hasBody: true,\n },\n deleteFleetWing: {\n path: 'fleets/{fleetId}/wings/{wingId}/',\n method: 'DELETE',\n requiresAuth: true,\n pathParams: ['fleetId', 'wingId'],\n },\n renameFleetWing: {\n path: 'fleets/{fleetId}/wings/{wingId}/',\n method: 'PUT',\n requiresAuth: true,\n pathParams: ['fleetId', 'wingId'],\n bodyBuilder: (name: string) => ({ name }),\n },\n createFleetSquad: {\n path: 'fleets/{fleetId}/wings/{wingId}/squads/',\n method: 'POST',\n requiresAuth: true,\n pathParams: ['fleetId', 'wingId'],\n },\n} as const satisfies EndpointMap;\n","import { z } from 'zod';\nimport { esiEnum } from './esiEnum';\n\nexport const FleetInfoSchema = z.looseObject({\n fleet_id: z.number().optional(),\n fleet_boss_id: z.number().optional(),\n is_free_move: z.boolean(),\n is_registered: z.boolean(),\n is_voice_enabled: z.boolean(),\n motd: z.string(),\n});\n\nexport const FleetMemberSchema = z.looseObject({\n character_id: z.number(),\n ship_type_id: z.number(),\n wing_id: z.number(),\n squad_id: z.number(),\n role: esiEnum([\n 'fleet_commander',\n 'wing_commander',\n 'squad_commander',\n 'squad_member',\n ]),\n role_name: z.string(),\n join_time: z.string(),\n takes_fleet_warp: z.boolean(),\n solar_system_id: z.number(),\n station_id: z.number().optional(),\n});\n\nexport const FleetWingSchema = z.looseObject({\n id: z.number(),\n name: z.string(),\n squads: z.array(\n z.looseObject({\n id: z.number(),\n name: z.string(),\n }),\n ),\n});\n\nexport const CharacterFleetInfoSchema = z.looseObject({\n fleet_id: z.number(),\n fleet_boss_id: z.number().optional(),\n role: esiEnum([\n 'fleet_commander',\n 'wing_commander',\n 'squad_commander',\n 'squad_member',\n ]),\n squad_id: z.number(),\n wing_id: z.number(),\n});\n","import { ApiClient } from '../core/ApiClient';\nimport { BaseEsiClient } from './BaseEsiClient';\nimport { fleetEndpoints } from '../core/endpoints/fleetEndpoints';\nimport {\n CharacterFleetInfo,\n FleetInfo,\n FleetMember,\n FleetWing,\n} from '../types/api-responses';\nimport { PageResult } from '../core/pagination/AsyncPaginationIterator';\n\nexport class FleetClient extends BaseEsiClient<typeof fleetEndpoints> {\n constructor(client: ApiClient) {\n super(client, fleetEndpoints);\n }\n\n /**\n * Retrieves the fleet that a character is currently in, including their role and wing/squad assignment.\n *\n * @param characterId - The ID of the character\n * @returns Fleet membership information for the character\n * @requires Authentication\n */\n getCharacterFleetInfo(characterId: number): Promise<CharacterFleetInfo> {\n return this.api.getCharacterFleetInfo(characterId);\n }\n\n /**\n * Retrieves detailed information about a fleet, including its MOTD and free-move setting.\n *\n * @param fleetId - The ID of the fleet\n * @returns Detailed fleet information\n * @requires Authentication\n */\n getFleetInformation(fleetId: number): Promise<FleetInfo> {\n return this.api.getFleetInfo(fleetId);\n }\n\n /**\n * Updates fleet settings such as the MOTD and free-move toggle via PUT.\n *\n * @param fleetId - The ID of the fleet\n * @param body - The fleet settings to update\n * @requires Authentication\n */\n updateFleet(fleetId: number, body: object): Promise<void> {\n return this.api.updateFleet(fleetId, body) as Promise<void>;\n }\n\n /**\n * Retrieves all current members of a fleet, including their ship types and roles.\n *\n * @param fleetId - The ID of the fleet\n * @returns An array of fleet members\n * @requires Authentication\n */\n getFleetMembers(fleetId: number): Promise<FleetMember[]> {\n return this.api.getFleetMembers(fleetId);\n }\n\n /**\n * Sends an invitation to a character to join a fleet via POST.\n *\n * @param fleetId - The ID of the fleet\n * @param body - The invitation details including the character to invite and their role\n * @requires Authentication\n */\n createFleetInvitation(fleetId: number, body: object): Promise<void> {\n return this.api.createFleetInvitation(fleetId, body) as Promise<void>;\n }\n\n /**\n * Kicks a member from a fleet.\n *\n * @param fleetId - The ID of the fleet\n * @param memberId - The character ID of the member to kick\n * @requires Authentication\n */\n kickFleetMember(fleetId: number, memberId: number): Promise<void> {\n return this.api.kickFleetMember(fleetId, memberId) as Promise<void>;\n }\n\n /**\n * Moves a fleet member to a different wing, squad, or role via PUT.\n *\n * @param fleetId - The ID of the fleet\n * @param memberId - The character ID of the member to move\n * @param body - The target role, wing, and/or squad assignment\n * @requires Authentication\n */\n moveFleetMember(\n fleetId: number,\n memberId: number,\n body: object,\n ): Promise<void> {\n return this.api.moveFleetMember(fleetId, memberId, body) as Promise<void>;\n }\n\n /**\n * Deletes a squad from a fleet.\n *\n * @param fleetId - The ID of the fleet\n * @param squadId - The ID of the squad to delete\n * @requires Authentication\n */\n deleteFleetSquad(fleetId: number, squadId: number): Promise<void> {\n return this.api.deleteFleetSquad(fleetId, squadId) as Promise<void>;\n }\n\n /**\n * Renames a squad within a fleet via PUT.\n *\n * @param fleetId - The ID of the fleet\n * @param squadId - The ID of the squad to rename\n * @param name - The new name for the squad (max 10 characters)\n * @requires Authentication\n */\n renameFleetSquad(\n fleetId: number,\n squadId: number,\n name: string,\n ): Promise<void> {\n if (name.length > 10) {\n return Promise.reject(\n new Error(\n `Fleet squad name \"${name}\" exceeds ESI maximum of 10 characters`,\n ),\n );\n }\n return this.api.renameFleetSquad(fleetId, squadId, name) as Promise<void>;\n }\n\n /**\n * Retrieves all wings and their squads for a fleet.\n *\n * @param fleetId - The ID of the fleet\n * @returns An array of fleet wings with their nested squads\n * @requires Authentication\n */\n getFleetWings(fleetId: number): Promise<FleetWing[]> {\n return this.api.getFleetWings(fleetId);\n }\n\n /**\n * Creates a new wing in a fleet via POST.\n *\n * @param fleetId - The ID of the fleet\n * @param body - The wing creation details\n * @returns The ID of the newly created wing\n * @requires Authentication\n */\n createFleetWing(fleetId: number, body: object): Promise<{ wing_id: number }> {\n return this.api.createFleetWing(fleetId, body) as Promise<{\n wing_id: number;\n }>;\n }\n\n /**\n * Deletes a wing from a fleet, along with all its squads.\n *\n * @param fleetId - The ID of the fleet\n * @param wingId - The ID of the wing to delete\n * @requires Authentication\n */\n deleteFleetWing(fleetId: number, wingId: number): Promise<void> {\n return this.api.deleteFleetWing(fleetId, wingId) as Promise<void>;\n }\n\n /**\n * Renames a wing within a fleet via PUT.\n *\n * @param fleetId - The ID of the fleet\n * @param wingId - The ID of the wing to rename\n * @param name - The new name for the wing (max 10 characters)\n * @requires Authentication\n */\n renameFleetWing(\n fleetId: number,\n wingId: number,\n name: string,\n ): Promise<void> {\n if (name.length > 10) {\n return Promise.reject(\n new Error(\n `Fleet wing name \"${name}\" exceeds ESI maximum of 10 characters`,\n ),\n );\n }\n return this.api.renameFleetWing(fleetId, wingId, name) as Promise<void>;\n }\n\n /**\n * Creates a new squad under a wing in a fleet via POST.\n *\n * @param fleetId - The ID of the fleet\n * @param wingId - The ID of the wing to add the squad to\n * @returns The ID of the newly created squad\n * @requires Authentication\n */\n createFleetSquad(\n fleetId: number,\n wingId: number,\n ): Promise<{ squad_id: number }> {\n return this.api.createFleetSquad(fleetId, wingId) as Promise<{\n squad_id: number;\n }>;\n }\n\n streamFleetMembers(\n fleetId: number,\n ): AsyncGenerator<PageResult<FleetMember>, void, undefined> {\n return this.streamEndpoint<FleetMember>('getFleetMembers', fleetId);\n }\n\n streamFleetWings(\n fleetId: number,\n ): AsyncGenerator<PageResult<FleetWing>, void, undefined> {\n return this.streamEndpoint<FleetWing>('getFleetWings', fleetId);\n }\n}\n","import { z } from 'zod';\nimport { EndpointMap } from './EndpointDefinition';\nimport { IncursionSchema } from '../../schemas/incursions';\n\nexport const incursionEndpoints = {\n getIncursions: {\n path: 'incursions',\n method: 'GET',\n requiresAuth: false,\n responseSchema: z.array(IncursionSchema),\n },\n} as const satisfies EndpointMap;\n","import { z } from 'zod';\nimport { esiEnum } from './esiEnum';\n\nexport const IncursionSchema = z.looseObject({\n type: z.string(),\n state: esiEnum(['withdrawing', 'mobilizing', 'established']),\n staging_solar_system_id: z.number(),\n constellation_id: z.number(),\n infested_solar_systems: z.array(z.number()),\n has_boss: z.boolean(),\n faction_id: z.number(),\n influence: z.number(),\n});\n","import { ApiClient } from '../core/ApiClient';\nimport { BaseEsiClient } from './BaseEsiClient';\nimport { incursionEndpoints } from '../core/endpoints/incursionEndpoints';\nimport { Incursion } from '../types/api-responses';\n\nexport class IncursionsClient extends BaseEsiClient<typeof incursionEndpoints> {\n constructor(client: ApiClient) {\n super(client, incursionEndpoints);\n }\n\n /**\n * Retrieves all currently active incursions, including their staging systems and influence levels.\n *\n * @returns An array of active incursions\n */\n getIncursions(): Promise<Incursion[]> {\n return this.api.getIncursions() as Promise<Incursion[]>;\n }\n}\n","import { z } from 'zod';\nimport { EndpointMap } from './EndpointDefinition';\nimport {\n IndustryJobSchema,\n MiningLedgerEntrySchema,\n IndustryFacilitySchema,\n IndustrySystemSchema,\n MoonExtractionTimerSchema,\n MiningObserverSchema,\n MiningObserverEntrySchema,\n} from '../../schemas/industry';\n\nexport const industryEndpoints = {\n getCharacterIndustryJobs: {\n path: 'characters/{characterId}/industry/jobs',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n responseSchema: z.array(IndustryJobSchema),\n },\n getCharacterMiningLedger: {\n path: 'characters/{characterId}/mining',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n responseSchema: z.array(MiningLedgerEntrySchema),\n },\n getCorporationIndustryJobs: {\n path: 'corporations/{corporationId}/industry/jobs',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId'],\n responseSchema: z.array(IndustryJobSchema),\n },\n getMoonExtractionTimers: {\n path: 'corporation/{corporationId}/mining/extractions',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId'],\n responseSchema: z.array(MoonExtractionTimerSchema),\n },\n getCorporationMiningObservers: {\n path: 'corporation/{corporationId}/mining/observers',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId'],\n responseSchema: z.array(MiningObserverSchema),\n },\n getCorporationMiningObserver: {\n path: 'corporation/{corporationId}/mining/observers/{observerId}',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId', 'observerId'],\n responseSchema: z.array(MiningObserverEntrySchema),\n },\n getIndustryFacilities: {\n path: 'industry/facilities',\n method: 'GET',\n requiresAuth: false,\n responseSchema: z.array(IndustryFacilitySchema),\n },\n getIndustrySystems: {\n path: 'industry/systems',\n method: 'GET',\n requiresAuth: false,\n responseSchema: z.array(IndustrySystemSchema),\n },\n} as const satisfies EndpointMap;\n","import { z } from 'zod';\nimport { esiEnum } from './esiEnum';\n\nexport const IndustryJobSchema = z.looseObject({\n job_id: z.number(),\n installer_id: z.number(),\n facility_id: z.number(),\n station_id: z.number(),\n activity_id: z.number(),\n blueprint_id: z.number(),\n blueprint_type_id: z.number(),\n blueprint_location_id: z.number(),\n output_location_id: z.number(),\n runs: z.number(),\n cost: z.number().optional(),\n licensed_runs: z.number().optional(),\n probability: z.number().optional(),\n product_type_id: z.number().optional(),\n status: esiEnum([\n 'active',\n 'cancelled',\n 'delivered',\n 'paused',\n 'ready',\n 'reverted',\n ]),\n duration: z.number(),\n start_date: z.string(),\n end_date: z.string(),\n pause_date: z.string().optional(),\n completed_date: z.string().optional(),\n completed_character_id: z.number().optional(),\n successful_runs: z.number().optional(),\n});\n\nexport const MiningLedgerEntrySchema = z.looseObject({\n date: z.string(),\n solar_system_id: z.number(),\n type_id: z.number(),\n quantity: z.number(),\n});\n\nexport const IndustryFacilitySchema = z.looseObject({\n facility_id: z.number(),\n owner_id: z.number(),\n region_id: z.number(),\n solar_system_id: z.number(),\n tax: z.number().optional(),\n type_id: z.number(),\n});\n\nexport const IndustrySystemSchema = z.looseObject({\n solar_system_id: z.number(),\n cost_indices: z.array(\n z.looseObject({\n activity: z.string(),\n cost_index: z.number(),\n }),\n ),\n});\n\nexport const MoonExtractionTimerSchema = z.looseObject({\n structure_id: z.number(),\n moon_id: z.number(),\n extraction_start_time: z.string(),\n chunk_arrival_time: z.string(),\n natural_decay_time: z.string(),\n});\n\nexport const MiningObserverSchema = z.looseObject({\n observer_id: z.number(),\n observer_type: z.string(),\n last_updated: z.string(),\n});\n\nexport const MiningObserverEntrySchema = z.looseObject({\n character_id: z.number(),\n recorded_corporation_id: z.number(),\n type_id: z.number(),\n quantity: z.number(),\n last_updated: z.string(),\n});\n","import { ApiClient } from '../core/ApiClient';\nimport { BaseEsiClient } from './BaseEsiClient';\nimport { industryEndpoints } from '../core/endpoints/industryEndpoints';\nimport {\n IndustryJob,\n MiningLedgerEntry,\n IndustryFacility,\n IndustrySystem,\n MoonExtractionTimer,\n MiningObserver,\n MiningObserverEntry,\n} from '../types/api-responses';\nimport { PageResult } from '../core/pagination/AsyncPaginationIterator';\n\nexport class IndustryClient extends BaseEsiClient<typeof industryEndpoints> {\n constructor(client: ApiClient) {\n super(client, industryEndpoints);\n }\n\n /**\n * Retrieves all industry jobs for a character, including manufacturing, research, and invention.\n *\n * @param characterId - The ID of the character\n * @returns An array of the character's industry jobs\n * @requires Authentication\n */\n getCharacterIndustryJobs(characterId: number): Promise<IndustryJob[]> {\n return this.api.getCharacterIndustryJobs(characterId);\n }\n\n /**\n * Retrieves a character's personal mining ledger, showing ore mined per day.\n *\n * @param characterId - The ID of the character\n * @returns An array of mining ledger entries\n * @requires Authentication\n */\n getCharacterMiningLedger(characterId: number): Promise<MiningLedgerEntry[]> {\n return this.api.getCharacterMiningLedger(characterId);\n }\n\n /**\n * Retrieves moon extraction timers for a corporation's refineries.\n *\n * @param corporationId - The ID of the corporation\n * @returns An array of moon extraction timers\n * @requires Authentication\n */\n getMoonExtractionTimers(\n corporationId: number,\n ): Promise<MoonExtractionTimer[]> {\n return this.api.getMoonExtractionTimers(corporationId);\n }\n\n /**\n * Retrieves the list of mining observers (e.g., refineries) owned by a corporation.\n *\n * @param corporationId - The ID of the corporation\n * @returns An array of mining observers\n * @requires Authentication\n */\n getCorporationMiningObservers(\n corporationId: number,\n ): Promise<MiningObserver[]> {\n return this.api.getCorporationMiningObservers(corporationId);\n }\n\n /**\n * Retrieves mining activity recorded by a specific corporation mining observer.\n *\n * @param corporationId - The ID of the corporation\n * @param observerId - The ID of the mining observer\n * @returns An array of mining activity entries for the observer\n * @requires Authentication\n */\n getCorporationMiningObserver(\n corporationId: number,\n observerId: number,\n ): Promise<MiningObserverEntry[]> {\n return this.api.getCorporationMiningObserver(corporationId, observerId);\n }\n\n /**\n * Retrieves all industry jobs for a corporation, including manufacturing, research, and invention.\n *\n * @param corporationId - The ID of the corporation\n * @returns An array of the corporation's industry jobs\n * @requires Authentication\n */\n getCorporationIndustryJobs(corporationId: number): Promise<IndustryJob[]> {\n return this.api.getCorporationIndustryJobs(corporationId);\n }\n\n /**\n * Retrieves a list of all publicly available industry facilities in the universe.\n *\n * @returns An array of industry facilities\n */\n getIndustryFacilities(): Promise<IndustryFacility[]> {\n return this.api.getIndustryFacilities();\n }\n\n /**\n * Retrieves cost indices for solar systems with industry activity, used to calculate job installation fees.\n *\n * @returns An array of industry system cost indices\n */\n getIndustrySystems(): Promise<IndustrySystem[]> {\n return this.api.getIndustrySystems();\n }\n\n streamCharacterIndustryJobs(\n characterId: number,\n ): AsyncGenerator<PageResult<IndustryJob>, void, undefined> {\n return this.streamEndpoint<IndustryJob>(\n 'getCharacterIndustryJobs',\n characterId,\n );\n }\n\n streamCharacterMiningLedger(\n characterId: number,\n ): AsyncGenerator<PageResult<MiningLedgerEntry>, void, undefined> {\n return this.streamEndpoint<MiningLedgerEntry>(\n 'getCharacterMiningLedger',\n characterId,\n );\n }\n\n streamCorporationIndustryJobs(\n corporationId: number,\n ): AsyncGenerator<PageResult<IndustryJob>, void, undefined> {\n return this.streamEndpoint<IndustryJob>(\n 'getCorporationIndustryJobs',\n corporationId,\n );\n }\n\n streamMoonExtractionTimers(\n corporationId: number,\n ): AsyncGenerator<PageResult<MoonExtractionTimer>, void, undefined> {\n return this.streamEndpoint<MoonExtractionTimer>(\n 'getMoonExtractionTimers',\n corporationId,\n );\n }\n\n streamCorporationMiningObservers(\n corporationId: number,\n ): AsyncGenerator<PageResult<MiningObserver>, void, undefined> {\n return this.streamEndpoint<MiningObserver>(\n 'getCorporationMiningObservers',\n corporationId,\n );\n }\n\n streamCorporationMiningObserver(\n corporationId: number,\n observerId: number,\n ): AsyncGenerator<PageResult<MiningObserverEntry>, void, undefined> {\n return this.streamEndpoint<MiningObserverEntry>(\n 'getCorporationMiningObserver',\n corporationId,\n observerId,\n );\n }\n\n streamIndustryFacilities(): AsyncGenerator<\n PageResult<IndustryFacility>,\n void,\n undefined\n > {\n return this.streamEndpoint<IndustryFacility>('getIndustryFacilities');\n }\n\n streamIndustrySystems(): AsyncGenerator<\n PageResult<IndustrySystem>,\n void,\n undefined\n > {\n return this.streamEndpoint<IndustrySystem>('getIndustrySystems');\n }\n}\n","import { z } from 'zod';\nimport { EndpointMap } from './EndpointDefinition';\nimport { InsurancePriceSchema } from '../../schemas/insurance';\n\nexport const insuranceEndpoints = {\n getInsurancePrices: {\n path: 'insurance/prices',\n method: 'GET',\n requiresAuth: false,\n responseSchema: z.array(InsurancePriceSchema),\n },\n} as const satisfies EndpointMap;\n","import { z } from 'zod';\n\nexport const InsurancePriceSchema = z.looseObject({\n type_id: z.number(),\n levels: z.array(\n z.looseObject({\n cost: z.number(),\n payout: z.number(),\n name: z.string(),\n }),\n ),\n});\n","import { ApiClient } from '../core/ApiClient';\nimport { BaseEsiClient } from './BaseEsiClient';\nimport { insuranceEndpoints } from '../core/endpoints/insuranceEndpoints';\nimport { InsurancePrice } from '../types/api-responses';\n\nexport class InsuranceClient extends BaseEsiClient<typeof insuranceEndpoints> {\n constructor(client: ApiClient) {\n super(client, insuranceEndpoints);\n }\n\n /**\n * Retrieves available insurance levels and their costs for all ship types.\n *\n * @returns An array of insurance price listings per ship type\n */\n getInsurancePrices(): Promise<InsurancePrice[]> {\n return this.api.getInsurancePrices() as Promise<InsurancePrice[]>;\n }\n}\n","import { z } from 'zod';\nimport { EndpointMap } from './EndpointDefinition';\nimport { KillmailSummarySchema, KillmailSchema } from '../../schemas/killmails';\n\nexport const killmailEndpoints = {\n getCharacterRecentKillmails: {\n path: 'characters/{characterId}/killmails/recent',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n responseSchema: z.array(KillmailSummarySchema),\n },\n getCorporationRecentKillmails: {\n path: 'corporations/{corporationId}/killmails/recent',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId'],\n responseSchema: z.array(KillmailSummarySchema),\n },\n getKillmail: {\n path: 'killmails/{killmailId}/{killmailHash}',\n method: 'GET',\n requiresAuth: false,\n pathParams: ['killmailId', 'killmailHash'],\n responseSchema: KillmailSchema,\n },\n} as const satisfies EndpointMap;\n","import { z } from 'zod';\n\nexport const KillmailSummarySchema = z.looseObject({\n killmail_id: z.number(),\n killmail_hash: z.string(),\n});\n\nexport const KillmailSchema = z.looseObject({\n killmail_id: z.number(),\n killmail_time: z.string(),\n solar_system_id: z.number(),\n moon_id: z.number().optional(),\n war_id: z.number().optional(),\n victim: z.looseObject({\n character_id: z.number().optional(),\n corporation_id: z.number().optional(),\n alliance_id: z.number().optional(),\n faction_id: z.number().optional(),\n ship_type_id: z.number(),\n damage_taken: z.number(),\n position: z\n .looseObject({\n x: z.number(),\n y: z.number(),\n z: z.number(),\n })\n .optional(),\n items: z.array(z.unknown()).optional(),\n }),\n attackers: z.array(\n z.looseObject({\n character_id: z.number().optional(),\n corporation_id: z.number().optional(),\n alliance_id: z.number().optional(),\n faction_id: z.number().optional(),\n ship_type_id: z.number().optional(),\n weapon_type_id: z.number().optional(),\n damage_done: z.number(),\n final_blow: z.boolean(),\n security_status: z.number(),\n }),\n ),\n});\n","import { ApiClient } from '../core/ApiClient';\nimport { BaseEsiClient } from './BaseEsiClient';\nimport { killmailEndpoints } from '../core/endpoints/killmailEndpoints';\nimport { KillmailSummary, Killmail } from '../types/api-responses';\nimport { PageResult } from '../core/pagination/AsyncPaginationIterator';\n\nexport class KillmailsClient extends BaseEsiClient<typeof killmailEndpoints> {\n constructor(client: ApiClient) {\n super(client, killmailEndpoints);\n }\n\n /**\n * Retrieves a list of recent killmail summaries for a character.\n *\n * @param characterId - The ID of the character to fetch killmails for\n * @returns A list of recent killmail summaries including killmail IDs and hashes\n * @requires Authentication\n */\n getCharacterRecentKillmails(characterId: number): Promise<KillmailSummary[]> {\n return this.api.getCharacterRecentKillmails(characterId) as Promise<\n KillmailSummary[]\n >;\n }\n\n /**\n * Retrieves a list of recent killmail summaries for a corporation.\n *\n * @param corporationId - The ID of the corporation to fetch killmails for\n * @returns A list of recent killmail summaries including killmail IDs and hashes\n * @requires Authentication\n */\n getCorporationRecentKillmails(\n corporationId: number,\n ): Promise<KillmailSummary[]> {\n return this.api.getCorporationRecentKillmails(corporationId) as Promise<\n KillmailSummary[]\n >;\n }\n\n /**\n * Retrieves the full details of a specific killmail by its ID and hash.\n *\n * @param killmailId - The ID of the killmail to retrieve\n * @param killmailHash - The hash of the killmail for verification\n * @returns The full killmail details including victim, attackers, and items\n */\n getKillmail(killmailId: number, killmailHash: string): Promise<Killmail> {\n return this.api.getKillmail(killmailId, killmailHash) as Promise<Killmail>;\n }\n\n streamCharacterRecentKillmails(\n characterId: number,\n ): AsyncGenerator<PageResult<KillmailSummary>, void, undefined> {\n return this.streamEndpoint<KillmailSummary>(\n 'getCharacterRecentKillmails',\n characterId,\n );\n }\n\n streamCorporationRecentKillmails(\n corporationId: number,\n ): AsyncGenerator<PageResult<KillmailSummary>, void, undefined> {\n return this.streamEndpoint<KillmailSummary>(\n 'getCorporationRecentKillmails',\n corporationId,\n );\n }\n}\n","import { z } from 'zod';\n\nexport const CharacterLocationSchema = z.looseObject({\n solar_system_id: z.number(),\n station_id: z.number().optional(),\n structure_id: z.number().optional(),\n});\n\nexport const CharacterOnlineSchema = z.looseObject({\n online: z.boolean(),\n last_login: z.string().optional(),\n last_logout: z.string().optional(),\n logins: z.number().optional(),\n});\n\nexport const CharacterShipSchema = z.looseObject({\n ship_item_id: z.number(),\n ship_name: z.string(),\n ship_type_id: z.number(),\n});\n","import { EndpointMap } from './EndpointDefinition';\nimport {\n CharacterLocationSchema,\n CharacterOnlineSchema,\n CharacterShipSchema,\n} from '../../schemas/location';\n\nexport const locationEndpoints = {\n getCharacterLocation: {\n path: 'characters/{characterId}/location',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n responseSchema: CharacterLocationSchema,\n },\n getCharacterOnline: {\n path: 'characters/{characterId}/online',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n responseSchema: CharacterOnlineSchema,\n },\n getCharacterShip: {\n path: 'characters/{characterId}/ship',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n responseSchema: CharacterShipSchema,\n },\n} as const satisfies EndpointMap;\n","import { ApiClient } from '../core/ApiClient';\nimport { BaseEsiClient } from './BaseEsiClient';\nimport { locationEndpoints } from '../core/endpoints/locationEndpoints';\nimport {\n CharacterLocation,\n CharacterOnline,\n CharacterShip,\n} from '../types/api-responses';\n\nexport class LocationClient extends BaseEsiClient<typeof locationEndpoints> {\n constructor(client: ApiClient) {\n super(client, locationEndpoints);\n }\n\n /**\n * Retrieves the current solar system, station, and structure location of a character.\n *\n * @param characterId - The ID of the character to locate\n * @returns The character's current location including solar system and optional station or structure\n * @requires Authentication\n */\n getCharacterLocation(characterId: number): Promise<CharacterLocation> {\n return this.api.getCharacterLocation(\n characterId,\n ) as Promise<CharacterLocation>;\n }\n\n /**\n * Checks whether a character is currently online and retrieves login/logout timestamps.\n *\n * @param characterId - The ID of the character to check\n * @returns The character's online status and last login/logout times\n * @requires Authentication\n */\n getCharacterOnline(characterId: number): Promise<CharacterOnline> {\n return this.api.getCharacterOnline(characterId) as Promise<CharacterOnline>;\n }\n\n /**\n * Retrieves the type, name, and item ID of the ship a character is currently flying.\n *\n * @param characterId - The ID of the character whose ship to retrieve\n * @returns The character's current ship details including type ID and ship name\n * @requires Authentication\n */\n getCharacterShip(characterId: number): Promise<CharacterShip> {\n return this.api.getCharacterShip(characterId) as Promise<CharacterShip>;\n }\n}\n","import { z } from 'zod';\nimport { EndpointMap } from './EndpointDefinition';\nimport {\n LoyaltyPointsSchema,\n LoyaltyStoreOfferSchema,\n} from '../../schemas/loyalty';\n\nexport const loyaltyEndpoints = {\n getLoyaltyPoints: {\n path: 'characters/{characterId}/loyalty/points',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n responseSchema: z.array(LoyaltyPointsSchema),\n },\n getLoyaltyStoreOffers: {\n path: 'loyalty/stores/{corporationId}/offers',\n method: 'GET',\n requiresAuth: false,\n pathParams: ['corporationId'],\n responseSchema: z.array(LoyaltyStoreOfferSchema),\n },\n} as const satisfies EndpointMap;\n","import { z } from 'zod';\n\nexport const LoyaltyPointsSchema = z.looseObject({\n corporation_id: z.number(),\n loyalty_points: z.number(),\n});\n\nexport const LoyaltyStoreOfferSchema = z.looseObject({\n offer_id: z.number(),\n type_id: z.number(),\n quantity: z.number(),\n lp_cost: z.number(),\n isk_cost: z.number(),\n ak_cost: z.number().optional(),\n required_items: z.array(\n z.looseObject({\n type_id: z.number(),\n quantity: z.number(),\n }),\n ),\n});\n","import { ApiClient } from '../core/ApiClient';\nimport { BaseEsiClient } from './BaseEsiClient';\nimport { loyaltyEndpoints } from '../core/endpoints/loyaltyEndpoints';\nimport { LoyaltyPoints, LoyaltyStoreOffer } from '../types/api-responses';\nimport { PageResult } from '../core/pagination/AsyncPaginationIterator';\n\nexport class LoyaltyClient extends BaseEsiClient<typeof loyaltyEndpoints> {\n constructor(client: ApiClient) {\n super(client, loyaltyEndpoints);\n }\n\n /**\n * Retrieves the loyalty points a character has earned with each NPC corporation.\n *\n * @param characterId - The ID of the character to fetch loyalty points for\n * @returns A list of loyalty point balances per corporation\n * @requires Authentication\n */\n getLoyaltyPoints(characterId: number): Promise<LoyaltyPoints[]> {\n return this.api.getLoyaltyPoints(characterId);\n }\n\n /**\n * Retrieves the list of items available in an NPC corporation's loyalty point store.\n *\n * @param corporationId - The ID of the NPC corporation whose LP store to query\n * @returns A list of offers available in the loyalty store\n */\n getLoyaltyStoreOffers(corporationId: number): Promise<LoyaltyStoreOffer[]> {\n return this.api.getLoyaltyStoreOffers(corporationId);\n }\n\n streamLoyaltyPoints(\n characterId: number,\n ): AsyncGenerator<PageResult<LoyaltyPoints>, void, undefined> {\n return this.streamEndpoint<LoyaltyPoints>('getLoyaltyPoints', characterId);\n }\n\n streamLoyaltyStoreOffers(\n corporationId: number,\n ): AsyncGenerator<PageResult<LoyaltyStoreOffer>, void, undefined> {\n return this.streamEndpoint<LoyaltyStoreOffer>(\n 'getLoyaltyStoreOffers',\n corporationId,\n );\n }\n}\n","import { z } from 'zod';\nimport { EndpointMap } from './EndpointDefinition';\nimport {\n MailMessageSchema,\n MailLabelSchema,\n MailLabelsResponseSchema,\n MailingListSchema,\n} from '../../schemas/mail';\n\nexport const mailEndpoints = {\n getCharacterMailHeaders: {\n path: 'characters/{characterId}/mail/',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n responseSchema: z.array(MailMessageSchema),\n },\n sendMail: {\n path: 'characters/{characterId}/mail/',\n method: 'POST',\n requiresAuth: true,\n pathParams: ['characterId'],\n hasBody: true,\n requestSchema: z.looseObject({\n recipients: z.array(\n z.looseObject({\n recipient_id: z.number().int(),\n recipient_type: z.enum([\n 'alliance',\n 'character',\n 'corporation',\n 'mailing_list',\n ]),\n }),\n ),\n subject: z.string().min(1),\n body: z.string().min(1),\n }),\n },\n getMail: {\n path: 'characters/{characterId}/mail/{mailId}/',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId', 'mailId'],\n responseSchema: MailMessageSchema,\n },\n deleteMail: {\n path: 'characters/{characterId}/mail/{mailId}/',\n method: 'DELETE',\n requiresAuth: true,\n pathParams: ['characterId', 'mailId'],\n },\n updateMailMetadata: {\n path: 'characters/{characterId}/mail/{mailId}/',\n method: 'PUT',\n requiresAuth: true,\n pathParams: ['characterId', 'mailId'],\n hasBody: true,\n },\n getMailLabels: {\n path: 'characters/{characterId}/mail/labels/',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n responseSchema: MailLabelsResponseSchema,\n },\n createMailLabel: {\n path: 'characters/{characterId}/mail/labels/',\n method: 'POST',\n requiresAuth: true,\n pathParams: ['characterId'],\n hasBody: true,\n },\n deleteMailLabel: {\n path: 'characters/{characterId}/mail/labels/{labelId}/',\n method: 'DELETE',\n requiresAuth: true,\n pathParams: ['characterId', 'labelId'],\n },\n getMailingLists: {\n path: 'characters/{characterId}/mail/lists/',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n responseSchema: z.array(MailingListSchema),\n },\n} as const satisfies EndpointMap;\n","import { z } from 'zod';\nimport { esiEnum } from './esiEnum';\n\nexport const MailMessageSchema = z.looseObject({\n mail_id: z.number().optional(),\n subject: z.string().optional(),\n from: z.number().optional(),\n timestamp: z.string().optional(),\n labels: z.array(z.number()).optional(),\n is_read: z.boolean().optional(),\n body: z.string().optional(),\n recipients: z\n .array(\n z.looseObject({\n recipient_id: z.number(),\n recipient_type: esiEnum([\n 'alliance',\n 'character',\n 'corporation',\n 'mailing_list',\n ]),\n }),\n )\n .optional(),\n});\n\nexport const MailLabelSchema = z.looseObject({\n label_id: z.number(),\n name: z.string(),\n color: z.string().optional(),\n unread_count: z.number().optional(),\n});\n\nexport const MailLabelsResponseSchema = z.looseObject({\n labels: z.array(MailLabelSchema).optional(),\n total_unread_count: z.number().optional(),\n});\n\nexport const MailingListSchema = z.looseObject({\n mailing_list_id: z.number(),\n name: z.string(),\n});\n","import { ApiClient } from '../core/ApiClient';\nimport { BaseEsiClient } from './BaseEsiClient';\nimport { mailEndpoints } from '../core/endpoints/mailEndpoints';\nimport { MailMessage, MailLabel } from '../types/api-responses';\nimport { PageResult } from '../core/pagination/AsyncPaginationIterator';\n\nexport class MailClient extends BaseEsiClient<typeof mailEndpoints> {\n constructor(client: ApiClient) {\n super(client, mailEndpoints);\n }\n\n /**\n * Retrieves the mail headers (subject, sender, timestamp) for a character's inbox.\n *\n * @param characterId - The ID of the character whose mail headers to fetch\n * @returns A list of mail message headers\n * @requires Authentication\n */\n getMailHeaders(characterId: number): Promise<MailMessage[]> {\n return this.api.getCharacterMailHeaders(characterId);\n }\n\n /**\n * Sends a new mail on behalf of a character via POST.\n *\n * @param characterId - The ID of the character sending the mail\n * @param body - The mail content including recipients, subject, and body text\n * @returns The ID of the newly created mail\n * @requires Authentication\n */\n sendMail(characterId: number, body: object): Promise<number> {\n return this.api.sendMail(characterId, body) as Promise<number>;\n }\n\n /**\n * Deletes a specific mail from a character's mailbox.\n *\n * @param characterId - The ID of the character who owns the mail\n * @param mailId - The ID of the mail to delete\n * @returns void\n * @requires Authentication\n */\n deleteMail(characterId: number, mailId: number): Promise<void> {\n return this.api.deleteMail(characterId, mailId) as Promise<void>;\n }\n\n /**\n * Retrieves the full contents of a specific mail including its body text.\n *\n * @param characterId - The ID of the character who owns the mail\n * @param mailId - The ID of the mail to retrieve\n * @returns The full mail message including body, sender, and recipients\n * @requires Authentication\n */\n getMail(characterId: number, mailId: number): Promise<MailMessage> {\n return this.api.getMail(characterId, mailId);\n }\n\n /**\n * Updates the metadata of a mail, such as read status or labels, via PUT.\n *\n * @param characterId - The ID of the character who owns the mail\n * @param mailId - The ID of the mail to update\n * @param body - The metadata fields to update (e.g., labels, read status)\n * @returns void\n * @requires Authentication\n */\n updateMailMetadata(\n characterId: number,\n mailId: number,\n body: object,\n ): Promise<void> {\n return this.api.updateMailMetadata(\n characterId,\n mailId,\n body,\n ) as Promise<void>;\n }\n\n /**\n * Retrieves the mail labels and total unread count for a character.\n *\n * @param characterId - The ID of the character whose labels to fetch\n * @returns The character's mail labels and total unread mail count\n * @requires Authentication\n */\n getMailLabels(\n characterId: number,\n ): Promise<{ total_unread_count?: number; labels?: MailLabel[] }> {\n return this.api.getMailLabels(characterId);\n }\n\n /**\n * Creates a new custom mail label for a character via POST.\n *\n * @param characterId - The ID of the character to create the label for\n * @param body - The label definition including name and optional color\n * @returns The ID of the newly created label\n * @requires Authentication\n */\n createMailLabel(characterId: number, body: object): Promise<number> {\n return this.api.createMailLabel(characterId, body) as Promise<number>;\n }\n\n /**\n * Deletes a custom mail label from a character's mailbox.\n *\n * @param characterId - The ID of the character who owns the label\n * @param labelId - The ID of the label to delete\n * @returns void\n * @requires Authentication\n */\n deleteMailLabel(characterId: number, labelId: number): Promise<void> {\n return this.api.deleteMailLabel(characterId, labelId) as Promise<void>;\n }\n\n /**\n * Retrieves the mailing lists that a character is subscribed to.\n *\n * @param characterId - The ID of the character whose mailing lists to fetch\n * @returns A list of mailing lists with their IDs and names\n * @requires Authentication\n */\n getMailingLists(\n characterId: number,\n ): Promise<{ mailing_list_id: number; name: string }[]> {\n return this.api.getMailingLists(characterId);\n }\n\n streamMailHeaders(\n characterId: number,\n ): AsyncGenerator<PageResult<MailMessage>, void, undefined> {\n return this.streamEndpoint<MailMessage>(\n 'getCharacterMailHeaders',\n characterId,\n );\n }\n\n streamMailingLists(\n characterId: number,\n ): AsyncGenerator<\n PageResult<{ mailing_list_id: number; name: string }>,\n void,\n undefined\n > {\n return this.streamEndpoint<{ mailing_list_id: number; name: string }>(\n 'getMailingLists',\n characterId,\n );\n }\n}\n","import { z } from 'zod';\nimport { EndpointMap } from './EndpointDefinition';\nimport {\n MarketOrderSchema,\n CharacterMarketOrderSchema,\n CharacterMarketOrderHistorySchema,\n CorporationMarketOrderSchema,\n CorporationMarketOrderHistorySchema,\n StructureMarketOrderSchema,\n MarketHistorySchema,\n MarketGroupSchema,\n MarketPriceSchema,\n} from '../../schemas/market';\n\nexport const marketEndpoints = {\n getCharacterOrders: {\n path: 'characters/{characterId}/orders/',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n responseSchema: z.array(CharacterMarketOrderSchema),\n },\n getCharacterOrderHistory: {\n path: 'characters/{characterId}/orders/history/',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n responseSchema: z.array(CharacterMarketOrderHistorySchema),\n },\n getCorporationOrders: {\n path: 'corporations/{corporationId}/orders/',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId'],\n responseSchema: z.array(CorporationMarketOrderSchema),\n },\n getCorporationOrderHistory: {\n path: 'corporations/{corporationId}/orders/history/',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId'],\n responseSchema: z.array(CorporationMarketOrderHistorySchema),\n },\n getMarketGroups: {\n path: 'markets/groups/',\n method: 'GET',\n requiresAuth: false,\n responseSchema: z.array(z.number()),\n },\n getMarketGroupInformation: {\n path: 'markets/groups/{marketGroupId}/',\n method: 'GET',\n requiresAuth: false,\n pathParams: ['marketGroupId'],\n responseSchema: MarketGroupSchema,\n },\n getMarketPrices: {\n path: 'markets/prices/',\n method: 'GET',\n requiresAuth: false,\n responseSchema: z.array(MarketPriceSchema),\n },\n getMarketOrdersInStructure: {\n path: 'markets/structures/{structureId}/',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['structureId'],\n responseSchema: z.array(StructureMarketOrderSchema),\n },\n getMarketHistory: {\n path: 'markets/{regionId}/history/',\n method: 'GET',\n requiresAuth: false,\n pathParams: ['regionId'],\n queryParams: { typeId: 'type_id' },\n responseSchema: z.array(MarketHistorySchema),\n },\n getMarketOrders: {\n path: 'markets/{regionId}/orders/',\n method: 'GET',\n requiresAuth: false,\n pathParams: ['regionId'],\n queryParams: { orderType: 'order_type' },\n responseSchema: z.array(MarketOrderSchema),\n },\n getMarketTypes: {\n path: 'markets/{regionId}/types/',\n method: 'GET',\n requiresAuth: false,\n pathParams: ['regionId'],\n responseSchema: z.array(z.number()),\n },\n} as const satisfies EndpointMap;\n","import { z } from 'zod';\nimport { esiEnum } from './esiEnum';\n\n/** Region market order (`GET /markets/{region_id}/orders/`). */\nexport const MarketOrderSchema = z.looseObject({\n order_id: z.number(),\n type_id: z.number(),\n location_id: z.number(),\n volume_total: z.number(),\n volume_remain: z.number(),\n min_volume: z.number(),\n price: z.number(),\n is_buy_order: z.boolean(),\n system_id: z.number(),\n duration: z.number(),\n issued: z.string(),\n range: z.string(),\n});\n\n/** Character open order (`GET /characters/{character_id}/orders/`). */\nexport const CharacterMarketOrderSchema = z.looseObject({\n order_id: z.number(),\n type_id: z.number(),\n location_id: z.number(),\n volume_total: z.number(),\n volume_remain: z.number(),\n min_volume: z.number().optional(),\n price: z.number(),\n is_buy_order: z.boolean().optional(),\n is_corporation: z.boolean(),\n region_id: z.number(),\n duration: z.number(),\n issued: z.string(),\n range: z.string(),\n escrow: z.number().optional(),\n});\n\n/** Character order history (`GET /characters/{character_id}/orders/history/`). */\nexport const CharacterMarketOrderHistorySchema = z.looseObject({\n order_id: z.number(),\n type_id: z.number(),\n location_id: z.number(),\n volume_total: z.number(),\n volume_remain: z.number(),\n min_volume: z.number().optional(),\n price: z.number(),\n is_buy_order: z.boolean().optional(),\n is_corporation: z.boolean(),\n region_id: z.number(),\n duration: z.number(),\n issued: z.string(),\n range: z.string(),\n state: esiEnum(['cancelled', 'expired']),\n escrow: z.number().optional(),\n});\n\n/** Corporation open order (`GET /corporations/{corporation_id}/orders/`). */\nexport const CorporationMarketOrderSchema = z.looseObject({\n order_id: z.number(),\n type_id: z.number(),\n location_id: z.number(),\n volume_total: z.number(),\n volume_remain: z.number(),\n min_volume: z.number().optional(),\n price: z.number(),\n is_buy_order: z.boolean().optional(),\n issued_by: z.number(),\n region_id: z.number(),\n wallet_division: z.number(),\n duration: z.number(),\n issued: z.string(),\n range: z.string(),\n escrow: z.number().optional(),\n});\n\n/** Corporation order history (`GET /corporations/{corporation_id}/orders/history/`). */\nexport const CorporationMarketOrderHistorySchema = z.looseObject({\n order_id: z.number(),\n type_id: z.number(),\n location_id: z.number(),\n volume_total: z.number(),\n volume_remain: z.number(),\n min_volume: z.number().optional(),\n price: z.number(),\n is_buy_order: z.boolean().optional(),\n issued_by: z.number().optional(),\n region_id: z.number(),\n wallet_division: z.number(),\n duration: z.number(),\n issued: z.string(),\n range: z.string(),\n state: esiEnum(['cancelled', 'expired']),\n escrow: z.number().optional(),\n});\n\n/** Structure market order (`GET /markets/structures/{structure_id}/`). */\nexport const StructureMarketOrderSchema = z.looseObject({\n order_id: z.number(),\n type_id: z.number(),\n location_id: z.number(),\n volume_total: z.number(),\n volume_remain: z.number(),\n min_volume: z.number(),\n price: z.number(),\n is_buy_order: z.boolean(),\n duration: z.number(),\n issued: z.string(),\n range: z.string(),\n});\n\nexport const MarketHistorySchema = z.looseObject({\n date: z.string(),\n order_count: z.number(),\n volume: z.number(),\n highest: z.number(),\n average: z.number(),\n lowest: z.number(),\n});\n\nexport const MarketGroupSchema = z.looseObject({\n market_group_id: z.number(),\n name: z.string(),\n description: z.string(),\n types: z.array(z.number()),\n parent_group_id: z.number().optional(),\n});\n\nexport const MarketPriceSchema = z.looseObject({\n type_id: z.number(),\n average_price: z.number().optional(),\n adjusted_price: z.number().optional(),\n});\n","import { ApiClient } from '../core/ApiClient';\nimport { BaseEsiClient } from './BaseEsiClient';\nimport { marketEndpoints } from '../core/endpoints/marketEndpoints';\nimport {\n MarketOrder,\n CharacterMarketOrder,\n CharacterMarketOrderHistory,\n CorporationMarketOrder,\n CorporationMarketOrderHistory,\n StructureMarketOrder,\n MarketHistory,\n MarketGroup,\n MarketPrice,\n} from '../types/api-responses';\nimport { PageResult } from '../core/pagination/AsyncPaginationIterator';\n\nexport class MarketClient extends BaseEsiClient<typeof marketEndpoints> {\n constructor(client: ApiClient) {\n super(client, marketEndpoints);\n }\n\n /**\n * Retrieves all active market orders placed by a character.\n *\n * @param characterId - The ID of the character whose orders to fetch\n * @returns A list of the character's open market orders\n * @requires Authentication\n */\n getCharacterOrders(characterId: number): Promise<CharacterMarketOrder[]> {\n return this.api.getCharacterOrders(characterId);\n }\n\n /**\n * Retrieves the history of expired and cancelled market orders for a character.\n *\n * @param characterId - The ID of the character whose order history to fetch\n * @returns A list of the character's historical market orders\n * @requires Authentication\n */\n getCharacterOrderHistory(\n characterId: number,\n ): Promise<CharacterMarketOrderHistory[]> {\n return this.api.getCharacterOrderHistory(characterId);\n }\n\n /**\n * Retrieves all active market orders placed by members of a corporation.\n *\n * @param corporationId - The ID of the corporation whose orders to fetch\n * @returns A list of the corporation's open market orders\n * @requires Authentication\n */\n getCorporationOrders(\n corporationId: number,\n ): Promise<CorporationMarketOrder[]> {\n return this.api.getCorporationOrders(corporationId);\n }\n\n /**\n * Retrieves the history of expired and cancelled market orders for a corporation.\n *\n * @param corporationId - The ID of the corporation whose order history to fetch\n * @returns A list of the corporation's historical market orders\n * @requires Authentication\n */\n getCorporationOrderHistory(\n corporationId: number,\n ): Promise<CorporationMarketOrderHistory[]> {\n return this.api.getCorporationOrderHistory(corporationId);\n }\n\n /**\n * Retrieves the daily price and volume history for a specific item type in a region.\n *\n * @param regionId - The ID of the region to fetch market history for\n * @param typeId - The type ID of the item to get history for\n * @returns A list of daily market history entries with price and volume data\n */\n getMarketHistory(regionId: number, typeId: number): Promise<MarketHistory[]> {\n return this.api.getMarketHistory(regionId, typeId);\n }\n\n /**\n * Retrieves all active market orders in a region for all item types.\n *\n * @param regionId - The ID of the region to fetch orders for\n * @returns A list of all active market orders in the region\n */\n getMarketOrders(regionId: number): Promise<MarketOrder[]> {\n return this.api.getMarketOrders(regionId, 'all');\n }\n\n /**\n * Retrieves the list of type IDs that have active market orders in a region.\n *\n * @param regionId - The ID of the region to check for active types\n * @returns A list of type IDs with active orders in the region\n */\n getMarketTypes(regionId: number): Promise<number[]> {\n return this.api.getMarketTypes(regionId);\n }\n\n /**\n * Retrieves the list of all market group IDs used to categorize items on the market.\n *\n * @returns A list of all market group IDs\n */\n getMarketGroups(): Promise<number[]> {\n return this.api.getMarketGroups();\n }\n\n /**\n * Retrieves detailed information about a specific market group, including its name, description, and contained types.\n *\n * @param marketGroupId - The ID of the market group to look up\n * @returns The market group details including name, description, types, and optional parent group\n */\n getMarketGroupInformation(marketGroupId: number): Promise<MarketGroup> {\n return this.api.getMarketGroupInformation(marketGroupId);\n }\n\n /**\n * Retrieves the global average and adjusted prices for all tradeable item types.\n *\n * @returns A list of item types with their average and adjusted market prices\n */\n getMarketPrices(): Promise<MarketPrice[]> {\n return this.api.getMarketPrices();\n }\n\n /**\n * Retrieves all active market orders listed in a specific player-owned structure.\n *\n * @param structureId - The ID of the structure to fetch orders for\n * @returns A list of active market orders in the structure\n * @requires Authentication\n */\n getMarketOrdersInStructure(\n structureId: number,\n ): Promise<StructureMarketOrder[]> {\n return this.api.getMarketOrdersInStructure(structureId);\n }\n\n streamMarketOrders(\n regionId: number,\n ): AsyncGenerator<PageResult<MarketOrder>, void, undefined> {\n return this.streamEndpoint<MarketOrder>('getMarketOrders', regionId, 'all');\n }\n\n streamMarketTypes(\n regionId: number,\n ): AsyncGenerator<PageResult<number>, void, undefined> {\n return this.streamEndpoint<number>('getMarketTypes', regionId);\n }\n\n streamCharacterOrderHistory(\n characterId: number,\n ): AsyncGenerator<PageResult<CharacterMarketOrderHistory>, void, undefined> {\n return this.streamEndpoint<CharacterMarketOrderHistory>(\n 'getCharacterOrderHistory',\n characterId,\n );\n }\n\n streamCorporationOrders(\n corporationId: number,\n ): AsyncGenerator<PageResult<CorporationMarketOrder>, void, undefined> {\n return this.streamEndpoint<CorporationMarketOrder>(\n 'getCorporationOrders',\n corporationId,\n );\n }\n\n streamCorporationOrderHistory(\n corporationId: number,\n ): AsyncGenerator<\n PageResult<CorporationMarketOrderHistory>,\n void,\n undefined\n > {\n return this.streamEndpoint<CorporationMarketOrderHistory>(\n 'getCorporationOrderHistory',\n corporationId,\n );\n }\n\n streamMarketOrdersInStructure(\n structureId: number,\n ): AsyncGenerator<PageResult<StructureMarketOrder>, void, undefined> {\n return this.streamEndpoint<StructureMarketOrder>(\n 'getMarketOrdersInStructure',\n structureId,\n );\n }\n}\n","import { z } from 'zod';\nimport { EndpointMap } from './EndpointDefinition';\nimport {\n PlanetaryColonySchema,\n CustomsOfficeSchema,\n ColonyLayoutSchema,\n} from '../../schemas/pi';\nimport { SchematicInfoSchema } from '../../schemas/universe';\n\nexport const piEndpoints = {\n getColonies: {\n path: 'characters/{characterId}/planets',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n responseSchema: z.array(PlanetaryColonySchema),\n },\n getColonyLayout: {\n path: 'characters/{characterId}/planets/{planetId}',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId', 'planetId'],\n responseSchema: ColonyLayoutSchema,\n },\n getCorporationCustomsOffices: {\n path: 'corporations/{corporationId}/customs_offices',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId'],\n responseSchema: z.array(CustomsOfficeSchema),\n },\n getSchematicInformation: {\n path: 'universe/schematics/{schematicId}',\n method: 'GET',\n requiresAuth: false,\n pathParams: ['schematicId'],\n responseSchema: SchematicInfoSchema,\n },\n} as const satisfies EndpointMap;\n","import { z } from 'zod';\nimport { esiEnum } from './esiEnum';\n\nexport const PlanetaryColonySchema = z.looseObject({\n solar_system_id: z.number(),\n planet_id: z.number(),\n planet_type: esiEnum([\n 'temperate',\n 'barren',\n 'oceanic',\n 'ice',\n 'gas',\n 'lava',\n 'storm',\n 'plasma',\n ]),\n owner_id: z.number(),\n last_update: z.string(),\n upgrade_level: z.number(),\n num_pins: z.number(),\n});\n\nexport const CustomsOfficeSchema = z.looseObject({\n office_id: z.number(),\n system_id: z.number(),\n reinforce_exit_start: z.number(),\n reinforce_exit_end: z.number(),\n allow_access_with_standings: z.boolean().optional(),\n allow_alliance_access: z.boolean().optional(),\n alliance_tax_rate: z.number().optional(),\n corporation_tax_rate: z.number().optional(),\n standing_level: z.string().optional(),\n terrible_standing_tax_rate: z.number().optional(),\n bad_standing_tax_rate: z.number().optional(),\n neutral_standing_tax_rate: z.number().optional(),\n good_standing_tax_rate: z.number().optional(),\n excellent_standing_tax_rate: z.number().optional(),\n type_id: z.number().optional(),\n});\n\nexport const ColonyLayoutSchema = z.looseObject({\n links: z.array(\n z.looseObject({\n source_pin_id: z.number(),\n destination_pin_id: z.number(),\n link_level: z.number(),\n }),\n ),\n pins: z.array(\n z.looseObject({\n pin_id: z.number(),\n type_id: z.number(),\n latitude: z.number(),\n longitude: z.number(),\n schematic_id: z.number().optional(),\n extractor_details: z\n .looseObject({\n heads: z.array(\n z.looseObject({\n head_id: z.number(),\n latitude: z.number(),\n longitude: z.number(),\n }),\n ),\n product_type_id: z.number().optional(),\n cycle_time: z.number().optional(),\n head_radius: z.number().optional(),\n qty_per_cycle: z.number().optional(),\n })\n .optional(),\n factory_details: z\n .looseObject({\n schematic_id: z.number(),\n })\n .optional(),\n contents: z\n .array(\n z.looseObject({\n type_id: z.number(),\n amount: z.number(),\n }),\n )\n .optional(),\n install_time: z.string().optional(),\n expiry_time: z.string().optional(),\n last_cycle_start: z.string().optional(),\n }),\n ),\n routes: z.array(\n z.looseObject({\n route_id: z.number(),\n source_pin_id: z.number(),\n destination_pin_id: z.number(),\n content_type_id: z.number(),\n quantity: z.number(),\n waypoints: z.array(z.number()).optional(),\n }),\n ),\n});\n","import { z } from 'zod';\nimport { esiEnum } from './esiEnum';\n\nconst PositionSchema = z.looseObject({\n x: z.number(),\n y: z.number(),\n z: z.number(),\n});\n\nexport const SolarSystemInfoSchema = z.looseObject({\n system_id: z.number(),\n name: z.string(),\n constellation_id: z.number(),\n position: PositionSchema.optional(),\n security_class: z.string().optional(),\n security_status: z.number(),\n star_id: z.number().optional(),\n stargates: z.array(z.number()).optional(),\n stations: z.array(z.number()).optional(),\n planets: z\n .array(\n z.looseObject({\n asteroid_belts: z.array(z.number()).optional(),\n moons: z.array(z.number()).optional(),\n planet_id: z.number(),\n }),\n )\n .optional(),\n});\n\nexport const ConstellationInfoSchema = z.looseObject({\n constellation_id: z.number(),\n name: z.string(),\n region_id: z.number(),\n systems: z.array(z.number()),\n position: PositionSchema,\n});\n\nexport const RegionInfoSchema = z.looseObject({\n region_id: z.number(),\n name: z.string(),\n description: z.string().optional(),\n constellations: z.array(z.number()),\n});\n\nexport const AncestrySchema = z.looseObject({\n id: z.number(),\n name: z.string(),\n bloodline_id: z.number(),\n description: z.string(),\n short_description: z.string().optional(),\n icon_id: z.number().optional(),\n});\n\nexport const BloodlineSchema = z.looseObject({\n bloodline_id: z.number(),\n name: z.string(),\n description: z.string(),\n race_id: z.number(),\n corporation_id: z.number(),\n ship_type_id: z.number().nullable(),\n charisma: z.number(),\n intelligence: z.number(),\n memory: z.number(),\n perception: z.number(),\n willpower: z.number(),\n});\n\nexport const FactionSchema = z.looseObject({\n faction_id: z.number(),\n name: z.string(),\n description: z.string(),\n size_factor: z.number(),\n station_count: z.number(),\n station_system_count: z.number(),\n is_unique: z.boolean(),\n solar_system_id: z.number().optional(),\n corporation_id: z.number().optional(),\n militia_corporation_id: z.number().optional(),\n});\n\nexport const RaceSchema = z.looseObject({\n race_id: z.number(),\n name: z.string(),\n description: z.string(),\n alliance_id: z.number(),\n});\n\nexport const StationInfoSchema = z.looseObject({\n station_id: z.number(),\n name: z.string(),\n owner: z.number().optional(),\n system_id: z.number(),\n type_id: z.number(),\n race_id: z.number().optional(),\n reprocessing_efficiency: z.number(),\n reprocessing_stations_take: z.number(),\n max_dockable_ship_volume: z.number(),\n office_rental_cost: z.number(),\n services: z.array(z.string()),\n position: PositionSchema,\n});\n\nexport const TypeInfoSchema = z.looseObject({\n type_id: z.number(),\n name: z.string(),\n description: z.string(),\n published: z.boolean(),\n group_id: z.number(),\n market_group_id: z.number().optional(),\n radius: z.number().optional(),\n volume: z.number().optional(),\n packaged_volume: z.number().optional(),\n capacity: z.number().optional(),\n portion_size: z.number().optional(),\n mass: z.number().optional(),\n icon_id: z.number().optional(),\n graphic_id: z.number().optional(),\n dogma_attributes: z\n .array(\n z.looseObject({\n attribute_id: z.number(),\n value: z.number(),\n }),\n )\n .optional(),\n dogma_effects: z\n .array(\n z.looseObject({\n effect_id: z.number(),\n is_default: z.boolean(),\n }),\n )\n .optional(),\n});\n\nexport const AsteroidBeltInfoSchema = z.looseObject({\n name: z.string(),\n position: PositionSchema,\n system_id: z.number(),\n});\n\nexport const GraphicInfoSchema = z.looseObject({\n graphic_id: z.number(),\n collision_file: z.string().optional(),\n graphic_file: z.string().optional(),\n icon_folder: z.string().optional(),\n sof_dna: z.string().optional(),\n sof_fation_name: z.string().optional(),\n sof_hull_name: z.string().optional(),\n sof_race_name: z.string().optional(),\n});\n\nexport const ItemCategorySchema = z.looseObject({\n category_id: z.number(),\n name: z.string(),\n groups: z.array(z.number()),\n published: z.boolean(),\n});\n\nexport const ItemGroupSchema = z.looseObject({\n group_id: z.number(),\n name: z.string(),\n category_id: z.number(),\n types: z.array(z.number()),\n published: z.boolean(),\n});\n\nexport const MoonInfoSchema = z.looseObject({\n moon_id: z.number(),\n name: z.string(),\n system_id: z.number(),\n position: PositionSchema,\n});\n\nexport const PlanetInfoSchema = z.looseObject({\n planet_id: z.number(),\n name: z.string(),\n system_id: z.number(),\n type_id: z.number(),\n position: PositionSchema,\n});\n\nexport const StarInfoSchema = z.looseObject({\n star_id: z.number().optional(),\n solar_system_id: z.number(),\n name: z.string(),\n type_id: z.number(),\n age: z.number(),\n luminosity: z.number(),\n radius: z.number(),\n spectral_class: z.string(),\n temperature: z.number(),\n});\n\nexport const StargateInfoSchema = z.looseObject({\n stargate_id: z.number(),\n name: z.string(),\n system_id: z.number(),\n type_id: z.number(),\n position: PositionSchema,\n destination: z.looseObject({\n system_id: z.number(),\n stargate_id: z.number(),\n }),\n});\n\nexport const StructureInfoSchema = z.looseObject({\n structure_id: z.number().optional(),\n name: z.string(),\n owner_id: z.number(),\n solar_system_id: z.number(),\n type_id: z.number().optional(),\n position: PositionSchema.optional(),\n});\n\nexport const SystemJumpSchema = z.looseObject({\n system_id: z.number(),\n ship_jumps: z.number(),\n});\n\nexport const SystemKillSchema = z.looseObject({\n system_id: z.number(),\n npc_kills: z.number(),\n pod_kills: z.number(),\n ship_kills: z.number(),\n});\n\nconst IdNameSchema = z.looseObject({\n id: z.number(),\n name: z.string(),\n});\n\nexport const BulkIdResultSchema = z.looseObject({\n agents: z.array(IdNameSchema).optional(),\n alliances: z.array(IdNameSchema).optional(),\n characters: z.array(IdNameSchema).optional(),\n constellations: z.array(IdNameSchema).optional(),\n corporations: z.array(IdNameSchema).optional(),\n factions: z.array(IdNameSchema).optional(),\n inventory_types: z.array(IdNameSchema).optional(),\n regions: z.array(IdNameSchema).optional(),\n systems: z.array(IdNameSchema).optional(),\n stations: z.array(IdNameSchema).optional(),\n});\n\nexport const NameAndCategorySchema = z.looseObject({\n id: z.number(),\n name: z.string(),\n category: esiEnum([\n 'alliance',\n 'character',\n 'constellation',\n 'corporation',\n 'inventory_type',\n 'region',\n 'solar_system',\n 'station',\n 'faction',\n ]),\n});\n\nexport const SchematicInfoSchema = z.looseObject({\n schematic_name: z.string(),\n cycle_time: z.number(),\n});\n\nexport const SearchResultSchema = z.looseObject({\n agent: z.array(z.number()).optional(),\n alliance: z.array(z.number()).optional(),\n character: z.array(z.number()).optional(),\n constellation: z.array(z.number()).optional(),\n corporation: z.array(z.number()).optional(),\n faction: z.array(z.number()).optional(),\n inventory_type: z.array(z.number()).optional(),\n region: z.array(z.number()).optional(),\n solar_system: z.array(z.number()).optional(),\n station: z.array(z.number()).optional(),\n structure: z.array(z.number()).optional(),\n});\n","import { ApiClient } from '../core/ApiClient';\nimport { BaseEsiClient } from './BaseEsiClient';\nimport { piEndpoints } from '../core/endpoints/piEndpoints';\nimport {\n PlanetaryColony,\n CustomsOffice,\n ColonyLayout,\n SchematicInfo,\n} from '../types/api-responses';\nimport { PageResult } from '../core/pagination/AsyncPaginationIterator';\n\nexport class PiClient extends BaseEsiClient<typeof piEndpoints> {\n constructor(client: ApiClient) {\n super(client, piEndpoints);\n }\n\n /**\n * Retrieves the list of planetary interaction colonies owned by a character.\n *\n * @param characterId - The ID of the character whose colonies to fetch\n * @returns A list of the character's planetary colonies\n * @requires Authentication\n */\n getColonies(characterId: number): Promise<PlanetaryColony[]> {\n return this.api.getColonies(characterId);\n }\n\n /**\n * Retrieves the full layout of a planetary colony including pins, links, and routes.\n *\n * @param characterId - The ID of the character who owns the colony\n * @param planetId - The ID of the planet to get the colony layout for\n * @returns The colony layout with pins, links, and routes\n * @requires Authentication\n */\n getColonyLayout(\n characterId: number,\n planetId: number,\n ): Promise<ColonyLayout> {\n return this.api.getColonyLayout(characterId, planetId);\n }\n\n /**\n * Retrieves the list of customs offices owned by a corporation.\n *\n * @param corporationId - The ID of the corporation whose customs offices to fetch\n * @returns A list of the corporation's customs offices with their settings\n * @requires Authentication\n */\n getCorporationCustomsOffices(\n corporationId: number,\n ): Promise<CustomsOffice[]> {\n return this.api.getCorporationCustomsOffices(corporationId);\n }\n\n /**\n * Retrieves information about a planetary interaction schematic, including its inputs and outputs.\n *\n * @param schematicId - The ID of the schematic to look up\n * @returns The schematic details including cycle time, inputs, and outputs\n */\n getSchematicInformation(schematicId: number): Promise<SchematicInfo> {\n return this.api.getSchematicInformation(schematicId);\n }\n\n streamColonies(\n characterId: number,\n ): AsyncGenerator<PageResult<PlanetaryColony>, void, undefined> {\n return this.streamEndpoint<PlanetaryColony>('getColonies', characterId);\n }\n\n streamCorporationCustomsOffices(\n corporationId: number,\n ): AsyncGenerator<PageResult<CustomsOffice>, void, undefined> {\n return this.streamEndpoint<CustomsOffice>(\n 'getCorporationCustomsOffices',\n corporationId,\n );\n }\n}\n","import { z } from 'zod';\nimport { EndpointMap } from './EndpointDefinition';\n\nexport const routeEndpoints = {\n getRoute: {\n path: 'route/{origin}/{destination}',\n method: 'POST',\n requiresAuth: false,\n pathParams: ['origin', 'destination'],\n hasBody: true,\n responseSchema: z.looseObject({ route: z.array(z.number()) }),\n },\n} as const satisfies EndpointMap;\n","import { ApiClient } from '../core/ApiClient';\nimport { BaseEsiClient } from './BaseEsiClient';\nimport { routeEndpoints } from '../core/endpoints/routeEndpoints';\n\nexport interface RouteOptions {\n preference?: 'Shorter' | 'Safer' | 'LessSecure';\n avoid_systems?: number[];\n connections?: { from: number; to: number }[];\n security_penalty?: number;\n}\n\nexport class RouteClient extends BaseEsiClient<typeof routeEndpoints> {\n constructor(client: ApiClient) {\n super(client, routeEndpoints);\n }\n\n /**\n * Calculates a route between two solar systems, returning the list of system IDs along the path via POST.\n *\n * @param origin - The solar system ID to start the route from\n * @param destination - The solar system ID to route to\n * @param options - Optional routing preferences such as route type, avoided systems, and custom connections\n * @returns An ordered list of solar system IDs representing the route\n */\n async getRoute(\n origin: number,\n destination: number,\n options?: RouteOptions,\n ): Promise<number[]> {\n const body = options ?? {};\n const result = (await this.api.getRoute(origin, destination, body)) as {\n route: number[];\n };\n return result.route;\n }\n}\n","import { EndpointMap } from './EndpointDefinition';\nimport { SearchResultSchema } from '../../schemas/universe';\n\nexport const searchEndpoints = {\n searchCharacter: {\n path: 'characters/{characterId}/search/',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n queryParams: { searchString: 'search', categories: 'categories' },\n responseSchema: SearchResultSchema,\n },\n} as const satisfies EndpointMap;\n","import { ApiClient } from '../core/ApiClient';\nimport { BaseEsiClient } from './BaseEsiClient';\nimport { searchEndpoints } from '../core/endpoints/searchEndpoints';\nimport { SearchResult } from '../types/api-responses';\n\nexport class SearchClient extends BaseEsiClient<typeof searchEndpoints> {\n constructor(client: ApiClient) {\n super(client, searchEndpoints);\n }\n\n /**\n * Searches for entities matching a query string on behalf of a character.\n *\n * @param characterId - The ID of the character performing the search\n * @param searchString - The search query string to match against\n * @returns Search results grouped by entity category\n * @requires Authentication\n */\n characterSearch(\n characterId: number,\n searchString: string,\n categories: string[],\n ): Promise<SearchResult> {\n return this.api.searchCharacter(\n characterId,\n searchString,\n categories.join(','),\n ) as Promise<SearchResult>;\n }\n}\n","import { z } from 'zod';\nimport { EndpointMap } from './EndpointDefinition';\nimport {\n SkillQueueSchema,\n CharacterSkillsResponseSchema,\n} from '../../schemas/skills';\nimport { CharacterAttributesSchema } from '../../schemas/character';\n\nexport const skillEndpoints = {\n getCharacterAttributes: {\n path: 'characters/{characterId}/attributes',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n responseSchema: CharacterAttributesSchema,\n },\n getCharacterSkillQueue: {\n path: 'characters/{characterId}/skillqueue',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n responseSchema: z.array(SkillQueueSchema),\n },\n getCharacterSkills: {\n path: 'characters/{characterId}/skills',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n responseSchema: CharacterSkillsResponseSchema,\n },\n} as const satisfies EndpointMap;\n","import { z } from 'zod';\n\nexport const CharacterSkillSchema = z.looseObject({\n skill_id: z.number(),\n skillpoints_in_skill: z.number(),\n trained_skill_level: z.number(),\n active_skill_level: z.number(),\n});\n\nexport const CharacterSkillsResponseSchema = z.looseObject({\n skills: z.array(\n z.looseObject({\n skill_id: z.number(),\n skillpoints_in_skill: z.number(),\n trained_skill_level: z.number(),\n active_skill_level: z.number(),\n }),\n ),\n total_sp: z.number(),\n unallocated_sp: z.number().optional(),\n});\n\nexport const SkillQueueSchema = z.looseObject({\n skill_id: z.number(),\n finished_level: z.number(),\n queue_position: z.number(),\n level_end_sp: z.number().optional(),\n level_start_sp: z.number().optional(),\n training_start_sp: z.number().optional(),\n start_date: z.string().optional(),\n finish_date: z.string().optional(),\n});\n","import { ApiClient } from '../core/ApiClient';\nimport { BaseEsiClient } from './BaseEsiClient';\nimport { skillEndpoints } from '../core/endpoints/skillEndpoints';\nimport {\n CharacterAttributes,\n CharacterSkill,\n SkillQueue,\n} from '../types/api-responses';\nimport { PageResult } from '../core/pagination/AsyncPaginationIterator';\n\nexport class CharacterSkillsClient extends BaseEsiClient<\n typeof skillEndpoints\n> {\n constructor(client: ApiClient) {\n super(client, skillEndpoints);\n }\n\n /**\n * Retrieves a character's neural remap attribute values (intelligence, memory, charisma, perception, willpower).\n *\n * @param characterId - The ID of the character\n * @returns The character's current attribute values and bonus remap information\n * @requires Authentication\n */\n getCharacterAttributes(characterId: number): Promise<CharacterAttributes> {\n return this.api.getCharacterAttributes(characterId);\n }\n\n /**\n * Retrieves the skill training queue for a character.\n *\n * @param characterId - The ID of the character\n * @returns An ordered list of skills currently in the character's training queue\n * @requires Authentication\n */\n getCharacterSkillQueue(characterId: number): Promise<SkillQueue[]> {\n return this.api.getCharacterSkillQueue(characterId);\n }\n\n /**\n * Retrieves all trained skills for a character, including total and unallocated skill points.\n *\n * @param characterId - The ID of the character\n * @returns The character's trained skills, total SP, and optionally unallocated SP\n * @requires Authentication\n */\n getCharacterSkills(characterId: number): Promise<{\n skills: CharacterSkill[];\n total_sp: number;\n unallocated_sp?: number;\n }> {\n return this.api.getCharacterSkills(characterId);\n }\n\n streamCharacterSkillQueue(\n characterId: number,\n ): AsyncGenerator<PageResult<SkillQueue>, void, undefined> {\n return this.streamEndpoint<SkillQueue>(\n 'getCharacterSkillQueue',\n characterId,\n );\n }\n}\n","import { z } from 'zod';\nimport { EndpointMap } from './EndpointDefinition';\nimport {\n SovereigntyCampaignSchema,\n SovereigntySystemSchema,\n} from '../../schemas/sovereignty';\n\nexport const sovereigntyEndpoints = {\n getSovereigntyCampaigns: {\n path: 'sovereignty/campaigns',\n method: 'GET',\n requiresAuth: false,\n responseSchema: z.array(SovereigntyCampaignSchema),\n },\n getSovereigntySystems: {\n path: 'sovereignty/systems',\n method: 'GET',\n requiresAuth: false,\n responseSchema: SovereigntySystemSchema,\n },\n} as const satisfies EndpointMap;\n","import { z } from 'zod';\nimport { esiEnum } from './esiEnum';\n\nexport const SovereigntyCampaignSchema = z.looseObject({\n campaign_id: z.number(),\n structure_id: z.number(),\n solar_system_id: z.number(),\n constellation_id: z.number(),\n event_type: esiEnum([\n 'tcu_defense',\n 'ihub_defense',\n 'station_defense',\n 'station_freeport',\n ]),\n start_time: z.string(),\n defender_id: z.number().optional(),\n defender_score: z.number().optional(),\n attackers_score: z.number().optional(),\n participants: z\n .array(\n z.looseObject({\n alliance_id: z.number(),\n score: z.number(),\n }),\n )\n .optional(),\n});\n\nexport const SovereigntySystemStructureSchema = z.looseObject({\n alliance_id: z.number().optional(),\n solar_system_id: z.number().optional(),\n structure_id: z.number(),\n structure_type_id: z.number(),\n vulnerability_occupancy_level: z.number().optional(),\n vulnerable_start_time: z.string().optional(),\n vulnerable_end_time: z.string().optional(),\n});\n\nconst SovereigntyVulnerabilityWindowSchema = z.looseObject({\n start: z.string(),\n end: z.string(),\n});\n\nconst SovereigntyHubSchema = z.looseObject({\n id: z.number(),\n vulnerability_window: SovereigntyVulnerabilityWindowSchema.optional(),\n});\n\nconst SovereigntyDevelopmentSchema = z.looseObject({\n activity_defense_multiplier: z.number().optional(),\n military_level: z.number().optional(),\n industrial_level: z.number().optional(),\n strategic_level: z.number().optional(),\n});\n\nconst SovereigntyAllianceClaimSchema = z.looseObject({\n alliance_id: z.number(),\n corporation_id: z.number().optional(),\n claimed_since: z.string().optional(),\n sovereignty_hub: SovereigntyHubSchema.optional(),\n is_capital_system: z.boolean().optional(),\n development: SovereigntyDevelopmentSchema.optional(),\n});\n\nconst SovereigntyFactionClaimSchema = z.looseObject({\n faction_id: z.number(),\n});\n\nconst SovereigntyClaimSchema = z.looseObject({\n alliance: SovereigntyAllianceClaimSchema.optional(),\n faction: SovereigntyFactionClaimSchema.optional(),\n unclaimed: z.boolean().optional(),\n});\n\nconst SovereigntySystemEntrySchema = z.looseObject({\n solar_system_id: z.number(),\n claim: SovereigntyClaimSchema,\n});\n\nexport const SovereigntySystemSchema = z.looseObject({\n solar_systems: z.array(SovereigntySystemEntrySchema),\n});\n","import { ApiClient } from '../core/ApiClient';\nimport { BaseEsiClient } from './BaseEsiClient';\nimport { sovereigntyEndpoints } from '../core/endpoints/sovereigntyEndpoints';\nimport { SovereigntyCampaign, SovereigntySystem } from '../types/api-responses';\n\nexport class SovereigntyClient extends BaseEsiClient<\n typeof sovereigntyEndpoints\n> {\n constructor(client: ApiClient) {\n super(client, sovereigntyEndpoints);\n }\n\n /**\n * Retrieves all active sovereignty campaigns, including command node contests and station freeports.\n *\n * @returns A list of active sovereignty campaigns\n */\n getSovereigntyCampaigns(): Promise<SovereigntyCampaign[]> {\n return this.api.getSovereigntyCampaigns() as Promise<SovereigntyCampaign[]>;\n }\n\n /**\n * Retrieves the combined sovereignty systems data including occupancy, structures, and separate ADM indices (military, industry, strategic).\n *\n * @returns A list of sovereignty systems with ownership, ADM indices, and anchored structures\n */\n getSovereigntySystems(): Promise<SovereigntySystem> {\n return this.api.getSovereigntySystems() as Promise<SovereigntySystem>;\n }\n}\n","import { z } from 'zod';\n\nexport const ServerStatusSchema = z.looseObject({\n players: z.number(),\n server_version: z.string(),\n start_time: z.string(),\n vip: z.boolean().optional(),\n});\n","import { EndpointMap } from './EndpointDefinition';\nimport { ServerStatusSchema } from '../../schemas/status';\n\nexport const statusEndpoints = {\n getStatus: {\n path: 'status',\n method: 'GET',\n requiresAuth: false,\n responseSchema: ServerStatusSchema,\n },\n} as const satisfies EndpointMap;\n","import { ApiClient } from '../core/ApiClient';\nimport { BaseEsiClient } from './BaseEsiClient';\nimport { statusEndpoints } from '../core/endpoints/statusEndpoints';\nimport { ServerStatus } from '../types/api-responses';\n\nexport class StatusClient extends BaseEsiClient<typeof statusEndpoints> {\n constructor(client: ApiClient) {\n super(client, statusEndpoints);\n }\n\n /**\n * Retrieves the current Tranquility server status, including player count and server version.\n *\n * @returns The current server status information\n */\n getStatus(): Promise<ServerStatus> {\n return this.api.getStatus() as Promise<ServerStatus>;\n }\n}\n","import { EndpointMap } from './EndpointDefinition';\n\nexport const uiEndpoints = {\n setAutopilotWaypoint: {\n path: 'ui/autopilot/waypoint',\n method: 'POST',\n requiresAuth: true,\n queryParams: {\n destinationId: 'destination_id',\n addToBeginning: 'add_to_beginning',\n clearOtherWaypoints: 'clear_other_waypoints',\n },\n },\n openContractWindow: {\n path: 'ui/openwindow/contract',\n method: 'POST',\n requiresAuth: true,\n queryParams: { contractId: 'contract_id' },\n },\n openInformationWindow: {\n path: 'ui/openwindow/information',\n method: 'POST',\n requiresAuth: true,\n queryParams: { targetId: 'target_id' },\n },\n openMarketDetailsWindow: {\n path: 'ui/openwindow/marketdetails',\n method: 'POST',\n requiresAuth: true,\n queryParams: { typeId: 'type_id' },\n },\n openNewMailWindow: {\n path: 'ui/openwindow/newmail',\n method: 'POST',\n requiresAuth: true,\n hasBody: true,\n },\n} as const satisfies EndpointMap;\n","import { ApiClient } from '../core/ApiClient';\nimport { BaseEsiClient } from './BaseEsiClient';\nimport { uiEndpoints } from '../core/endpoints/uiEndpoints';\n\nexport class UiClient extends BaseEsiClient<typeof uiEndpoints> {\n constructor(client: ApiClient) {\n super(client, uiEndpoints);\n }\n\n /**\n * Sets a solar system as an autopilot waypoint in the EVE client.\n *\n * @param destinationId - The solar system, station, or structure ID to set as waypoint\n * @param addToBeginning - Whether to add the waypoint to the beginning of the route\n * @param clearOtherWaypoints - Whether to clear existing waypoints first\n * @requires Authentication\n */\n setAutopilotWaypoint(\n destinationId: number,\n addToBeginning: boolean,\n clearOtherWaypoints: boolean,\n ): Promise<void> {\n return this.api.setAutopilotWaypoint(\n destinationId,\n addToBeginning,\n clearOtherWaypoints,\n ) as Promise<void>;\n }\n\n /**\n * Opens the contract window for a specific contract in the EVE client.\n *\n * @param contractId - The contract ID to display\n * @requires Authentication\n */\n openContractWindow(contractId: number): Promise<void> {\n return this.api.openContractWindow(contractId) as Promise<void>;\n }\n\n /**\n * Opens the information window for a specific entity in the EVE client.\n *\n * @param targetId - The character, corporation, alliance, or type ID to display\n * @requires Authentication\n */\n openInformationWindow(targetId: number): Promise<void> {\n return this.api.openInformationWindow(targetId) as Promise<void>;\n }\n\n /**\n * Opens the market details window for a specific type in the EVE client.\n *\n * @param typeId - The inventory type ID to display market details for\n * @requires Authentication\n */\n openMarketDetailsWindow(typeId: number): Promise<void> {\n return this.api.openMarketDetailsWindow(typeId) as Promise<void>;\n }\n\n /**\n * Opens the new mail composition window in the EVE client with pre-filled fields.\n *\n * @param body - The mail details including recipients (integer array), subject, and body text\n * @requires Authentication\n */\n openNewMailWindow(body: object): Promise<void> {\n return this.api.openNewMailWindow(body) as Promise<void>;\n }\n}\n","import { z } from 'zod';\nimport { EndpointMap } from './EndpointDefinition';\nimport {\n AncestrySchema,\n AsteroidBeltInfoSchema,\n BloodlineSchema,\n BulkIdResultSchema,\n ConstellationInfoSchema,\n FactionSchema,\n GraphicInfoSchema,\n ItemCategorySchema,\n ItemGroupSchema,\n MoonInfoSchema,\n NameAndCategorySchema,\n PlanetInfoSchema,\n RaceSchema,\n RegionInfoSchema,\n SchematicInfoSchema,\n SolarSystemInfoSchema,\n StarInfoSchema,\n StargateInfoSchema,\n StationInfoSchema,\n StructureInfoSchema,\n SystemJumpSchema,\n SystemKillSchema,\n TypeInfoSchema,\n} from '../../schemas/universe';\n\nexport const universeEndpoints = {\n getAncestries: {\n path: 'universe/ancestries',\n method: 'GET',\n requiresAuth: false,\n responseSchema: z.array(AncestrySchema),\n },\n getAsteroidBeltInfo: {\n path: 'universe/asteroid_belts/{asteroidBeltId}',\n method: 'GET',\n requiresAuth: false,\n pathParams: ['asteroidBeltId'],\n responseSchema: AsteroidBeltInfoSchema,\n },\n getBloodlines: {\n path: 'universe/bloodlines',\n method: 'GET',\n requiresAuth: false,\n responseSchema: z.array(BloodlineSchema),\n },\n getCategories: {\n path: 'universe/categories',\n method: 'GET',\n requiresAuth: false,\n responseSchema: z.array(z.number()),\n },\n getCategoryById: {\n path: 'universe/categories/{categoryId}',\n method: 'GET',\n requiresAuth: false,\n pathParams: ['categoryId'],\n responseSchema: ItemCategorySchema,\n },\n getConstellations: {\n path: 'universe/constellations',\n method: 'GET',\n requiresAuth: false,\n responseSchema: z.array(z.number()),\n },\n getConstellationById: {\n path: 'universe/constellations/{constellationId}',\n method: 'GET',\n requiresAuth: false,\n pathParams: ['constellationId'],\n responseSchema: ConstellationInfoSchema,\n },\n getFactions: {\n path: 'universe/factions',\n method: 'GET',\n requiresAuth: false,\n responseSchema: z.array(FactionSchema),\n },\n getGraphics: {\n path: 'universe/graphics',\n method: 'GET',\n requiresAuth: false,\n responseSchema: z.array(z.number()),\n },\n getGraphicById: {\n path: 'universe/graphics/{graphicId}',\n method: 'GET',\n requiresAuth: false,\n pathParams: ['graphicId'],\n responseSchema: GraphicInfoSchema,\n },\n getItemGroups: {\n path: 'universe/groups',\n method: 'GET',\n requiresAuth: false,\n responseSchema: z.array(z.number()),\n },\n getItemGroupById: {\n path: 'universe/groups/{groupId}',\n method: 'GET',\n requiresAuth: false,\n pathParams: ['groupId'],\n responseSchema: ItemGroupSchema,\n },\n postBulkNamesToIds: {\n path: 'universe/ids',\n method: 'POST',\n requiresAuth: false,\n bodyBuilder: (names: string[]) => names,\n responseSchema: BulkIdResultSchema,\n requestSchema: z.array(z.string().min(1)),\n },\n getMoonById: {\n path: 'universe/moons/{moonId}',\n method: 'GET',\n requiresAuth: false,\n pathParams: ['moonId'],\n responseSchema: MoonInfoSchema,\n },\n postNamesAndCategories: {\n path: 'universe/names',\n method: 'POST',\n requiresAuth: false,\n bodyBuilder: (ids: number[]) => ids,\n responseSchema: z.array(NameAndCategorySchema),\n requestSchema: z.array(z.number().int()),\n },\n getPlanetById: {\n path: 'universe/planets/{planetId}',\n method: 'GET',\n requiresAuth: false,\n pathParams: ['planetId'],\n responseSchema: PlanetInfoSchema,\n },\n getRaces: {\n path: 'universe/races',\n method: 'GET',\n requiresAuth: false,\n responseSchema: z.array(RaceSchema),\n },\n getRegions: {\n path: 'universe/regions',\n method: 'GET',\n requiresAuth: false,\n responseSchema: z.array(z.number()),\n },\n getRegionById: {\n path: 'universe/regions/{regionId}',\n method: 'GET',\n requiresAuth: false,\n pathParams: ['regionId'],\n responseSchema: RegionInfoSchema,\n },\n getSchematicById: {\n path: 'universe/schematics/{schematicId}',\n method: 'GET',\n requiresAuth: false,\n pathParams: ['schematicId'],\n responseSchema: SchematicInfoSchema,\n },\n getStargateById: {\n path: 'universe/stargates/{stargateId}',\n method: 'GET',\n requiresAuth: false,\n pathParams: ['stargateId'],\n responseSchema: StargateInfoSchema,\n },\n getStarById: {\n path: 'universe/stars/{starId}',\n method: 'GET',\n requiresAuth: false,\n pathParams: ['starId'],\n responseSchema: StarInfoSchema,\n },\n getStationById: {\n path: 'universe/stations/{stationId}',\n method: 'GET',\n requiresAuth: false,\n pathParams: ['stationId'],\n responseSchema: StationInfoSchema,\n },\n getStructures: {\n path: 'universe/structures',\n method: 'GET',\n requiresAuth: false,\n responseSchema: z.array(z.number()),\n },\n getStructureById: {\n path: 'universe/structures/{structureId}',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['structureId'],\n responseSchema: StructureInfoSchema,\n },\n getSystemJumps: {\n path: 'universe/system_jumps',\n method: 'GET',\n requiresAuth: false,\n responseSchema: z.array(SystemJumpSchema),\n },\n getSystemKills: {\n path: 'universe/system_kills',\n method: 'GET',\n requiresAuth: false,\n responseSchema: z.array(SystemKillSchema),\n },\n getSystems: {\n path: 'universe/systems',\n method: 'GET',\n requiresAuth: false,\n responseSchema: z.array(z.number()),\n },\n getSystemById: {\n path: 'universe/systems/{systemId}',\n method: 'GET',\n requiresAuth: false,\n pathParams: ['systemId'],\n responseSchema: SolarSystemInfoSchema,\n },\n getTypes: {\n path: 'universe/types',\n method: 'GET',\n requiresAuth: false,\n responseSchema: z.array(z.number()),\n },\n getTypeById: {\n path: 'universe/types/{typeId}',\n method: 'GET',\n requiresAuth: false,\n pathParams: ['typeId'],\n responseSchema: TypeInfoSchema,\n },\n} as const satisfies EndpointMap;\n","import { ApiClient } from '../core/ApiClient';\nimport { BaseEsiClient } from './BaseEsiClient';\nimport { universeEndpoints } from '../core/endpoints/universeEndpoints';\nimport {\n Ancestry,\n AsteroidBeltInfo,\n Bloodline,\n BulkIdResult,\n ConstellationInfo,\n Faction,\n GraphicInfo,\n ItemCategory,\n ItemGroup,\n MoonInfo,\n NameAndCategory,\n PlanetInfo,\n Race,\n RegionInfo,\n SchematicInfo,\n SolarSystemInfo,\n StarInfo,\n StargateInfo,\n StationInfo,\n StructureInfo,\n SystemJump,\n SystemKill,\n TypeInfo,\n} from '../types/api-responses';\n\nexport class UniverseClient extends BaseEsiClient<typeof universeEndpoints> {\n constructor(client: ApiClient) {\n super(client, universeEndpoints);\n }\n\n /**\n * Retrieves all available character ancestries for character creation.\n *\n * @returns A list of character ancestries\n */\n getAncestries(): Promise<Ancestry[]> {\n return this.api.getAncestries() as Promise<Ancestry[]>;\n }\n\n /**\n * Retrieves information about an asteroid belt, including its position in space.\n *\n * @param asteroidBeltId - The ID of the asteroid belt\n * @returns Details about the asteroid belt\n */\n getAsteroidBeltInfo(asteroidBeltId: number): Promise<AsteroidBeltInfo> {\n return this.api.getAsteroidBeltInfo(\n asteroidBeltId,\n ) as Promise<AsteroidBeltInfo>;\n }\n\n /**\n * Retrieves all available character bloodlines for character creation.\n *\n * @returns A list of character bloodlines\n */\n getBloodlines(): Promise<Bloodline[]> {\n return this.api.getBloodlines() as Promise<Bloodline[]>;\n }\n\n /**\n * Retrieves information about a constellation, including its systems and position.\n *\n * @param constellationId - The ID of the constellation\n * @returns Detailed constellation information\n */\n getConstellationById(constellationId: number): Promise<ConstellationInfo> {\n return this.api.getConstellationById(\n constellationId,\n ) as Promise<ConstellationInfo>;\n }\n\n /**\n * Retrieves a list of all constellation IDs in the EVE universe.\n *\n * @returns A list of constellation IDs\n */\n getConstellations(): Promise<number[]> {\n return this.api.getConstellations() as Promise<number[]>;\n }\n\n /**\n * Retrieves all NPC factions in the EVE universe.\n *\n * @returns A list of NPC factions\n */\n getFactions(): Promise<Faction[]> {\n return this.api.getFactions() as Promise<Faction[]>;\n }\n\n /**\n * Retrieves information about a specific graphic asset used in the EVE client.\n *\n * @param graphicId - The ID of the graphic\n * @returns Detailed graphic information\n */\n getGraphicById(graphicId: number): Promise<GraphicInfo> {\n return this.api.getGraphicById(graphicId) as Promise<GraphicInfo>;\n }\n\n /**\n * Retrieves a list of all graphic asset IDs.\n *\n * @returns A list of graphic IDs\n */\n getGraphics(): Promise<number[]> {\n return this.api.getGraphics() as Promise<number[]>;\n }\n\n /**\n * Retrieves a list of all item category IDs in the EVE universe.\n *\n * @returns A list of item category IDs\n */\n getItemCategories(): Promise<number[]> {\n return this.api.getCategories() as Promise<number[]>;\n }\n\n /**\n * Retrieves information about a specific item category, including its groups.\n *\n * @param categoryId - The ID of the item category\n * @returns Detailed item category information\n */\n getItemCategoryById(categoryId: number): Promise<ItemCategory> {\n return this.api.getCategoryById(categoryId) as Promise<ItemCategory>;\n }\n\n /**\n * Retrieves information about a specific item group, including its types.\n *\n * @param groupId - The ID of the item group\n * @returns Detailed item group information\n */\n getItemGroupById(groupId: number): Promise<ItemGroup> {\n return this.api.getItemGroupById(groupId) as Promise<ItemGroup>;\n }\n\n /**\n * Retrieves a list of all item group IDs in the EVE universe.\n *\n * @returns A list of item group IDs\n */\n getItemGroups(): Promise<number[]> {\n return this.api.getItemGroups() as Promise<number[]>;\n }\n\n /**\n * Retrieves information about a moon, including its name and position.\n *\n * @param moonId - The ID of the moon\n * @returns Detailed moon information\n */\n getMoonById(moonId: number): Promise<MoonInfo> {\n return this.api.getMoonById(moonId) as Promise<MoonInfo>;\n }\n\n /**\n * Retrieves information about a planet, including its name, type, and position.\n *\n * @param planetId - The ID of the planet\n * @returns Detailed planet information\n */\n getPlanetById(planetId: number): Promise<PlanetInfo> {\n return this.api.getPlanetById(planetId) as Promise<PlanetInfo>;\n }\n\n /**\n * Retrieves all playable races in the EVE universe.\n *\n * @returns A list of playable races\n */\n getRaces(): Promise<Race[]> {\n return this.api.getRaces() as Promise<Race[]>;\n }\n\n /**\n * Retrieves information about a region, including its constellations and name.\n *\n * @param regionId - The ID of the region\n * @returns Detailed region information\n */\n getRegionById(regionId: number): Promise<RegionInfo> {\n return this.api.getRegionById(regionId) as Promise<RegionInfo>;\n }\n\n /**\n * Retrieves information about a star, including its spectral class and luminosity.\n *\n * @param starId - The ID of the star\n * @returns Detailed star information\n */\n getStarById(starId: number): Promise<StarInfo> {\n return this.api.getStarById(starId) as Promise<StarInfo>;\n }\n\n /**\n * Retrieves information about a stargate, including its destination and position.\n *\n * @param stargateId - The ID of the stargate\n * @returns Detailed stargate information\n */\n getStargateById(stargateId: number): Promise<StargateInfo> {\n return this.api.getStargateById(stargateId) as Promise<StargateInfo>;\n }\n\n /**\n * Retrieves public information about a station, including its services and location.\n *\n * @param stationId - The ID of the station\n * @returns Detailed station information\n */\n getStationById(stationId: number): Promise<StationInfo> {\n return this.api.getStationById(stationId) as Promise<StationInfo>;\n }\n\n /**\n * Retrieves information about a player-owned structure by its ID.\n *\n * @param structureId - The ID of the structure\n * @returns Detailed structure information\n * @requires Authentication\n */\n getStructureById(structureId: number): Promise<StructureInfo> {\n return this.api.getStructureById(structureId) as Promise<StructureInfo>;\n }\n\n /**\n * Retrieves a list of all publicly visible player-owned structure IDs.\n *\n * @returns A list of structure IDs\n */\n getStructures(): Promise<number[]> {\n return this.api.getStructures() as Promise<number[]>;\n }\n\n /**\n * Retrieves information about a solar system, including its planets, stargates, and security status.\n *\n * @param systemId - The ID of the solar system\n * @returns Detailed solar system information\n */\n getSystemById(systemId: number): Promise<SolarSystemInfo> {\n return this.api.getSystemById(systemId) as Promise<SolarSystemInfo>;\n }\n\n /**\n * Retrieves the number of ship jumps per solar system within the last hour.\n *\n * @returns A list of solar systems with their jump counts\n */\n getSystemJumps(): Promise<SystemJump[]> {\n return this.api.getSystemJumps() as Promise<SystemJump[]>;\n }\n\n /**\n * Retrieves the number of NPC and player ship kills per solar system within the last hour.\n *\n * @returns A list of solar systems with their kill counts\n */\n getSystemKills(): Promise<SystemKill[]> {\n return this.api.getSystemKills() as Promise<SystemKill[]>;\n }\n\n /**\n * Retrieves a list of all solar system IDs in the EVE universe.\n *\n * @returns A list of solar system IDs\n */\n getSystems(): Promise<number[]> {\n return this.api.getSystems() as Promise<number[]>;\n }\n\n /**\n * Retrieves information about a specific item type, including its description and attributes.\n *\n * @param typeId - The ID of the item type\n * @returns Detailed item type information\n */\n getTypeById(typeId: number): Promise<TypeInfo> {\n return this.api.getTypeById(typeId) as Promise<TypeInfo>;\n }\n\n /**\n * Retrieves a list of all item type IDs in the EVE universe.\n *\n * @returns A list of item type IDs\n */\n getTypes(): Promise<number[]> {\n return this.api.getTypes() as Promise<number[]>;\n }\n\n /**\n * Resolves a list of names to their corresponding IDs via a bulk POST operation.\n *\n * @param names - An array of names to resolve to IDs\n * @returns The resolved IDs grouped by entity category\n */\n postBulkNamesToIds(names: string[]): Promise<BulkIdResult> {\n return this.api.postBulkNamesToIds(names) as Promise<BulkIdResult>;\n }\n\n /**\n * Resolves a list of IDs to their names and categories via a bulk POST operation.\n *\n * @param ids - An array of entity IDs to resolve\n * @returns A list of names with their corresponding categories\n */\n postNamesAndCategories(ids: number[]): Promise<NameAndCategory[]> {\n return this.api.postNamesAndCategories(ids) as Promise<NameAndCategory[]>;\n }\n\n /**\n * Retrieves information about a planetary interaction schematic.\n *\n * @param schematicId - The ID of the PI schematic\n * @returns Detailed schematic information including inputs and outputs\n */\n getSchematicById(schematicId: number): Promise<SchematicInfo> {\n return this.api.getSchematicById(schematicId) as Promise<SchematicInfo>;\n }\n\n /**\n * Retrieves a list of all region IDs in the EVE universe.\n *\n * @returns A list of region IDs\n */\n getRegions(): Promise<number[]> {\n return this.api.getRegions() as Promise<number[]>;\n }\n}\n","import { z } from 'zod';\nimport { EndpointMap } from './EndpointDefinition';\nimport {\n WalletJournalSchema,\n WalletTransactionSchema,\n} from '../../schemas/wallet';\nimport { CorporationWalletDivisionSchema } from '../../schemas/corporation';\n\nexport const walletEndpoints = {\n getCharacterWallet: {\n path: 'characters/{characterId}/wallet',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n responseSchema: z.number(),\n },\n getCharacterWalletJournal: {\n path: 'characters/{characterId}/wallet/journal',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n responseSchema: z.array(WalletJournalSchema),\n },\n getCharacterWalletTransactions: {\n path: 'characters/{characterId}/wallet/transactions',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n responseSchema: z.array(WalletTransactionSchema),\n },\n getCorporationWallets: {\n path: 'corporations/{corporationId}/wallets',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId'],\n responseSchema: z.array(CorporationWalletDivisionSchema),\n },\n getCorporationWalletJournal: {\n path: 'corporations/{corporationId}/wallets/{division}/journal',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId', 'division'],\n responseSchema: z.array(WalletJournalSchema),\n },\n getCorporationWalletTransactions: {\n path: 'corporations/{corporationId}/wallets/{division}/transactions',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId', 'division'],\n responseSchema: z.array(WalletTransactionSchema),\n },\n} as const satisfies EndpointMap;\n","import { z } from 'zod';\n\nexport const WalletTransactionSchema = z.looseObject({\n transaction_id: z.number(),\n date: z.string(),\n type_id: z.number(),\n location_id: z.number(),\n unit_price: z.number(),\n quantity: z.number(),\n client_id: z.number(),\n is_buy: z.boolean(),\n is_personal: z.boolean(),\n journal_ref_id: z.number(),\n});\n\nexport const WalletJournalSchema = z.looseObject({\n id: z.number(),\n date: z.string(),\n ref_type: z.string(),\n first_party_id: z.number().optional(),\n second_party_id: z.number().optional(),\n amount: z.number().optional(),\n balance: z.number().optional(),\n reason: z.string().optional(),\n description: z.string(),\n context_id: z.number().optional(),\n context_id_type: z.string().optional(),\n tax: z.number().optional(),\n tax_receiver_id: z.number().optional(),\n});\n","import { ApiClient } from '../core/ApiClient';\nimport { BaseEsiClient } from './BaseEsiClient';\nimport { walletEndpoints } from '../core/endpoints/walletEndpoints';\nimport { WalletJournal, WalletTransaction } from '../types/api-responses';\nimport { PageResult } from '../core/pagination/AsyncPaginationIterator';\n\nexport class WalletClient extends BaseEsiClient<typeof walletEndpoints> {\n constructor(client: ApiClient) {\n super(client, walletEndpoints);\n }\n\n /**\n * Retrieves the current ISK balance of a character's wallet.\n *\n * @param characterId - The ID of the character\n * @returns The character's wallet balance in ISK\n * @requires Authentication\n */\n getCharacterWallet(characterId: number): Promise<number> {\n return this.api.getCharacterWallet(characterId);\n }\n\n /**\n * Retrieves the wallet journal entries for a character, showing ISK transactions and their reasons.\n *\n * @param characterId - The ID of the character\n * @returns A list of wallet journal entries\n * @requires Authentication\n */\n getCharacterWalletJournal(characterId: number): Promise<WalletJournal[]> {\n return this.api.getCharacterWalletJournal(characterId);\n }\n\n /**\n * Retrieves the market transaction history for a character's wallet.\n *\n * @param characterId - The ID of the character\n * @returns A list of market buy and sell transactions\n * @requires Authentication\n */\n getCharacterWalletTransactions(\n characterId: number,\n ): Promise<WalletTransaction[]> {\n return this.api.getCharacterWalletTransactions(characterId);\n }\n\n /**\n * Retrieves the balances for all wallet divisions of a corporation.\n *\n * @param corporationId - The ID of the corporation\n * @returns A list of wallet divisions with their balances\n * @requires Authentication\n */\n getCorporationWallets(\n corporationId: number,\n ): Promise<{ division: number; balance: number }[]> {\n return this.api.getCorporationWallets(corporationId);\n }\n\n /**\n * Retrieves the wallet journal entries for a specific division of a corporation wallet.\n *\n * @param corporationId - The ID of the corporation\n * @param division - The wallet division number (1-7)\n * @returns A list of wallet journal entries for the specified division\n * @requires Authentication\n */\n getCorporationWalletJournal(\n corporationId: number,\n division: number,\n ): Promise<WalletJournal[]> {\n return this.api.getCorporationWalletJournal(corporationId, division);\n }\n\n /**\n * Retrieves the market transaction history for a specific division of a corporation wallet.\n *\n * @param corporationId - The ID of the corporation\n * @param division - The wallet division number (1-7)\n * @returns A list of market buy and sell transactions for the specified division\n * @requires Authentication\n */\n getCorporationWalletTransactions(\n corporationId: number,\n division: number,\n ): Promise<WalletTransaction[]> {\n return this.api.getCorporationWalletTransactions(corporationId, division);\n }\n\n streamCharacterWalletJournal(\n characterId: number,\n ): AsyncGenerator<PageResult<WalletJournal>, void, undefined> {\n return this.streamEndpoint<WalletJournal>(\n 'getCharacterWalletJournal',\n characterId,\n );\n }\n\n streamCorporationWalletJournal(\n corporationId: number,\n division: number,\n ): AsyncGenerator<PageResult<WalletJournal>, void, undefined> {\n return this.streamEndpoint<WalletJournal>(\n 'getCorporationWalletJournal',\n corporationId,\n division,\n );\n }\n\n streamCharacterWalletTransactions(\n characterId: number,\n ): AsyncGenerator<PageResult<WalletTransaction>, void, undefined> {\n return this.streamEndpoint<WalletTransaction>(\n 'getCharacterWalletTransactions',\n characterId,\n );\n }\n\n streamCorporationWalletTransactions(\n corporationId: number,\n division: number,\n ): AsyncGenerator<PageResult<WalletTransaction>, void, undefined> {\n return this.streamEndpoint<WalletTransaction>(\n 'getCorporationWalletTransactions',\n corporationId,\n division,\n );\n }\n}\n","import { z } from 'zod';\nimport { EndpointMap } from './EndpointDefinition';\nimport { WarSchema } from '../../schemas/wars';\nimport { KillmailSummarySchema } from '../../schemas/killmails';\n\nexport const warEndpoints = {\n getWars: {\n path: 'wars',\n method: 'GET',\n requiresAuth: false,\n responseSchema: z.array(z.number()),\n },\n getWarById: {\n path: 'wars/{warId}',\n method: 'GET',\n requiresAuth: false,\n pathParams: ['warId'],\n responseSchema: WarSchema,\n },\n getWarKillmails: {\n path: 'wars/{warId}/killmails',\n method: 'GET',\n requiresAuth: false,\n pathParams: ['warId'],\n responseSchema: z.array(KillmailSummarySchema),\n },\n} as const satisfies EndpointMap;\n","import { z } from 'zod';\n\nexport const WarSchema = z.looseObject({\n id: z.number(),\n declared: z.string(),\n started: z.string().optional(),\n finished: z.string().optional(),\n retracted: z.string().optional(),\n mutual: z.boolean(),\n open_for_allies: z.boolean(),\n aggressor: z.looseObject({\n corporation_id: z.number().optional(),\n alliance_id: z.number().optional(),\n isk_destroyed: z.number(),\n ships_killed: z.number(),\n }),\n defender: z.looseObject({\n corporation_id: z.number().optional(),\n alliance_id: z.number().optional(),\n isk_destroyed: z.number(),\n ships_killed: z.number(),\n }),\n allies: z\n .array(\n z.looseObject({\n corporation_id: z.number().optional(),\n alliance_id: z.number().optional(),\n }),\n )\n .optional(),\n});\n","import { ApiClient } from '../core/ApiClient';\nimport { BaseEsiClient } from './BaseEsiClient';\nimport { warEndpoints } from '../core/endpoints/warEndpoints';\nimport { War, KillmailSummary } from '../types/api-responses';\nimport { PageResult } from '../core/pagination/AsyncPaginationIterator';\n\nexport class WarsClient extends BaseEsiClient<typeof warEndpoints> {\n constructor(client: ApiClient) {\n super(client, warEndpoints);\n }\n\n /**\n * Retrieves a list of all war IDs, ordered by war ID descending.\n *\n * @returns A list of war IDs\n */\n getWars(): Promise<number[]> {\n return this.api.getWars();\n }\n\n /**\n * Retrieves detailed information about a specific war, including aggressors, defenders, and status.\n *\n * @param warId - The ID of the war\n * @returns Detailed war information\n */\n getWarById(warId: number): Promise<War> {\n return this.api.getWarById(warId);\n }\n\n /**\n * Retrieves the killmail summaries associated with a specific war.\n *\n * @param warId - The ID of the war\n * @returns A list of killmail summaries for the war\n */\n getWarKillmails(warId: number): Promise<KillmailSummary[]> {\n return this.api.getWarKillmails(warId);\n }\n\n streamWars(): AsyncGenerator<PageResult<number>, void, undefined> {\n return this.streamEndpoint<number>('getWars');\n }\n\n streamWarKillmails(\n warId: number,\n ): AsyncGenerator<PageResult<KillmailSummary>, void, undefined> {\n return this.streamEndpoint<KillmailSummary>('getWarKillmails', warId);\n }\n}\n","import { z } from 'zod';\nimport { EndpointMap } from './EndpointDefinition';\nimport {\n MetaChangelogSchema,\n MetaCompatibilityDatesSchema,\n MetaNameSchema,\n MetaStatusSchema,\n} from '../../schemas/meta';\n\nexport const metaEndpoints = {\n getOpenApiJson: {\n path: 'meta/openapi.json',\n method: 'GET',\n requiresAuth: false,\n responseSchema: z.record(z.string(), z.unknown()),\n },\n getChangelog: {\n path: 'meta/changelog',\n method: 'GET',\n requiresAuth: false,\n responseSchema: MetaChangelogSchema,\n },\n getCompatibilityDates: {\n path: 'meta/compatibility-dates',\n method: 'GET',\n requiresAuth: false,\n responseSchema: MetaCompatibilityDatesSchema,\n },\n getName: {\n path: 'meta/name',\n method: 'GET',\n requiresAuth: false,\n responseSchema: MetaNameSchema,\n },\n getStatus: {\n path: 'meta/status',\n method: 'GET',\n requiresAuth: false,\n responseSchema: MetaStatusSchema,\n },\n} as const satisfies EndpointMap;\n","import { z } from 'zod';\n\nexport const MetaChangelogEntrySchema = z.looseObject({\n method: z.string(),\n path: z.string(),\n compatibility_date: z.string(),\n is_breaking: z.boolean(),\n description: z.string(),\n});\n\nexport const MetaChangelogSchema = z.record(\n z.string(),\n z.array(MetaChangelogEntrySchema),\n);\n\nexport const MetaCompatibilityDatesSchema = z.looseObject({\n compatibility_dates: z.array(z.string()),\n});\n\nexport const MetaNameSchema = z.looseObject({\n name: z.string(),\n});\n\nexport const MetaStatusSchema = z.looseObject({\n status: z.string(),\n});\n","import { ApiClient } from '../core/ApiClient';\nimport { BaseEsiClient } from './BaseEsiClient';\nimport { metaEndpoints } from '../core/endpoints/metaEndpoints';\nimport { logInfo, logError } from '../core/logger/loggerUtil';\nimport { USER_AGENT, COMPATIBILITY_DATE } from '../core/constants';\nimport {\n MetaChangelog,\n MetaCompatibilityDates,\n MetaName,\n MetaStatus,\n} from '../types/api-responses';\n\nexport class MetaClient extends BaseEsiClient<typeof metaEndpoints> {\n constructor(client: ApiClient) {\n super(client, metaEndpoints);\n }\n\n /**\n * Retrieves the ESI OpenAPI specification in JSON format.\n *\n * @returns The full ESI OpenAPI specification as a JSON object\n */\n /* eslint-disable @typescript-eslint/no-explicit-any */\n getOpenApiJson(): Promise<Record<string, any>> {\n return this.api.getOpenApiJson() as Promise<Record<string, any>>;\n }\n /* eslint-enable @typescript-eslint/no-explicit-any */\n\n /**\n * Retrieves the ESI OpenAPI specification in YAML format.\n *\n * @returns The full ESI OpenAPI specification as a YAML string\n */\n async getOpenApiYaml(): Promise<string> {\n const url = `${this._client.getLink()}/meta/openapi.yaml`;\n\n logInfo(`Hitting endpoint: ${url}`);\n\n try {\n const response = await fetch(url, {\n method: 'GET',\n headers: {\n accept: 'text/yaml, application/x-yaml, text/plain',\n 'User-Agent': USER_AGENT,\n 'X-Compatibility-Date': COMPATIBILITY_DATE,\n },\n });\n\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n return await response.text();\n } catch (error) {\n if (error instanceof Error) {\n logError(`Error fetching YAML: ${error.message}`);\n throw error;\n } else {\n logError(`Unexpected error: ${String(error)}`);\n throw new Error(String(error));\n }\n }\n }\n\n /**\n * Retrieves the ESI changelog data.\n *\n * @returns The changelog keyed by compatibility date\n */\n getChangelog(): Promise<MetaChangelog> {\n return this.api.getChangelog();\n }\n\n /**\n * Retrieves the list of ESI compatibility dates.\n *\n * @returns An object containing the list of compatibility dates\n */\n getCompatibilityDates(): Promise<MetaCompatibilityDates> {\n return this.api.getCompatibilityDates();\n }\n\n /**\n * Retrieves the ESI name.\n *\n * @returns An object containing the ESI name\n */\n getName(): Promise<MetaName> {\n return this.api.getName();\n }\n\n /**\n * Retrieves the ESI status.\n *\n * @returns An object containing the ESI status\n */\n getStatus(): Promise<MetaStatus> {\n return this.api.getStatus();\n }\n}\n","import { z } from 'zod';\nimport { EndpointMap } from './EndpointDefinition';\nimport {\n FreelanceJobsListingSchema,\n FreelanceJobDetailSchema,\n CharacterFreelanceJobsListingSchema,\n FreelanceJobParticipationSchema,\n CorporationFreelanceJobsListingSchema,\n FreelanceJobParticipantSchema,\n} from '../../schemas/freelance-jobs';\n\nexport const freelanceJobsEndpoints = {\n getFreelanceJobs: {\n path: 'freelance-jobs',\n method: 'GET',\n requiresAuth: false,\n queryParams: { before: 'before', after: 'after' },\n responseSchema: FreelanceJobsListingSchema,\n },\n getFreelanceJobById: {\n path: 'freelance-jobs/{jobId}',\n method: 'GET',\n requiresAuth: false,\n pathParams: ['jobId'],\n responseSchema: FreelanceJobDetailSchema,\n },\n getCharacterFreelanceJobs: {\n path: 'characters/{characterId}/freelance-jobs',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n queryParams: { before: 'before', after: 'after' },\n responseSchema: CharacterFreelanceJobsListingSchema,\n },\n getCharacterFreelanceJobParticipation: {\n path: 'characters/{characterId}/freelance-jobs/{jobId}/participation',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId', 'jobId'],\n responseSchema: FreelanceJobParticipationSchema,\n },\n getCorporationFreelanceJobs: {\n path: 'corporations/{corporationId}/freelance-jobs',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId'],\n queryParams: { before: 'before', after: 'after' },\n responseSchema: CorporationFreelanceJobsListingSchema,\n },\n getCorporationFreelanceJobParticipants: {\n path: 'corporations/{corporationId}/freelance-jobs/{jobId}/participants',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId', 'jobId'],\n responseSchema: z.array(FreelanceJobParticipantSchema),\n },\n} as const satisfies EndpointMap;\n","import { z } from 'zod';\n\nexport const EsiCursorSchema = z.looseObject({\n before: z.string().nullable(),\n after: z.string().nullable(),\n});\n\nexport const FreelanceJobSummarySchema = z.looseObject({\n id: z.string(),\n name: z.string(),\n state: z.string(),\n last_modified: z.string(),\n progress: z.looseObject({\n current: z.number(),\n desired: z.number(),\n }),\n reward: z\n .looseObject({\n initial: z.number(),\n remaining: z.number(),\n })\n .optional(),\n});\n\nexport const FreelanceJobsListingSchema = z.looseObject({\n cursor: EsiCursorSchema.optional(),\n freelance_jobs: z.array(FreelanceJobSummarySchema),\n});\n\nexport const FreelanceJobDetailSchema = z.looseObject({\n id: z.string(),\n name: z.string(),\n state: z.string(),\n last_modified: z.string(),\n progress: z.looseObject({\n current: z.number(),\n desired: z.number(),\n }),\n reward: z\n .looseObject({\n initial: z.number(),\n remaining: z.number(),\n })\n .optional(),\n details: z.looseObject({\n description: z.string(),\n career: z.string(),\n created: z.string(),\n expires: z.string(),\n creator: z.looseObject({\n character: z.looseObject({\n id: z.number(),\n name: z.string(),\n }),\n corporation: z.looseObject({\n id: z.number(),\n name: z.string(),\n }),\n }),\n }),\n configuration: z.looseObject({\n version: z.number(),\n parameters: z.record(z.string(), z.unknown()),\n method: z.string(),\n }),\n contribution: z.looseObject({\n max_committed_participants: z.number(),\n reward_per_contribution: z.number().optional(),\n submission_multiplier: z.number().optional(),\n }),\n access_and_visibility: z.looseObject({\n acl_protected: z.boolean(),\n broadcast_locations: z.array(\n z.looseObject({\n id: z.number(),\n name: z.string(),\n }),\n ),\n }),\n});\n\nexport const CharacterFreelanceJobsListingSchema = z.looseObject({\n cursor: EsiCursorSchema.optional(),\n freelance_jobs: z.array(FreelanceJobSummarySchema),\n});\n\nexport const FreelanceJobParticipationSchema = z.looseObject({\n job_id: z.string(),\n character_id: z.number(),\n status: z.string(),\n contributions: z.number(),\n last_contribution: z.string().optional(),\n});\n\nexport const CorporationFreelanceJobsListingSchema = z.looseObject({\n cursor: EsiCursorSchema.optional(),\n freelance_jobs: z.array(FreelanceJobSummarySchema),\n});\n\nexport const FreelanceJobParticipantSchema = z.looseObject({\n character_id: z.number(),\n corporation_id: z.number(),\n status: z.string(),\n contributions: z.number(),\n last_contribution: z.string().optional(),\n});\n","import { ApiClient } from '../core/ApiClient';\nimport { BaseEsiClient } from './BaseEsiClient';\nimport { freelanceJobsEndpoints } from '../core/endpoints/freelanceJobsEndpoints';\nimport {\n FreelanceJobsListing,\n FreelanceJobDetail,\n CharacterFreelanceJobsListing,\n FreelanceJobParticipation,\n CorporationFreelanceJobsListing,\n FreelanceJobParticipant,\n} from '../types/api-responses';\n\nexport class FreelanceJobsClient extends BaseEsiClient<\n typeof freelanceJobsEndpoints\n> {\n constructor(client: ApiClient) {\n super(client, freelanceJobsEndpoints);\n }\n\n /**\n * Retrieves a paginated listing of all publicly available freelance jobs.\n *\n * @param before - Optional cursor token for fetching the previous page of results\n * @param after - Optional cursor token for fetching the next page of results\n * @returns A listing of freelance jobs with cursor pagination metadata\n */\n getFreelanceJobs(\n before?: string,\n after?: string,\n ): Promise<FreelanceJobsListing> {\n return this.api.getFreelanceJobs(\n before,\n after,\n ) as Promise<FreelanceJobsListing>;\n }\n\n /**\n * Retrieves detailed information about a specific freelance job.\n *\n * @param jobId - The unique identifier of the freelance job\n * @returns Detailed information about the freelance job\n */\n getFreelanceJobById(jobId: string): Promise<FreelanceJobDetail> {\n return this.api.getFreelanceJobById(jobId) as Promise<FreelanceJobDetail>;\n }\n\n /**\n * Retrieves a paginated listing of freelance jobs associated with a specific character.\n *\n * @param characterId - The ID of the character\n * @param before - Optional cursor token for fetching the previous page of results\n * @param after - Optional cursor token for fetching the next page of results\n * @returns A listing of the character's freelance jobs with cursor pagination metadata\n * @requires Authentication\n */\n getCharacterFreelanceJobs(\n characterId: number,\n before?: string,\n after?: string,\n ): Promise<CharacterFreelanceJobsListing> {\n return this.api.getCharacterFreelanceJobs(\n characterId,\n before,\n after,\n ) as Promise<CharacterFreelanceJobsListing>;\n }\n\n /**\n * Retrieves a character's participation details for a specific freelance job.\n *\n * @param characterId - The ID of the character\n * @param jobId - The unique identifier of the freelance job\n * @returns The character's participation details for the job\n * @requires Authentication\n */\n getCharacterFreelanceJobParticipation(\n characterId: number,\n jobId: string,\n ): Promise<FreelanceJobParticipation> {\n return this.api.getCharacterFreelanceJobParticipation(\n characterId,\n jobId,\n ) as Promise<FreelanceJobParticipation>;\n }\n\n /**\n * Retrieves a paginated listing of freelance jobs associated with a specific corporation.\n *\n * @param corporationId - The ID of the corporation\n * @param before - Optional cursor token for fetching the previous page of results\n * @param after - Optional cursor token for fetching the next page of results\n * @returns A listing of the corporation's freelance jobs with cursor pagination metadata\n * @requires Authentication\n */\n getCorporationFreelanceJobs(\n corporationId: number,\n before?: string,\n after?: string,\n ): Promise<CorporationFreelanceJobsListing> {\n return this.api.getCorporationFreelanceJobs(\n corporationId,\n before,\n after,\n ) as Promise<CorporationFreelanceJobsListing>;\n }\n\n /**\n * Retrieves the list of participants from a corporation in a specific freelance job.\n *\n * @param corporationId - The ID of the corporation\n * @param jobId - The unique identifier of the freelance job\n * @returns An array of participants from the corporation in the job\n * @requires Authentication\n */\n getCorporationFreelanceJobParticipants(\n corporationId: number,\n jobId: string,\n ): Promise<FreelanceJobParticipant[]> {\n return this.api.getCorporationFreelanceJobParticipants(\n corporationId,\n jobId,\n ) as Promise<FreelanceJobParticipant[]>;\n }\n}\n","import { z } from 'zod';\nimport { EndpointMap } from './EndpointDefinition';\nimport {\n SovereigntyHubSchema,\n OrbitalSkyhookSchema,\n RaidableSkyhookSchema,\n} from '../../schemas/skyhooks';\n\nexport const skyhookEndpoints = {\n getSovereigntyHubs: {\n path: 'corporations/{corporationId}/structures/sovereignty-hubs',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId'],\n responseSchema: z.array(SovereigntyHubSchema),\n },\n getOrbitalSkyhooks: {\n path: 'corporations/{corporationId}/structures/skyhooks',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId'],\n responseSchema: z.array(OrbitalSkyhookSchema),\n },\n getRaidableSkyhooks: {\n path: 'skyhooks/raidable',\n method: 'GET',\n requiresAuth: false,\n responseSchema: z.array(RaidableSkyhookSchema),\n },\n} as const satisfies EndpointMap;\n","import { z } from 'zod';\n\nexport const SovereigntyHubSchema = z.looseObject({\n structure_id: z.number(),\n system_id: z.number(),\n corporation_id: z.number(),\n alliance_id: z.number().optional(),\n online: z.boolean(),\n remaining_reagents: z.number().optional(),\n installed_upgrades: z.array(z.number()).optional(),\n});\n\nexport const OrbitalSkyhookSchema = z.looseObject({\n structure_id: z.number(),\n system_id: z.number(),\n corporation_id: z.number(),\n alliance_id: z.number().optional(),\n online: z.boolean(),\n reagent_silo_capacity: z.number().optional(),\n reagent_silo_level: z.number().optional(),\n});\n\nexport const RaidableSkyhookSchema = z.looseObject({\n structure_id: z.number(),\n system_id: z.number(),\n corporation_id: z.number(),\n alliance_id: z.number().optional(),\n raidable_at: z.string().optional(),\n is_raidable: z.boolean(),\n});\n","import { ApiClient } from '../core/ApiClient';\nimport { BaseEsiClient } from './BaseEsiClient';\nimport { skyhookEndpoints } from '../core/endpoints/skyhookEndpoints';\nimport {\n SovereigntyHub,\n OrbitalSkyhook,\n RaidableSkyhook,\n} from '../types/api-responses';\n\nexport class SkyhooksClient extends BaseEsiClient<typeof skyhookEndpoints> {\n constructor(client: ApiClient) {\n super(client, skyhookEndpoints);\n }\n\n /**\n * Retrieves all sovereignty hubs exposed as Upwell structures, including online status and installed upgrades.\n *\n * @param corporationId - The ID of the corporation to query sovereignty hubs for\n * @returns A list of sovereignty hubs\n * @requires Authentication\n */\n getSovereigntyHubs(corporationId: number): Promise<SovereigntyHub[]> {\n return this.api.getSovereigntyHubs(corporationId);\n }\n\n /**\n * Retrieves all orbital skyhooks with their silo capacity and levels.\n *\n * @param corporationId - The ID of the corporation to query skyhooks for\n * @returns A list of orbital skyhooks\n * @requires Authentication\n */\n getOrbitalSkyhooks(corporationId: number): Promise<OrbitalSkyhook[]> {\n return this.api.getOrbitalSkyhooks(corporationId);\n }\n\n /**\n * Retrieves the rolling list of skyhooks that are currently or becoming raidable across New Eden.\n *\n * @returns A list of raidable skyhooks\n */\n getRaidableSkyhooks(): Promise<RaidableSkyhook[]> {\n return this.api.getRaidableSkyhooks();\n }\n}\n","import { z } from 'zod';\nimport { EndpointMap } from './EndpointDefinition';\nimport {\n MercenaryDenSchema,\n MercenaryTacticalOperationSchema,\n} from '../../schemas/mercenary';\n\nexport const mercenaryEndpoints = {\n getMercenaryDens: {\n path: 'characters/{characterId}/structures/mercenary-dens',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n responseSchema: z.array(MercenaryDenSchema),\n },\n getMercenaryTacticalOperations: {\n path: 'characters/{characterId}/mercenary-tactical-operations',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n responseSchema: z.array(MercenaryTacticalOperationSchema),\n },\n} as const satisfies EndpointMap;\n","import { z } from 'zod';\nimport { esiEnum } from './esiEnum';\n\nexport const MercenaryDenSchema = z.looseObject({\n den_id: z.number(),\n system_id: z.number(),\n constellation_id: z.number(),\n region_id: z.number(),\n development_level: z.number().optional(),\n anarchy_level: z.number().optional(),\n active_operations: z.number().optional(),\n});\n\nexport const MercenaryTacticalOperationSchema = z.looseObject({\n operation_id: z.number(),\n den_id: z.number(),\n system_id: z.number(),\n site_type: z.string(),\n status: esiEnum(['spawning', 'active', 'completed', 'expired']),\n started_at: z.string().optional(),\n expires_at: z.string().optional(),\n});\n","import { ApiClient } from '../core/ApiClient';\nimport { BaseEsiClient } from './BaseEsiClient';\nimport { mercenaryEndpoints } from '../core/endpoints/mercenaryEndpoints';\nimport {\n MercenaryDen,\n MercenaryTacticalOperation,\n} from '../types/api-responses';\n\nexport class MercenaryClient extends BaseEsiClient<typeof mercenaryEndpoints> {\n constructor(client: ApiClient) {\n super(client, mercenaryEndpoints);\n }\n\n /**\n * Retrieves all mercenary dens with their development and anarchy parameters.\n *\n * @param characterId - The ID of the character to query mercenary dens for\n * @returns A list of mercenary dens\n * @requires Authentication\n */\n getMercenaryDens(characterId: number): Promise<MercenaryDen[]> {\n return this.api.getMercenaryDens(characterId);\n }\n\n /**\n * Retrieves all mercenary tactical operations (MTOs) spawned from mercenary dens.\n *\n * @param characterId - The ID of the character to query tactical operations for\n * @returns A list of mercenary tactical operations\n * @requires Authentication\n */\n getMercenaryTacticalOperations(\n characterId: number,\n ): Promise<MercenaryTacticalOperation[]> {\n return this.api.getMercenaryTacticalOperations(characterId);\n }\n}\n","import { z } from 'zod';\nimport { EndpointMap } from './EndpointDefinition';\nimport { AccessListSchema } from '../../schemas/access-lists';\n\nexport const accessListEndpoints = {\n getAccessList: {\n path: 'characters/{characterId}/access-lists/{accessListId}',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId', 'accessListId'],\n responseSchema: AccessListSchema,\n },\n getCharacterAccessLists: {\n path: 'characters/{characterId}/access-lists',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n responseSchema: z.array(AccessListSchema),\n },\n} as const satisfies EndpointMap;\n","import { z } from 'zod';\nimport { esiEnum } from './esiEnum';\n\nexport const AccessListEntrySchema = z.looseObject({\n entity_id: z.number(),\n entity_type: esiEnum(['character', 'corporation', 'alliance']),\n access_type: esiEnum(['allowed', 'blocked']),\n});\n\nexport const AccessListSchema = z.looseObject({\n access_list_id: z.number(),\n name: z.string(),\n entries: z.array(AccessListEntrySchema),\n});\n","import { ApiClient } from '../core/ApiClient';\nimport { BaseEsiClient } from './BaseEsiClient';\nimport { accessListEndpoints } from '../core/endpoints/accessListEndpoints';\nimport { AccessList } from '../types/api-responses';\n\nexport class AccessListsClient extends BaseEsiClient<\n typeof accessListEndpoints\n> {\n constructor(client: ApiClient) {\n super(client, accessListEndpoints);\n }\n\n /**\n * Retrieves the contents of an access list (ACL) including all character, corporation, and alliance entries.\n *\n * @param characterId - The ID of the character who owns the access list\n * @param accessListId - The ID of the access list to retrieve\n * @returns The access list with its entries\n * @requires Authentication\n */\n getAccessList(\n characterId: number,\n accessListId: number,\n ): Promise<AccessList> {\n return this.api.getAccessList(characterId, accessListId);\n }\n\n /**\n * Retrieves all access lists for a character.\n *\n * @param characterId - The ID of the character\n * @returns An array of the character's access lists\n * @requires Authentication\n */\n getCharacterAccessLists(characterId: number): Promise<AccessList[]> {\n return this.api.getCharacterAccessLists(characterId);\n }\n}\n","import { z } from 'zod';\nimport { EndpointMap } from './EndpointDefinition';\nimport {\n MilitaryCampaignSchema,\n MilitaryCampaignObjectiveSchema,\n CharacterMilitaryCampaignObjectiveSchema,\n} from '../../schemas/military-campaigns';\n\nexport const militaryCampaignEndpoints = {\n getMilitaryCampaigns: {\n path: 'military-campaigns',\n method: 'GET',\n requiresAuth: false,\n responseSchema: z.array(MilitaryCampaignSchema),\n },\n getMilitaryCampaign: {\n path: 'military-campaigns/{campaignId}',\n method: 'GET',\n requiresAuth: false,\n pathParams: ['campaignId'],\n responseSchema: MilitaryCampaignSchema,\n },\n getMilitaryCampaignObjectives: {\n path: 'military-campaigns/{campaignId}/objectives',\n method: 'GET',\n requiresAuth: false,\n pathParams: ['campaignId'],\n responseSchema: z.array(MilitaryCampaignObjectiveSchema),\n },\n getMilitaryCampaignObjective: {\n path: 'military-campaigns/{campaignId}/objectives/{objectiveId}',\n method: 'GET',\n requiresAuth: false,\n pathParams: ['campaignId', 'objectiveId'],\n responseSchema: MilitaryCampaignObjectiveSchema,\n },\n getCharacterMilitaryCampaignObjectives: {\n path: 'characters/{characterId}/military-campaigns/objectives',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n responseSchema: z.array(CharacterMilitaryCampaignObjectiveSchema),\n },\n getCharacterMilitaryCampaignObjective: {\n path: 'characters/{characterId}/military-campaigns/objectives/{objectiveId}',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId', 'objectiveId'],\n responseSchema: CharacterMilitaryCampaignObjectiveSchema,\n },\n} as const satisfies EndpointMap;\n","import { z } from 'zod';\n\nexport const MilitaryCampaignSchema = z.looseObject({\n campaign_id: z.string(),\n state: z.string(),\n progress: z.number(),\n start_time: z.string(),\n finish_time: z.string().optional(),\n});\n\nexport const MilitaryCampaignObjectiveSchema = z.looseObject({\n objective_id: z.string(),\n campaign_id: z.string(),\n state: z.string(),\n progress: z.number(),\n participants: z.looseObject({\n total: z.number(),\n committed: z.number(),\n contributors: z.number(),\n }),\n});\n\nexport const CharacterMilitaryCampaignObjectiveSchema = z.looseObject({\n objective_id: z.string(),\n campaign_id: z.string(),\n committed: z.boolean(),\n contribution: z.number(),\n});\n","import { ApiClient } from '../core/ApiClient';\nimport { BaseEsiClient } from './BaseEsiClient';\nimport { militaryCampaignEndpoints } from '../core/endpoints/militaryCampaignEndpoints';\nimport {\n MilitaryCampaign,\n MilitaryCampaignObjective,\n CharacterMilitaryCampaignObjective,\n} from '../types/api-responses';\n\nexport class MilitaryCampaignsClient extends BaseEsiClient<\n typeof militaryCampaignEndpoints\n> {\n constructor(client: ApiClient) {\n super(client, militaryCampaignEndpoints);\n }\n\n /**\n * Retrieves a list of all active, completed, and expired military campaigns.\n *\n * @returns An array of military campaigns\n */\n getMilitaryCampaigns(): Promise<MilitaryCampaign[]> {\n return this.api.getMilitaryCampaigns();\n }\n\n /**\n * Retrieves detailed information about a specific military campaign.\n *\n * @param campaignId - The UUID of the military campaign\n * @returns Detailed information about the campaign\n */\n getMilitaryCampaign(campaignId: string): Promise<MilitaryCampaign> {\n return this.api.getMilitaryCampaign(campaignId);\n }\n\n /**\n * Retrieves all objectives for a specific military campaign.\n *\n * @param campaignId - The UUID of the military campaign\n * @returns An array of objectives for the campaign\n */\n getMilitaryCampaignObjectives(\n campaignId: string,\n ): Promise<MilitaryCampaignObjective[]> {\n return this.api.getMilitaryCampaignObjectives(campaignId);\n }\n\n /**\n * Retrieves detailed information about a specific objective in a military campaign.\n *\n * @param campaignId - The UUID of the military campaign\n * @param objectiveId - The UUID of the objective\n * @returns Detailed information about the objective\n */\n getMilitaryCampaignObjective(\n campaignId: string,\n objectiveId: string,\n ): Promise<MilitaryCampaignObjective> {\n return this.api.getMilitaryCampaignObjective(campaignId, objectiveId);\n }\n\n /**\n * Retrieves a character's participated objectives across military campaigns.\n *\n * @param characterId - The ID of the character\n * @returns An array of the character's campaign objective participations\n * @requires Authentication with scope esi.activity.char:read\n */\n getCharacterMilitaryCampaignObjectives(\n characterId: number,\n ): Promise<CharacterMilitaryCampaignObjective[]> {\n return this.api.getCharacterMilitaryCampaignObjectives(characterId);\n }\n\n /**\n * Retrieves a character's participation details for a specific campaign objective.\n *\n * @param characterId - The ID of the character\n * @param objectiveId - The UUID of the objective\n * @returns The character's participation details for the objective\n * @requires Authentication with scope esi.activity.char:read\n */\n getCharacterMilitaryCampaignObjective(\n characterId: number,\n objectiveId: string,\n ): Promise<CharacterMilitaryCampaignObjective> {\n return this.api.getCharacterMilitaryCampaignObjective(\n characterId,\n objectiveId,\n );\n }\n}\n","import { ApiClient } from './ApiClient';\nimport { AllianceClient } from '../clients/AllianceClient';\nimport { AssetsClient } from '../clients/AssetsClient';\nimport { CalendarClient } from '../clients/CalendarClient';\nimport { CharacterClient } from '../clients/CharacterClient';\nimport { ClonesClient } from '../clients/ClonesClient';\nimport { ContactsClient } from '../clients/ContactsClient';\nimport { ContractsClient } from '../clients/ContractsClient';\nimport { CorporationsClient } from '../clients/CorporationsClient';\nimport { CorporationProjectsClient } from '../clients/CorporationProjectsClient';\nimport { DogmaClient } from '../clients/DogmaClient';\nimport { FactionClient } from '../clients/FactionClient';\nimport { FittingsClient } from '../clients/FittingsClient';\nimport { FleetClient } from '../clients/FleetClient';\nimport { IncursionsClient } from '../clients/IncursionsClient';\nimport { IndustryClient } from '../clients/IndustryClient';\nimport { InsuranceClient } from '../clients/InsuranceClient';\nimport { KillmailsClient } from '../clients/KillmailsClient';\nimport { LocationClient } from '../clients/LocationClient';\nimport { LoyaltyClient } from '../clients/LoyaltyClient';\nimport { MailClient } from '../clients/MailClient';\nimport { MarketClient } from '../clients/MarketClient';\nimport { PiClient } from '../clients/PiClient';\nimport { RouteClient } from '../clients/RouteClient';\nimport { SearchClient } from '../clients/SearchClient';\nimport { CharacterSkillsClient } from '../clients/SkillsClient';\nimport { SovereigntyClient } from '../clients/SovereigntyClient';\nimport { StatusClient } from '../clients/StatusClient';\nimport { UiClient } from '../clients/UiClient';\nimport { UniverseClient } from '../clients/UniverseClient';\nimport { WalletClient } from '../clients/WalletClient';\nimport { WarsClient } from '../clients/WarsClient';\nimport { MetaClient } from '../clients/MetaClient';\nimport { FreelanceJobsClient } from '../clients/FreelanceJobsClient';\nimport { SkyhooksClient } from '../clients/SkyhooksClient';\nimport { MercenaryClient } from '../clients/MercenaryClient';\nimport { AccessListsClient } from '../clients/AccessListsClient';\nimport { MilitaryCampaignsClient } from '../clients/MilitaryCampaignsClient';\n\nexport type ApiClientType =\n | 'alliance'\n | 'assets'\n | 'calendar'\n | 'characters'\n | 'clones'\n | 'contacts'\n | 'contracts'\n | 'corporations'\n | 'corporationProjects'\n | 'dogma'\n | 'factions'\n | 'fittings'\n | 'fleets'\n | 'incursions'\n | 'industry'\n | 'insurance'\n | 'killmails'\n | 'location'\n | 'loyalty'\n | 'mail'\n | 'market'\n | 'pi'\n | 'route'\n | 'search'\n | 'skills'\n | 'sovereignty'\n | 'status'\n | 'ui'\n | 'universe'\n | 'wallet'\n | 'wars'\n | 'meta'\n | 'freelanceJobs'\n | 'skyhooks'\n | 'mercenary'\n | 'militaryCampaigns'\n | 'accessLists';\n\nexport type ClientInstance =\n | AllianceClient\n | AssetsClient\n | CalendarClient\n | CharacterClient\n | ClonesClient\n | ContactsClient\n | ContractsClient\n | CorporationsClient\n | CorporationProjectsClient\n | DogmaClient\n | FactionClient\n | FittingsClient\n | FleetClient\n | IncursionsClient\n | IndustryClient\n | InsuranceClient\n | KillmailsClient\n | LocationClient\n | LoyaltyClient\n | MailClient\n | MarketClient\n | PiClient\n | RouteClient\n | SearchClient\n | CharacterSkillsClient\n | SovereigntyClient\n | StatusClient\n | UiClient\n | UniverseClient\n | WalletClient\n | WarsClient\n | MetaClient\n | FreelanceJobsClient\n | SkyhooksClient\n | MercenaryClient\n | MilitaryCampaignsClient\n | AccessListsClient;\n\nconst clientFactories: Record<\n ApiClientType,\n new (apiClient: ApiClient) => ClientInstance\n> = {\n alliance: AllianceClient,\n assets: AssetsClient,\n calendar: CalendarClient,\n characters: CharacterClient,\n clones: ClonesClient,\n contacts: ContactsClient,\n contracts: ContractsClient,\n corporations: CorporationsClient,\n corporationProjects: CorporationProjectsClient,\n dogma: DogmaClient,\n factions: FactionClient,\n fittings: FittingsClient,\n fleets: FleetClient,\n incursions: IncursionsClient,\n industry: IndustryClient,\n insurance: InsuranceClient,\n killmails: KillmailsClient,\n location: LocationClient,\n loyalty: LoyaltyClient,\n mail: MailClient,\n market: MarketClient,\n pi: PiClient,\n route: RouteClient,\n search: SearchClient,\n skills: CharacterSkillsClient,\n sovereignty: SovereigntyClient,\n status: StatusClient,\n ui: UiClient,\n universe: UniverseClient,\n wallet: WalletClient,\n wars: WarsClient,\n meta: MetaClient,\n freelanceJobs: FreelanceJobsClient,\n skyhooks: SkyhooksClient,\n mercenary: MercenaryClient,\n militaryCampaigns: MilitaryCampaignsClient,\n accessLists: AccessListsClient,\n};\n\nexport function createClientInstance(\n name: ApiClientType,\n apiClient: ApiClient,\n): ClientInstance {\n // eslint-disable-next-line security/detect-object-injection\n return new clientFactories[name](apiClient);\n}\n\nconst allClientTypes: ApiClientType[] = Object.keys(\n clientFactories,\n) as ApiClientType[];\n\n// Re-export client classes for direct use\nexport {\n AllianceClient,\n AssetsClient,\n CalendarClient,\n CharacterClient,\n ClonesClient,\n ContactsClient,\n ContractsClient,\n CorporationsClient,\n CorporationProjectsClient,\n DogmaClient,\n FactionClient,\n FittingsClient,\n FleetClient,\n IncursionsClient,\n IndustryClient,\n InsuranceClient,\n KillmailsClient,\n LocationClient,\n LoyaltyClient,\n MailClient,\n MarketClient,\n PiClient,\n RouteClient,\n SearchClient,\n CharacterSkillsClient,\n SovereigntyClient,\n StatusClient,\n UiClient,\n UniverseClient,\n WalletClient,\n WarsClient,\n MetaClient,\n FreelanceJobsClient,\n SkyhooksClient,\n MercenaryClient,\n MilitaryCampaignsClient,\n AccessListsClient,\n};\n","import { ApiClient } from './ApiClient';\nimport { ETagCacheManager, ETagCacheConfig } from './cache/ETagCacheManager';\nimport { RequestDeduplicator } from './RequestDeduplicator';\n\nexport interface CacheStats {\n totalEntries: number;\n maxEntries: number;\n hits: number;\n misses: number;\n hitRate: number;\n oldestEntry: number | null;\n newestEntry: number | null;\n}\n\nexport interface CircuitBreakerStats {\n totalCircuits: number;\n openCircuits: number;\n circuits: Record<\n string,\n { state: 'closed' | 'open' | 'half-open'; failures: number }\n >;\n}\n\nexport class EsiDiagnostics {\n constructor(\n private apiClient: ApiClient,\n private etagCacheEnabled: boolean,\n private deduplicator: RequestDeduplicator | null,\n ) {}\n\n getCacheStats(): CacheStats | null {\n if (!this.etagCacheEnabled) return null;\n const cache = this.apiClient.getCache();\n return cache ? (cache as ETagCacheManager).getStats() : null;\n }\n\n clearCache(): void {\n const cache = this.apiClient.getCache();\n if (cache) {\n (cache as ETagCacheManager).clear();\n }\n }\n\n updateCacheConfig(newConfig: Partial<ETagCacheConfig>): void {\n const cache = this.apiClient.getCache();\n if (cache) {\n (cache as ETagCacheManager).updateConfig(newConfig);\n }\n }\n\n getCircuitBreakerStats(): CircuitBreakerStats | null {\n const cb = this.apiClient.getCircuitBreaker();\n return cb ? cb.getStats() : null;\n }\n\n resetCircuitBreaker(endpoint?: string): void {\n const cb = this.apiClient.getCircuitBreaker();\n if (cb) {\n cb.reset(endpoint);\n }\n }\n\n getDeduplicatorStats(): { pendingRequests: number } | null {\n return this.deduplicator\n ? { pendingRequests: this.deduplicator.pending }\n : null;\n }\n}\n","import { EsiError } from './util/error';\nimport { logDebug, logInfo } from './logger/loggerUtil';\n\nexport interface BatchOptions {\n concurrency?: number;\n onProgress?: (completed: number, total: number) => void;\n}\n\nexport interface BatchResult<K, T> {\n results: Map<K, T>;\n errors: Map<K, EsiError | Error>;\n}\n\nexport async function batchFetch<K, T>(\n keys: K[],\n fetcher: (key: K) => Promise<T>,\n options: BatchOptions = {},\n): Promise<BatchResult<K, T>> {\n const concurrency = options.concurrency ?? 20;\n const results = new Map<K, T>();\n const errors = new Map<K, EsiError | Error>();\n let completed = 0;\n let running = 0;\n let index = 0;\n\n logInfo(`Batch fetch: ${keys.length} items, concurrency=${concurrency}`);\n\n return new Promise((resolve) => {\n function next(): void {\n while (running < concurrency && index < keys.length) {\n const currentIndex = index++;\n const key = keys[currentIndex]!;\n running++;\n\n fetcher(key)\n .then((result) => {\n results.set(key, result);\n })\n .catch((err: unknown) => {\n const error =\n err instanceof EsiError || err instanceof Error\n ? err\n : new Error(String(err));\n errors.set(key, error);\n })\n .finally(() => {\n running--;\n completed++;\n if (options.onProgress) {\n options.onProgress(completed, keys.length);\n }\n if (completed === keys.length) {\n logDebug(\n `Batch complete: ${results.size} succeeded, ${errors.size} failed`,\n );\n resolve({ results, errors });\n } else {\n next();\n }\n });\n }\n }\n\n if (keys.length === 0) {\n resolve({ results, errors });\n return;\n }\n\n next();\n });\n}\n\nexport async function batchPost<T>(\n ids: number[],\n poster: (chunk: number[]) => Promise<T[]>,\n chunkSize: number = 1000,\n): Promise<T[]> {\n const chunks: number[][] = [];\n for (let i = 0; i < ids.length; i += chunkSize) {\n chunks.push(ids.slice(i, i + chunkSize));\n }\n\n logInfo(\n `Batch POST: ${ids.length} IDs in ${chunks.length} chunks of ${chunkSize}`,\n );\n\n const results: T[] = [];\n for (const chunk of chunks) {\n const chunkResult = await poster(chunk);\n results.push(...chunkResult);\n }\n\n return results;\n}\n","import { logInfo, logDebug } from '../logger/loggerUtil';\nimport { ICache, CacheEntry } from './ICache';\n\nexport type { CacheEntry } from './ICache';\n\nexport interface ETagCacheConfig {\n maxEntries?: number;\n defaultTtl?: number;\n cleanupInterval?: number;\n}\n\nexport class ETagCacheManager implements ICache {\n private cache: Map<string, CacheEntry> = new Map();\n private config: Required<ETagCacheConfig>;\n private cleanupTimer?: NodeJS.Timeout;\n private hits: number = 0;\n private misses: number = 0;\n\n constructor(config: ETagCacheConfig = {}) {\n this.config = {\n maxEntries: config.maxEntries ?? 1000,\n defaultTtl: config.defaultTtl ?? 5 * 60 * 1000, // 5 minutes default\n cleanupInterval: config.cleanupInterval ?? 60 * 1000, // 1 minute cleanup\n };\n\n this.startCleanupTimer();\n logInfo(\n `ETag cache manager initialized with ${this.config.maxEntries} max entries`,\n );\n }\n\n /**\n * Get cached data if ETag matches\n */\n get(url: string): CacheEntry | null {\n const entry = this.cache.get(url);\n\n if (!entry) {\n this.misses++;\n return null;\n }\n\n if (this.isExpired(entry)) {\n this.cache.delete(url);\n this.misses++;\n logDebug(`Cache entry expired for ${url}`);\n return null;\n }\n\n this.hits++;\n logDebug(`Cache hit for ${url} with ETag ${entry.etag}`);\n return entry;\n }\n\n /**\n * Get ETag for a URL (for If-None-Match header)\n */\n getETag(url: string): string | null {\n const entry = this.get(url);\n return entry ? entry.etag : null;\n }\n\n /**\n * Set cache entry\n */\n set(\n url: string,\n etag: string,\n data: unknown,\n headers: Record<string, string>,\n customTtl?: number,\n ): void {\n // Remove oldest entries if cache is full\n if (this.cache.size >= this.config.maxEntries) {\n this.evictOldest();\n }\n\n const entry: CacheEntry = {\n etag,\n data,\n headers,\n timestamp: Date.now(),\n ttl: customTtl ?? this.config.defaultTtl,\n };\n\n this.cache.set(url, entry);\n logDebug(`Cached response for ${url} with ETag ${etag}`);\n }\n\n /**\n * Check if cached data exists and is valid\n */\n has(url: string): boolean {\n const entry = this.cache.get(url);\n return entry !== undefined && !this.isExpired(entry);\n }\n\n /**\n * Clear specific cache entry\n */\n delete(url: string): boolean {\n return this.cache.delete(url);\n }\n\n /**\n * Delete all cache entries whose URL contains the given path segment\n */\n deleteByPath(pathSegment: string): number {\n let count = 0;\n for (const key of this.cache.keys()) {\n if (key.includes(pathSegment)) {\n this.cache.delete(key);\n count++;\n }\n }\n if (count > 0) {\n logDebug(`Invalidated ${count} cache entries matching ${pathSegment}`);\n }\n return count;\n }\n\n /**\n * Clear all cache entries\n */\n clear(): void {\n this.cache.clear();\n this.hits = 0;\n this.misses = 0;\n logInfo('ETag cache cleared');\n }\n\n /**\n * Get cache statistics\n */\n getStats(): {\n totalEntries: number;\n maxEntries: number;\n hits: number;\n misses: number;\n hitRate: number;\n oldestEntry: number | null;\n newestEntry: number | null;\n } {\n let oldest = Infinity;\n let newest = -Infinity;\n for (const entry of this.cache.values()) {\n if (entry.timestamp < oldest) oldest = entry.timestamp;\n if (entry.timestamp > newest) newest = entry.timestamp;\n }\n const total = this.hits + this.misses;\n\n return {\n totalEntries: this.cache.size,\n maxEntries: this.config.maxEntries,\n hits: this.hits,\n misses: this.misses,\n hitRate: total > 0 ? this.hits / total : 0,\n oldestEntry: this.cache.size > 0 ? oldest : null,\n newestEntry: this.cache.size > 0 ? newest : null,\n };\n }\n\n /**\n * Update cache configuration\n */\n updateConfig(newConfig: Partial<ETagCacheConfig>): void {\n this.config = { ...this.config, ...newConfig };\n logInfo('ETag cache configuration updated');\n }\n\n /**\n * Cleanup expired entries\n */\n cleanup(): number {\n const beforeSize = this.cache.size;\n\n for (const [url, entry] of this.cache.entries()) {\n if (this.isExpired(entry)) {\n this.cache.delete(url);\n }\n }\n\n const cleanedCount = beforeSize - this.cache.size;\n if (cleanedCount > 0) {\n logDebug(`Cleaned up ${cleanedCount} expired cache entries`);\n }\n\n return cleanedCount;\n }\n\n /**\n * Shutdown cache manager\n */\n shutdown(): void {\n if (this.cleanupTimer) {\n clearInterval(this.cleanupTimer);\n }\n logInfo('ETag cache manager shut down');\n }\n\n private isExpired(entry: CacheEntry): boolean {\n if (!entry.ttl) return false;\n return Date.now() - entry.timestamp > entry.ttl;\n }\n\n private evictOldest(): void {\n let oldestKey: string | null = null;\n let oldestTime = Infinity;\n\n for (const [key, entry] of this.cache.entries()) {\n if (entry.timestamp < oldestTime) {\n oldestTime = entry.timestamp;\n oldestKey = key;\n }\n }\n\n if (oldestKey) {\n this.cache.delete(oldestKey);\n logDebug(`Evicted oldest cache entry: ${oldestKey}`);\n }\n }\n\n private startCleanupTimer(): void {\n this.cleanupTimer = setInterval(() => {\n this.cleanup();\n }, this.config.cleanupInterval);\n // Don't prevent process exit (important for test runners and CLI tools)\n this.cleanupTimer.unref();\n }\n}\n","// Auto-generated from ESI OpenAPI spec — do not edit manually\n// Endpoints with rate limit groups: 146\n\nexport interface RateLimitGroupSpec {\n group: string;\n maxTokens: number;\n windowSizeMs: number;\n}\n\nexport const esiRateLimitGroups: Record<string, RateLimitGroupSpec> = {\n 'GET:alliances/{alliance_id}/contacts': { group: 'alliance-social', maxTokens: 300, windowSizeMs: 900000 },\n 'GET:alliances/{alliance_id}/contacts/labels': { group: 'alliance-social', maxTokens: 300, windowSizeMs: 900000 },\n 'GET:characters/{character_id}/agents_research': { group: 'char-industry', maxTokens: 600, windowSizeMs: 900000 },\n 'GET:characters/{character_id}/assets': { group: 'char-asset', maxTokens: 1800, windowSizeMs: 900000 },\n 'POST:characters/{character_id}/assets/locations': { group: 'char-asset', maxTokens: 1800, windowSizeMs: 900000 },\n 'POST:characters/{character_id}/assets/names': { group: 'char-asset', maxTokens: 1800, windowSizeMs: 900000 },\n 'GET:characters/{character_id}/attributes': { group: 'char-detail', maxTokens: 600, windowSizeMs: 900000 },\n 'GET:characters/{character_id}/blueprints': { group: 'char-industry', maxTokens: 600, windowSizeMs: 900000 },\n 'GET:characters/{character_id}/calendar': { group: 'char-social', maxTokens: 600, windowSizeMs: 900000 },\n 'GET:characters/{character_id}/calendar/{event_id}': { group: 'char-social', maxTokens: 600, windowSizeMs: 900000 },\n 'PUT:characters/{character_id}/calendar/{event_id}': { group: 'char-social', maxTokens: 600, windowSizeMs: 900000 },\n 'GET:characters/{character_id}/calendar/{event_id}/attendees': { group: 'char-social', maxTokens: 600, windowSizeMs: 900000 },\n 'GET:characters/{character_id}/clones': { group: 'char-location', maxTokens: 1200, windowSizeMs: 900000 },\n 'GET:characters/{character_id}/contacts': { group: 'char-social', maxTokens: 600, windowSizeMs: 900000 },\n 'POST:characters/{character_id}/contacts': { group: 'char-social', maxTokens: 600, windowSizeMs: 900000 },\n 'PUT:characters/{character_id}/contacts': { group: 'char-social', maxTokens: 600, windowSizeMs: 900000 },\n 'DELETE:characters/{character_id}/contacts': { group: 'char-social', maxTokens: 600, windowSizeMs: 900000 },\n 'GET:characters/{character_id}/contacts/labels': { group: 'char-social', maxTokens: 600, windowSizeMs: 900000 },\n 'GET:characters/{character_id}/contracts': { group: 'char-contract', maxTokens: 600, windowSizeMs: 900000 },\n 'GET:characters/{character_id}/contracts/{contract_id}/bids': { group: 'char-contract', maxTokens: 600, windowSizeMs: 900000 },\n 'GET:characters/{character_id}/contracts/{contract_id}/items': { group: 'char-contract', maxTokens: 600, windowSizeMs: 900000 },\n 'POST:characters/{character_id}/cspa': { group: 'char-detail', maxTokens: 600, windowSizeMs: 900000 },\n 'GET:characters/{character_id}/fatigue': { group: 'char-location', maxTokens: 1200, windowSizeMs: 900000 },\n 'GET:characters/{character_id}/fittings': { group: 'fitting', maxTokens: 150, windowSizeMs: 900000 },\n 'POST:characters/{character_id}/fittings': { group: 'fitting', maxTokens: 150, windowSizeMs: 900000 },\n 'DELETE:characters/{character_id}/fittings/{fitting_id}': { group: 'fitting', maxTokens: 150, windowSizeMs: 900000 },\n 'GET:characters/{character_id}/fleet': { group: 'fleet', maxTokens: 1800, windowSizeMs: 900000 },\n 'GET:characters/{character_id}/freelance-jobs': { group: 'char-freelance-job', maxTokens: 300, windowSizeMs: 900000 },\n 'GET:characters/{character_id}/freelance-jobs/{job_id}/participation': { group: 'char-freelance-job', maxTokens: 300, windowSizeMs: 900000 },\n 'GET:characters/{character_id}/fw/stats': { group: 'factional-warfare', maxTokens: 150, windowSizeMs: 900000 },\n 'GET:characters/{character_id}/implants': { group: 'char-detail', maxTokens: 600, windowSizeMs: 900000 },\n 'GET:characters/{character_id}/industry/jobs': { group: 'char-industry', maxTokens: 600, windowSizeMs: 900000 },\n 'GET:characters/{character_id}/killmails/recent': { group: 'char-killmail', maxTokens: 30, windowSizeMs: 900000 },\n 'GET:characters/{character_id}/location': { group: 'char-location', maxTokens: 1200, windowSizeMs: 900000 },\n 'GET:characters/{character_id}/loyalty/points': { group: 'char-wallet', maxTokens: 150, windowSizeMs: 900000 },\n 'GET:characters/{character_id}/mail': { group: 'char-social', maxTokens: 600, windowSizeMs: 900000 },\n 'POST:characters/{character_id}/mail': { group: 'char-social', maxTokens: 600, windowSizeMs: 900000 },\n 'GET:characters/{character_id}/mail/{mail_id}': { group: 'char-social', maxTokens: 600, windowSizeMs: 900000 },\n 'PUT:characters/{character_id}/mail/{mail_id}': { group: 'char-social', maxTokens: 600, windowSizeMs: 900000 },\n 'DELETE:characters/{character_id}/mail/{mail_id}': { group: 'char-social', maxTokens: 600, windowSizeMs: 900000 },\n 'GET:characters/{character_id}/mail/labels': { group: 'char-social', maxTokens: 600, windowSizeMs: 900000 },\n 'POST:characters/{character_id}/mail/labels': { group: 'char-social', maxTokens: 600, windowSizeMs: 900000 },\n 'DELETE:characters/{character_id}/mail/labels/{label_id}': { group: 'char-social', maxTokens: 600, windowSizeMs: 900000 },\n 'GET:characters/{character_id}/mail/lists': { group: 'char-social', maxTokens: 600, windowSizeMs: 900000 },\n 'GET:characters/{character_id}/medals': { group: 'char-detail', maxTokens: 600, windowSizeMs: 900000 },\n 'GET:characters/{character_id}/mining': { group: 'char-industry', maxTokens: 600, windowSizeMs: 900000 },\n 'GET:characters/{character_id}/notifications': { group: 'char-notification', maxTokens: 15, windowSizeMs: 900000 },\n 'GET:characters/{character_id}/notifications/contacts': { group: 'char-social', maxTokens: 600, windowSizeMs: 900000 },\n 'GET:characters/{character_id}/online': { group: 'char-location', maxTokens: 1200, windowSizeMs: 900000 },\n 'GET:characters/{character_id}/planets': { group: 'char-industry', maxTokens: 600, windowSizeMs: 900000 },\n 'GET:characters/{character_id}/planets/{planet_id}': { group: 'char-industry', maxTokens: 600, windowSizeMs: 900000 },\n 'GET:characters/{character_id}/portrait': { group: 'char-detail', maxTokens: 600, windowSizeMs: 900000 },\n 'GET:characters/{character_id}/roles': { group: 'char-detail', maxTokens: 600, windowSizeMs: 900000 },\n 'GET:characters/{character_id}/ship': { group: 'char-location', maxTokens: 1200, windowSizeMs: 900000 },\n 'GET:characters/{character_id}/skillqueue': { group: 'char-detail', maxTokens: 600, windowSizeMs: 900000 },\n 'GET:characters/{character_id}/skills': { group: 'char-detail', maxTokens: 600, windowSizeMs: 900000 },\n 'GET:characters/{character_id}/standings': { group: 'char-social', maxTokens: 600, windowSizeMs: 900000 },\n 'GET:characters/{character_id}/titles': { group: 'char-detail', maxTokens: 600, windowSizeMs: 900000 },\n 'GET:characters/{character_id}/wallet': { group: 'char-wallet', maxTokens: 150, windowSizeMs: 900000 },\n 'GET:characters/{character_id}/wallet/journal': { group: 'char-wallet', maxTokens: 150, windowSizeMs: 900000 },\n 'GET:characters/{character_id}/wallet/transactions': { group: 'char-wallet', maxTokens: 150, windowSizeMs: 900000 },\n 'GET:corporation/{corporation_id}/mining/extractions': { group: 'corp-industry', maxTokens: 600, windowSizeMs: 900000 },\n 'GET:corporation/{corporation_id}/mining/observers': { group: 'corp-industry', maxTokens: 600, windowSizeMs: 900000 },\n 'GET:corporation/{corporation_id}/mining/observers/{observer_id}': { group: 'corp-industry', maxTokens: 600, windowSizeMs: 900000 },\n 'GET:corporations/{corporation_id}/assets': { group: 'corp-asset', maxTokens: 1800, windowSizeMs: 900000 },\n 'POST:corporations/{corporation_id}/assets/locations': { group: 'corp-asset', maxTokens: 1800, windowSizeMs: 900000 },\n 'POST:corporations/{corporation_id}/assets/names': { group: 'corp-asset', maxTokens: 1800, windowSizeMs: 900000 },\n 'GET:corporations/{corporation_id}/blueprints': { group: 'corp-industry', maxTokens: 600, windowSizeMs: 900000 },\n 'GET:corporations/{corporation_id}/contacts': { group: 'corp-social', maxTokens: 300, windowSizeMs: 900000 },\n 'GET:corporations/{corporation_id}/contacts/labels': { group: 'corp-social', maxTokens: 300, windowSizeMs: 900000 },\n 'GET:corporations/{corporation_id}/containers/logs': { group: 'corp-structure', maxTokens: 300, windowSizeMs: 900000 },\n 'GET:corporations/{corporation_id}/contracts': { group: 'corp-contract', maxTokens: 600, windowSizeMs: 900000 },\n 'GET:corporations/{corporation_id}/contracts/{contract_id}/bids': { group: 'corp-contract', maxTokens: 600, windowSizeMs: 900000 },\n 'GET:corporations/{corporation_id}/contracts/{contract_id}/items': { group: 'corp-contract', maxTokens: 600, windowSizeMs: 900000 },\n 'GET:corporations/{corporation_id}/customs_offices': { group: 'corp-industry', maxTokens: 600, windowSizeMs: 900000 },\n 'GET:corporations/{corporation_id}/divisions': { group: 'corp-wallet', maxTokens: 300, windowSizeMs: 900000 },\n 'GET:corporations/{corporation_id}/facilities': { group: 'corp-structure', maxTokens: 300, windowSizeMs: 900000 },\n 'GET:corporations/{corporation_id}/freelance-jobs': { group: 'corp-freelance-job', maxTokens: 300, windowSizeMs: 900000 },\n 'GET:corporations/{corporation_id}/freelance-jobs/{job_id}/participants': { group: 'corp-freelance-job', maxTokens: 300, windowSizeMs: 900000 },\n 'GET:corporations/{corporation_id}/fw/stats': { group: 'factional-warfare', maxTokens: 150, windowSizeMs: 900000 },\n 'GET:corporations/{corporation_id}/industry/jobs': { group: 'corp-industry', maxTokens: 600, windowSizeMs: 900000 },\n 'GET:corporations/{corporation_id}/killmails/recent': { group: 'corp-killmail', maxTokens: 30, windowSizeMs: 900000 },\n 'GET:corporations/{corporation_id}/medals': { group: 'corp-detail', maxTokens: 300, windowSizeMs: 900000 },\n 'GET:corporations/{corporation_id}/medals/issued': { group: 'corp-detail', maxTokens: 300, windowSizeMs: 900000 },\n 'GET:corporations/{corporation_id}/members': { group: 'corp-member', maxTokens: 300, windowSizeMs: 900000 },\n 'GET:corporations/{corporation_id}/members/limit': { group: 'corp-member', maxTokens: 300, windowSizeMs: 900000 },\n 'GET:corporations/{corporation_id}/members/titles': { group: 'corp-member', maxTokens: 300, windowSizeMs: 900000 },\n 'GET:corporations/{corporation_id}/membertracking': { group: 'corp-member', maxTokens: 300, windowSizeMs: 900000 },\n 'GET:corporations/{corporation_id}/projects': { group: 'corp-project', maxTokens: 600, windowSizeMs: 900000 },\n 'GET:corporations/{corporation_id}/projects/{project_id}': { group: 'corp-project', maxTokens: 600, windowSizeMs: 900000 },\n 'GET:corporations/{corporation_id}/projects/{project_id}/contribution/{character_id}': { group: 'corp-project', maxTokens: 600, windowSizeMs: 900000 },\n 'GET:corporations/{corporation_id}/projects/{project_id}/contributors': { group: 'corp-project', maxTokens: 600, windowSizeMs: 900000 },\n 'GET:corporations/{corporation_id}/roles': { group: 'corp-member', maxTokens: 300, windowSizeMs: 900000 },\n 'GET:corporations/{corporation_id}/roles/history': { group: 'corp-member', maxTokens: 300, windowSizeMs: 900000 },\n 'GET:corporations/{corporation_id}/shareholders': { group: 'corp-detail', maxTokens: 300, windowSizeMs: 900000 },\n 'GET:corporations/{corporation_id}/standings': { group: 'corp-member', maxTokens: 300, windowSizeMs: 900000 },\n 'GET:corporations/{corporation_id}/starbases': { group: 'corp-structure', maxTokens: 300, windowSizeMs: 900000 },\n 'GET:corporations/{corporation_id}/starbases/{starbase_id}': { group: 'corp-structure', maxTokens: 300, windowSizeMs: 900000 },\n 'GET:corporations/{corporation_id}/structures': { group: 'corp-structure', maxTokens: 300, windowSizeMs: 900000 },\n 'GET:corporations/{corporation_id}/titles': { group: 'corp-detail', maxTokens: 300, windowSizeMs: 900000 },\n 'GET:corporations/{corporation_id}/wallets': { group: 'corp-wallet', maxTokens: 300, windowSizeMs: 900000 },\n 'GET:corporations/{corporation_id}/wallets/{division}/journal': { group: 'corp-wallet', maxTokens: 300, windowSizeMs: 900000 },\n 'GET:corporations/{corporation_id}/wallets/{division}/transactions': { group: 'corp-wallet', maxTokens: 300, windowSizeMs: 900000 },\n 'GET:fleets/{fleet_id}': { group: 'fleet', maxTokens: 1800, windowSizeMs: 900000 },\n 'PUT:fleets/{fleet_id}': { group: 'fleet', maxTokens: 1800, windowSizeMs: 900000 },\n 'GET:fleets/{fleet_id}/members': { group: 'fleet', maxTokens: 1800, windowSizeMs: 900000 },\n 'POST:fleets/{fleet_id}/members': { group: 'fleet', maxTokens: 1800, windowSizeMs: 900000 },\n 'PUT:fleets/{fleet_id}/members/{member_id}': { group: 'fleet', maxTokens: 1800, windowSizeMs: 900000 },\n 'DELETE:fleets/{fleet_id}/members/{member_id}': { group: 'fleet', maxTokens: 1800, windowSizeMs: 900000 },\n 'PUT:fleets/{fleet_id}/squads/{squad_id}': { group: 'fleet', maxTokens: 1800, windowSizeMs: 900000 },\n 'DELETE:fleets/{fleet_id}/squads/{squad_id}': { group: 'fleet', maxTokens: 1800, windowSizeMs: 900000 },\n 'GET:fleets/{fleet_id}/wings': { group: 'fleet', maxTokens: 1800, windowSizeMs: 900000 },\n 'POST:fleets/{fleet_id}/wings': { group: 'fleet', maxTokens: 1800, windowSizeMs: 900000 },\n 'PUT:fleets/{fleet_id}/wings/{wing_id}': { group: 'fleet', maxTokens: 1800, windowSizeMs: 900000 },\n 'DELETE:fleets/{fleet_id}/wings/{wing_id}': { group: 'fleet', maxTokens: 1800, windowSizeMs: 900000 },\n 'POST:fleets/{fleet_id}/wings/{wing_id}/squads': { group: 'fleet', maxTokens: 1800, windowSizeMs: 900000 },\n 'GET:freelance-jobs': { group: 'freelance-job', maxTokens: 900, windowSizeMs: 900000 },\n 'GET:freelance-jobs/{job_id}': { group: 'freelance-job', maxTokens: 900, windowSizeMs: 900000 },\n 'GET:fw/leaderboards': { group: 'factional-warfare', maxTokens: 150, windowSizeMs: 900000 },\n 'GET:fw/leaderboards/characters': { group: 'factional-warfare', maxTokens: 150, windowSizeMs: 900000 },\n 'GET:fw/leaderboards/corporations': { group: 'factional-warfare', maxTokens: 150, windowSizeMs: 900000 },\n 'GET:fw/stats': { group: 'factional-warfare', maxTokens: 150, windowSizeMs: 900000 },\n 'GET:fw/systems': { group: 'factional-warfare', maxTokens: 150, windowSizeMs: 900000 },\n 'GET:fw/wars': { group: 'factional-warfare', maxTokens: 150, windowSizeMs: 900000 },\n 'GET:incursions': { group: 'incursion', maxTokens: 150, windowSizeMs: 900000 },\n 'GET:industry/facilities': { group: 'industry', maxTokens: 150, windowSizeMs: 900000 },\n 'GET:industry/systems': { group: 'industry', maxTokens: 150, windowSizeMs: 900000 },\n 'GET:insurance/prices': { group: 'insurance', maxTokens: 150, windowSizeMs: 900000 },\n 'GET:killmails/{killmail_id}/{killmail_hash}': { group: 'killmail', maxTokens: 3600, windowSizeMs: 900000 },\n 'GET:markets/{region_id}/orders': { group: 'market-order', maxTokens: 12000, windowSizeMs: 900000 },\n 'GET:meta/changelog': { group: 'meta', maxTokens: 150, windowSizeMs: 900000 },\n 'GET:meta/compatibility-dates': { group: 'meta', maxTokens: 150, windowSizeMs: 900000 },\n 'GET:meta/status': { group: 'meta', maxTokens: 150, windowSizeMs: 900000 },\n 'POST:route/{origin_system_id}/{destination_system_id}': { group: 'routes', maxTokens: 3600, windowSizeMs: 900000 },\n 'GET:sovereignty/campaigns': { group: 'sovereignty', maxTokens: 600, windowSizeMs: 900000 },\n 'GET:sovereignty/map': { group: 'sovereignty', maxTokens: 600, windowSizeMs: 900000 },\n 'GET:sovereignty/structures': { group: 'sovereignty', maxTokens: 600, windowSizeMs: 900000 },\n 'GET:status': { group: 'status', maxTokens: 600, windowSizeMs: 900000 },\n 'POST:ui/autopilot/waypoint': { group: 'ui', maxTokens: 900, windowSizeMs: 900000 },\n 'POST:ui/openwindow/contract': { group: 'ui', maxTokens: 900, windowSizeMs: 900000 },\n 'POST:ui/openwindow/information': { group: 'ui', maxTokens: 900, windowSizeMs: 900000 },\n 'POST:ui/openwindow/marketdetails': { group: 'ui', maxTokens: 900, windowSizeMs: 900000 },\n 'POST:ui/openwindow/newmail': { group: 'ui', maxTokens: 900, windowSizeMs: 900000 },\n 'GET:wars': { group: 'killmail', maxTokens: 3600, windowSizeMs: 900000 },\n 'GET:wars/{war_id}': { group: 'killmail', maxTokens: 3600, windowSizeMs: 900000 },\n 'GET:wars/{war_id}/killmails': { group: 'killmail', maxTokens: 3600, windowSizeMs: 900000 },\n};\n","import { IRateLimiter, RateLimitGroupStatus } from './IRateLimiter';\nimport {\n esiRateLimitGroups,\n RateLimitGroupSpec,\n} from '../endpoints/esi-rate-limit-groups.generated';\nimport { camelToSnake } from '../util/stringUtil';\nimport { logWarn } from '../logger/loggerUtil';\nimport { sleep } from '../util/sleep';\nimport { EsiError } from '../util/error';\n\nexport interface RateLimitInfo {\n remaining: number;\n limit: number;\n used: number;\n group: string | null;\n errorLimitRemain: number;\n errorLimitReset: number;\n retryAfter: number | null;\n blockedUntil: number;\n}\n\nfunction getTokenCost(statusCode: number): number {\n if (statusCode >= 200 && statusCode < 300) return 2;\n if (statusCode >= 300 && statusCode < 400) return 1;\n if (statusCode >= 400 && statusCode < 500) return 5;\n if (statusCode >= 500 && statusCode < 600) return 0;\n return 2;\n}\n\nexport interface RateLimiterConfig {\n minDelayMs?: number;\n decelerationThreshold?: number;\n userKeyExtractor?: (headers: Record<string, string>) => string;\n}\n\ninterface GroupBucket {\n group: string;\n remaining: number;\n limit: number;\n used: number;\n windowSizeMs: number;\n blockedUntil: number;\n lastUpdated: number;\n}\n\ninterface ErrorLimitState {\n remain: number;\n reset: number;\n}\n\ninterface UserBucketSet {\n groups: Map<string, GroupBucket>;\n errorLimit: ErrorLimitState;\n lastAccessed: number;\n}\n\nconst DEFAULT_WINDOW_MS = 900_000;\nconst DEFAULT_ERROR_LIMIT: ErrorLimitState = { remain: 100, reset: 0 };\n\nexport class RateLimiter implements IRateLimiter {\n private readonly minDelayMs: number;\n private readonly decelerationThreshold: number;\n private readonly userKeyExtractor?: (\n headers: Record<string, string>,\n ) => string;\n\n private lastRequestTime: number = 0;\n private minDelayChain: Promise<void> = Promise.resolve();\n private isTestMode: boolean = false;\n\n private globalErrorLimit: ErrorLimitState = { ...DEFAULT_ERROR_LIMIT };\n\n private defaultBuckets: Map<string, GroupBucket> = new Map();\n private userBuckets: Map<string, UserBucketSet> | null = null;\n private fallbackBucket: GroupBucket;\n\n private lastCleanup: number = 0;\n private static readonly CLEANUP_INTERVAL_MS = 60_000;\n\n constructor(config?: RateLimiterConfig) {\n this.minDelayMs = config?.minDelayMs ?? 50;\n this.decelerationThreshold = config?.decelerationThreshold ?? 0.2;\n this.userKeyExtractor = config?.userKeyExtractor;\n if (this.userKeyExtractor) {\n this.userBuckets = new Map();\n }\n this.fallbackBucket = this.createFallbackBucket();\n }\n\n private createFallbackBucket(): GroupBucket {\n return {\n group: '__fallback__',\n remaining: -1,\n limit: 0,\n used: 0,\n windowSizeMs: DEFAULT_WINDOW_MS,\n blockedUntil: 0,\n lastUpdated: 0,\n };\n }\n\n private createBucketFromSpec(spec: RateLimitGroupSpec): GroupBucket {\n return {\n group: spec.group,\n remaining: spec.maxTokens,\n limit: spec.maxTokens,\n used: 0,\n windowSizeMs: spec.windowSizeMs,\n blockedUntil: 0,\n lastUpdated: 0,\n };\n }\n\n private createBucketForGroup(groupName: string): GroupBucket {\n return {\n group: groupName,\n remaining: -1,\n limit: 0,\n used: 0,\n windowSizeMs: DEFAULT_WINDOW_MS,\n blockedUntil: 0,\n lastUpdated: 0,\n };\n }\n\n private lookupGroupSpec(\n method?: string,\n templatePath?: string,\n ): RateLimitGroupSpec | undefined {\n if (!templatePath || !method) return undefined;\n const normalized = templatePath\n .replace(/\\/$/, '')\n .replace(/\\{(\\w+)\\}/g, (_, name: string) => `{${camelToSnake(name)}}`);\n const key = `${method}:${normalized}`;\n return esiRateLimitGroups[key];\n }\n\n private resolveUserSet(\n requestHeaders?: Record<string, string>,\n ): UserBucketSet | null {\n if (!this.userBuckets || !this.userKeyExtractor || !requestHeaders) {\n return null;\n }\n\n const userKey = this.userKeyExtractor(requestHeaders);\n let userSet = this.userBuckets.get(userKey);\n if (!userSet) {\n userSet = {\n groups: new Map(),\n errorLimit: { ...DEFAULT_ERROR_LIMIT },\n lastAccessed: Date.now(),\n };\n this.userBuckets.set(userKey, userSet);\n }\n userSet.lastAccessed = Date.now();\n return userSet;\n }\n\n private resolveBucketMap(\n requestHeaders?: Record<string, string>,\n ): Map<string, GroupBucket> {\n const userSet = this.resolveUserSet(requestHeaders);\n return userSet ? userSet.groups : this.defaultBuckets;\n }\n\n private resolveErrorLimit(\n requestHeaders?: Record<string, string>,\n ): ErrorLimitState {\n const userSet = this.resolveUserSet(requestHeaders);\n return userSet ? userSet.errorLimit : this.globalErrorLimit;\n }\n\n private getBucket(\n templatePath?: string,\n method?: string,\n requestHeaders?: Record<string, string>,\n groupNameOverride?: string,\n ): GroupBucket {\n const bucketMap = this.resolveBucketMap(requestHeaders);\n\n const spec = this.lookupGroupSpec(method, templatePath);\n const groupName = groupNameOverride ?? spec?.group;\n\n if (!groupName) return this.fallbackBucket;\n\n let bucket = bucketMap.get(groupName);\n if (!bucket) {\n bucket = spec\n ? this.createBucketFromSpec(spec)\n : this.createBucketForGroup(groupName);\n bucketMap.set(groupName, bucket);\n }\n return bucket;\n }\n\n private cleanupStaleUsers(): void {\n if (!this.userBuckets) return;\n const now = Date.now();\n if (now - this.lastCleanup < RateLimiter.CLEANUP_INTERVAL_MS) return;\n this.lastCleanup = now;\n\n for (const [userKey, userSet] of this.userBuckets) {\n if (now - userSet.lastAccessed > DEFAULT_WINDOW_MS) {\n this.userBuckets.delete(userKey);\n }\n }\n }\n\n updateFromResponse(\n headers: Record<string, string>,\n statusCode: number,\n templatePath?: string,\n method?: string,\n requestHeaders?: Record<string, string>,\n ): void {\n if (this.isTestMode) return;\n\n const responseGroup = headers['x-ratelimit-group'] || undefined;\n const bucket = this.getBucket(\n templatePath,\n method,\n requestHeaders,\n responseGroup,\n );\n\n if ('x-ratelimit-remaining' in headers) {\n bucket.remaining = parseInt(headers['x-ratelimit-remaining'], 10);\n }\n if ('x-ratelimit-limit' in headers) {\n bucket.limit = parseInt(headers['x-ratelimit-limit'], 10);\n }\n if ('x-ratelimit-used' in headers) {\n bucket.used = parseInt(headers['x-ratelimit-used'], 10);\n }\n bucket.lastUpdated = Date.now();\n\n if ('retry-after' in headers) {\n const retrySeconds = parseInt(headers['retry-after'], 10);\n bucket.blockedUntil = Date.now() + retrySeconds * 1000;\n }\n\n if (statusCode === 420 || statusCode === 429) {\n if (bucket.blockedUntil <= Date.now()) {\n bucket.blockedUntil = Date.now() + 60_000;\n }\n }\n\n const errorLimit = this.resolveErrorLimit(requestHeaders);\n if ('x-esi-error-limit-remain' in headers) {\n errorLimit.remain = parseInt(headers['x-esi-error-limit-remain'], 10);\n }\n if ('x-esi-error-limit-reset' in headers) {\n errorLimit.reset = parseInt(headers['x-esi-error-limit-reset'], 10);\n }\n }\n\n updateRateLimitInfo(headers: Record<string, string>): void {\n this.updateFromResponse(headers, 200);\n }\n\n async checkRateLimit(\n templatePath?: string,\n method?: string,\n requestHeaders?: Record<string, string>,\n ): Promise<void> {\n if (this.isTestMode) return;\n\n this.cleanupStaleUsers();\n\n // Re-check after sleeping on a block so a concurrent response that\n // re-blocked the group is respected (bounded to avoid infinite waits).\n let stillBlockedBucket: GroupBucket | undefined;\n for (let i = 0; i < 10; i++) {\n const bucket = this.getBucket(templatePath, method, requestHeaders);\n const now = Date.now();\n if (bucket.blockedUntil <= now) {\n stillBlockedBucket = undefined;\n break;\n }\n stillBlockedBucket = bucket;\n const waitedUntil = bucket.blockedUntil;\n const waitTime = waitedUntil - now;\n logWarn(\n `[ESI Rate Limit] Group '${bucket.group}' blocked for ${Math.ceil(waitTime / 1000)}s (420/429 received)`,\n );\n await sleep(waitTime);\n // Clear the block we waited for; leave intact if another response extended it\n if (bucket.blockedUntil <= waitedUntil) {\n bucket.blockedUntil = 0;\n }\n }\n // Never proceed while still blocked: if concurrent responses kept\n // re-extending blockedUntil past the retry budget above, fail fast\n // with a retryable rate-limit error rather than sending the request.\n if (stillBlockedBucket && stillBlockedBucket.blockedUntil > Date.now()) {\n const waitTime = stillBlockedBucket.blockedUntil - Date.now();\n logWarn(\n `[ESI Rate Limit] Group '${stillBlockedBucket.group}' still blocked after retry budget exhausted; aborting request instead of sending while blocked`,\n );\n throw new EsiError(\n 429,\n `Rate limit group '${stillBlockedBucket.group}' still blocked for ${Math.ceil(waitTime / 1000)}s`,\n );\n }\n\n const errorLimit = this.resolveErrorLimit(requestHeaders);\n if (errorLimit.remain <= 10 && errorLimit.remain > 0) {\n const resetMs = errorLimit.reset * 1000;\n const delay = Math.min(resetMs, 5000);\n if (delay > 0) {\n logWarn(\n `[ESI Rate Limit] Legacy error limit low (${errorLimit.remain}), waiting ${delay}ms`,\n );\n await sleep(delay);\n }\n } else if (errorLimit.remain <= 0 && errorLimit.reset > 0) {\n const waitTime = errorLimit.reset * 1000;\n logWarn(\n `[ESI Rate Limit] Legacy error limit exhausted, waiting ${Math.ceil(waitTime / 1000)}s`,\n );\n await sleep(waitTime);\n }\n\n const bucket = this.getBucket(templatePath, method, requestHeaders);\n if (bucket.remaining >= 0 && bucket.limit > 0) {\n const ratio = bucket.remaining / bucket.limit;\n\n if (bucket.remaining <= 0) {\n logWarn(\n `[ESI Rate Limit] Group '${bucket.group}' token bucket empty, waiting 1s`,\n );\n await sleep(1000);\n } else if (ratio <= this.decelerationThreshold) {\n const extraDelay = Math.ceil(\n (1 - ratio / this.decelerationThreshold) * 1000,\n );\n await sleep(extraDelay);\n }\n }\n\n await this.enforceMinDelay();\n }\n\n /**\n * Serializes min-delay waits so concurrent callers cannot all read the same\n * lastRequestTime and fire together after sleeping.\n */\n private async enforceMinDelay(): Promise<void> {\n if (this.isTestMode) {\n this.lastRequestTime = Date.now();\n return;\n }\n\n const run = async (): Promise<void> => {\n const now = Date.now();\n const timeSinceLastRequest = now - this.lastRequestTime;\n if (timeSinceLastRequest < this.minDelayMs) {\n await sleep(this.minDelayMs - timeSinceLastRequest);\n }\n this.lastRequestTime = Date.now();\n };\n\n const scheduled = this.minDelayChain.then(run, run);\n this.minDelayChain = scheduled.then(\n () => undefined,\n () => undefined,\n );\n await scheduled;\n }\n\n getStatus(): RateLimitInfo {\n let worstBucket = this.fallbackBucket;\n let worstRatio = Infinity;\n\n const checkBucket = (bucket: GroupBucket): void => {\n if (bucket.limit > 0) {\n const ratio = bucket.remaining / bucket.limit;\n if (ratio < worstRatio) {\n worstRatio = ratio;\n worstBucket = bucket;\n }\n }\n };\n\n for (const bucket of this.defaultBuckets.values()) {\n checkBucket(bucket);\n }\n\n if (this.userBuckets) {\n for (const userSet of this.userBuckets.values()) {\n for (const bucket of userSet.groups.values()) {\n checkBucket(bucket);\n }\n }\n }\n\n return {\n remaining: worstBucket.remaining,\n limit: worstBucket.limit,\n used: worstBucket.used,\n group: worstBucket.group === '__fallback__' ? null : worstBucket.group,\n errorLimitRemain: this.globalErrorLimit.remain,\n errorLimitReset: this.globalErrorLimit.reset,\n retryAfter:\n worstBucket.blockedUntil > Date.now()\n ? Math.ceil((worstBucket.blockedUntil - Date.now()) / 1000)\n : null,\n blockedUntil: worstBucket.blockedUntil,\n };\n }\n\n getGroupStatus(group: string): RateLimitGroupStatus | undefined {\n const bucket = this.defaultBuckets.get(group);\n if (!bucket) return undefined;\n return {\n group: bucket.group,\n remaining: bucket.remaining,\n limit: bucket.limit,\n used: bucket.used,\n windowSizeMs: bucket.windowSizeMs,\n blockedUntil: bucket.blockedUntil,\n };\n }\n\n getAllGroupStatuses(): Map<string, RateLimitGroupStatus> {\n const result = new Map<string, RateLimitGroupStatus>();\n for (const [name, bucket] of this.defaultBuckets) {\n result.set(name, {\n group: bucket.group,\n remaining: bucket.remaining,\n limit: bucket.limit,\n used: bucket.used,\n windowSizeMs: bucket.windowSizeMs,\n blockedUntil: bucket.blockedUntil,\n });\n }\n return result;\n }\n\n static getTokenCost(statusCode: number): number {\n return getTokenCost(statusCode);\n }\n\n isBlocked(group?: string): boolean {\n const now = Date.now();\n\n if (group) {\n const bucket = this.defaultBuckets.get(group);\n return bucket ? bucket.blockedUntil > now : false;\n }\n\n if (this.fallbackBucket.blockedUntil > now) return true;\n for (const bucket of this.defaultBuckets.values()) {\n if (bucket.blockedUntil > now) return true;\n }\n return false;\n }\n\n setTestMode(enabled: boolean): void {\n this.isTestMode = enabled;\n }\n\n reset(): void {\n this.defaultBuckets.clear();\n if (this.userBuckets) this.userBuckets.clear();\n this.fallbackBucket = this.createFallbackBucket();\n this.globalErrorLimit = { ...DEFAULT_ERROR_LIMIT };\n this.lastRequestTime = 0;\n this.minDelayChain = Promise.resolve();\n this.lastCleanup = 0;\n }\n}\n","import { logDebug } from './logger/loggerUtil';\nimport { IDeduplicator } from './IDeduplicator';\n\nexport class RequestDeduplicator implements IDeduplicator {\n private inflight = new Map<string, Promise<unknown>>();\n\n async dedupe<T>(key: string, execute: () => Promise<T>): Promise<T> {\n const existing = this.inflight.get(key);\n if (existing) {\n logDebug(`[Dedup] Coalescing request: ${key}`);\n return existing as Promise<T>;\n }\n\n const promise = execute().finally(() => {\n this.inflight.delete(key);\n });\n\n this.inflight.set(key, promise);\n return promise;\n }\n\n get pending(): number {\n return this.inflight.size;\n }\n\n clear(): void {\n this.inflight.clear();\n }\n}\n","import { ApiClient } from './ApiClient';\nimport { ETagCacheManager } from './cache/ETagCacheManager';\nimport { CircuitBreaker } from './circuitBreaker/CircuitBreaker';\nimport { RateLimiter } from './rateLimiter/RateLimiter';\nimport { RequestDeduplicator } from './RequestDeduplicator';\nimport type { EsiClientConfig } from '../EsiClient';\n\nexport interface ConfigureApiClientResult {\n deduplicator: RequestDeduplicator | null;\n}\n\n/**\n * Configures an existing ApiClient with the full middleware stack\n * based on an EsiClientConfig. This is the single source of truth\n * for how config maps to middleware — used by EsiClient,\n * CustomEsiClient, and EsiApiFactory.\n *\n * The caller is responsible for creating the ApiClient (with baseUrl,\n * clientId, accessToken) and setting datasource/language/tokenProvider\n * before calling this function, since those vary by construction surface.\n */\nexport function configureApiClient(\n client: ApiClient,\n config?: EsiClientConfig,\n): ConfigureApiClientResult {\n let deduplicator: RequestDeduplicator | null = null;\n\n // Rate limiter (always)\n client.setRateLimiter(new RateLimiter(config?.rateLimiterConfig));\n\n // Request deduplication (on by default)\n if (config?.enableRequestDeduplication !== false) {\n deduplicator = new RequestDeduplicator();\n client.setDeduplicator(deduplicator);\n }\n\n // ETag cache (on by default)\n if (config?.enableETagCache !== false) {\n client.setCache(new ETagCacheManager(config?.etagCacheConfig));\n }\n\n // Circuit breaker (off by default, opt-in)\n if (config?.enableCircuitBreaker) {\n client.setCircuitBreaker(new CircuitBreaker(config.circuitBreakerConfig));\n }\n\n // Retry config — default to 3 retries with exponential backoff so that\n // transient ESI failures (502/503/504) are handled automatically.\n if (config?.retryConfig) {\n client.setRetryConfig(config.retryConfig);\n } else if (config?.retryAttempts !== undefined) {\n client.setRetryConfig({ maxRetries: config.retryAttempts });\n } else {\n client.setRetryConfig({\n maxRetries: 3,\n baseDelayMs: 1000,\n maxDelayMs: 30000,\n });\n }\n\n // Retry strategy\n if (config?.retryStrategy) {\n client.setRetryStrategy(config.retryStrategy);\n }\n\n // Interceptors\n if (config?.requestInterceptors) {\n for (const interceptor of config.requestInterceptors) {\n client.addRequestInterceptor(interceptor);\n }\n }\n if (config?.responseInterceptors) {\n for (const interceptor of config.responseInterceptors) {\n client.addResponseInterceptor(interceptor);\n }\n }\n\n // Validate response\n if (config?.validateResponse !== undefined) {\n client.setValidateResponse(config.validateResponse);\n }\n\n // Validate request (opt-in, default false)\n if (config?.validateRequest !== undefined) {\n client.setValidateRequest(config.validateRequest);\n }\n\n // Timeout\n if (config?.timeout !== undefined) {\n client.setTimeout(config.timeout);\n }\n\n return { deduplicator };\n}\n","import { ApiClient, TokenProvider } from './core/ApiClient';\nimport {\n RequestInterceptor,\n ResponseInterceptor,\n} from './core/middleware/Middleware';\nimport { createClientInstance, ApiClientType } from './core/ClientRegistry';\nimport { AllianceClient } from './clients/AllianceClient';\nimport { AssetsClient } from './clients/AssetsClient';\nimport { CalendarClient } from './clients/CalendarClient';\nimport { CharacterClient } from './clients/CharacterClient';\nimport { ClonesClient } from './clients/ClonesClient';\nimport { ContactsClient } from './clients/ContactsClient';\nimport { ContractsClient } from './clients/ContractsClient';\nimport { CorporationsClient } from './clients/CorporationsClient';\nimport { CorporationProjectsClient } from './clients/CorporationProjectsClient';\nimport { DogmaClient } from './clients/DogmaClient';\nimport { FactionClient } from './clients/FactionClient';\nimport { FittingsClient } from './clients/FittingsClient';\nimport { FleetClient } from './clients/FleetClient';\nimport { IncursionsClient } from './clients/IncursionsClient';\nimport { IndustryClient } from './clients/IndustryClient';\nimport { InsuranceClient } from './clients/InsuranceClient';\nimport { KillmailsClient } from './clients/KillmailsClient';\nimport { LocationClient } from './clients/LocationClient';\nimport { LoyaltyClient } from './clients/LoyaltyClient';\nimport { MailClient } from './clients/MailClient';\nimport { MarketClient } from './clients/MarketClient';\nimport { PiClient } from './clients/PiClient';\nimport { RouteClient } from './clients/RouteClient';\nimport { SearchClient } from './clients/SearchClient';\nimport { CharacterSkillsClient } from './clients/SkillsClient';\nimport { SovereigntyClient } from './clients/SovereigntyClient';\nimport { StatusClient } from './clients/StatusClient';\nimport { UiClient } from './clients/UiClient';\nimport { UniverseClient } from './clients/UniverseClient';\nimport { WalletClient } from './clients/WalletClient';\nimport { WarsClient } from './clients/WarsClient';\nimport { MetaClient } from './clients/MetaClient';\nimport { FreelanceJobsClient } from './clients/FreelanceJobsClient';\nimport { SkyhooksClient } from './clients/SkyhooksClient';\nimport { MercenaryClient } from './clients/MercenaryClient';\nimport { AccessListsClient } from './clients/AccessListsClient';\nimport { MilitaryCampaignsClient } from './clients/MilitaryCampaignsClient';\nimport { validateBaseUrl } from './core/util/validation';\nimport {\n ETagCacheManager,\n ETagCacheConfig,\n} from './core/cache/ETagCacheManager';\nimport { CircuitBreakerConfig } from './core/circuitBreaker/CircuitBreaker';\nimport { RateLimiterConfig } from './core/rateLimiter/RateLimiter';\nimport { RequestDeduplicator } from './core/RequestDeduplicator';\nimport { RetryConfig } from './core/util/retry';\nimport { IRetryStrategy } from './core/IRetryStrategy';\nimport { EsiDiagnostics } from './core/EsiDiagnostics';\nimport {\n batchFetch,\n batchPost,\n BatchOptions,\n BatchResult,\n} from './core/BatchRequestHandler';\nimport { configureApiClient } from './core/configureApiClient';\nimport logger from './core/logger/logger';\n\nexport type EsiDatasource = 'tranquility' | 'singularity';\n\nexport interface EsiClientConfig {\n clientId?: string;\n baseUrl?: string;\n accessToken?: string;\n datasource?: EsiDatasource;\n onTokenRefresh?: TokenProvider;\n timeout?: number;\n retryAttempts?: number;\n retryConfig?: RetryConfig;\n retryStrategy?: IRetryStrategy;\n enableETagCache?: boolean;\n etagCacheConfig?: ETagCacheConfig;\n enableCircuitBreaker?: boolean;\n circuitBreakerConfig?: CircuitBreakerConfig;\n unsafeAllowCustomHost?: boolean;\n enableRequestDeduplication?: boolean;\n language?: string;\n compatibilityDate?: string;\n rateLimiterConfig?: RateLimiterConfig;\n requestInterceptors?: RequestInterceptor[];\n responseInterceptors?: ResponseInterceptor[];\n validateResponse?: boolean;\n validateRequest?: boolean;\n}\n\nexport class EsiClient {\n private apiClient: ApiClient;\n private clients: Map<string, unknown> = new Map();\n private etagCacheEnabled: boolean;\n private _diagnostics: EsiDiagnostics | null = null;\n private deduplicator: RequestDeduplicator | null = null;\n\n constructor(config?: EsiClientConfig) {\n const token = config?.accessToken || process.env.ESI_ACCESS_TOKEN;\n const baseUrl = validateBaseUrl(\n config?.baseUrl || process.env.ESI_BASE_URL || 'https://esi.evetech.net',\n config?.unsafeAllowCustomHost,\n );\n this.apiClient = new ApiClient(\n config?.clientId || process.env.ESI_CLIENT_ID || 'esi-client',\n baseUrl,\n token,\n );\n\n const datasource =\n config?.datasource ||\n (process.env.ESI_DATASOURCE as EsiDatasource | undefined);\n if (datasource) {\n this.apiClient.setDatasource(datasource);\n }\n\n if (config?.language) {\n this.apiClient.setLanguage(config.language);\n }\n\n if (config?.compatibilityDate) {\n this.apiClient.setCompatibilityDate(config.compatibilityDate);\n }\n\n if (config?.onTokenRefresh) {\n this.apiClient.setTokenProvider(config.onTokenRefresh);\n }\n\n const result = configureApiClient(this.apiClient, config);\n this.deduplicator = result.deduplicator;\n this.etagCacheEnabled = config?.enableETagCache !== false;\n\n logger.info('EsiClient initialized successfully');\n }\n\n private getClient<T>(name: ApiClientType): T {\n if (!this.clients.has(name)) {\n this.clients.set(name, createClientInstance(name, this.apiClient));\n }\n return this.clients.get(name) as T;\n }\n\n // Domain client accessors\n get alliance(): AllianceClient {\n return this.getClient('alliance');\n }\n get assets(): AssetsClient {\n return this.getClient('assets');\n }\n get calendar(): CalendarClient {\n return this.getClient('calendar');\n }\n get characters(): CharacterClient {\n return this.getClient('characters');\n }\n get clones(): ClonesClient {\n return this.getClient('clones');\n }\n get contacts(): ContactsClient {\n return this.getClient('contacts');\n }\n get contracts(): ContractsClient {\n return this.getClient('contracts');\n }\n get corporations(): CorporationsClient {\n return this.getClient('corporations');\n }\n get corporationProjects(): CorporationProjectsClient {\n return this.getClient('corporationProjects');\n }\n get dogma(): DogmaClient {\n return this.getClient('dogma');\n }\n get factions(): FactionClient {\n return this.getClient('factions');\n }\n get fittings(): FittingsClient {\n return this.getClient('fittings');\n }\n get fleets(): FleetClient {\n return this.getClient('fleets');\n }\n get incursions(): IncursionsClient {\n return this.getClient('incursions');\n }\n get industry(): IndustryClient {\n return this.getClient('industry');\n }\n get insurance(): InsuranceClient {\n return this.getClient('insurance');\n }\n get killmails(): KillmailsClient {\n return this.getClient('killmails');\n }\n get location(): LocationClient {\n return this.getClient('location');\n }\n get loyalty(): LoyaltyClient {\n return this.getClient('loyalty');\n }\n get mail(): MailClient {\n return this.getClient('mail');\n }\n get market(): MarketClient {\n return this.getClient('market');\n }\n get pi(): PiClient {\n return this.getClient('pi');\n }\n get route(): RouteClient {\n return this.getClient('route');\n }\n get search(): SearchClient {\n return this.getClient('search');\n }\n get skills(): CharacterSkillsClient {\n return this.getClient('skills');\n }\n get sovereignty(): SovereigntyClient {\n return this.getClient('sovereignty');\n }\n get status(): StatusClient {\n return this.getClient('status');\n }\n get ui(): UiClient {\n return this.getClient('ui');\n }\n get universe(): UniverseClient {\n return this.getClient('universe');\n }\n get wallet(): WalletClient {\n return this.getClient('wallet');\n }\n get wars(): WarsClient {\n return this.getClient('wars');\n }\n get meta(): MetaClient {\n return this.getClient('meta');\n }\n get freelanceJobs(): FreelanceJobsClient {\n return this.getClient('freelanceJobs');\n }\n get skyhooks(): SkyhooksClient {\n return this.getClient('skyhooks');\n }\n get mercenary(): MercenaryClient {\n return this.getClient('mercenary');\n }\n get militaryCampaigns(): MilitaryCampaignsClient {\n return this.getClient('militaryCampaigns');\n }\n get accessLists(): AccessListsClient {\n return this.getClient('accessLists');\n }\n\n addRequestInterceptor(fn: RequestInterceptor): () => void {\n return this.apiClient.addRequestInterceptor(fn);\n }\n\n addResponseInterceptor(fn: ResponseInterceptor): () => void {\n return this.apiClient.addResponseInterceptor(fn);\n }\n\n setAccessToken(token: string): void {\n this.apiClient.setAccessToken(token);\n logger.info('Access token updated');\n }\n\n setTokenProvider(provider: TokenProvider | undefined): void {\n this.apiClient.setTokenProvider(provider);\n logger.info(\n provider ? 'Token provider configured' : 'Token provider removed',\n );\n }\n\n get diagnostics(): EsiDiagnostics {\n if (!this._diagnostics) {\n this._diagnostics = new EsiDiagnostics(\n this.apiClient,\n this.etagCacheEnabled,\n this.deduplicator,\n );\n }\n return this._diagnostics;\n }\n\n getCacheStats() {\n return this.diagnostics.getCacheStats();\n }\n\n clearCache(): void {\n this.diagnostics.clearCache();\n }\n\n updateCacheConfig(newConfig: Partial<ETagCacheConfig>): void {\n this.diagnostics.updateCacheConfig(newConfig);\n }\n\n getCircuitBreakerStats() {\n return this.diagnostics.getCircuitBreakerStats();\n }\n\n resetCircuitBreaker(endpoint?: string): void {\n this.diagnostics.resetCircuitBreaker(endpoint);\n }\n\n async batch<K, T>(\n keys: K[],\n fetcher: (key: K) => Promise<T>,\n options?: BatchOptions,\n ): Promise<BatchResult<K, T>> {\n return batchFetch(keys, fetcher, options);\n }\n\n async batchPost<T>(\n ids: number[],\n poster: (chunk: number[]) => Promise<T[]>,\n chunkSize?: number,\n ): Promise<T[]> {\n return batchPost(ids, poster, chunkSize);\n }\n\n shutdown(): void {\n const cache = this.apiClient.getCache();\n if (cache) {\n (cache as ETagCacheManager).shutdown();\n }\n const cb = this.apiClient.getCircuitBreaker();\n if (cb) {\n cb.shutdown();\n }\n if (this.deduplicator) {\n this.deduplicator.clear();\n }\n this.clients.clear();\n logger.info('EsiClient shutdown completed');\n }\n}\n\nlet _defaultClient: EsiClient | null = null;\nexport function getDefaultClient(): EsiClient {\n if (!_defaultClient) {\n _defaultClient = new EsiClient();\n }\n return _defaultClient;\n}\n","import { ApiClient } from './core/ApiClient';\nimport { validateBaseUrl } from './core/util/validation';\nimport {\n ApiClientType,\n ClientInstance,\n createClientInstance,\n AllianceClient,\n AssetsClient,\n CalendarClient,\n CharacterClient,\n ClonesClient,\n ContactsClient,\n ContractsClient,\n CorporationsClient,\n DogmaClient,\n FactionClient,\n FittingsClient,\n FleetClient,\n IncursionsClient,\n IndustryClient,\n InsuranceClient,\n KillmailsClient,\n LocationClient,\n LoyaltyClient,\n MailClient,\n MarketClient,\n PiClient,\n RouteClient,\n SearchClient,\n CharacterSkillsClient,\n SovereigntyClient,\n StatusClient,\n UiClient,\n UniverseClient,\n WalletClient,\n WarsClient,\n MetaClient,\n FreelanceJobsClient,\n SkyhooksClient,\n MercenaryClient,\n AccessListsClient,\n} from './core/ClientRegistry';\nimport { EsiClientConfig } from './EsiClient';\nimport { configureApiClient } from './core/configureApiClient';\nimport { ETagCacheManager } from './core/cache/ETagCacheManager';\nimport { RequestDeduplicator } from './core/RequestDeduplicator';\nimport logger from './core/logger/logger';\n\nexport { ApiClientType, ClientInstance };\n\nexport class CustomEsiClient {\n private apiClient: ApiClient;\n private clients: Map<string, ClientInstance> = new Map();\n private enabledClients: Set<ApiClientType>;\n private deduplicator: RequestDeduplicator | null = null;\n\n constructor(config: EsiClientConfig & { clients: ApiClientType[] }) {\n this.enabledClients = new Set(config.clients);\n const baseUrl = validateBaseUrl(\n config.baseUrl || process.env.ESI_BASE_URL || 'https://esi.evetech.net',\n config.unsafeAllowCustomHost,\n );\n this.apiClient = new ApiClient(\n config.clientId || process.env.ESI_CLIENT_ID || 'esi-custom-client',\n baseUrl,\n config.accessToken || process.env.ESI_ACCESS_TOKEN,\n );\n\n if (config.language) {\n this.apiClient.setLanguage(config.language);\n }\n\n if (config.compatibilityDate) {\n this.apiClient.setCompatibilityDate(config.compatibilityDate);\n }\n\n if (config.onTokenRefresh) {\n this.apiClient.setTokenProvider(config.onTokenRefresh);\n }\n\n const datasource = config.datasource;\n if (datasource) {\n this.apiClient.setDatasource(datasource);\n }\n\n const result = configureApiClient(this.apiClient, config);\n this.deduplicator = result.deduplicator;\n\n for (const name of this.enabledClients) {\n this.clients.set(name, createClientInstance(name, this.apiClient));\n }\n\n logger.info(\n `CustomEsiClient initialized with clients: ${config.clients.join(', ')}`,\n );\n }\n\n getClient(clientType: ApiClientType): ClientInstance | undefined {\n return this.clients.get(clientType);\n }\n\n hasClient(clientType: ApiClientType): boolean {\n return this.clients.has(clientType);\n }\n\n getEnabledClients(): ApiClientType[] {\n return Array.from(this.enabledClients);\n }\n\n get alliance(): AllianceClient | undefined {\n return this.getClient('alliance') as AllianceClient;\n }\n get assets(): AssetsClient | undefined {\n return this.getClient('assets') as AssetsClient;\n }\n get calendar(): CalendarClient | undefined {\n return this.getClient('calendar') as CalendarClient;\n }\n get characters(): CharacterClient | undefined {\n return this.getClient('characters') as CharacterClient;\n }\n get clones(): ClonesClient | undefined {\n return this.getClient('clones') as ClonesClient;\n }\n get contacts(): ContactsClient | undefined {\n return this.getClient('contacts') as ContactsClient;\n }\n get contracts(): ContractsClient | undefined {\n return this.getClient('contracts') as ContractsClient;\n }\n get corporations(): CorporationsClient | undefined {\n return this.getClient('corporations') as CorporationsClient;\n }\n get dogma(): DogmaClient | undefined {\n return this.getClient('dogma') as DogmaClient;\n }\n get factions(): FactionClient | undefined {\n return this.getClient('factions') as FactionClient;\n }\n get fittings(): FittingsClient | undefined {\n return this.getClient('fittings') as FittingsClient;\n }\n get fleets(): FleetClient | undefined {\n return this.getClient('fleets') as FleetClient;\n }\n get incursions(): IncursionsClient | undefined {\n return this.getClient('incursions') as IncursionsClient;\n }\n get industry(): IndustryClient | undefined {\n return this.getClient('industry') as IndustryClient;\n }\n get insurance(): InsuranceClient | undefined {\n return this.getClient('insurance') as InsuranceClient;\n }\n get killmails(): KillmailsClient | undefined {\n return this.getClient('killmails') as KillmailsClient;\n }\n get location(): LocationClient | undefined {\n return this.getClient('location') as LocationClient;\n }\n get loyalty(): LoyaltyClient | undefined {\n return this.getClient('loyalty') as LoyaltyClient;\n }\n get mail(): MailClient | undefined {\n return this.getClient('mail') as MailClient;\n }\n get market(): MarketClient | undefined {\n return this.getClient('market') as MarketClient;\n }\n get pi(): PiClient | undefined {\n return this.getClient('pi') as PiClient;\n }\n get route(): RouteClient | undefined {\n return this.getClient('route') as RouteClient;\n }\n get search(): SearchClient | undefined {\n return this.getClient('search') as SearchClient;\n }\n get skills(): CharacterSkillsClient | undefined {\n return this.getClient('skills') as CharacterSkillsClient;\n }\n get sovereignty(): SovereigntyClient | undefined {\n return this.getClient('sovereignty') as SovereigntyClient;\n }\n get status(): StatusClient | undefined {\n return this.getClient('status') as StatusClient;\n }\n get ui(): UiClient | undefined {\n return this.getClient('ui') as UiClient;\n }\n get universe(): UniverseClient | undefined {\n return this.getClient('universe') as UniverseClient;\n }\n get wallet(): WalletClient | undefined {\n return this.getClient('wallet') as WalletClient;\n }\n get wars(): WarsClient | undefined {\n return this.getClient('wars') as WarsClient;\n }\n get meta(): MetaClient | undefined {\n return this.getClient('meta') as MetaClient;\n }\n get freelanceJobs(): FreelanceJobsClient | undefined {\n return this.getClient('freelanceJobs') as FreelanceJobsClient;\n }\n get skyhooks(): SkyhooksClient | undefined {\n return this.getClient('skyhooks') as SkyhooksClient;\n }\n get mercenary(): MercenaryClient | undefined {\n return this.getClient('mercenary') as MercenaryClient;\n }\n get accessLists(): AccessListsClient | undefined {\n return this.getClient('accessLists') as AccessListsClient;\n }\n\n shutdown(): void {\n const cache = this.apiClient.getCache();\n if (cache) {\n (cache as ETagCacheManager).shutdown();\n }\n const cb = this.apiClient.getCircuitBreaker();\n if (cb) {\n cb.shutdown();\n }\n if (this.deduplicator) {\n this.deduplicator.clear();\n }\n this.clients.clear();\n logger.info('CustomEsiClient shutdown completed');\n }\n}\n\nexport class EsiApiFactory {\n static createAllianceClient(config?: EsiClientConfig): AllianceClient {\n return createClientInstance(\n 'alliance',\n this.buildApiClient(config),\n ) as AllianceClient;\n }\n\n static createCharacterClient(config?: EsiClientConfig): CharacterClient {\n return createClientInstance(\n 'characters',\n this.buildApiClient(config),\n ) as CharacterClient;\n }\n\n static createCorporationClient(config?: EsiClientConfig): CorporationsClient {\n return createClientInstance(\n 'corporations',\n this.buildApiClient(config),\n ) as CorporationsClient;\n }\n\n static createMarketClient(config?: EsiClientConfig): MarketClient {\n return createClientInstance(\n 'market',\n this.buildApiClient(config),\n ) as MarketClient;\n }\n\n static createUniverseClient(config?: EsiClientConfig): UniverseClient {\n return createClientInstance(\n 'universe',\n this.buildApiClient(config),\n ) as UniverseClient;\n }\n\n static createFleetClient(config?: EsiClientConfig): FleetClient {\n return createClientInstance(\n 'fleets',\n this.buildApiClient(config),\n ) as FleetClient;\n }\n\n static createAssetsClient(config?: EsiClientConfig): AssetsClient {\n return createClientInstance(\n 'assets',\n this.buildApiClient(config),\n ) as AssetsClient;\n }\n\n static createWalletClient(config?: EsiClientConfig): WalletClient {\n return createClientInstance(\n 'wallet',\n this.buildApiClient(config),\n ) as WalletClient;\n }\n\n static createMailClient(config?: EsiClientConfig): MailClient {\n return createClientInstance(\n 'mail',\n this.buildApiClient(config),\n ) as MailClient;\n }\n\n static createClient(\n clientType: ApiClientType,\n config?: EsiClientConfig,\n ): ClientInstance {\n return createClientInstance(clientType, this.buildApiClient(config));\n }\n\n private static buildApiClient(config?: EsiClientConfig): ApiClient {\n const baseUrl = validateBaseUrl(\n config?.baseUrl || process.env.ESI_BASE_URL || 'https://esi.evetech.net',\n config?.unsafeAllowCustomHost,\n );\n const client = new ApiClient(\n config?.clientId || process.env.ESI_CLIENT_ID || 'esi-standalone-client',\n baseUrl,\n config?.accessToken || process.env.ESI_ACCESS_TOKEN,\n );\n\n if (config?.language) {\n client.setLanguage(config.language);\n }\n\n if (config?.onTokenRefresh) {\n client.setTokenProvider(config.onTokenRefresh);\n }\n\n const datasource = config?.datasource;\n if (datasource) {\n client.setDatasource(datasource);\n }\n\n configureApiClient(client, config);\n return client;\n }\n}\n\nexport class EsiClientBuilder {\n private clients: ApiClientType[] = [];\n private config: EsiClientConfig = {};\n\n addClient(clientType: ApiClientType): this {\n if (!this.clients.includes(clientType)) {\n this.clients.push(clientType);\n }\n return this;\n }\n\n addClients(clientTypes: ApiClientType[]): this {\n clientTypes.forEach((type) => this.addClient(type));\n return this;\n }\n\n withConfig(config: EsiClientConfig): this {\n this.config = { ...this.config, ...config };\n return this;\n }\n\n withClientId(clientId: string): this {\n this.config.clientId = clientId;\n return this;\n }\n\n withAccessToken(accessToken: string): this {\n this.config.accessToken = accessToken;\n return this;\n }\n\n build(): CustomEsiClient {\n if (this.clients.length === 0) {\n throw new Error('At least one client type must be specified');\n }\n return new CustomEsiClient({ ...this.config, clients: this.clients });\n }\n}\n","import { ApiClient } from './ApiClient';\nimport { IRateLimiter } from './rateLimiter/IRateLimiter';\nimport { RateLimiter } from './rateLimiter/RateLimiter';\nimport { ICache } from './cache/ICache';\nimport { CircuitBreaker } from './circuitBreaker/CircuitBreaker';\n\nexport class ApiClientBuilder {\n private clientId!: string;\n private link!: string;\n private accessToken?: string;\n private rateLimiter?: IRateLimiter;\n private cache?: ICache;\n private circuitBreaker?: CircuitBreaker;\n private _timeout?: number;\n\n setClientId(clientId: string): ApiClientBuilder {\n this.clientId = clientId;\n return this;\n }\n\n setLink(link: string): ApiClientBuilder {\n this.link = link;\n return this;\n }\n\n setAccessToken(accessToken?: string): ApiClientBuilder {\n this.accessToken = accessToken;\n return this;\n }\n\n setRateLimiter(limiter: IRateLimiter): ApiClientBuilder {\n this.rateLimiter = limiter;\n return this;\n }\n\n setCache(cache: ICache): ApiClientBuilder {\n this.cache = cache;\n return this;\n }\n\n setCircuitBreaker(cb: CircuitBreaker): ApiClientBuilder {\n this.circuitBreaker = cb;\n return this;\n }\n\n setTimeout(timeout: number): ApiClientBuilder {\n this._timeout = timeout;\n return this;\n }\n\n build(): ApiClient {\n const client = new ApiClient(this.clientId, this.link, this.accessToken);\n client.setRateLimiter(this.rateLimiter ?? new RateLimiter());\n if (this.cache) client.setCache(this.cache);\n if (this.circuitBreaker) client.setCircuitBreaker(this.circuitBreaker);\n if (this._timeout !== undefined) client.setTimeout(this._timeout);\n return client;\n }\n}\n","// Auto-generated from ESI OpenAPI spec — do not edit manually\n// Total scopes: 72\n// Endpoints requiring scopes: 127\n\nexport type EsiScope =\n | 'esi-access.read_lists.v1'\n | 'esi-activities.read_character.v1'\n | 'esi-alliances.read_contacts.v1'\n | 'esi-assets.read_assets.v1'\n | 'esi-assets.read_corporation_assets.v1'\n | 'esi-calendar.read_calendar_events.v1'\n | 'esi-calendar.respond_calendar_events.v1'\n | 'esi-characters.read_agents_research.v1'\n | 'esi-characters.read_blueprints.v1'\n | 'esi-characters.read_contacts.v1'\n | 'esi-characters.read_corporation_roles.v1'\n | 'esi-characters.read_fatigue.v1'\n | 'esi-characters.read_freelance_jobs.v1'\n | 'esi-characters.read_fw_stats.v1'\n | 'esi-characters.read_loyalty.v1'\n | 'esi-characters.read_medals.v1'\n | 'esi-characters.read_notifications.v1'\n | 'esi-characters.read_standings.v1'\n | 'esi-characters.read_titles.v1'\n | 'esi-characters.write_contacts.v1'\n | 'esi-clones.read_clones.v1'\n | 'esi-clones.read_implants.v1'\n | 'esi-contracts.read_character_contracts.v1'\n | 'esi-contracts.read_corporation_contracts.v1'\n | 'esi-corporations.read_blueprints.v1'\n | 'esi-corporations.read_contacts.v1'\n | 'esi-corporations.read_container_logs.v1'\n | 'esi-corporations.read_corporation_membership.v1'\n | 'esi-corporations.read_divisions.v1'\n | 'esi-corporations.read_facilities.v1'\n | 'esi-corporations.read_freelance_jobs.v1'\n | 'esi-corporations.read_fw_stats.v1'\n | 'esi-corporations.read_medals.v1'\n | 'esi-corporations.read_projects.v1'\n | 'esi-corporations.read_standings.v1'\n | 'esi-corporations.read_starbases.v1'\n | 'esi-corporations.read_structures.v1'\n | 'esi-corporations.read_titles.v1'\n | 'esi-corporations.track_members.v1'\n | 'esi-fittings.read_fittings.v1'\n | 'esi-fittings.write_fittings.v1'\n | 'esi-fleets.read_fleet.v1'\n | 'esi-fleets.write_fleet.v1'\n | 'esi-industry.read_character_jobs.v1'\n | 'esi-industry.read_character_mining.v1'\n | 'esi-industry.read_corporation_jobs.v1'\n | 'esi-industry.read_corporation_mining.v1'\n | 'esi-killmails.read_corporation_killmails.v1'\n | 'esi-killmails.read_killmails.v1'\n | 'esi-location.read_location.v1'\n | 'esi-location.read_online.v1'\n | 'esi-location.read_ship_type.v1'\n | 'esi-mail.organize_mail.v1'\n | 'esi-mail.read_mail.v1'\n | 'esi-mail.send_mail.v1'\n | 'esi-markets.read_character_orders.v1'\n | 'esi-markets.read_corporation_orders.v1'\n | 'esi-markets.structure_markets.v1'\n | 'esi-planets.manage_planets.v1'\n | 'esi-planets.read_customs_offices.v1'\n | 'esi-search.search_structures.v1'\n | 'esi-skills.read_skillqueue.v1'\n | 'esi-skills.read_skills.v1'\n | 'esi-structures.read_character.v1'\n | 'esi-structures.read_corporation.v1'\n | 'esi-ui.open_window.v1'\n | 'esi-ui.write_waypoint.v1'\n | 'esi-universe.read_structures.v1'\n | 'esi-wallet.read_character_wallet.v1'\n | 'esi-wallet.read_corporation_wallets.v1'\n | 'esi.activity.char:read'\n | 'esi.cosmetic.char:read';\n\nexport const esiEndpointScopes: Record<string, EsiScope[]> = {\n 'GET:alliances/{alliance_id}/contacts': ['esi-alliances.read_contacts.v1'],\n 'GET:alliances/{alliance_id}/contacts/labels': ['esi-alliances.read_contacts.v1'],\n 'GET:characters/{character_id}/agents_research': ['esi-characters.read_agents_research.v1'],\n 'GET:characters/{character_id}/assets': ['esi-assets.read_assets.v1'],\n 'POST:characters/{character_id}/assets/locations': ['esi-assets.read_assets.v1'],\n 'POST:characters/{character_id}/assets/names': ['esi-assets.read_assets.v1'],\n 'GET:characters/{character_id}/attributes': ['esi-skills.read_skills.v1'],\n 'GET:characters/{character_id}/blueprints': ['esi-characters.read_blueprints.v1'],\n 'GET:characters/{character_id}/calendar': ['esi-calendar.read_calendar_events.v1'],\n 'GET:characters/{character_id}/calendar/{event_id}': ['esi-calendar.read_calendar_events.v1'],\n 'PUT:characters/{character_id}/calendar/{event_id}': ['esi-calendar.respond_calendar_events.v1'],\n 'GET:characters/{character_id}/calendar/{event_id}/attendees': ['esi-calendar.read_calendar_events.v1'],\n 'GET:characters/{character_id}/clones': ['esi-clones.read_clones.v1'],\n 'GET:characters/{character_id}/contacts': ['esi-characters.read_contacts.v1'],\n 'POST:characters/{character_id}/contacts': ['esi-characters.write_contacts.v1'],\n 'PUT:characters/{character_id}/contacts': ['esi-characters.write_contacts.v1'],\n 'DELETE:characters/{character_id}/contacts': ['esi-characters.write_contacts.v1'],\n 'GET:characters/{character_id}/contacts/labels': ['esi-characters.read_contacts.v1'],\n 'GET:characters/{character_id}/contracts': ['esi-contracts.read_character_contracts.v1'],\n 'GET:characters/{character_id}/contracts/{contract_id}/bids': ['esi-contracts.read_character_contracts.v1'],\n 'GET:characters/{character_id}/contracts/{contract_id}/items': ['esi-contracts.read_character_contracts.v1'],\n 'POST:characters/{character_id}/cspa': ['esi-characters.read_contacts.v1'],\n 'GET:characters/{character_id}/fatigue': ['esi-characters.read_fatigue.v1'],\n 'GET:characters/{character_id}/fittings': ['esi-fittings.read_fittings.v1'],\n 'POST:characters/{character_id}/fittings': ['esi-fittings.write_fittings.v1'],\n 'DELETE:characters/{character_id}/fittings/{fitting_id}': ['esi-fittings.write_fittings.v1'],\n 'GET:characters/{character_id}/fleet': ['esi-fleets.read_fleet.v1'],\n 'GET:characters/{character_id}/freelance-jobs': ['esi-characters.read_freelance_jobs.v1'],\n 'GET:characters/{character_id}/freelance-jobs/{job_id}/participation': ['esi-characters.read_freelance_jobs.v1'],\n 'GET:characters/{character_id}/fw/stats': ['esi-characters.read_fw_stats.v1'],\n 'GET:characters/{character_id}/implants': ['esi-clones.read_implants.v1'],\n 'GET:characters/{character_id}/industry/jobs': ['esi-industry.read_character_jobs.v1'],\n 'GET:characters/{character_id}/killmails/recent': ['esi-killmails.read_killmails.v1'],\n 'GET:characters/{character_id}/location': ['esi-location.read_location.v1'],\n 'GET:characters/{character_id}/loyalty/points': ['esi-characters.read_loyalty.v1'],\n 'GET:characters/{character_id}/mail': ['esi-mail.read_mail.v1'],\n 'POST:characters/{character_id}/mail': ['esi-mail.send_mail.v1'],\n 'GET:characters/{character_id}/mail/{mail_id}': ['esi-mail.read_mail.v1'],\n 'PUT:characters/{character_id}/mail/{mail_id}': ['esi-mail.organize_mail.v1'],\n 'DELETE:characters/{character_id}/mail/{mail_id}': ['esi-mail.organize_mail.v1'],\n 'GET:characters/{character_id}/mail/labels': ['esi-mail.read_mail.v1'],\n 'POST:characters/{character_id}/mail/labels': ['esi-mail.organize_mail.v1'],\n 'DELETE:characters/{character_id}/mail/labels/{label_id}': ['esi-mail.organize_mail.v1'],\n 'GET:characters/{character_id}/mail/lists': ['esi-mail.read_mail.v1'],\n 'GET:characters/{character_id}/medals': ['esi-characters.read_medals.v1'],\n 'GET:characters/{character_id}/mining': ['esi-industry.read_character_mining.v1'],\n 'GET:characters/{character_id}/notifications': ['esi-characters.read_notifications.v1'],\n 'GET:characters/{character_id}/notifications/contacts': ['esi-characters.read_notifications.v1'],\n 'GET:characters/{character_id}/online': ['esi-location.read_online.v1'],\n 'GET:characters/{character_id}/orders': ['esi-markets.read_character_orders.v1'],\n 'GET:characters/{character_id}/orders/history': ['esi-markets.read_character_orders.v1'],\n 'GET:characters/{character_id}/planets': ['esi-planets.manage_planets.v1'],\n 'GET:characters/{character_id}/planets/{planet_id}': ['esi-planets.manage_planets.v1'],\n 'GET:characters/{character_id}/roles': ['esi-characters.read_corporation_roles.v1'],\n 'GET:characters/{character_id}/search': ['esi-search.search_structures.v1'],\n 'GET:characters/{character_id}/ship': ['esi-location.read_ship_type.v1'],\n 'GET:characters/{character_id}/skillqueue': ['esi-skills.read_skillqueue.v1'],\n 'GET:characters/{character_id}/skills': ['esi-skills.read_skills.v1'],\n 'GET:characters/{character_id}/standings': ['esi-characters.read_standings.v1'],\n 'GET:characters/{character_id}/titles': ['esi-characters.read_titles.v1'],\n 'GET:characters/{character_id}/wallet': ['esi-wallet.read_character_wallet.v1'],\n 'GET:characters/{character_id}/wallet/journal': ['esi-wallet.read_character_wallet.v1'],\n 'GET:characters/{character_id}/wallet/transactions': ['esi-wallet.read_character_wallet.v1'],\n 'GET:corporation/{corporation_id}/mining/extractions': ['esi-industry.read_corporation_mining.v1'],\n 'GET:corporation/{corporation_id}/mining/observers': ['esi-industry.read_corporation_mining.v1'],\n 'GET:corporation/{corporation_id}/mining/observers/{observer_id}': ['esi-industry.read_corporation_mining.v1'],\n 'GET:corporations/{corporation_id}/assets': ['esi-assets.read_corporation_assets.v1'],\n 'POST:corporations/{corporation_id}/assets/locations': ['esi-assets.read_corporation_assets.v1'],\n 'POST:corporations/{corporation_id}/assets/names': ['esi-assets.read_corporation_assets.v1'],\n 'GET:corporations/{corporation_id}/blueprints': ['esi-corporations.read_blueprints.v1'],\n 'GET:corporations/{corporation_id}/contacts': ['esi-corporations.read_contacts.v1'],\n 'GET:corporations/{corporation_id}/contacts/labels': ['esi-corporations.read_contacts.v1'],\n 'GET:corporations/{corporation_id}/containers/logs': ['esi-corporations.read_container_logs.v1'],\n 'GET:corporations/{corporation_id}/contracts': ['esi-contracts.read_corporation_contracts.v1'],\n 'GET:corporations/{corporation_id}/contracts/{contract_id}/bids': ['esi-contracts.read_corporation_contracts.v1'],\n 'GET:corporations/{corporation_id}/contracts/{contract_id}/items': ['esi-contracts.read_corporation_contracts.v1'],\n 'GET:corporations/{corporation_id}/customs_offices': ['esi-planets.read_customs_offices.v1'],\n 'GET:corporations/{corporation_id}/divisions': ['esi-corporations.read_divisions.v1'],\n 'GET:corporations/{corporation_id}/facilities': ['esi-corporations.read_facilities.v1'],\n 'GET:corporations/{corporation_id}/freelance-jobs': ['esi-corporations.read_freelance_jobs.v1'],\n 'GET:corporations/{corporation_id}/freelance-jobs/{job_id}/participants': ['esi-corporations.read_freelance_jobs.v1'],\n 'GET:corporations/{corporation_id}/fw/stats': ['esi-corporations.read_fw_stats.v1'],\n 'GET:corporations/{corporation_id}/industry/jobs': ['esi-industry.read_corporation_jobs.v1'],\n 'GET:corporations/{corporation_id}/killmails/recent': ['esi-killmails.read_corporation_killmails.v1'],\n 'GET:corporations/{corporation_id}/medals': ['esi-corporations.read_medals.v1'],\n 'GET:corporations/{corporation_id}/medals/issued': ['esi-corporations.read_medals.v1'],\n 'GET:corporations/{corporation_id}/members': ['esi-corporations.read_corporation_membership.v1'],\n 'GET:corporations/{corporation_id}/members/limit': ['esi-corporations.track_members.v1'],\n 'GET:corporations/{corporation_id}/members/titles': ['esi-corporations.read_titles.v1'],\n 'GET:corporations/{corporation_id}/membertracking': ['esi-corporations.track_members.v1'],\n 'GET:corporations/{corporation_id}/orders': ['esi-markets.read_corporation_orders.v1'],\n 'GET:corporations/{corporation_id}/orders/history': ['esi-markets.read_corporation_orders.v1'],\n 'GET:corporations/{corporation_id}/projects': ['esi-corporations.read_projects.v1'],\n 'GET:corporations/{corporation_id}/projects/{project_id}': ['esi-corporations.read_projects.v1'],\n 'GET:corporations/{corporation_id}/projects/{project_id}/contribution/{character_id}': ['esi-corporations.read_projects.v1'],\n 'GET:corporations/{corporation_id}/projects/{project_id}/contributors': ['esi-corporations.read_projects.v1'],\n 'GET:corporations/{corporation_id}/roles': ['esi-corporations.read_corporation_membership.v1'],\n 'GET:corporations/{corporation_id}/roles/history': ['esi-corporations.read_corporation_membership.v1'],\n 'GET:corporations/{corporation_id}/shareholders': ['esi-wallet.read_corporation_wallets.v1'],\n 'GET:corporations/{corporation_id}/standings': ['esi-corporations.read_standings.v1'],\n 'GET:corporations/{corporation_id}/starbases': ['esi-corporations.read_starbases.v1'],\n 'GET:corporations/{corporation_id}/starbases/{starbase_id}': ['esi-corporations.read_starbases.v1'],\n 'GET:corporations/{corporation_id}/structures': ['esi-corporations.read_structures.v1'],\n 'GET:corporations/{corporation_id}/titles': ['esi-corporations.read_titles.v1'],\n 'GET:corporations/{corporation_id}/wallets': ['esi-wallet.read_corporation_wallets.v1'],\n 'GET:corporations/{corporation_id}/wallets/{division}/journal': ['esi-wallet.read_corporation_wallets.v1'],\n 'GET:corporations/{corporation_id}/wallets/{division}/transactions': ['esi-wallet.read_corporation_wallets.v1'],\n 'GET:fleets/{fleet_id}': ['esi-fleets.read_fleet.v1'],\n 'PUT:fleets/{fleet_id}': ['esi-fleets.write_fleet.v1'],\n 'GET:fleets/{fleet_id}/members': ['esi-fleets.read_fleet.v1'],\n 'POST:fleets/{fleet_id}/members': ['esi-fleets.write_fleet.v1'],\n 'PUT:fleets/{fleet_id}/members/{member_id}': ['esi-fleets.write_fleet.v1'],\n 'DELETE:fleets/{fleet_id}/members/{member_id}': ['esi-fleets.write_fleet.v1'],\n 'PUT:fleets/{fleet_id}/squads/{squad_id}': ['esi-fleets.write_fleet.v1'],\n 'DELETE:fleets/{fleet_id}/squads/{squad_id}': ['esi-fleets.write_fleet.v1'],\n 'GET:fleets/{fleet_id}/wings': ['esi-fleets.read_fleet.v1'],\n 'POST:fleets/{fleet_id}/wings': ['esi-fleets.write_fleet.v1'],\n 'PUT:fleets/{fleet_id}/wings/{wing_id}': ['esi-fleets.write_fleet.v1'],\n 'DELETE:fleets/{fleet_id}/wings/{wing_id}': ['esi-fleets.write_fleet.v1'],\n 'POST:fleets/{fleet_id}/wings/{wing_id}/squads': ['esi-fleets.write_fleet.v1'],\n 'GET:markets/structures/{structure_id}': ['esi-markets.structure_markets.v1'],\n 'POST:ui/autopilot/waypoint': ['esi-ui.write_waypoint.v1'],\n 'POST:ui/openwindow/contract': ['esi-ui.open_window.v1'],\n 'POST:ui/openwindow/information': ['esi-ui.open_window.v1'],\n 'POST:ui/openwindow/marketdetails': ['esi-ui.open_window.v1'],\n 'POST:ui/openwindow/newmail': ['esi-ui.open_window.v1'],\n 'GET:universe/structures/{structure_id}': ['esi-universe.read_structures.v1'],\n};\n","declare const __brand: unique symbol;\n\ntype Brand<T, B extends string> = T & { readonly [__brand]: B };\n\nexport type CharacterId = Brand<number, 'CharacterId'>;\nexport type CorporationId = Brand<number, 'CorporationId'>;\nexport type AllianceId = Brand<number, 'AllianceId'>;\nexport type TypeId = Brand<number, 'TypeId'>;\nexport type RegionId = Brand<number, 'RegionId'>;\nexport type SystemId = Brand<number, 'SystemId'>;\nexport type StationId = Brand<number, 'StationId'>;\nexport type StructureId = Brand<number, 'StructureId'>;\nexport type OrderId = Brand<number, 'OrderId'>;\nexport type ContractId = Brand<number, 'ContractId'>;\nexport type KillmailId = Brand<number, 'KillmailId'>;\nexport type FactionId = Brand<number, 'FactionId'>;\nexport type CorporationAllianceId = Brand<number, 'CorporationAllianceId'>;\nexport type FleetId = Brand<number, 'FleetId'>;\nexport type PlanetId = Brand<number, 'PlanetId'>;\nexport type WarId = Brand<number, 'WarId'>;\n\nexport function brand<T>(value: number): T {\n return value as unknown as T;\n}\n","/* eslint-disable */\n// Auto-generated from ESI OpenAPI spec — do not edit manually\n// Spec hash: 65de1083df34\n// Total interfaces: 161\n\n// --- Alliance ---\n\nexport interface AllianceDetail {\n creator_corporation_id: number;\n creator_id: number;\n date_founded: string;\n executor_corporation_id?: number;\n faction_id?: number;\n name: string;\n ticker: string;\n}\n\nexport interface AlliancesAllianceIdIconsGet {\n px128x128?: string;\n px64x64?: string;\n}\n\n// --- Assets ---\n\nexport interface CharactersCharacterIdAssetsGet {\n is_blueprint_copy?: boolean;\n is_singleton: boolean;\n item_id: number;\n location_flag: 'AssetSafety' | 'AutoFit' | 'BoosterBay' | 'CapsuleerDeliveries' | 'Cargo' | 'CorporationGoalDeliveries' | 'CorpseBay' | 'Deliveries' | 'DroneBay' | 'ExpeditionHold' | 'FighterBay' | 'FighterTube0' | 'FighterTube1' | 'FighterTube2' | 'FighterTube3' | 'FighterTube4' | 'FleetHangar' | 'FrigateEscapeBay' | 'Hangar' | 'HangarAll' | 'HiSlot0' | 'HiSlot1' | 'HiSlot2' | 'HiSlot3' | 'HiSlot4' | 'HiSlot5' | 'HiSlot6' | 'HiSlot7' | 'HiddenModifiers' | 'Implant' | 'InfrastructureHangar' | 'LoSlot0' | 'LoSlot1' | 'LoSlot2' | 'LoSlot3' | 'LoSlot4' | 'LoSlot5' | 'LoSlot6' | 'LoSlot7' | 'Locked' | 'MedSlot0' | 'MedSlot1' | 'MedSlot2' | 'MedSlot3' | 'MedSlot4' | 'MedSlot5' | 'MedSlot6' | 'MedSlot7' | 'MobileDepotHold' | 'MoonMaterialBay' | 'QuafeBay' | 'RigSlot0' | 'RigSlot1' | 'RigSlot2' | 'RigSlot3' | 'RigSlot4' | 'RigSlot5' | 'RigSlot6' | 'RigSlot7' | 'ShipHangar' | 'Skill' | 'SpecializedAmmoHold' | 'SpecializedAsteroidHold' | 'SpecializedCommandCenterHold' | 'SpecializedFuelBay' | 'SpecializedGasHold' | 'SpecializedIceHold' | 'SpecializedIndustrialShipHold' | 'SpecializedLargeShipHold' | 'SpecializedMaterialBay' | 'SpecializedMediumShipHold' | 'SpecializedMineralHold' | 'SpecializedOreHold' | 'SpecializedPlanetaryCommoditiesHold' | 'SpecializedSalvageHold' | 'SpecializedShipHold' | 'SpecializedSmallShipHold' | 'StructureDeedBay' | 'SubSystemBay' | 'SubSystemSlot0' | 'SubSystemSlot1' | 'SubSystemSlot2' | 'SubSystemSlot3' | 'SubSystemSlot4' | 'SubSystemSlot5' | 'SubSystemSlot6' | 'SubSystemSlot7' | 'Unlocked' | 'Wardrobe';\n location_id: number;\n location_type: 'station' | 'solar_system' | 'item' | 'other';\n quantity: number;\n type_id: number;\n}\n\nexport interface CharactersCharacterIdAssetsLocationsPost {\n item_id: number;\n position: {\n x: number;\n y: number;\n z: number;\n };\n}\n\nexport interface CharactersCharacterIdAssetsNamesPost {\n item_id: number;\n name: string;\n}\n\nexport interface CorporationsCorporationIdAssetsGet {\n is_blueprint_copy?: boolean;\n is_singleton: boolean;\n item_id: number;\n location_flag: 'AssetSafety' | 'AutoFit' | 'Bonus' | 'Booster' | 'BoosterBay' | 'Capsule' | 'CapsuleerDeliveries' | 'Cargo' | 'CorpDeliveries' | 'CorpSAG1' | 'CorpSAG2' | 'CorpSAG3' | 'CorpSAG4' | 'CorpSAG5' | 'CorpSAG6' | 'CorpSAG7' | 'CorporationGoalDeliveries' | 'CrateLoot' | 'Deliveries' | 'DroneBay' | 'DustBattle' | 'DustDatabank' | 'ExpeditionHold' | 'FighterBay' | 'FighterTube0' | 'FighterTube1' | 'FighterTube2' | 'FighterTube3' | 'FighterTube4' | 'FleetHangar' | 'FrigateEscapeBay' | 'Hangar' | 'HangarAll' | 'HiSlot0' | 'HiSlot1' | 'HiSlot2' | 'HiSlot3' | 'HiSlot4' | 'HiSlot5' | 'HiSlot6' | 'HiSlot7' | 'HiddenModifiers' | 'Implant' | 'Impounded' | 'InfrastructureHangar' | 'JunkyardReprocessed' | 'JunkyardTrashed' | 'LoSlot0' | 'LoSlot1' | 'LoSlot2' | 'LoSlot3' | 'LoSlot4' | 'LoSlot5' | 'LoSlot6' | 'LoSlot7' | 'Locked' | 'MedSlot0' | 'MedSlot1' | 'MedSlot2' | 'MedSlot3' | 'MedSlot4' | 'MedSlot5' | 'MedSlot6' | 'MedSlot7' | 'MobileDepotHold' | 'MoonMaterialBay' | 'OfficeFolder' | 'Pilot' | 'PlanetSurface' | 'QuafeBay' | 'QuantumCoreRoom' | 'Reward' | 'RigSlot0' | 'RigSlot1' | 'RigSlot2' | 'RigSlot3' | 'RigSlot4' | 'RigSlot5' | 'RigSlot6' | 'RigSlot7' | 'SecondaryStorage' | 'ServiceSlot0' | 'ServiceSlot1' | 'ServiceSlot2' | 'ServiceSlot3' | 'ServiceSlot4' | 'ServiceSlot5' | 'ServiceSlot6' | 'ServiceSlot7' | 'ShipHangar' | 'ShipOffline' | 'Skill' | 'SkillInTraining' | 'SpecializedAmmoHold' | 'SpecializedAsteroidHold' | 'SpecializedCommandCenterHold' | 'SpecializedFuelBay' | 'SpecializedGasHold' | 'SpecializedIceHold' | 'SpecializedIndustrialShipHold' | 'SpecializedLargeShipHold' | 'SpecializedMaterialBay' | 'SpecializedMediumShipHold' | 'SpecializedMineralHold' | 'SpecializedOreHold' | 'SpecializedPlanetaryCommoditiesHold' | 'SpecializedSalvageHold' | 'SpecializedShipHold' | 'SpecializedSmallShipHold' | 'StructureActive' | 'StructureFuel' | 'StructureInactive' | 'StructureOffline' | 'SubSystemBay' | 'SubSystemSlot0' | 'SubSystemSlot1' | 'SubSystemSlot2' | 'SubSystemSlot3' | 'SubSystemSlot4' | 'SubSystemSlot5' | 'SubSystemSlot6' | 'SubSystemSlot7' | 'Unlocked' | 'Wallet' | 'Wardrobe';\n location_id: number;\n location_type: 'station' | 'solar_system' | 'item' | 'other';\n quantity: number;\n type_id: number;\n}\n\nexport interface CorporationsCorporationIdAssetsLocationsPost {\n item_id: number;\n position: {\n x: number;\n y: number;\n z: number;\n };\n}\n\nexport interface CorporationsCorporationIdAssetsNamesPost {\n item_id: number;\n name: string;\n}\n\n// --- Calendar ---\n\nexport interface CharactersCharacterIdCalendarEventIdAttendeesGet {\n character_id?: number;\n event_response?: 'declined' | 'not_responded' | 'accepted' | 'tentative';\n}\n\nexport interface CharactersCharacterIdCalendarEventIdGet {\n date: string;\n duration: number;\n event_id: number;\n importance: number;\n owner_id: number;\n owner_name: string;\n owner_type: 'eve_server' | 'corporation' | 'faction' | 'character' | 'alliance';\n response: string;\n text: string;\n title: string;\n}\n\nexport interface CharactersCharacterIdCalendarGet {\n event_date?: string;\n event_id?: number;\n event_response?: 'declined' | 'not_responded' | 'accepted' | 'tentative';\n importance?: number;\n title?: string;\n}\n\n// --- Character ---\n\nexport interface CharactersAffiliationPost {\n alliance_id?: number;\n character_id: number;\n corporation_id: number;\n faction_id?: number;\n}\n\nexport interface CharactersCharacterIdAgentsResearchGet {\n agent_id: number;\n points_per_day: number;\n remainder_points: number;\n skill_type_id: number;\n started_at: string;\n}\n\nexport interface CharactersCharacterIdBlueprintsGet {\n item_id: number;\n location_flag: 'AutoFit' | 'Cargo' | 'CorpseBay' | 'DroneBay' | 'FleetHangar' | 'Deliveries' | 'HiddenModifiers' | 'Hangar' | 'HangarAll' | 'LoSlot0' | 'LoSlot1' | 'LoSlot2' | 'LoSlot3' | 'LoSlot4' | 'LoSlot5' | 'LoSlot6' | 'LoSlot7' | 'MedSlot0' | 'MedSlot1' | 'MedSlot2' | 'MedSlot3' | 'MedSlot4' | 'MedSlot5' | 'MedSlot6' | 'MedSlot7' | 'HiSlot0' | 'HiSlot1' | 'HiSlot2' | 'HiSlot3' | 'HiSlot4' | 'HiSlot5' | 'HiSlot6' | 'HiSlot7' | 'AssetSafety' | 'Locked' | 'Unlocked' | 'Implant' | 'QuafeBay' | 'RigSlot0' | 'RigSlot1' | 'RigSlot2' | 'RigSlot3' | 'RigSlot4' | 'RigSlot5' | 'RigSlot6' | 'RigSlot7' | 'ShipHangar' | 'SpecializedFuelBay' | 'SpecializedOreHold' | 'SpecializedGasHold' | 'SpecializedMineralHold' | 'SpecializedSalvageHold' | 'SpecializedShipHold' | 'SpecializedSmallShipHold' | 'SpecializedMediumShipHold' | 'SpecializedLargeShipHold' | 'SpecializedIndustrialShipHold' | 'SpecializedAmmoHold' | 'SpecializedCommandCenterHold' | 'SpecializedPlanetaryCommoditiesHold' | 'SpecializedMaterialBay' | 'SubSystemSlot0' | 'SubSystemSlot1' | 'SubSystemSlot2' | 'SubSystemSlot3' | 'SubSystemSlot4' | 'SubSystemSlot5' | 'SubSystemSlot6' | 'SubSystemSlot7' | 'FighterBay' | 'FighterTube0' | 'FighterTube1' | 'FighterTube2' | 'FighterTube3' | 'FighterTube4' | 'Module';\n location_id: number;\n material_efficiency: number;\n quantity: number;\n runs: number;\n time_efficiency: number;\n type_id: number;\n}\n\nexport interface CharactersCharacterIdCorporationhistoryGet {\n corporation_id: number;\n is_deleted?: boolean;\n record_id: number;\n start_date: string;\n}\n\nexport interface CharactersCharacterIdFatigueGet {\n jump_fatigue_expire_date?: string;\n last_jump_date?: string;\n last_update_date?: string;\n}\n\nexport interface CharactersCharacterIdMedalsGet {\n corporation_id: number;\n date: string;\n description: string;\n graphics: ({\n color?: number;\n graphic: string;\n layer: number;\n part: number;\n })[];\n issuer_id: number;\n medal_id: number;\n reason: string;\n status: 'public' | 'private';\n title: string;\n}\n\nexport interface CharactersCharacterIdNotificationsContactsGet {\n message: string;\n notification_id: number;\n send_date: string;\n sender_character_id: number;\n standing_level: number;\n}\n\nexport interface CharactersCharacterIdNotificationsGet {\n is_read?: boolean;\n notification_id: number;\n sender_id: number;\n sender_type: 'character' | 'corporation' | 'alliance' | 'faction' | 'other';\n text?: string;\n timestamp: string;\n type: 'AcceptedAlly' | 'AcceptedSurrender' | 'AgentRetiredTrigravian' | 'AllAnchoringMsg' | 'AllMaintenanceBillMsg' | 'AllStrucInvulnerableMsg' | 'AllStructVulnerableMsg' | 'AllWarCorpJoinedAllianceMsg' | 'AllWarDeclaredMsg' | 'AllWarInvalidatedMsg' | 'AllWarRetractedMsg' | 'AllWarSurrenderMsg' | 'AllianceCapitalChanged' | 'AllianceWarDeclaredV2' | 'AllyContractCancelled' | 'AllyJoinedWarAggressorMsg' | 'AllyJoinedWarAllyMsg' | 'AllyJoinedWarDefenderMsg' | 'BattlePunishFriendlyFire' | 'BillOutOfMoneyMsg' | 'BillPaidCorpAllMsg' | 'BountyClaimMsg' | 'BountyESSShared' | 'BountyESSTaken' | 'BountyPlacedAlliance' | 'BountyPlacedChar' | 'BountyPlacedCorp' | 'BountyYourBountyClaimed' | 'BuddyConnectContactAdd' | 'CharAppAcceptMsg' | 'CharAppRejectMsg' | 'CharAppWithdrawMsg' | 'CharLeftCorpMsg' | 'CharMedalMsg' | 'CharTerminationMsg' | 'CloneActivationMsg' | 'CloneActivationMsg2' | 'CloneMovedMsg' | 'CloneRevokedMsg1' | 'CloneRevokedMsg2' | 'CombatOperationFinished' | 'ContactAdd' | 'ContactEdit' | 'ContainerPasswordMsg' | 'ContractRegionChangedToPochven' | 'CorpAllBillMsg' | 'CorpAppAcceptMsg' | 'CorpAppInvitedMsg' | 'CorpAppNewMsg' | 'CorpAppRejectCustomMsg' | 'CorpAppRejectMsg' | 'CorpBecameWarEligible' | 'CorpDividendMsg' | 'CorpFriendlyFireDisableTimerCompleted' | 'CorpFriendlyFireDisableTimerStarted' | 'CorpFriendlyFireEnableTimerCompleted' | 'CorpFriendlyFireEnableTimerStarted' | 'CorpKicked' | 'CorpLiquidationMsg' | 'CorpNewCEOMsg' | 'CorpNewsMsg' | 'CorpNoLongerWarEligible' | 'CorpOfficeExpirationMsg' | 'CorpStructLostMsg' | 'CorpTaxChangeMsg' | 'CorpVoteCEORevokedMsg' | 'CorpVoteMsg' | 'CorpWarDeclaredMsg' | 'CorpWarDeclaredV2' | 'CorpWarFightingLegalMsg' | 'CorpWarInvalidatedMsg' | 'CorpWarRetractedMsg' | 'CorpWarSurrenderMsg' | 'CorporationGoalClosed' | 'CorporationGoalCompleted' | 'CorporationGoalCreated' | 'CorporationGoalExpired' | 'CorporationGoalLimitReached' | 'CorporationGoalNameChange' | 'CorporationLeft' | 'CustomsMsg' | 'DailyItemRewardAutoClaimed' | 'DeclareWar' | 'DistrictAttacked' | 'DustAppAcceptedMsg' | 'ESSMainBankLink' | 'EntosisCaptureStarted' | 'ExpertSystemExpired' | 'ExpertSystemExpiryImminent' | 'FWAllianceKickCeoIndividualStandingWarning' | 'FWAllianceKickMsg' | 'FWAllianceKickedCeoIndividualStanding' | 'FWAllianceWarningMsg' | 'FWCharKickMsg' | 'FWCharRankGainMsg' | 'FWCharRankLossMsg' | 'FWCharWarningMsg' | 'FWCharacterKickFromCorpIndividualStandingWarning' | 'FWCharacterKickedFromCorpIndividualStanding' | 'FWCorpJoinMsg' | 'FWCorpKickMsg' | 'FWCorpLeaveMsg' | 'FWCorpWarningMsg' | 'FWCorporationKickCeoIndividualStandingWarning' | 'FWCorporationKickedCeoIndividualStanding' | 'FacWarCorpJoinRequestMsg' | 'FacWarCorpJoinWithdrawMsg' | 'FacWarCorpLeaveRequestMsg' | 'FacWarCorpLeaveWithdrawMsg' | 'FacWarDirectEnlistmentRevoked' | 'FacWarLPDisqualifiedEvent' | 'FacWarLPDisqualifiedKill' | 'FacWarLPPayoutEvent' | 'FacWarLPPayoutKill' | 'FreelanceProjectACLDeleted' | 'FreelanceProjectClosed' | 'FreelanceProjectCompleted' | 'FreelanceProjectCreated' | 'FreelanceProjectExpired' | 'FreelanceProjectLimitReached' | 'FreelanceProjectParticipantKicked' | 'GameTimeAdded' | 'GameTimeReceived' | 'GameTimeSent' | 'GiftReceived' | 'IHubDestroyedByBillFailure' | 'IncursionCompletedMsg' | 'IndustryOperationFinished' | 'IndustryTeamAuctionLost' | 'IndustryTeamAuctionWon' | 'InfrastructureHubBillAboutToExpire' | 'InsuranceExpirationMsg' | 'InsuranceFirstShipMsg' | 'InsuranceInvalidatedMsg' | 'InsuranceIssuedMsg' | 'InsurancePayoutMsg' | 'InvasionCompletedMsg' | 'InvasionSystemLogin' | 'InvasionSystemStart' | 'JumpCloneDeletedMsg1' | 'JumpCloneDeletedMsg2' | 'KillReportFinalBlow' | 'KillReportVictim' | 'KillRightAvailable' | 'KillRightAvailableOpen' | 'KillRightEarned' | 'KillRightUnavailable' | 'KillRightUnavailableOpen' | 'KillRightUsed' | 'LPAutoRedeemed' | 'LocateCharMsg' | 'MadeWarMutual' | 'MercOfferRetractedMsg' | 'MercOfferedNegotiationMsg' | 'MercenaryDenAttacked' | 'MercenaryDenNewMTO' | 'MercenaryDenReinforced' | 'MissionCanceledTriglavian' | 'MissionOfferExpirationMsg' | 'MissionTimeoutMsg' | 'MoonminingAutomaticFracture' | 'MoonminingExtractionCancelled' | 'MoonminingExtractionFinished' | 'MoonminingExtractionStarted' | 'MoonminingLaserFired' | 'MutualWarExpired' | 'MutualWarInviteAccepted' | 'MutualWarInviteRejected' | 'MutualWarInviteSent' | 'NPCStandingsGained' | 'NPCStandingsLost' | 'OfferToAllyRetracted' | 'OfferedSurrender' | 'OfferedToAlly' | 'OfficeLeaseCanceledInsufficientStandings' | 'OldLscMessages' | 'OperationFinished' | 'OrbitalAttacked' | 'OrbitalReinforced' | 'OwnershipTransferred' | 'RaffleCreated' | 'RaffleExpired' | 'RaffleFinished' | 'ReimbursementMsg' | 'ResearchMissionAvailableMsg' | 'RetractsWar' | 'SPAutoRedeemed' | 'SeasonalChallengeCompleted' | 'SkinSequencingCompleted' | 'SkyhookDeployed' | 'SkyhookDestroyed' | 'SkyhookLostShields' | 'SkyhookOnline' | 'SkyhookUnderAttack' | 'SovAllClaimAquiredMsg' | 'SovAllClaimLostMsg' | 'SovCommandNodeEventStarted' | 'SovCorpBillLateMsg' | 'SovCorpClaimFailMsg' | 'SovDisruptorMsg' | 'SovStationEnteredFreeport' | 'SovStructureDestroyed' | 'SovStructureReinforced' | 'SovStructureSelfDestructCancel' | 'SovStructureSelfDestructFinished' | 'SovStructureSelfDestructRequested' | 'SovereigntyIHDamageMsg' | 'SovereigntySBUDamageMsg' | 'SovereigntyTCUDamageMsg' | 'StationAggressionMsg1' | 'StationAggressionMsg2' | 'StationConquerMsg' | 'StationServiceDisabled' | 'StationServiceEnabled' | 'StationStateChangeMsg' | 'StoryLineMissionAvailableMsg' | 'StructureAnchoring' | 'StructureCourierContractChanged' | 'StructureDestroyed' | 'StructureFuelAlert' | 'StructureImpendingAbandonmentAssetsAtRisk' | 'StructureItemsDelivered' | 'StructureItemsMovedToSafety' | 'StructureLostArmor' | 'StructureLostShields' | 'StructureLowReagentsAlert' | 'StructureNoReagentsAlert' | 'StructureOnline' | 'StructurePaintPurchased' | 'StructureServicesOffline' | 'StructureUnanchoring' | 'StructureUnderAttack' | 'StructureWentHighPower' | 'StructureWentLowPower' | 'StructuresJobsCancelled' | 'StructuresJobsPaused' | 'StructuresReinforcementChanged' | 'TowerAlertMsg' | 'TowerResourceAlertMsg' | 'TransactionReversalMsg' | 'TutorialMsg' | 'WarAdopted ' | 'WarAllyInherited' | 'WarAllyOfferDeclinedMsg' | 'WarConcordInvalidates' | 'WarDeclared' | 'WarEndedHqSecurityDrop' | 'WarHQRemovedFromSpace' | 'WarInherited' | 'WarInvalid' | 'WarRetracted' | 'WarRetractedByConcord' | 'WarSurrenderDeclinedMsg' | 'WarSurrenderOfferMsg';\n}\n\nexport interface CharactersCharacterIdPortraitGet {\n px128x128?: string;\n px256x256?: string;\n px512x512?: string;\n px64x64?: string;\n}\n\nexport interface CharactersCharacterIdRolesGet {\n roles?: 'Account_Take_1' | 'Account_Take_2' | 'Account_Take_3' | 'Account_Take_4' | 'Account_Take_5' | 'Account_Take_6' | 'Account_Take_7' | 'Accountant' | 'Auditor' | 'Brand_Manager' | 'Communications_Officer' | 'Config_Equipment' | 'Config_Starbase_Equipment' | 'Container_Take_1' | 'Container_Take_2' | 'Container_Take_3' | 'Container_Take_4' | 'Container_Take_5' | 'Container_Take_6' | 'Container_Take_7' | 'Contract_Manager' | 'Deliveries_Container_Take' | 'Deliveries_Query' | 'Deliveries_Take' | 'Diplomat' | 'Director' | 'Factory_Manager' | 'Fitting_Manager' | 'Hangar_Query_1' | 'Hangar_Query_2' | 'Hangar_Query_3' | 'Hangar_Query_4' | 'Hangar_Query_5' | 'Hangar_Query_6' | 'Hangar_Query_7' | 'Hangar_Take_1' | 'Hangar_Take_2' | 'Hangar_Take_3' | 'Hangar_Take_4' | 'Hangar_Take_5' | 'Hangar_Take_6' | 'Hangar_Take_7' | 'Junior_Accountant' | 'Personnel_Manager' | 'Project_Manager' | 'Rent_Factory_Facility' | 'Rent_Office' | 'Rent_Research_Facility' | 'Security_Officer' | 'Skill_Plan_Manager' | 'Starbase_Defense_Operator' | 'Starbase_Fuel_Technician' | 'Station_Manager' | 'Trader'[];\n roles_at_base?: 'Account_Take_1' | 'Account_Take_2' | 'Account_Take_3' | 'Account_Take_4' | 'Account_Take_5' | 'Account_Take_6' | 'Account_Take_7' | 'Accountant' | 'Auditor' | 'Brand_Manager' | 'Communications_Officer' | 'Config_Equipment' | 'Config_Starbase_Equipment' | 'Container_Take_1' | 'Container_Take_2' | 'Container_Take_3' | 'Container_Take_4' | 'Container_Take_5' | 'Container_Take_6' | 'Container_Take_7' | 'Contract_Manager' | 'Deliveries_Container_Take' | 'Deliveries_Query' | 'Deliveries_Take' | 'Diplomat' | 'Director' | 'Factory_Manager' | 'Fitting_Manager' | 'Hangar_Query_1' | 'Hangar_Query_2' | 'Hangar_Query_3' | 'Hangar_Query_4' | 'Hangar_Query_5' | 'Hangar_Query_6' | 'Hangar_Query_7' | 'Hangar_Take_1' | 'Hangar_Take_2' | 'Hangar_Take_3' | 'Hangar_Take_4' | 'Hangar_Take_5' | 'Hangar_Take_6' | 'Hangar_Take_7' | 'Junior_Accountant' | 'Personnel_Manager' | 'Project_Manager' | 'Rent_Factory_Facility' | 'Rent_Office' | 'Rent_Research_Facility' | 'Security_Officer' | 'Skill_Plan_Manager' | 'Starbase_Defense_Operator' | 'Starbase_Fuel_Technician' | 'Station_Manager' | 'Trader'[];\n roles_at_hq?: 'Account_Take_1' | 'Account_Take_2' | 'Account_Take_3' | 'Account_Take_4' | 'Account_Take_5' | 'Account_Take_6' | 'Account_Take_7' | 'Accountant' | 'Auditor' | 'Brand_Manager' | 'Communications_Officer' | 'Config_Equipment' | 'Config_Starbase_Equipment' | 'Container_Take_1' | 'Container_Take_2' | 'Container_Take_3' | 'Container_Take_4' | 'Container_Take_5' | 'Container_Take_6' | 'Container_Take_7' | 'Contract_Manager' | 'Deliveries_Container_Take' | 'Deliveries_Query' | 'Deliveries_Take' | 'Diplomat' | 'Director' | 'Factory_Manager' | 'Fitting_Manager' | 'Hangar_Query_1' | 'Hangar_Query_2' | 'Hangar_Query_3' | 'Hangar_Query_4' | 'Hangar_Query_5' | 'Hangar_Query_6' | 'Hangar_Query_7' | 'Hangar_Take_1' | 'Hangar_Take_2' | 'Hangar_Take_3' | 'Hangar_Take_4' | 'Hangar_Take_5' | 'Hangar_Take_6' | 'Hangar_Take_7' | 'Junior_Accountant' | 'Personnel_Manager' | 'Project_Manager' | 'Rent_Factory_Facility' | 'Rent_Office' | 'Rent_Research_Facility' | 'Security_Officer' | 'Skill_Plan_Manager' | 'Starbase_Defense_Operator' | 'Starbase_Fuel_Technician' | 'Station_Manager' | 'Trader'[];\n roles_at_other?: 'Account_Take_1' | 'Account_Take_2' | 'Account_Take_3' | 'Account_Take_4' | 'Account_Take_5' | 'Account_Take_6' | 'Account_Take_7' | 'Accountant' | 'Auditor' | 'Brand_Manager' | 'Communications_Officer' | 'Config_Equipment' | 'Config_Starbase_Equipment' | 'Container_Take_1' | 'Container_Take_2' | 'Container_Take_3' | 'Container_Take_4' | 'Container_Take_5' | 'Container_Take_6' | 'Container_Take_7' | 'Contract_Manager' | 'Deliveries_Container_Take' | 'Deliveries_Query' | 'Deliveries_Take' | 'Diplomat' | 'Director' | 'Factory_Manager' | 'Fitting_Manager' | 'Hangar_Query_1' | 'Hangar_Query_2' | 'Hangar_Query_3' | 'Hangar_Query_4' | 'Hangar_Query_5' | 'Hangar_Query_6' | 'Hangar_Query_7' | 'Hangar_Take_1' | 'Hangar_Take_2' | 'Hangar_Take_3' | 'Hangar_Take_4' | 'Hangar_Take_5' | 'Hangar_Take_6' | 'Hangar_Take_7' | 'Junior_Accountant' | 'Personnel_Manager' | 'Project_Manager' | 'Rent_Factory_Facility' | 'Rent_Office' | 'Rent_Research_Facility' | 'Security_Officer' | 'Skill_Plan_Manager' | 'Starbase_Defense_Operator' | 'Starbase_Fuel_Technician' | 'Station_Manager' | 'Trader'[];\n}\n\nexport interface CharactersCharacterIdStandingsGet {\n from_id: number;\n from_type: 'agent' | 'npc_corp' | 'faction';\n standing: number;\n}\n\nexport interface CharactersCharacterIdTitlesGet {\n name?: string;\n title_id?: number;\n}\n\nexport interface CharactersDetail {\n alliance_id?: number;\n birthday: string;\n bloodline_id: number;\n corporation_id: number;\n description?: string;\n faction_id?: number;\n gender: 'male' | 'female';\n name: string;\n race_id: number;\n security_status?: number;\n title?: string;\n}\n\n// --- Clones ---\n\nexport interface CharactersCharacterIdClonesGet {\n home_location?: {\n location_id?: number;\n location_type?: 'station' | 'structure';\n };\n jump_clones: ({\n implants: number[];\n jump_clone_id: number;\n location_id: number;\n location_type: 'station' | 'structure';\n name?: string;\n })[];\n last_clone_jump_date?: string;\n last_station_change_date?: string;\n}\n\n// --- Contacts ---\n\nexport interface AlliancesAllianceIdContactsGet {\n contact_id: number;\n contact_type: 'character' | 'corporation' | 'alliance' | 'faction';\n label_ids?: number[];\n standing: number;\n}\n\nexport interface AlliancesAllianceIdContactsLabelsGet {\n label_id: number;\n label_name: string;\n}\n\nexport interface CharactersCharacterIdContactsGet {\n contact_id: number;\n contact_type: 'character' | 'corporation' | 'alliance' | 'faction';\n is_blocked?: boolean;\n is_watched?: boolean;\n label_ids?: number[];\n standing: number;\n}\n\nexport interface CharactersCharacterIdContactsLabelsGet {\n label_id: number;\n label_name: string;\n}\n\nexport interface CorporationsCorporationIdContactsGet {\n contact_id: number;\n contact_type: 'character' | 'corporation' | 'alliance' | 'faction';\n is_watched?: boolean;\n label_ids?: number[];\n standing: number;\n}\n\nexport interface CorporationsCorporationIdContactsLabelsGet {\n label_id: number;\n label_name: string;\n}\n\n// --- Contracts ---\n\nexport interface CharactersCharacterIdContractsContractIdBidsGet {\n amount: number;\n bid_id: number;\n bidder_id: number;\n date_bid: string;\n}\n\nexport interface CharactersCharacterIdContractsContractIdItemsGet {\n is_included: boolean;\n is_singleton: boolean;\n quantity: number;\n raw_quantity?: number;\n record_id: number;\n type_id: number;\n}\n\nexport interface CharactersCharacterIdContractsGet {\n acceptor_id: number;\n assignee_id: number;\n availability: 'public' | 'personal' | 'corporation' | 'alliance';\n buyout?: number;\n collateral?: number;\n contract_id: number;\n date_accepted?: string;\n date_completed?: string;\n date_expired: string;\n date_issued: string;\n days_to_complete?: number;\n end_location_id?: number;\n for_corporation: boolean;\n issuer_corporation_id: number;\n issuer_id: number;\n price?: number;\n reward?: number;\n start_location_id?: number;\n status: 'outstanding' | 'in_progress' | 'finished_issuer' | 'finished_contractor' | 'finished' | 'cancelled' | 'rejected' | 'failed' | 'deleted' | 'reversed';\n title?: string;\n type: 'unknown' | 'item_exchange' | 'auction' | 'courier' | 'loan';\n volume?: number;\n}\n\nexport interface ContractsPublicBidsContractIdGet {\n amount: number;\n bid_id: number;\n date_bid: string;\n}\n\nexport interface ContractsPublicItemsContractIdGet {\n is_blueprint_copy?: boolean;\n is_included: boolean;\n item_id?: number;\n material_efficiency?: number;\n quantity: number;\n record_id: number;\n runs?: number;\n time_efficiency?: number;\n type_id: number;\n}\n\nexport interface ContractsPublicRegionIdGet {\n buyout?: number;\n collateral?: number;\n contract_id: number;\n date_expired: string;\n date_issued: string;\n days_to_complete?: number;\n end_location_id?: number;\n for_corporation?: boolean;\n issuer_corporation_id: number;\n issuer_id: number;\n price?: number;\n reward?: number;\n start_location_id?: number;\n title?: string;\n type: 'unknown' | 'item_exchange' | 'auction' | 'courier' | 'loan';\n volume?: number;\n}\n\nexport interface CorporationsCorporationIdContractsContractIdBidsGet {\n amount: number;\n bid_id: number;\n bidder_id: number;\n date_bid: string;\n}\n\nexport interface CorporationsCorporationIdContractsContractIdItemsGet {\n is_included: boolean;\n is_singleton: boolean;\n quantity: number;\n raw_quantity?: number;\n record_id: number;\n type_id: number;\n}\n\nexport interface CorporationsCorporationIdContractsGet {\n acceptor_id: number;\n assignee_id: number;\n availability: 'public' | 'personal' | 'corporation' | 'alliance';\n buyout?: number;\n collateral?: number;\n contract_id: number;\n date_accepted?: string;\n date_completed?: string;\n date_expired: string;\n date_issued: string;\n days_to_complete?: number;\n end_location_id?: number;\n for_corporation: boolean;\n issuer_corporation_id: number;\n issuer_id: number;\n price?: number;\n reward?: number;\n start_location_id?: number;\n status: 'outstanding' | 'in_progress' | 'finished_issuer' | 'finished_contractor' | 'finished' | 'cancelled' | 'rejected' | 'failed' | 'deleted' | 'reversed';\n title?: string;\n type: 'unknown' | 'item_exchange' | 'auction' | 'courier' | 'loan';\n volume?: number;\n}\n\n// --- Corporation ---\n\nexport interface CorporationsCorporationIdAlliancehistoryGet {\n alliance_id?: number;\n is_deleted?: boolean;\n record_id: number;\n start_date: string;\n}\n\nexport interface CorporationsCorporationIdBlueprintsGet {\n item_id: number;\n location_flag: 'AssetSafety' | 'AutoFit' | 'Bonus' | 'Booster' | 'BoosterBay' | 'Capsule' | 'CapsuleerDeliveries' | 'Cargo' | 'CorpDeliveries' | 'CorpSAG1' | 'CorpSAG2' | 'CorpSAG3' | 'CorpSAG4' | 'CorpSAG5' | 'CorpSAG6' | 'CorpSAG7' | 'CorporationGoalDeliveries' | 'CrateLoot' | 'Deliveries' | 'DroneBay' | 'DustBattle' | 'DustDatabank' | 'ExpeditionHold' | 'FighterBay' | 'FighterTube0' | 'FighterTube1' | 'FighterTube2' | 'FighterTube3' | 'FighterTube4' | 'FleetHangar' | 'FrigateEscapeBay' | 'Hangar' | 'HangarAll' | 'HiSlot0' | 'HiSlot1' | 'HiSlot2' | 'HiSlot3' | 'HiSlot4' | 'HiSlot5' | 'HiSlot6' | 'HiSlot7' | 'HiddenModifiers' | 'Implant' | 'Impounded' | 'InfrastructureHangar' | 'JunkyardReprocessed' | 'JunkyardTrashed' | 'LoSlot0' | 'LoSlot1' | 'LoSlot2' | 'LoSlot3' | 'LoSlot4' | 'LoSlot5' | 'LoSlot6' | 'LoSlot7' | 'Locked' | 'MedSlot0' | 'MedSlot1' | 'MedSlot2' | 'MedSlot3' | 'MedSlot4' | 'MedSlot5' | 'MedSlot6' | 'MedSlot7' | 'MobileDepotHold' | 'MoonMaterialBay' | 'OfficeFolder' | 'Pilot' | 'PlanetSurface' | 'QuafeBay' | 'QuantumCoreRoom' | 'Reward' | 'RigSlot0' | 'RigSlot1' | 'RigSlot2' | 'RigSlot3' | 'RigSlot4' | 'RigSlot5' | 'RigSlot6' | 'RigSlot7' | 'SecondaryStorage' | 'ServiceSlot0' | 'ServiceSlot1' | 'ServiceSlot2' | 'ServiceSlot3' | 'ServiceSlot4' | 'ServiceSlot5' | 'ServiceSlot6' | 'ServiceSlot7' | 'ShipHangar' | 'ShipOffline' | 'Skill' | 'SkillInTraining' | 'SpecializedAmmoHold' | 'SpecializedAsteroidHold' | 'SpecializedCommandCenterHold' | 'SpecializedFuelBay' | 'SpecializedGasHold' | 'SpecializedIceHold' | 'SpecializedIndustrialShipHold' | 'SpecializedLargeShipHold' | 'SpecializedMaterialBay' | 'SpecializedMediumShipHold' | 'SpecializedMineralHold' | 'SpecializedOreHold' | 'SpecializedPlanetaryCommoditiesHold' | 'SpecializedSalvageHold' | 'SpecializedShipHold' | 'SpecializedSmallShipHold' | 'StructureActive' | 'StructureFuel' | 'StructureInactive' | 'StructureOffline' | 'SubSystemBay' | 'SubSystemSlot0' | 'SubSystemSlot1' | 'SubSystemSlot2' | 'SubSystemSlot3' | 'SubSystemSlot4' | 'SubSystemSlot5' | 'SubSystemSlot6' | 'SubSystemSlot7' | 'Unlocked' | 'Wallet' | 'Wardrobe';\n location_id: number;\n material_efficiency: number;\n quantity: number;\n runs: number;\n time_efficiency: number;\n type_id: number;\n}\n\nexport interface CorporationsCorporationIdContainersLogsGet {\n action: 'add' | 'assemble' | 'configure' | 'enter_password' | 'lock' | 'move' | 'repackage' | 'set_name' | 'set_password' | 'unlock';\n character_id: number;\n container_id: number;\n container_type_id: number;\n location_flag: 'AssetSafety' | 'AutoFit' | 'Bonus' | 'Booster' | 'BoosterBay' | 'Capsule' | 'CapsuleerDeliveries' | 'Cargo' | 'CorpDeliveries' | 'CorpSAG1' | 'CorpSAG2' | 'CorpSAG3' | 'CorpSAG4' | 'CorpSAG5' | 'CorpSAG6' | 'CorpSAG7' | 'CorporationGoalDeliveries' | 'CrateLoot' | 'Deliveries' | 'DroneBay' | 'DustBattle' | 'DustDatabank' | 'ExpeditionHold' | 'FighterBay' | 'FighterTube0' | 'FighterTube1' | 'FighterTube2' | 'FighterTube3' | 'FighterTube4' | 'FleetHangar' | 'FrigateEscapeBay' | 'Hangar' | 'HangarAll' | 'HiSlot0' | 'HiSlot1' | 'HiSlot2' | 'HiSlot3' | 'HiSlot4' | 'HiSlot5' | 'HiSlot6' | 'HiSlot7' | 'HiddenModifiers' | 'Implant' | 'Impounded' | 'InfrastructureHangar' | 'JunkyardReprocessed' | 'JunkyardTrashed' | 'LoSlot0' | 'LoSlot1' | 'LoSlot2' | 'LoSlot3' | 'LoSlot4' | 'LoSlot5' | 'LoSlot6' | 'LoSlot7' | 'Locked' | 'MedSlot0' | 'MedSlot1' | 'MedSlot2' | 'MedSlot3' | 'MedSlot4' | 'MedSlot5' | 'MedSlot6' | 'MedSlot7' | 'MobileDepotHold' | 'MoonMaterialBay' | 'OfficeFolder' | 'Pilot' | 'PlanetSurface' | 'QuafeBay' | 'QuantumCoreRoom' | 'Reward' | 'RigSlot0' | 'RigSlot1' | 'RigSlot2' | 'RigSlot3' | 'RigSlot4' | 'RigSlot5' | 'RigSlot6' | 'RigSlot7' | 'SecondaryStorage' | 'ServiceSlot0' | 'ServiceSlot1' | 'ServiceSlot2' | 'ServiceSlot3' | 'ServiceSlot4' | 'ServiceSlot5' | 'ServiceSlot6' | 'ServiceSlot7' | 'ShipHangar' | 'ShipOffline' | 'Skill' | 'SkillInTraining' | 'SpecializedAmmoHold' | 'SpecializedAsteroidHold' | 'SpecializedCommandCenterHold' | 'SpecializedFuelBay' | 'SpecializedGasHold' | 'SpecializedIceHold' | 'SpecializedIndustrialShipHold' | 'SpecializedLargeShipHold' | 'SpecializedMaterialBay' | 'SpecializedMediumShipHold' | 'SpecializedMineralHold' | 'SpecializedOreHold' | 'SpecializedPlanetaryCommoditiesHold' | 'SpecializedSalvageHold' | 'SpecializedShipHold' | 'SpecializedSmallShipHold' | 'StructureActive' | 'StructureFuel' | 'StructureInactive' | 'StructureOffline' | 'SubSystemBay' | 'SubSystemSlot0' | 'SubSystemSlot1' | 'SubSystemSlot2' | 'SubSystemSlot3' | 'SubSystemSlot4' | 'SubSystemSlot5' | 'SubSystemSlot6' | 'SubSystemSlot7' | 'Unlocked' | 'Wallet' | 'Wardrobe';\n location_id: number;\n logged_at: string;\n new_config_bitmask?: number;\n old_config_bitmask?: number;\n password_type?: 'config' | 'general';\n quantity?: number;\n type_id?: number;\n}\n\nexport interface CorporationsCorporationIdDivisionsGet {\n hangar?: ({\n division?: number;\n name?: string;\n })[];\n wallet?: ({\n division?: number;\n name?: string;\n })[];\n}\n\nexport interface CorporationsCorporationIdFacilitiesGet {\n facility_id: number;\n system_id: number;\n type_id: number;\n}\n\nexport interface CorporationsCorporationIdIconsGet {\n px128x128?: string;\n px256x256?: string;\n px64x64?: string;\n}\n\nexport interface CorporationsCorporationIdMedalsGet {\n created_at: string;\n creator_id: number;\n description: string;\n medal_id: number;\n title: string;\n}\n\nexport interface CorporationsCorporationIdMedalsIssuedGet {\n character_id: number;\n issued_at: string;\n issuer_id: number;\n medal_id: number;\n reason: string;\n status: 'private' | 'public';\n}\n\nexport interface CorporationsCorporationIdMembersTitlesGet {\n character_id: number;\n titles: number[];\n}\n\nexport interface CorporationsCorporationIdMembertrackingGet {\n base_id?: number;\n character_id: number;\n location_id?: number;\n logoff_date?: string;\n logon_date?: string;\n ship_type_id?: number;\n start_date?: string;\n}\n\nexport interface CorporationsCorporationIdRolesGet {\n character_id: number;\n grantable_roles?: 'Account_Take_1' | 'Account_Take_2' | 'Account_Take_3' | 'Account_Take_4' | 'Account_Take_5' | 'Account_Take_6' | 'Account_Take_7' | 'Accountant' | 'Auditor' | 'Brand_Manager' | 'Communications_Officer' | 'Config_Equipment' | 'Config_Starbase_Equipment' | 'Container_Take_1' | 'Container_Take_2' | 'Container_Take_3' | 'Container_Take_4' | 'Container_Take_5' | 'Container_Take_6' | 'Container_Take_7' | 'Contract_Manager' | 'Deliveries_Container_Take' | 'Deliveries_Query' | 'Deliveries_Take' | 'Diplomat' | 'Director' | 'Factory_Manager' | 'Fitting_Manager' | 'Hangar_Query_1' | 'Hangar_Query_2' | 'Hangar_Query_3' | 'Hangar_Query_4' | 'Hangar_Query_5' | 'Hangar_Query_6' | 'Hangar_Query_7' | 'Hangar_Take_1' | 'Hangar_Take_2' | 'Hangar_Take_3' | 'Hangar_Take_4' | 'Hangar_Take_5' | 'Hangar_Take_6' | 'Hangar_Take_7' | 'Junior_Accountant' | 'Personnel_Manager' | 'Project_Manager' | 'Rent_Factory_Facility' | 'Rent_Office' | 'Rent_Research_Facility' | 'Security_Officer' | 'Skill_Plan_Manager' | 'Starbase_Defense_Operator' | 'Starbase_Fuel_Technician' | 'Station_Manager' | 'Trader'[];\n grantable_roles_at_base?: 'Account_Take_1' | 'Account_Take_2' | 'Account_Take_3' | 'Account_Take_4' | 'Account_Take_5' | 'Account_Take_6' | 'Account_Take_7' | 'Accountant' | 'Auditor' | 'Brand_Manager' | 'Communications_Officer' | 'Config_Equipment' | 'Config_Starbase_Equipment' | 'Container_Take_1' | 'Container_Take_2' | 'Container_Take_3' | 'Container_Take_4' | 'Container_Take_5' | 'Container_Take_6' | 'Container_Take_7' | 'Contract_Manager' | 'Deliveries_Container_Take' | 'Deliveries_Query' | 'Deliveries_Take' | 'Diplomat' | 'Director' | 'Factory_Manager' | 'Fitting_Manager' | 'Hangar_Query_1' | 'Hangar_Query_2' | 'Hangar_Query_3' | 'Hangar_Query_4' | 'Hangar_Query_5' | 'Hangar_Query_6' | 'Hangar_Query_7' | 'Hangar_Take_1' | 'Hangar_Take_2' | 'Hangar_Take_3' | 'Hangar_Take_4' | 'Hangar_Take_5' | 'Hangar_Take_6' | 'Hangar_Take_7' | 'Junior_Accountant' | 'Personnel_Manager' | 'Project_Manager' | 'Rent_Factory_Facility' | 'Rent_Office' | 'Rent_Research_Facility' | 'Security_Officer' | 'Skill_Plan_Manager' | 'Starbase_Defense_Operator' | 'Starbase_Fuel_Technician' | 'Station_Manager' | 'Trader'[];\n grantable_roles_at_hq?: 'Account_Take_1' | 'Account_Take_2' | 'Account_Take_3' | 'Account_Take_4' | 'Account_Take_5' | 'Account_Take_6' | 'Account_Take_7' | 'Accountant' | 'Auditor' | 'Brand_Manager' | 'Communications_Officer' | 'Config_Equipment' | 'Config_Starbase_Equipment' | 'Container_Take_1' | 'Container_Take_2' | 'Container_Take_3' | 'Container_Take_4' | 'Container_Take_5' | 'Container_Take_6' | 'Container_Take_7' | 'Contract_Manager' | 'Deliveries_Container_Take' | 'Deliveries_Query' | 'Deliveries_Take' | 'Diplomat' | 'Director' | 'Factory_Manager' | 'Fitting_Manager' | 'Hangar_Query_1' | 'Hangar_Query_2' | 'Hangar_Query_3' | 'Hangar_Query_4' | 'Hangar_Query_5' | 'Hangar_Query_6' | 'Hangar_Query_7' | 'Hangar_Take_1' | 'Hangar_Take_2' | 'Hangar_Take_3' | 'Hangar_Take_4' | 'Hangar_Take_5' | 'Hangar_Take_6' | 'Hangar_Take_7' | 'Junior_Accountant' | 'Personnel_Manager' | 'Project_Manager' | 'Rent_Factory_Facility' | 'Rent_Office' | 'Rent_Research_Facility' | 'Security_Officer' | 'Skill_Plan_Manager' | 'Starbase_Defense_Operator' | 'Starbase_Fuel_Technician' | 'Station_Manager' | 'Trader'[];\n grantable_roles_at_other?: 'Account_Take_1' | 'Account_Take_2' | 'Account_Take_3' | 'Account_Take_4' | 'Account_Take_5' | 'Account_Take_6' | 'Account_Take_7' | 'Accountant' | 'Auditor' | 'Brand_Manager' | 'Communications_Officer' | 'Config_Equipment' | 'Config_Starbase_Equipment' | 'Container_Take_1' | 'Container_Take_2' | 'Container_Take_3' | 'Container_Take_4' | 'Container_Take_5' | 'Container_Take_6' | 'Container_Take_7' | 'Contract_Manager' | 'Deliveries_Container_Take' | 'Deliveries_Query' | 'Deliveries_Take' | 'Diplomat' | 'Director' | 'Factory_Manager' | 'Fitting_Manager' | 'Hangar_Query_1' | 'Hangar_Query_2' | 'Hangar_Query_3' | 'Hangar_Query_4' | 'Hangar_Query_5' | 'Hangar_Query_6' | 'Hangar_Query_7' | 'Hangar_Take_1' | 'Hangar_Take_2' | 'Hangar_Take_3' | 'Hangar_Take_4' | 'Hangar_Take_5' | 'Hangar_Take_6' | 'Hangar_Take_7' | 'Junior_Accountant' | 'Personnel_Manager' | 'Project_Manager' | 'Rent_Factory_Facility' | 'Rent_Office' | 'Rent_Research_Facility' | 'Security_Officer' | 'Skill_Plan_Manager' | 'Starbase_Defense_Operator' | 'Starbase_Fuel_Technician' | 'Station_Manager' | 'Trader'[];\n roles?: 'Account_Take_1' | 'Account_Take_2' | 'Account_Take_3' | 'Account_Take_4' | 'Account_Take_5' | 'Account_Take_6' | 'Account_Take_7' | 'Accountant' | 'Auditor' | 'Brand_Manager' | 'Communications_Officer' | 'Config_Equipment' | 'Config_Starbase_Equipment' | 'Container_Take_1' | 'Container_Take_2' | 'Container_Take_3' | 'Container_Take_4' | 'Container_Take_5' | 'Container_Take_6' | 'Container_Take_7' | 'Contract_Manager' | 'Deliveries_Container_Take' | 'Deliveries_Query' | 'Deliveries_Take' | 'Diplomat' | 'Director' | 'Factory_Manager' | 'Fitting_Manager' | 'Hangar_Query_1' | 'Hangar_Query_2' | 'Hangar_Query_3' | 'Hangar_Query_4' | 'Hangar_Query_5' | 'Hangar_Query_6' | 'Hangar_Query_7' | 'Hangar_Take_1' | 'Hangar_Take_2' | 'Hangar_Take_3' | 'Hangar_Take_4' | 'Hangar_Take_5' | 'Hangar_Take_6' | 'Hangar_Take_7' | 'Junior_Accountant' | 'Personnel_Manager' | 'Project_Manager' | 'Rent_Factory_Facility' | 'Rent_Office' | 'Rent_Research_Facility' | 'Security_Officer' | 'Skill_Plan_Manager' | 'Starbase_Defense_Operator' | 'Starbase_Fuel_Technician' | 'Station_Manager' | 'Trader'[];\n roles_at_base?: 'Account_Take_1' | 'Account_Take_2' | 'Account_Take_3' | 'Account_Take_4' | 'Account_Take_5' | 'Account_Take_6' | 'Account_Take_7' | 'Accountant' | 'Auditor' | 'Brand_Manager' | 'Communications_Officer' | 'Config_Equipment' | 'Config_Starbase_Equipment' | 'Container_Take_1' | 'Container_Take_2' | 'Container_Take_3' | 'Container_Take_4' | 'Container_Take_5' | 'Container_Take_6' | 'Container_Take_7' | 'Contract_Manager' | 'Deliveries_Container_Take' | 'Deliveries_Query' | 'Deliveries_Take' | 'Diplomat' | 'Director' | 'Factory_Manager' | 'Fitting_Manager' | 'Hangar_Query_1' | 'Hangar_Query_2' | 'Hangar_Query_3' | 'Hangar_Query_4' | 'Hangar_Query_5' | 'Hangar_Query_6' | 'Hangar_Query_7' | 'Hangar_Take_1' | 'Hangar_Take_2' | 'Hangar_Take_3' | 'Hangar_Take_4' | 'Hangar_Take_5' | 'Hangar_Take_6' | 'Hangar_Take_7' | 'Junior_Accountant' | 'Personnel_Manager' | 'Project_Manager' | 'Rent_Factory_Facility' | 'Rent_Office' | 'Rent_Research_Facility' | 'Security_Officer' | 'Skill_Plan_Manager' | 'Starbase_Defense_Operator' | 'Starbase_Fuel_Technician' | 'Station_Manager' | 'Trader'[];\n roles_at_hq?: 'Account_Take_1' | 'Account_Take_2' | 'Account_Take_3' | 'Account_Take_4' | 'Account_Take_5' | 'Account_Take_6' | 'Account_Take_7' | 'Accountant' | 'Auditor' | 'Brand_Manager' | 'Communications_Officer' | 'Config_Equipment' | 'Config_Starbase_Equipment' | 'Container_Take_1' | 'Container_Take_2' | 'Container_Take_3' | 'Container_Take_4' | 'Container_Take_5' | 'Container_Take_6' | 'Container_Take_7' | 'Contract_Manager' | 'Deliveries_Container_Take' | 'Deliveries_Query' | 'Deliveries_Take' | 'Diplomat' | 'Director' | 'Factory_Manager' | 'Fitting_Manager' | 'Hangar_Query_1' | 'Hangar_Query_2' | 'Hangar_Query_3' | 'Hangar_Query_4' | 'Hangar_Query_5' | 'Hangar_Query_6' | 'Hangar_Query_7' | 'Hangar_Take_1' | 'Hangar_Take_2' | 'Hangar_Take_3' | 'Hangar_Take_4' | 'Hangar_Take_5' | 'Hangar_Take_6' | 'Hangar_Take_7' | 'Junior_Accountant' | 'Personnel_Manager' | 'Project_Manager' | 'Rent_Factory_Facility' | 'Rent_Office' | 'Rent_Research_Facility' | 'Security_Officer' | 'Skill_Plan_Manager' | 'Starbase_Defense_Operator' | 'Starbase_Fuel_Technician' | 'Station_Manager' | 'Trader'[];\n roles_at_other?: 'Account_Take_1' | 'Account_Take_2' | 'Account_Take_3' | 'Account_Take_4' | 'Account_Take_5' | 'Account_Take_6' | 'Account_Take_7' | 'Accountant' | 'Auditor' | 'Brand_Manager' | 'Communications_Officer' | 'Config_Equipment' | 'Config_Starbase_Equipment' | 'Container_Take_1' | 'Container_Take_2' | 'Container_Take_3' | 'Container_Take_4' | 'Container_Take_5' | 'Container_Take_6' | 'Container_Take_7' | 'Contract_Manager' | 'Deliveries_Container_Take' | 'Deliveries_Query' | 'Deliveries_Take' | 'Diplomat' | 'Director' | 'Factory_Manager' | 'Fitting_Manager' | 'Hangar_Query_1' | 'Hangar_Query_2' | 'Hangar_Query_3' | 'Hangar_Query_4' | 'Hangar_Query_5' | 'Hangar_Query_6' | 'Hangar_Query_7' | 'Hangar_Take_1' | 'Hangar_Take_2' | 'Hangar_Take_3' | 'Hangar_Take_4' | 'Hangar_Take_5' | 'Hangar_Take_6' | 'Hangar_Take_7' | 'Junior_Accountant' | 'Personnel_Manager' | 'Project_Manager' | 'Rent_Factory_Facility' | 'Rent_Office' | 'Rent_Research_Facility' | 'Security_Officer' | 'Skill_Plan_Manager' | 'Starbase_Defense_Operator' | 'Starbase_Fuel_Technician' | 'Station_Manager' | 'Trader'[];\n}\n\nexport interface CorporationsCorporationIdRolesHistoryGet {\n changed_at: string;\n character_id: number;\n issuer_id: number;\n new_roles: 'Account_Take_1' | 'Account_Take_2' | 'Account_Take_3' | 'Account_Take_4' | 'Account_Take_5' | 'Account_Take_6' | 'Account_Take_7' | 'Accountant' | 'Auditor' | 'Brand_Manager' | 'Communications_Officer' | 'Config_Equipment' | 'Config_Starbase_Equipment' | 'Container_Take_1' | 'Container_Take_2' | 'Container_Take_3' | 'Container_Take_4' | 'Container_Take_5' | 'Container_Take_6' | 'Container_Take_7' | 'Contract_Manager' | 'Deliveries_Container_Take' | 'Deliveries_Query' | 'Deliveries_Take' | 'Diplomat' | 'Director' | 'Factory_Manager' | 'Fitting_Manager' | 'Hangar_Query_1' | 'Hangar_Query_2' | 'Hangar_Query_3' | 'Hangar_Query_4' | 'Hangar_Query_5' | 'Hangar_Query_6' | 'Hangar_Query_7' | 'Hangar_Take_1' | 'Hangar_Take_2' | 'Hangar_Take_3' | 'Hangar_Take_4' | 'Hangar_Take_5' | 'Hangar_Take_6' | 'Hangar_Take_7' | 'Junior_Accountant' | 'Personnel_Manager' | 'Project_Manager' | 'Rent_Factory_Facility' | 'Rent_Office' | 'Rent_Research_Facility' | 'Security_Officer' | 'Skill_Plan_Manager' | 'Starbase_Defense_Operator' | 'Starbase_Fuel_Technician' | 'Station_Manager' | 'Trader'[];\n old_roles: 'Account_Take_1' | 'Account_Take_2' | 'Account_Take_3' | 'Account_Take_4' | 'Account_Take_5' | 'Account_Take_6' | 'Account_Take_7' | 'Accountant' | 'Auditor' | 'Brand_Manager' | 'Communications_Officer' | 'Config_Equipment' | 'Config_Starbase_Equipment' | 'Container_Take_1' | 'Container_Take_2' | 'Container_Take_3' | 'Container_Take_4' | 'Container_Take_5' | 'Container_Take_6' | 'Container_Take_7' | 'Contract_Manager' | 'Deliveries_Container_Take' | 'Deliveries_Query' | 'Deliveries_Take' | 'Diplomat' | 'Director' | 'Factory_Manager' | 'Fitting_Manager' | 'Hangar_Query_1' | 'Hangar_Query_2' | 'Hangar_Query_3' | 'Hangar_Query_4' | 'Hangar_Query_5' | 'Hangar_Query_6' | 'Hangar_Query_7' | 'Hangar_Take_1' | 'Hangar_Take_2' | 'Hangar_Take_3' | 'Hangar_Take_4' | 'Hangar_Take_5' | 'Hangar_Take_6' | 'Hangar_Take_7' | 'Junior_Accountant' | 'Personnel_Manager' | 'Project_Manager' | 'Rent_Factory_Facility' | 'Rent_Office' | 'Rent_Research_Facility' | 'Security_Officer' | 'Skill_Plan_Manager' | 'Starbase_Defense_Operator' | 'Starbase_Fuel_Technician' | 'Station_Manager' | 'Trader'[];\n role_type: 'grantable_roles' | 'grantable_roles_at_base' | 'grantable_roles_at_hq' | 'grantable_roles_at_other' | 'roles' | 'roles_at_base' | 'roles_at_hq' | 'roles_at_other';\n}\n\nexport interface CorporationsCorporationIdShareholdersGet {\n share_count: number;\n shareholder_id: number;\n shareholder_type: 'character' | 'corporation';\n}\n\nexport interface CorporationsCorporationIdStandingsGet {\n from_id: number;\n from_type: 'agent' | 'npc_corp' | 'faction';\n standing: number;\n}\n\nexport interface CorporationsCorporationIdStarbasesGet {\n moon_id?: number;\n onlined_since?: string;\n reinforced_until?: string;\n starbase_id: number;\n state?: 'offline' | 'online' | 'onlining' | 'reinforced' | 'unanchoring';\n system_id: number;\n type_id: number;\n unanchor_at?: string;\n}\n\nexport interface CorporationsCorporationIdStarbasesStarbaseIdGet {\n allow_alliance_members: boolean;\n allow_corporation_members: boolean;\n anchor: 'alliance_member' | 'config_starbase_equipment_role' | 'corporation_member' | 'starbase_fuel_technician_role';\n attack_if_at_war: boolean;\n attack_if_other_security_status_dropping: boolean;\n attack_security_status_threshold?: number;\n attack_standing_threshold?: number;\n fuel_bay_take: 'alliance_member' | 'config_starbase_equipment_role' | 'corporation_member' | 'starbase_fuel_technician_role';\n fuel_bay_view: 'alliance_member' | 'config_starbase_equipment_role' | 'corporation_member' | 'starbase_fuel_technician_role';\n fuels?: ({\n quantity: number;\n type_id: number;\n })[];\n offline: 'alliance_member' | 'config_starbase_equipment_role' | 'corporation_member' | 'starbase_fuel_technician_role';\n online: 'alliance_member' | 'config_starbase_equipment_role' | 'corporation_member' | 'starbase_fuel_technician_role';\n unanchor: 'alliance_member' | 'config_starbase_equipment_role' | 'corporation_member' | 'starbase_fuel_technician_role';\n use_alliance_standings: boolean;\n}\n\nexport interface CorporationsCorporationIdStructuresGet {\n corporation_id: number;\n fuel_expires?: string;\n name?: string;\n next_reinforce_apply?: string;\n next_reinforce_hour?: number;\n profile_id: number;\n reinforce_hour?: number;\n services?: ({\n name: string;\n state: 'online' | 'offline' | 'cleanup';\n })[];\n state: 'anchor_vulnerable' | 'anchoring' | 'armor_reinforce' | 'armor_vulnerable' | 'deploy_vulnerable' | 'fitting_invulnerable' | 'hull_reinforce' | 'hull_vulnerable' | 'online_deprecated' | 'onlining_vulnerable' | 'shield_vulnerable' | 'unanchored' | 'unknown';\n state_timer_end?: string;\n state_timer_start?: string;\n structure_id: number;\n system_id: number;\n type_id: number;\n unanchors_at?: string;\n}\n\nexport interface CorporationsCorporationIdTitlesGet {\n grantable_roles?: 'Account_Take_1' | 'Account_Take_2' | 'Account_Take_3' | 'Account_Take_4' | 'Account_Take_5' | 'Account_Take_6' | 'Account_Take_7' | 'Accountant' | 'Auditor' | 'Brand_Manager' | 'Communications_Officer' | 'Config_Equipment' | 'Config_Starbase_Equipment' | 'Container_Take_1' | 'Container_Take_2' | 'Container_Take_3' | 'Container_Take_4' | 'Container_Take_5' | 'Container_Take_6' | 'Container_Take_7' | 'Contract_Manager' | 'Deliveries_Container_Take' | 'Deliveries_Query' | 'Deliveries_Take' | 'Diplomat' | 'Director' | 'Factory_Manager' | 'Fitting_Manager' | 'Hangar_Query_1' | 'Hangar_Query_2' | 'Hangar_Query_3' | 'Hangar_Query_4' | 'Hangar_Query_5' | 'Hangar_Query_6' | 'Hangar_Query_7' | 'Hangar_Take_1' | 'Hangar_Take_2' | 'Hangar_Take_3' | 'Hangar_Take_4' | 'Hangar_Take_5' | 'Hangar_Take_6' | 'Hangar_Take_7' | 'Junior_Accountant' | 'Personnel_Manager' | 'Project_Manager' | 'Rent_Factory_Facility' | 'Rent_Office' | 'Rent_Research_Facility' | 'Security_Officer' | 'Skill_Plan_Manager' | 'Starbase_Defense_Operator' | 'Starbase_Fuel_Technician' | 'Station_Manager' | 'Trader'[];\n grantable_roles_at_base?: 'Account_Take_1' | 'Account_Take_2' | 'Account_Take_3' | 'Account_Take_4' | 'Account_Take_5' | 'Account_Take_6' | 'Account_Take_7' | 'Accountant' | 'Auditor' | 'Brand_Manager' | 'Communications_Officer' | 'Config_Equipment' | 'Config_Starbase_Equipment' | 'Container_Take_1' | 'Container_Take_2' | 'Container_Take_3' | 'Container_Take_4' | 'Container_Take_5' | 'Container_Take_6' | 'Container_Take_7' | 'Contract_Manager' | 'Deliveries_Container_Take' | 'Deliveries_Query' | 'Deliveries_Take' | 'Diplomat' | 'Director' | 'Factory_Manager' | 'Fitting_Manager' | 'Hangar_Query_1' | 'Hangar_Query_2' | 'Hangar_Query_3' | 'Hangar_Query_4' | 'Hangar_Query_5' | 'Hangar_Query_6' | 'Hangar_Query_7' | 'Hangar_Take_1' | 'Hangar_Take_2' | 'Hangar_Take_3' | 'Hangar_Take_4' | 'Hangar_Take_5' | 'Hangar_Take_6' | 'Hangar_Take_7' | 'Junior_Accountant' | 'Personnel_Manager' | 'Project_Manager' | 'Rent_Factory_Facility' | 'Rent_Office' | 'Rent_Research_Facility' | 'Security_Officer' | 'Skill_Plan_Manager' | 'Starbase_Defense_Operator' | 'Starbase_Fuel_Technician' | 'Station_Manager' | 'Trader'[];\n grantable_roles_at_hq?: 'Account_Take_1' | 'Account_Take_2' | 'Account_Take_3' | 'Account_Take_4' | 'Account_Take_5' | 'Account_Take_6' | 'Account_Take_7' | 'Accountant' | 'Auditor' | 'Brand_Manager' | 'Communications_Officer' | 'Config_Equipment' | 'Config_Starbase_Equipment' | 'Container_Take_1' | 'Container_Take_2' | 'Container_Take_3' | 'Container_Take_4' | 'Container_Take_5' | 'Container_Take_6' | 'Container_Take_7' | 'Contract_Manager' | 'Deliveries_Container_Take' | 'Deliveries_Query' | 'Deliveries_Take' | 'Diplomat' | 'Director' | 'Factory_Manager' | 'Fitting_Manager' | 'Hangar_Query_1' | 'Hangar_Query_2' | 'Hangar_Query_3' | 'Hangar_Query_4' | 'Hangar_Query_5' | 'Hangar_Query_6' | 'Hangar_Query_7' | 'Hangar_Take_1' | 'Hangar_Take_2' | 'Hangar_Take_3' | 'Hangar_Take_4' | 'Hangar_Take_5' | 'Hangar_Take_6' | 'Hangar_Take_7' | 'Junior_Accountant' | 'Personnel_Manager' | 'Project_Manager' | 'Rent_Factory_Facility' | 'Rent_Office' | 'Rent_Research_Facility' | 'Security_Officer' | 'Skill_Plan_Manager' | 'Starbase_Defense_Operator' | 'Starbase_Fuel_Technician' | 'Station_Manager' | 'Trader'[];\n grantable_roles_at_other?: 'Account_Take_1' | 'Account_Take_2' | 'Account_Take_3' | 'Account_Take_4' | 'Account_Take_5' | 'Account_Take_6' | 'Account_Take_7' | 'Accountant' | 'Auditor' | 'Brand_Manager' | 'Communications_Officer' | 'Config_Equipment' | 'Config_Starbase_Equipment' | 'Container_Take_1' | 'Container_Take_2' | 'Container_Take_3' | 'Container_Take_4' | 'Container_Take_5' | 'Container_Take_6' | 'Container_Take_7' | 'Contract_Manager' | 'Deliveries_Container_Take' | 'Deliveries_Query' | 'Deliveries_Take' | 'Diplomat' | 'Director' | 'Factory_Manager' | 'Fitting_Manager' | 'Hangar_Query_1' | 'Hangar_Query_2' | 'Hangar_Query_3' | 'Hangar_Query_4' | 'Hangar_Query_5' | 'Hangar_Query_6' | 'Hangar_Query_7' | 'Hangar_Take_1' | 'Hangar_Take_2' | 'Hangar_Take_3' | 'Hangar_Take_4' | 'Hangar_Take_5' | 'Hangar_Take_6' | 'Hangar_Take_7' | 'Junior_Accountant' | 'Personnel_Manager' | 'Project_Manager' | 'Rent_Factory_Facility' | 'Rent_Office' | 'Rent_Research_Facility' | 'Security_Officer' | 'Skill_Plan_Manager' | 'Starbase_Defense_Operator' | 'Starbase_Fuel_Technician' | 'Station_Manager' | 'Trader'[];\n name?: string;\n roles?: 'Account_Take_1' | 'Account_Take_2' | 'Account_Take_3' | 'Account_Take_4' | 'Account_Take_5' | 'Account_Take_6' | 'Account_Take_7' | 'Accountant' | 'Auditor' | 'Brand_Manager' | 'Communications_Officer' | 'Config_Equipment' | 'Config_Starbase_Equipment' | 'Container_Take_1' | 'Container_Take_2' | 'Container_Take_3' | 'Container_Take_4' | 'Container_Take_5' | 'Container_Take_6' | 'Container_Take_7' | 'Contract_Manager' | 'Deliveries_Container_Take' | 'Deliveries_Query' | 'Deliveries_Take' | 'Diplomat' | 'Director' | 'Factory_Manager' | 'Fitting_Manager' | 'Hangar_Query_1' | 'Hangar_Query_2' | 'Hangar_Query_3' | 'Hangar_Query_4' | 'Hangar_Query_5' | 'Hangar_Query_6' | 'Hangar_Query_7' | 'Hangar_Take_1' | 'Hangar_Take_2' | 'Hangar_Take_3' | 'Hangar_Take_4' | 'Hangar_Take_5' | 'Hangar_Take_6' | 'Hangar_Take_7' | 'Junior_Accountant' | 'Personnel_Manager' | 'Project_Manager' | 'Rent_Factory_Facility' | 'Rent_Office' | 'Rent_Research_Facility' | 'Security_Officer' | 'Skill_Plan_Manager' | 'Starbase_Defense_Operator' | 'Starbase_Fuel_Technician' | 'Station_Manager' | 'Trader'[];\n roles_at_base?: 'Account_Take_1' | 'Account_Take_2' | 'Account_Take_3' | 'Account_Take_4' | 'Account_Take_5' | 'Account_Take_6' | 'Account_Take_7' | 'Accountant' | 'Auditor' | 'Brand_Manager' | 'Communications_Officer' | 'Config_Equipment' | 'Config_Starbase_Equipment' | 'Container_Take_1' | 'Container_Take_2' | 'Container_Take_3' | 'Container_Take_4' | 'Container_Take_5' | 'Container_Take_6' | 'Container_Take_7' | 'Contract_Manager' | 'Deliveries_Container_Take' | 'Deliveries_Query' | 'Deliveries_Take' | 'Diplomat' | 'Director' | 'Factory_Manager' | 'Fitting_Manager' | 'Hangar_Query_1' | 'Hangar_Query_2' | 'Hangar_Query_3' | 'Hangar_Query_4' | 'Hangar_Query_5' | 'Hangar_Query_6' | 'Hangar_Query_7' | 'Hangar_Take_1' | 'Hangar_Take_2' | 'Hangar_Take_3' | 'Hangar_Take_4' | 'Hangar_Take_5' | 'Hangar_Take_6' | 'Hangar_Take_7' | 'Junior_Accountant' | 'Personnel_Manager' | 'Project_Manager' | 'Rent_Factory_Facility' | 'Rent_Office' | 'Rent_Research_Facility' | 'Security_Officer' | 'Skill_Plan_Manager' | 'Starbase_Defense_Operator' | 'Starbase_Fuel_Technician' | 'Station_Manager' | 'Trader'[];\n roles_at_hq?: 'Account_Take_1' | 'Account_Take_2' | 'Account_Take_3' | 'Account_Take_4' | 'Account_Take_5' | 'Account_Take_6' | 'Account_Take_7' | 'Accountant' | 'Auditor' | 'Brand_Manager' | 'Communications_Officer' | 'Config_Equipment' | 'Config_Starbase_Equipment' | 'Container_Take_1' | 'Container_Take_2' | 'Container_Take_3' | 'Container_Take_4' | 'Container_Take_5' | 'Container_Take_6' | 'Container_Take_7' | 'Contract_Manager' | 'Deliveries_Container_Take' | 'Deliveries_Query' | 'Deliveries_Take' | 'Diplomat' | 'Director' | 'Factory_Manager' | 'Fitting_Manager' | 'Hangar_Query_1' | 'Hangar_Query_2' | 'Hangar_Query_3' | 'Hangar_Query_4' | 'Hangar_Query_5' | 'Hangar_Query_6' | 'Hangar_Query_7' | 'Hangar_Take_1' | 'Hangar_Take_2' | 'Hangar_Take_3' | 'Hangar_Take_4' | 'Hangar_Take_5' | 'Hangar_Take_6' | 'Hangar_Take_7' | 'Junior_Accountant' | 'Personnel_Manager' | 'Project_Manager' | 'Rent_Factory_Facility' | 'Rent_Office' | 'Rent_Research_Facility' | 'Security_Officer' | 'Skill_Plan_Manager' | 'Starbase_Defense_Operator' | 'Starbase_Fuel_Technician' | 'Station_Manager' | 'Trader'[];\n roles_at_other?: 'Account_Take_1' | 'Account_Take_2' | 'Account_Take_3' | 'Account_Take_4' | 'Account_Take_5' | 'Account_Take_6' | 'Account_Take_7' | 'Accountant' | 'Auditor' | 'Brand_Manager' | 'Communications_Officer' | 'Config_Equipment' | 'Config_Starbase_Equipment' | 'Container_Take_1' | 'Container_Take_2' | 'Container_Take_3' | 'Container_Take_4' | 'Container_Take_5' | 'Container_Take_6' | 'Container_Take_7' | 'Contract_Manager' | 'Deliveries_Container_Take' | 'Deliveries_Query' | 'Deliveries_Take' | 'Diplomat' | 'Director' | 'Factory_Manager' | 'Fitting_Manager' | 'Hangar_Query_1' | 'Hangar_Query_2' | 'Hangar_Query_3' | 'Hangar_Query_4' | 'Hangar_Query_5' | 'Hangar_Query_6' | 'Hangar_Query_7' | 'Hangar_Take_1' | 'Hangar_Take_2' | 'Hangar_Take_3' | 'Hangar_Take_4' | 'Hangar_Take_5' | 'Hangar_Take_6' | 'Hangar_Take_7' | 'Junior_Accountant' | 'Personnel_Manager' | 'Project_Manager' | 'Rent_Factory_Facility' | 'Rent_Office' | 'Rent_Research_Facility' | 'Security_Officer' | 'Skill_Plan_Manager' | 'Starbase_Defense_Operator' | 'Starbase_Fuel_Technician' | 'Station_Manager' | 'Trader'[];\n title_id?: number;\n}\n\nexport interface CorporationsDetail {\n alliance_id?: number;\n ceo_id: number;\n creator_id: number;\n date_founded?: string;\n description?: string;\n faction_id?: number;\n home_station_id?: number;\n member_count: number;\n name: string;\n shares?: number;\n tax_rate: number;\n ticker: string;\n url?: string;\n war_eligible?: boolean;\n}\n\n// --- Corporation Projects ---\n\nexport interface CorporationsProjectsContribution {\n contributed: number;\n last_modified?: string;\n}\n\nexport interface CorporationsProjectsContributors {\n contributors: ({\n contributed: number;\n id: number;\n name: string;\n })[];\n cursor?: {\n after?: string;\n before?: string;\n };\n}\n\nexport interface CorporationsProjectsDetail {\n configuration: unknown;\n contribution?: {\n participation_limit?: number;\n reward_per_contribution?: number;\n submission_limit?: number;\n submission_multiplier?: number;\n };\n creator: {\n id: number;\n name: string;\n };\n details: {\n career: 'Unspecified' | 'Explorer' | 'Industrialist' | 'Enforcer' | 'Soldier of Fortune';\n created: string;\n description: string;\n expires?: string;\n finished?: string;\n };\n id: string;\n last_modified: string;\n name: string;\n progress: {\n current: number;\n desired: number;\n };\n reward?: {\n initial: number;\n remaining: number;\n };\n state: 'Unspecified' | 'Active' | 'Closed' | 'Completed' | 'Expired' | 'Deleted';\n}\n\nexport interface CorporationsProjectsListing {\n cursor?: {\n after?: string;\n before?: string;\n };\n projects: ({\n id: string;\n last_modified: string;\n name: string;\n progress: {\n current: number;\n desired: number;\n };\n reward?: {\n initial: number;\n remaining: number;\n };\n state: 'Unspecified' | 'Active' | 'Closed' | 'Completed' | 'Expired' | 'Deleted';\n })[];\n}\n\n// --- Dogma ---\n\nexport interface DogmaAttributesAttributeIdGet {\n attribute_id: number;\n default_value?: number;\n description?: string;\n display_name?: string;\n high_is_good?: boolean;\n icon_id?: number;\n name?: string;\n published?: boolean;\n stackable?: boolean;\n unit_id?: number;\n}\n\nexport interface DogmaDynamicItemsTypeIdItemIdGet {\n created_by: number;\n dogma_attributes: ({\n attribute_id: number;\n value: number;\n })[];\n dogma_effects: ({\n effect_id: number;\n is_default: boolean;\n })[];\n mutator_type_id: number;\n source_type_id: number;\n}\n\nexport interface DogmaEffectsEffectIdGet {\n description?: string;\n disallow_auto_repeat?: boolean;\n discharge_attribute_id?: number;\n display_name?: string;\n duration_attribute_id?: number;\n effect_category?: number;\n effect_id: number;\n electronic_chance?: boolean;\n falloff_attribute_id?: number;\n icon_id?: number;\n is_assistance?: boolean;\n is_offensive?: boolean;\n is_warp_safe?: boolean;\n modifiers?: ({\n domain?: string;\n effect_id?: number;\n func: string;\n modified_attribute_id?: number;\n modifying_attribute_id?: number;\n operator?: number;\n })[];\n name?: string;\n post_expression?: number;\n pre_expression?: number;\n published?: boolean;\n range_attribute_id?: number;\n range_chance?: boolean;\n tracking_speed_attribute_id?: number;\n}\n\n// --- Faction Warfare ---\n\nexport interface CharactersCharacterIdFwStatsGet {\n current_rank?: number;\n enlisted_on?: string;\n faction_id?: number;\n highest_rank?: number;\n kills: {\n last_week: number;\n total: number;\n yesterday: number;\n };\n victory_points: {\n last_week: number;\n total: number;\n yesterday: number;\n };\n}\n\nexport interface CorporationsCorporationIdFwStatsGet {\n enlisted_on?: string;\n faction_id?: number;\n kills: {\n last_week: number;\n total: number;\n yesterday: number;\n };\n pilots?: number;\n victory_points: {\n last_week: number;\n total: number;\n yesterday: number;\n };\n}\n\nexport interface FwLeaderboardsCharactersGet {\n kills: {\n active_total: ({\n amount?: number;\n character_id?: number;\n })[];\n last_week: ({\n amount?: number;\n character_id?: number;\n })[];\n yesterday: ({\n amount?: number;\n character_id?: number;\n })[];\n };\n victory_points: {\n active_total: ({\n amount?: number;\n character_id?: number;\n })[];\n last_week: ({\n amount?: number;\n character_id?: number;\n })[];\n yesterday: ({\n amount?: number;\n character_id?: number;\n })[];\n };\n}\n\nexport interface FwLeaderboardsCorporationsGet {\n kills: {\n active_total: ({\n amount?: number;\n corporation_id?: number;\n })[];\n last_week: ({\n amount?: number;\n corporation_id?: number;\n })[];\n yesterday: ({\n amount?: number;\n corporation_id?: number;\n })[];\n };\n victory_points: {\n active_total: ({\n amount?: number;\n corporation_id?: number;\n })[];\n last_week: ({\n amount?: number;\n corporation_id?: number;\n })[];\n yesterday: ({\n amount?: number;\n corporation_id?: number;\n })[];\n };\n}\n\nexport interface FwLeaderboardsGet {\n kills: {\n active_total: ({\n amount?: number;\n faction_id?: number;\n })[];\n last_week: ({\n amount?: number;\n faction_id?: number;\n })[];\n yesterday: ({\n amount?: number;\n faction_id?: number;\n })[];\n };\n victory_points: {\n active_total: ({\n amount?: number;\n faction_id?: number;\n })[];\n last_week: ({\n amount?: number;\n faction_id?: number;\n })[];\n yesterday: ({\n amount?: number;\n faction_id?: number;\n })[];\n };\n}\n\nexport interface FwStatsGet {\n faction_id: number;\n kills: {\n last_week: number;\n total: number;\n yesterday: number;\n };\n pilots: number;\n systems_controlled: number;\n victory_points: {\n last_week: number;\n total: number;\n yesterday: number;\n };\n}\n\nexport interface FwSystemsGet {\n contested: 'captured' | 'contested' | 'uncontested' | 'vulnerable';\n occupier_faction_id: number;\n owner_faction_id: number;\n solar_system_id: number;\n victory_points: number;\n victory_points_threshold: number;\n}\n\nexport interface FwWarsGet {\n against_id: number;\n faction_id: number;\n}\n\n// --- Fittings ---\n\nexport interface CharactersCharacterIdFittingsGet {\n description: string;\n fitting_id: number;\n items: ({\n flag: 'Cargo' | 'DroneBay' | 'FighterBay' | 'HiSlot0' | 'HiSlot1' | 'HiSlot2' | 'HiSlot3' | 'HiSlot4' | 'HiSlot5' | 'HiSlot6' | 'HiSlot7' | 'Invalid' | 'LoSlot0' | 'LoSlot1' | 'LoSlot2' | 'LoSlot3' | 'LoSlot4' | 'LoSlot5' | 'LoSlot6' | 'LoSlot7' | 'MedSlot0' | 'MedSlot1' | 'MedSlot2' | 'MedSlot3' | 'MedSlot4' | 'MedSlot5' | 'MedSlot6' | 'MedSlot7' | 'RigSlot0' | 'RigSlot1' | 'RigSlot2' | 'ServiceSlot0' | 'ServiceSlot1' | 'ServiceSlot2' | 'ServiceSlot3' | 'ServiceSlot4' | 'ServiceSlot5' | 'ServiceSlot6' | 'ServiceSlot7' | 'SubSystemSlot0' | 'SubSystemSlot1' | 'SubSystemSlot2' | 'SubSystemSlot3';\n quantity: number;\n type_id: number;\n })[];\n name: string;\n ship_type_id: number;\n}\n\n// --- Fleets ---\n\nexport interface CharactersCharacterIdFleetGet {\n fleet_boss_id: number;\n fleet_id: number;\n role: 'fleet_commander' | 'squad_commander' | 'squad_member' | 'wing_commander';\n squad_id: number;\n wing_id: number;\n}\n\nexport interface FleetsFleetIdGet {\n is_free_move: boolean;\n is_registered: boolean;\n is_voice_enabled: boolean;\n motd: string;\n}\n\nexport interface FleetsFleetIdMembersGet {\n character_id: number;\n join_time: string;\n role: 'fleet_commander' | 'wing_commander' | 'squad_commander' | 'squad_member';\n role_name: string;\n ship_type_id: number;\n solar_system_id: number;\n squad_id: number;\n station_id?: number;\n takes_fleet_warp: boolean;\n wing_id: number;\n}\n\nexport interface FleetsFleetIdWingsGet {\n id: number;\n name: string;\n squads: ({\n id: number;\n name: string;\n })[];\n}\n\n// --- Freelance Jobs ---\n\nexport interface CharactersFreelanceJobsListing {\n freelance_jobs: ({\n id: string;\n last_modified: string;\n name: string;\n progress: {\n current: number;\n desired: number;\n };\n reward?: {\n initial: number;\n remaining: number;\n };\n state: 'Unspecified' | 'Active' | 'Closed' | 'Completed' | 'Expired' | 'Deleted';\n })[];\n}\n\nexport interface CharactersFreelanceJobsParticipation {\n contributed: number;\n last_modified: string;\n state: 'Unspecified' | 'Committed' | 'Kicked' | 'Resigned';\n}\n\nexport interface CorporationsFreelanceJobsListing {\n cursor?: {\n after?: string;\n before?: string;\n };\n freelance_jobs: ({\n id: string;\n last_modified: string;\n name: string;\n progress: {\n current: number;\n desired: number;\n };\n reward?: {\n initial: number;\n remaining: number;\n };\n state: 'Unspecified' | 'Active' | 'Closed' | 'Completed' | 'Expired' | 'Deleted';\n })[];\n}\n\nexport interface CorporationsFreelanceJobsParticipants {\n cursor?: {\n after?: string;\n before?: string;\n };\n participants: ({\n contributed: number;\n id: number;\n name: string;\n state: 'Unspecified' | 'Committed' | 'Kicked' | 'Resigned';\n })[];\n}\n\nexport interface FreelanceJobsDetail {\n access_and_visibility: {\n acl_protected: boolean;\n broadcast_locations?: ({\n id: number;\n name: string;\n })[];\n restrictions?: {\n maximum_age?: number;\n minimum_age?: number;\n };\n };\n configuration: {\n method: string;\n parameters: Record<string, unknown>;\n version: number;\n };\n contribution?: {\n contribution_per_participant_limit?: number;\n max_committed_participants: number;\n reward_per_contribution?: number;\n submission_limit?: number;\n submission_multiplier?: number;\n };\n details: {\n career: 'Unspecified' | 'Explorer' | 'Industrialist' | 'Enforcer' | 'Soldier of Fortune';\n created: string;\n creator: {\n character: {\n id: number;\n name: string;\n };\n corporation: {\n id: number;\n name: string;\n };\n };\n description: string;\n expires?: string;\n finished?: string;\n };\n id: string;\n last_modified: string;\n name: string;\n progress: {\n current: number;\n desired: number;\n };\n reward?: {\n initial: number;\n remaining: number;\n };\n state: 'Unspecified' | 'Active' | 'Closed' | 'Completed' | 'Expired' | 'Deleted';\n}\n\nexport interface FreelanceJobsListing {\n cursor?: {\n after?: string;\n before?: string;\n };\n freelance_jobs: ({\n id: string;\n last_modified: string;\n name: string;\n progress: {\n current: number;\n desired: number;\n };\n reward?: {\n initial: number;\n remaining: number;\n };\n state: 'Unspecified' | 'Active' | 'Closed' | 'Completed' | 'Expired' | 'Deleted';\n })[];\n}\n\n// --- Incursions ---\n\nexport interface IncursionsGet {\n constellation_id: number;\n faction_id: number;\n has_boss: boolean;\n infested_solar_systems: number[];\n influence: number;\n staging_solar_system_id: number;\n state: 'withdrawing' | 'mobilizing' | 'established';\n type: string;\n}\n\n// --- Industry ---\n\nexport interface CharactersCharacterIdIndustryJobsGet {\n activity_id: number;\n blueprint_id: number;\n blueprint_location_id: number;\n blueprint_type_id: number;\n completed_character_id?: number;\n completed_date?: string;\n cost?: number;\n duration: number;\n end_date: string;\n facility_id: number;\n installer_id: number;\n job_id: number;\n licensed_runs?: number;\n output_location_id: number;\n pause_date?: string;\n probability?: number;\n product_type_id?: number;\n runs: number;\n start_date: string;\n station_id: number;\n status: 'active' | 'cancelled' | 'delivered' | 'paused' | 'ready' | 'reverted';\n successful_runs?: number;\n}\n\nexport interface CharactersCharacterIdMiningGet {\n date: string;\n quantity: number;\n solar_system_id: number;\n type_id: number;\n}\n\nexport interface CorporationCorporationIdMiningExtractionsGet {\n chunk_arrival_time: string;\n extraction_start_time: string;\n moon_id: number;\n natural_decay_time: string;\n structure_id: number;\n}\n\nexport interface CorporationCorporationIdMiningObserversGet {\n last_updated: string;\n observer_id: number;\n observer_type: 'structure';\n}\n\nexport interface CorporationCorporationIdMiningObserversObserverIdGet {\n character_id: number;\n last_updated: string;\n quantity: number;\n recorded_corporation_id: number;\n type_id: number;\n}\n\nexport interface CorporationsCorporationIdIndustryJobsGet {\n activity_id: number;\n blueprint_id: number;\n blueprint_location_id: number;\n blueprint_type_id: number;\n completed_character_id?: number;\n completed_date?: string;\n cost?: number;\n duration: number;\n end_date: string;\n facility_id: number;\n installer_id: number;\n job_id: number;\n licensed_runs?: number;\n location_id: number;\n output_location_id: number;\n pause_date?: string;\n probability?: number;\n product_type_id?: number;\n runs: number;\n start_date: string;\n status: 'active' | 'cancelled' | 'delivered' | 'paused' | 'ready' | 'reverted';\n successful_runs?: number;\n}\n\nexport interface IndustryFacilitiesGet {\n facility_id: number;\n owner_id: number;\n region_id: number;\n solar_system_id: number;\n tax?: number;\n type_id: number;\n}\n\nexport interface IndustrySystemsGet {\n cost_indices: ({\n activity: 'copying' | 'duplicating' | 'invention' | 'manufacturing' | 'none' | 'reaction' | 'researching_material_efficiency' | 'researching_technology' | 'researching_time_efficiency' | 'reverse_engineering';\n cost_index: number;\n })[];\n solar_system_id: number;\n}\n\n// --- Insurance ---\n\nexport interface InsurancePricesGet {\n levels: ({\n cost: number;\n name: string;\n payout: number;\n })[];\n type_id: number;\n}\n\n// --- Killmails ---\n\nexport interface CharactersCharacterIdKillmailsRecentGet {\n killmail_hash: string;\n killmail_id: number;\n}\n\nexport interface CorporationsCorporationIdKillmailsRecentGet {\n killmail_hash: string;\n killmail_id: number;\n}\n\nexport interface KillmailsKillmailIdKillmailHashGet {\n attackers: ({\n alliance_id?: number;\n character_id?: number;\n corporation_id?: number;\n damage_done: number;\n faction_id?: number;\n final_blow: boolean;\n security_status: number;\n ship_type_id?: number;\n weapon_type_id?: number;\n })[];\n killmail_id: number;\n killmail_time: string;\n moon_id?: number;\n solar_system_id: number;\n victim: {\n alliance_id?: number;\n character_id?: number;\n corporation_id?: number;\n damage_taken: number;\n faction_id?: number;\n items?: ({\n flag: number;\n item_type_id: number;\n items?: ({\n flag: number;\n item_type_id: number;\n quantity_destroyed?: number;\n quantity_dropped?: number;\n singleton: number;\n })[];\n quantity_destroyed?: number;\n quantity_dropped?: number;\n singleton: number;\n })[];\n position?: {\n x: number;\n y: number;\n z: number;\n };\n ship_type_id: number;\n };\n war_id?: number;\n}\n\n// --- Location ---\n\nexport interface CharactersCharacterIdLocationGet {\n solar_system_id: number;\n station_id?: number;\n structure_id?: number;\n}\n\nexport interface CharactersCharacterIdOnlineGet {\n last_login?: string;\n last_logout?: string;\n logins?: number;\n online: boolean;\n}\n\nexport interface CharactersCharacterIdShipGet {\n ship_item_id: number;\n ship_name: string;\n ship_type_id: number;\n}\n\n// --- Loyalty ---\n\nexport interface CharactersCharacterIdLoyaltyPointsGet {\n corporation_id: number;\n loyalty_points: number;\n}\n\nexport interface LoyaltyStoresCorporationIdOffersGet {\n ak_cost?: number;\n isk_cost: number;\n lp_cost: number;\n offer_id: number;\n quantity: number;\n required_items: ({\n quantity: number;\n type_id: number;\n })[];\n type_id: number;\n}\n\n// --- Mail ---\n\nexport interface CharactersCharacterIdMailGet {\n from?: number;\n is_read?: boolean;\n labels?: number[];\n mail_id?: number;\n recipients?: ({\n recipient_id: number;\n recipient_type: 'alliance' | 'character' | 'corporation' | 'mailing_list';\n })[];\n subject?: string;\n timestamp?: string;\n}\n\nexport interface CharactersCharacterIdMailLabelsGet {\n labels?: ({\n color?: '#0000fe' | '#006634' | '#0099ff' | '#00ff33' | '#01ffff' | '#349800' | '#660066' | '#666666' | '#999999' | '#99ffff' | '#9a0000' | '#ccff9a' | '#e6e6e6' | '#fe0000' | '#ff6600' | '#ffff01' | '#ffffcd' | '#ffffff';\n label_id?: number;\n name?: string;\n unread_count?: number;\n })[];\n total_unread_count?: number;\n}\n\nexport interface CharactersCharacterIdMailListsGet {\n mailing_list_id: number;\n name: string;\n}\n\nexport interface CharactersCharacterIdMailMailIdGet {\n body?: string;\n from?: number;\n labels?: number[];\n read?: boolean;\n recipients?: ({\n recipient_id: number;\n recipient_type: 'alliance' | 'character' | 'corporation' | 'mailing_list';\n })[];\n subject?: string;\n timestamp?: string;\n}\n\n// --- Market ---\n\nexport interface CharactersCharacterIdOrdersGet {\n duration: number;\n escrow?: number;\n is_buy_order?: boolean;\n is_corporation: boolean;\n issued: string;\n location_id: number;\n min_volume?: number;\n order_id: number;\n price: number;\n range: '1' | '10' | '2' | '20' | '3' | '30' | '4' | '40' | '5' | 'region' | 'solarsystem' | 'station';\n region_id: number;\n type_id: number;\n volume_remain: number;\n volume_total: number;\n}\n\nexport interface CharactersCharacterIdOrdersHistoryGet {\n duration: number;\n escrow?: number;\n is_buy_order?: boolean;\n is_corporation: boolean;\n issued: string;\n location_id: number;\n min_volume?: number;\n order_id: number;\n price: number;\n range: '1' | '10' | '2' | '20' | '3' | '30' | '4' | '40' | '5' | 'region' | 'solarsystem' | 'station';\n region_id: number;\n state: 'cancelled' | 'expired';\n type_id: number;\n volume_remain: number;\n volume_total: number;\n}\n\nexport interface CorporationsCorporationIdOrdersGet {\n duration: number;\n escrow?: number;\n is_buy_order?: boolean;\n issued: string;\n issued_by: number;\n location_id: number;\n min_volume?: number;\n order_id: number;\n price: number;\n range: '1' | '10' | '2' | '20' | '3' | '30' | '4' | '40' | '5' | 'region' | 'solarsystem' | 'station';\n region_id: number;\n type_id: number;\n volume_remain: number;\n volume_total: number;\n wallet_division: number;\n}\n\nexport interface CorporationsCorporationIdOrdersHistoryGet {\n duration: number;\n escrow?: number;\n is_buy_order?: boolean;\n issued: string;\n issued_by?: number;\n location_id: number;\n min_volume?: number;\n order_id: number;\n price: number;\n range: '1' | '10' | '2' | '20' | '3' | '30' | '4' | '40' | '5' | 'region' | 'solarsystem' | 'station';\n region_id: number;\n state: 'cancelled' | 'expired';\n type_id: number;\n volume_remain: number;\n volume_total: number;\n wallet_division: number;\n}\n\nexport interface MarketsGroupsMarketGroupIdGet {\n description: string;\n market_group_id: number;\n name: string;\n parent_group_id?: number;\n types: number[];\n}\n\nexport interface MarketsPricesGet {\n adjusted_price?: number;\n average_price?: number;\n type_id: number;\n}\n\nexport interface MarketsRegionIdHistoryGet {\n average: number;\n date: string;\n highest: number;\n lowest: number;\n order_count: number;\n volume: number;\n}\n\nexport interface MarketsRegionIdOrdersGet {\n duration: number;\n is_buy_order: boolean;\n issued: string;\n location_id: number;\n min_volume: number;\n order_id: number;\n price: number;\n range: 'station' | 'region' | 'solarsystem' | '1' | '2' | '3' | '4' | '5' | '10' | '20' | '30' | '40';\n system_id: number;\n type_id: number;\n volume_remain: number;\n volume_total: number;\n}\n\nexport interface MarketsStructuresStructureIdGet {\n duration: number;\n is_buy_order: boolean;\n issued: string;\n location_id: number;\n min_volume: number;\n order_id: number;\n price: number;\n range: 'station' | 'region' | 'solarsystem' | '1' | '2' | '3' | '4' | '5' | '10' | '20' | '30' | '40';\n type_id: number;\n volume_remain: number;\n volume_total: number;\n}\n\n// --- Meta ---\n\nexport interface MetaChangelog {\n changelog: Record<string, unknown>;\n}\n\nexport interface MetaCompatibilityDates {\n compatibility_dates: string[];\n}\n\nexport interface MetaStatus {\n routes: ({\n method: 'GET' | 'POST' | 'PUT' | 'DELETE';\n path: string;\n status: 'Unknown' | 'OK' | 'Degraded' | 'Down' | 'Recovering';\n })[];\n}\n\n// --- Planetary Interaction ---\n\nexport interface CharactersCharacterIdPlanetsGet {\n last_update: string;\n num_pins: number;\n owner_id: number;\n planet_id: number;\n planet_type: 'temperate' | 'barren' | 'oceanic' | 'ice' | 'gas' | 'lava' | 'storm' | 'plasma';\n solar_system_id: number;\n upgrade_level: number;\n}\n\nexport interface CharactersCharacterIdPlanetsPlanetIdGet {\n links: ({\n destination_pin_id: number;\n link_level: number;\n source_pin_id: number;\n })[];\n pins: ({\n contents?: ({\n amount: number;\n type_id: number;\n })[];\n expiry_time?: string;\n extractor_details?: {\n cycle_time?: number;\n head_radius?: number;\n heads: ({\n head_id: number;\n latitude: number;\n longitude: number;\n })[];\n product_type_id?: number;\n qty_per_cycle?: number;\n };\n factory_details?: {\n schematic_id: number;\n };\n install_time?: string;\n last_cycle_start?: string;\n latitude: number;\n longitude: number;\n pin_id: number;\n schematic_id?: number;\n type_id: number;\n })[];\n routes: ({\n content_type_id: number;\n destination_pin_id: number;\n quantity: number;\n route_id: number;\n source_pin_id: number;\n waypoints?: number[];\n })[];\n}\n\nexport interface CorporationsCorporationIdCustomsOfficesGet {\n alliance_tax_rate?: number;\n allow_access_with_standings: boolean;\n allow_alliance_access: boolean;\n bad_standing_tax_rate?: number;\n corporation_tax_rate?: number;\n excellent_standing_tax_rate?: number;\n good_standing_tax_rate?: number;\n neutral_standing_tax_rate?: number;\n office_id: number;\n reinforce_exit_end: number;\n reinforce_exit_start: number;\n standing_level?: 'bad' | 'excellent' | 'good' | 'neutral' | 'terrible';\n system_id: number;\n terrible_standing_tax_rate?: number;\n type_id?: number;\n}\n\nexport interface UniverseSchematicsSchematicIdGet {\n cycle_time: number;\n schematic_name: string;\n}\n\n// --- Routes ---\n\nexport interface Route {\n route: number[];\n}\n\n// --- Search ---\n\nexport interface CharactersCharacterIdSearchGet {\n agent?: number[];\n alliance?: number[];\n character?: number[];\n constellation?: number[];\n corporation?: number[];\n faction?: number[];\n inventory_type?: number[];\n region?: number[];\n solar_system?: number[];\n station?: number[];\n structure?: number[];\n}\n\n// --- Skills ---\n\nexport interface CharactersCharacterIdAttributesGet {\n accrued_remap_cooldown_date?: string;\n bonus_remaps?: number;\n charisma: number;\n intelligence: number;\n last_remap_date?: string;\n memory: number;\n perception: number;\n willpower: number;\n}\n\nexport interface CharactersSkillqueueSkill {\n finish_date?: string;\n finished_level: number;\n level_end_sp?: number;\n level_start_sp?: number;\n queue_position: number;\n skill_id: number;\n start_date?: string;\n training_start_sp?: number;\n}\n\nexport interface CharactersSkills {\n skills: ({\n active_skill_level: number;\n skill_id: number;\n skillpoints_in_skill: number;\n trained_skill_level: number;\n })[];\n total_sp: number;\n unallocated_sp?: number;\n}\n\n// --- Sovereignty ---\n\nexport interface SovereigntyCampaignsGet {\n attackers_score?: number;\n campaign_id: number;\n constellation_id: number;\n defender_id?: number;\n defender_score?: number;\n event_type: 'tcu_defense' | 'ihub_defense' | 'station_defense' | 'station_freeport';\n participants?: ({\n alliance_id: number;\n score: number;\n })[];\n solar_system_id: number;\n start_time: string;\n structure_id: number;\n}\n\nexport interface SovereigntyMapGet {\n alliance_id?: number;\n corporation_id?: number;\n faction_id?: number;\n system_id: number;\n}\n\nexport interface SovereigntyStructuresGet {\n alliance_id: number;\n solar_system_id: number;\n structure_id: number;\n structure_type_id: number;\n vulnerability_occupancy_level?: number;\n vulnerable_end_time?: string;\n vulnerable_start_time?: string;\n}\n\n// --- Status ---\n\nexport interface Status {\n players: number;\n server_version: string;\n start_time: string;\n vip: boolean;\n}\n\n// --- Universe ---\n\nexport interface UniverseAncestriesGet {\n bloodline_id: number;\n description: string;\n icon_id?: number;\n id: number;\n name: string;\n short_description?: string;\n}\n\nexport interface UniverseAsteroidBeltsAsteroidBeltIdGet {\n name: string;\n position: {\n x: number;\n y: number;\n z: number;\n };\n system_id: number;\n}\n\nexport interface UniverseBloodlinesGet {\n bloodline_id: number;\n charisma: number;\n corporation_id: number;\n description: string;\n intelligence: number;\n memory: number;\n name: string;\n perception: number;\n race_id: number;\n ship_type_id: number;\n willpower: number;\n}\n\nexport interface UniverseCategoriesCategoryIdGet {\n category_id: number;\n groups: number[];\n name: string;\n published: boolean;\n}\n\nexport interface UniverseConstellationsConstellationIdGet {\n constellation_id: number;\n name: string;\n position: {\n x: number;\n y: number;\n z: number;\n };\n region_id: number;\n systems: number[];\n}\n\nexport interface UniverseFactionsGet {\n corporation_id?: number;\n description: string;\n faction_id: number;\n is_unique: boolean;\n militia_corporation_id?: number;\n name: string;\n size_factor: number;\n solar_system_id?: number;\n station_count: number;\n station_system_count: number;\n}\n\nexport interface UniverseGraphicsGraphicIdGet {\n collision_file?: string;\n graphic_file?: string;\n graphic_id: number;\n icon_folder?: string;\n sof_dna?: string;\n sof_fation_name?: string;\n sof_hull_name?: string;\n sof_race_name?: string;\n}\n\nexport interface UniverseGroupsGroupIdGet {\n category_id: number;\n group_id: number;\n name: string;\n published: boolean;\n types: number[];\n}\n\nexport interface UniverseIdsPost {\n agents?: ({\n id?: number;\n name?: string;\n })[];\n alliances?: ({\n id?: number;\n name?: string;\n })[];\n characters?: ({\n id?: number;\n name?: string;\n })[];\n constellations?: ({\n id?: number;\n name?: string;\n })[];\n corporations?: ({\n id?: number;\n name?: string;\n })[];\n factions?: ({\n id?: number;\n name?: string;\n })[];\n inventory_types?: ({\n id?: number;\n name?: string;\n })[];\n regions?: ({\n id?: number;\n name?: string;\n })[];\n stations?: ({\n id?: number;\n name?: string;\n })[];\n systems?: ({\n id?: number;\n name?: string;\n })[];\n}\n\nexport interface UniverseMoonsMoonIdGet {\n moon_id: number;\n name: string;\n position: {\n x: number;\n y: number;\n z: number;\n };\n system_id: number;\n}\n\nexport interface UniverseNamesPost {\n category: 'alliance' | 'character' | 'constellation' | 'corporation' | 'inventory_type' | 'region' | 'solar_system' | 'station' | 'faction';\n id: number;\n name: string;\n}\n\nexport interface UniversePlanetsPlanetIdGet {\n name: string;\n planet_id: number;\n position: {\n x: number;\n y: number;\n z: number;\n };\n system_id: number;\n type_id: number;\n}\n\nexport interface UniverseRacesGet {\n alliance_id: number;\n description: string;\n name: string;\n race_id: number;\n}\n\nexport interface UniverseRegionsRegionIdGet {\n constellations: number[];\n description?: string;\n name: string;\n region_id: number;\n}\n\nexport interface UniverseStargatesStargateIdGet {\n destination: {\n stargate_id: number;\n system_id: number;\n };\n name: string;\n position: {\n x: number;\n y: number;\n z: number;\n };\n stargate_id: number;\n system_id: number;\n type_id: number;\n}\n\nexport interface UniverseStarsStarIdGet {\n age: number;\n luminosity: number;\n name: string;\n radius: number;\n solar_system_id: number;\n spectral_class: 'K2 V' | 'K4 V' | 'G2 V' | 'G8 V' | 'M7 V' | 'K7 V' | 'M2 V' | 'K5 V' | 'M3 V' | 'G0 V' | 'G7 V' | 'G3 V' | 'F9 V' | 'G5 V' | 'F6 V' | 'K8 V' | 'K9 V' | 'K6 V' | 'G9 V' | 'G6 V' | 'G4 VI' | 'G4 V' | 'F8 V' | 'F2 V' | 'F1 V' | 'K3 V' | 'F0 VI' | 'G1 VI' | 'G0 VI' | 'K1 V' | 'M4 V' | 'M1 V' | 'M6 V' | 'M0 V' | 'K2 IV' | 'G2 VI' | 'K0 V' | 'K5 IV' | 'F5 VI' | 'G6 VI' | 'F6 VI' | 'F2 IV' | 'G3 VI' | 'M8 V' | 'F1 VI' | 'K1 IV' | 'F7 V' | 'G5 VI' | 'M5 V' | 'G7 VI' | 'F5 V' | 'F4 VI' | 'F8 VI' | 'K3 IV' | 'F4 IV' | 'F0 V' | 'G7 IV' | 'G8 VI' | 'F2 VI' | 'F4 V' | 'F7 VI' | 'F3 V' | 'G1 V' | 'G9 VI' | 'F3 IV' | 'F9 VI' | 'M9 V' | 'K0 IV' | 'F1 IV' | 'G4 IV' | 'F3 VI' | 'K4 IV' | 'G5 IV' | 'G3 IV' | 'G1 IV' | 'K7 IV' | 'G0 IV' | 'K6 IV' | 'K9 IV' | 'G2 IV' | 'F9 IV' | 'F0 IV' | 'K8 IV' | 'G8 IV' | 'F6 IV' | 'F5 IV' | 'A0' | 'A0IV' | 'A0IV2';\n temperature: number;\n type_id: number;\n}\n\nexport interface UniverseStationsStationIdGet {\n max_dockable_ship_volume: number;\n name: string;\n office_rental_cost: number;\n owner?: number;\n position: {\n x: number;\n y: number;\n z: number;\n };\n race_id?: number;\n reprocessing_efficiency: number;\n reprocessing_stations_take: number;\n services: 'bounty-missions' | 'assasination-missions' | 'courier-missions' | 'interbus' | 'reprocessing-plant' | 'refinery' | 'market' | 'black-market' | 'stock-exchange' | 'cloning' | 'surgery' | 'dna-therapy' | 'repair-facilities' | 'factory' | 'labratory' | 'gambling' | 'fitting' | 'paintshop' | 'news' | 'storage' | 'insurance' | 'docking' | 'office-rental' | 'jump-clone-facility' | 'loyalty-point-store' | 'navy-offices' | 'security-offices'[];\n station_id: number;\n system_id: number;\n type_id: number;\n}\n\nexport interface UniverseStructuresStructureIdGet {\n name: string;\n owner_id: number;\n position?: {\n x: number;\n y: number;\n z: number;\n };\n solar_system_id: number;\n type_id?: number;\n}\n\nexport interface UniverseSystemJumpsGet {\n ship_jumps: number;\n system_id: number;\n}\n\nexport interface UniverseSystemKillsGet {\n npc_kills: number;\n pod_kills: number;\n ship_kills: number;\n system_id: number;\n}\n\nexport interface UniverseSystemsSystemIdGet {\n constellation_id: number;\n name: string;\n planets?: ({\n asteroid_belts?: number[];\n moons?: number[];\n planet_id: number;\n })[];\n position: {\n x: number;\n y: number;\n z: number;\n };\n security_class?: string;\n security_status: number;\n star_id?: number;\n stargates?: number[];\n stations?: number[];\n system_id: number;\n}\n\nexport interface UniverseTypesTypeIdGet {\n capacity?: number;\n description: string;\n dogma_attributes?: ({\n attribute_id: number;\n value: number;\n })[];\n dogma_effects?: ({\n effect_id: number;\n is_default: boolean;\n })[];\n graphic_id?: number;\n group_id: number;\n icon_id?: number;\n market_group_id?: number;\n mass?: number;\n name: string;\n packaged_volume?: number;\n portion_size?: number;\n published: boolean;\n radius?: number;\n type_id: number;\n volume?: number;\n}\n\n// --- Wallet ---\n\nexport interface CharactersCharacterIdWalletJournalGet {\n amount?: number;\n balance?: number;\n context_id?: number;\n context_id_type?: 'structure_id' | 'station_id' | 'market_transaction_id' | 'character_id' | 'corporation_id' | 'alliance_id' | 'eve_system' | 'industry_job_id' | 'contract_id' | 'planet_id' | 'system_id' | 'type_id';\n date: string;\n description: string;\n first_party_id?: number;\n id: number;\n reason?: string;\n ref_type: 'acceleration_gate_fee' | 'achievement_category_milestone_reward' | 'achievement_milestone_reward' | 'advertisement_listing_fee' | 'agent_donation' | 'agent_location_services' | 'agent_miscellaneous' | 'agent_mission_collateral_paid' | 'agent_mission_collateral_refunded' | 'agent_mission_reward' | 'agent_mission_reward_corporation_tax' | 'agent_mission_security_tax' | 'agent_mission_time_bonus_reward' | 'agent_mission_time_bonus_reward_corporation_tax' | 'agent_security_services' | 'agent_services_rendered' | 'agents_preward' | 'air_career_program_reward' | 'alliance_maintainance_fee' | 'alliance_registration_fee' | 'allignment_based_gate_toll' | 'asset_safety_recovery_tax' | 'bounty' | 'bounty_prize' | 'bounty_prize_corporation_tax' | 'bounty_prizes' | 'bounty_reimbursement' | 'bounty_surcharge' | 'brokers_fee' | 'campaign_objective_isk_reward' | 'clone_activation' | 'clone_transfer' | 'contraband_fine' | 'contract_auction_bid' | 'contract_auction_bid_corp' | 'contract_auction_bid_refund' | 'contract_auction_sold' | 'contract_brokers_fee' | 'contract_brokers_fee_corp' | 'contract_collateral' | 'contract_collateral_deposited_corp' | 'contract_collateral_payout' | 'contract_collateral_refund' | 'contract_deposit' | 'contract_deposit_corp' | 'contract_deposit_refund' | 'contract_deposit_sales_tax' | 'contract_price' | 'contract_price_payment_corp' | 'contract_reversal' | 'contract_reward' | 'contract_reward_deposited' | 'contract_reward_deposited_corp' | 'contract_reward_refund' | 'contract_sales_tax' | 'copying' | 'corporate_reward_payout' | 'corporate_reward_tax' | 'corporation_account_withdrawal' | 'corporation_bulk_payment' | 'corporation_dividend_payment' | 'corporation_liquidation' | 'corporation_logo_change_cost' | 'corporation_payment' | 'corporation_registration_fee' | 'cosmetic_market_component_item_purchase' | 'cosmetic_market_skin_purchase' | 'cosmetic_market_skin_sale' | 'cosmetic_market_skin_sale_broker_fee' | 'cosmetic_market_skin_sale_tax' | 'cosmetic_market_skin_transaction' | 'courier_mission_escrow' | 'cspa' | 'cspaofflinerefund' | 'daily_challenge_reward' | 'daily_goal_payouts' | 'daily_goal_payouts_tax' | 'datacore_fee' | 'dna_modification_fee' | 'docking_fee' | 'duel_wager_escrow' | 'duel_wager_payment' | 'duel_wager_refund' | 'ess_escrow_transfer' | 'external_trade_delivery' | 'external_trade_freeze' | 'external_trade_thaw' | 'factory_slot_rental_fee' | 'flux_payout' | 'flux_tax' | 'flux_ticket_repayment' | 'flux_ticket_sale' | 'freelance_jobs_broadcasting_fee' | 'freelance_jobs_duration_fee' | 'freelance_jobs_escrow_refund' | 'freelance_jobs_reward' | 'freelance_jobs_reward_corporation_tax' | 'freelance_jobs_reward_escrow' | 'gm_cash_transfer' | 'gm_plex_fee_refund' | 'industry_job_tax' | 'industry_security_tax' | 'infrastructure_hub_maintenance' | 'inheritance' | 'insurance' | 'insurgency_corruption_contribution_reward' | 'insurgency_suppression_contribution_reward' | 'item_trader_payment' | 'jump_clone_activation_fee' | 'jump_clone_installation_fee' | 'kill_right_fee' | 'lp_store' | 'manufacturing' | 'market_escrow' | 'market_fine_paid' | 'market_provider_tax' | 'market_security_tax' | 'market_transaction' | 'medal_creation' | 'medal_issued' | 'milestone_reward_payment' | 'mission_completion' | 'mission_cost' | 'mission_expiration' | 'mission_reward' | 'npc_bounty_security_tax' | 'office_rental_fee' | 'operation_bonus' | 'opportunity_reward' | 'planetary_construction' | 'planetary_export_tax' | 'planetary_import_tax' | 'player_donation' | 'player_trading' | 'project_discovery_reward' | 'project_discovery_tax' | 'project_payouts' | 'reaction' | 'redeemed_isk_token' | 'release_of_impounded_property' | 'repair_bill' | 'reprocessing_tax' | 'researching_material_productivity' | 'researching_technology' | 'researching_time_productivity' | 'resource_wars_reward' | 'reverse_engineering' | 'season_challenge_reward' | 'security_processing_fee' | 'shares' | 'skill_purchase' | 'skyhook_claim_fee' | 'sovereignity_bill' | 'store_purchase' | 'store_purchase_refund' | 'structure_gate_jump' | 'transaction_tax' | 'under_construction' | 'upkeep_adjustment_fee' | 'war_ally_contract' | 'war_fee' | 'war_fee_surrender';\n second_party_id?: number;\n tax?: number;\n tax_receiver_id?: number;\n}\n\nexport interface CharactersCharacterIdWalletTransactionsGet {\n client_id: number;\n date: string;\n is_buy: boolean;\n is_personal: boolean;\n journal_ref_id: number;\n location_id: number;\n quantity: number;\n transaction_id: number;\n type_id: number;\n unit_price: number;\n}\n\nexport interface CorporationsCorporationIdWalletsDivisionJournalGet {\n amount?: number;\n balance?: number;\n context_id?: number;\n context_id_type?: 'structure_id' | 'station_id' | 'market_transaction_id' | 'character_id' | 'corporation_id' | 'alliance_id' | 'eve_system' | 'industry_job_id' | 'contract_id' | 'planet_id' | 'system_id' | 'type_id';\n date: string;\n description: string;\n first_party_id?: number;\n id: number;\n reason?: string;\n ref_type: 'acceleration_gate_fee' | 'achievement_category_milestone_reward' | 'achievement_milestone_reward' | 'advertisement_listing_fee' | 'agent_donation' | 'agent_location_services' | 'agent_miscellaneous' | 'agent_mission_collateral_paid' | 'agent_mission_collateral_refunded' | 'agent_mission_reward' | 'agent_mission_reward_corporation_tax' | 'agent_mission_security_tax' | 'agent_mission_time_bonus_reward' | 'agent_mission_time_bonus_reward_corporation_tax' | 'agent_security_services' | 'agent_services_rendered' | 'agents_preward' | 'air_career_program_reward' | 'alliance_maintainance_fee' | 'alliance_registration_fee' | 'allignment_based_gate_toll' | 'asset_safety_recovery_tax' | 'bounty' | 'bounty_prize' | 'bounty_prize_corporation_tax' | 'bounty_prizes' | 'bounty_reimbursement' | 'bounty_surcharge' | 'brokers_fee' | 'campaign_objective_isk_reward' | 'clone_activation' | 'clone_transfer' | 'contraband_fine' | 'contract_auction_bid' | 'contract_auction_bid_corp' | 'contract_auction_bid_refund' | 'contract_auction_sold' | 'contract_brokers_fee' | 'contract_brokers_fee_corp' | 'contract_collateral' | 'contract_collateral_deposited_corp' | 'contract_collateral_payout' | 'contract_collateral_refund' | 'contract_deposit' | 'contract_deposit_corp' | 'contract_deposit_refund' | 'contract_deposit_sales_tax' | 'contract_price' | 'contract_price_payment_corp' | 'contract_reversal' | 'contract_reward' | 'contract_reward_deposited' | 'contract_reward_deposited_corp' | 'contract_reward_refund' | 'contract_sales_tax' | 'copying' | 'corporate_reward_payout' | 'corporate_reward_tax' | 'corporation_account_withdrawal' | 'corporation_bulk_payment' | 'corporation_dividend_payment' | 'corporation_liquidation' | 'corporation_logo_change_cost' | 'corporation_payment' | 'corporation_registration_fee' | 'cosmetic_market_component_item_purchase' | 'cosmetic_market_skin_purchase' | 'cosmetic_market_skin_sale' | 'cosmetic_market_skin_sale_broker_fee' | 'cosmetic_market_skin_sale_tax' | 'cosmetic_market_skin_transaction' | 'courier_mission_escrow' | 'cspa' | 'cspaofflinerefund' | 'daily_challenge_reward' | 'daily_goal_payouts' | 'daily_goal_payouts_tax' | 'datacore_fee' | 'dna_modification_fee' | 'docking_fee' | 'duel_wager_escrow' | 'duel_wager_payment' | 'duel_wager_refund' | 'ess_escrow_transfer' | 'external_trade_delivery' | 'external_trade_freeze' | 'external_trade_thaw' | 'factory_slot_rental_fee' | 'flux_payout' | 'flux_tax' | 'flux_ticket_repayment' | 'flux_ticket_sale' | 'freelance_jobs_broadcasting_fee' | 'freelance_jobs_duration_fee' | 'freelance_jobs_escrow_refund' | 'freelance_jobs_reward' | 'freelance_jobs_reward_corporation_tax' | 'freelance_jobs_reward_escrow' | 'gm_cash_transfer' | 'gm_plex_fee_refund' | 'industry_job_tax' | 'industry_security_tax' | 'infrastructure_hub_maintenance' | 'inheritance' | 'insurance' | 'insurgency_corruption_contribution_reward' | 'insurgency_suppression_contribution_reward' | 'item_trader_payment' | 'jump_clone_activation_fee' | 'jump_clone_installation_fee' | 'kill_right_fee' | 'lp_store' | 'manufacturing' | 'market_escrow' | 'market_fine_paid' | 'market_provider_tax' | 'market_security_tax' | 'market_transaction' | 'medal_creation' | 'medal_issued' | 'milestone_reward_payment' | 'mission_completion' | 'mission_cost' | 'mission_expiration' | 'mission_reward' | 'npc_bounty_security_tax' | 'office_rental_fee' | 'operation_bonus' | 'opportunity_reward' | 'planetary_construction' | 'planetary_export_tax' | 'planetary_import_tax' | 'player_donation' | 'player_trading' | 'project_discovery_reward' | 'project_discovery_tax' | 'project_payouts' | 'reaction' | 'redeemed_isk_token' | 'release_of_impounded_property' | 'repair_bill' | 'reprocessing_tax' | 'researching_material_productivity' | 'researching_technology' | 'researching_time_productivity' | 'resource_wars_reward' | 'reverse_engineering' | 'season_challenge_reward' | 'security_processing_fee' | 'shares' | 'skill_purchase' | 'skyhook_claim_fee' | 'sovereignity_bill' | 'store_purchase' | 'store_purchase_refund' | 'structure_gate_jump' | 'transaction_tax' | 'under_construction' | 'upkeep_adjustment_fee' | 'war_ally_contract' | 'war_fee' | 'war_fee_surrender';\n second_party_id?: number;\n tax?: number;\n tax_receiver_id?: number;\n}\n\nexport interface CorporationsCorporationIdWalletsDivisionTransactionsGet {\n client_id: number;\n date: string;\n is_buy: boolean;\n journal_ref_id: number;\n location_id: number;\n quantity: number;\n transaction_id: number;\n type_id: number;\n unit_price: number;\n}\n\nexport interface CorporationsCorporationIdWalletsGet {\n balance: number;\n division: number;\n}\n\n// --- Wars ---\n\nexport interface WarsWarIdGet {\n aggressor: {\n alliance_id?: number;\n corporation_id?: number;\n isk_destroyed: number;\n ships_killed: number;\n };\n allies?: ({\n alliance_id?: number;\n corporation_id?: number;\n })[];\n declared: string;\n defender: {\n alliance_id?: number;\n corporation_id?: number;\n isk_destroyed: number;\n ships_killed: number;\n };\n finished?: string;\n id: number;\n mutual: boolean;\n open_for_allies: boolean;\n retracted?: string;\n started?: string;\n}\n\nexport interface WarsWarIdKillmailsGet {\n killmail_hash: string;\n killmail_id: number;\n}\n\n// Operation ID → Response type mapping\nexport interface EsiOperationTypes {\n 'GetAlliancesAllianceId': AllianceDetail;\n 'GetAlliancesAllianceIdContacts': AlliancesAllianceIdContactsGet[];\n 'GetAlliancesAllianceIdContactsLabels': AlliancesAllianceIdContactsLabelsGet[];\n 'GetAlliancesAllianceIdIcons': AlliancesAllianceIdIconsGet;\n 'GetCharactersCharacterId': CharactersDetail;\n 'GetCharactersCharacterIdAgentsResearch': CharactersCharacterIdAgentsResearchGet[];\n 'GetCharactersCharacterIdAssets': CharactersCharacterIdAssetsGet[];\n 'GetCharactersCharacterIdAttributes': CharactersCharacterIdAttributesGet;\n 'GetCharactersCharacterIdBlueprints': CharactersCharacterIdBlueprintsGet[];\n 'GetCharactersCharacterIdCalendar': CharactersCharacterIdCalendarGet[];\n 'GetCharactersCharacterIdCalendarEventId': CharactersCharacterIdCalendarEventIdGet;\n 'GetCharactersCharacterIdCalendarEventIdAttendees': CharactersCharacterIdCalendarEventIdAttendeesGet[];\n 'GetCharactersCharacterIdClones': CharactersCharacterIdClonesGet;\n 'GetCharactersCharacterIdContacts': CharactersCharacterIdContactsGet[];\n 'GetCharactersCharacterIdContactsLabels': CharactersCharacterIdContactsLabelsGet[];\n 'GetCharactersCharacterIdContracts': CharactersCharacterIdContractsGet[];\n 'GetCharactersCharacterIdContractsContractIdBids': CharactersCharacterIdContractsContractIdBidsGet[];\n 'GetCharactersCharacterIdContractsContractIdItems': CharactersCharacterIdContractsContractIdItemsGet[];\n 'GetCharactersCharacterIdCorporationhistory': CharactersCharacterIdCorporationhistoryGet[];\n 'GetCharactersCharacterIdFatigue': CharactersCharacterIdFatigueGet;\n 'GetCharactersCharacterIdFittings': CharactersCharacterIdFittingsGet[];\n 'GetCharactersCharacterIdFleet': CharactersCharacterIdFleetGet;\n 'GetCharactersCharacterIdFwStats': CharactersCharacterIdFwStatsGet;\n 'GetCharactersCharacterIdIndustryJobs': CharactersCharacterIdIndustryJobsGet[];\n 'GetCharactersCharacterIdKillmailsRecent': CharactersCharacterIdKillmailsRecentGet[];\n 'GetCharactersCharacterIdLocation': CharactersCharacterIdLocationGet;\n 'GetCharactersCharacterIdLoyaltyPoints': CharactersCharacterIdLoyaltyPointsGet[];\n 'GetCharactersCharacterIdMail': CharactersCharacterIdMailGet[];\n 'GetCharactersCharacterIdMailLabels': CharactersCharacterIdMailLabelsGet;\n 'GetCharactersCharacterIdMailLists': CharactersCharacterIdMailListsGet[];\n 'GetCharactersCharacterIdMailMailId': CharactersCharacterIdMailMailIdGet;\n 'GetCharactersCharacterIdMedals': CharactersCharacterIdMedalsGet[];\n 'GetCharactersCharacterIdMining': CharactersCharacterIdMiningGet[];\n 'GetCharactersCharacterIdNotifications': CharactersCharacterIdNotificationsGet[];\n 'GetCharactersCharacterIdNotificationsContacts': CharactersCharacterIdNotificationsContactsGet[];\n 'GetCharactersCharacterIdOnline': CharactersCharacterIdOnlineGet;\n 'GetCharactersCharacterIdOrders': CharactersCharacterIdOrdersGet[];\n 'GetCharactersCharacterIdOrdersHistory': CharactersCharacterIdOrdersHistoryGet[];\n 'GetCharactersCharacterIdPlanets': CharactersCharacterIdPlanetsGet[];\n 'GetCharactersCharacterIdPlanetsPlanetId': CharactersCharacterIdPlanetsPlanetIdGet;\n 'GetCharactersCharacterIdPortrait': CharactersCharacterIdPortraitGet;\n 'GetCharactersCharacterIdRoles': CharactersCharacterIdRolesGet;\n 'GetCharactersCharacterIdSearch': CharactersCharacterIdSearchGet;\n 'GetCharactersCharacterIdShip': CharactersCharacterIdShipGet;\n 'GetCharactersCharacterIdSkillqueue': CharactersSkillqueueSkill[];\n 'GetCharactersCharacterIdSkills': CharactersSkills;\n 'GetCharactersCharacterIdStandings': CharactersCharacterIdStandingsGet[];\n 'GetCharactersCharacterIdTitles': CharactersCharacterIdTitlesGet[];\n 'GetCharactersCharacterIdWalletJournal': CharactersCharacterIdWalletJournalGet[];\n 'GetCharactersCharacterIdWalletTransactions': CharactersCharacterIdWalletTransactionsGet[];\n 'GetCharactersFreelanceJobsListing': CharactersFreelanceJobsListing;\n 'GetCharactersFreelanceJobsParticipation': CharactersFreelanceJobsParticipation;\n 'GetContractsPublicBidsContractId': ContractsPublicBidsContractIdGet[];\n 'GetContractsPublicItemsContractId': ContractsPublicItemsContractIdGet[];\n 'GetContractsPublicRegionId': ContractsPublicRegionIdGet[];\n 'GetCorporationCorporationIdMiningExtractions': CorporationCorporationIdMiningExtractionsGet[];\n 'GetCorporationCorporationIdMiningObservers': CorporationCorporationIdMiningObserversGet[];\n 'GetCorporationCorporationIdMiningObserversObserverId': CorporationCorporationIdMiningObserversObserverIdGet[];\n 'GetCorporationsCorporationId': CorporationsDetail;\n 'GetCorporationsCorporationIdAlliancehistory': CorporationsCorporationIdAlliancehistoryGet[];\n 'GetCorporationsCorporationIdAssets': CorporationsCorporationIdAssetsGet[];\n 'GetCorporationsCorporationIdBlueprints': CorporationsCorporationIdBlueprintsGet[];\n 'GetCorporationsCorporationIdContacts': CorporationsCorporationIdContactsGet[];\n 'GetCorporationsCorporationIdContactsLabels': CorporationsCorporationIdContactsLabelsGet[];\n 'GetCorporationsCorporationIdContainersLogs': CorporationsCorporationIdContainersLogsGet[];\n 'GetCorporationsCorporationIdContracts': CorporationsCorporationIdContractsGet[];\n 'GetCorporationsCorporationIdContractsContractIdBids': CorporationsCorporationIdContractsContractIdBidsGet[];\n 'GetCorporationsCorporationIdContractsContractIdItems': CorporationsCorporationIdContractsContractIdItemsGet[];\n 'GetCorporationsCorporationIdCustomsOffices': CorporationsCorporationIdCustomsOfficesGet[];\n 'GetCorporationsCorporationIdDivisions': CorporationsCorporationIdDivisionsGet;\n 'GetCorporationsCorporationIdFacilities': CorporationsCorporationIdFacilitiesGet[];\n 'GetCorporationsCorporationIdFwStats': CorporationsCorporationIdFwStatsGet;\n 'GetCorporationsCorporationIdIcons': CorporationsCorporationIdIconsGet;\n 'GetCorporationsCorporationIdIndustryJobs': CorporationsCorporationIdIndustryJobsGet[];\n 'GetCorporationsCorporationIdKillmailsRecent': CorporationsCorporationIdKillmailsRecentGet[];\n 'GetCorporationsCorporationIdMedals': CorporationsCorporationIdMedalsGet[];\n 'GetCorporationsCorporationIdMedalsIssued': CorporationsCorporationIdMedalsIssuedGet[];\n 'GetCorporationsCorporationIdMembersTitles': CorporationsCorporationIdMembersTitlesGet[];\n 'GetCorporationsCorporationIdMembertracking': CorporationsCorporationIdMembertrackingGet[];\n 'GetCorporationsCorporationIdOrders': CorporationsCorporationIdOrdersGet[];\n 'GetCorporationsCorporationIdOrdersHistory': CorporationsCorporationIdOrdersHistoryGet[];\n 'GetCorporationsCorporationIdRoles': CorporationsCorporationIdRolesGet[];\n 'GetCorporationsCorporationIdRolesHistory': CorporationsCorporationIdRolesHistoryGet[];\n 'GetCorporationsCorporationIdShareholders': CorporationsCorporationIdShareholdersGet[];\n 'GetCorporationsCorporationIdStandings': CorporationsCorporationIdStandingsGet[];\n 'GetCorporationsCorporationIdStarbases': CorporationsCorporationIdStarbasesGet[];\n 'GetCorporationsCorporationIdStarbasesStarbaseId': CorporationsCorporationIdStarbasesStarbaseIdGet;\n 'GetCorporationsCorporationIdStructures': CorporationsCorporationIdStructuresGet[];\n 'GetCorporationsCorporationIdTitles': CorporationsCorporationIdTitlesGet[];\n 'GetCorporationsCorporationIdWallets': CorporationsCorporationIdWalletsGet[];\n 'GetCorporationsCorporationIdWalletsDivisionJournal': CorporationsCorporationIdWalletsDivisionJournalGet[];\n 'GetCorporationsCorporationIdWalletsDivisionTransactions': CorporationsCorporationIdWalletsDivisionTransactionsGet[];\n 'GetCorporationsFreelanceJobsListing': CorporationsFreelanceJobsListing;\n 'GetCorporationsFreelanceJobsParticipants': CorporationsFreelanceJobsParticipants;\n 'GetCorporationsProjectsContribution': CorporationsProjectsContribution;\n 'GetCorporationsProjectsContributors': CorporationsProjectsContributors;\n 'GetCorporationsProjectsDetail': CorporationsProjectsDetail;\n 'GetCorporationsProjectsListing': CorporationsProjectsListing;\n 'GetDogmaAttributesAttributeId': DogmaAttributesAttributeIdGet;\n 'GetDogmaDynamicItemsTypeIdItemId': DogmaDynamicItemsTypeIdItemIdGet;\n 'GetDogmaEffectsEffectId': DogmaEffectsEffectIdGet;\n 'GetFleetsFleetId': FleetsFleetIdGet;\n 'GetFleetsFleetIdMembers': FleetsFleetIdMembersGet[];\n 'GetFleetsFleetIdWings': FleetsFleetIdWingsGet[];\n 'GetFreelanceJobsDetail': FreelanceJobsDetail;\n 'GetFreelanceJobsListing': FreelanceJobsListing;\n 'GetFwLeaderboards': FwLeaderboardsGet;\n 'GetFwLeaderboardsCharacters': FwLeaderboardsCharactersGet;\n 'GetFwLeaderboardsCorporations': FwLeaderboardsCorporationsGet;\n 'GetFwStats': FwStatsGet[];\n 'GetFwSystems': FwSystemsGet[];\n 'GetFwWars': FwWarsGet[];\n 'GetIncursions': IncursionsGet[];\n 'GetIndustryFacilities': IndustryFacilitiesGet[];\n 'GetIndustrySystems': IndustrySystemsGet[];\n 'GetInsurancePrices': InsurancePricesGet[];\n 'GetKillmailsKillmailIdKillmailHash': KillmailsKillmailIdKillmailHashGet;\n 'GetLoyaltyStoresCorporationIdOffers': LoyaltyStoresCorporationIdOffersGet[];\n 'GetMarketsGroupsMarketGroupId': MarketsGroupsMarketGroupIdGet;\n 'GetMarketsPrices': MarketsPricesGet[];\n 'GetMarketsRegionIdHistory': MarketsRegionIdHistoryGet[];\n 'GetMarketsRegionIdOrders': MarketsRegionIdOrdersGet[];\n 'GetMarketsStructuresStructureId': MarketsStructuresStructureIdGet[];\n 'GetMetaChangelog': MetaChangelog;\n 'GetMetaCompatibilityDates': MetaCompatibilityDates;\n 'GetMetaStatus': MetaStatus;\n 'GetSovereigntyCampaigns': SovereigntyCampaignsGet[];\n 'GetSovereigntyMap': SovereigntyMapGet[];\n 'GetSovereigntyStructures': SovereigntyStructuresGet[];\n 'GetStatus': Status;\n 'GetUniverseAncestries': UniverseAncestriesGet[];\n 'GetUniverseAsteroidBeltsAsteroidBeltId': UniverseAsteroidBeltsAsteroidBeltIdGet;\n 'GetUniverseBloodlines': UniverseBloodlinesGet[];\n 'GetUniverseCategoriesCategoryId': UniverseCategoriesCategoryIdGet;\n 'GetUniverseConstellationsConstellationId': UniverseConstellationsConstellationIdGet;\n 'GetUniverseFactions': UniverseFactionsGet[];\n 'GetUniverseGraphicsGraphicId': UniverseGraphicsGraphicIdGet;\n 'GetUniverseGroupsGroupId': UniverseGroupsGroupIdGet;\n 'GetUniverseMoonsMoonId': UniverseMoonsMoonIdGet;\n 'GetUniversePlanetsPlanetId': UniversePlanetsPlanetIdGet;\n 'GetUniverseRaces': UniverseRacesGet[];\n 'GetUniverseRegionsRegionId': UniverseRegionsRegionIdGet;\n 'GetUniverseSchematicsSchematicId': UniverseSchematicsSchematicIdGet;\n 'GetUniverseStargatesStargateId': UniverseStargatesStargateIdGet;\n 'GetUniverseStarsStarId': UniverseStarsStarIdGet;\n 'GetUniverseStationsStationId': UniverseStationsStationIdGet;\n 'GetUniverseStructuresStructureId': UniverseStructuresStructureIdGet;\n 'GetUniverseSystemJumps': UniverseSystemJumpsGet[];\n 'GetUniverseSystemKills': UniverseSystemKillsGet[];\n 'GetUniverseSystemsSystemId': UniverseSystemsSystemIdGet;\n 'GetUniverseTypesTypeId': UniverseTypesTypeIdGet;\n 'GetWarsWarId': WarsWarIdGet;\n 'GetWarsWarIdKillmails': WarsWarIdKillmailsGet[];\n 'PostCharactersAffiliation': CharactersAffiliationPost[];\n 'PostCharactersCharacterIdAssetsLocations': CharactersCharacterIdAssetsLocationsPost[];\n 'PostCharactersCharacterIdAssetsNames': CharactersCharacterIdAssetsNamesPost[];\n 'PostCorporationsCorporationIdAssetsLocations': CorporationsCorporationIdAssetsLocationsPost[];\n 'PostCorporationsCorporationIdAssetsNames': CorporationsCorporationIdAssetsNamesPost[];\n 'PostRoute': Route;\n 'PostUniverseIds': UniverseIdsPost;\n 'PostUniverseNames': UniverseNamesPost[];\n}\n","export { esiEnum } from './esiEnum';\nexport * from './common';\nexport * from './access-lists';\nexport * from './alliance';\nexport * from './assets';\nexport * from './calendar';\nexport * from './character';\nexport * from './clones';\nexport * from './contacts';\nexport * from './contracts';\nexport * from './corporation';\nexport * from './corporation-projects';\nexport * from './dogma';\nexport * from './faction-warfare';\nexport * from './fittings';\nexport * from './fleet';\nexport * from './freelance-jobs';\nexport * from './incursions';\nexport * from './industry';\nexport * from './insurance';\nexport * from './killmails';\nexport * from './location';\nexport * from './loyalty';\nexport * from './mail';\nexport * from './market';\nexport * from './mercenary';\nexport * from './meta';\nexport * from './military-campaigns';\nexport * from './pi';\nexport * from './skills';\nexport * from './skyhooks';\nexport * from './sovereignty';\nexport * from './status';\nexport * from './universe';\nexport * from './wallet';\nexport * from './wars';\n\n// Drift detection (scripts/generate-schema-drift-report.ts) compares these\n// hand-written schemas directly against the live ESI OpenAPI spec at runtime.\n// No generated Zod schemas are needed.\n"],"mappings":"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","names":["resolveCache","resolveCache","resolveCache","resolveCache","resolveCache","resolveRateLimiter","resolveCircuitBreaker","data","response","responseBody","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","SovereigntyHubSchema","z","SovereigntyHubSchema","z","z","z","z","z","z","z","z","z","z","z","bucket","SovereigntyHubSchema"]}
1
+ {"version":3,"sources":["../src/core/middleware/Middleware.ts","../src/core/ApiClient.ts","../src/core/logger/logger.ts","../src/core/logger/loggerUtil.ts","../src/core/circuitBreaker/CircuitBreaker.ts","../src/core/util/error.ts","../src/core/cache/cacheKey.ts","../src/core/constants.ts","../src/core/requestPipeline/headers.ts","../src/core/util/stringUtil.ts","../src/core/endpoints/esi-cache-ttls.generated.ts","../src/core/requestPipeline/cachePolicy.ts","../src/core/requestPipeline/statusHandling.ts","../src/core/util/retry.ts","../src/core/util/sleep.ts","../src/core/RetryStrategy.ts","../src/core/requestPipeline/dependencies.ts","../src/core/pagination/PaginationHandler.ts","../src/core/requestPipeline/paginationOrchestration.ts","../src/core/requestPipeline/middlewareBridge.ts","../src/core/util/headersUtil.ts","../src/core/requestPipeline/fetchExecution.ts","../src/core/ApiRequestHandler.ts","../src/core/util/validation.ts","../src/core/endpoints/buildEndpointPath.ts","../src/core/endpoints/createClient.ts","../src/core/pagination/AsyncPaginationIterator.ts","../src/clients/BaseEsiClient.ts","../src/core/endpoints/allianceEndpoints.ts","../src/schemas/alliance.ts","../src/schemas/esiEnum.ts","../src/core/endpoints/contactEndpoints.ts","../src/schemas/contacts.ts","../src/clients/AllianceClient.ts","../src/core/endpoints/assetEndpoints.ts","../src/schemas/assets.ts","../src/clients/AssetsClient.ts","../src/core/endpoints/calendarEndpoints.ts","../src/schemas/calendar.ts","../src/clients/CalendarClient.ts","../src/core/endpoints/characterEndpoints.ts","../src/schemas/character.ts","../src/schemas/common.ts","../src/clients/CharacterClient.ts","../src/core/endpoints/cloneEndpoints.ts","../src/schemas/clones.ts","../src/clients/ClonesClient.ts","../src/clients/ContactsClient.ts","../src/core/endpoints/contractEndpoints.ts","../src/schemas/contracts.ts","../src/clients/ContractsClient.ts","../src/core/endpoints/corporationEndpoints.ts","../src/schemas/corporation.ts","../src/clients/CorporationsClient.ts","../src/core/endpoints/corporationProjectEndpoints.ts","../src/schemas/corporation-projects.ts","../src/clients/CorporationProjectsClient.ts","../src/core/endpoints/dogmaEndpoints.ts","../src/schemas/dogma.ts","../src/clients/DogmaClient.ts","../src/core/endpoints/factionEndpoints.ts","../src/schemas/faction-warfare.ts","../src/clients/FactionClient.ts","../src/core/endpoints/fittingEndpoints.ts","../src/schemas/fittings.ts","../src/clients/FittingsClient.ts","../src/core/endpoints/fleetEndpoints.ts","../src/schemas/fleet.ts","../src/clients/FleetClient.ts","../src/core/endpoints/incursionEndpoints.ts","../src/schemas/incursions.ts","../src/clients/IncursionsClient.ts","../src/core/endpoints/industryEndpoints.ts","../src/schemas/industry.ts","../src/clients/IndustryClient.ts","../src/core/endpoints/insuranceEndpoints.ts","../src/schemas/insurance.ts","../src/clients/InsuranceClient.ts","../src/core/endpoints/killmailEndpoints.ts","../src/schemas/killmails.ts","../src/clients/KillmailsClient.ts","../src/schemas/location.ts","../src/core/endpoints/locationEndpoints.ts","../src/clients/LocationClient.ts","../src/core/endpoints/loyaltyEndpoints.ts","../src/schemas/loyalty.ts","../src/clients/LoyaltyClient.ts","../src/core/endpoints/mailEndpoints.ts","../src/schemas/mail.ts","../src/clients/MailClient.ts","../src/core/endpoints/marketEndpoints.ts","../src/schemas/market.ts","../src/clients/MarketClient.ts","../src/core/endpoints/piEndpoints.ts","../src/schemas/pi.ts","../src/schemas/universe.ts","../src/clients/PiClient.ts","../src/core/endpoints/routeEndpoints.ts","../src/clients/RouteClient.ts","../src/core/endpoints/searchEndpoints.ts","../src/clients/SearchClient.ts","../src/core/endpoints/skillEndpoints.ts","../src/schemas/skills.ts","../src/clients/SkillsClient.ts","../src/core/endpoints/sovereigntyEndpoints.ts","../src/schemas/sovereignty.ts","../src/clients/SovereigntyClient.ts","../src/schemas/status.ts","../src/core/endpoints/statusEndpoints.ts","../src/clients/StatusClient.ts","../src/core/endpoints/uiEndpoints.ts","../src/clients/UiClient.ts","../src/core/endpoints/universeEndpoints.ts","../src/clients/UniverseClient.ts","../src/core/endpoints/walletEndpoints.ts","../src/schemas/wallet.ts","../src/clients/WalletClient.ts","../src/core/endpoints/warEndpoints.ts","../src/schemas/wars.ts","../src/clients/WarsClient.ts","../src/core/endpoints/metaEndpoints.ts","../src/schemas/meta.ts","../src/clients/MetaClient.ts","../src/core/endpoints/freelanceJobsEndpoints.ts","../src/schemas/freelance-jobs.ts","../src/clients/FreelanceJobsClient.ts","../src/core/endpoints/skyhookEndpoints.ts","../src/schemas/skyhooks.ts","../src/clients/SkyhooksClient.ts","../src/core/endpoints/mercenaryEndpoints.ts","../src/schemas/mercenary.ts","../src/clients/MercenaryClient.ts","../src/core/endpoints/accessListEndpoints.ts","../src/schemas/access-lists.ts","../src/clients/AccessListsClient.ts","../src/schemas/cosmetics.ts","../src/core/endpoints/cosmeticsEndpoints.ts","../src/clients/CosmeticsClient.ts","../src/schemas/paragon-hub.ts","../src/core/endpoints/paragonHubEndpoints.ts","../src/clients/ParagonHubClient.ts","../src/core/endpoints/militaryCampaignEndpoints.ts","../src/schemas/military-campaigns.ts","../src/clients/MilitaryCampaignsClient.ts","../src/core/ClientRegistry.ts","../src/core/EsiDiagnostics.ts","../src/core/BatchRequestHandler.ts","../src/core/cache/ETagCacheManager.ts","../src/core/endpoints/esi-rate-limit-groups.generated.ts","../src/core/rateLimiter/RateLimiter.ts","../src/core/RequestDeduplicator.ts","../src/core/configureApiClient.ts","../src/EsiClient.ts","../src/EsiClientBuilder.ts","../src/core/ApiClientBuilder.ts","../src/core/endpoints/esi-scopes.generated.ts","../src/types/branded.ts","../src/types/generated/esi-spec.generated.ts","../src/schemas/index.ts"],"sourcesContent":["export interface RequestContext {\n url: string;\n endpoint: string;\n method: string;\n headers: Record<string, string>;\n body?: unknown;\n}\n\nexport interface ResponseContext {\n url: string;\n endpoint: string;\n method: string;\n status: number;\n headers: Record<string, string>;\n body: unknown;\n durationMs: number;\n fromCache: boolean;\n}\n\nexport type RequestInterceptor = (\n context: RequestContext,\n) => RequestContext | Promise<RequestContext>;\n\nexport type ResponseInterceptor = (\n context: ResponseContext,\n) => ResponseContext | Promise<ResponseContext>;\n\nexport class MiddlewareManager {\n private requestInterceptors: RequestInterceptor[] = [];\n private responseInterceptors: ResponseInterceptor[] = [];\n\n addRequestInterceptor(fn: RequestInterceptor): () => void {\n this.requestInterceptors.push(fn);\n return () => {\n this.requestInterceptors = this.requestInterceptors.filter(\n (i) => i !== fn,\n );\n };\n }\n\n addResponseInterceptor(fn: ResponseInterceptor): () => void {\n this.responseInterceptors.push(fn);\n return () => {\n this.responseInterceptors = this.responseInterceptors.filter(\n (i) => i !== fn,\n );\n };\n }\n\n async applyRequestInterceptors(\n context: RequestContext,\n ): Promise<RequestContext> {\n let ctx = context;\n for (const interceptor of this.requestInterceptors) {\n ctx = await interceptor(ctx);\n }\n return ctx;\n }\n\n async applyResponseInterceptors(\n context: ResponseContext,\n ): Promise<ResponseContext> {\n let ctx = context;\n for (const interceptor of this.responseInterceptors) {\n ctx = await interceptor(ctx);\n }\n return ctx;\n }\n\n hasInterceptors(): boolean {\n return (\n this.requestInterceptors.length > 0 ||\n this.responseInterceptors.length > 0\n );\n }\n\n clear(): void {\n this.requestInterceptors = [];\n this.responseInterceptors = [];\n }\n}\n","import {\r\n MiddlewareManager,\r\n RequestInterceptor,\r\n ResponseInterceptor,\r\n} from './middleware/Middleware';\r\nimport { ICache } from './cache/ICache';\r\nimport { IRateLimiter } from './rateLimiter/IRateLimiter';\r\nimport { ICircuitBreaker } from './circuitBreaker/ICircuitBreaker';\r\nimport { IDeduplicator } from './IDeduplicator';\r\nimport { IRetryStrategy } from './IRetryStrategy';\r\nimport { RetryConfig } from './util/retry';\r\n\r\nexport type EsiDatasource = 'tranquility' | 'singularity';\r\n\r\nexport type TokenProvider = () => Promise<string>;\r\n\r\nexport class ApiClient {\r\n private datasource?: EsiDatasource;\r\n private tokenProvider?: TokenProvider;\r\n private refreshInFlight?: Promise<string>;\r\n private middleware: MiddlewareManager = new MiddlewareManager();\r\n private cache: ICache | null = null;\r\n private rateLimiter: IRateLimiter | null = null;\r\n private circuitBreaker: ICircuitBreaker | null = null;\r\n private timeout: number = 30_000;\r\n private deduplicator: IDeduplicator | null = null;\r\n private retryConfig: RetryConfig | null = null;\r\n private retryStrategy: IRetryStrategy | null = null;\r\n private validateResponse: boolean = true;\r\n private validateRequest: boolean = false;\r\n private language?: string;\r\n private compatibilityDate?: string;\r\n\r\n constructor(\r\n private clientId: string,\r\n private link: string,\r\n private accessToken?: string,\r\n ) {\r\n this.link = this.link.replace(/\\/$/, '');\r\n }\r\n\r\n getTimeout(): number {\r\n return this.timeout;\r\n }\r\n\r\n setTimeout(timeout: number): void {\r\n this.timeout = timeout;\r\n }\r\n\r\n getCache(): ICache | null {\r\n return this.cache;\r\n }\r\n\r\n setCache(cache: ICache | null): void {\r\n this.cache = cache;\r\n }\r\n\r\n getRateLimiter(): IRateLimiter | null {\r\n return this.rateLimiter;\r\n }\r\n\r\n setRateLimiter(limiter: IRateLimiter | null): void {\r\n this.rateLimiter = limiter;\r\n }\r\n\r\n getCircuitBreaker(): ICircuitBreaker | null {\r\n return this.circuitBreaker;\r\n }\r\n\r\n setCircuitBreaker(cb: ICircuitBreaker | null): void {\r\n this.circuitBreaker = cb;\r\n }\r\n\r\n getDeduplicator(): IDeduplicator | null {\r\n return this.deduplicator;\r\n }\r\n\r\n setDeduplicator(dedup: IDeduplicator | null): void {\r\n this.deduplicator = dedup;\r\n }\r\n\r\n getRetryConfig(): RetryConfig | null {\r\n return this.retryConfig;\r\n }\r\n\r\n setRetryConfig(config: RetryConfig | null): void {\r\n this.retryConfig = config;\r\n }\r\n\r\n getRetryStrategy(): IRetryStrategy | null {\r\n return this.retryStrategy;\r\n }\r\n\r\n setRetryStrategy(strategy: IRetryStrategy | null): void {\r\n this.retryStrategy = strategy;\r\n }\r\n\r\n getValidateResponse(): boolean {\r\n return this.validateResponse;\r\n }\r\n\r\n setValidateResponse(validate: boolean): void {\r\n this.validateResponse = validate;\r\n }\r\n\r\n getValidateRequest(): boolean {\r\n return this.validateRequest;\r\n }\r\n\r\n setValidateRequest(validate: boolean): void {\r\n this.validateRequest = validate;\r\n }\r\n\r\n getMiddleware(): MiddlewareManager {\r\n return this.middleware;\r\n }\r\n\r\n addRequestInterceptor(fn: RequestInterceptor): () => void {\r\n return this.middleware.addRequestInterceptor(fn);\r\n }\r\n\r\n addResponseInterceptor(fn: ResponseInterceptor): () => void {\r\n return this.middleware.addResponseInterceptor(fn);\r\n }\r\n\r\n getAuthorizationHeader(): string | undefined {\r\n return this.accessToken ? `Bearer ${this.accessToken}` : undefined;\r\n }\r\n\r\n getLink(): string {\r\n return this.link;\r\n }\r\n\r\n getDatasource(): EsiDatasource | undefined {\r\n return this.datasource;\r\n }\r\n\r\n setDatasource(datasource: EsiDatasource | undefined): void {\r\n this.datasource = datasource;\r\n }\r\n\r\n getLanguage(): string | undefined {\r\n return this.language;\r\n }\r\n\r\n setLanguage(language: string | undefined): void {\r\n this.language = language;\r\n }\r\n\r\n getCompatibilityDate(): string | undefined {\r\n return this.compatibilityDate;\r\n }\r\n\r\n setCompatibilityDate(date: string | undefined): void {\r\n this.compatibilityDate = date;\r\n }\r\n\r\n setAccessToken(token: string): void {\r\n this.accessToken = token;\r\n }\r\n\r\n setTokenProvider(provider: TokenProvider | undefined): void {\r\n this.tokenProvider = provider;\r\n }\r\n\r\n hasTokenProvider(): boolean {\r\n return this.tokenProvider !== undefined;\r\n }\r\n\r\n toJSON(): Record<string, unknown> {\r\n return {\r\n link: this.link,\r\n datasource: this.datasource,\r\n timeout: this.timeout,\r\n hasCache: this.cache !== null,\r\n hasRateLimiter: this.rateLimiter !== null,\r\n hasCircuitBreaker: this.circuitBreaker !== null,\r\n hasDeduplicator: this.deduplicator !== null,\r\n hasTokenProvider: this.tokenProvider !== undefined,\r\n validateResponse: this.validateResponse,\r\n validateRequest: this.validateRequest,\r\n language: this.language,\r\n compatibilityDate: this.compatibilityDate,\r\n };\r\n }\r\n\r\n async refreshToken(): Promise<string> {\r\n if (!this.tokenProvider) {\r\n throw new Error('No token provider configured');\r\n }\r\n\r\n if (this.refreshInFlight) {\r\n return this.refreshInFlight;\r\n }\r\n\r\n this.refreshInFlight = this.tokenProvider().then(\r\n (token) => {\r\n this.accessToken = token;\r\n this.refreshInFlight = undefined;\r\n return token;\r\n },\r\n (err) => {\r\n this.refreshInFlight = undefined;\r\n throw err;\r\n },\r\n );\r\n\r\n return this.refreshInFlight;\r\n }\r\n}\r\n","import pino from 'pino';\r\nimport { ILogger } from './ILogger';\r\n\r\nconst pinoLogger = pino({ level: process.env.ESI_LOG_LEVEL || 'warn' });\r\n\r\nconst logger: ILogger = {\r\n info: (msg: string) => {\r\n pinoLogger.info(msg);\r\n },\r\n warn: (msg: string) => {\r\n pinoLogger.warn(msg);\r\n },\r\n error: (msg: string) => {\r\n pinoLogger.error(msg);\r\n },\r\n debug: (msg: string) => {\r\n pinoLogger.debug(msg);\r\n },\r\n};\r\n\r\nexport default logger;\r\n","import logger from './logger';\nimport { ILogger } from './ILogger';\n\nexport type { ILogger } from './ILogger';\n\nlet activeLogger: ILogger = logger;\n\nexport const setLogger = (customLogger: ILogger): void => {\n activeLogger = customLogger;\n};\n\nexport const getLogger = (): ILogger => activeLogger;\n\nexport const logInfo = (message: string) => {\n activeLogger.info(message);\n};\n\nexport const logError = (message: string) => {\n activeLogger.error(message);\n};\n\nexport const logWarn = (message: string) => {\n activeLogger.warn(message);\n};\n\nexport const logDebug = (message: string) => {\n activeLogger.debug(message);\n};\n","import { logWarn, logInfo } from '../logger/loggerUtil';\r\nimport { ICircuitBreaker } from './ICircuitBreaker';\r\n\r\nexport type CircuitState = 'closed' | 'open' | 'half-open';\r\n\r\nexport interface CircuitBreakerConfig {\r\n failureThreshold?: number;\r\n resetTimeoutMs?: number;\r\n halfOpenMaxAttempts?: number;\r\n staleThresholdMs?: number;\r\n /** 'resolved' (default, current behavior) | 'template' (group by endpoint template path) */\r\n keyStrategy?: 'resolved' | 'template';\r\n /** Interval in ms for automatic cleanup of stale circuits. 0 or undefined disables. Recommended value: staleThresholdMs. */\r\n cleanupIntervalMs?: number;\r\n}\r\n\r\ninterface CircuitRecord {\r\n state: CircuitState;\r\n failures: number;\r\n lastFailureTime: number;\r\n halfOpenAttempts: number;\r\n}\r\n\r\nexport class CircuitBreaker implements ICircuitBreaker {\r\n private circuits: Map<string, CircuitRecord> = new Map();\r\n private readonly failureThreshold: number;\r\n private readonly resetTimeoutMs: number;\r\n private readonly halfOpenMaxAttempts: number;\r\n private readonly staleThresholdMs: number;\r\n private readonly keyStrategy: 'resolved' | 'template';\r\n private cleanupTimer: ReturnType<typeof setInterval> | null = null;\r\n\r\n constructor(config: CircuitBreakerConfig = {}) {\r\n this.failureThreshold = config.failureThreshold ?? 5;\r\n this.resetTimeoutMs = config.resetTimeoutMs ?? 30_000;\r\n this.halfOpenMaxAttempts = config.halfOpenMaxAttempts ?? 1;\r\n this.staleThresholdMs = config.staleThresholdMs ?? 3_600_000;\r\n this.keyStrategy = config.keyStrategy ?? 'resolved';\r\n\r\n const cleanupIntervalMs = config.cleanupIntervalMs;\r\n if (cleanupIntervalMs !== undefined && cleanupIntervalMs > 0) {\r\n this.startCleanupTimer(cleanupIntervalMs);\r\n }\r\n }\r\n\r\n private getKey(endpoint: string): string {\r\n return endpoint.split('?')[0]!;\r\n }\r\n\r\n private getOrCreate(key: string): CircuitRecord {\r\n let record = this.circuits.get(key);\r\n if (!record) {\r\n record = {\r\n state: 'closed',\r\n failures: 0,\r\n lastFailureTime: 0,\r\n halfOpenAttempts: 0,\r\n };\r\n this.circuits.set(key, record);\r\n }\r\n return record;\r\n }\r\n\r\n checkCircuit(endpoint: string): void {\r\n const key = this.getKey(endpoint);\r\n const record = this.getOrCreate(key);\r\n\r\n if (record.state === 'closed') return;\r\n\r\n if (record.state === 'open') {\r\n const elapsed = Date.now() - record.lastFailureTime;\r\n if (elapsed >= this.resetTimeoutMs) {\r\n record.state = 'half-open';\r\n record.halfOpenAttempts = 0;\r\n logInfo(`Circuit half-open for ${key}, allowing probe request`);\r\n return;\r\n }\r\n const remainingMs = this.resetTimeoutMs - elapsed;\r\n throw new CircuitOpenError(key, record.failures, remainingMs);\r\n }\r\n\r\n if (record.state === 'half-open') {\r\n if (record.halfOpenAttempts >= this.halfOpenMaxAttempts) {\r\n throw new CircuitOpenError(key, record.failures, this.resetTimeoutMs);\r\n }\r\n record.halfOpenAttempts++;\r\n }\r\n }\r\n\r\n recordSuccess(endpoint: string): void {\r\n const key = this.getKey(endpoint);\r\n const record = this.circuits.get(key);\r\n if (!record) return;\r\n\r\n if (record.state === 'half-open') {\r\n logInfo(`Circuit closed for ${key} after successful probe`);\r\n }\r\n\r\n record.state = 'closed';\r\n record.failures = 0;\r\n record.halfOpenAttempts = 0;\r\n }\r\n\r\n recordFailure(endpoint: string, statusCode: number): void {\r\n // statusCode 0 = network/timeout; 420/429 = rate limited; >=500 = server errors\r\n if (\r\n statusCode !== 0 &&\r\n statusCode < 500 &&\r\n statusCode !== 420 &&\r\n statusCode !== 429\r\n ) {\r\n return;\r\n }\r\n\r\n const key = this.getKey(endpoint);\r\n const record = this.getOrCreate(key);\r\n\r\n record.failures++;\r\n record.lastFailureTime = Date.now();\r\n\r\n if (record.state === 'half-open') {\r\n record.state = 'open';\r\n logWarn(\r\n `Circuit re-opened for ${key} after failed probe (${record.failures} failures)`,\r\n );\r\n return;\r\n }\r\n\r\n if (record.failures >= this.failureThreshold) {\r\n record.state = 'open';\r\n logWarn(\r\n `Circuit opened for ${key} after ${record.failures} consecutive failures`,\r\n );\r\n }\r\n }\r\n\r\n getState(endpoint: string): CircuitState {\r\n const key = this.getKey(endpoint);\r\n const record = this.circuits.get(key);\r\n if (!record) return 'closed';\r\n\r\n if (record.state === 'open') {\r\n const elapsed = Date.now() - record.lastFailureTime;\r\n if (elapsed >= this.resetTimeoutMs) {\r\n return 'half-open';\r\n }\r\n }\r\n\r\n return record.state;\r\n }\r\n\r\n getStats(): {\r\n totalCircuits: number;\r\n openCircuits: number;\r\n circuits: Record<string, { state: CircuitState; failures: number }>;\r\n } {\r\n const circuits: Record<string, { state: CircuitState; failures: number }> =\r\n {};\r\n let openCircuits = 0;\r\n\r\n for (const [key, record] of this.circuits.entries()) {\r\n const state = this.getState(key);\r\n // eslint-disable-next-line security/detect-object-injection\r\n circuits[key] = { state, failures: record.failures };\r\n if (state === 'open') openCircuits++;\r\n }\r\n\r\n return {\r\n totalCircuits: this.circuits.size,\r\n openCircuits,\r\n circuits,\r\n };\r\n }\r\n\r\n reset(endpoint?: string): void {\r\n if (endpoint) {\r\n this.circuits.delete(this.getKey(endpoint));\r\n } else {\r\n this.circuits.clear();\r\n }\r\n }\r\n\r\n cleanup(): number {\r\n const now = Date.now();\r\n let cleaned = 0;\r\n for (const [key, record] of this.circuits.entries()) {\r\n if (\r\n record.state === 'closed' &&\r\n record.failures === 0 &&\r\n record.lastFailureTime > 0 &&\r\n now - record.lastFailureTime > this.staleThresholdMs\r\n ) {\r\n this.circuits.delete(key);\r\n cleaned++;\r\n }\r\n }\r\n if (cleaned > 0) {\r\n logInfo(`Circuit breaker cleanup: removed ${cleaned} stale circuits`);\r\n }\r\n return cleaned;\r\n }\r\n\r\n getKeyStrategy(): 'resolved' | 'template' {\r\n return this.keyStrategy;\r\n }\r\n\r\n destroy(): void {\r\n if (this.cleanupTimer) {\r\n clearInterval(this.cleanupTimer);\r\n this.cleanupTimer = null;\r\n }\r\n this.circuits.clear();\r\n }\r\n\r\n shutdown(): void {\r\n this.destroy();\r\n }\r\n\r\n private startCleanupTimer(intervalMs: number): void {\r\n this.cleanupTimer = setInterval(() => {\r\n this.cleanup();\r\n }, intervalMs);\r\n // Don't prevent process exit (important for test runners and CLI tools)\r\n this.cleanupTimer.unref();\r\n }\r\n}\r\n\r\nexport class CircuitOpenError extends Error {\r\n readonly endpoint: string;\r\n readonly failures: number;\r\n readonly retryAfterMs: number;\r\n\r\n constructor(endpoint: string, failures: number, retryAfterMs: number) {\r\n super(\r\n `Circuit breaker open for ${endpoint} after ${failures} failures (retry after ${Math.ceil(retryAfterMs / 1000)}s)`,\r\n );\r\n this.name = 'CircuitOpenError';\r\n this.endpoint = endpoint;\r\n this.failures = failures;\r\n this.retryAfterMs = retryAfterMs;\r\n }\r\n}\r\n","const SENSITIVE_PARAMS = [\r\n 'token',\r\n 'access_token',\r\n 'api_key',\r\n 'refresh_token',\r\n 'client_secret',\r\n 'code',\r\n 'key',\r\n 'secret',\r\n 'auth',\r\n 'password',\r\n 'bearer',\r\n];\r\n\r\nexport function sanitizeUrl(url?: string): string | undefined {\r\n if (!url) return url;\r\n try {\r\n const parsed = new URL(url);\r\n for (const param of SENSITIVE_PARAMS) {\r\n if (parsed.searchParams.has(param)) {\r\n parsed.searchParams.set(param, '[REDACTED]');\r\n }\r\n }\r\n return parsed.toString();\r\n } catch {\r\n const qIndex = url.indexOf('?');\r\n return qIndex >= 0 ? url.substring(0, qIndex) + '?[params-redacted]' : url;\r\n }\r\n}\r\n\r\nexport class EsiError extends Error {\r\n public readonly url?: string;\r\n\r\n constructor(\r\n public readonly statusCode: number,\r\n message: string,\r\n url?: string,\r\n public readonly requestId?: string,\r\n ) {\r\n super(message);\r\n this.name = 'EsiError';\r\n this.url = sanitizeUrl(url);\r\n }\r\n\r\n isRateLimited(): boolean {\r\n return this.statusCode === 420 || this.statusCode === 429;\r\n }\r\n\r\n isNotFound(): boolean {\r\n return this.statusCode === 404;\r\n }\r\n\r\n isUnauthorized(): boolean {\r\n return this.statusCode === 401;\r\n }\r\n\r\n isForbidden(): boolean {\r\n return this.statusCode === 403;\r\n }\r\n\r\n isServerError(): boolean {\r\n return this.statusCode >= 500;\r\n }\r\n\r\n isTimeout(): boolean {\r\n return this.statusCode === 0;\r\n }\r\n\r\n get retryable(): boolean {\r\n return (\r\n this.statusCode === 0 ||\r\n this.statusCode === 420 ||\r\n this.statusCode === 429 ||\r\n this.statusCode === 502 ||\r\n this.statusCode === 503 ||\r\n this.statusCode === 504\r\n );\r\n }\r\n}\r\n\r\nexport function isEsiError(error: unknown): error is EsiError {\r\n return error instanceof EsiError;\r\n}\r\n\r\nexport function isRateLimited(error: unknown): error is EsiError {\r\n return error instanceof EsiError && error.isRateLimited();\r\n}\r\n\r\nexport function isNotFound(error: unknown): error is EsiError {\r\n return error instanceof EsiError && error.isNotFound();\r\n}\r\n\r\nexport function isUnauthorized(error: unknown): error is EsiError {\r\n return error instanceof EsiError && error.isUnauthorized();\r\n}\r\n\r\nexport function isForbidden(error: unknown): error is EsiError {\r\n return error instanceof EsiError && error.isForbidden();\r\n}\r\n\r\nexport function isServerError(error: unknown): error is EsiError {\r\n return error instanceof EsiError && error.isServerError();\r\n}\r\n\r\nexport class TimeoutError extends EsiError {\r\n constructor(\r\n public readonly timeoutMs: number,\r\n url?: string,\r\n requestId?: string,\r\n ) {\r\n super(0, `Request timed out after ${timeoutMs}ms`, url, requestId);\r\n this.name = 'TimeoutError';\r\n }\r\n}\r\n\r\nexport function isTimeout(error: unknown): error is TimeoutError {\r\n return error instanceof TimeoutError;\r\n}\r\n\r\nexport function isRetryable(error: unknown): error is EsiError {\r\n return error instanceof EsiError && error.retryable;\r\n}\r\n\r\n// Re-export CircuitOpenError for the type guard — avoid forcing consumers\r\n// to import from the circuitBreaker subpath just for error checking.\r\nimport { CircuitOpenError } from '../circuitBreaker/CircuitBreaker';\r\n\r\nexport function isCircuitOpen(error: unknown): error is CircuitOpenError {\r\n return error instanceof CircuitOpenError;\r\n}\r\n\r\nexport const buildError = (\r\n message: string,\r\n type: string = 'ERROR',\r\n url?: string,\r\n): Error => {\r\n const error = new Error(`[${type}] ${message}`);\r\n if (url) {\r\n (error as Error & { url: string }).url = url;\r\n }\r\n return error;\r\n};\r\n\r\nexport type ValidationDirection = 'request' | 'response';\r\n\r\nexport class EsiValidationError extends EsiError {\r\n public readonly validationError: unknown;\r\n public readonly direction: ValidationDirection;\r\n\r\n constructor(\r\n url: string,\r\n zodError: unknown,\r\n requestId?: string,\r\n direction: ValidationDirection = 'response',\r\n ) {\r\n const safeUrl = sanitizeUrl(url) ?? url;\r\n const label = direction === 'request' ? 'Request body' : 'Response';\r\n super(0, `${label} validation failed for ${safeUrl}`, url, requestId);\r\n this.name = 'EsiValidationError';\r\n this.validationError = zodError;\r\n this.direction = direction;\r\n }\r\n}\r\n\r\nexport function isValidationError(error: unknown): error is EsiValidationError {\r\n return error instanceof EsiValidationError;\r\n}\r\n","import { createHash } from 'crypto';\r\nimport { ApiClient } from '../ApiClient';\r\n\r\nexport function buildCacheKey(\r\n url: string,\r\n client: ApiClient,\r\n requiresAuth: boolean = false,\r\n): string {\r\n if (!requiresAuth) return url;\r\n const authHeader = client.getAuthorizationHeader();\r\n if (!authHeader) return url;\r\n const hash = createHash('sha256')\r\n .update(authHeader)\r\n .digest('hex')\r\n .slice(0, 16);\r\n return `${hash}:${url}`;\r\n}\r\n","export const PACKAGE_NAME = 'esi.ts';\r\nexport const PACKAGE_VERSION = '9.2.0';\r\nexport const USER_AGENT = `${PACKAGE_NAME}/${PACKAGE_VERSION}`;\r\nexport const COMPATIBILITY_DATE = '2026-05-19';\r\n","import { ApiClient } from '../ApiClient';\r\nimport { buildError } from '../util/error';\r\nimport { logDebug } from '../logger/loggerUtil';\r\nimport { ICache } from '../cache/ICache';\r\nimport { buildCacheKey } from '../cache/cacheKey';\r\nimport { USER_AGENT, COMPATIBILITY_DATE } from '../constants';\r\n\r\n/**\r\n * Parse Cache-Control header to extract max-age TTL in milliseconds.\r\n */\r\nexport const parseCacheControlTtl = (\r\n headers: Record<string, string>,\r\n): number | undefined => {\r\n const cacheControl = headers['cache-control'] ?? headers['Cache-Control'];\r\n if (!cacheControl) return undefined;\r\n const match = /max-age=(\\d+)/.exec(cacheControl);\r\n return match ? parseInt(match[1]!, 10) * 1000 : undefined;\r\n};\r\n\r\n/**\r\n * Build the request headers for an ESI API call.\r\n */\r\nexport function buildRequestHeaders(\r\n client: ApiClient,\r\n url: string,\r\n method: string,\r\n requiresAuth: boolean,\r\n useETag: boolean,\r\n body: unknown,\r\n resolveCache: (client: ApiClient) => ICache | null,\r\n): HeadersInit {\r\n const headers: HeadersInit = {\r\n Accept: 'application/json',\r\n 'Accept-Encoding': 'gzip, deflate, br',\r\n 'User-Agent': USER_AGENT,\r\n 'X-Compatibility-Date': client.getCompatibilityDate() ?? COMPATIBILITY_DATE,\r\n };\r\n\r\n const language = client.getLanguage();\r\n if (language) {\r\n headers['Accept-Language'] = language;\r\n }\r\n\r\n if (requiresAuth) {\r\n const authHeader = client.getAuthorizationHeader();\r\n if (!authHeader) {\r\n throw buildError(\r\n 'Authorization header is required but not provided',\r\n 'NO_AUTH_TOKEN',\r\n );\r\n }\r\n headers['Authorization'] = authHeader;\r\n }\r\n\r\n const cache = resolveCache(client);\r\n if (useETag && method === 'GET' && cache) {\r\n const key = buildCacheKey(url, client, requiresAuth);\r\n const cachedETag = cache.getETag(key);\r\n if (cachedETag) {\r\n headers['If-None-Match'] = cachedETag;\r\n logDebug(`Adding If-None-Match header: ${cachedETag}`);\r\n }\r\n }\r\n\r\n if (body) {\r\n headers['Content-Type'] = 'application/json';\r\n }\r\n\r\n return headers;\r\n}\r\n","export function camelToSnake(s: string): string {\n return s.replace(/[A-Z]/g, (c) => `_${c.toLowerCase()}`);\n}\n","// Auto-generated from ESI OpenAPI spec — do not edit manually\n// Endpoints with cache TTLs: 126\n\nexport const esiCacheTtls: Record<string, number> = {\n 'GET:alliances': 3600,\n 'GET:alliances/{alliance_id}': 3600,\n 'GET:alliances/{alliance_id}/contacts': 300,\n 'GET:alliances/{alliance_id}/contacts/labels': 300,\n 'GET:alliances/{alliance_id}/corporations': 3600,\n 'GET:characters/{character_id}': 86400,\n 'GET:characters/{character_id}/agents_research': 3600,\n 'GET:characters/{character_id}/assets': 3600,\n 'GET:characters/{character_id}/attributes': 120,\n 'GET:characters/{character_id}/blueprints': 3600,\n 'GET:characters/{character_id}/calendar': 5,\n 'GET:characters/{character_id}/calendar/{event_id}': 5,\n 'PUT:characters/{character_id}/calendar/{event_id}': 5,\n 'GET:characters/{character_id}/calendar/{event_id}/attendees': 600,\n 'GET:characters/{character_id}/clones': 120,\n 'GET:characters/{character_id}/contacts': 300,\n 'GET:characters/{character_id}/contacts/labels': 300,\n 'GET:characters/{character_id}/contracts': 300,\n 'GET:characters/{character_id}/contracts/{contract_id}/bids': 300,\n 'GET:characters/{character_id}/contracts/{contract_id}/items': 3600,\n 'GET:characters/{character_id}/corporationhistory': 86400,\n 'GET:characters/{character_id}/fatigue': 300,\n 'GET:characters/{character_id}/fittings': 300,\n 'GET:characters/{character_id}/fleet': 60,\n 'GET:characters/{character_id}/freelance-jobs': 60,\n 'GET:characters/{character_id}/freelance-jobs/{job_id}/participation': 60,\n 'GET:characters/{character_id}/implants': 120,\n 'GET:characters/{character_id}/industry/jobs': 300,\n 'GET:characters/{character_id}/killmails/recent': 300,\n 'GET:characters/{character_id}/location': 5,\n 'GET:characters/{character_id}/loyalty/points': 3600,\n 'GET:characters/{character_id}/mail': 30,\n 'GET:characters/{character_id}/mail/{mail_id}': 30,\n 'GET:characters/{character_id}/mail/labels': 30,\n 'GET:characters/{character_id}/mail/lists': 120,\n 'GET:characters/{character_id}/medals': 3600,\n 'GET:characters/{character_id}/mining': 600,\n 'GET:characters/{character_id}/notifications': 600,\n 'GET:characters/{character_id}/notifications/contacts': 600,\n 'GET:characters/{character_id}/online': 60,\n 'GET:characters/{character_id}/orders': 1200,\n 'GET:characters/{character_id}/orders/history': 3600,\n 'GET:characters/{character_id}/planets': 600,\n 'GET:characters/{character_id}/planets/{planet_id}': 600,\n 'GET:characters/{character_id}/roles': 3600,\n 'GET:characters/{character_id}/search': 3600,\n 'GET:characters/{character_id}/ship': 5,\n 'GET:characters/{character_id}/skillqueue': 60,\n 'GET:characters/{character_id}/skills': 60,\n 'GET:characters/{character_id}/standings': 3600,\n 'GET:characters/{character_id}/titles': 3600,\n 'GET:characters/{character_id}/wallet': 120,\n 'GET:characters/{character_id}/wallet/journal': 3600,\n 'GET:characters/{character_id}/wallet/transactions': 3600,\n 'POST:characters/affiliation': 3600,\n 'GET:contracts/public/{region_id}': 1800,\n 'GET:contracts/public/bids/{contract_id}': 300,\n 'GET:contracts/public/items/{contract_id}': 3600,\n 'GET:corporation/{corporation_id}/mining/extractions': 1800,\n 'GET:corporation/{corporation_id}/mining/observers': 3600,\n 'GET:corporation/{corporation_id}/mining/observers/{observer_id}': 3600,\n 'GET:corporations/{corporation_id}': 3600,\n 'GET:corporations/{corporation_id}/alliancehistory': 3600,\n 'GET:corporations/{corporation_id}/assets': 3600,\n 'GET:corporations/{corporation_id}/blueprints': 3600,\n 'GET:corporations/{corporation_id}/contacts': 300,\n 'GET:corporations/{corporation_id}/contacts/labels': 300,\n 'GET:corporations/{corporation_id}/containers/logs': 600,\n 'GET:corporations/{corporation_id}/contracts': 300,\n 'GET:corporations/{corporation_id}/contracts/{contract_id}/bids': 3600,\n 'GET:corporations/{corporation_id}/contracts/{contract_id}/items': 3600,\n 'GET:corporations/{corporation_id}/customs_offices': 3600,\n 'GET:corporations/{corporation_id}/divisions': 3600,\n 'GET:corporations/{corporation_id}/facilities': 3600,\n 'GET:corporations/{corporation_id}/icons': 3600,\n 'GET:corporations/{corporation_id}/industry/jobs': 300,\n 'GET:corporations/{corporation_id}/killmails/recent': 300,\n 'GET:corporations/{corporation_id}/medals': 3600,\n 'GET:corporations/{corporation_id}/medals/issued': 3600,\n 'GET:corporations/{corporation_id}/members': 3600,\n 'GET:corporations/{corporation_id}/members/limit': 3600,\n 'GET:corporations/{corporation_id}/members/titles': 3600,\n 'GET:corporations/{corporation_id}/membertracking': 3600,\n 'GET:corporations/{corporation_id}/orders': 1200,\n 'GET:corporations/{corporation_id}/orders/history': 3600,\n 'GET:corporations/{corporation_id}/projects/{project_id}': 60,\n 'GET:corporations/{corporation_id}/projects/{project_id}/contribution/{character_id}': 60,\n 'GET:corporations/{corporation_id}/roles': 3600,\n 'GET:corporations/{corporation_id}/roles/history': 3600,\n 'GET:corporations/{corporation_id}/shareholders': 3600,\n 'GET:corporations/{corporation_id}/standings': 3600,\n 'GET:corporations/{corporation_id}/starbases': 3600,\n 'GET:corporations/{corporation_id}/starbases/{starbase_id}': 3600,\n 'GET:corporations/{corporation_id}/structures': 3600,\n 'GET:corporations/{corporation_id}/titles': 3600,\n 'GET:corporations/{corporation_id}/wallets': 300,\n 'GET:corporations/{corporation_id}/wallets/{division}/journal': 3600,\n 'GET:corporations/{corporation_id}/wallets/{division}/transactions': 3600,\n 'GET:fleets/{fleet_id}': 5,\n 'GET:fleets/{fleet_id}/members': 5,\n 'GET:fleets/{fleet_id}/wings': 5,\n 'GET:freelance-jobs/{job_id}': 60,\n 'GET:fw/systems': 1800,\n 'GET:incursions': 300,\n 'GET:industry/facilities': 3600,\n 'GET:industry/systems': 3600,\n 'GET:insurance/prices': 3600,\n 'GET:killmails/{killmail_id}/{killmail_hash}': 2592000,\n 'GET:markets/{region_id}/orders': 300,\n 'GET:markets/{region_id}/types': 600,\n 'GET:markets/prices': 3600,\n 'GET:markets/structures/{structure_id}': 300,\n 'GET:meta/changelog': 600,\n 'GET:meta/compatibility-dates': 600,\n 'GET:sovereignty/campaigns': 5,\n 'GET:sovereignty/map': 3600,\n 'GET:sovereignty/structures': 120,\n 'GET:status': 30,\n 'GET:universe/schematics/{schematic_id}': 3600,\n 'GET:universe/structures': 3600,\n 'GET:universe/structures/{structure_id}': 3600,\n 'GET:universe/system_jumps': 3600,\n 'GET:universe/system_kills': 3600,\n 'GET:wars': 3600,\n 'GET:wars/{war_id}': 3600,\n 'GET:wars/{war_id}/killmails': 3600,\n};\n","import { ApiClient } from '../ApiClient';\r\nimport { logDebug } from '../logger/loggerUtil';\r\nimport { ICache } from '../cache/ICache';\r\nimport { buildCacheKey } from '../cache/cacheKey';\r\nimport { ParsedHeaders } from '../util/headersUtil';\r\nimport { camelToSnake } from '../util/stringUtil';\r\nimport { esiCacheTtls } from '../endpoints/esi-cache-ttls.generated';\r\nimport { parseCacheControlTtl } from './headers';\r\n\r\nexport interface EsiHandlerResponse {\r\n headers: Record<string, string>;\r\n body: unknown;\r\n status?: number;\r\n fromCache?: boolean;\r\n stale?: boolean;\r\n cacheHitType?: 'spec-ttl' | 'etag-304' | 'stale-on-error';\r\n responseTimeMs?: number;\r\n cursors?: import('../pagination/CursorPaginationHandler').CursorTokens;\r\n}\r\n\r\n/**\r\n * Look up the spec-defined cache TTL for a given method + template path.\r\n * Returns TTL in milliseconds, or undefined if not found.\r\n */\r\nexport function lookupSpecTtl(\r\n method: string,\r\n templatePath: string,\r\n): number | undefined {\r\n const normalized = templatePath\r\n .replace(/\\/$/, '')\r\n .replace(/\\{(\\w+)\\}/g, (_, name: string) => `{${camelToSnake(name)}}`);\r\n const key = `${method}:${normalized}`;\r\n const seconds = esiCacheTtls[key];\r\n return typeof seconds === 'number' ? seconds * 1000 : undefined;\r\n}\r\n\r\n/**\r\n * Attempt a spec-aware cache hit (TTL-based, no network request).\r\n */\r\nexport function trySpecAwareCacheHit(\r\n client: ApiClient,\r\n url: string,\r\n method: string,\r\n templatePath: string | undefined,\r\n resolveCache: (client: ApiClient) => ICache | null,\r\n requiresAuth: boolean = false,\r\n): EsiHandlerResponse | null {\r\n if (method !== 'GET' || !templatePath) return null;\r\n const specTtlMs = lookupSpecTtl(method, templatePath);\r\n if (!specTtlMs) return null;\r\n const cache = resolveCache(client);\r\n if (!cache) return null;\r\n const key = buildCacheKey(url, client, requiresAuth);\r\n const entry = cache.get(key);\r\n if (!entry) return null;\r\n const age = Date.now() - entry.timestamp;\r\n if (age < specTtlMs) {\r\n logDebug(\r\n `Spec-aware cache hit for ${url} (age=${Math.round(age / 1000)}s, ttl=${Math.round(specTtlMs / 1000)}s)`,\r\n );\r\n return {\r\n headers: entry.headers,\r\n body: entry.data,\r\n status: 200,\r\n fromCache: true,\r\n cacheHitType: 'spec-ttl',\r\n };\r\n }\r\n return null;\r\n}\r\n\r\n/**\r\n * Attempt to return a stale cached response (used on server errors).\r\n */\r\nexport function tryStaleCacheResponse(\r\n client: ApiClient,\r\n url: string,\r\n parsed: ParsedHeaders,\r\n resolveCache: (client: ApiClient) => ICache | null,\r\n requiresAuth: boolean = false,\r\n): EsiHandlerResponse | null {\r\n const cache = resolveCache(client);\r\n if (!cache) return null;\r\n const key = buildCacheKey(url, client, requiresAuth);\r\n const cachedEntry = cache.get(key);\r\n if (!cachedEntry) return null;\r\n return {\r\n headers: { ...cachedEntry.headers, ...parsed.raw },\r\n body: cachedEntry.data,\r\n status: 200,\r\n fromCache: true,\r\n stale: true,\r\n cacheHitType: 'stale-on-error',\r\n };\r\n}\r\n\r\n/**\r\n * Cache a successful response, or invalidate cache for non-GET methods.\r\n */\r\nexport function cacheResponse(\r\n client: ApiClient,\r\n url: string,\r\n method: string,\r\n endpoint: string,\r\n parsed: ParsedHeaders,\r\n data: unknown,\r\n useETag: boolean,\r\n resolveCache: (client: ApiClient) => ICache | null,\r\n templatePath?: string,\r\n requiresAuth: boolean = false,\r\n): void {\r\n const cache = resolveCache(client);\r\n if (useETag && method === 'GET' && cache && parsed.etag) {\r\n const key = buildCacheKey(url, client, requiresAuth);\r\n const headerTtl = parseCacheControlTtl(parsed.raw);\r\n const specTtlMs = templatePath\r\n ? lookupSpecTtl(method, templatePath)\r\n : undefined;\r\n const ttl = specTtlMs ?? headerTtl;\r\n cache.set(key, parsed.etag, data, parsed.raw, ttl);\r\n const ttlInfo = ttl ? ` (ttl=${ttl}ms)` : '';\r\n logDebug(`Cached response for ${url} with ETag ${parsed.etag}${ttlInfo}`);\r\n }\r\n\r\n if (method !== 'GET' && cache) {\r\n cache.deleteByPath(endpoint.split('?')[0]!);\r\n }\r\n}\r\n","import { ApiClient } from '../ApiClient';\r\nimport { EsiError } from '../util/error';\r\nimport { logInfo, logWarn } from '../logger/loggerUtil';\r\nimport { ICache } from '../cache/ICache';\r\nimport { buildCacheKey } from '../cache/cacheKey';\r\nimport { ParsedHeaders } from '../util/headersUtil';\r\nimport { CircuitOpenError } from '../circuitBreaker/CircuitBreaker';\r\nimport { buildError } from '../util/error';\r\nimport { logError } from '../logger/loggerUtil';\r\nimport { tryStaleCacheResponse, EsiHandlerResponse } from './cachePolicy';\r\n\r\nexport const STATUS_MESSAGES: Record<number, string> = {\r\n 201: 'Created',\r\n 204: 'No Content',\r\n 304: 'Not Modified',\r\n 400: 'Bad Request',\r\n 401: 'Unauthorized',\r\n 403: 'Forbidden',\r\n 404: 'Resource not found',\r\n 420: 'Error Limited',\r\n 422: 'Unprocessable Entity',\r\n 429: 'Too many requests',\r\n 500: 'Internal server error',\r\n 503: 'Service Unavailable',\r\n 504: 'Gateway Timeout',\r\n 520: 'Internal server error, did the request terminate too soon?',\r\n};\r\n\r\n/**\r\n * Handle early-return HTTP statuses (201, 204, 304).\r\n */\r\nexport function handleEarlyStatus(\r\n client: ApiClient,\r\n status: number,\r\n url: string,\r\n parsed: ParsedHeaders,\r\n useETag: boolean,\r\n resolveCache: (client: ApiClient) => ICache | null,\r\n requiresAuth: boolean = false,\r\n): EsiHandlerResponse | null {\r\n if (status === 201) {\r\n return { headers: parsed.raw, body: undefined, status: 201 };\r\n }\r\n\r\n if (status === 204) {\r\n logInfo(`No Content for endpoint: ${url}`);\r\n return { headers: parsed.raw, body: undefined, status: 204 };\r\n }\r\n\r\n if (status === 304) {\r\n const cache = resolveCache(client);\r\n if (useETag && cache) {\r\n const key = buildCacheKey(url, client, requiresAuth);\r\n const cachedEntry = cache.get(key);\r\n if (cachedEntry) {\r\n logInfo(`Cache hit (304) for endpoint: ${url}`);\r\n return {\r\n headers: { ...cachedEntry.headers, ...parsed.raw },\r\n body: cachedEntry.data,\r\n status: 304,\r\n fromCache: true,\r\n cacheHitType: 'etag-304',\r\n };\r\n }\r\n }\r\n throw new EsiError(\r\n 304,\r\n 'Not Modified — no cached data available',\r\n url,\r\n parsed.requestId ?? undefined,\r\n );\r\n }\r\n\r\n return null;\r\n}\r\n\r\n/**\r\n * Handle error HTTP responses (4xx, 5xx). May serve stale cache on 5xx.\r\n */\r\nexport function handleErrorResponse(\r\n client: ApiClient,\r\n response: Response,\r\n url: string,\r\n parsed: ParsedHeaders,\r\n useETag: boolean,\r\n resolveCache: (client: ApiClient) => ICache | null,\r\n requiresAuth: boolean = false,\r\n): EsiHandlerResponse | never {\r\n const errorMessage = STATUS_MESSAGES[response.status] || response.statusText;\r\n\r\n if (response.status >= 500 && useETag) {\r\n const staleResult = tryStaleCacheResponse(\r\n client,\r\n url,\r\n parsed,\r\n resolveCache,\r\n requiresAuth,\r\n );\r\n if (staleResult) {\r\n logWarn(`${errorMessage} for ${url} — serving stale cache`);\r\n return { ...staleResult, status: response.status };\r\n }\r\n }\r\n\r\n if (response.status === 420 || response.status === 429) {\r\n logWarn(`Rate limited (${response.status}) on ${url}`);\r\n }\r\n\r\n throw new EsiError(\r\n response.status,\r\n errorMessage,\r\n url,\r\n parsed.requestId ?? undefined,\r\n );\r\n}\r\n\r\n/**\r\n * Wrap an unknown error into an EsiError or rethrow known errors.\r\n */\r\nexport function wrapError(error: unknown): never {\r\n if (error instanceof EsiError || error instanceof CircuitOpenError) {\r\n throw error;\r\n }\r\n if (error instanceof Error) {\r\n logError(`Unexpected error: ${error.message}`);\r\n throw buildError(error.message, 'ESIJS_ERROR');\r\n }\r\n logError(`Unexpected error: ${String(error)}`);\r\n throw buildError(String(error), 'ESIJS_ERROR');\r\n}\r\n","export interface RetryConfig {\n maxRetries?: number;\n baseDelayMs?: number;\n maxDelayMs?: number;\n retryMutations?: boolean;\n}\n\nexport function retryDelay(\n attempt: number,\n baseMs: number,\n maxMs: number,\n): number {\n const exponential = baseMs * Math.pow(2, attempt);\n // eslint-disable-next-line sonarjs/pseudo-random\n const jitter = exponential * (0.75 + Math.random() * 0.5);\n return Math.min(jitter, maxMs);\n}\n","export function sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n","import { EsiError } from './util/error';\r\nimport { CircuitOpenError } from './circuitBreaker/CircuitBreaker';\r\nimport { RetryConfig, retryDelay } from './util/retry';\r\nimport { sleep } from './util/sleep';\r\nimport { logInfo, logWarn, logError } from './logger/loggerUtil';\r\nimport { buildError } from './util/error';\r\nimport { IRetryStrategy } from './IRetryStrategy';\r\n\r\nexport interface RetryContext {\r\n endpoint: string;\r\n method: string;\r\n requiresAuth: boolean;\r\n refreshToken?: () => Promise<void>;\r\n /** @deprecated Unused — after refresh the strategy re-enters the main operation loop. */\r\n retryOperation?: () => Promise<unknown>;\r\n}\r\n\r\nexport class RetryStrategy implements IRetryStrategy {\r\n private readonly maxRetries: number;\r\n private readonly baseDelayMs: number;\r\n private readonly maxDelayMs: number;\r\n private readonly retryMutations: boolean;\r\n\r\n constructor(config?: RetryConfig) {\r\n this.maxRetries = config?.maxRetries ?? 0;\r\n this.baseDelayMs = config?.baseDelayMs ?? 1000;\r\n this.maxDelayMs = config?.maxDelayMs ?? 30000;\r\n this.retryMutations = config?.retryMutations ?? false;\r\n }\r\n\r\n async execute<T>(\r\n operation: () => Promise<T>,\r\n context: RetryContext,\r\n ): Promise<T> {\r\n const canRetryMethod = context.method === 'GET' || this.retryMutations;\r\n\r\n let lastError: unknown;\r\n let refreshAttempted = false;\r\n\r\n for (let attempt = 0; attempt <= this.maxRetries; attempt++) {\r\n try {\r\n return await operation();\r\n } catch (error: unknown) {\r\n if (error instanceof CircuitOpenError) {\r\n throw error;\r\n }\r\n\r\n if (\r\n !refreshAttempted &&\r\n error instanceof EsiError &&\r\n error.statusCode === 401 &&\r\n context.requiresAuth &&\r\n context.refreshToken\r\n ) {\r\n refreshAttempted = true;\r\n logInfo('Received 401, attempting token refresh...');\r\n try {\r\n await context.refreshToken();\r\n } catch (refreshError: unknown) {\r\n if (\r\n refreshError instanceof EsiError ||\r\n refreshError instanceof CircuitOpenError\r\n ) {\r\n throw refreshError;\r\n }\r\n const msg =\r\n refreshError instanceof Error\r\n ? refreshError.message\r\n : String(refreshError);\r\n logError(`Token refresh failed: ${msg}`);\r\n throw buildError(\r\n `Token refresh failed: ${msg}`,\r\n 'TOKEN_REFRESH_FAILED',\r\n );\r\n }\r\n logInfo('Token refreshed, retrying request');\r\n // Re-enter the loop so post-refresh failures use normal retry/error handling\r\n // (and are never mislabeled as TOKEN_REFRESH_FAILED).\r\n attempt--;\r\n continue;\r\n }\r\n\r\n if (\r\n error instanceof EsiError &&\r\n error.retryable &&\r\n canRetryMethod &&\r\n attempt < this.maxRetries\r\n ) {\r\n const delay = retryDelay(attempt, this.baseDelayMs, this.maxDelayMs);\r\n logWarn(\r\n `Request to ${context.endpoint} failed (${error.statusCode}), retrying in ${Math.round(delay)}ms (attempt ${attempt + 1}/${this.maxRetries})`,\r\n );\r\n await sleep(delay);\r\n lastError = error;\r\n continue;\r\n }\r\n\r\n throw error;\r\n }\r\n }\r\n\r\n throw lastError;\r\n }\r\n}\r\n","import { ApiClient } from '../ApiClient';\r\nimport { buildError } from '../util/error';\r\nimport { ICache } from '../cache/ICache';\r\nimport { IRateLimiter } from '../rateLimiter/IRateLimiter';\r\nimport { ICircuitBreaker } from '../circuitBreaker/ICircuitBreaker';\r\nimport { IRetryStrategy } from '../IRetryStrategy';\r\nimport { RetryStrategy } from '../RetryStrategy';\r\n\r\nexport function resolveCache(client: ApiClient): ICache | null {\r\n return client.getCache();\r\n}\r\n\r\nexport function resolveRateLimiter(client: ApiClient): IRateLimiter {\r\n const limiter = client.getRateLimiter();\r\n if (!limiter) {\r\n throw buildError(\r\n 'No rate limiter configured on ApiClient. ' +\r\n 'Set one via apiClient.setRateLimiter(new RateLimiter()).',\r\n 'CONFIGURATION_ERROR',\r\n );\r\n }\r\n return limiter;\r\n}\r\n\r\nexport function resolveCircuitBreaker(\r\n client: ApiClient,\r\n): ICircuitBreaker | null {\r\n return client.getCircuitBreaker();\r\n}\r\n\r\nexport function resolveRetryStrategy(client: ApiClient): IRetryStrategy {\r\n return (\r\n client.getRetryStrategy() ??\r\n new RetryStrategy(client.getRetryConfig() ?? undefined)\r\n );\r\n}\r\n","/**\r\n * Pagination Handler for ESI API calls\r\n * Handles pagination with proper error handling and empty page detection\r\n */\r\n\r\nimport { ApiClient } from '../ApiClient';\r\nimport { logInfo, logWarn, logError } from '../logger/loggerUtil';\r\nimport { resolveRetryStrategy } from '../requestPipeline/dependencies';\r\n\r\nexport interface PaginationOptions {\r\n maxPages?: number;\r\n stopOnEmptyPage?: boolean;\r\n}\r\n\r\nexport type PageFetcher = (paginatedEndpoint: string) => Promise<unknown[]>;\r\n\r\nexport class PaginationHandler {\r\n private static readonly DEFAULT_OPTIONS: Required<PaginationOptions> = {\r\n maxPages: 1000,\r\n stopOnEmptyPage: true,\r\n };\r\n\r\n /**\r\n * Fetch remaining pages (2..totalPages) and combine with first page data.\r\n * The caller has already fetched page 1 and knows the total page count.\r\n */\r\n static async fetchRemainingPages(\r\n client: ApiClient,\r\n endpoint: string,\r\n method: string,\r\n requiresAuth: boolean,\r\n firstPageData: unknown[],\r\n totalPages: number,\r\n body: unknown,\r\n options: PaginationOptions,\r\n pageFetch: PageFetcher,\r\n templatePath?: string,\r\n ): Promise<unknown[]> {\r\n const opts = { ...this.DEFAULT_OPTIONS, ...options };\r\n const rateLimiter = client.getRateLimiter();\r\n const allData: unknown[] = [...firstPageData];\r\n\r\n const effectiveMaxPage = Math.min(totalPages, opts.maxPages);\r\n\r\n if (effectiveMaxPage <= 1) {\r\n return allData;\r\n }\r\n\r\n logInfo(`Fetching pages 2-${effectiveMaxPage} for ${endpoint}...`);\r\n\r\n for (let page = 2; page <= effectiveMaxPage; page++) {\r\n try {\r\n if (rateLimiter) await rateLimiter.checkRateLimit(templatePath, method);\r\n\r\n const pageData = await this.fetchPageWithRetry(\r\n client,\r\n endpoint,\r\n method,\r\n requiresAuth,\r\n page,\r\n pageFetch,\r\n );\r\n\r\n if (opts.stopOnEmptyPage && (!pageData || pageData.length === 0)) {\r\n logWarn(`Page ${page} is empty. Stopping pagination.`);\r\n break;\r\n }\r\n\r\n allData.push(...pageData);\r\n logInfo(\r\n `Fetched page ${page}/${effectiveMaxPage} (${pageData.length} items)`,\r\n );\r\n } catch (error) {\r\n logError(\r\n `Failed to fetch page ${page}: ${error instanceof Error ? error.message : String(error)}`,\r\n );\r\n throw error instanceof Error\r\n ? error\r\n : new Error(`Failed to fetch page ${page}: ${String(error)}`);\r\n }\r\n }\r\n\r\n logInfo(\r\n `Pagination complete. Fetched ${allData.length} total items from up to ${effectiveMaxPage} pages.`,\r\n );\r\n return allData;\r\n }\r\n\r\n /**\r\n * Fetch a single page with retry logic.\r\n *\r\n * Delegates to the configured `IRetryStrategy` (exponential backoff\r\n * with jitter) instead of implementing a custom retry loop.\r\n */\r\n private static async fetchPageWithRetry(\r\n client: ApiClient,\r\n endpoint: string,\r\n method: string,\r\n requiresAuth: boolean,\r\n page: number,\r\n pageFetch: PageFetcher,\r\n ): Promise<unknown[]> {\r\n const retryStrategy = resolveRetryStrategy(client);\r\n const paginatedEndpoint = this.buildPaginatedEndpoint(endpoint, page);\r\n\r\n return retryStrategy.execute(\r\n () => {\r\n logInfo(`Fetching page ${page} via pipeline: ${paginatedEndpoint}`);\r\n return pageFetch(paginatedEndpoint);\r\n },\r\n {\r\n endpoint: paginatedEndpoint,\r\n method,\r\n requiresAuth,\r\n refreshToken: client.hasTokenProvider()\r\n ? () => client.refreshToken().then(() => {})\r\n : undefined,\r\n },\r\n );\r\n }\r\n\r\n /**\r\n * Build a paginated endpoint path.\r\n * Preserves any existing query params on the endpoint and appends page=N.\r\n */\r\n private static buildPaginatedEndpoint(\r\n endpoint: string,\r\n page: number,\r\n ): string {\r\n const separator = endpoint.includes('?') ? '&' : '?';\r\n return `${endpoint}${separator}page=${page}`;\r\n }\r\n}\r\n","import { ApiClient } from '../ApiClient';\r\nimport { buildError, EsiError } from '../util/error';\r\nimport { logInfo, logWarn } from '../logger/loggerUtil';\r\nimport { ParsedHeaders } from '../util/headersUtil';\r\nimport {\r\n PaginationHandler,\r\n PageFetcher,\r\n} from '../pagination/PaginationHandler';\r\nimport { CursorTokens } from '../pagination/CursorPaginationHandler';\r\nimport { CircuitOpenError } from '../circuitBreaker/CircuitBreaker';\r\nimport { ICache } from '../cache/ICache';\r\nimport { cacheResponse, EsiHandlerResponse } from './cachePolicy';\r\n\r\n/**\r\n * Handle cursor-based pagination. Returns null if the response\r\n * does not contain cursor pagination headers.\r\n */\r\nexport function handleCursorPagination(\r\n parsed: ParsedHeaders,\r\n data: unknown,\r\n): EsiHandlerResponse | null {\r\n if (!parsed.hasCursorPagination) return null;\r\n\r\n const cursors: CursorTokens = {\r\n before: parsed.cursorBefore,\r\n after: parsed.cursorAfter,\r\n };\r\n\r\n return { headers: parsed.raw, body: data, status: 200, cursors };\r\n}\r\n\r\n/**\r\n * Handle offset-based pagination. Fetches remaining pages if xPages > 1.\r\n */\r\nexport async function handleOffsetPagination(\r\n client: ApiClient,\r\n endpoint: string,\r\n method: string,\r\n requiresAuth: boolean,\r\n parsed: ParsedHeaders,\r\n data: unknown,\r\n body: unknown,\r\n url: string,\r\n useETag: boolean,\r\n pageFetch: PageFetcher,\r\n resolveCache: (client: ApiClient) => ICache | null,\r\n templatePath?: string,\r\n): Promise<EsiHandlerResponse> {\r\n const totalPages = parsed.xPages;\r\n\r\n if (totalPages <= 1) {\r\n return { headers: parsed.raw, body: data, status: 200 };\r\n }\r\n\r\n logInfo(\r\n `Found ${totalPages} pages, fetching additional pages with rate limiting...`,\r\n );\r\n\r\n try {\r\n const firstPageData = Array.isArray(data) ? data : [data];\r\n const allData = await PaginationHandler.fetchRemainingPages(\r\n client,\r\n endpoint,\r\n method,\r\n requiresAuth,\r\n firstPageData,\r\n totalPages,\r\n body,\r\n {\r\n maxPages: Math.min(totalPages, 1000),\r\n stopOnEmptyPage: true,\r\n },\r\n pageFetch,\r\n templatePath,\r\n );\r\n\r\n cacheResponse(\r\n client,\r\n url,\r\n method,\r\n endpoint,\r\n parsed,\r\n allData,\r\n useETag,\r\n resolveCache,\r\n templatePath,\r\n );\r\n return { headers: parsed.raw, body: allData, status: 200 };\r\n } catch (paginationError: unknown) {\r\n const msg =\r\n paginationError instanceof Error\r\n ? paginationError.message\r\n : String(paginationError);\r\n logWarn(`Pagination failed for ${url}: ${msg}`);\r\n if (\r\n paginationError instanceof EsiError ||\r\n paginationError instanceof CircuitOpenError\r\n ) {\r\n throw paginationError;\r\n }\r\n throw buildError(\r\n `Pagination incomplete for ${url}: ${msg}`,\r\n 'PAGINATION_INCOMPLETE',\r\n url,\r\n );\r\n }\r\n}\r\n","import { ApiClient } from '../ApiClient';\r\nimport { RequestContext, ResponseContext } from '../middleware/Middleware';\r\nimport { EsiHandlerResponse } from './cachePolicy';\r\n\r\n/**\r\n * Apply request interceptors from the middleware pipeline.\r\n */\r\nexport async function applyRequestMiddleware(\r\n client: ApiClient,\r\n url: string,\r\n endpoint: string,\r\n method: string,\r\n headers: Record<string, string>,\r\n body: unknown,\r\n): Promise<{ url: string; headers: Record<string, string>; body: unknown }> {\r\n const middleware = client.getMiddleware();\r\n if (!middleware.hasInterceptors()) {\r\n return { url, headers, body };\r\n }\r\n const reqCtx: RequestContext = {\r\n url,\r\n endpoint,\r\n method,\r\n headers: { ...headers },\r\n body,\r\n };\r\n const modified = await middleware.applyRequestInterceptors(reqCtx);\r\n return {\r\n url: modified.url,\r\n headers: modified.headers,\r\n body: modified.body,\r\n };\r\n}\r\n\r\n/**\r\n * Apply response interceptors from the middleware pipeline.\r\n */\r\nexport async function applyResponseInterceptors(\r\n client: ApiClient,\r\n result: EsiHandlerResponse,\r\n url: string,\r\n endpoint: string,\r\n method: string,\r\n startTime: number,\r\n): Promise<EsiHandlerResponse> {\r\n const middleware = client.getMiddleware();\r\n if (!middleware.hasInterceptors()) return result;\r\n\r\n const responseCtx: ResponseContext = {\r\n url,\r\n endpoint,\r\n method,\r\n status: result.status ?? 200,\r\n headers: result.headers,\r\n body: result.body,\r\n durationMs: Date.now() - startTime,\r\n fromCache: result.fromCache ?? false,\r\n };\r\n\r\n const modified = await middleware.applyResponseInterceptors(responseCtx);\r\n return {\r\n ...result,\r\n headers: modified.headers,\r\n body: modified.body,\r\n };\r\n}\r\n","export interface EsiWarning {\n code: number;\n message: string;\n}\n\nexport interface ParsedHeaders {\n raw: Record<string, string>;\n xPages: number;\n etag: string | null;\n cacheControl: string | null;\n expires: string | null;\n lastModified: string | null;\n cursorBefore: string | null;\n cursorAfter: string | null;\n hasCursorPagination: boolean;\n warning: EsiWarning | null;\n requestId: string | null;\n date: string | null;\n contentLanguage: string | null;\n}\n\nexport function parseWarning(\n value: string | null | undefined,\n): EsiWarning | null {\n if (!value) return null;\n const match =\n /^(\\d{3}) - \"([^\"]+)\"$/.exec(value) ??\n /^(\\d{3}) - ([^ ].+[^ ])$/.exec(value);\n if (!match) return null;\n const [, code, message] = match;\n return { code: parseInt(code!, 10), message: message! };\n}\n\nexport function parseHeaders(fetchHeaders: Headers): ParsedHeaders {\n const raw: Record<string, string> = {};\n fetchHeaders.forEach((value, key) => {\n raw[key.toLowerCase()] = value;\n });\n\n const cursorBefore = raw['x-cursor-before'] ?? null;\n const cursorAfter = raw['x-cursor-after'] ?? null;\n\n return {\n raw,\n xPages: parseInt(raw['x-pages'] ?? '1', 10),\n etag: raw['etag'] ?? null,\n cacheControl: raw['cache-control'] ?? null,\n expires: raw['expires'] ?? null,\n lastModified: raw['last-modified'] ?? null,\n cursorBefore,\n cursorAfter,\n hasCursorPagination: 'x-cursor-before' in raw || 'x-cursor-after' in raw,\n warning: parseWarning(raw['warning']),\n requestId: raw['x-esi-request-id'] ?? null,\n date: raw['date'] ?? null,\n contentLanguage: raw['content-language'] ?? null,\n };\n}\n","import { ApiClient } from '../ApiClient';\r\nimport { EsiError, TimeoutError } from '../util/error';\r\nimport { logInfo, logWarn, logError } from '../logger/loggerUtil';\r\nimport { parseHeaders, ParsedHeaders } from '../util/headersUtil';\r\nimport { ICache } from '../cache/ICache';\r\nimport { IRateLimiter } from '../rateLimiter/IRateLimiter';\r\nimport { ICircuitBreaker } from '../circuitBreaker/ICircuitBreaker';\r\nimport { buildError } from '../util/error';\r\nimport { buildRequestHeaders } from './headers';\r\nimport { applyRequestMiddleware } from './middlewareBridge';\r\nimport { STATUS_MESSAGES } from './statusHandling';\r\n\r\nexport interface RawFetchResult {\r\n response: Response;\r\n parsed: ParsedHeaders;\r\n url: string;\r\n}\r\n\r\nexport interface SingleFetchResult {\r\n data: unknown;\r\n parsed: ParsedHeaders;\r\n url: string;\r\n}\r\n\r\n/**\r\n * Execute a single HTTP fetch with rate limiting, circuit breaker, and timeout.\r\n */\r\nexport async function executeSingleFetch(\r\n client: ApiClient,\r\n endpoint: string,\r\n method: string,\r\n body: unknown,\r\n requiresAuth: boolean,\r\n useETag: boolean,\r\n resolveCache: (client: ApiClient) => ICache | null,\r\n resolveRateLimiter: (client: ApiClient) => IRateLimiter,\r\n resolveCircuitBreaker: (client: ApiClient) => ICircuitBreaker | null,\r\n requestTimeout?: number,\r\n templatePath?: string,\r\n): Promise<RawFetchResult> {\r\n const rawUrl = `${client.getLink()}/${endpoint}`;\r\n const builtHeaders = buildRequestHeaders(\r\n client,\r\n rawUrl,\r\n method,\r\n requiresAuth,\r\n useETag,\r\n body,\r\n resolveCache,\r\n ) as Record<string, string>;\r\n\r\n const req = await applyRequestMiddleware(\r\n client,\r\n rawUrl,\r\n endpoint,\r\n method,\r\n builtHeaders,\r\n body,\r\n );\r\n\r\n const options: RequestInit = {\r\n method,\r\n headers: req.headers,\r\n body: req.body ? JSON.stringify(req.body) : undefined,\r\n };\r\n\r\n const url = req.url;\r\n logInfo(`Hitting endpoint: ${url}`);\r\n\r\n const cb = resolveCircuitBreaker(client);\r\n const cbKey =\r\n cb && templatePath && cb.getKeyStrategy?.() === 'template'\r\n ? templatePath\r\n : endpoint;\r\n\r\n if (cb) cb.checkCircuit(cbKey);\r\n\r\n let cbRecorded = false;\r\n\r\n try {\r\n const rateLimiter = resolveRateLimiter(client);\r\n await rateLimiter.checkRateLimit(templatePath, method, req.headers);\r\n\r\n const timeoutMs = requestTimeout ?? client.getTimeout();\r\n const controller = new AbortController();\r\n const timer = globalThis.setTimeout(() => controller.abort(), timeoutMs);\r\n options.signal = controller.signal;\r\n\r\n let response: Response;\r\n try {\r\n response = await fetch(url, options);\r\n } catch (err) {\r\n clearTimeout(timer);\r\n if (cb) {\r\n cb.recordFailure(cbKey, 0);\r\n cbRecorded = true;\r\n }\r\n if (err instanceof Error && err.name === 'AbortError') {\r\n throw new TimeoutError(timeoutMs, url);\r\n }\r\n throw err;\r\n }\r\n clearTimeout(timer);\r\n\r\n const parsed = parseHeaders(response.headers);\r\n\r\n rateLimiter.updateFromResponse(\r\n parsed.raw,\r\n response.status,\r\n templatePath,\r\n method,\r\n req.headers,\r\n );\r\n\r\n if (cb) {\r\n if (\r\n response.status >= 500 ||\r\n response.status === 420 ||\r\n response.status === 429\r\n ) {\r\n cb.recordFailure(cbKey, response.status);\r\n } else {\r\n cb.recordSuccess(cbKey);\r\n }\r\n cbRecorded = true;\r\n }\r\n\r\n if (parsed.warning) {\r\n logWarn(\r\n `ESI Warning ${parsed.warning.code} for ${url}: ${parsed.warning.message}`,\r\n );\r\n }\r\n\r\n return { response, parsed, url };\r\n } finally {\r\n if (cb && !cbRecorded) {\r\n cb.recordFailure(cbKey, 0);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Parse a JSON response body, throwing on parse failure.\r\n */\r\nexport async function parseJsonBody(\r\n response: Response,\r\n _url: string,\r\n): Promise<unknown> {\r\n try {\r\n return (await response.json()) as unknown;\r\n } catch (jsonError) {\r\n const msg =\r\n jsonError instanceof Error ? jsonError.message : String(jsonError);\r\n logError(`Failed to parse JSON response: ${msg}`);\r\n throw buildError(`Invalid JSON response: ${msg}`, 'JSON_PARSE_ERROR');\r\n }\r\n}\r\n\r\n/**\r\n * Fetch a single page: execute the fetch, check for errors, parse JSON.\r\n */\r\nexport async function fetchOnePage(\r\n client: ApiClient,\r\n endpoint: string,\r\n method: string,\r\n body: unknown,\r\n requiresAuth: boolean,\r\n useETag: boolean,\r\n resolveCache: (client: ApiClient) => ICache | null,\r\n resolveRateLimiter: (client: ApiClient) => IRateLimiter,\r\n resolveCircuitBreaker: (client: ApiClient) => ICircuitBreaker | null,\r\n requestTimeout?: number,\r\n templatePath?: string,\r\n): Promise<SingleFetchResult> {\r\n const { response, parsed, url } = await executeSingleFetch(\r\n client,\r\n endpoint,\r\n method,\r\n body,\r\n requiresAuth,\r\n useETag,\r\n resolveCache,\r\n resolveRateLimiter,\r\n resolveCircuitBreaker,\r\n requestTimeout,\r\n templatePath,\r\n );\r\n\r\n if (!response.ok) {\r\n throw new EsiError(\r\n response.status,\r\n STATUS_MESSAGES[response.status] || response.statusText,\r\n url,\r\n parsed.requestId ?? undefined,\r\n );\r\n }\r\n\r\n const data = await parseJsonBody(response, url);\r\n return { data, parsed, url };\r\n}\r\n","import { ApiClient } from './ApiClient';\r\n\r\nimport {\r\n trySpecAwareCacheHit,\r\n cacheResponse,\r\n handleEarlyStatus,\r\n handleErrorResponse,\r\n wrapError,\r\n handleCursorPagination,\r\n handleOffsetPagination,\r\n applyResponseInterceptors,\r\n executeSingleFetch,\r\n fetchOnePage,\r\n parseJsonBody,\r\n resolveCache,\r\n resolveRateLimiter,\r\n resolveCircuitBreaker,\r\n resolveRetryStrategy,\r\n} from './requestPipeline';\r\nexport type { EsiHandlerResponse } from './requestPipeline';\r\nimport type { EsiHandlerResponse } from './requestPipeline';\r\n\r\n// --- Main request orchestration ---\r\n\r\nconst executeRequest = async (\r\n client: ApiClient,\r\n endpoint: string,\r\n method: string,\r\n body?: unknown,\r\n requiresAuth: boolean = false,\r\n useETag: boolean = true,\r\n requestTimeout?: number,\r\n templatePath?: string,\r\n): Promise<EsiHandlerResponse> => {\r\n const startTime = Date.now();\r\n const finish = (r: EsiHandlerResponse) => {\r\n r.responseTimeMs = Date.now() - startTime;\r\n const rawUrl = `${client.getLink()}/${endpoint}`;\r\n return applyResponseInterceptors(\r\n client,\r\n r,\r\n rawUrl,\r\n endpoint,\r\n method,\r\n startTime,\r\n );\r\n };\r\n\r\n try {\r\n const { response, parsed, url } = await executeSingleFetch(\r\n client,\r\n endpoint,\r\n method,\r\n body,\r\n requiresAuth,\r\n useETag,\r\n resolveCache,\r\n resolveRateLimiter,\r\n resolveCircuitBreaker,\r\n requestTimeout,\r\n templatePath,\r\n );\r\n\r\n if (response.status === 201) {\r\n let data: unknown;\r\n try {\r\n data = (await response.json()) as unknown;\r\n } catch {\r\n data = undefined;\r\n }\r\n return finish({ headers: parsed.raw, body: data, status: 201 });\r\n }\r\n\r\n const earlyResult = handleEarlyStatus(\r\n client,\r\n response.status,\r\n url,\r\n parsed,\r\n useETag,\r\n resolveCache,\r\n requiresAuth,\r\n );\r\n if (earlyResult) return finish(earlyResult);\r\n\r\n if (!response.ok) {\r\n const staleOrThrow = handleErrorResponse(\r\n client,\r\n response,\r\n url,\r\n parsed,\r\n useETag,\r\n resolveCache,\r\n requiresAuth,\r\n );\r\n return finish(staleOrThrow);\r\n }\r\n\r\n const data = await parseJsonBody(response, url);\r\n cacheResponse(\r\n client,\r\n url,\r\n method,\r\n endpoint,\r\n parsed,\r\n data,\r\n useETag,\r\n resolveCache,\r\n templatePath,\r\n requiresAuth,\r\n );\r\n\r\n const cursorResult = handleCursorPagination(parsed, data);\r\n if (cursorResult) return finish(cursorResult);\r\n\r\n const pageFetch = async (paginatedEndpoint: string): Promise<unknown[]> => {\r\n const result = await fetchOnePage(\r\n client,\r\n paginatedEndpoint,\r\n method,\r\n body,\r\n requiresAuth,\r\n false,\r\n resolveCache,\r\n resolveRateLimiter,\r\n resolveCircuitBreaker,\r\n requestTimeout,\r\n templatePath,\r\n );\r\n return Array.isArray(result.data)\r\n ? (result.data as unknown[])\r\n : [result.data];\r\n };\r\n\r\n const paginatedResult = await handleOffsetPagination(\r\n client,\r\n endpoint,\r\n method,\r\n requiresAuth,\r\n parsed,\r\n data,\r\n body,\r\n url,\r\n useETag,\r\n pageFetch,\r\n resolveCache,\r\n templatePath,\r\n );\r\n return finish(paginatedResult);\r\n } catch (error: unknown) {\r\n wrapError(error);\r\n }\r\n};\r\n\r\nexport const handleSinglePageRequest = async (\r\n client: ApiClient,\r\n endpoint: string,\r\n method: string,\r\n body?: unknown,\r\n requiresAuth: boolean = false,\r\n templatePath?: string,\r\n requestTimeout?: number,\r\n): Promise<EsiHandlerResponse> => {\r\n const doExecute = () =>\r\n fetchOnePage(\r\n client,\r\n endpoint,\r\n method,\r\n body,\r\n requiresAuth,\r\n true,\r\n resolveCache,\r\n resolveRateLimiter,\r\n resolveCircuitBreaker,\r\n requestTimeout,\r\n templatePath,\r\n ).then(({ data, parsed }) => ({\r\n headers: parsed.raw,\r\n body: data,\r\n }));\r\n\r\n const retryStrategy = resolveRetryStrategy(client);\r\n\r\n return retryStrategy.execute<EsiHandlerResponse>(doExecute, {\r\n endpoint,\r\n method,\r\n requiresAuth,\r\n refreshToken: client.hasTokenProvider()\r\n ? () => client.refreshToken().then(() => {})\r\n : undefined,\r\n });\r\n};\r\n\r\nexport const handleRequest = async (\r\n client: ApiClient,\r\n endpoint: string,\r\n method: string,\r\n body?: unknown,\r\n requiresAuth: boolean = false,\r\n useETag: boolean = true,\r\n templatePath?: string,\r\n requestTimeout?: number,\r\n): Promise<EsiHandlerResponse> => {\r\n const rawUrl = `${client.getLink()}/${endpoint}`;\r\n const startTime = Date.now();\r\n const specHit = trySpecAwareCacheHit(\r\n client,\r\n rawUrl,\r\n method,\r\n templatePath,\r\n resolveCache,\r\n requiresAuth,\r\n );\r\n if (specHit) {\r\n return applyResponseInterceptors(\r\n client,\r\n specHit,\r\n rawUrl,\r\n endpoint,\r\n method,\r\n startTime,\r\n );\r\n }\r\n\r\n const doExecute = () =>\r\n executeRequest(\r\n client,\r\n endpoint,\r\n method,\r\n body,\r\n requiresAuth,\r\n useETag,\r\n requestTimeout,\r\n templatePath,\r\n );\r\n\r\n const dedup = client.getDeduplicator();\r\n const canDedup = dedup && method === 'GET' && !body;\r\n\r\n const operation = () =>\r\n canDedup\r\n ? dedup.dedupe<EsiHandlerResponse>(endpoint, doExecute)\r\n : doExecute();\r\n\r\n const retryStrategy = resolveRetryStrategy(client);\r\n\r\n return retryStrategy.execute<EsiHandlerResponse>(operation, {\r\n endpoint,\r\n method,\r\n requiresAuth,\r\n refreshToken: client.hasTokenProvider()\r\n ? () => client.refreshToken().then(() => {})\r\n : undefined,\r\n });\r\n};\r\n","import { buildError } from './error';\n\nconst UNSAFE_PATH_CHARS = /[/\\\\?#@!$&'()*+,;=<>{}|^`]/;\n\nexport function validatePathParam(paramName: string, value: unknown): string {\n if (value === null || value === undefined || value === '') {\n throw buildError(\n `Path parameter '${paramName}' must not be empty`,\n 'VALIDATION_ERROR',\n );\n }\n\n const str = `${value as string | number}`;\n\n if (UNSAFE_PATH_CHARS.test(str)) {\n throw buildError(\n `Path parameter '${paramName}' contains invalid characters`,\n 'VALIDATION_ERROR',\n );\n }\n\n if (typeof value === 'number' && !Number.isFinite(value)) {\n throw buildError(\n `Path parameter '${paramName}' must be a finite number`,\n 'VALIDATION_ERROR',\n );\n }\n\n return str;\n}\n\nconst ALLOWED_ESI_HOSTS = ['esi.evetech.net'];\n\nexport function validateBaseUrl(\n url: string,\n allowCustomHost?: boolean,\n): string {\n let parsed: URL;\n try {\n parsed = new URL(url);\n } catch {\n throw buildError(`Invalid base URL: ${url}`, 'VALIDATION_ERROR');\n }\n\n if (parsed.protocol !== 'https:') {\n throw buildError('Base URL must use HTTPS protocol', 'VALIDATION_ERROR');\n }\n\n if (!allowCustomHost && !ALLOWED_ESI_HOSTS.includes(parsed.hostname)) {\n throw buildError(\n `Base URL host '${parsed.hostname}' is not in the allowlist. ` +\n `Allowed hosts: ${ALLOWED_ESI_HOSTS.join(', ')}. ` +\n `Set unsafeAllowCustomHost to bypass this check.`,\n 'VALIDATION_ERROR',\n );\n }\n\n return url.replace(/\\/$/, '');\n}\n\nexport function validateQueryParam(paramName: string, value: unknown): string {\n if (value === null || value === undefined) {\n throw buildError(\n `Query parameter '${paramName}' must not be null or undefined`,\n 'VALIDATION_ERROR',\n );\n }\n\n const str = `${value as string | number}`;\n\n if (typeof value === 'number' && !Number.isFinite(value)) {\n throw buildError(\n `Query parameter '${paramName}' must be a finite number`,\n 'VALIDATION_ERROR',\n );\n }\n\n if (str.length > 2000) {\n throw buildError(\n `Query parameter '${paramName}' exceeds maximum length`,\n 'VALIDATION_ERROR',\n );\n }\n\n return str;\n}\n","import { EndpointDefinition } from './EndpointDefinition';\nimport { validatePathParam, validateQueryParam } from '../util/validation';\n\nexport interface EndpointPathResult {\n path: string;\n body: unknown;\n}\n\nexport function buildEndpointPath(\n def: EndpointDefinition,\n args: unknown[],\n datasource?: string,\n): EndpointPathResult {\n let argIndex = 0;\n let path = def.path;\n\n if (def.pathParams) {\n for (const param of def.pathParams) {\n const raw = args[argIndex++];\n const validated = validatePathParam(param, raw);\n path = path.replace(`{${param}}`, encodeURIComponent(validated));\n }\n }\n\n if (def.queryParams) {\n const queryParts: string[] = [];\n for (const [paramName, queryKey] of Object.entries(def.queryParams)) {\n const value = args[argIndex++];\n if (value !== undefined) {\n const validated = validateQueryParam(paramName, value);\n queryParts.push(`${queryKey}=${encodeURIComponent(validated)}`);\n }\n }\n if (queryParts.length > 0) {\n path += (path.includes('?') ? '&' : '?') + queryParts.join('&');\n }\n }\n\n let body: unknown = undefined;\n if (def.bodyBuilder) {\n /* eslint-disable @typescript-eslint/no-unsafe-argument */\n body = def.bodyBuilder(\n ...(args.slice(argIndex) as Parameters<typeof def.bodyBuilder>),\n );\n /* eslint-enable @typescript-eslint/no-unsafe-argument */\n } else if (def.hasBody) {\n // eslint-disable-next-line security/detect-object-injection\n body = args[argIndex];\n }\n\n if (datasource) {\n path +=\n (path.includes('?') ? '&' : '?') +\n `datasource=${encodeURIComponent(datasource)}`;\n }\n\n return { path, body };\n}\n","import { ApiClient } from '../ApiClient';\r\nimport { handleRequest, EsiHandlerResponse } from '../ApiRequestHandler';\r\nimport { EndpointMap, EndpointArgs } from './EndpointDefinition';\r\nimport { CursorTokens } from '../pagination/CursorPaginationHandler';\r\nimport {\r\n EsiResponse,\r\n EsiResult,\r\n EsiResponseMeta,\r\n} from '../../types/api-responses';\r\nimport { buildEndpointPath } from './buildEndpointPath';\r\nimport { parseWarning } from '../util/headersUtil';\r\nimport { logWarn } from '../logger/loggerUtil';\r\nimport { EsiError, EsiValidationError } from '../util/error';\r\nimport type { z } from 'zod';\r\n\r\nexport interface CursorOptions {\r\n before?: string;\r\n after?: string;\r\n}\r\n\r\nexport interface CursorResult<T = unknown> {\r\n data: T[];\r\n cursors: CursorTokens;\r\n}\r\n\r\nexport interface CreateClientOptions {\r\n returnMetadata?: boolean;\r\n safeMode?: boolean;\r\n}\r\n\r\n/** Extract the element type from an array type, or return T unchanged. */\r\nexport type UnwrapArray<T> = T extends readonly (infer E)[] ? E : T;\r\n\r\n/**\r\n * Infer the result type from an endpoint definition's responseSchema.\r\n *\r\n * - When `cursorPagination: true`, wraps in `CursorResult<ElementType>`.\r\n * - When `responseSchema` is present, uses `z.infer` to extract the type.\r\n * - Falls back to `unknown` when no `responseSchema` is defined.\r\n */\r\nexport type InferEndpointResult<D> = D extends { cursorPagination: true }\r\n ? D extends { responseSchema: infer S extends z.ZodTypeAny }\r\n ? CursorResult<UnwrapArray<z.infer<S>>>\r\n : CursorResult\r\n : D extends { responseSchema: infer S extends z.ZodTypeAny }\r\n ? z.infer<S>\r\n : unknown;\r\n\r\ntype ClientMethods<T extends EndpointMap> = {\r\n [K in keyof T]: (\r\n ...args: EndpointArgs<T[K]>\r\n ) => Promise<InferEndpointResult<T[K]>>;\r\n};\r\n\r\nexport type WithMetadata<T> = {\r\n [K in keyof T]: T[K] extends (...args: infer A) => Promise<infer R>\r\n ? (...args: A) => Promise<EsiResponse<R>>\r\n : T[K];\r\n};\r\n\r\nexport type WithSafeMode<T> = {\r\n [K in keyof T]: T[K] extends (...args: infer A) => Promise<infer R>\r\n ? (...args: A) => Promise<EsiResult<R>>\r\n : T[K];\r\n};\r\n\r\nfunction buildMeta(response: EsiHandlerResponse): EsiResponseMeta {\r\n const meta: EsiResponseMeta = {\r\n headers: response.headers,\r\n fromCache: response.fromCache ?? false,\r\n stale: response.stale ?? false,\r\n };\r\n if (response.cacheHitType) meta.cacheHitType = response.cacheHitType;\r\n if (response.responseTimeMs !== undefined)\r\n meta.responseTimeMs = response.responseTimeMs;\r\n const w = parseWarning(response.headers['warning']);\r\n if (w) meta.warning = w;\r\n if (response.headers['x-esi-request-id'])\r\n meta.requestId = response.headers['x-esi-request-id'];\r\n if (response.headers['date']) meta.date = response.headers['date'];\r\n if (response.headers['content-language'])\r\n meta.contentLanguage = response.headers['content-language'];\r\n if (response.headers['x-ratelimit-remaining']) {\r\n meta.rateLimit = {\r\n remaining: parseInt(response.headers['x-ratelimit-remaining'], 10),\r\n limit: parseInt(response.headers['x-ratelimit-limit'] ?? '0', 10),\r\n used: parseInt(response.headers['x-ratelimit-used'] ?? '0', 10),\r\n group: response.headers['x-ratelimit-group'] ?? null,\r\n };\r\n }\r\n return meta;\r\n}\r\n\r\n/* eslint-disable sonarjs/cognitive-complexity */\r\nexport function createClient<T extends EndpointMap>(\r\n apiClient: ApiClient,\r\n endpoints: T,\r\n options?: CreateClientOptions,\r\n): ClientMethods<T> {\r\n const client = {} as ClientMethods<T>;\r\n const returnMetadata = options?.returnMetadata ?? false;\r\n const safeMode = options?.safeMode ?? false;\r\n\r\n for (const [methodName, def] of Object.entries(endpoints)) {\r\n // eslint-disable-next-line security/detect-object-injection\r\n (client as Record<string, (...args: unknown[]) => Promise<unknown>>)[\r\n methodName\r\n ] = async (...args: unknown[]) => {\r\n try {\r\n if (def.deprecated) {\r\n const parts = [`Endpoint '${methodName}' is deprecated.`];\r\n if (def.deprecated.message) parts.push(def.deprecated.message);\r\n if (def.deprecated.replacedBy)\r\n parts.push(`Use '${def.deprecated.replacedBy}' instead.`);\r\n if (def.deprecated.sunsetDate)\r\n parts.push(`Sunset date: ${def.deprecated.sunsetDate}.`);\r\n logWarn(parts.join(' '));\r\n }\r\n\r\n const built = buildEndpointPath(def, args, apiClient.getDatasource());\r\n let path = built.path;\r\n const body = built.body;\r\n\r\n // Opt-in request body validation\r\n if (\r\n apiClient.getValidateRequest() &&\r\n def.requestSchema &&\r\n body != null\r\n ) {\r\n const reqResult = def.requestSchema.safeParse(body);\r\n if (!reqResult.success) {\r\n throw new EsiValidationError(\r\n `${apiClient.getLink()}/${path}`,\r\n reqResult.error,\r\n undefined,\r\n 'request',\r\n );\r\n }\r\n }\r\n\r\n if (def.cursorPagination) {\r\n const lastArg = args[args.length - 1];\r\n const isCursorArg =\r\n lastArg != null &&\r\n typeof lastArg === 'object' &&\r\n ('before' in lastArg || 'after' in lastArg);\r\n const cursorOpts: CursorOptions | undefined = isCursorArg\r\n ? (lastArg as CursorOptions)\r\n : undefined;\r\n\r\n if (cursorOpts) {\r\n const parts: string[] = [];\r\n if (cursorOpts.before)\r\n parts.push(`before=${encodeURIComponent(cursorOpts.before)}`);\r\n if (cursorOpts.after)\r\n parts.push(`after=${encodeURIComponent(cursorOpts.after)}`);\r\n if (parts.length > 0) {\r\n path += (path.includes('?') ? '&' : '?') + parts.join('&');\r\n }\r\n }\r\n\r\n const response = await handleRequest(\r\n apiClient,\r\n path,\r\n def.method,\r\n body,\r\n def.requiresAuth,\r\n true,\r\n def.path,\r\n );\r\n let responseBody = response.body;\r\n if (def.responseSchema && apiClient.getValidateResponse()) {\r\n const result = def.responseSchema.safeParse(responseBody);\r\n if (!result.success) {\r\n throw new EsiValidationError(\r\n `${apiClient.getLink()}/${path}`,\r\n result.error,\r\n );\r\n }\r\n responseBody = result.data;\r\n }\r\n let data: unknown[];\r\n if (Array.isArray(responseBody)) {\r\n data = responseBody as unknown[];\r\n } else if (responseBody !== null && responseBody !== undefined) {\r\n data = [responseBody];\r\n } else {\r\n data = [];\r\n }\r\n const cursorResult: CursorResult = {\r\n data,\r\n cursors: response.cursors ?? { before: null, after: null },\r\n };\r\n\r\n if (returnMetadata || safeMode) {\r\n const meta = buildMeta(response);\r\n if (safeMode) {\r\n return { ok: true, data: cursorResult, meta };\r\n }\r\n return { data: cursorResult, meta };\r\n }\r\n return cursorResult;\r\n }\r\n\r\n const response = await handleRequest(\r\n apiClient,\r\n path,\r\n def.method,\r\n body,\r\n def.requiresAuth,\r\n true,\r\n def.path,\r\n );\r\n let responseBody = response.body;\r\n if (def.responseSchema && apiClient.getValidateResponse()) {\r\n const result = def.responseSchema.safeParse(responseBody);\r\n if (!result.success) {\r\n throw new EsiValidationError(\r\n `${apiClient.getLink()}/${path}`,\r\n result.error,\r\n );\r\n }\r\n responseBody = result.data;\r\n }\r\n if (safeMode) {\r\n return { ok: true, data: responseBody, meta: buildMeta(response) };\r\n }\r\n if (returnMetadata) {\r\n return { data: responseBody, meta: buildMeta(response) };\r\n }\r\n return responseBody;\r\n } catch (err) {\r\n if (safeMode) {\r\n const error =\r\n err instanceof EsiError\r\n ? err\r\n : new EsiError(\r\n 0,\r\n err instanceof Error ? err.message : String(err),\r\n );\r\n return { ok: false, error };\r\n }\r\n throw err;\r\n }\r\n };\r\n }\r\n\r\n return client;\r\n}\r\n/* eslint-enable sonarjs/cognitive-complexity */\r\n\r\n/**\r\n * Fetch all pages of a cursor-paginated endpoint.\r\n *\r\n * ESI returns cursor tokens in the response body. This helper follows\r\n * `after` tokens until the dataset is exhausted (empty items array).\r\n *\r\n * Usage with body-based cursors (ESI's actual format):\r\n * const allJobs = await fetchAllCursorPages(\r\n * (before, after) => client.freelanceJobs.getFreelanceJobs(before, after),\r\n * (response) => response.freelance_jobs,\r\n * (response) => response.cursor,\r\n * );\r\n *\r\n * Usage with CursorResult shape:\r\n * const all = await fetchAllCursorPages(\r\n * (before, after) => fetcher({ before, after }),\r\n * (r) => r.data,\r\n * (r) => r.cursors,\r\n * );\r\n */\r\nexport async function fetchAllCursorPages<TResponse, TItem = unknown>(\r\n fetcher: (before?: string, after?: string) => Promise<TResponse>,\r\n getItems: (response: TResponse) => TItem[],\r\n getCursor: (response: TResponse) => {\r\n before?: string | null;\r\n after?: string | null;\r\n },\r\n): Promise<TItem[]> {\r\n const allData: TItem[] = [];\r\n let afterToken: string | undefined;\r\n let hasMore = true;\r\n\r\n while (hasMore) {\r\n const response = await fetcher(undefined, afterToken);\r\n const items = getItems(response);\r\n\r\n if (!items || items.length === 0) {\r\n hasMore = false;\r\n continue;\r\n }\r\n\r\n allData.push(...items);\r\n\r\n const cursor = getCursor(response);\r\n if (!cursor.after) {\r\n hasMore = false;\r\n continue;\r\n }\r\n\r\n afterToken = cursor.after;\r\n }\r\n\r\n return allData;\r\n}\r\n","import { ApiClient } from '../ApiClient';\r\nimport { handleSinglePageRequest } from '../ApiRequestHandler';\r\nimport { logInfo } from '../logger/loggerUtil';\r\nimport { EsiValidationError } from '../util/error';\r\nimport type { EndpointDefinition } from '../endpoints/EndpointDefinition';\r\n\r\nexport interface PageResult<T = unknown> {\r\n data: T[];\r\n page: number;\r\n totalPages: number;\r\n}\r\n\r\ntype ResponseSchema = NonNullable<EndpointDefinition['responseSchema']>;\r\n\r\nfunction extractArray<T>(body: unknown): T[] {\r\n if (Array.isArray(body)) return body as T[];\r\n if (body !== undefined && body !== null) return [body as T];\r\n return [];\r\n}\r\n\r\nfunction validatePageBody(\r\n body: unknown,\r\n schema: ResponseSchema | undefined,\r\n url: string,\r\n validate: boolean,\r\n): unknown {\r\n if (!schema || !validate) return body;\r\n const result = schema.safeParse(body);\r\n if (!result.success) {\r\n throw new EsiValidationError(url, result.error);\r\n }\r\n return result.data;\r\n}\r\n\r\nexport async function* fetchPages<T = unknown>(\r\n client: ApiClient,\r\n endpoint: string,\r\n method: string,\r\n requiresAuth: boolean = false,\r\n body?: unknown,\r\n templatePath?: string,\r\n responseSchema?: ResponseSchema,\r\n): AsyncGenerator<PageResult<T>, void, undefined> {\r\n const validate = client.getValidateResponse();\r\n const firstResponse = await handleSinglePageRequest(\r\n client,\r\n endpoint,\r\n method,\r\n body,\r\n requiresAuth,\r\n templatePath,\r\n );\r\n\r\n const firstBody = validatePageBody(\r\n firstResponse.body,\r\n responseSchema,\r\n `${client.getLink()}/${endpoint}`,\r\n validate,\r\n );\r\n\r\n const totalPages = parseInt(firstResponse.headers['x-pages'] || '1', 10);\r\n\r\n yield { data: extractArray<T>(firstBody), page: 1, totalPages };\r\n\r\n for (let page = 2; page <= totalPages; page++) {\r\n const sep = endpoint.includes('?') ? '&' : '?';\r\n const pagedEndpoint = `${endpoint}${sep}page=${page}`;\r\n\r\n logInfo(`Fetching page ${page}/${totalPages}: ${pagedEndpoint}`);\r\n\r\n const response = await handleSinglePageRequest(\r\n client,\r\n pagedEndpoint,\r\n method,\r\n body,\r\n requiresAuth,\r\n templatePath,\r\n );\r\n\r\n const pageBody = validatePageBody(\r\n response.body,\r\n responseSchema,\r\n `${client.getLink()}/${pagedEndpoint}`,\r\n validate,\r\n );\r\n const pageData = extractArray<T>(pageBody);\r\n if (pageData.length === 0) break;\r\n\r\n yield { data: pageData, page, totalPages };\r\n }\r\n}\r\n","import { ApiClient } from '../core/ApiClient';\r\nimport {\r\n createClient,\r\n CreateClientOptions,\r\n WithMetadata,\r\n WithSafeMode,\r\n} from '../core/endpoints/createClient';\r\nimport { EndpointMap } from '../core/endpoints/EndpointDefinition';\r\nimport { buildEndpointPath } from '../core/endpoints/buildEndpointPath';\r\nimport {\r\n fetchPages,\r\n PageResult,\r\n} from '../core/pagination/AsyncPaginationIterator';\r\n\r\ntype ClientMethods<T extends EndpointMap> = ReturnType<typeof createClient<T>>;\r\n\r\nexport abstract class BaseEsiClient<T extends EndpointMap> {\r\n protected api: ClientMethods<T>;\r\n protected _client: ApiClient;\r\n protected _endpoints: T;\r\n private _metaApi?: ClientMethods<T>;\r\n private _safeApi?: ClientMethods<T>;\r\n\r\n constructor(client: ApiClient, endpoints: T) {\r\n this._client = client;\r\n this._endpoints = endpoints;\r\n this.api = createClient(client, endpoints);\r\n }\r\n\r\n public streamEndpoint<R>(\r\n endpointName: string & keyof T,\r\n ...args: unknown[]\r\n ): AsyncGenerator<PageResult<R>, void, undefined> {\r\n const def = this._endpoints[endpointName]!;\r\n const { path, body } = buildEndpointPath(\r\n def,\r\n args,\r\n this._client.getDatasource(),\r\n );\r\n return fetchPages<R>(\r\n this._client,\r\n path,\r\n def.method,\r\n def.requiresAuth,\r\n body,\r\n def.path,\r\n def.responseSchema,\r\n );\r\n }\r\n\r\n withMetadata(): WithMetadata<Omit<this, 'withMetadata' | 'withSafeMode'>> {\r\n if (!this._metaApi) {\r\n this._metaApi = createClient(this._client, this._endpoints, {\r\n returnMetadata: true,\r\n });\r\n }\r\n return this._metaApi as unknown as WithMetadata<\r\n Omit<this, 'withMetadata' | 'withSafeMode'>\r\n >;\r\n }\r\n\r\n withSafeMode(): WithSafeMode<Omit<this, 'withMetadata' | 'withSafeMode'>> {\r\n if (!this._safeApi) {\r\n this._safeApi = createClient(this._client, this._endpoints, {\r\n safeMode: true,\r\n });\r\n }\r\n return this._safeApi as unknown as WithSafeMode<\r\n Omit<this, 'withMetadata' | 'withSafeMode'>\r\n >;\r\n }\r\n}\r\n","import { z } from 'zod';\nimport { EndpointMap } from './EndpointDefinition';\nimport { AllianceInfoSchema, AllianceIconSchema } from '../../schemas/alliance';\n\nexport const allianceEndpoints = {\n getAllianceById: {\n path: 'alliances/{allianceId}/',\n method: 'GET',\n requiresAuth: false,\n pathParams: ['allianceId'],\n responseSchema: AllianceInfoSchema,\n },\n getCorporations: {\n path: 'alliances/{allianceId}/corporations/',\n method: 'GET',\n requiresAuth: false,\n pathParams: ['allianceId'],\n responseSchema: z.array(z.number()),\n },\n getIcons: {\n path: 'alliances/{allianceId}/icons/',\n method: 'GET',\n requiresAuth: false,\n pathParams: ['allianceId'],\n responseSchema: AllianceIconSchema,\n },\n getAlliances: {\n path: 'alliances',\n method: 'GET',\n requiresAuth: false,\n responseSchema: z.array(z.number()),\n },\n} as const satisfies EndpointMap;\n","import { z } from 'zod';\r\nimport { esiEnum } from './esiEnum';\r\n\r\nexport const AllianceInfoSchema = z.looseObject({\r\n alliance_id: z.number().optional(),\r\n name: z.string(),\r\n ticker: z.string(),\r\n creator_id: z.number(),\r\n creator_corporation_id: z.number(),\r\n executor_corporation_id: z.number().optional(),\r\n date_founded: z.string(),\r\n faction_id: z.number().optional(),\r\n});\r\n\r\nexport const AllianceContactSchema = z.looseObject({\r\n contact_id: z.number(),\r\n contact_type: esiEnum(['character', 'corporation', 'alliance']),\r\n standing: z.number(),\r\n label_ids: z.array(z.number()).optional(),\r\n});\r\n\r\nexport const AllianceContactLabelSchema = z.looseObject({\r\n label_id: z.number(),\r\n label_name: z.string(),\r\n});\r\n\r\nexport const AllianceIconSchema = z.looseObject({\r\n px64x64: z.string().optional(),\r\n px128x128: z.string().optional(),\r\n});\r\n","import { z } from 'zod';\r\n\r\nexport function esiEnum<const T extends readonly [string, ...string[]]>(\r\n values: T,\r\n): z.ZodType<T[number] | (string & {})> {\r\n return z.union([\r\n z.enum(values as unknown as [string, ...string[]]),\r\n z.string(),\r\n ]);\r\n}\r\n","import { z } from 'zod';\r\nimport { EndpointMap } from './EndpointDefinition';\r\nimport { ContactSchema, ContactLabelSchema } from '../../schemas/contacts';\r\n\r\nexport const contactEndpoints = {\r\n getAllianceContacts: {\r\n path: 'alliances/{allianceId}/contacts',\r\n method: 'GET',\r\n requiresAuth: true,\r\n pathParams: ['allianceId'],\r\n responseSchema: z.array(ContactSchema),\r\n },\r\n getAllianceContactLabels: {\r\n path: 'alliances/{allianceId}/contacts/labels',\r\n method: 'GET',\r\n requiresAuth: true,\r\n pathParams: ['allianceId'],\r\n responseSchema: z.array(ContactLabelSchema),\r\n },\r\n getCharacterContacts: {\r\n path: 'characters/{characterId}/contacts',\r\n method: 'GET',\r\n requiresAuth: true,\r\n pathParams: ['characterId'],\r\n responseSchema: z.array(ContactSchema),\r\n },\r\n getCharacterContactLabels: {\r\n path: 'characters/{characterId}/contacts/labels',\r\n method: 'GET',\r\n requiresAuth: true,\r\n pathParams: ['characterId'],\r\n responseSchema: z.array(ContactLabelSchema),\r\n },\r\n getCorporationContacts: {\r\n path: 'corporations/{corporationId}/contacts',\r\n method: 'GET',\r\n requiresAuth: true,\r\n pathParams: ['corporationId'],\r\n responseSchema: z.array(ContactSchema),\r\n },\r\n getCorporationContactLabels: {\r\n path: 'corporations/{corporationId}/contacts/labels',\r\n method: 'GET',\r\n requiresAuth: true,\r\n pathParams: ['corporationId'],\r\n responseSchema: z.array(ContactLabelSchema),\r\n },\r\n addContacts: {\r\n path: 'characters/{characterId}/contacts',\r\n method: 'POST',\r\n requiresAuth: true,\r\n pathParams: ['characterId'],\r\n queryParams: { standing: 'standing' },\r\n bodyBuilder: (contactIds: number[]) => contactIds,\r\n requestSchema: z.array(z.number().int()),\r\n },\r\n editContacts: {\r\n path: 'characters/{characterId}/contacts',\r\n method: 'PUT',\r\n requiresAuth: true,\r\n pathParams: ['characterId'],\r\n queryParams: { standing: 'standing' },\r\n bodyBuilder: (contactIds: number[]) => contactIds,\r\n },\r\n deleteCharacterContacts: {\r\n path: 'characters/{characterId}/contacts',\r\n method: 'DELETE',\r\n requiresAuth: true,\r\n pathParams: ['characterId'],\r\n queryParams: { contactIds: 'contact_ids' },\r\n },\r\n} as const satisfies EndpointMap;\r\n","import { z } from 'zod';\r\nimport { esiEnum } from './esiEnum';\r\n\r\nexport const ContactSchema = z.looseObject({\r\n contact_id: z.number(),\r\n contact_type: esiEnum(['character', 'corporation', 'alliance', 'faction']),\r\n standing: z.number(),\r\n label_ids: z.array(z.number()).optional(),\r\n is_blocked: z.boolean().optional(),\r\n is_watched: z.boolean().optional(),\r\n});\r\n\r\nexport const ContactLabelSchema = z.looseObject({\r\n label_id: z.number(),\r\n label_name: z.string(),\r\n});\r\n","import { ApiClient } from '../core/ApiClient';\r\nimport { BaseEsiClient } from './BaseEsiClient';\r\nimport { createClient } from '../core/endpoints/createClient';\r\nimport { allianceEndpoints } from '../core/endpoints/allianceEndpoints';\r\nimport { contactEndpoints } from '../core/endpoints/contactEndpoints';\r\nimport {\r\n AllianceInfo,\r\n AllianceContact,\r\n AllianceContactLabel,\r\n AllianceIcon,\r\n} from '../types/api-responses';\r\nimport { PageResult } from '../core/pagination/AsyncPaginationIterator';\r\nimport { logWarn } from '../core/logger/loggerUtil';\r\n\r\nexport class AllianceClient extends BaseEsiClient<typeof allianceEndpoints> {\r\n private contactApi: ReturnType<typeof createClient<typeof contactEndpoints>>;\r\n\r\n constructor(client: ApiClient) {\r\n super(client, allianceEndpoints);\r\n this.contactApi = createClient(client, contactEndpoints);\r\n }\r\n\r\n /**\r\n * Retrieve public information about an alliance.\r\n *\r\n * @param allianceId - The ID of the alliance to look up\r\n * @returns Public alliance information including name, ticker, and founding date\r\n */\r\n getAllianceById(allianceId: number): Promise<AllianceInfo> {\r\n return this.api.getAllianceById(allianceId);\r\n }\r\n\r\n /**\r\n * Retrieve contacts for an alliance.\r\n *\r\n * @deprecated Use ContactsClient.getAllianceContacts() instead\r\n * @param allianceId - The ID of the alliance whose contacts to retrieve\r\n * @returns A list of alliance contacts with standings and contact types\r\n * @requires Authentication\r\n */\r\n getContacts(allianceId: number): Promise<AllianceContact[]> {\r\n logWarn(\r\n 'AllianceClient.getContacts() is deprecated. Use ContactsClient.getAllianceContacts() instead. Planned removal in next major version.',\r\n );\r\n // Schema mismatch: ContactSchema uses a wider contact_type enum than AllianceContactSchema.\r\n // Cast through unknown until schemas are unified.\r\n return this.contactApi.getAllianceContacts(\r\n allianceId,\r\n ) as unknown as Promise<AllianceContact[]>;\r\n }\r\n\r\n /**\r\n * Retrieve custom contact labels for an alliance.\r\n *\r\n * @deprecated Use ContactsClient.getAllianceContactLabels() instead\r\n * @param allianceId - The ID of the alliance whose contact labels to retrieve\r\n * @returns A list of custom labels used to categorize alliance contacts\r\n * @requires Authentication\r\n */\r\n getContactLabels(allianceId: number): Promise<AllianceContactLabel[]> {\r\n logWarn(\r\n 'AllianceClient.getContactLabels() is deprecated. Use ContactsClient.getAllianceContactLabels() instead. Planned removal in next major version.',\r\n );\r\n // Schema mismatch: ContactLabelSchema vs AllianceContactLabelSchema are structurally\r\n // identical but TypeScript treats them as distinct nominal types from different schemas.\r\n return this.contactApi.getAllianceContactLabels(allianceId);\r\n }\r\n\r\n /**\r\n * Retrieve the list of corporation IDs that are members of an alliance.\r\n *\r\n * @param allianceId - The ID of the alliance whose member corporations to retrieve\r\n * @returns An array of corporation IDs belonging to the alliance\r\n */\r\n getCorporations(allianceId: number): Promise<number[]> {\r\n return this.api.getCorporations(allianceId);\r\n }\r\n\r\n /**\r\n * Retrieve icon URLs for an alliance.\r\n *\r\n * @param allianceId - The ID of the alliance whose icons to retrieve\r\n * @returns Icon URLs at various resolutions for the alliance\r\n */\r\n getIcons(allianceId: number): Promise<AllianceIcon> {\r\n return this.api.getIcons(allianceId);\r\n }\r\n\r\n /**\r\n * Retrieve a list of all active alliance IDs in EVE Online.\r\n *\r\n * @returns An array of all active alliance IDs\r\n */\r\n getAlliances(): Promise<number[]> {\r\n return this.api.getAlliances();\r\n }\r\n\r\n streamAlliances(): AsyncGenerator<PageResult<number>, void, undefined> {\r\n return this.streamEndpoint<number>('getAlliances');\r\n }\r\n\r\n streamCorporations(\r\n allianceId: number,\r\n ): AsyncGenerator<PageResult<number>, void, undefined> {\r\n return this.streamEndpoint<number>('getCorporations', allianceId);\r\n }\r\n}\r\n","import { z } from 'zod';\nimport { EndpointMap } from './EndpointDefinition';\nimport {\n CharacterAssetSchema,\n AssetLocationSchema,\n AssetNameSchema,\n} from '../../schemas/assets';\n\nexport const assetEndpoints = {\n getCharacterAssets: {\n path: 'characters/{characterId}/assets/',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n responseSchema: z.array(CharacterAssetSchema),\n },\n getCorporationAssets: {\n path: 'corporations/{corporationId}/assets/',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId'],\n responseSchema: z.array(CharacterAssetSchema),\n },\n postCharacterAssetLocations: {\n path: 'characters/{characterId}/assets/locations/',\n method: 'POST',\n requiresAuth: true,\n pathParams: ['characterId'],\n bodyBuilder: (itemIds: number[]) => itemIds,\n responseSchema: z.array(AssetLocationSchema),\n },\n postCharacterAssetNames: {\n path: 'characters/{characterId}/assets/names/',\n method: 'POST',\n requiresAuth: true,\n pathParams: ['characterId'],\n bodyBuilder: (itemIds: number[]) => itemIds,\n responseSchema: z.array(AssetNameSchema),\n },\n postCorporationAssetLocations: {\n path: 'corporations/{corporationId}/assets/locations/',\n method: 'POST',\n requiresAuth: true,\n pathParams: ['corporationId'],\n bodyBuilder: (itemIds: number[]) => itemIds,\n },\n postCorporationAssetNames: {\n path: 'corporations/{corporationId}/assets/names/',\n method: 'POST',\n requiresAuth: true,\n pathParams: ['corporationId'],\n bodyBuilder: (itemIds: number[]) => itemIds,\n },\n} as const satisfies EndpointMap;\n","import { z } from 'zod';\r\nimport { esiEnum } from './esiEnum';\r\n\r\nexport const CharacterAssetSchema = z.looseObject({\r\n item_id: z.number(),\r\n type_id: z.number(),\r\n quantity: z.number(),\r\n location_id: z.number(),\r\n location_type: esiEnum(['station', 'solar_system', 'item', 'other']),\r\n location_flag: z.string(),\r\n is_singleton: z.boolean(),\r\n is_blueprint_copy: z.boolean().optional(),\r\n});\r\n\r\nexport const AssetLocationSchema = z.looseObject({\r\n item_id: z.number(),\r\n position: z.looseObject({\r\n x: z.number(),\r\n y: z.number(),\r\n z: z.number(),\r\n }),\r\n});\r\n\r\nexport const AssetNameSchema = z.looseObject({\r\n item_id: z.number(),\r\n name: z.string(),\r\n});\r\n","import { ApiClient } from '../core/ApiClient';\nimport { BaseEsiClient } from './BaseEsiClient';\nimport { assetEndpoints } from '../core/endpoints/assetEndpoints';\nimport {\n CharacterAsset,\n AssetLocation,\n AssetName,\n} from '../types/api-responses';\nimport { PageResult } from '../core/pagination/AsyncPaginationIterator';\n\nexport class AssetsClient extends BaseEsiClient<typeof assetEndpoints> {\n constructor(client: ApiClient) {\n super(client, assetEndpoints);\n }\n\n /**\n * Retrieve a list of assets owned by a character.\n *\n * @param characterId - The ID of the character whose assets to retrieve\n * @returns A list of the character's assets including type, quantity, and location\n * @requires Authentication\n */\n getCharacterAssets(characterId: number): Promise<CharacterAsset[]> {\n return this.api.getCharacterAssets(characterId) as Promise<\n CharacterAsset[]\n >;\n }\n\n /**\n * Look up the locations of specific assets owned by a character via a bulk POST request.\n *\n * @param characterId - The ID of the character who owns the assets\n * @param itemIds - An array of item IDs to look up locations for\n * @returns Location information for each requested asset\n * @requires Authentication\n */\n postCharacterAssetLocations(\n characterId: number,\n itemIds: number[],\n ): Promise<AssetLocation[]> {\n return this.api.postCharacterAssetLocations(\n characterId,\n itemIds,\n ) as Promise<AssetLocation[]>;\n }\n\n /**\n * Look up the names of specific assets owned by a character via a bulk POST request.\n *\n * @param characterId - The ID of the character who owns the assets\n * @param itemIds - An array of item IDs to look up names for\n * @returns The user-assigned names for each requested asset\n * @requires Authentication\n */\n postCharacterAssetNames(\n characterId: number,\n itemIds: number[],\n ): Promise<AssetName[]> {\n return this.api.postCharacterAssetNames(characterId, itemIds) as Promise<\n AssetName[]\n >;\n }\n\n /**\n * Retrieve a list of assets owned by a corporation.\n *\n * @param corporationId - The ID of the corporation whose assets to retrieve\n * @returns A list of the corporation's assets including type, quantity, and location\n * @requires Authentication\n */\n getCorporationAssets(corporationId: number): Promise<CharacterAsset[]> {\n return this.api.getCorporationAssets(corporationId) as Promise<\n CharacterAsset[]\n >;\n }\n\n /**\n * Look up the locations of specific assets owned by a corporation via a bulk POST request.\n *\n * @param corporationId - The ID of the corporation that owns the assets\n * @param itemIds - An array of item IDs to look up locations for\n * @returns Location information for each requested asset\n * @requires Authentication\n */\n postCorporationAssetLocations(\n corporationId: number,\n itemIds: number[],\n ): Promise<AssetLocation[]> {\n return this.api.postCorporationAssetLocations(\n corporationId,\n itemIds,\n ) as Promise<AssetLocation[]>;\n }\n\n /**\n * Look up the names of specific assets owned by a corporation via a bulk POST request.\n *\n * @param corporationId - The ID of the corporation that owns the assets\n * @param itemIds - An array of item IDs to look up names for\n * @returns The user-assigned names for each requested asset\n * @requires Authentication\n */\n postCorporationAssetNames(\n corporationId: number,\n itemIds: number[],\n ): Promise<AssetName[]> {\n return this.api.postCorporationAssetNames(\n corporationId,\n itemIds,\n ) as Promise<AssetName[]>;\n }\n\n streamCharacterAssets(\n characterId: number,\n ): AsyncGenerator<PageResult<CharacterAsset>, void, undefined> {\n return this.streamEndpoint<CharacterAsset>(\n 'getCharacterAssets',\n characterId,\n );\n }\n\n streamCorporationAssets(\n corporationId: number,\n ): AsyncGenerator<PageResult<CharacterAsset>, void, undefined> {\n return this.streamEndpoint<CharacterAsset>(\n 'getCorporationAssets',\n corporationId,\n );\n }\n}\n","import { z } from 'zod';\nimport { EndpointMap } from './EndpointDefinition';\nimport {\n CalendarEventSchema,\n CalendarEventDetailSchema,\n CalendarEventAttendeeSchema,\n} from '../../schemas/calendar';\n\nexport const calendarEndpoints = {\n getCalendarEvents: {\n path: 'characters/{characterId}/calendar/',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n responseSchema: z.array(CalendarEventSchema),\n },\n getCalendarEventById: {\n path: 'characters/{characterId}/calendar/{eventId}/',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId', 'eventId'],\n responseSchema: CalendarEventDetailSchema,\n },\n getEventAttendees: {\n path: 'characters/{characterId}/calendar/{eventId}/attendees/',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId', 'eventId'],\n responseSchema: z.array(CalendarEventAttendeeSchema),\n },\n respondToCalendarEvent: {\n path: 'characters/{characterId}/calendar/{eventId}/',\n method: 'PUT',\n requiresAuth: true,\n pathParams: ['characterId', 'eventId'],\n bodyBuilder: (response: string) => ({ response }),\n },\n} as const satisfies EndpointMap;\n","import { z } from 'zod';\r\nimport { esiEnum } from './esiEnum';\r\n\r\nexport const CalendarEventSchema = z.looseObject({\r\n event_id: z.number(),\r\n event_date: z.string(),\r\n title: z.string(),\r\n importance: z.number(),\r\n event_response: esiEnum([\r\n 'declined',\r\n 'not_responded',\r\n 'accepted',\r\n 'tentative',\r\n ]),\r\n});\r\n\r\nexport const CalendarEventDetailSchema = z.looseObject({\r\n event_id: z.number(),\r\n date: z.string(),\r\n title: z.string(),\r\n text: z.string(),\r\n owner_id: z.number(),\r\n owner_name: z.string(),\r\n owner_type: esiEnum([\r\n 'eve_server',\r\n 'corporation',\r\n 'faction',\r\n 'character',\r\n 'alliance',\r\n ]),\r\n duration: z.number(),\r\n importance: z.number(),\r\n response: z.string(),\r\n});\r\n\r\nexport const CalendarEventAttendeeSchema = z.looseObject({\r\n character_id: z.number(),\r\n event_response: esiEnum([\r\n 'declined',\r\n 'not_responded',\r\n 'accepted',\r\n 'tentative',\r\n ]),\r\n});\r\n","import { ApiClient } from '../core/ApiClient';\r\nimport { BaseEsiClient } from './BaseEsiClient';\r\nimport { calendarEndpoints } from '../core/endpoints/calendarEndpoints';\r\nimport {\r\n CalendarEvent,\r\n CalendarEventDetail,\r\n CalendarEventAttendee,\r\n} from '../types/api-responses';\r\nimport { PageResult } from '../core/pagination/AsyncPaginationIterator';\r\n\r\nexport class CalendarClient extends BaseEsiClient<typeof calendarEndpoints> {\r\n constructor(client: ApiClient) {\r\n super(client, calendarEndpoints);\r\n }\r\n\r\n /**\r\n * Retrieve a character's upcoming calendar events.\r\n *\r\n * @param characterId - The ID of the character whose calendar events to retrieve\r\n * @returns A list of upcoming calendar events\r\n * @requires Authentication\r\n */\r\n getCalendarEvents(characterId: number): Promise<CalendarEvent[]> {\r\n return this.api.getCalendarEvents(characterId);\r\n }\r\n\r\n /**\r\n * Retrieve detailed information about a specific calendar event for a character.\r\n *\r\n * @param characterId - The ID of the character who owns the event\r\n * @param eventId - The ID of the calendar event to retrieve\r\n * @returns Detailed event information including title, description, and timing\r\n * @requires Authentication\r\n */\r\n getCalendarEventById(\r\n characterId: number,\r\n eventId: number,\r\n ): Promise<CalendarEventDetail> {\r\n return this.api.getCalendarEventById(characterId, eventId);\r\n }\r\n\r\n /**\r\n * Set a character's response to a calendar event (accepted, declined, or tentative).\r\n *\r\n * @param characterId - The ID of the character responding to the event\r\n * @param eventId - The ID of the calendar event to respond to\r\n * @param response - The response status to set for this event\r\n * @requires Authentication\r\n */\r\n respondToCalendarEvent(\r\n characterId: number,\r\n eventId: number,\r\n response: string,\r\n ): Promise<void> {\r\n return this.api.respondToCalendarEvent(\r\n characterId,\r\n eventId,\r\n response,\r\n ) as Promise<void>;\r\n }\r\n\r\n /**\r\n * Retrieve the list of attendees and their response statuses for a calendar event.\r\n *\r\n * @param characterId - The ID of the character who owns the event\r\n * @param eventId - The ID of the calendar event whose attendees to retrieve\r\n * @returns A list of attendees with their response statuses\r\n * @requires Authentication\r\n */\r\n getEventAttendees(\r\n characterId: number,\r\n eventId: number,\r\n ): Promise<CalendarEventAttendee[]> {\r\n return this.api.getEventAttendees(characterId, eventId);\r\n }\r\n\r\n streamCalendarEvents(\r\n characterId: number,\r\n ): AsyncGenerator<PageResult<CalendarEvent>, void, undefined> {\r\n return this.streamEndpoint<CalendarEvent>('getCalendarEvents', characterId);\r\n }\r\n\r\n streamEventAttendees(\r\n characterId: number,\r\n eventId: number,\r\n ): AsyncGenerator<PageResult<CalendarEventAttendee>, void, undefined> {\r\n return this.streamEndpoint<CalendarEventAttendee>(\r\n 'getEventAttendees',\r\n characterId,\r\n eventId,\r\n );\r\n }\r\n}\r\n","import { z } from 'zod';\r\nimport { EndpointMap } from './EndpointDefinition';\r\nimport {\r\n CharacterInfoSchema,\r\n CharacterPortraitSchema,\r\n AgentResearchSchema,\r\n BlueprintSchema,\r\n CorporationHistorySchema,\r\n JumpFatigueSchema,\r\n MedalSchema,\r\n NotificationSchema,\r\n CharacterTitleSchema,\r\n CharacterRoleSchema,\r\n ContactNotificationSchema,\r\n} from '../../schemas/character';\r\nimport { StandingSchema } from '../../schemas/common';\r\n\r\nexport const characterEndpoints = {\r\n getCharacterPublicInfo: {\r\n path: 'characters/{characterId}/',\r\n method: 'GET',\r\n requiresAuth: false,\r\n pathParams: ['characterId'],\r\n responseSchema: CharacterInfoSchema,\r\n },\r\n getAgentsResearch: {\r\n path: 'characters/{characterId}/agents_research/',\r\n method: 'GET',\r\n requiresAuth: true,\r\n pathParams: ['characterId'],\r\n responseSchema: z.array(AgentResearchSchema),\r\n },\r\n getBlueprints: {\r\n path: 'characters/{characterId}/blueprints/',\r\n method: 'GET',\r\n requiresAuth: true,\r\n pathParams: ['characterId'],\r\n responseSchema: z.array(BlueprintSchema),\r\n },\r\n getRoles: {\r\n path: 'characters/{characterId}/roles',\r\n method: 'GET',\r\n requiresAuth: true,\r\n pathParams: ['characterId'],\r\n responseSchema: CharacterRoleSchema,\r\n },\r\n getStandings: {\r\n path: 'characters/{characterId}/standings',\r\n method: 'GET',\r\n requiresAuth: true,\r\n pathParams: ['characterId'],\r\n responseSchema: z.array(StandingSchema),\r\n },\r\n getTitles: {\r\n path: 'characters/{characterId}/titles',\r\n method: 'GET',\r\n requiresAuth: true,\r\n pathParams: ['characterId'],\r\n responseSchema: z.array(CharacterTitleSchema),\r\n },\r\n getContactNotifications: {\r\n path: 'characters/{characterId}/notifications/contacts/',\r\n method: 'GET',\r\n requiresAuth: true,\r\n pathParams: ['characterId'],\r\n responseSchema: z.array(ContactNotificationSchema),\r\n },\r\n getCorporationHistory: {\r\n path: 'characters/{characterId}/corporationhistory/',\r\n method: 'GET',\r\n requiresAuth: false,\r\n pathParams: ['characterId'],\r\n responseSchema: z.array(CorporationHistorySchema),\r\n },\r\n getJumpFatigue: {\r\n path: 'characters/{characterId}/fatigue/',\r\n method: 'GET',\r\n requiresAuth: true,\r\n pathParams: ['characterId'],\r\n responseSchema: JumpFatigueSchema,\r\n },\r\n getMedals: {\r\n path: 'characters/{characterId}/medals/',\r\n method: 'GET',\r\n requiresAuth: true,\r\n pathParams: ['characterId'],\r\n responseSchema: z.array(MedalSchema),\r\n },\r\n getNotifications: {\r\n path: 'characters/{characterId}/notifications/',\r\n method: 'GET',\r\n requiresAuth: true,\r\n pathParams: ['characterId'],\r\n responseSchema: z.array(NotificationSchema),\r\n },\r\n getPortrait: {\r\n path: 'characters/{characterId}/portrait/',\r\n method: 'GET',\r\n requiresAuth: false,\r\n pathParams: ['characterId'],\r\n responseSchema: CharacterPortraitSchema,\r\n },\r\n postCharacterAffiliation: {\r\n path: 'characters/affiliation',\r\n method: 'POST',\r\n requiresAuth: false,\r\n hasBody: true,\r\n },\r\n calculateCspaChargeCost: {\r\n path: 'characters/{characterId}/cspa/',\r\n method: 'POST',\r\n requiresAuth: true,\r\n pathParams: ['characterId'],\r\n hasBody: true,\r\n },\r\n} as const satisfies EndpointMap;\r\n","import { z } from 'zod';\r\nimport { esiEnum } from './esiEnum';\r\n\r\nexport const CharacterInfoSchema = z.looseObject({\r\n character_id: z.number().optional(),\r\n name: z.string(),\r\n description: z.string().optional(),\r\n corporation_id: z.number(),\r\n alliance_id: z.number().optional(),\r\n faction_id: z.number().optional(),\r\n ancestry_id: z.number().optional(),\r\n bloodline_id: z.number(),\r\n race_id: z.number(),\r\n gender: esiEnum(['male', 'female']),\r\n security_status: z.number().optional(),\r\n title: z.string().optional(),\r\n birthday: z.string(),\r\n});\r\n\r\nexport const CharacterPortraitSchema = z.looseObject({\r\n px64x64: z.string().optional(),\r\n px128x128: z.string().optional(),\r\n px256x256: z.string().optional(),\r\n px512x512: z.string().optional(),\r\n});\r\n\r\nexport const CharacterAttributesSchema = z.looseObject({\r\n charisma: z.number(),\r\n intelligence: z.number(),\r\n memory: z.number(),\r\n perception: z.number(),\r\n willpower: z.number(),\r\n bonus_remaps: z.number().optional(),\r\n last_remap_date: z.string().optional(),\r\n accrued_remap_cooldown_date: z.string().optional(),\r\n});\r\n\r\nexport const AgentResearchSchema = z.looseObject({\r\n agent_id: z.number(),\r\n skill_type_id: z.number(),\r\n started_at: z.string(),\r\n points_per_day: z.number(),\r\n remainder_points: z.number(),\r\n});\r\n\r\nexport const BlueprintSchema = z.looseObject({\r\n item_id: z.number(),\r\n type_id: z.number(),\r\n location_id: z.number(),\r\n location_flag: z.string(),\r\n quantity: z.number(),\r\n time_efficiency: z.number(),\r\n material_efficiency: z.number(),\r\n runs: z.number(),\r\n});\r\n\r\nexport const CorporationHistorySchema = z.looseObject({\r\n corporation_id: z.number(),\r\n record_id: z.number(),\r\n start_date: z.string(),\r\n is_deleted: z.boolean().optional(),\r\n});\r\n\r\nexport const JumpFatigueSchema = z.looseObject({\r\n jump_fatigue_expire_date: z.string().optional(),\r\n last_jump_date: z.string().optional(),\r\n last_update_date: z.string().optional(),\r\n});\r\n\r\nexport const MedalSchema = z.looseObject({\r\n medal_id: z.number(),\r\n title: z.string(),\r\n description: z.string(),\r\n date: z.string(),\r\n issuer_id: z.number(),\r\n corporation_id: z.number(),\r\n reason: z.string(),\r\n status: esiEnum(['private', 'public']),\r\n graphics: z.array(\r\n z.looseObject({\r\n part: z.number(),\r\n layer: z.number(),\r\n graphic: z.string(),\r\n color: z.number().optional(),\r\n }),\r\n ),\r\n});\r\n\r\nexport const NotificationSchema = z.looseObject({\r\n notification_id: z.number(),\r\n type: z.string(),\r\n sender_id: z.number(),\r\n sender_type: esiEnum([\r\n 'character',\r\n 'corporation',\r\n 'alliance',\r\n 'faction',\r\n 'other',\r\n ]),\r\n timestamp: z.string(),\r\n text: z.string().optional(),\r\n is_read: z.boolean().optional(),\r\n});\r\n\r\nexport const CharacterTitleSchema = z.looseObject({\r\n title_id: z.number(),\r\n name: z.string(),\r\n});\r\n\r\nexport const CharacterAffiliationSchema = z.looseObject({\r\n character_id: z.number(),\r\n corporation_id: z.number(),\r\n alliance_id: z.number().optional(),\r\n faction_id: z.number().optional(),\r\n});\r\n\r\nexport const ContactNotificationSchema = z.looseObject({\r\n notification_id: z.number(),\r\n sender_character_id: z.number(),\r\n message: z.string(),\r\n send_date: z.string(),\r\n standing_level: z.number(),\r\n});\r\n\r\nexport const CharacterRoleSchema = z.looseObject({\r\n roles: z.array(z.string()).optional(),\r\n roles_at_hq: z.array(z.string()).optional(),\r\n roles_at_base: z.array(z.string()).optional(),\r\n roles_at_other: z.array(z.string()).optional(),\r\n});\r\n","import { z } from 'zod';\r\nimport { esiEnum } from './esiEnum';\r\n\r\nexport const StandingSchema = z.looseObject({\r\n from_id: z.number(),\r\n from_type: esiEnum(['agent', 'npc_corp', 'faction']),\r\n standing: z.number(),\r\n});\r\n\r\nexport const RateLimitMetaSchema = z.object({\r\n remaining: z.number(),\r\n limit: z.number(),\r\n used: z.number(),\r\n group: z.string().nullable(),\r\n});\r\n\r\nexport const EsiResponseMetaSchema = z.looseObject({\r\n headers: z.record(z.string(), z.string()),\r\n fromCache: z.boolean(),\r\n stale: z.boolean(),\r\n cacheHitType: z.enum(['spec-ttl', 'etag-304', 'stale-on-error']).optional(),\r\n warning: z\r\n .object({\r\n code: z.number(),\r\n message: z.string(),\r\n })\r\n .optional(),\r\n requestId: z.string().optional(),\r\n date: z.string().optional(),\r\n contentLanguage: z.string().optional(),\r\n rateLimit: RateLimitMetaSchema.optional(),\r\n responseTimeMs: z.number().optional(),\r\n});\r\n\r\nexport function esiResponse<T extends z.ZodTypeAny>(dataSchema: T) {\r\n return z.object({\r\n data: dataSchema,\r\n meta: EsiResponseMetaSchema,\r\n });\r\n}\r\n","import { ApiClient } from '../core/ApiClient';\r\nimport { BaseEsiClient } from './BaseEsiClient';\r\nimport { characterEndpoints } from '../core/endpoints/characterEndpoints';\r\nimport {\r\n CharacterInfo,\r\n CharacterPortrait,\r\n AgentResearch,\r\n Blueprint,\r\n CorporationHistory,\r\n JumpFatigue,\r\n Medal,\r\n Notification,\r\n Standing,\r\n CharacterTitle,\r\n CharacterAffiliation,\r\n CharacterRole,\r\n} from '../types/api-responses';\r\nimport { PageResult } from '../core/pagination/AsyncPaginationIterator';\r\n\r\nexport class CharacterClient extends BaseEsiClient<typeof characterEndpoints> {\r\n constructor(client: ApiClient) {\r\n super(client, characterEndpoints);\r\n }\r\n\r\n /**\r\n * Retrieve publicly available information about a character.\r\n *\r\n * @param characterId - The ID of the character to look up\r\n * @returns Public character information including name, corporation, and birthday\r\n */\r\n getCharacterPublicInfo(characterId: number): Promise<CharacterInfo> {\r\n return this.api.getCharacterPublicInfo(characterId);\r\n }\r\n\r\n /**\r\n * Retrieve a character's active research agents and their accumulated research points.\r\n *\r\n * @param characterId - The ID of the character whose research agents to retrieve\r\n * @returns A list of research agents with skill, points, and start date information\r\n * @requires Authentication\r\n */\r\n getCharacterAgentsResearch(characterId: number): Promise<AgentResearch[]> {\r\n return this.api.getAgentsResearch(characterId);\r\n }\r\n\r\n /**\r\n * Retrieve blueprints owned by a character.\r\n *\r\n * @param characterId - The ID of the character whose blueprints to retrieve\r\n * @returns A list of blueprints with material/time efficiency and run information\r\n * @requires Authentication\r\n */\r\n getCharacterBlueprints(characterId: number): Promise<Blueprint[]> {\r\n return this.api.getBlueprints(characterId);\r\n }\r\n\r\n /**\r\n * Retrieve the corporation membership history of a character (public endpoint).\r\n *\r\n * @param characterId - The ID of the character whose corporation history to retrieve\r\n * @returns A chronological list of corporations the character has been a member of\r\n */\r\n getCharacterCorporationHistory(\r\n characterId: number,\r\n ): Promise<CorporationHistory[]> {\r\n return this.api.getCorporationHistory(characterId);\r\n }\r\n\r\n /**\r\n * Calculate the CSPA (CONCORD Spam Prevention Act) charge cost for sending mail to a set of characters.\r\n *\r\n * @param characterId - The ID of the character who would be sending mail\r\n * @param characters - An array of character IDs to calculate CSPA charges for\r\n * @returns The total CSPA charge cost in ISK\r\n * @requires Authentication\r\n */\r\n postCspaChargeCost(\r\n characterId: number,\r\n characters: number[],\r\n ): Promise<number> {\r\n return this.api.calculateCspaChargeCost(\r\n characterId,\r\n characters,\r\n ) as Promise<number>;\r\n }\r\n\r\n /**\r\n * Retrieve a character's current jump fatigue and activation cooldown timers.\r\n *\r\n * @param characterId - The ID of the character whose jump fatigue to retrieve\r\n * @returns Jump fatigue expiry dates and last jump information\r\n * @requires Authentication\r\n */\r\n getCharacterFatigue(characterId: number): Promise<JumpFatigue> {\r\n return this.api.getJumpFatigue(characterId);\r\n }\r\n\r\n /**\r\n * Retrieve medals awarded to a character.\r\n *\r\n * @param characterId - The ID of the character whose medals to retrieve\r\n * @returns A list of medals the character has been awarded\r\n * @requires Authentication\r\n */\r\n getCharacterMedals(characterId: number): Promise<Medal[]> {\r\n return this.api.getMedals(characterId);\r\n }\r\n\r\n /**\r\n * Retrieve a character's notifications from the notification center.\r\n *\r\n * @param characterId - The ID of the character whose notifications to retrieve\r\n * @returns A list of notifications including type, sender, and timestamp\r\n * @requires Authentication\r\n */\r\n getCharacterNotifications(characterId: number): Promise<Notification[]> {\r\n return this.api.getNotifications(characterId);\r\n }\r\n\r\n /**\r\n * Retrieve notifications related to contact changes for a character.\r\n *\r\n * @param characterId - The ID of the character whose contact notifications to retrieve\r\n * @returns A list of contact-related notifications\r\n * @requires Authentication\r\n */\r\n getCharacterNotificationsContacts(\r\n characterId: number,\r\n ): Promise<Notification[]> {\r\n // Schema mismatch: ContactNotification schema differs from Notification type.\r\n // Cast through unknown until schema is aligned with the type.\r\n return this.api.getContactNotifications(characterId) as unknown as Promise<\r\n Notification[]\r\n >;\r\n }\r\n\r\n /**\r\n * Retrieve portrait image URLs for a character at various resolutions.\r\n *\r\n * @param characterId - The ID of the character whose portrait to retrieve\r\n * @returns Portrait URLs at different resolutions (64x64, 128x128, 256x256, 512x512)\r\n */\r\n getCharacterPortrait(characterId: number): Promise<CharacterPortrait> {\r\n return this.api.getPortrait(characterId);\r\n }\r\n\r\n /**\r\n * Retrieve the corporation roles assigned to a character.\r\n *\r\n * @param characterId - The ID of the character whose roles to retrieve\r\n * @returns The character's roles including regular, HQ, base, and other role categories\r\n * @requires Authentication\r\n */\r\n getCharacterRoles(characterId: number): Promise<CharacterRole> {\r\n return this.api.getRoles(characterId);\r\n }\r\n\r\n /**\r\n * Retrieve a character's standings with NPC factions, corporations, and agents.\r\n *\r\n * @param characterId - The ID of the character whose standings to retrieve\r\n * @returns A list of standings with from_type, from_id, and standing value\r\n * @requires Authentication\r\n */\r\n getCharacterStandings(characterId: number): Promise<Standing[]> {\r\n return this.api.getStandings(characterId);\r\n }\r\n\r\n /**\r\n * Retrieve the corporation titles held by a character.\r\n *\r\n * @param characterId - The ID of the character whose titles to retrieve\r\n * @returns A list of corporation titles assigned to the character\r\n * @requires Authentication\r\n */\r\n getCharacterTitles(characterId: number): Promise<CharacterTitle[]> {\r\n return this.api.getTitles(characterId);\r\n }\r\n\r\n /**\r\n * Look up the current corporation, alliance, and faction affiliations for a set of characters via a bulk POST request.\r\n *\r\n * @param characters - An array of character IDs to look up affiliations for\r\n * @returns Affiliation data including corporation, alliance, and faction IDs for each character\r\n */\r\n postCharacterAffiliation(\r\n characters: number[],\r\n ): Promise<CharacterAffiliation[]> {\r\n return this.api.postCharacterAffiliation(characters) as Promise<\r\n CharacterAffiliation[]\r\n >;\r\n }\r\n\r\n streamCharacterAgentsResearch(\r\n characterId: number,\r\n ): AsyncGenerator<PageResult<AgentResearch>, void, undefined> {\r\n return this.streamEndpoint<AgentResearch>('getAgentsResearch', characterId);\r\n }\r\n\r\n streamCharacterBlueprints(\r\n characterId: number,\r\n ): AsyncGenerator<PageResult<Blueprint>, void, undefined> {\r\n return this.streamEndpoint<Blueprint>('getBlueprints', characterId);\r\n }\r\n\r\n streamCharacterCorporationHistory(\r\n characterId: number,\r\n ): AsyncGenerator<PageResult<CorporationHistory>, void, undefined> {\r\n return this.streamEndpoint<CorporationHistory>(\r\n 'getCorporationHistory',\r\n characterId,\r\n );\r\n }\r\n\r\n streamCharacterMedals(\r\n characterId: number,\r\n ): AsyncGenerator<PageResult<Medal>, void, undefined> {\r\n return this.streamEndpoint<Medal>('getMedals', characterId);\r\n }\r\n\r\n streamCharacterNotifications(\r\n characterId: number,\r\n ): AsyncGenerator<PageResult<Notification>, void, undefined> {\r\n return this.streamEndpoint<Notification>('getNotifications', characterId);\r\n }\r\n\r\n streamCharacterNotificationsContacts(\r\n characterId: number,\r\n ): AsyncGenerator<PageResult<Notification>, void, undefined> {\r\n return this.streamEndpoint<Notification>(\r\n 'getContactNotifications',\r\n characterId,\r\n );\r\n }\r\n\r\n streamCharacterStandings(\r\n characterId: number,\r\n ): AsyncGenerator<PageResult<Standing>, void, undefined> {\r\n return this.streamEndpoint<Standing>('getStandings', characterId);\r\n }\r\n\r\n streamCharacterTitles(\r\n characterId: number,\r\n ): AsyncGenerator<PageResult<CharacterTitle>, void, undefined> {\r\n return this.streamEndpoint<CharacterTitle>('getTitles', characterId);\r\n }\r\n}\r\n","import { z } from 'zod';\nimport { EndpointMap } from './EndpointDefinition';\nimport { CloneInfoSchema } from '../../schemas/clones';\n\nexport const cloneEndpoints = {\n getClones: {\n path: 'characters/{characterId}/clones',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n responseSchema: CloneInfoSchema,\n },\n getImplants: {\n path: 'characters/{characterId}/implants',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n responseSchema: z.array(z.number()),\n },\n} as const satisfies EndpointMap;\n","import { z } from 'zod';\r\nimport { esiEnum } from './esiEnum';\r\n\r\nexport const CloneInfoSchema = z.looseObject({\r\n home_location: z\r\n .looseObject({\r\n location_id: z.number(),\r\n location_type: esiEnum(['station', 'structure']),\r\n })\r\n .optional(),\r\n jump_clones: z.array(\r\n z.looseObject({\r\n jump_clone_id: z.number(),\r\n location_id: z.number(),\r\n location_type: esiEnum(['station', 'structure']),\r\n implants: z.array(z.number()),\r\n name: z.string().optional(),\r\n }),\r\n ),\r\n last_clone_jump_date: z.string().optional(),\r\n last_station_change_date: z.string().optional(),\r\n});\r\n","import { ApiClient } from '../core/ApiClient';\r\nimport { BaseEsiClient } from './BaseEsiClient';\r\nimport { cloneEndpoints } from '../core/endpoints/cloneEndpoints';\r\nimport { CloneInfo } from '../types/api-responses';\r\nimport { PageResult } from '../core/pagination/AsyncPaginationIterator';\r\n\r\nexport class ClonesClient extends BaseEsiClient<typeof cloneEndpoints> {\r\n constructor(client: ApiClient) {\r\n super(client, cloneEndpoints);\r\n }\r\n\r\n /**\r\n * Retrieve a character's clone state, including home station and available jump clones.\r\n *\r\n * @param characterId - The ID of the character whose clone information to retrieve\r\n * @returns Clone information including home location and jump clone details\r\n * @requires Authentication\r\n */\r\n getClones(characterId: number): Promise<CloneInfo> {\r\n return this.api.getClones(characterId);\r\n }\r\n\r\n /**\r\n * Retrieve the implants currently installed in a character's active clone.\r\n *\r\n * @param characterId - The ID of the character whose implants to retrieve\r\n * @returns An array of type IDs for the currently installed implants\r\n * @requires Authentication\r\n */\r\n getImplants(characterId: number): Promise<number[]> {\r\n return this.api.getImplants(characterId);\r\n }\r\n\r\n streamImplants(\r\n characterId: number,\r\n ): AsyncGenerator<PageResult<number>, void, undefined> {\r\n return this.streamEndpoint<number>('getImplants', characterId);\r\n }\r\n}\r\n","import { ApiClient } from '../core/ApiClient';\r\nimport { BaseEsiClient } from './BaseEsiClient';\r\nimport { contactEndpoints } from '../core/endpoints/contactEndpoints';\r\nimport { Contact, ContactLabel } from '../types/api-responses';\r\nimport { PageResult } from '../core/pagination/AsyncPaginationIterator';\r\n\r\nexport class ContactsClient extends BaseEsiClient<typeof contactEndpoints> {\r\n constructor(client: ApiClient) {\r\n super(client, contactEndpoints);\r\n }\r\n\r\n /**\r\n * Retrieve contacts for an alliance.\r\n *\r\n * @param allianceId - The ID of the alliance whose contacts to retrieve\r\n * @returns A list of alliance contacts with standings and contact types\r\n * @requires Authentication\r\n */\r\n getAllianceContacts(allianceId: number): Promise<Contact[]> {\r\n return this.api.getAllianceContacts(allianceId);\r\n }\r\n\r\n /**\r\n * Retrieve custom contact labels for an alliance.\r\n *\r\n * @param allianceId - The ID of the alliance whose contact labels to retrieve\r\n * @returns A list of custom labels used to categorize alliance contacts\r\n * @requires Authentication\r\n */\r\n getAllianceContactLabels(allianceId: number): Promise<ContactLabel[]> {\r\n return this.api.getAllianceContactLabels(allianceId);\r\n }\r\n\r\n /**\r\n * Delete contacts from a character's contact list.\r\n *\r\n * @param characterId - The ID of the character whose contacts to delete\r\n * @param contactIds - An array of contact IDs to remove\r\n * @requires Authentication\r\n */\r\n deleteCharacterContacts(\r\n characterId: number,\r\n contactIds: number[],\r\n ): Promise<void> {\r\n return this.api.deleteCharacterContacts(\r\n characterId,\r\n contactIds.join(','),\r\n ) as Promise<void>;\r\n }\r\n\r\n /**\r\n * Retrieve a character's contact list.\r\n *\r\n * @param characterId - The ID of the character whose contacts to retrieve\r\n * @returns A list of character contacts with standings, labels, and contact types\r\n * @requires Authentication\r\n */\r\n getCharacterContacts(characterId: number): Promise<Contact[]> {\r\n return this.api.getCharacterContacts(characterId);\r\n }\r\n\r\n /**\r\n * Add contacts to a character's contact list via a POST request.\r\n *\r\n * @param characterId - The ID of the character to add contacts for\r\n * @param standing - Standing value for the contacts (-10 to 10)\r\n * @param contactIds - Array of character/corporation/alliance IDs to add\r\n * @returns An array of contact IDs that were successfully added\r\n * @requires Authentication\r\n */\r\n postCharacterContacts(\r\n characterId: number,\r\n standing: number,\r\n contactIds: number[],\r\n ): Promise<number[]> {\r\n return this.api.addContacts(characterId, standing, contactIds) as Promise<\r\n number[]\r\n >;\r\n }\r\n\r\n /**\r\n * Update existing contacts in a character's contact list via a PUT request.\r\n *\r\n * @param characterId - The ID of the character whose contacts to update\r\n * @param standing - New standing value for the contacts (-10 to 10)\r\n * @param contactIds - Array of contact IDs to update\r\n * @requires Authentication\r\n */\r\n putCharacterContacts(\r\n characterId: number,\r\n standing: number,\r\n contactIds: number[],\r\n ): Promise<void> {\r\n return this.api.editContacts(\r\n characterId,\r\n standing,\r\n contactIds,\r\n ) as Promise<void>;\r\n }\r\n\r\n /**\r\n * Retrieve custom contact labels for a character.\r\n *\r\n * @param characterId - The ID of the character whose contact labels to retrieve\r\n * @returns A list of custom labels used to categorize character contacts\r\n * @requires Authentication\r\n */\r\n getCharacterContactLabels(characterId: number): Promise<ContactLabel[]> {\r\n return this.api.getCharacterContactLabels(characterId);\r\n }\r\n\r\n /**\r\n * Retrieve contacts for a corporation.\r\n *\r\n * @param corporationId - The ID of the corporation whose contacts to retrieve\r\n * @returns A list of corporation contacts with standings and contact types\r\n * @requires Authentication\r\n */\r\n getCorporationContacts(corporationId: number): Promise<Contact[]> {\r\n return this.api.getCorporationContacts(corporationId);\r\n }\r\n\r\n /**\r\n * Retrieve custom contact labels for a corporation.\r\n *\r\n * @param corporationId - The ID of the corporation whose contact labels to retrieve\r\n * @returns A list of custom labels used to categorize corporation contacts\r\n * @requires Authentication\r\n */\r\n getCorporationContactLabels(corporationId: number): Promise<ContactLabel[]> {\r\n return this.api.getCorporationContactLabels(corporationId);\r\n }\r\n\r\n streamAllianceContacts(\r\n allianceId: number,\r\n ): AsyncGenerator<PageResult<Contact>, void, undefined> {\r\n return this.streamEndpoint<Contact>('getAllianceContacts', allianceId);\r\n }\r\n\r\n streamAllianceContactLabels(\r\n allianceId: number,\r\n ): AsyncGenerator<PageResult<ContactLabel>, void, undefined> {\r\n return this.streamEndpoint<ContactLabel>(\r\n 'getAllianceContactLabels',\r\n allianceId,\r\n );\r\n }\r\n\r\n streamCharacterContacts(\r\n characterId: number,\r\n ): AsyncGenerator<PageResult<Contact>, void, undefined> {\r\n return this.streamEndpoint<Contact>('getCharacterContacts', characterId);\r\n }\r\n\r\n streamCharacterContactLabels(\r\n characterId: number,\r\n ): AsyncGenerator<PageResult<ContactLabel>, void, undefined> {\r\n return this.streamEndpoint<ContactLabel>(\r\n 'getCharacterContactLabels',\r\n characterId,\r\n );\r\n }\r\n\r\n streamCorporationContacts(\r\n corporationId: number,\r\n ): AsyncGenerator<PageResult<Contact>, void, undefined> {\r\n return this.streamEndpoint<Contact>(\r\n 'getCorporationContacts',\r\n corporationId,\r\n );\r\n }\r\n\r\n streamCorporationContactLabels(\r\n corporationId: number,\r\n ): AsyncGenerator<PageResult<ContactLabel>, void, undefined> {\r\n return this.streamEndpoint<ContactLabel>(\r\n 'getCorporationContactLabels',\r\n corporationId,\r\n );\r\n }\r\n}\r\n","import { z } from 'zod';\nimport { EndpointMap } from './EndpointDefinition';\nimport {\n ContractSchema,\n ContractBidSchema,\n ContractItemSchema,\n} from '../../schemas/contracts';\n\nexport const contractEndpoints = {\n getCharacterContracts: {\n path: 'characters/{characterId}/contracts',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n responseSchema: z.array(ContractSchema),\n },\n getCharacterContractBids: {\n path: 'characters/{characterId}/contracts/{contractId}/bids',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId', 'contractId'],\n responseSchema: z.array(ContractBidSchema),\n },\n getCharacterContractItems: {\n path: 'characters/{characterId}/contracts/{contractId}/items',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId', 'contractId'],\n responseSchema: z.array(ContractItemSchema),\n },\n getCorporationContracts: {\n path: 'corporations/{corporationId}/contracts',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId'],\n responseSchema: z.array(ContractSchema),\n },\n getCorporationContractBids: {\n path: 'corporations/{corporationId}/contracts/{contractId}/bids',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId', 'contractId'],\n responseSchema: z.array(ContractBidSchema),\n },\n getCorporationContractItems: {\n path: 'corporations/{corporationId}/contracts/{contractId}/items',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId', 'contractId'],\n responseSchema: z.array(ContractItemSchema),\n },\n getPublicContracts: {\n path: 'contracts/public/{regionId}',\n method: 'GET',\n requiresAuth: false,\n pathParams: ['regionId'],\n responseSchema: z.array(ContractSchema),\n },\n getPublicContractBids: {\n path: 'contracts/public/bids/{contractId}',\n method: 'GET',\n requiresAuth: false,\n pathParams: ['contractId'],\n responseSchema: z.array(ContractBidSchema),\n },\n getPublicContractItems: {\n path: 'contracts/public/items/{contractId}',\n method: 'GET',\n requiresAuth: false,\n pathParams: ['contractId'],\n responseSchema: z.array(ContractItemSchema),\n },\n} as const satisfies EndpointMap;\n","import { z } from 'zod';\r\nimport { esiEnum } from './esiEnum';\r\n\r\nexport const ContractSchema = z.looseObject({\r\n contract_id: z.number(),\r\n issuer_id: z.number(),\r\n issuer_corporation_id: z.number(),\r\n assignee_id: z.number().optional(),\r\n acceptor_id: z.number().optional(),\r\n start_location_id: z.number().optional(),\r\n end_location_id: z.number().optional(),\r\n type: esiEnum(['unknown', 'item_exchange', 'auction', 'courier', 'loan']),\r\n status: esiEnum([\r\n 'outstanding',\r\n 'in_progress',\r\n 'finished_issuer',\r\n 'finished_contractor',\r\n 'finished',\r\n 'cancelled',\r\n 'rejected',\r\n 'failed',\r\n 'deleted',\r\n 'reversed',\r\n ]).optional(),\r\n title: z.string().optional(),\r\n for_corporation: z.boolean().optional(),\r\n availability: esiEnum([\r\n 'public',\r\n 'personal',\r\n 'corporation',\r\n 'alliance',\r\n ]).optional(),\r\n date_issued: z.string(),\r\n date_expired: z.string(),\r\n date_accepted: z.string().optional(),\r\n date_completed: z.string().optional(),\r\n days_to_complete: z.number().optional(),\r\n price: z.number().optional(),\r\n reward: z.number().optional(),\r\n collateral: z.number().optional(),\r\n buyout: z.number().optional(),\r\n volume: z.number().optional(),\r\n});\r\n\r\nexport const ContractItemSchema = z.looseObject({\r\n record_id: z.number(),\r\n type_id: z.number(),\r\n quantity: z.number(),\r\n raw_quantity: z.number().optional(),\r\n is_singleton: z.boolean(),\r\n is_blueprint_copy: z.boolean().optional(),\r\n is_included: z.boolean(),\r\n});\r\n\r\nexport const ContractBidSchema = z.looseObject({\r\n bid_id: z.number(),\r\n bidder_id: z.number(),\r\n date_bid: z.string(),\r\n amount: z.number(),\r\n});\r\n","import { ApiClient } from '../core/ApiClient';\nimport { BaseEsiClient } from './BaseEsiClient';\nimport { contractEndpoints } from '../core/endpoints/contractEndpoints';\nimport { Contract, ContractBid, ContractItem } from '../types/api-responses';\nimport { PageResult } from '../core/pagination/AsyncPaginationIterator';\n\nexport class ContractsClient extends BaseEsiClient<typeof contractEndpoints> {\n constructor(client: ApiClient) {\n super(client, contractEndpoints);\n }\n\n /**\n * Retrieve contracts issued by or assigned to a character.\n *\n * @param characterId - The ID of the character whose contracts to retrieve\n * @returns A list of contracts with type, status, and pricing information\n * @requires Authentication\n */\n getCharacterContracts(characterId: number): Promise<Contract[]> {\n return this.api.getCharacterContracts(characterId) as Promise<Contract[]>;\n }\n\n /**\n * Retrieve bids placed on an auction contract owned by a character.\n *\n * @param characterId - The ID of the character who owns the contract\n * @param contractId - The ID of the contract whose bids to retrieve\n * @returns A list of bids with bidder, amount, and timestamp\n * @requires Authentication\n */\n getCharacterContractBids(\n characterId: number,\n contractId: number,\n ): Promise<ContractBid[]> {\n return this.api.getCharacterContractBids(\n characterId,\n contractId,\n ) as Promise<ContractBid[]>;\n }\n\n /**\n * Retrieve the items included in a contract owned by a character.\n *\n * @param characterId - The ID of the character who owns the contract\n * @param contractId - The ID of the contract whose items to retrieve\n * @returns A list of items in the contract with type, quantity, and included/excluded status\n * @requires Authentication\n */\n getCharacterContractItems(\n characterId: number,\n contractId: number,\n ): Promise<ContractItem[]> {\n return this.api.getCharacterContractItems(\n characterId,\n contractId,\n ) as Promise<ContractItem[]>;\n }\n\n /**\n * Retrieve publicly available contracts in a specific region.\n *\n * @param regionId - The ID of the region whose public contracts to retrieve\n * @returns A list of public contracts in the region\n */\n getPublicContracts(regionId: number): Promise<Contract[]> {\n return this.api.getPublicContracts(regionId) as Promise<Contract[]>;\n }\n\n /**\n * Retrieve bids placed on a public auction contract.\n *\n * @param contractId - The ID of the public contract whose bids to retrieve\n * @returns A list of bids with bidder, amount, and timestamp\n */\n getPublicContractBids(contractId: number): Promise<ContractBid[]> {\n return this.api.getPublicContractBids(contractId) as Promise<ContractBid[]>;\n }\n\n /**\n * Retrieve the items included in a public contract.\n *\n * @param contractId - The ID of the public contract whose items to retrieve\n * @returns A list of items in the contract with type, quantity, and included/excluded status\n */\n getPublicContractItems(contractId: number): Promise<ContractItem[]> {\n return this.api.getPublicContractItems(contractId) as Promise<\n ContractItem[]\n >;\n }\n\n /**\n * Retrieve contracts issued by or assigned to a corporation.\n *\n * @param corporationId - The ID of the corporation whose contracts to retrieve\n * @returns A list of contracts with type, status, and pricing information\n * @requires Authentication\n */\n getCorporationContracts(corporationId: number): Promise<Contract[]> {\n return this.api.getCorporationContracts(corporationId) as Promise<\n Contract[]\n >;\n }\n\n /**\n * Retrieve bids placed on an auction contract owned by a corporation.\n *\n * @param corporationId - The ID of the corporation that owns the contract\n * @param contractId - The ID of the contract whose bids to retrieve\n * @returns A list of bids with bidder, amount, and timestamp\n * @requires Authentication\n */\n getCorporationContractBids(\n corporationId: number,\n contractId: number,\n ): Promise<ContractBid[]> {\n return this.api.getCorporationContractBids(\n corporationId,\n contractId,\n ) as Promise<ContractBid[]>;\n }\n\n /**\n * Retrieve the items included in a contract owned by a corporation.\n *\n * @param corporationId - The ID of the corporation that owns the contract\n * @param contractId - The ID of the contract whose items to retrieve\n * @returns A list of items in the contract with type, quantity, and included/excluded status\n * @requires Authentication\n */\n getCorporationContractItems(\n corporationId: number,\n contractId: number,\n ): Promise<ContractItem[]> {\n return this.api.getCorporationContractItems(\n corporationId,\n contractId,\n ) as Promise<ContractItem[]>;\n }\n\n streamPublicContracts(\n regionId: number,\n ): AsyncGenerator<PageResult<Contract>, void, undefined> {\n return this.streamEndpoint<Contract>('getPublicContracts', regionId);\n }\n\n streamCharacterContracts(\n characterId: number,\n ): AsyncGenerator<PageResult<Contract>, void, undefined> {\n return this.streamEndpoint<Contract>('getCharacterContracts', characterId);\n }\n\n streamCorporationContracts(\n corporationId: number,\n ): AsyncGenerator<PageResult<Contract>, void, undefined> {\n return this.streamEndpoint<Contract>(\n 'getCorporationContracts',\n corporationId,\n );\n }\n}\n","import { z } from 'zod';\nimport { EndpointMap } from './EndpointDefinition';\nimport {\n CorporationInfoSchema,\n CorporationAllianceHistorySchema,\n ContainerLogSchema,\n CorporationDivisionsSchema,\n CorporationFacilitySchema,\n CorporationMedalSchema,\n CorporationIssuedMedalSchema,\n CorporationMemberTitleSchema,\n CorporationMemberTrackingSchema,\n CorporationMemberRoleSchema,\n CorporationRoleHistorySchema,\n CorporationShareholderSchema,\n CorporationStarbaseSchema,\n CorporationStarbaseDetailSchema,\n CorporationStructureSchema,\n CorporationTitleSchema,\n CorporationIconSchema,\n CorporationStandingSchema,\n CorporationWalletDivisionSchema,\n} from '../../schemas/corporation';\nimport { BlueprintSchema } from '../../schemas/character';\n\nexport const corporationEndpoints = {\n getCorporationInfo: {\n path: 'corporations/{corporationId}',\n method: 'GET',\n requiresAuth: false,\n pathParams: ['corporationId'],\n responseSchema: CorporationInfoSchema,\n },\n getCorporationAllianceHistory: {\n path: 'corporations/{corporationId}/alliancehistory',\n method: 'GET',\n requiresAuth: false,\n pathParams: ['corporationId'],\n responseSchema: z.array(CorporationAllianceHistorySchema),\n },\n getCorporationBlueprints: {\n path: 'corporations/{corporationId}/blueprints',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId'],\n responseSchema: z.array(BlueprintSchema),\n },\n getCorporationAlscLogs: {\n path: 'corporations/{corporationId}/containers/logs',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId'],\n responseSchema: z.array(ContainerLogSchema),\n },\n getCorporationDivisions: {\n path: 'corporations/{corporationId}/divisions',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId'],\n responseSchema: CorporationDivisionsSchema,\n },\n getCorporationFacilities: {\n path: 'corporations/{corporationId}/facilities',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId'],\n responseSchema: z.array(CorporationFacilitySchema),\n },\n getCorporationIcon: {\n path: 'corporations/{corporationId}/icons',\n method: 'GET',\n requiresAuth: false,\n pathParams: ['corporationId'],\n responseSchema: CorporationIconSchema,\n },\n getCorporationMedals: {\n path: 'corporations/{corporationId}/medals',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId'],\n responseSchema: z.array(CorporationMedalSchema),\n },\n getCorporationIssuedMedals: {\n path: 'corporations/{corporationId}/medals/issued',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId'],\n responseSchema: z.array(CorporationIssuedMedalSchema),\n },\n getCorporationMembers: {\n path: 'corporations/{corporationId}/members',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId'],\n responseSchema: z.array(z.number()),\n },\n getCorporationMemberLimit: {\n path: 'corporations/{corporationId}/members/limit',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId'],\n responseSchema: z.number(),\n },\n getCorporationMembersTitles: {\n path: 'corporations/{corporationId}/members/titles',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId'],\n responseSchema: z.array(CorporationMemberTitleSchema),\n },\n getCorporationMemberTracking: {\n path: 'corporations/{corporationId}/membertracking',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId'],\n responseSchema: z.array(CorporationMemberTrackingSchema),\n },\n getCorporationMemberRoles: {\n path: 'corporations/{corporationId}/roles',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId'],\n responseSchema: z.array(CorporationMemberRoleSchema),\n },\n getCorporationMemberRolesHistory: {\n path: 'corporations/{corporationId}/roles/history',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId'],\n responseSchema: z.array(CorporationRoleHistorySchema),\n },\n getCorporationShareholders: {\n path: 'corporations/{corporationId}/shareholders',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId'],\n responseSchema: z.array(CorporationShareholderSchema),\n },\n getCorporationStandings: {\n path: 'corporations/{corporationId}/standings',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId'],\n responseSchema: z.array(CorporationStandingSchema),\n },\n getCorporationStarbases: {\n path: 'corporations/{corporationId}/starbases',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId'],\n responseSchema: z.array(CorporationStarbaseSchema),\n },\n getCorporationStarbaseDetail: {\n path: 'corporations/{corporationId}/starbases/{starbaseId}',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId', 'starbaseId'],\n responseSchema: CorporationStarbaseDetailSchema,\n },\n getCorporationStructures: {\n path: 'corporations/{corporationId}/structures',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId'],\n responseSchema: z.array(CorporationStructureSchema),\n },\n getCorporationTitles: {\n path: 'corporations/{corporationId}/titles',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId'],\n responseSchema: z.array(CorporationTitleSchema),\n },\n getNpcCorporations: {\n path: 'corporations/npccorps',\n method: 'GET',\n requiresAuth: false,\n responseSchema: z.array(z.number()),\n },\n} as const satisfies EndpointMap;\n","import { z } from 'zod';\r\nimport { esiEnum } from './esiEnum';\r\n\r\nexport const CorporationInfoSchema = z.looseObject({\r\n corporation_id: z.number().optional(),\r\n name: z.string(),\r\n ticker: z.string(),\r\n description: z.string().optional(),\r\n url: z.string().optional(),\r\n alliance_id: z.number().optional(),\r\n ceo_id: z.number(),\r\n creator_id: z.number(),\r\n date_founded: z.string().optional(),\r\n faction_id: z.number().optional(),\r\n home_station_id: z.number().optional(),\r\n member_count: z.number(),\r\n shares: z.number().optional(),\r\n tax_rate: z.number(),\r\n war_eligible: z.boolean().optional(),\r\n});\r\n\r\nexport const CorporationAllianceHistorySchema = z.looseObject({\r\n alliance_id: z.number().optional(),\r\n is_deleted: z.boolean().optional(),\r\n record_id: z.number(),\r\n start_date: z.string(),\r\n});\r\n\r\nexport const CorporationMedalSchema = z.looseObject({\r\n medal_id: z.number(),\r\n title: z.string(),\r\n description: z.string(),\r\n creator_id: z.number(),\r\n date: z.string(),\r\n});\r\n\r\nexport const CorporationStarbaseSchema = z.looseObject({\r\n starbase_id: z.number(),\r\n type_id: z.number(),\r\n system_id: z.number(),\r\n state: esiEnum([\r\n 'offline',\r\n 'online',\r\n 'onlining',\r\n 'reinforced',\r\n 'unanchoring',\r\n ]),\r\n moon_id: z.number().optional(),\r\n onlined_since: z.string().optional(),\r\n reinforced_until: z.string().optional(),\r\n unanchor_at: z.string().optional(),\r\n});\r\n\r\nexport const CorporationDivisionsSchema = z.looseObject({\r\n hangar: z\r\n .array(\r\n z.looseObject({\r\n division: z.number(),\r\n name: z.string().optional(),\r\n }),\r\n )\r\n .optional(),\r\n wallet: z\r\n .array(\r\n z.looseObject({\r\n division: z.number(),\r\n name: z.string().optional(),\r\n }),\r\n )\r\n .optional(),\r\n});\r\n\r\nexport const CorporationFacilitySchema = z.looseObject({\r\n facility_id: z.number(),\r\n type_id: z.number(),\r\n system_id: z.number(),\r\n});\r\n\r\nexport const CorporationIssuedMedalSchema = z.looseObject({\r\n medal_id: z.number(),\r\n title: z.string(),\r\n description: z.string(),\r\n character_id: z.number(),\r\n issued_at: z.string(),\r\n issuer_id: z.number(),\r\n reason: z.string(),\r\n status: esiEnum(['private', 'public']),\r\n});\r\n\r\nexport const CorporationMemberTitleSchema = z.looseObject({\r\n character_id: z.number(),\r\n titles: z.array(z.number()),\r\n});\r\n\r\nexport const CorporationMemberTrackingSchema = z.looseObject({\r\n character_id: z.number(),\r\n start_date: z.string(),\r\n base_id: z.number().optional(),\r\n location_id: z.number().optional(),\r\n logoff_date: z.string().optional(),\r\n logon_date: z.string().optional(),\r\n online: z.boolean().optional(),\r\n ship_type_id: z.number().optional(),\r\n});\r\n\r\nexport const CorporationMemberRoleSchema = z.looseObject({\r\n character_id: z.number(),\r\n roles: z.array(z.string()).optional(),\r\n grantable_roles: z.array(z.string()).optional(),\r\n roles_at_hq: z.array(z.string()).optional(),\r\n grantable_roles_at_hq: z.array(z.string()).optional(),\r\n roles_at_base: z.array(z.string()).optional(),\r\n grantable_roles_at_base: z.array(z.string()).optional(),\r\n roles_at_other: z.array(z.string()).optional(),\r\n grantable_roles_at_other: z.array(z.string()).optional(),\r\n});\r\n\r\nexport const CorporationRoleHistorySchema = z.looseObject({\r\n character_id: z.number(),\r\n changed_at: z.string(),\r\n issuer_id: z.number(),\r\n role_type: z.string(),\r\n before: z.array(z.string()),\r\n after: z.array(z.string()),\r\n});\r\n\r\nexport const CorporationShareholderSchema = z.looseObject({\r\n shareholder_id: z.number(),\r\n shareholder_type: esiEnum(['character', 'corporation']),\r\n share_count: z.number(),\r\n});\r\n\r\nexport const CorporationStarbaseDetailSchema = z.looseObject({\r\n state: esiEnum([\r\n 'offline',\r\n 'online',\r\n 'onlining',\r\n 'reinforced',\r\n 'unanchoring',\r\n ]),\r\n fuels: z\r\n .array(\r\n z.looseObject({\r\n type_id: z.number(),\r\n quantity: z.number(),\r\n }),\r\n )\r\n .optional(),\r\n allow_alliance_members: z.boolean().optional(),\r\n allow_corporation_members: z.boolean().optional(),\r\n anchor: z.string().optional(),\r\n attack_if_at_war: z.boolean().optional(),\r\n attack_if_other_security_status_dropping: z.boolean().optional(),\r\n attack_security_status_threshold: z.number().optional(),\r\n attack_standing_threshold: z.number().optional(),\r\n fuel_bay_take: z.string().optional(),\r\n fuel_bay_view: z.string().optional(),\r\n offline: z.string().optional(),\r\n online: z.string().optional(),\r\n unanchor: z.string().optional(),\r\n use_alliance_standings: z.boolean().optional(),\r\n});\r\n\r\nexport const CorporationStructureSchema = z.looseObject({\r\n structure_id: z.number(),\r\n corporation_id: z.number(),\r\n type_id: z.number(),\r\n system_id: z.number(),\r\n profile_id: z.number(),\r\n services: z\r\n .array(\r\n z.looseObject({\r\n name: z.string(),\r\n state: esiEnum(['online', 'offline', 'cleanup']),\r\n }),\r\n )\r\n .optional(),\r\n fuel_expires: z.string().optional(),\r\n name: z.string().optional(),\r\n state: z.string(),\r\n state_timer_start: z.string().optional(),\r\n state_timer_end: z.string().optional(),\r\n unanchors_at: z.string().optional(),\r\n reinforce_hour: z.number().optional(),\r\n next_reinforce_hour: z.number().optional(),\r\n next_reinforce_apply: z.string().optional(),\r\n});\r\n\r\nexport const CorporationTitleSchema = z.looseObject({\r\n title_id: z.number(),\r\n name: z.string().optional(),\r\n roles: z.array(z.string()).optional(),\r\n grantable_roles: z.array(z.string()).optional(),\r\n roles_at_hq: z.array(z.string()).optional(),\r\n grantable_roles_at_hq: z.array(z.string()).optional(),\r\n roles_at_base: z.array(z.string()).optional(),\r\n grantable_roles_at_base: z.array(z.string()).optional(),\r\n roles_at_other: z.array(z.string()).optional(),\r\n grantable_roles_at_other: z.array(z.string()).optional(),\r\n});\r\n\r\nexport const CorporationIconSchema = z.looseObject({\r\n px64x64: z.string().optional(),\r\n px128x128: z.string().optional(),\r\n px256x256: z.string().optional(),\r\n});\r\n\r\nexport { StandingSchema as CorporationStandingSchema } from './common';\r\n\r\nexport const CorporationWalletDivisionSchema = z.looseObject({\r\n division: z.number(),\r\n balance: z.number(),\r\n});\r\n\r\nexport const ContainerLogSchema = z.looseObject({\r\n logged_at: z.string(),\r\n container_id: z.number(),\r\n container_type_id: z.number(),\r\n character_id: z.number(),\r\n location_id: z.number(),\r\n location_flag: z.string(),\r\n action: z.string(),\r\n password_type: esiEnum(['config', 'general']).optional(),\r\n type_id: z.number().optional(),\r\n quantity: z.number().optional(),\r\n old_config_bitmask: z.number().optional(),\r\n new_config_bitmask: z.number().optional(),\r\n});\r\n","import { ApiClient } from '../core/ApiClient';\r\nimport { BaseEsiClient } from './BaseEsiClient';\r\nimport { corporationEndpoints } from '../core/endpoints/corporationEndpoints';\r\nimport {\r\n Blueprint,\r\n CorporationInfo,\r\n CorporationAllianceHistory,\r\n CorporationDivisions,\r\n CorporationFacility,\r\n CorporationIssuedMedal,\r\n CorporationMedal,\r\n CorporationMemberRole,\r\n CorporationMemberTitle,\r\n CorporationMemberTracking,\r\n CorporationRoleHistory,\r\n CorporationShareholder,\r\n CorporationStarbase,\r\n CorporationStarbaseDetail,\r\n CorporationStructure,\r\n CorporationTitle,\r\n ContainerLog,\r\n Standing,\r\n} from '../types/api-responses';\r\nimport { PageResult } from '../core/pagination/AsyncPaginationIterator';\r\n\r\nexport class CorporationsClient extends BaseEsiClient<\r\n typeof corporationEndpoints\r\n> {\r\n constructor(client: ApiClient) {\r\n super(client, corporationEndpoints);\r\n }\r\n\r\n /**\r\n * Retrieve public information about a corporation.\r\n *\r\n * @param corporationId - The ID of the corporation to look up\r\n * @returns Public corporation information including name, ticker, member count, and CEO\r\n */\r\n getCorporationInfo(corporationId: number): Promise<CorporationInfo> {\r\n return this.api.getCorporationInfo(corporationId);\r\n }\r\n\r\n /**\r\n * Retrieve the alliance membership history of a corporation.\r\n *\r\n * @param corporationId - The ID of the corporation whose alliance history to retrieve\r\n * @returns A chronological list of alliances the corporation has been a member of\r\n */\r\n getCorporationAllianceHistory(\r\n corporationId: number,\r\n ): Promise<CorporationAllianceHistory[]> {\r\n return this.api.getCorporationAllianceHistory(corporationId);\r\n }\r\n\r\n /**\r\n * Retrieve blueprints owned by a corporation.\r\n *\r\n * @param corporationId - The ID of the corporation whose blueprints to retrieve\r\n * @returns A list of blueprints with material/time efficiency and run information\r\n * @requires Authentication\r\n */\r\n getCorporationBlueprints(corporationId: number): Promise<Blueprint[]> {\r\n return this.api.getCorporationBlueprints(corporationId);\r\n }\r\n\r\n /**\r\n * Retrieve audit log secure container (ALSC) logs for a corporation.\r\n *\r\n * @param corporationId - The ID of the corporation whose container logs to retrieve\r\n * @returns A list of container access logs with action, character, and timestamp details\r\n * @requires Authentication\r\n */\r\n getCorporationAlscLogs(corporationId: number): Promise<ContainerLog[]> {\r\n return this.api.getCorporationAlscLogs(corporationId);\r\n }\r\n\r\n /**\r\n * Retrieve the hangar and wallet division names for a corporation.\r\n *\r\n * @param corporationId - The ID of the corporation whose divisions to retrieve\r\n * @returns Hangar and wallet division configurations with custom names\r\n * @requires Authentication\r\n */\r\n getCorporationDivisions(\r\n corporationId: number,\r\n ): Promise<CorporationDivisions> {\r\n return this.api.getCorporationDivisions(corporationId);\r\n }\r\n\r\n /**\r\n * Retrieve the industrial facilities owned by a corporation.\r\n *\r\n * @param corporationId - The ID of the corporation whose facilities to retrieve\r\n * @returns A list of corporation-owned facilities with type and solar system information\r\n * @requires Authentication\r\n */\r\n getCorporationFacilities(\r\n corporationId: number,\r\n ): Promise<CorporationFacility[]> {\r\n return this.api.getCorporationFacilities(corporationId);\r\n }\r\n\r\n /**\r\n * Retrieve icon URLs for a corporation at various resolutions.\r\n *\r\n * @param corporationId - The ID of the corporation whose icons to retrieve\r\n * @returns Icon URLs at 64x64, 128x128, and 256x256 resolutions\r\n */\r\n getCorporationIcon(\r\n corporationId: number,\r\n ): Promise<{ px64x64?: string; px128x128?: string; px256x256?: string }> {\r\n return this.api.getCorporationIcon(corporationId);\r\n }\r\n\r\n /**\r\n * Retrieve medals created by a corporation.\r\n *\r\n * @param corporationId - The ID of the corporation whose medals to retrieve\r\n * @returns A list of medals defined by the corporation\r\n * @requires Authentication\r\n */\r\n getCorporationMedals(corporationId: number): Promise<CorporationMedal[]> {\r\n return this.api.getCorporationMedals(corporationId);\r\n }\r\n\r\n /**\r\n * Retrieve medals that have been issued to members by a corporation.\r\n *\r\n * @param corporationId - The ID of the corporation whose issued medals to retrieve\r\n * @returns A list of medals issued to corporation members with recipient and issuer details\r\n * @requires Authentication\r\n */\r\n getCorporationIssuedMedals(\r\n corporationId: number,\r\n ): Promise<CorporationIssuedMedal[]> {\r\n return this.api.getCorporationIssuedMedals(corporationId);\r\n }\r\n\r\n /**\r\n * Retrieve the character IDs of all members in a corporation.\r\n *\r\n * @param corporationId - The ID of the corporation whose members to retrieve\r\n * @returns An array of character IDs for all corporation members\r\n * @requires Authentication\r\n */\r\n getCorporationMembers(corporationId: number): Promise<number[]> {\r\n return this.api.getCorporationMembers(corporationId);\r\n }\r\n\r\n /**\r\n * Retrieve the maximum number of members a corporation can have based on its current skills.\r\n *\r\n * @param corporationId - The ID of the corporation whose member limit to retrieve\r\n * @returns The maximum member count for the corporation\r\n * @requires Authentication\r\n */\r\n getCorporationMemberLimit(corporationId: number): Promise<number> {\r\n return this.api.getCorporationMemberLimit(corporationId);\r\n }\r\n\r\n /**\r\n * Retrieve the titles assigned to each member of a corporation.\r\n *\r\n * @param corporationId - The ID of the corporation whose member titles to retrieve\r\n * @returns A list of members and their assigned title IDs\r\n * @requires Authentication\r\n */\r\n getCorporationMemberTitles(\r\n corporationId: number,\r\n ): Promise<CorporationMemberTitle[]> {\r\n return this.api.getCorporationMembersTitles(corporationId);\r\n }\r\n\r\n /**\r\n * Retrieve tracking information for corporation members including last login and location.\r\n *\r\n * @param corporationId - The ID of the corporation whose member tracking data to retrieve\r\n * @returns A list of members with login times, ship types, and location details\r\n * @requires Authentication\r\n */\r\n getCorporationMemberTracking(\r\n corporationId: number,\r\n ): Promise<CorporationMemberTracking[]> {\r\n return this.api.getCorporationMemberTracking(corporationId);\r\n }\r\n\r\n /**\r\n * Retrieve the roles assigned to each member of a corporation.\r\n *\r\n * @param corporationId - The ID of the corporation whose member roles to retrieve\r\n * @returns A list of members and their assigned roles across all role categories\r\n * @requires Authentication\r\n */\r\n getCorporationRoles(corporationId: number): Promise<CorporationMemberRole[]> {\r\n return this.api.getCorporationMemberRoles(corporationId);\r\n }\r\n\r\n /**\r\n * Retrieve the history of role changes for members of a corporation.\r\n *\r\n * @param corporationId - The ID of the corporation whose role change history to retrieve\r\n * @returns A chronological list of role changes with before/after states and issuer details\r\n * @requires Authentication\r\n */\r\n getCorporationRolesHistory(\r\n corporationId: number,\r\n ): Promise<CorporationRoleHistory[]> {\r\n return this.api.getCorporationMemberRolesHistory(corporationId);\r\n }\r\n\r\n /**\r\n * Retrieve the shareholders of a corporation, including characters and corporations holding shares.\r\n *\r\n * @param corporationId - The ID of the corporation whose shareholders to retrieve\r\n * @returns A list of shareholders with share counts and holder types\r\n * @requires Authentication\r\n */\r\n getCorporationShareholders(\r\n corporationId: number,\r\n ): Promise<CorporationShareholder[]> {\r\n return this.api.getCorporationShareholders(corporationId);\r\n }\r\n\r\n /**\r\n * Retrieve a corporation's standings with NPC factions, corporations, and agents.\r\n *\r\n * @param corporationId - The ID of the corporation whose standings to retrieve\r\n * @returns A list of standings with from_type, from_id, and standing value\r\n * @requires Authentication\r\n */\r\n getCorporationStandings(corporationId: number): Promise<Standing[]> {\r\n return this.api.getCorporationStandings(corporationId);\r\n }\r\n\r\n /**\r\n * Retrieve the list of starbases (POSes) owned by a corporation.\r\n *\r\n * @param corporationId - The ID of the corporation whose starbases to retrieve\r\n * @returns A list of starbases with type, system, and state information\r\n * @requires Authentication\r\n */\r\n getCorporationStarbases(\r\n corporationId: number,\r\n ): Promise<CorporationStarbase[]> {\r\n return this.api.getCorporationStarbases(corporationId);\r\n }\r\n\r\n /**\r\n * Retrieve detailed configuration and fuel information for a specific starbase (POS).\r\n *\r\n * @param corporationId - The ID of the corporation that owns the starbase\r\n * @param starbaseId - The ID of the starbase to retrieve details for\r\n * @returns Detailed starbase information including fuel levels and access settings\r\n * @requires Authentication\r\n */\r\n getCorporationStarbaseDetail(\r\n corporationId: number,\r\n starbaseId: number,\r\n ): Promise<CorporationStarbaseDetail> {\r\n return this.api.getCorporationStarbaseDetail(corporationId, starbaseId);\r\n }\r\n\r\n /**\r\n * Retrieve citadel and other upwell structures owned by a corporation.\r\n *\r\n * @param corporationId - The ID of the corporation whose structures to retrieve\r\n * @returns A list of structures with type, location, state, and service information\r\n * @requires Authentication\r\n */\r\n getCorporationStructures(\r\n corporationId: number,\r\n ): Promise<CorporationStructure[]> {\r\n return this.api.getCorporationStructures(corporationId);\r\n }\r\n\r\n /**\r\n * Retrieve the titles defined by a corporation and their associated roles.\r\n *\r\n * @param corporationId - The ID of the corporation whose titles to retrieve\r\n * @returns A list of corporation titles with names and granted roles\r\n * @requires Authentication\r\n */\r\n getCorporationTitles(corporationId: number): Promise<CorporationTitle[]> {\r\n return this.api.getCorporationTitles(corporationId);\r\n }\r\n\r\n /**\r\n * Retrieve a list of all NPC corporation IDs in EVE Online.\r\n *\r\n * @returns An array of NPC corporation IDs\r\n */\r\n getNpcCorporations(): Promise<number[]> {\r\n return this.api.getNpcCorporations();\r\n }\r\n\r\n streamCorporationAllianceHistory(\r\n corporationId: number,\r\n ): AsyncGenerator<PageResult<CorporationAllianceHistory>, void, undefined> {\r\n return this.streamEndpoint<CorporationAllianceHistory>(\r\n 'getCorporationAllianceHistory',\r\n corporationId,\r\n );\r\n }\r\n\r\n streamCorporationBlueprints(\r\n corporationId: number,\r\n ): AsyncGenerator<PageResult<Blueprint>, void, undefined> {\r\n return this.streamEndpoint<Blueprint>(\r\n 'getCorporationBlueprints',\r\n corporationId,\r\n );\r\n }\r\n\r\n streamCorporationAlscLogs(\r\n corporationId: number,\r\n ): AsyncGenerator<PageResult<ContainerLog>, void, undefined> {\r\n return this.streamEndpoint<ContainerLog>(\r\n 'getCorporationAlscLogs',\r\n corporationId,\r\n );\r\n }\r\n\r\n streamCorporationFacilities(\r\n corporationId: number,\r\n ): AsyncGenerator<PageResult<CorporationFacility>, void, undefined> {\r\n return this.streamEndpoint<CorporationFacility>(\r\n 'getCorporationFacilities',\r\n corporationId,\r\n );\r\n }\r\n\r\n streamCorporationMedals(\r\n corporationId: number,\r\n ): AsyncGenerator<PageResult<CorporationMedal>, void, undefined> {\r\n return this.streamEndpoint<CorporationMedal>(\r\n 'getCorporationMedals',\r\n corporationId,\r\n );\r\n }\r\n\r\n streamCorporationIssuedMedals(\r\n corporationId: number,\r\n ): AsyncGenerator<PageResult<CorporationIssuedMedal>, void, undefined> {\r\n return this.streamEndpoint<CorporationIssuedMedal>(\r\n 'getCorporationIssuedMedals',\r\n corporationId,\r\n );\r\n }\r\n\r\n streamCorporationMembers(\r\n corporationId: number,\r\n ): AsyncGenerator<PageResult<number>, void, undefined> {\r\n return this.streamEndpoint<number>('getCorporationMembers', corporationId);\r\n }\r\n\r\n streamCorporationMemberTitles(\r\n corporationId: number,\r\n ): AsyncGenerator<PageResult<CorporationMemberTitle>, void, undefined> {\r\n return this.streamEndpoint<CorporationMemberTitle>(\r\n 'getCorporationMembersTitles',\r\n corporationId,\r\n );\r\n }\r\n\r\n streamCorporationMemberTracking(\r\n corporationId: number,\r\n ): AsyncGenerator<PageResult<CorporationMemberTracking>, void, undefined> {\r\n return this.streamEndpoint<CorporationMemberTracking>(\r\n 'getCorporationMemberTracking',\r\n corporationId,\r\n );\r\n }\r\n\r\n streamCorporationRoles(\r\n corporationId: number,\r\n ): AsyncGenerator<PageResult<CorporationMemberRole>, void, undefined> {\r\n return this.streamEndpoint<CorporationMemberRole>(\r\n 'getCorporationMemberRoles',\r\n corporationId,\r\n );\r\n }\r\n\r\n streamCorporationRolesHistory(\r\n corporationId: number,\r\n ): AsyncGenerator<PageResult<CorporationRoleHistory>, void, undefined> {\r\n return this.streamEndpoint<CorporationRoleHistory>(\r\n 'getCorporationMemberRolesHistory',\r\n corporationId,\r\n );\r\n }\r\n\r\n streamCorporationShareholders(\r\n corporationId: number,\r\n ): AsyncGenerator<PageResult<CorporationShareholder>, void, undefined> {\r\n return this.streamEndpoint<CorporationShareholder>(\r\n 'getCorporationShareholders',\r\n corporationId,\r\n );\r\n }\r\n\r\n streamCorporationStandings(\r\n corporationId: number,\r\n ): AsyncGenerator<PageResult<Standing>, void, undefined> {\r\n return this.streamEndpoint<Standing>(\r\n 'getCorporationStandings',\r\n corporationId,\r\n );\r\n }\r\n\r\n streamCorporationStarbases(\r\n corporationId: number,\r\n ): AsyncGenerator<PageResult<CorporationStarbase>, void, undefined> {\r\n return this.streamEndpoint<CorporationStarbase>(\r\n 'getCorporationStarbases',\r\n corporationId,\r\n );\r\n }\r\n\r\n streamCorporationStructures(\r\n corporationId: number,\r\n ): AsyncGenerator<PageResult<CorporationStructure>, void, undefined> {\r\n return this.streamEndpoint<CorporationStructure>(\r\n 'getCorporationStructures',\r\n corporationId,\r\n );\r\n }\r\n\r\n streamCorporationTitles(\r\n corporationId: number,\r\n ): AsyncGenerator<PageResult<CorporationTitle>, void, undefined> {\r\n return this.streamEndpoint<CorporationTitle>(\r\n 'getCorporationTitles',\r\n corporationId,\r\n );\r\n }\r\n\r\n streamNpcCorporations(): AsyncGenerator<PageResult<number>, void, undefined> {\r\n return this.streamEndpoint<number>('getNpcCorporations');\r\n }\r\n}\r\n","import { z } from 'zod';\r\nimport { EndpointMap } from './EndpointDefinition';\r\nimport {\r\n CorporationProjectSchema,\r\n CorporationProjectContributionSchema,\r\n CorporationProjectContributorSchema,\r\n} from '../../schemas/corporation-projects';\r\n\r\nexport const corporationProjectEndpoints = {\r\n getCorporationProjects: {\r\n path: 'corporations/{corporationId}/projects',\r\n method: 'GET',\r\n requiresAuth: true,\r\n pathParams: ['corporationId'],\r\n responseSchema: z.array(CorporationProjectSchema),\r\n },\r\n getCorporationProject: {\r\n path: 'corporations/{corporationId}/projects/{projectId}',\r\n method: 'GET',\r\n requiresAuth: true,\r\n pathParams: ['corporationId', 'projectId'],\r\n responseSchema: CorporationProjectSchema,\r\n },\r\n getCorporationProjectContribution: {\r\n path: 'corporations/{corporationId}/projects/{projectId}/contribution/{characterId}',\r\n method: 'GET',\r\n requiresAuth: true,\r\n pathParams: ['corporationId', 'projectId', 'characterId'],\r\n responseSchema: CorporationProjectContributionSchema,\r\n },\r\n getCorporationProjectContributors: {\r\n path: 'corporations/{corporationId}/projects/{projectId}/contributors',\r\n method: 'GET',\r\n requiresAuth: true,\r\n pathParams: ['corporationId', 'projectId'],\r\n responseSchema: z.array(CorporationProjectContributorSchema),\r\n },\r\n} as const satisfies EndpointMap;\r\n","import { z } from 'zod';\r\n\r\nexport const CorporationProjectSchema = z.looseObject({\r\n project_id: z.number(),\r\n state: z.string(),\r\n progress: z.number(),\r\n start_time: z.string(),\r\n finish_time: z.string().optional(),\r\n});\r\n\r\nexport const CorporationProjectContributionSchema = z.looseObject({\r\n character_id: z.number(),\r\n contribution: z.number(),\r\n});\r\n\r\nexport const CorporationProjectContributorSchema = z.looseObject({\r\n character_id: z.number(),\r\n contribution: z.number(),\r\n});\r\n","import { ApiClient } from '../core/ApiClient';\r\nimport { BaseEsiClient } from './BaseEsiClient';\r\nimport { corporationProjectEndpoints } from '../core/endpoints/corporationProjectEndpoints';\r\nimport {\r\n CorporationProject,\r\n CorporationProjectContribution,\r\n CorporationProjectContributor,\r\n} from '../types/api-responses';\r\n\r\nexport class CorporationProjectsClient extends BaseEsiClient<\r\n typeof corporationProjectEndpoints\r\n> {\r\n constructor(client: ApiClient) {\r\n super(client, corporationProjectEndpoints);\r\n }\r\n\r\n /**\r\n * Retrieves a list of projects for a corporation.\r\n *\r\n * @param corporationId - The ID of the corporation\r\n * @returns An array of corporation projects\r\n * @requires Authentication\r\n */\r\n getCorporationProjects(corporationId: number): Promise<CorporationProject[]> {\r\n return this.api.getCorporationProjects(corporationId);\r\n }\r\n\r\n /**\r\n * Retrieves details of a specific corporation project.\r\n *\r\n * @param corporationId - The ID of the corporation\r\n * @param projectId - The ID of the project\r\n * @returns The corporation project details\r\n * @requires Authentication\r\n */\r\n getCorporationProject(\r\n corporationId: number,\r\n projectId: number,\r\n ): Promise<CorporationProject> {\r\n return this.api.getCorporationProject(corporationId, projectId);\r\n }\r\n\r\n /**\r\n * Retrieves a character's contribution to a specific corporation project.\r\n *\r\n * @param corporationId - The ID of the corporation\r\n * @param projectId - The ID of the project\r\n * @param characterId - The ID of the character\r\n * @returns The character's contribution details\r\n * @requires Authentication\r\n */\r\n getCorporationProjectContribution(\r\n corporationId: number,\r\n projectId: number,\r\n characterId: number,\r\n ): Promise<CorporationProjectContribution> {\r\n return this.api.getCorporationProjectContribution(\r\n corporationId,\r\n projectId,\r\n characterId,\r\n );\r\n }\r\n\r\n /**\r\n * Retrieves a list of contributors to a specific corporation project.\r\n *\r\n * @param corporationId - The ID of the corporation\r\n * @param projectId - The ID of the project\r\n * @returns An array of project contributors\r\n * @requires Authentication\r\n */\r\n getCorporationProjectContributors(\r\n corporationId: number,\r\n projectId: number,\r\n ): Promise<CorporationProjectContributor[]> {\r\n return this.api.getCorporationProjectContributors(corporationId, projectId);\r\n }\r\n}\r\n","import { z } from 'zod';\nimport { EndpointMap } from './EndpointDefinition';\nimport {\n DogmaAttributeSchema,\n DogmaEffectSchema,\n DogmaDynamicItemSchema,\n} from '../../schemas/dogma';\n\nexport const dogmaEndpoints = {\n getAttributes: {\n path: 'dogma/attributes',\n method: 'GET',\n requiresAuth: false,\n responseSchema: z.array(z.number()),\n },\n getAttributeById: {\n path: 'dogma/attributes/{attributeId}',\n method: 'GET',\n requiresAuth: false,\n pathParams: ['attributeId'],\n responseSchema: DogmaAttributeSchema,\n },\n getEffects: {\n path: 'dogma/effects',\n method: 'GET',\n requiresAuth: false,\n responseSchema: z.array(z.number()),\n },\n getEffectById: {\n path: 'dogma/effects/{effectId}',\n method: 'GET',\n requiresAuth: false,\n pathParams: ['effectId'],\n responseSchema: DogmaEffectSchema,\n },\n getDynamicItemInfo: {\n path: 'dogma/dynamic/items/{typeId}/{itemId}',\n method: 'GET',\n requiresAuth: false,\n pathParams: ['typeId', 'itemId'],\n responseSchema: DogmaDynamicItemSchema,\n },\n} as const satisfies EndpointMap;\n","import { z } from 'zod';\r\n\r\nexport const DogmaAttributeSchema = z.looseObject({\r\n attribute_id: z.number(),\r\n name: z.string(),\r\n description: z.string().optional(),\r\n icon_id: z.number().optional(),\r\n default_value: z.number().optional(),\r\n published: z.boolean().optional(),\r\n display_name: z.string().optional(),\r\n unit_id: z.number().optional(),\r\n stackable: z.boolean().optional(),\r\n high_is_good: z.boolean().optional(),\r\n});\r\n\r\nexport const DogmaEffectSchema = z.looseObject({\r\n effect_id: z.number(),\r\n name: z.string(),\r\n description: z.string().optional(),\r\n icon_id: z.number().optional(),\r\n display_name: z.string().optional(),\r\n published: z.boolean().optional(),\r\n effect_category: z.number().optional(),\r\n is_assistance: z.boolean().optional(),\r\n is_offensive: z.boolean().optional(),\r\n is_warp_safe: z.boolean().optional(),\r\n disallow_auto_repeat: z.boolean().optional(),\r\n discharge_attribute_id: z.number().optional(),\r\n duration_attribute_id: z.number().optional(),\r\n electronic_chance: z.boolean().optional(),\r\n falloff_attribute_id: z.number().optional(),\r\n modifiers: z\r\n .array(\r\n z.looseObject({\r\n domain: z.string().optional(),\r\n effect_id: z.number().optional(),\r\n func: z.string(),\r\n modified_attribute_id: z.number().optional(),\r\n modifying_attribute_id: z.number().optional(),\r\n operator: z.number().optional(),\r\n }),\r\n )\r\n .optional(),\r\n post_expression: z.number().optional(),\r\n pre_expression: z.number().optional(),\r\n range_attribute_id: z.number().optional(),\r\n range_chance: z.boolean().optional(),\r\n tracking_speed_attribute_id: z.number().optional(),\r\n});\r\n\r\nexport const DogmaDynamicItemSchema = z.looseObject({\r\n created_by: z.number(),\r\n dogma_attributes: z.array(\r\n z.looseObject({\r\n attribute_id: z.number(),\r\n value: z.number(),\r\n }),\r\n ),\r\n dogma_effects: z.array(\r\n z.looseObject({\r\n effect_id: z.number(),\r\n is_default: z.boolean(),\r\n }),\r\n ),\r\n mutator_type_id: z.number(),\r\n source_type_id: z.number(),\r\n});\r\n","import { ApiClient } from '../core/ApiClient';\nimport { BaseEsiClient } from './BaseEsiClient';\nimport { dogmaEndpoints } from '../core/endpoints/dogmaEndpoints';\nimport {\n DogmaAttribute,\n DogmaEffect,\n DogmaDynamicItem,\n} from '../types/api-responses';\n\nexport class DogmaClient extends BaseEsiClient<typeof dogmaEndpoints> {\n constructor(client: ApiClient) {\n super(client, dogmaEndpoints);\n }\n\n /**\n * Retrieves a list of all dogma attribute IDs.\n *\n * @returns An array of dogma attribute IDs\n */\n getAttributes(): Promise<number[]> {\n return this.api.getAttributes() as Promise<number[]>;\n }\n\n /**\n * Retrieves detailed information about a specific dogma attribute.\n *\n * @param attributeId - The ID of the dogma attribute to look up\n * @returns Detailed information about the dogma attribute\n */\n getAttributeById(attributeId: number): Promise<DogmaAttribute> {\n return this.api.getAttributeById(attributeId) as Promise<DogmaAttribute>;\n }\n\n /**\n * Retrieves the dynamic dogma information for a specific mutated item, including its modified attributes.\n *\n * @param typeId - The type ID of the item\n * @param itemId - The item ID of the specific dynamic item\n * @returns Dynamic dogma information for the mutated item\n */\n getDynamicItemInfo(\n typeId: number,\n itemId: number,\n ): Promise<DogmaDynamicItem> {\n return this.api.getDynamicItemInfo(\n typeId,\n itemId,\n ) as Promise<DogmaDynamicItem>;\n }\n\n /**\n * Retrieves a list of all dogma effect IDs.\n *\n * @returns An array of dogma effect IDs\n */\n getEffects(): Promise<number[]> {\n return this.api.getEffects() as Promise<number[]>;\n }\n\n /**\n * Retrieves detailed information about a specific dogma effect.\n *\n * @param effectId - The ID of the dogma effect to look up\n * @returns Detailed information about the dogma effect\n */\n getEffectById(effectId: number): Promise<DogmaEffect> {\n return this.api.getEffectById(effectId) as Promise<DogmaEffect>;\n }\n}\n","import { z } from 'zod';\nimport { EndpointMap } from './EndpointDefinition';\nimport {\n FactionWarfareStatsSchema,\n FactionWarfareCharacterStatsSchema,\n FactionWarfareSystemSchema,\n FactionWarfareWarSchema,\n FactionWarfareLeaderboardSchema,\n FactionWarfareCorporationStatsSchema,\n} from '../../schemas/faction-warfare';\n\nexport const factionEndpoints = {\n getCharacterStats: {\n path: 'characters/{characterId}/fw/stats',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n responseSchema: FactionWarfareCharacterStatsSchema,\n },\n getCorporationStats: {\n path: 'corporations/{corporationId}/fw/stats',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId'],\n responseSchema: FactionWarfareCorporationStatsSchema,\n },\n getOverall: {\n path: 'fw/leaderboards',\n method: 'GET',\n requiresAuth: false,\n responseSchema: FactionWarfareLeaderboardSchema,\n },\n getCharacters: {\n path: 'fw/leaderboards/characters',\n method: 'GET',\n requiresAuth: false,\n responseSchema: FactionWarfareLeaderboardSchema,\n },\n getCorporations: {\n path: 'fw/leaderboards/corporations',\n method: 'GET',\n requiresAuth: false,\n responseSchema: FactionWarfareLeaderboardSchema,\n },\n getStats: {\n path: 'fw/stats',\n method: 'GET',\n requiresAuth: false,\n responseSchema: z.array(FactionWarfareStatsSchema),\n },\n getSystems: {\n path: 'fw/systems',\n method: 'GET',\n requiresAuth: false,\n responseSchema: z.array(FactionWarfareSystemSchema),\n },\n getWars: {\n path: 'fw/wars',\n method: 'GET',\n requiresAuth: false,\n responseSchema: z.array(FactionWarfareWarSchema),\n },\n} as const satisfies EndpointMap;\n","import { z } from 'zod';\r\nimport { esiEnum } from './esiEnum';\r\n\r\nexport const FactionWarfareStatsSchema = z.looseObject({\r\n faction_id: z.number(),\r\n pilots: z.number(),\r\n systems_controlled: z.number(),\r\n kills: z.looseObject({\r\n yesterday: z.number(),\r\n last_week: z.number(),\r\n total: z.number(),\r\n }),\r\n victory_points: z.looseObject({\r\n yesterday: z.number(),\r\n last_week: z.number(),\r\n total: z.number(),\r\n }),\r\n});\r\n\r\nexport const FactionWarfareCharacterStatsSchema = z.looseObject({\r\n faction_id: z.number().optional(),\r\n enlisted_on: z.string().optional(),\r\n current_rank: z.number().optional(),\r\n highest_rank: z.number().optional(),\r\n kills: z.looseObject({\r\n yesterday: z.number(),\r\n last_week: z.number(),\r\n total: z.number(),\r\n }),\r\n victory_points: z.looseObject({\r\n yesterday: z.number(),\r\n last_week: z.number(),\r\n total: z.number(),\r\n }),\r\n});\r\n\r\nexport const FactionWarfareSystemSchema = z.looseObject({\r\n solar_system_id: z.number(),\r\n owner_faction_id: z.number(),\r\n occupier_faction_id: z.number(),\r\n contested: esiEnum(['captured', 'contested', 'uncontested', 'vulnerable']),\r\n victory_points: z.number(),\r\n victory_points_threshold: z.number(),\r\n});\r\n\r\nexport const FactionWarfareWarSchema = z.looseObject({\r\n faction_id: z.number(),\r\n against_id: z.number(),\r\n});\r\n\r\nexport const FactionWarfareLeaderboardSchema = z.looseObject({\r\n kills: z.looseObject({\r\n yesterday: z.array(\r\n z.looseObject({\r\n amount: z.number(),\r\n id: z.number().optional(),\r\n }),\r\n ),\r\n last_week: z.array(\r\n z.looseObject({\r\n amount: z.number(),\r\n id: z.number().optional(),\r\n }),\r\n ),\r\n active_total: z.array(\r\n z.looseObject({\r\n amount: z.number(),\r\n id: z.number().optional(),\r\n }),\r\n ),\r\n }),\r\n victory_points: z.looseObject({\r\n yesterday: z.array(\r\n z.looseObject({\r\n amount: z.number(),\r\n id: z.number().optional(),\r\n }),\r\n ),\r\n last_week: z.array(\r\n z.looseObject({\r\n amount: z.number(),\r\n id: z.number().optional(),\r\n }),\r\n ),\r\n active_total: z.array(\r\n z.looseObject({\r\n amount: z.number(),\r\n id: z.number().optional(),\r\n }),\r\n ),\r\n }),\r\n});\r\n\r\nexport const FactionWarfareCorporationStatsSchema = z.looseObject({\r\n faction_id: z.number().optional(),\r\n enlisted_on: z.string().optional(),\r\n pilots: z.number().optional(),\r\n kills: z.looseObject({\r\n yesterday: z.number(),\r\n last_week: z.number(),\r\n total: z.number(),\r\n }),\r\n victory_points: z.looseObject({\r\n yesterday: z.number(),\r\n last_week: z.number(),\r\n total: z.number(),\r\n }),\r\n});\r\n","import { ApiClient } from '../core/ApiClient';\nimport { BaseEsiClient } from './BaseEsiClient';\nimport { factionEndpoints } from '../core/endpoints/factionEndpoints';\nimport {\n FactionWarfareStats,\n FactionWarfareCharacterStats,\n FactionWarfareCorporationStats,\n FactionWarfareLeaderboard,\n FactionWarfareSystem,\n FactionWarfareWar,\n} from '../types/api-responses';\n\nexport class FactionClient extends BaseEsiClient<typeof factionEndpoints> {\n constructor(client: ApiClient) {\n super(client, factionEndpoints);\n }\n\n /**\n * Retrieves the top characters in faction warfare leaderboards.\n *\n * @returns Faction warfare character leaderboard rankings\n */\n getLeaderboardsCharacters(): Promise<FactionWarfareLeaderboard> {\n return this.api.getCharacters() as Promise<FactionWarfareLeaderboard>;\n }\n\n /**\n * Retrieves the top corporations in faction warfare leaderboards.\n *\n * @returns Faction warfare corporation leaderboard rankings\n */\n getLeaderboardsCorporations(): Promise<FactionWarfareLeaderboard> {\n return this.api.getCorporations() as Promise<FactionWarfareLeaderboard>;\n }\n\n /**\n * Retrieves the overall faction warfare leaderboards across all factions.\n *\n * @returns Overall faction warfare leaderboard rankings\n */\n getLeaderboardsOverall(): Promise<FactionWarfareLeaderboard> {\n return this.api.getOverall() as Promise<FactionWarfareLeaderboard>;\n }\n\n /**\n * Retrieves faction warfare statistics for all factions, including kill and victory point totals.\n *\n * @returns An array of per-faction warfare statistics\n */\n getStats(): Promise<FactionWarfareStats[]> {\n return this.api.getStats() as Promise<FactionWarfareStats[]>;\n }\n\n /**\n * Retrieves faction warfare statistics for a specific character, including enlistment info and kill counts.\n *\n * @param characterId - The ID of the character\n * @returns Faction warfare statistics for the character\n * @requires Authentication\n */\n getCharacterStats(\n characterId: number,\n ): Promise<FactionWarfareCharacterStats> {\n return this.api.getCharacterStats(\n characterId,\n ) as Promise<FactionWarfareCharacterStats>;\n }\n\n /**\n * Retrieves faction warfare statistics for a specific corporation, including kill counts and victory points.\n *\n * @param corporationId - The ID of the corporation\n * @returns Faction warfare statistics for the corporation\n * @requires Authentication\n */\n getCorporationStats(\n corporationId: number,\n ): Promise<FactionWarfareCorporationStats> {\n return this.api.getCorporationStats(\n corporationId,\n ) as Promise<FactionWarfareCorporationStats>;\n }\n\n /**\n * Retrieves the current ownership and contested status of all faction warfare systems.\n *\n * @returns An array of faction warfare system statuses\n */\n getSystems(): Promise<FactionWarfareSystem[]> {\n return this.api.getSystems() as Promise<FactionWarfareSystem[]>;\n }\n\n /**\n * Retrieves the list of active faction warfare wars, showing which factions are fighting each other.\n *\n * @returns An array of active faction warfare wars\n */\n getWars(): Promise<FactionWarfareWar[]> {\n return this.api.getWars() as Promise<FactionWarfareWar[]>;\n }\n}\n","import { z } from 'zod';\nimport { EndpointMap } from './EndpointDefinition';\nimport { FittingSchema } from '../../schemas/fittings';\n\nexport const fittingEndpoints = {\n getFittings: {\n path: 'characters/{characterId}/fittings',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n responseSchema: z.array(FittingSchema),\n },\n createFitting: {\n path: 'characters/{characterId}/fittings',\n method: 'POST',\n requiresAuth: true,\n pathParams: ['characterId'],\n hasBody: true,\n },\n deleteFitting: {\n path: 'characters/{characterId}/fittings/{fittingId}',\n method: 'DELETE',\n requiresAuth: true,\n pathParams: ['characterId', 'fittingId'],\n },\n} as const satisfies EndpointMap;\n","import { z } from 'zod';\n\nexport const FittingSchema = z.looseObject({\n fitting_id: z.number(),\n name: z.string(),\n description: z.string(),\n ship_type_id: z.number(),\n items: z.array(\n z.looseObject({\n type_id: z.number(),\n flag: z.union([z.number(), z.string()]),\n quantity: z.number(),\n }),\n ),\n});\n","import { ApiClient } from '../core/ApiClient';\r\nimport { BaseEsiClient } from './BaseEsiClient';\r\nimport { fittingEndpoints } from '../core/endpoints/fittingEndpoints';\r\nimport { Fitting } from '../types/api-responses';\r\nimport { PageResult } from '../core/pagination/AsyncPaginationIterator';\r\n\r\nexport class FittingsClient extends BaseEsiClient<typeof fittingEndpoints> {\r\n constructor(client: ApiClient) {\r\n super(client, fittingEndpoints);\r\n }\r\n\r\n /**\r\n * Retrieves all saved ship fittings for a character.\r\n *\r\n * @param characterId - The ID of the character\r\n * @returns An array of the character's saved fittings\r\n * @requires Authentication\r\n */\r\n getFittings(characterId: number): Promise<Fitting[]> {\r\n return this.api.getFittings(characterId);\r\n }\r\n\r\n /**\r\n * Creates a new saved ship fitting for a character via POST.\r\n *\r\n * @param characterId - The ID of the character\r\n * @param fittingData - The fitting details including ship type and module layout\r\n * @returns The ID of the newly created fitting\r\n * @requires Authentication\r\n */\r\n createFitting(\r\n characterId: number,\r\n fittingData: object,\r\n ): Promise<{ fitting_id: number }> {\r\n return this.api.createFitting(characterId, fittingData) as Promise<{\r\n fitting_id: number;\r\n }>;\r\n }\r\n\r\n /**\r\n * Deletes a saved ship fitting for a character.\r\n *\r\n * @param characterId - The ID of the character\r\n * @param fittingId - The ID of the fitting to delete\r\n * @requires Authentication\r\n */\r\n deleteFitting(characterId: number, fittingId: number): Promise<void> {\r\n return this.api.deleteFitting(characterId, fittingId) as Promise<void>;\r\n }\r\n\r\n streamFittings(\r\n characterId: number,\r\n ): AsyncGenerator<PageResult<Fitting>, void, undefined> {\r\n return this.streamEndpoint<Fitting>('getFittings', characterId);\r\n }\r\n}\r\n","import { z } from 'zod';\r\nimport { EndpointMap } from './EndpointDefinition';\r\nimport {\r\n FleetInfoSchema,\r\n FleetMemberSchema,\r\n FleetWingSchema,\r\n CharacterFleetInfoSchema,\r\n} from '../../schemas/fleet';\r\n\r\nexport const fleetEndpoints = {\r\n getCharacterFleetInfo: {\r\n path: 'characters/{characterId}/fleet',\r\n method: 'GET',\r\n requiresAuth: true,\r\n pathParams: ['characterId'],\r\n responseSchema: CharacterFleetInfoSchema,\r\n },\r\n getFleetInfo: {\r\n path: 'fleets/{fleetId}',\r\n method: 'GET',\r\n requiresAuth: true,\r\n pathParams: ['fleetId'],\r\n responseSchema: FleetInfoSchema,\r\n },\r\n updateFleet: {\r\n path: 'fleets/{fleetId}',\r\n method: 'PUT',\r\n requiresAuth: true,\r\n pathParams: ['fleetId'],\r\n hasBody: true,\r\n requestSchema: z.looseObject({\r\n is_free_move: z.boolean().optional(),\r\n motd: z.string().optional(),\r\n }),\r\n },\r\n getFleetMembers: {\r\n path: 'fleets/{fleetId}/members',\r\n method: 'GET',\r\n requiresAuth: true,\r\n pathParams: ['fleetId'],\r\n responseSchema: z.array(FleetMemberSchema),\r\n },\r\n createFleetInvitation: {\r\n path: 'fleets/{fleetId}/members/',\r\n method: 'POST',\r\n requiresAuth: true,\r\n pathParams: ['fleetId'],\r\n hasBody: true,\r\n },\r\n kickFleetMember: {\r\n path: 'fleets/{fleetId}/members/{memberId}/',\r\n method: 'DELETE',\r\n requiresAuth: true,\r\n pathParams: ['fleetId', 'memberId'],\r\n },\r\n moveFleetMember: {\r\n path: 'fleets/{fleetId}/members/{memberId}/',\r\n method: 'PUT',\r\n requiresAuth: true,\r\n pathParams: ['fleetId', 'memberId'],\r\n hasBody: true,\r\n },\r\n deleteFleetSquad: {\r\n path: 'fleets/{fleetId}/squads/{squadId}/',\r\n method: 'DELETE',\r\n requiresAuth: true,\r\n pathParams: ['fleetId', 'squadId'],\r\n },\r\n renameFleetSquad: {\r\n path: 'fleets/{fleetId}/squads/{squadId}/',\r\n method: 'PUT',\r\n requiresAuth: true,\r\n pathParams: ['fleetId', 'squadId'],\r\n bodyBuilder: (name: string) => ({ name }),\r\n },\r\n getFleetWings: {\r\n path: 'fleets/{fleetId}/wings/',\r\n method: 'GET',\r\n requiresAuth: true,\r\n pathParams: ['fleetId'],\r\n responseSchema: z.array(FleetWingSchema),\r\n },\r\n createFleetWing: {\r\n path: 'fleets/{fleetId}/wings/',\r\n method: 'POST',\r\n requiresAuth: true,\r\n pathParams: ['fleetId'],\r\n hasBody: true,\r\n },\r\n deleteFleetWing: {\r\n path: 'fleets/{fleetId}/wings/{wingId}/',\r\n method: 'DELETE',\r\n requiresAuth: true,\r\n pathParams: ['fleetId', 'wingId'],\r\n },\r\n renameFleetWing: {\r\n path: 'fleets/{fleetId}/wings/{wingId}/',\r\n method: 'PUT',\r\n requiresAuth: true,\r\n pathParams: ['fleetId', 'wingId'],\r\n bodyBuilder: (name: string) => ({ name }),\r\n },\r\n createFleetSquad: {\r\n path: 'fleets/{fleetId}/wings/{wingId}/squads/',\r\n method: 'POST',\r\n requiresAuth: true,\r\n pathParams: ['fleetId', 'wingId'],\r\n },\r\n} as const satisfies EndpointMap;\r\n","import { z } from 'zod';\r\nimport { esiEnum } from './esiEnum';\r\n\r\nexport const FleetInfoSchema = z.looseObject({\r\n fleet_id: z.number().optional(),\r\n fleet_boss_id: z.number().optional(),\r\n is_free_move: z.boolean(),\r\n is_registered: z.boolean(),\r\n is_voice_enabled: z.boolean(),\r\n motd: z.string(),\r\n});\r\n\r\nexport const FleetMemberSchema = z.looseObject({\r\n character_id: z.number(),\r\n ship_type_id: z.number(),\r\n wing_id: z.number(),\r\n squad_id: z.number(),\r\n role: esiEnum([\r\n 'fleet_commander',\r\n 'wing_commander',\r\n 'squad_commander',\r\n 'squad_member',\r\n ]),\r\n role_name: z.string(),\r\n join_time: z.string(),\r\n takes_fleet_warp: z.boolean(),\r\n solar_system_id: z.number(),\r\n station_id: z.number().optional(),\r\n});\r\n\r\nexport const FleetWingSchema = z.looseObject({\r\n id: z.number(),\r\n name: z.string(),\r\n squads: z.array(\r\n z.looseObject({\r\n id: z.number(),\r\n name: z.string(),\r\n }),\r\n ),\r\n});\r\n\r\nexport const CharacterFleetInfoSchema = z.looseObject({\r\n fleet_id: z.number(),\r\n fleet_boss_id: z.number().optional(),\r\n role: esiEnum([\r\n 'fleet_commander',\r\n 'wing_commander',\r\n 'squad_commander',\r\n 'squad_member',\r\n ]),\r\n squad_id: z.number(),\r\n wing_id: z.number(),\r\n});\r\n","import { ApiClient } from '../core/ApiClient';\r\nimport { BaseEsiClient } from './BaseEsiClient';\r\nimport { fleetEndpoints } from '../core/endpoints/fleetEndpoints';\r\nimport {\r\n CharacterFleetInfo,\r\n FleetInfo,\r\n FleetMember,\r\n FleetWing,\r\n} from '../types/api-responses';\r\nimport { PageResult } from '../core/pagination/AsyncPaginationIterator';\r\n\r\nexport class FleetClient extends BaseEsiClient<typeof fleetEndpoints> {\r\n constructor(client: ApiClient) {\r\n super(client, fleetEndpoints);\r\n }\r\n\r\n /**\r\n * Retrieves the fleet that a character is currently in, including their role and wing/squad assignment.\r\n *\r\n * @param characterId - The ID of the character\r\n * @returns Fleet membership information for the character\r\n * @requires Authentication\r\n */\r\n getCharacterFleetInfo(characterId: number): Promise<CharacterFleetInfo> {\r\n return this.api.getCharacterFleetInfo(characterId);\r\n }\r\n\r\n /**\r\n * Retrieves detailed information about a fleet, including its MOTD and free-move setting.\r\n *\r\n * @param fleetId - The ID of the fleet\r\n * @returns Detailed fleet information\r\n * @requires Authentication\r\n */\r\n getFleetInformation(fleetId: number): Promise<FleetInfo> {\r\n return this.api.getFleetInfo(fleetId);\r\n }\r\n\r\n /**\r\n * Updates fleet settings such as the MOTD and free-move toggle via PUT.\r\n *\r\n * @param fleetId - The ID of the fleet\r\n * @param body - The fleet settings to update\r\n * @requires Authentication\r\n */\r\n updateFleet(fleetId: number, body: object): Promise<void> {\r\n return this.api.updateFleet(fleetId, body) as Promise<void>;\r\n }\r\n\r\n /**\r\n * Retrieves all current members of a fleet, including their ship types and roles.\r\n *\r\n * @param fleetId - The ID of the fleet\r\n * @returns An array of fleet members\r\n * @requires Authentication\r\n */\r\n getFleetMembers(fleetId: number): Promise<FleetMember[]> {\r\n return this.api.getFleetMembers(fleetId);\r\n }\r\n\r\n /**\r\n * Sends an invitation to a character to join a fleet via POST.\r\n *\r\n * @param fleetId - The ID of the fleet\r\n * @param body - The invitation details including the character to invite and their role\r\n * @requires Authentication\r\n */\r\n createFleetInvitation(fleetId: number, body: object): Promise<void> {\r\n return this.api.createFleetInvitation(fleetId, body) as Promise<void>;\r\n }\r\n\r\n /**\r\n * Kicks a member from a fleet.\r\n *\r\n * @param fleetId - The ID of the fleet\r\n * @param memberId - The character ID of the member to kick\r\n * @requires Authentication\r\n */\r\n kickFleetMember(fleetId: number, memberId: number): Promise<void> {\r\n return this.api.kickFleetMember(fleetId, memberId) as Promise<void>;\r\n }\r\n\r\n /**\r\n * Moves a fleet member to a different wing, squad, or role via PUT.\r\n *\r\n * @param fleetId - The ID of the fleet\r\n * @param memberId - The character ID of the member to move\r\n * @param body - The target role, wing, and/or squad assignment\r\n * @requires Authentication\r\n */\r\n moveFleetMember(\r\n fleetId: number,\r\n memberId: number,\r\n body: object,\r\n ): Promise<void> {\r\n return this.api.moveFleetMember(fleetId, memberId, body) as Promise<void>;\r\n }\r\n\r\n /**\r\n * Deletes a squad from a fleet.\r\n *\r\n * @param fleetId - The ID of the fleet\r\n * @param squadId - The ID of the squad to delete\r\n * @requires Authentication\r\n */\r\n deleteFleetSquad(fleetId: number, squadId: number): Promise<void> {\r\n return this.api.deleteFleetSquad(fleetId, squadId) as Promise<void>;\r\n }\r\n\r\n /**\r\n * Renames a squad within a fleet via PUT.\r\n *\r\n * @param fleetId - The ID of the fleet\r\n * @param squadId - The ID of the squad to rename\r\n * @param name - The new name for the squad (max 10 characters)\r\n * @requires Authentication\r\n */\r\n renameFleetSquad(\r\n fleetId: number,\r\n squadId: number,\r\n name: string,\r\n ): Promise<void> {\r\n if (name.length > 10) {\r\n return Promise.reject(\r\n new Error(\r\n `Fleet squad name \"${name}\" exceeds ESI maximum of 10 characters`,\r\n ),\r\n );\r\n }\r\n return this.api.renameFleetSquad(fleetId, squadId, name) as Promise<void>;\r\n }\r\n\r\n /**\r\n * Retrieves all wings and their squads for a fleet.\r\n *\r\n * @param fleetId - The ID of the fleet\r\n * @returns An array of fleet wings with their nested squads\r\n * @requires Authentication\r\n */\r\n getFleetWings(fleetId: number): Promise<FleetWing[]> {\r\n return this.api.getFleetWings(fleetId);\r\n }\r\n\r\n /**\r\n * Creates a new wing in a fleet via POST.\r\n *\r\n * @param fleetId - The ID of the fleet\r\n * @param body - The wing creation details\r\n * @returns The ID of the newly created wing\r\n * @requires Authentication\r\n */\r\n createFleetWing(fleetId: number, body: object): Promise<{ wing_id: number }> {\r\n return this.api.createFleetWing(fleetId, body) as Promise<{\r\n wing_id: number;\r\n }>;\r\n }\r\n\r\n /**\r\n * Deletes a wing from a fleet, along with all its squads.\r\n *\r\n * @param fleetId - The ID of the fleet\r\n * @param wingId - The ID of the wing to delete\r\n * @requires Authentication\r\n */\r\n deleteFleetWing(fleetId: number, wingId: number): Promise<void> {\r\n return this.api.deleteFleetWing(fleetId, wingId) as Promise<void>;\r\n }\r\n\r\n /**\r\n * Renames a wing within a fleet via PUT.\r\n *\r\n * @param fleetId - The ID of the fleet\r\n * @param wingId - The ID of the wing to rename\r\n * @param name - The new name for the wing (max 10 characters)\r\n * @requires Authentication\r\n */\r\n renameFleetWing(\r\n fleetId: number,\r\n wingId: number,\r\n name: string,\r\n ): Promise<void> {\r\n if (name.length > 10) {\r\n return Promise.reject(\r\n new Error(\r\n `Fleet wing name \"${name}\" exceeds ESI maximum of 10 characters`,\r\n ),\r\n );\r\n }\r\n return this.api.renameFleetWing(fleetId, wingId, name) as Promise<void>;\r\n }\r\n\r\n /**\r\n * Creates a new squad under a wing in a fleet via POST.\r\n *\r\n * @param fleetId - The ID of the fleet\r\n * @param wingId - The ID of the wing to add the squad to\r\n * @returns The ID of the newly created squad\r\n * @requires Authentication\r\n */\r\n createFleetSquad(\r\n fleetId: number,\r\n wingId: number,\r\n ): Promise<{ squad_id: number }> {\r\n return this.api.createFleetSquad(fleetId, wingId) as Promise<{\r\n squad_id: number;\r\n }>;\r\n }\r\n\r\n streamFleetMembers(\r\n fleetId: number,\r\n ): AsyncGenerator<PageResult<FleetMember>, void, undefined> {\r\n return this.streamEndpoint<FleetMember>('getFleetMembers', fleetId);\r\n }\r\n\r\n streamFleetWings(\r\n fleetId: number,\r\n ): AsyncGenerator<PageResult<FleetWing>, void, undefined> {\r\n return this.streamEndpoint<FleetWing>('getFleetWings', fleetId);\r\n }\r\n}\r\n","import { z } from 'zod';\nimport { EndpointMap } from './EndpointDefinition';\nimport { IncursionSchema } from '../../schemas/incursions';\n\nexport const incursionEndpoints = {\n getIncursions: {\n path: 'incursions',\n method: 'GET',\n requiresAuth: false,\n responseSchema: z.array(IncursionSchema),\n },\n} as const satisfies EndpointMap;\n","import { z } from 'zod';\r\nimport { esiEnum } from './esiEnum';\r\n\r\nexport const IncursionSchema = z.looseObject({\r\n type: z.string(),\r\n state: esiEnum(['withdrawing', 'mobilizing', 'established']),\r\n staging_solar_system_id: z.number(),\r\n constellation_id: z.number(),\r\n infested_solar_systems: z.array(z.number()),\r\n has_boss: z.boolean(),\r\n faction_id: z.number(),\r\n influence: z.number(),\r\n});\r\n","import { ApiClient } from '../core/ApiClient';\nimport { BaseEsiClient } from './BaseEsiClient';\nimport { incursionEndpoints } from '../core/endpoints/incursionEndpoints';\nimport { Incursion } from '../types/api-responses';\n\nexport class IncursionsClient extends BaseEsiClient<typeof incursionEndpoints> {\n constructor(client: ApiClient) {\n super(client, incursionEndpoints);\n }\n\n /**\n * Retrieves all currently active incursions, including their staging systems and influence levels.\n *\n * @returns An array of active incursions\n */\n getIncursions(): Promise<Incursion[]> {\n return this.api.getIncursions() as Promise<Incursion[]>;\n }\n}\n","import { z } from 'zod';\r\nimport { EndpointMap } from './EndpointDefinition';\r\nimport {\r\n IndustryJobSchema,\r\n MiningLedgerEntrySchema,\r\n IndustryFacilitySchema,\r\n IndustrySystemSchema,\r\n MoonExtractionTimerSchema,\r\n MiningObserverSchema,\r\n MiningObserverEntrySchema,\r\n} from '../../schemas/industry';\r\n\r\nexport const industryEndpoints = {\r\n getCharacterIndustryJobs: {\r\n path: 'characters/{characterId}/industry/jobs',\r\n method: 'GET',\r\n requiresAuth: true,\r\n pathParams: ['characterId'],\r\n responseSchema: z.array(IndustryJobSchema),\r\n },\r\n getCharacterMiningLedger: {\r\n path: 'characters/{characterId}/mining',\r\n method: 'GET',\r\n requiresAuth: true,\r\n pathParams: ['characterId'],\r\n responseSchema: z.array(MiningLedgerEntrySchema),\r\n },\r\n getCorporationIndustryJobs: {\r\n path: 'corporations/{corporationId}/industry/jobs',\r\n method: 'GET',\r\n requiresAuth: true,\r\n pathParams: ['corporationId'],\r\n responseSchema: z.array(IndustryJobSchema),\r\n },\r\n getMoonExtractionTimers: {\r\n path: 'corporation/{corporationId}/mining/extractions',\r\n method: 'GET',\r\n requiresAuth: true,\r\n pathParams: ['corporationId'],\r\n responseSchema: z.array(MoonExtractionTimerSchema),\r\n },\r\n getCorporationMiningObservers: {\r\n path: 'corporation/{corporationId}/mining/observers',\r\n method: 'GET',\r\n requiresAuth: true,\r\n pathParams: ['corporationId'],\r\n responseSchema: z.array(MiningObserverSchema),\r\n },\r\n getCorporationMiningObserver: {\r\n path: 'corporation/{corporationId}/mining/observers/{observerId}',\r\n method: 'GET',\r\n requiresAuth: true,\r\n pathParams: ['corporationId', 'observerId'],\r\n responseSchema: z.array(MiningObserverEntrySchema),\r\n },\r\n getIndustryFacilities: {\r\n path: 'industry/facilities',\r\n method: 'GET',\r\n requiresAuth: false,\r\n responseSchema: z.array(IndustryFacilitySchema),\r\n },\r\n getIndustrySystems: {\r\n path: 'industry/systems',\r\n method: 'GET',\r\n requiresAuth: false,\r\n responseSchema: z.array(IndustrySystemSchema),\r\n },\r\n} as const satisfies EndpointMap;\r\n","import { z } from 'zod';\r\nimport { esiEnum } from './esiEnum';\r\n\r\nexport const IndustryJobSchema = z.looseObject({\r\n job_id: z.number(),\r\n installer_id: z.number(),\r\n facility_id: z.number(),\r\n station_id: z.number(),\r\n activity_id: z.number(),\r\n blueprint_id: z.number(),\r\n blueprint_type_id: z.number(),\r\n blueprint_location_id: z.number(),\r\n output_location_id: z.number(),\r\n runs: z.number(),\r\n cost: z.number().optional(),\r\n licensed_runs: z.number().optional(),\r\n probability: z.number().optional(),\r\n product_type_id: z.number().optional(),\r\n status: esiEnum([\r\n 'active',\r\n 'cancelled',\r\n 'delivered',\r\n 'paused',\r\n 'ready',\r\n 'reverted',\r\n ]),\r\n duration: z.number(),\r\n start_date: z.string(),\r\n end_date: z.string(),\r\n pause_date: z.string().optional(),\r\n completed_date: z.string().optional(),\r\n completed_character_id: z.number().optional(),\r\n successful_runs: z.number().optional(),\r\n});\r\n\r\nexport const MiningLedgerEntrySchema = z.looseObject({\r\n date: z.string(),\r\n solar_system_id: z.number(),\r\n type_id: z.number(),\r\n quantity: z.number(),\r\n});\r\n\r\nexport const IndustryFacilitySchema = z.looseObject({\r\n facility_id: z.number(),\r\n owner_id: z.number(),\r\n region_id: z.number(),\r\n solar_system_id: z.number(),\r\n tax: z.number().optional(),\r\n type_id: z.number(),\r\n});\r\n\r\nexport const IndustrySystemSchema = z.looseObject({\r\n solar_system_id: z.number(),\r\n cost_indices: z.array(\r\n z.looseObject({\r\n activity: z.string(),\r\n cost_index: z.number(),\r\n }),\r\n ),\r\n});\r\n\r\nexport const MoonExtractionTimerSchema = z.looseObject({\r\n structure_id: z.number(),\r\n moon_id: z.number(),\r\n extraction_start_time: z.string(),\r\n chunk_arrival_time: z.string(),\r\n natural_decay_time: z.string(),\r\n});\r\n\r\nexport const MiningObserverSchema = z.looseObject({\r\n observer_id: z.number(),\r\n observer_type: z.string(),\r\n last_updated: z.string(),\r\n});\r\n\r\nexport const MiningObserverEntrySchema = z.looseObject({\r\n character_id: z.number(),\r\n recorded_corporation_id: z.number(),\r\n type_id: z.number(),\r\n quantity: z.number(),\r\n last_updated: z.string(),\r\n});\r\n","import { ApiClient } from '../core/ApiClient';\r\nimport { BaseEsiClient } from './BaseEsiClient';\r\nimport { industryEndpoints } from '../core/endpoints/industryEndpoints';\r\nimport {\r\n IndustryJob,\r\n MiningLedgerEntry,\r\n IndustryFacility,\r\n IndustrySystem,\r\n MoonExtractionTimer,\r\n MiningObserver,\r\n MiningObserverEntry,\r\n} from '../types/api-responses';\r\nimport { PageResult } from '../core/pagination/AsyncPaginationIterator';\r\n\r\nexport class IndustryClient extends BaseEsiClient<typeof industryEndpoints> {\r\n constructor(client: ApiClient) {\r\n super(client, industryEndpoints);\r\n }\r\n\r\n /**\r\n * Retrieves all industry jobs for a character, including manufacturing, research, and invention.\r\n *\r\n * @param characterId - The ID of the character\r\n * @returns An array of the character's industry jobs\r\n * @requires Authentication\r\n */\r\n getCharacterIndustryJobs(characterId: number): Promise<IndustryJob[]> {\r\n return this.api.getCharacterIndustryJobs(characterId);\r\n }\r\n\r\n /**\r\n * Retrieves a character's personal mining ledger, showing ore mined per day.\r\n *\r\n * @param characterId - The ID of the character\r\n * @returns An array of mining ledger entries\r\n * @requires Authentication\r\n */\r\n getCharacterMiningLedger(characterId: number): Promise<MiningLedgerEntry[]> {\r\n return this.api.getCharacterMiningLedger(characterId);\r\n }\r\n\r\n /**\r\n * Retrieves moon extraction timers for a corporation's refineries.\r\n *\r\n * @param corporationId - The ID of the corporation\r\n * @returns An array of moon extraction timers\r\n * @requires Authentication\r\n */\r\n getMoonExtractionTimers(\r\n corporationId: number,\r\n ): Promise<MoonExtractionTimer[]> {\r\n return this.api.getMoonExtractionTimers(corporationId);\r\n }\r\n\r\n /**\r\n * Retrieves the list of mining observers (e.g., refineries) owned by a corporation.\r\n *\r\n * @param corporationId - The ID of the corporation\r\n * @returns An array of mining observers\r\n * @requires Authentication\r\n */\r\n getCorporationMiningObservers(\r\n corporationId: number,\r\n ): Promise<MiningObserver[]> {\r\n return this.api.getCorporationMiningObservers(corporationId);\r\n }\r\n\r\n /**\r\n * Retrieves mining activity recorded by a specific corporation mining observer.\r\n *\r\n * @param corporationId - The ID of the corporation\r\n * @param observerId - The ID of the mining observer\r\n * @returns An array of mining activity entries for the observer\r\n * @requires Authentication\r\n */\r\n getCorporationMiningObserver(\r\n corporationId: number,\r\n observerId: number,\r\n ): Promise<MiningObserverEntry[]> {\r\n return this.api.getCorporationMiningObserver(corporationId, observerId);\r\n }\r\n\r\n /**\r\n * Retrieves all industry jobs for a corporation, including manufacturing, research, and invention.\r\n *\r\n * @param corporationId - The ID of the corporation\r\n * @returns An array of the corporation's industry jobs\r\n * @requires Authentication\r\n */\r\n getCorporationIndustryJobs(corporationId: number): Promise<IndustryJob[]> {\r\n return this.api.getCorporationIndustryJobs(corporationId);\r\n }\r\n\r\n /**\r\n * Retrieves a list of all publicly available industry facilities in the universe.\r\n *\r\n * @returns An array of industry facilities\r\n */\r\n getIndustryFacilities(): Promise<IndustryFacility[]> {\r\n return this.api.getIndustryFacilities();\r\n }\r\n\r\n /**\r\n * Retrieves cost indices for solar systems with industry activity, used to calculate job installation fees.\r\n *\r\n * @returns An array of industry system cost indices\r\n */\r\n getIndustrySystems(): Promise<IndustrySystem[]> {\r\n return this.api.getIndustrySystems();\r\n }\r\n\r\n streamCharacterIndustryJobs(\r\n characterId: number,\r\n ): AsyncGenerator<PageResult<IndustryJob>, void, undefined> {\r\n return this.streamEndpoint<IndustryJob>(\r\n 'getCharacterIndustryJobs',\r\n characterId,\r\n );\r\n }\r\n\r\n streamCharacterMiningLedger(\r\n characterId: number,\r\n ): AsyncGenerator<PageResult<MiningLedgerEntry>, void, undefined> {\r\n return this.streamEndpoint<MiningLedgerEntry>(\r\n 'getCharacterMiningLedger',\r\n characterId,\r\n );\r\n }\r\n\r\n streamCorporationIndustryJobs(\r\n corporationId: number,\r\n ): AsyncGenerator<PageResult<IndustryJob>, void, undefined> {\r\n return this.streamEndpoint<IndustryJob>(\r\n 'getCorporationIndustryJobs',\r\n corporationId,\r\n );\r\n }\r\n\r\n streamMoonExtractionTimers(\r\n corporationId: number,\r\n ): AsyncGenerator<PageResult<MoonExtractionTimer>, void, undefined> {\r\n return this.streamEndpoint<MoonExtractionTimer>(\r\n 'getMoonExtractionTimers',\r\n corporationId,\r\n );\r\n }\r\n\r\n streamCorporationMiningObservers(\r\n corporationId: number,\r\n ): AsyncGenerator<PageResult<MiningObserver>, void, undefined> {\r\n return this.streamEndpoint<MiningObserver>(\r\n 'getCorporationMiningObservers',\r\n corporationId,\r\n );\r\n }\r\n\r\n streamCorporationMiningObserver(\r\n corporationId: number,\r\n observerId: number,\r\n ): AsyncGenerator<PageResult<MiningObserverEntry>, void, undefined> {\r\n return this.streamEndpoint<MiningObserverEntry>(\r\n 'getCorporationMiningObserver',\r\n corporationId,\r\n observerId,\r\n );\r\n }\r\n\r\n streamIndustryFacilities(): AsyncGenerator<\r\n PageResult<IndustryFacility>,\r\n void,\r\n undefined\r\n > {\r\n return this.streamEndpoint<IndustryFacility>('getIndustryFacilities');\r\n }\r\n\r\n streamIndustrySystems(): AsyncGenerator<\r\n PageResult<IndustrySystem>,\r\n void,\r\n undefined\r\n > {\r\n return this.streamEndpoint<IndustrySystem>('getIndustrySystems');\r\n }\r\n}\r\n","import { z } from 'zod';\nimport { EndpointMap } from './EndpointDefinition';\nimport { InsurancePriceSchema } from '../../schemas/insurance';\n\nexport const insuranceEndpoints = {\n getInsurancePrices: {\n path: 'insurance/prices',\n method: 'GET',\n requiresAuth: false,\n responseSchema: z.array(InsurancePriceSchema),\n },\n} as const satisfies EndpointMap;\n","import { z } from 'zod';\n\nexport const InsurancePriceSchema = z.looseObject({\n type_id: z.number(),\n levels: z.array(\n z.looseObject({\n cost: z.number(),\n payout: z.number(),\n name: z.string(),\n }),\n ),\n});\n","import { ApiClient } from '../core/ApiClient';\nimport { BaseEsiClient } from './BaseEsiClient';\nimport { insuranceEndpoints } from '../core/endpoints/insuranceEndpoints';\nimport { InsurancePrice } from '../types/api-responses';\n\nexport class InsuranceClient extends BaseEsiClient<typeof insuranceEndpoints> {\n constructor(client: ApiClient) {\n super(client, insuranceEndpoints);\n }\n\n /**\n * Retrieves available insurance levels and their costs for all ship types.\n *\n * @returns An array of insurance price listings per ship type\n */\n getInsurancePrices(): Promise<InsurancePrice[]> {\n return this.api.getInsurancePrices() as Promise<InsurancePrice[]>;\n }\n}\n","import { z } from 'zod';\nimport { EndpointMap } from './EndpointDefinition';\nimport { KillmailSummarySchema, KillmailSchema } from '../../schemas/killmails';\n\nexport const killmailEndpoints = {\n getCharacterRecentKillmails: {\n path: 'characters/{characterId}/killmails/recent',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n responseSchema: z.array(KillmailSummarySchema),\n },\n getCorporationRecentKillmails: {\n path: 'corporations/{corporationId}/killmails/recent',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId'],\n responseSchema: z.array(KillmailSummarySchema),\n },\n getKillmail: {\n path: 'killmails/{killmailId}/{killmailHash}',\n method: 'GET',\n requiresAuth: false,\n pathParams: ['killmailId', 'killmailHash'],\n responseSchema: KillmailSchema,\n },\n} as const satisfies EndpointMap;\n","import { z } from 'zod';\n\nexport const KillmailSummarySchema = z.looseObject({\n killmail_id: z.number(),\n killmail_hash: z.string(),\n});\n\nexport const KillmailSchema = z.looseObject({\n killmail_id: z.number(),\n killmail_time: z.string(),\n solar_system_id: z.number(),\n moon_id: z.number().optional(),\n war_id: z.number().optional(),\n victim: z.looseObject({\n character_id: z.number().optional(),\n corporation_id: z.number().optional(),\n alliance_id: z.number().optional(),\n faction_id: z.number().optional(),\n ship_type_id: z.number(),\n damage_taken: z.number(),\n position: z\n .looseObject({\n x: z.number(),\n y: z.number(),\n z: z.number(),\n })\n .optional(),\n items: z.array(z.unknown()).optional(),\n }),\n attackers: z.array(\n z.looseObject({\n character_id: z.number().optional(),\n corporation_id: z.number().optional(),\n alliance_id: z.number().optional(),\n faction_id: z.number().optional(),\n ship_type_id: z.number().optional(),\n weapon_type_id: z.number().optional(),\n damage_done: z.number(),\n final_blow: z.boolean(),\n security_status: z.number(),\n }),\n ),\n});\n","import { ApiClient } from '../core/ApiClient';\nimport { BaseEsiClient } from './BaseEsiClient';\nimport { killmailEndpoints } from '../core/endpoints/killmailEndpoints';\nimport { KillmailSummary, Killmail } from '../types/api-responses';\nimport { PageResult } from '../core/pagination/AsyncPaginationIterator';\n\nexport class KillmailsClient extends BaseEsiClient<typeof killmailEndpoints> {\n constructor(client: ApiClient) {\n super(client, killmailEndpoints);\n }\n\n /**\n * Retrieves a list of recent killmail summaries for a character.\n *\n * @param characterId - The ID of the character to fetch killmails for\n * @returns A list of recent killmail summaries including killmail IDs and hashes\n * @requires Authentication\n */\n getCharacterRecentKillmails(characterId: number): Promise<KillmailSummary[]> {\n return this.api.getCharacterRecentKillmails(characterId) as Promise<\n KillmailSummary[]\n >;\n }\n\n /**\n * Retrieves a list of recent killmail summaries for a corporation.\n *\n * @param corporationId - The ID of the corporation to fetch killmails for\n * @returns A list of recent killmail summaries including killmail IDs and hashes\n * @requires Authentication\n */\n getCorporationRecentKillmails(\n corporationId: number,\n ): Promise<KillmailSummary[]> {\n return this.api.getCorporationRecentKillmails(corporationId) as Promise<\n KillmailSummary[]\n >;\n }\n\n /**\n * Retrieves the full details of a specific killmail by its ID and hash.\n *\n * @param killmailId - The ID of the killmail to retrieve\n * @param killmailHash - The hash of the killmail for verification\n * @returns The full killmail details including victim, attackers, and items\n */\n getKillmail(killmailId: number, killmailHash: string): Promise<Killmail> {\n return this.api.getKillmail(killmailId, killmailHash) as Promise<Killmail>;\n }\n\n streamCharacterRecentKillmails(\n characterId: number,\n ): AsyncGenerator<PageResult<KillmailSummary>, void, undefined> {\n return this.streamEndpoint<KillmailSummary>(\n 'getCharacterRecentKillmails',\n characterId,\n );\n }\n\n streamCorporationRecentKillmails(\n corporationId: number,\n ): AsyncGenerator<PageResult<KillmailSummary>, void, undefined> {\n return this.streamEndpoint<KillmailSummary>(\n 'getCorporationRecentKillmails',\n corporationId,\n );\n }\n}\n","import { z } from 'zod';\n\nexport const CharacterLocationSchema = z.looseObject({\n solar_system_id: z.number(),\n station_id: z.number().optional(),\n structure_id: z.number().optional(),\n});\n\nexport const CharacterOnlineSchema = z.looseObject({\n online: z.boolean(),\n last_login: z.string().optional(),\n last_logout: z.string().optional(),\n logins: z.number().optional(),\n});\n\nexport const CharacterShipSchema = z.looseObject({\n ship_item_id: z.number(),\n ship_name: z.string(),\n ship_type_id: z.number(),\n});\n","import { EndpointMap } from './EndpointDefinition';\nimport {\n CharacterLocationSchema,\n CharacterOnlineSchema,\n CharacterShipSchema,\n} from '../../schemas/location';\n\nexport const locationEndpoints = {\n getCharacterLocation: {\n path: 'characters/{characterId}/location',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n responseSchema: CharacterLocationSchema,\n },\n getCharacterOnline: {\n path: 'characters/{characterId}/online',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n responseSchema: CharacterOnlineSchema,\n },\n getCharacterShip: {\n path: 'characters/{characterId}/ship',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n responseSchema: CharacterShipSchema,\n },\n} as const satisfies EndpointMap;\n","import { ApiClient } from '../core/ApiClient';\nimport { BaseEsiClient } from './BaseEsiClient';\nimport { locationEndpoints } from '../core/endpoints/locationEndpoints';\nimport {\n CharacterLocation,\n CharacterOnline,\n CharacterShip,\n} from '../types/api-responses';\n\nexport class LocationClient extends BaseEsiClient<typeof locationEndpoints> {\n constructor(client: ApiClient) {\n super(client, locationEndpoints);\n }\n\n /**\n * Retrieves the current solar system, station, and structure location of a character.\n *\n * @param characterId - The ID of the character to locate\n * @returns The character's current location including solar system and optional station or structure\n * @requires Authentication\n */\n getCharacterLocation(characterId: number): Promise<CharacterLocation> {\n return this.api.getCharacterLocation(\n characterId,\n ) as Promise<CharacterLocation>;\n }\n\n /**\n * Checks whether a character is currently online and retrieves login/logout timestamps.\n *\n * @param characterId - The ID of the character to check\n * @returns The character's online status and last login/logout times\n * @requires Authentication\n */\n getCharacterOnline(characterId: number): Promise<CharacterOnline> {\n return this.api.getCharacterOnline(characterId) as Promise<CharacterOnline>;\n }\n\n /**\n * Retrieves the type, name, and item ID of the ship a character is currently flying.\n *\n * @param characterId - The ID of the character whose ship to retrieve\n * @returns The character's current ship details including type ID and ship name\n * @requires Authentication\n */\n getCharacterShip(characterId: number): Promise<CharacterShip> {\n return this.api.getCharacterShip(characterId) as Promise<CharacterShip>;\n }\n}\n","import { z } from 'zod';\nimport { EndpointMap } from './EndpointDefinition';\nimport {\n LoyaltyPointsSchema,\n LoyaltyStoreOfferSchema,\n} from '../../schemas/loyalty';\n\nexport const loyaltyEndpoints = {\n getLoyaltyPoints: {\n path: 'characters/{characterId}/loyalty/points',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n responseSchema: z.array(LoyaltyPointsSchema),\n },\n getLoyaltyStoreOffers: {\n path: 'loyalty/stores/{corporationId}/offers',\n method: 'GET',\n requiresAuth: false,\n pathParams: ['corporationId'],\n responseSchema: z.array(LoyaltyStoreOfferSchema),\n },\n} as const satisfies EndpointMap;\n","import { z } from 'zod';\n\nexport const LoyaltyPointsSchema = z.looseObject({\n corporation_id: z.number(),\n loyalty_points: z.number(),\n});\n\nexport const LoyaltyStoreOfferSchema = z.looseObject({\n offer_id: z.number(),\n type_id: z.number(),\n quantity: z.number(),\n lp_cost: z.number(),\n isk_cost: z.number(),\n ak_cost: z.number().optional(),\n required_items: z.array(\n z.looseObject({\n type_id: z.number(),\n quantity: z.number(),\n }),\n ),\n});\n","import { ApiClient } from '../core/ApiClient';\r\nimport { BaseEsiClient } from './BaseEsiClient';\r\nimport { loyaltyEndpoints } from '../core/endpoints/loyaltyEndpoints';\r\nimport { LoyaltyPoints, LoyaltyStoreOffer } from '../types/api-responses';\r\nimport { PageResult } from '../core/pagination/AsyncPaginationIterator';\r\n\r\nexport class LoyaltyClient extends BaseEsiClient<typeof loyaltyEndpoints> {\r\n constructor(client: ApiClient) {\r\n super(client, loyaltyEndpoints);\r\n }\r\n\r\n /**\r\n * Retrieves the loyalty points a character has earned with each NPC corporation.\r\n *\r\n * @param characterId - The ID of the character to fetch loyalty points for\r\n * @returns A list of loyalty point balances per corporation\r\n * @requires Authentication\r\n */\r\n getLoyaltyPoints(characterId: number): Promise<LoyaltyPoints[]> {\r\n return this.api.getLoyaltyPoints(characterId);\r\n }\r\n\r\n /**\r\n * Retrieves the list of items available in an NPC corporation's loyalty point store.\r\n *\r\n * @param corporationId - The ID of the NPC corporation whose LP store to query\r\n * @returns A list of offers available in the loyalty store\r\n */\r\n getLoyaltyStoreOffers(corporationId: number): Promise<LoyaltyStoreOffer[]> {\r\n return this.api.getLoyaltyStoreOffers(corporationId);\r\n }\r\n\r\n streamLoyaltyPoints(\r\n characterId: number,\r\n ): AsyncGenerator<PageResult<LoyaltyPoints>, void, undefined> {\r\n return this.streamEndpoint<LoyaltyPoints>('getLoyaltyPoints', characterId);\r\n }\r\n\r\n streamLoyaltyStoreOffers(\r\n corporationId: number,\r\n ): AsyncGenerator<PageResult<LoyaltyStoreOffer>, void, undefined> {\r\n return this.streamEndpoint<LoyaltyStoreOffer>(\r\n 'getLoyaltyStoreOffers',\r\n corporationId,\r\n );\r\n }\r\n}\r\n","import { z } from 'zod';\r\nimport { EndpointMap } from './EndpointDefinition';\r\nimport {\r\n MailMessageSchema,\r\n MailLabelSchema,\r\n MailLabelsResponseSchema,\r\n MailingListSchema,\r\n} from '../../schemas/mail';\r\n\r\nexport const mailEndpoints = {\r\n getCharacterMailHeaders: {\r\n path: 'characters/{characterId}/mail/',\r\n method: 'GET',\r\n requiresAuth: true,\r\n pathParams: ['characterId'],\r\n responseSchema: z.array(MailMessageSchema),\r\n },\r\n sendMail: {\r\n path: 'characters/{characterId}/mail/',\r\n method: 'POST',\r\n requiresAuth: true,\r\n pathParams: ['characterId'],\r\n hasBody: true,\r\n requestSchema: z.looseObject({\r\n recipients: z.array(\r\n z.looseObject({\r\n recipient_id: z.number().int(),\r\n recipient_type: z.enum([\r\n 'alliance',\r\n 'character',\r\n 'corporation',\r\n 'mailing_list',\r\n ]),\r\n }),\r\n ),\r\n subject: z.string().min(1),\r\n body: z.string().min(1),\r\n }),\r\n },\r\n getMail: {\r\n path: 'characters/{characterId}/mail/{mailId}/',\r\n method: 'GET',\r\n requiresAuth: true,\r\n pathParams: ['characterId', 'mailId'],\r\n responseSchema: MailMessageSchema,\r\n },\r\n deleteMail: {\r\n path: 'characters/{characterId}/mail/{mailId}/',\r\n method: 'DELETE',\r\n requiresAuth: true,\r\n pathParams: ['characterId', 'mailId'],\r\n },\r\n updateMailMetadata: {\r\n path: 'characters/{characterId}/mail/{mailId}/',\r\n method: 'PUT',\r\n requiresAuth: true,\r\n pathParams: ['characterId', 'mailId'],\r\n hasBody: true,\r\n },\r\n getMailLabels: {\r\n path: 'characters/{characterId}/mail/labels/',\r\n method: 'GET',\r\n requiresAuth: true,\r\n pathParams: ['characterId'],\r\n responseSchema: MailLabelsResponseSchema,\r\n },\r\n createMailLabel: {\r\n path: 'characters/{characterId}/mail/labels/',\r\n method: 'POST',\r\n requiresAuth: true,\r\n pathParams: ['characterId'],\r\n hasBody: true,\r\n },\r\n deleteMailLabel: {\r\n path: 'characters/{characterId}/mail/labels/{labelId}/',\r\n method: 'DELETE',\r\n requiresAuth: true,\r\n pathParams: ['characterId', 'labelId'],\r\n },\r\n getMailingLists: {\r\n path: 'characters/{characterId}/mail/lists/',\r\n method: 'GET',\r\n requiresAuth: true,\r\n pathParams: ['characterId'],\r\n responseSchema: z.array(MailingListSchema),\r\n },\r\n} as const satisfies EndpointMap;\r\n","import { z } from 'zod';\r\nimport { esiEnum } from './esiEnum';\r\n\r\nexport const MailMessageSchema = z.looseObject({\r\n mail_id: z.number().optional(),\r\n subject: z.string().optional(),\r\n from: z.number().optional(),\r\n timestamp: z.string().optional(),\r\n labels: z.array(z.number()).optional(),\r\n is_read: z.boolean().optional(),\r\n body: z.string().optional(),\r\n recipients: z\r\n .array(\r\n z.looseObject({\r\n recipient_id: z.number(),\r\n recipient_type: esiEnum([\r\n 'alliance',\r\n 'character',\r\n 'corporation',\r\n 'mailing_list',\r\n ]),\r\n }),\r\n )\r\n .optional(),\r\n});\r\n\r\nexport const MailLabelSchema = z.looseObject({\r\n label_id: z.number(),\r\n name: z.string(),\r\n color: z.string().optional(),\r\n unread_count: z.number().optional(),\r\n});\r\n\r\nexport const MailLabelsResponseSchema = z.looseObject({\r\n labels: z.array(MailLabelSchema).optional(),\r\n total_unread_count: z.number().optional(),\r\n});\r\n\r\nexport const MailingListSchema = z.looseObject({\r\n mailing_list_id: z.number(),\r\n name: z.string(),\r\n});\r\n","import { ApiClient } from '../core/ApiClient';\r\nimport { BaseEsiClient } from './BaseEsiClient';\r\nimport { mailEndpoints } from '../core/endpoints/mailEndpoints';\r\nimport { MailMessage, MailLabel } from '../types/api-responses';\r\nimport { PageResult } from '../core/pagination/AsyncPaginationIterator';\r\n\r\nexport class MailClient extends BaseEsiClient<typeof mailEndpoints> {\r\n constructor(client: ApiClient) {\r\n super(client, mailEndpoints);\r\n }\r\n\r\n /**\r\n * Retrieves the mail headers (subject, sender, timestamp) for a character's inbox.\r\n *\r\n * @param characterId - The ID of the character whose mail headers to fetch\r\n * @returns A list of mail message headers\r\n * @requires Authentication\r\n */\r\n getMailHeaders(characterId: number): Promise<MailMessage[]> {\r\n return this.api.getCharacterMailHeaders(characterId);\r\n }\r\n\r\n /**\r\n * Sends a new mail on behalf of a character via POST.\r\n *\r\n * @param characterId - The ID of the character sending the mail\r\n * @param body - The mail content including recipients, subject, and body text\r\n * @returns The ID of the newly created mail\r\n * @requires Authentication\r\n */\r\n sendMail(characterId: number, body: object): Promise<number> {\r\n return this.api.sendMail(characterId, body) as Promise<number>;\r\n }\r\n\r\n /**\r\n * Deletes a specific mail from a character's mailbox.\r\n *\r\n * @param characterId - The ID of the character who owns the mail\r\n * @param mailId - The ID of the mail to delete\r\n * @returns void\r\n * @requires Authentication\r\n */\r\n deleteMail(characterId: number, mailId: number): Promise<void> {\r\n return this.api.deleteMail(characterId, mailId) as Promise<void>;\r\n }\r\n\r\n /**\r\n * Retrieves the full contents of a specific mail including its body text.\r\n *\r\n * @param characterId - The ID of the character who owns the mail\r\n * @param mailId - The ID of the mail to retrieve\r\n * @returns The full mail message including body, sender, and recipients\r\n * @requires Authentication\r\n */\r\n getMail(characterId: number, mailId: number): Promise<MailMessage> {\r\n return this.api.getMail(characterId, mailId);\r\n }\r\n\r\n /**\r\n * Updates the metadata of a mail, such as read status or labels, via PUT.\r\n *\r\n * @param characterId - The ID of the character who owns the mail\r\n * @param mailId - The ID of the mail to update\r\n * @param body - The metadata fields to update (e.g., labels, read status)\r\n * @returns void\r\n * @requires Authentication\r\n */\r\n updateMailMetadata(\r\n characterId: number,\r\n mailId: number,\r\n body: object,\r\n ): Promise<void> {\r\n return this.api.updateMailMetadata(\r\n characterId,\r\n mailId,\r\n body,\r\n ) as Promise<void>;\r\n }\r\n\r\n /**\r\n * Retrieves the mail labels and total unread count for a character.\r\n *\r\n * @param characterId - The ID of the character whose labels to fetch\r\n * @returns The character's mail labels and total unread mail count\r\n * @requires Authentication\r\n */\r\n getMailLabels(\r\n characterId: number,\r\n ): Promise<{ total_unread_count?: number; labels?: MailLabel[] }> {\r\n return this.api.getMailLabels(characterId);\r\n }\r\n\r\n /**\r\n * Creates a new custom mail label for a character via POST.\r\n *\r\n * @param characterId - The ID of the character to create the label for\r\n * @param body - The label definition including name and optional color\r\n * @returns The ID of the newly created label\r\n * @requires Authentication\r\n */\r\n createMailLabel(characterId: number, body: object): Promise<number> {\r\n return this.api.createMailLabel(characterId, body) as Promise<number>;\r\n }\r\n\r\n /**\r\n * Deletes a custom mail label from a character's mailbox.\r\n *\r\n * @param characterId - The ID of the character who owns the label\r\n * @param labelId - The ID of the label to delete\r\n * @returns void\r\n * @requires Authentication\r\n */\r\n deleteMailLabel(characterId: number, labelId: number): Promise<void> {\r\n return this.api.deleteMailLabel(characterId, labelId) as Promise<void>;\r\n }\r\n\r\n /**\r\n * Retrieves the mailing lists that a character is subscribed to.\r\n *\r\n * @param characterId - The ID of the character whose mailing lists to fetch\r\n * @returns A list of mailing lists with their IDs and names\r\n * @requires Authentication\r\n */\r\n getMailingLists(\r\n characterId: number,\r\n ): Promise<{ mailing_list_id: number; name: string }[]> {\r\n return this.api.getMailingLists(characterId);\r\n }\r\n\r\n streamMailHeaders(\r\n characterId: number,\r\n ): AsyncGenerator<PageResult<MailMessage>, void, undefined> {\r\n return this.streamEndpoint<MailMessage>(\r\n 'getCharacterMailHeaders',\r\n characterId,\r\n );\r\n }\r\n\r\n streamMailingLists(\r\n characterId: number,\r\n ): AsyncGenerator<\r\n PageResult<{ mailing_list_id: number; name: string }>,\r\n void,\r\n undefined\r\n > {\r\n return this.streamEndpoint<{ mailing_list_id: number; name: string }>(\r\n 'getMailingLists',\r\n characterId,\r\n );\r\n }\r\n}\r\n","import { z } from 'zod';\r\nimport { EndpointMap } from './EndpointDefinition';\r\nimport {\r\n MarketOrderSchema,\r\n CharacterMarketOrderSchema,\r\n CharacterMarketOrderHistorySchema,\r\n CorporationMarketOrderSchema,\r\n CorporationMarketOrderHistorySchema,\r\n StructureMarketOrderSchema,\r\n MarketHistorySchema,\r\n MarketGroupSchema,\r\n MarketPriceSchema,\r\n} from '../../schemas/market';\r\n\r\nexport const marketEndpoints = {\r\n getCharacterOrders: {\r\n path: 'characters/{characterId}/orders/',\r\n method: 'GET',\r\n requiresAuth: true,\r\n pathParams: ['characterId'],\r\n responseSchema: z.array(CharacterMarketOrderSchema),\r\n },\r\n getCharacterOrderHistory: {\r\n path: 'characters/{characterId}/orders/history/',\r\n method: 'GET',\r\n requiresAuth: true,\r\n pathParams: ['characterId'],\r\n responseSchema: z.array(CharacterMarketOrderHistorySchema),\r\n },\r\n getCorporationOrders: {\r\n path: 'corporations/{corporationId}/orders/',\r\n method: 'GET',\r\n requiresAuth: true,\r\n pathParams: ['corporationId'],\r\n responseSchema: z.array(CorporationMarketOrderSchema),\r\n },\r\n getCorporationOrderHistory: {\r\n path: 'corporations/{corporationId}/orders/history/',\r\n method: 'GET',\r\n requiresAuth: true,\r\n pathParams: ['corporationId'],\r\n responseSchema: z.array(CorporationMarketOrderHistorySchema),\r\n },\r\n getMarketGroups: {\r\n path: 'markets/groups/',\r\n method: 'GET',\r\n requiresAuth: false,\r\n responseSchema: z.array(z.number()),\r\n },\r\n getMarketGroupInformation: {\r\n path: 'markets/groups/{marketGroupId}/',\r\n method: 'GET',\r\n requiresAuth: false,\r\n pathParams: ['marketGroupId'],\r\n responseSchema: MarketGroupSchema,\r\n },\r\n getMarketPrices: {\r\n path: 'markets/prices/',\r\n method: 'GET',\r\n requiresAuth: false,\r\n responseSchema: z.array(MarketPriceSchema),\r\n },\r\n getMarketOrdersInStructure: {\r\n path: 'markets/structures/{structureId}/',\r\n method: 'GET',\r\n requiresAuth: true,\r\n pathParams: ['structureId'],\r\n responseSchema: z.array(StructureMarketOrderSchema),\r\n },\r\n getMarketHistory: {\r\n path: 'markets/{regionId}/history/',\r\n method: 'GET',\r\n requiresAuth: false,\r\n pathParams: ['regionId'],\r\n queryParams: { typeId: 'type_id' },\r\n responseSchema: z.array(MarketHistorySchema),\r\n },\r\n getMarketOrders: {\r\n path: 'markets/{regionId}/orders/',\r\n method: 'GET',\r\n requiresAuth: false,\r\n pathParams: ['regionId'],\r\n queryParams: { orderType: 'order_type' },\r\n responseSchema: z.array(MarketOrderSchema),\r\n },\r\n getMarketTypes: {\r\n path: 'markets/{regionId}/types/',\r\n method: 'GET',\r\n requiresAuth: false,\r\n pathParams: ['regionId'],\r\n responseSchema: z.array(z.number()),\r\n },\r\n} as const satisfies EndpointMap;\r\n","import { z } from 'zod';\r\nimport { esiEnum } from './esiEnum';\r\n\r\n/** Region market order (`GET /markets/{region_id}/orders/`). */\r\nexport const MarketOrderSchema = z.looseObject({\r\n order_id: z.number(),\r\n type_id: z.number(),\r\n location_id: z.number(),\r\n volume_total: z.number(),\r\n volume_remain: z.number(),\r\n min_volume: z.number(),\r\n price: z.number(),\r\n is_buy_order: z.boolean(),\r\n system_id: z.number(),\r\n duration: z.number(),\r\n issued: z.string(),\r\n range: z.string(),\r\n});\r\n\r\n/** Character open order (`GET /characters/{character_id}/orders/`). */\r\nexport const CharacterMarketOrderSchema = z.looseObject({\r\n order_id: z.number(),\r\n type_id: z.number(),\r\n location_id: z.number(),\r\n volume_total: z.number(),\r\n volume_remain: z.number(),\r\n min_volume: z.number().optional(),\r\n price: z.number(),\r\n is_buy_order: z.boolean().optional(),\r\n is_corporation: z.boolean(),\r\n region_id: z.number(),\r\n duration: z.number(),\r\n issued: z.string(),\r\n range: z.string(),\r\n escrow: z.number().optional(),\r\n});\r\n\r\n/** Character order history (`GET /characters/{character_id}/orders/history/`). */\r\nexport const CharacterMarketOrderHistorySchema = z.looseObject({\r\n order_id: z.number(),\r\n type_id: z.number(),\r\n location_id: z.number(),\r\n volume_total: z.number(),\r\n volume_remain: z.number(),\r\n min_volume: z.number().optional(),\r\n price: z.number(),\r\n is_buy_order: z.boolean().optional(),\r\n is_corporation: z.boolean(),\r\n region_id: z.number(),\r\n duration: z.number(),\r\n issued: z.string(),\r\n range: z.string(),\r\n state: esiEnum(['cancelled', 'expired']),\r\n escrow: z.number().optional(),\r\n});\r\n\r\n/** Corporation open order (`GET /corporations/{corporation_id}/orders/`). */\r\nexport const CorporationMarketOrderSchema = z.looseObject({\r\n order_id: z.number(),\r\n type_id: z.number(),\r\n location_id: z.number(),\r\n volume_total: z.number(),\r\n volume_remain: z.number(),\r\n min_volume: z.number().optional(),\r\n price: z.number(),\r\n is_buy_order: z.boolean().optional(),\r\n issued_by: z.number(),\r\n region_id: z.number(),\r\n wallet_division: z.number(),\r\n duration: z.number(),\r\n issued: z.string(),\r\n range: z.string(),\r\n escrow: z.number().optional(),\r\n});\r\n\r\n/** Corporation order history (`GET /corporations/{corporation_id}/orders/history/`). */\r\nexport const CorporationMarketOrderHistorySchema = z.looseObject({\r\n order_id: z.number(),\r\n type_id: z.number(),\r\n location_id: z.number(),\r\n volume_total: z.number(),\r\n volume_remain: z.number(),\r\n min_volume: z.number().optional(),\r\n price: z.number(),\r\n is_buy_order: z.boolean().optional(),\r\n issued_by: z.number().optional(),\r\n region_id: z.number(),\r\n wallet_division: z.number(),\r\n duration: z.number(),\r\n issued: z.string(),\r\n range: z.string(),\r\n state: esiEnum(['cancelled', 'expired']),\r\n escrow: z.number().optional(),\r\n});\r\n\r\n/** Structure market order (`GET /markets/structures/{structure_id}/`). */\r\nexport const StructureMarketOrderSchema = z.looseObject({\r\n order_id: z.number(),\r\n type_id: z.number(),\r\n location_id: z.number(),\r\n volume_total: z.number(),\r\n volume_remain: z.number(),\r\n min_volume: z.number(),\r\n price: z.number(),\r\n is_buy_order: z.boolean(),\r\n duration: z.number(),\r\n issued: z.string(),\r\n range: z.string(),\r\n});\r\n\r\nexport const MarketHistorySchema = z.looseObject({\r\n date: z.string(),\r\n order_count: z.number(),\r\n volume: z.number(),\r\n highest: z.number(),\r\n average: z.number(),\r\n lowest: z.number(),\r\n});\r\n\r\nexport const MarketGroupSchema = z.looseObject({\r\n market_group_id: z.number(),\r\n name: z.string(),\r\n description: z.string(),\r\n types: z.array(z.number()),\r\n parent_group_id: z.number().optional(),\r\n});\r\n\r\nexport const MarketPriceSchema = z.looseObject({\r\n type_id: z.number(),\r\n average_price: z.number().optional(),\r\n adjusted_price: z.number().optional(),\r\n});\r\n","import { ApiClient } from '../core/ApiClient';\r\nimport { BaseEsiClient } from './BaseEsiClient';\r\nimport { marketEndpoints } from '../core/endpoints/marketEndpoints';\r\nimport {\r\n MarketOrder,\r\n CharacterMarketOrder,\r\n CharacterMarketOrderHistory,\r\n CorporationMarketOrder,\r\n CorporationMarketOrderHistory,\r\n StructureMarketOrder,\r\n MarketHistory,\r\n MarketGroup,\r\n MarketPrice,\r\n} from '../types/api-responses';\r\nimport { PageResult } from '../core/pagination/AsyncPaginationIterator';\r\n\r\nexport class MarketClient extends BaseEsiClient<typeof marketEndpoints> {\r\n constructor(client: ApiClient) {\r\n super(client, marketEndpoints);\r\n }\r\n\r\n /**\r\n * Retrieves all active market orders placed by a character.\r\n *\r\n * @param characterId - The ID of the character whose orders to fetch\r\n * @returns A list of the character's open market orders\r\n * @requires Authentication\r\n */\r\n getCharacterOrders(characterId: number): Promise<CharacterMarketOrder[]> {\r\n return this.api.getCharacterOrders(characterId);\r\n }\r\n\r\n /**\r\n * Retrieves the history of expired and cancelled market orders for a character.\r\n *\r\n * @param characterId - The ID of the character whose order history to fetch\r\n * @returns A list of the character's historical market orders\r\n * @requires Authentication\r\n */\r\n getCharacterOrderHistory(\r\n characterId: number,\r\n ): Promise<CharacterMarketOrderHistory[]> {\r\n return this.api.getCharacterOrderHistory(characterId);\r\n }\r\n\r\n /**\r\n * Retrieves all active market orders placed by members of a corporation.\r\n *\r\n * @param corporationId - The ID of the corporation whose orders to fetch\r\n * @returns A list of the corporation's open market orders\r\n * @requires Authentication\r\n */\r\n getCorporationOrders(\r\n corporationId: number,\r\n ): Promise<CorporationMarketOrder[]> {\r\n return this.api.getCorporationOrders(corporationId);\r\n }\r\n\r\n /**\r\n * Retrieves the history of expired and cancelled market orders for a corporation.\r\n *\r\n * @param corporationId - The ID of the corporation whose order history to fetch\r\n * @returns A list of the corporation's historical market orders\r\n * @requires Authentication\r\n */\r\n getCorporationOrderHistory(\r\n corporationId: number,\r\n ): Promise<CorporationMarketOrderHistory[]> {\r\n return this.api.getCorporationOrderHistory(corporationId);\r\n }\r\n\r\n /**\r\n * Retrieves the daily price and volume history for a specific item type in a region.\r\n *\r\n * @param regionId - The ID of the region to fetch market history for\r\n * @param typeId - The type ID of the item to get history for\r\n * @returns A list of daily market history entries with price and volume data\r\n */\r\n getMarketHistory(regionId: number, typeId: number): Promise<MarketHistory[]> {\r\n return this.api.getMarketHistory(regionId, typeId);\r\n }\r\n\r\n /**\r\n * Retrieves all active market orders in a region for all item types.\r\n *\r\n * @param regionId - The ID of the region to fetch orders for\r\n * @returns A list of all active market orders in the region\r\n */\r\n getMarketOrders(regionId: number): Promise<MarketOrder[]> {\r\n return this.api.getMarketOrders(regionId, 'all');\r\n }\r\n\r\n /**\r\n * Retrieves the list of type IDs that have active market orders in a region.\r\n *\r\n * @param regionId - The ID of the region to check for active types\r\n * @returns A list of type IDs with active orders in the region\r\n */\r\n getMarketTypes(regionId: number): Promise<number[]> {\r\n return this.api.getMarketTypes(regionId);\r\n }\r\n\r\n /**\r\n * Retrieves the list of all market group IDs used to categorize items on the market.\r\n *\r\n * @returns A list of all market group IDs\r\n */\r\n getMarketGroups(): Promise<number[]> {\r\n return this.api.getMarketGroups();\r\n }\r\n\r\n /**\r\n * Retrieves detailed information about a specific market group, including its name, description, and contained types.\r\n *\r\n * @param marketGroupId - The ID of the market group to look up\r\n * @returns The market group details including name, description, types, and optional parent group\r\n */\r\n getMarketGroupInformation(marketGroupId: number): Promise<MarketGroup> {\r\n return this.api.getMarketGroupInformation(marketGroupId);\r\n }\r\n\r\n /**\r\n * Retrieves the global average and adjusted prices for all tradeable item types.\r\n *\r\n * @returns A list of item types with their average and adjusted market prices\r\n */\r\n getMarketPrices(): Promise<MarketPrice[]> {\r\n return this.api.getMarketPrices();\r\n }\r\n\r\n /**\r\n * Retrieves all active market orders listed in a specific player-owned structure.\r\n *\r\n * @param structureId - The ID of the structure to fetch orders for\r\n * @returns A list of active market orders in the structure\r\n * @requires Authentication\r\n */\r\n getMarketOrdersInStructure(\r\n structureId: number,\r\n ): Promise<StructureMarketOrder[]> {\r\n return this.api.getMarketOrdersInStructure(structureId);\r\n }\r\n\r\n streamMarketOrders(\r\n regionId: number,\r\n ): AsyncGenerator<PageResult<MarketOrder>, void, undefined> {\r\n return this.streamEndpoint<MarketOrder>('getMarketOrders', regionId, 'all');\r\n }\r\n\r\n streamMarketTypes(\r\n regionId: number,\r\n ): AsyncGenerator<PageResult<number>, void, undefined> {\r\n return this.streamEndpoint<number>('getMarketTypes', regionId);\r\n }\r\n\r\n streamCharacterOrderHistory(\r\n characterId: number,\r\n ): AsyncGenerator<PageResult<CharacterMarketOrderHistory>, void, undefined> {\r\n return this.streamEndpoint<CharacterMarketOrderHistory>(\r\n 'getCharacterOrderHistory',\r\n characterId,\r\n );\r\n }\r\n\r\n streamCorporationOrders(\r\n corporationId: number,\r\n ): AsyncGenerator<PageResult<CorporationMarketOrder>, void, undefined> {\r\n return this.streamEndpoint<CorporationMarketOrder>(\r\n 'getCorporationOrders',\r\n corporationId,\r\n );\r\n }\r\n\r\n streamCorporationOrderHistory(\r\n corporationId: number,\r\n ): AsyncGenerator<\r\n PageResult<CorporationMarketOrderHistory>,\r\n void,\r\n undefined\r\n > {\r\n return this.streamEndpoint<CorporationMarketOrderHistory>(\r\n 'getCorporationOrderHistory',\r\n corporationId,\r\n );\r\n }\r\n\r\n streamMarketOrdersInStructure(\r\n structureId: number,\r\n ): AsyncGenerator<PageResult<StructureMarketOrder>, void, undefined> {\r\n return this.streamEndpoint<StructureMarketOrder>(\r\n 'getMarketOrdersInStructure',\r\n structureId,\r\n );\r\n }\r\n}\r\n","import { z } from 'zod';\nimport { EndpointMap } from './EndpointDefinition';\nimport {\n PlanetaryColonySchema,\n CustomsOfficeSchema,\n ColonyLayoutSchema,\n} from '../../schemas/pi';\nimport { SchematicInfoSchema } from '../../schemas/universe';\n\nexport const piEndpoints = {\n getColonies: {\n path: 'characters/{characterId}/planets',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n responseSchema: z.array(PlanetaryColonySchema),\n },\n getColonyLayout: {\n path: 'characters/{characterId}/planets/{planetId}',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId', 'planetId'],\n responseSchema: ColonyLayoutSchema,\n },\n getCorporationCustomsOffices: {\n path: 'corporations/{corporationId}/customs_offices',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId'],\n responseSchema: z.array(CustomsOfficeSchema),\n },\n getSchematicInformation: {\n path: 'universe/schematics/{schematicId}',\n method: 'GET',\n requiresAuth: false,\n pathParams: ['schematicId'],\n responseSchema: SchematicInfoSchema,\n },\n} as const satisfies EndpointMap;\n","import { z } from 'zod';\r\nimport { esiEnum } from './esiEnum';\r\n\r\nexport const PlanetaryColonySchema = z.looseObject({\r\n solar_system_id: z.number(),\r\n planet_id: z.number(),\r\n planet_type: esiEnum([\r\n 'temperate',\r\n 'barren',\r\n 'oceanic',\r\n 'ice',\r\n 'gas',\r\n 'lava',\r\n 'storm',\r\n 'plasma',\r\n ]),\r\n owner_id: z.number(),\r\n last_update: z.string(),\r\n upgrade_level: z.number(),\r\n num_pins: z.number(),\r\n});\r\n\r\nexport const CustomsOfficeSchema = z.looseObject({\r\n office_id: z.number(),\r\n system_id: z.number(),\r\n reinforce_exit_start: z.number(),\r\n reinforce_exit_end: z.number(),\r\n allow_access_with_standings: z.boolean().optional(),\r\n allow_alliance_access: z.boolean().optional(),\r\n alliance_tax_rate: z.number().optional(),\r\n corporation_tax_rate: z.number().optional(),\r\n standing_level: z.string().optional(),\r\n terrible_standing_tax_rate: z.number().optional(),\r\n bad_standing_tax_rate: z.number().optional(),\r\n neutral_standing_tax_rate: z.number().optional(),\r\n good_standing_tax_rate: z.number().optional(),\r\n excellent_standing_tax_rate: z.number().optional(),\r\n type_id: z.number().optional(),\r\n});\r\n\r\nexport const ColonyLayoutSchema = z.looseObject({\r\n links: z.array(\r\n z.looseObject({\r\n source_pin_id: z.number(),\r\n destination_pin_id: z.number(),\r\n link_level: z.number(),\r\n }),\r\n ),\r\n pins: z.array(\r\n z.looseObject({\r\n pin_id: z.number(),\r\n type_id: z.number(),\r\n latitude: z.number(),\r\n longitude: z.number(),\r\n schematic_id: z.number().optional(),\r\n extractor_details: z\r\n .looseObject({\r\n heads: z.array(\r\n z.looseObject({\r\n head_id: z.number(),\r\n latitude: z.number(),\r\n longitude: z.number(),\r\n }),\r\n ),\r\n product_type_id: z.number().optional(),\r\n cycle_time: z.number().optional(),\r\n head_radius: z.number().optional(),\r\n qty_per_cycle: z.number().optional(),\r\n })\r\n .optional(),\r\n factory_details: z\r\n .looseObject({\r\n schematic_id: z.number(),\r\n })\r\n .optional(),\r\n contents: z\r\n .array(\r\n z.looseObject({\r\n type_id: z.number(),\r\n amount: z.number(),\r\n }),\r\n )\r\n .optional(),\r\n install_time: z.string().optional(),\r\n expiry_time: z.string().optional(),\r\n last_cycle_start: z.string().optional(),\r\n }),\r\n ),\r\n routes: z.array(\r\n z.looseObject({\r\n route_id: z.number(),\r\n source_pin_id: z.number(),\r\n destination_pin_id: z.number(),\r\n content_type_id: z.number(),\r\n quantity: z.number(),\r\n waypoints: z.array(z.number()).optional(),\r\n }),\r\n ),\r\n});\r\n","import { z } from 'zod';\r\nimport { esiEnum } from './esiEnum';\r\n\r\nconst PositionSchema = z.looseObject({\r\n x: z.number(),\r\n y: z.number(),\r\n z: z.number(),\r\n});\r\n\r\nexport const SolarSystemInfoSchema = z.looseObject({\r\n system_id: z.number(),\r\n name: z.string(),\r\n constellation_id: z.number(),\r\n position: PositionSchema.optional(),\r\n security_class: z.string().optional(),\r\n security_status: z.number(),\r\n star_id: z.number().optional(),\r\n stargates: z.array(z.number()).optional(),\r\n stations: z.array(z.number()).optional(),\r\n planets: z\r\n .array(\r\n z.looseObject({\r\n asteroid_belts: z.array(z.number()).optional(),\r\n moons: z.array(z.number()).optional(),\r\n planet_id: z.number(),\r\n }),\r\n )\r\n .optional(),\r\n});\r\n\r\nexport const ConstellationInfoSchema = z.looseObject({\r\n constellation_id: z.number(),\r\n name: z.string(),\r\n region_id: z.number(),\r\n systems: z.array(z.number()),\r\n position: PositionSchema,\r\n});\r\n\r\nexport const RegionInfoSchema = z.looseObject({\r\n region_id: z.number(),\r\n name: z.string(),\r\n description: z.string().optional(),\r\n constellations: z.array(z.number()),\r\n});\r\n\r\nexport const AncestrySchema = z.looseObject({\r\n id: z.number(),\r\n name: z.string(),\r\n bloodline_id: z.number(),\r\n description: z.string(),\r\n short_description: z.string().optional(),\r\n icon_id: z.number().optional(),\r\n});\r\n\r\nexport const BloodlineSchema = z.looseObject({\r\n bloodline_id: z.number(),\r\n name: z.string(),\r\n description: z.string(),\r\n race_id: z.number(),\r\n corporation_id: z.number(),\r\n ship_type_id: z.number().nullable(),\r\n charisma: z.number(),\r\n intelligence: z.number(),\r\n memory: z.number(),\r\n perception: z.number(),\r\n willpower: z.number(),\r\n});\r\n\r\nexport const FactionSchema = z.looseObject({\r\n faction_id: z.number(),\r\n name: z.string(),\r\n description: z.string(),\r\n size_factor: z.number(),\r\n station_count: z.number(),\r\n station_system_count: z.number(),\r\n is_unique: z.boolean(),\r\n solar_system_id: z.number().optional(),\r\n corporation_id: z.number().optional(),\r\n militia_corporation_id: z.number().optional(),\r\n});\r\n\r\nexport const RaceSchema = z.looseObject({\r\n race_id: z.number(),\r\n name: z.string(),\r\n description: z.string(),\r\n alliance_id: z.number(),\r\n});\r\n\r\nexport const StationInfoSchema = z.looseObject({\r\n station_id: z.number(),\r\n name: z.string(),\r\n owner: z.number().optional(),\r\n system_id: z.number(),\r\n type_id: z.number(),\r\n race_id: z.number().optional(),\r\n reprocessing_efficiency: z.number(),\r\n reprocessing_stations_take: z.number(),\r\n max_dockable_ship_volume: z.number(),\r\n office_rental_cost: z.number(),\r\n services: z.array(z.string()),\r\n position: PositionSchema,\r\n});\r\n\r\nexport const TypeInfoSchema = z.looseObject({\r\n type_id: z.number(),\r\n name: z.string(),\r\n description: z.string(),\r\n published: z.boolean(),\r\n group_id: z.number(),\r\n market_group_id: z.number().optional(),\r\n radius: z.number().optional(),\r\n volume: z.number().optional(),\r\n packaged_volume: z.number().optional(),\r\n capacity: z.number().optional(),\r\n portion_size: z.number().optional(),\r\n mass: z.number().optional(),\r\n icon_id: z.number().optional(),\r\n graphic_id: z.number().optional(),\r\n dogma_attributes: z\r\n .array(\r\n z.looseObject({\r\n attribute_id: z.number(),\r\n value: z.number(),\r\n }),\r\n )\r\n .optional(),\r\n dogma_effects: z\r\n .array(\r\n z.looseObject({\r\n effect_id: z.number(),\r\n is_default: z.boolean(),\r\n }),\r\n )\r\n .optional(),\r\n});\r\n\r\nexport const AsteroidBeltInfoSchema = z.looseObject({\r\n name: z.string(),\r\n position: PositionSchema,\r\n system_id: z.number(),\r\n});\r\n\r\nexport const GraphicInfoSchema = z.looseObject({\r\n graphic_id: z.number(),\r\n collision_file: z.string().optional(),\r\n graphic_file: z.string().optional(),\r\n icon_folder: z.string().optional(),\r\n sof_dna: z.string().optional(),\r\n sof_fation_name: z.string().optional(),\r\n sof_hull_name: z.string().optional(),\r\n sof_race_name: z.string().optional(),\r\n});\r\n\r\nexport const ItemCategorySchema = z.looseObject({\r\n category_id: z.number(),\r\n name: z.string(),\r\n groups: z.array(z.number()),\r\n published: z.boolean(),\r\n});\r\n\r\nexport const ItemGroupSchema = z.looseObject({\r\n group_id: z.number(),\r\n name: z.string(),\r\n category_id: z.number(),\r\n types: z.array(z.number()),\r\n published: z.boolean(),\r\n});\r\n\r\nexport const MoonInfoSchema = z.looseObject({\r\n moon_id: z.number(),\r\n name: z.string(),\r\n system_id: z.number(),\r\n position: PositionSchema,\r\n});\r\n\r\nexport const PlanetInfoSchema = z.looseObject({\r\n planet_id: z.number(),\r\n name: z.string(),\r\n system_id: z.number(),\r\n type_id: z.number(),\r\n position: PositionSchema,\r\n});\r\n\r\nexport const StarInfoSchema = z.looseObject({\r\n star_id: z.number().optional(),\r\n solar_system_id: z.number(),\r\n name: z.string(),\r\n type_id: z.number(),\r\n age: z.number(),\r\n luminosity: z.number(),\r\n radius: z.number(),\r\n spectral_class: z.string(),\r\n temperature: z.number(),\r\n});\r\n\r\nexport const StargateInfoSchema = z.looseObject({\r\n stargate_id: z.number(),\r\n name: z.string(),\r\n system_id: z.number(),\r\n type_id: z.number(),\r\n position: PositionSchema,\r\n destination: z.looseObject({\r\n system_id: z.number(),\r\n stargate_id: z.number(),\r\n }),\r\n});\r\n\r\nexport const StructureInfoSchema = z.looseObject({\r\n structure_id: z.number().optional(),\r\n name: z.string(),\r\n owner_id: z.number(),\r\n solar_system_id: z.number(),\r\n type_id: z.number().optional(),\r\n position: PositionSchema.optional(),\r\n});\r\n\r\nexport const SystemJumpSchema = z.looseObject({\r\n system_id: z.number(),\r\n ship_jumps: z.number(),\r\n});\r\n\r\nexport const SystemKillSchema = z.looseObject({\r\n system_id: z.number(),\r\n npc_kills: z.number(),\r\n pod_kills: z.number(),\r\n ship_kills: z.number(),\r\n});\r\n\r\nconst IdNameSchema = z.looseObject({\r\n id: z.number(),\r\n name: z.string(),\r\n});\r\n\r\nexport const BulkIdResultSchema = z.looseObject({\r\n agents: z.array(IdNameSchema).optional(),\r\n alliances: z.array(IdNameSchema).optional(),\r\n characters: z.array(IdNameSchema).optional(),\r\n constellations: z.array(IdNameSchema).optional(),\r\n corporations: z.array(IdNameSchema).optional(),\r\n factions: z.array(IdNameSchema).optional(),\r\n inventory_types: z.array(IdNameSchema).optional(),\r\n regions: z.array(IdNameSchema).optional(),\r\n systems: z.array(IdNameSchema).optional(),\r\n stations: z.array(IdNameSchema).optional(),\r\n});\r\n\r\nexport const NameAndCategorySchema = z.looseObject({\r\n id: z.number(),\r\n name: z.string(),\r\n category: esiEnum([\r\n 'alliance',\r\n 'character',\r\n 'constellation',\r\n 'corporation',\r\n 'inventory_type',\r\n 'region',\r\n 'solar_system',\r\n 'station',\r\n 'faction',\r\n ]),\r\n});\r\n\r\nexport const SchematicInfoSchema = z.looseObject({\r\n schematic_name: z.string(),\r\n cycle_time: z.number(),\r\n});\r\n\r\nexport const SearchResultSchema = z.looseObject({\r\n agent: z.array(z.number()).optional(),\r\n alliance: z.array(z.number()).optional(),\r\n character: z.array(z.number()).optional(),\r\n constellation: z.array(z.number()).optional(),\r\n corporation: z.array(z.number()).optional(),\r\n faction: z.array(z.number()).optional(),\r\n inventory_type: z.array(z.number()).optional(),\r\n region: z.array(z.number()).optional(),\r\n solar_system: z.array(z.number()).optional(),\r\n station: z.array(z.number()).optional(),\r\n structure: z.array(z.number()).optional(),\r\n});\r\n","import { ApiClient } from '../core/ApiClient';\r\nimport { BaseEsiClient } from './BaseEsiClient';\r\nimport { piEndpoints } from '../core/endpoints/piEndpoints';\r\nimport {\r\n PlanetaryColony,\r\n CustomsOffice,\r\n ColonyLayout,\r\n SchematicInfo,\r\n} from '../types/api-responses';\r\nimport { PageResult } from '../core/pagination/AsyncPaginationIterator';\r\n\r\nexport class PiClient extends BaseEsiClient<typeof piEndpoints> {\r\n constructor(client: ApiClient) {\r\n super(client, piEndpoints);\r\n }\r\n\r\n /**\r\n * Retrieves the list of planetary interaction colonies owned by a character.\r\n *\r\n * @param characterId - The ID of the character whose colonies to fetch\r\n * @returns A list of the character's planetary colonies\r\n * @requires Authentication\r\n */\r\n getColonies(characterId: number): Promise<PlanetaryColony[]> {\r\n return this.api.getColonies(characterId);\r\n }\r\n\r\n /**\r\n * Retrieves the full layout of a planetary colony including pins, links, and routes.\r\n *\r\n * @param characterId - The ID of the character who owns the colony\r\n * @param planetId - The ID of the planet to get the colony layout for\r\n * @returns The colony layout with pins, links, and routes\r\n * @requires Authentication\r\n */\r\n getColonyLayout(\r\n characterId: number,\r\n planetId: number,\r\n ): Promise<ColonyLayout> {\r\n return this.api.getColonyLayout(characterId, planetId);\r\n }\r\n\r\n /**\r\n * Retrieves the list of customs offices owned by a corporation.\r\n *\r\n * @param corporationId - The ID of the corporation whose customs offices to fetch\r\n * @returns A list of the corporation's customs offices with their settings\r\n * @requires Authentication\r\n */\r\n getCorporationCustomsOffices(\r\n corporationId: number,\r\n ): Promise<CustomsOffice[]> {\r\n return this.api.getCorporationCustomsOffices(corporationId);\r\n }\r\n\r\n /**\r\n * Retrieves information about a planetary interaction schematic, including its inputs and outputs.\r\n *\r\n * @param schematicId - The ID of the schematic to look up\r\n * @returns The schematic details including cycle time, inputs, and outputs\r\n */\r\n getSchematicInformation(schematicId: number): Promise<SchematicInfo> {\r\n return this.api.getSchematicInformation(schematicId);\r\n }\r\n\r\n streamColonies(\r\n characterId: number,\r\n ): AsyncGenerator<PageResult<PlanetaryColony>, void, undefined> {\r\n return this.streamEndpoint<PlanetaryColony>('getColonies', characterId);\r\n }\r\n\r\n streamCorporationCustomsOffices(\r\n corporationId: number,\r\n ): AsyncGenerator<PageResult<CustomsOffice>, void, undefined> {\r\n return this.streamEndpoint<CustomsOffice>(\r\n 'getCorporationCustomsOffices',\r\n corporationId,\r\n );\r\n }\r\n}\r\n","import { z } from 'zod';\nimport { EndpointMap } from './EndpointDefinition';\n\nexport const routeEndpoints = {\n getRoute: {\n path: 'route/{origin}/{destination}',\n method: 'POST',\n requiresAuth: false,\n pathParams: ['origin', 'destination'],\n hasBody: true,\n responseSchema: z.looseObject({ route: z.array(z.number()) }),\n },\n} as const satisfies EndpointMap;\n","import { ApiClient } from '../core/ApiClient';\nimport { BaseEsiClient } from './BaseEsiClient';\nimport { routeEndpoints } from '../core/endpoints/routeEndpoints';\n\nexport interface RouteOptions {\n preference?: 'Shorter' | 'Safer' | 'LessSecure';\n avoid_systems?: number[];\n connections?: { from: number; to: number }[];\n security_penalty?: number;\n}\n\nexport class RouteClient extends BaseEsiClient<typeof routeEndpoints> {\n constructor(client: ApiClient) {\n super(client, routeEndpoints);\n }\n\n /**\n * Calculates a route between two solar systems, returning the list of system IDs along the path via POST.\n *\n * @param origin - The solar system ID to start the route from\n * @param destination - The solar system ID to route to\n * @param options - Optional routing preferences such as route type, avoided systems, and custom connections\n * @returns An ordered list of solar system IDs representing the route\n */\n async getRoute(\n origin: number,\n destination: number,\n options?: RouteOptions,\n ): Promise<number[]> {\n const body = options ?? {};\n const result = (await this.api.getRoute(origin, destination, body)) as {\n route: number[];\n };\n return result.route;\n }\n}\n","import { EndpointMap } from './EndpointDefinition';\nimport { SearchResultSchema } from '../../schemas/universe';\n\nexport const searchEndpoints = {\n searchCharacter: {\n path: 'characters/{characterId}/search/',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n queryParams: { searchString: 'search', categories: 'categories' },\n responseSchema: SearchResultSchema,\n },\n} as const satisfies EndpointMap;\n","import { ApiClient } from '../core/ApiClient';\nimport { BaseEsiClient } from './BaseEsiClient';\nimport { searchEndpoints } from '../core/endpoints/searchEndpoints';\nimport { SearchResult } from '../types/api-responses';\n\nexport class SearchClient extends BaseEsiClient<typeof searchEndpoints> {\n constructor(client: ApiClient) {\n super(client, searchEndpoints);\n }\n\n /**\n * Searches for entities matching a query string on behalf of a character.\n *\n * @param characterId - The ID of the character performing the search\n * @param searchString - The search query string to match against\n * @returns Search results grouped by entity category\n * @requires Authentication\n */\n characterSearch(\n characterId: number,\n searchString: string,\n categories: string[],\n ): Promise<SearchResult> {\n return this.api.searchCharacter(\n characterId,\n searchString,\n categories.join(','),\n ) as Promise<SearchResult>;\n }\n}\n","import { z } from 'zod';\nimport { EndpointMap } from './EndpointDefinition';\nimport {\n SkillQueueSchema,\n CharacterSkillsResponseSchema,\n} from '../../schemas/skills';\nimport { CharacterAttributesSchema } from '../../schemas/character';\n\nexport const skillEndpoints = {\n getCharacterAttributes: {\n path: 'characters/{characterId}/attributes',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n responseSchema: CharacterAttributesSchema,\n },\n getCharacterSkillQueue: {\n path: 'characters/{characterId}/skillqueue',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n responseSchema: z.array(SkillQueueSchema),\n },\n getCharacterSkills: {\n path: 'characters/{characterId}/skills',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n responseSchema: CharacterSkillsResponseSchema,\n },\n} as const satisfies EndpointMap;\n","import { z } from 'zod';\n\nexport const CharacterSkillSchema = z.looseObject({\n skill_id: z.number(),\n skillpoints_in_skill: z.number(),\n trained_skill_level: z.number(),\n active_skill_level: z.number(),\n});\n\nexport const CharacterSkillsResponseSchema = z.looseObject({\n skills: z.array(\n z.looseObject({\n skill_id: z.number(),\n skillpoints_in_skill: z.number(),\n trained_skill_level: z.number(),\n active_skill_level: z.number(),\n }),\n ),\n total_sp: z.number(),\n unallocated_sp: z.number().optional(),\n});\n\nexport const SkillQueueSchema = z.looseObject({\n skill_id: z.number(),\n finished_level: z.number(),\n queue_position: z.number(),\n level_end_sp: z.number().optional(),\n level_start_sp: z.number().optional(),\n training_start_sp: z.number().optional(),\n start_date: z.string().optional(),\n finish_date: z.string().optional(),\n});\n","import { ApiClient } from '../core/ApiClient';\r\nimport { BaseEsiClient } from './BaseEsiClient';\r\nimport { skillEndpoints } from '../core/endpoints/skillEndpoints';\r\nimport {\r\n CharacterAttributes,\r\n CharacterSkill,\r\n SkillQueue,\r\n} from '../types/api-responses';\r\nimport { PageResult } from '../core/pagination/AsyncPaginationIterator';\r\n\r\nexport class CharacterSkillsClient extends BaseEsiClient<\r\n typeof skillEndpoints\r\n> {\r\n constructor(client: ApiClient) {\r\n super(client, skillEndpoints);\r\n }\r\n\r\n /**\r\n * Retrieves a character's neural remap attribute values (intelligence, memory, charisma, perception, willpower).\r\n *\r\n * @param characterId - The ID of the character\r\n * @returns The character's current attribute values and bonus remap information\r\n * @requires Authentication\r\n */\r\n getCharacterAttributes(characterId: number): Promise<CharacterAttributes> {\r\n return this.api.getCharacterAttributes(characterId);\r\n }\r\n\r\n /**\r\n * Retrieves the skill training queue for a character.\r\n *\r\n * @param characterId - The ID of the character\r\n * @returns An ordered list of skills currently in the character's training queue\r\n * @requires Authentication\r\n */\r\n getCharacterSkillQueue(characterId: number): Promise<SkillQueue[]> {\r\n return this.api.getCharacterSkillQueue(characterId);\r\n }\r\n\r\n /**\r\n * Retrieves all trained skills for a character, including total and unallocated skill points.\r\n *\r\n * @param characterId - The ID of the character\r\n * @returns The character's trained skills, total SP, and optionally unallocated SP\r\n * @requires Authentication\r\n */\r\n getCharacterSkills(characterId: number): Promise<{\r\n skills: CharacterSkill[];\r\n total_sp: number;\r\n unallocated_sp?: number;\r\n }> {\r\n return this.api.getCharacterSkills(characterId);\r\n }\r\n\r\n streamCharacterSkillQueue(\r\n characterId: number,\r\n ): AsyncGenerator<PageResult<SkillQueue>, void, undefined> {\r\n return this.streamEndpoint<SkillQueue>(\r\n 'getCharacterSkillQueue',\r\n characterId,\r\n );\r\n }\r\n}\r\n","import { z } from 'zod';\nimport { EndpointMap } from './EndpointDefinition';\nimport {\n SovereigntyCampaignSchema,\n SovereigntySystemSchema,\n} from '../../schemas/sovereignty';\n\nexport const sovereigntyEndpoints = {\n getSovereigntyCampaigns: {\n path: 'sovereignty/campaigns',\n method: 'GET',\n requiresAuth: false,\n responseSchema: z.array(SovereigntyCampaignSchema),\n },\n getSovereigntySystems: {\n path: 'sovereignty/systems',\n method: 'GET',\n requiresAuth: false,\n responseSchema: SovereigntySystemSchema,\n },\n} as const satisfies EndpointMap;\n","import { z } from 'zod';\r\nimport { esiEnum } from './esiEnum';\r\n\r\nexport const SovereigntyCampaignSchema = z.looseObject({\r\n campaign_id: z.number(),\r\n structure_id: z.number(),\r\n solar_system_id: z.number(),\r\n constellation_id: z.number(),\r\n event_type: esiEnum([\r\n 'tcu_defense',\r\n 'ihub_defense',\r\n 'station_defense',\r\n 'station_freeport',\r\n ]),\r\n start_time: z.string(),\r\n defender_id: z.number().optional(),\r\n defender_score: z.number().optional(),\r\n attackers_score: z.number().optional(),\r\n participants: z\r\n .array(\r\n z.looseObject({\r\n alliance_id: z.number(),\r\n score: z.number(),\r\n }),\r\n )\r\n .optional(),\r\n});\r\n\r\nexport const SovereigntySystemStructureSchema = z.looseObject({\r\n alliance_id: z.number().optional(),\r\n solar_system_id: z.number().optional(),\r\n structure_id: z.number(),\r\n structure_type_id: z.number(),\r\n vulnerability_occupancy_level: z.number().optional(),\r\n vulnerable_start_time: z.string().optional(),\r\n vulnerable_end_time: z.string().optional(),\r\n});\r\n\r\nconst SovereigntyVulnerabilityWindowSchema = z.looseObject({\r\n start: z.string(),\r\n end: z.string(),\r\n});\r\n\r\nconst SovereigntyHubSchema = z.looseObject({\r\n id: z.number(),\r\n vulnerability_window: SovereigntyVulnerabilityWindowSchema.optional(),\r\n});\r\n\r\nconst SovereigntyDevelopmentSchema = z.looseObject({\r\n activity_defense_multiplier: z.number().optional(),\r\n military_level: z.number().optional(),\r\n industrial_level: z.number().optional(),\r\n strategic_level: z.number().optional(),\r\n});\r\n\r\nconst SovereigntyAllianceClaimSchema = z.looseObject({\r\n alliance_id: z.number(),\r\n corporation_id: z.number().optional(),\r\n claimed_since: z.string().optional(),\r\n sovereignty_hub: SovereigntyHubSchema.optional(),\r\n is_capital_system: z.boolean().optional(),\r\n development: SovereigntyDevelopmentSchema.optional(),\r\n});\r\n\r\nconst SovereigntyFactionClaimSchema = z.looseObject({\r\n faction_id: z.number(),\r\n});\r\n\r\nconst SovereigntyClaimSchema = z.looseObject({\r\n alliance: SovereigntyAllianceClaimSchema.optional(),\r\n faction: SovereigntyFactionClaimSchema.optional(),\r\n unclaimed: z.boolean().optional(),\r\n});\r\n\r\nconst SovereigntySystemEntrySchema = z.looseObject({\r\n solar_system_id: z.number(),\r\n claim: SovereigntyClaimSchema,\r\n});\r\n\r\nexport const SovereigntySystemSchema = z.looseObject({\r\n solar_systems: z.array(SovereigntySystemEntrySchema),\r\n});\r\n","import { ApiClient } from '../core/ApiClient';\nimport { BaseEsiClient } from './BaseEsiClient';\nimport { sovereigntyEndpoints } from '../core/endpoints/sovereigntyEndpoints';\nimport { SovereigntyCampaign, SovereigntySystem } from '../types/api-responses';\n\nexport class SovereigntyClient extends BaseEsiClient<\n typeof sovereigntyEndpoints\n> {\n constructor(client: ApiClient) {\n super(client, sovereigntyEndpoints);\n }\n\n /**\n * Retrieves all active sovereignty campaigns, including command node contests and station freeports.\n *\n * @returns A list of active sovereignty campaigns\n */\n getSovereigntyCampaigns(): Promise<SovereigntyCampaign[]> {\n return this.api.getSovereigntyCampaigns() as Promise<SovereigntyCampaign[]>;\n }\n\n /**\n * Retrieves the combined sovereignty systems data including occupancy, structures, and separate ADM indices (military, industry, strategic).\n *\n * @returns A list of sovereignty systems with ownership, ADM indices, and anchored structures\n */\n getSovereigntySystems(): Promise<SovereigntySystem> {\n return this.api.getSovereigntySystems() as Promise<SovereigntySystem>;\n }\n}\n","import { z } from 'zod';\n\nexport const ServerStatusSchema = z.looseObject({\n players: z.number(),\n server_version: z.string(),\n start_time: z.string(),\n vip: z.boolean().optional(),\n});\n","import { EndpointMap } from './EndpointDefinition';\nimport { ServerStatusSchema } from '../../schemas/status';\n\nexport const statusEndpoints = {\n getStatus: {\n path: 'status',\n method: 'GET',\n requiresAuth: false,\n responseSchema: ServerStatusSchema,\n },\n} as const satisfies EndpointMap;\n","import { ApiClient } from '../core/ApiClient';\nimport { BaseEsiClient } from './BaseEsiClient';\nimport { statusEndpoints } from '../core/endpoints/statusEndpoints';\nimport { ServerStatus } from '../types/api-responses';\n\nexport class StatusClient extends BaseEsiClient<typeof statusEndpoints> {\n constructor(client: ApiClient) {\n super(client, statusEndpoints);\n }\n\n /**\n * Retrieves the current Tranquility server status, including player count and server version.\n *\n * @returns The current server status information\n */\n getStatus(): Promise<ServerStatus> {\n return this.api.getStatus() as Promise<ServerStatus>;\n }\n}\n","import { EndpointMap } from './EndpointDefinition';\n\nexport const uiEndpoints = {\n setAutopilotWaypoint: {\n path: 'ui/autopilot/waypoint',\n method: 'POST',\n requiresAuth: true,\n queryParams: {\n destinationId: 'destination_id',\n addToBeginning: 'add_to_beginning',\n clearOtherWaypoints: 'clear_other_waypoints',\n },\n },\n openContractWindow: {\n path: 'ui/openwindow/contract',\n method: 'POST',\n requiresAuth: true,\n queryParams: { contractId: 'contract_id' },\n },\n openInformationWindow: {\n path: 'ui/openwindow/information',\n method: 'POST',\n requiresAuth: true,\n queryParams: { targetId: 'target_id' },\n },\n openMarketDetailsWindow: {\n path: 'ui/openwindow/marketdetails',\n method: 'POST',\n requiresAuth: true,\n queryParams: { typeId: 'type_id' },\n },\n openNewMailWindow: {\n path: 'ui/openwindow/newmail',\n method: 'POST',\n requiresAuth: true,\n hasBody: true,\n },\n} as const satisfies EndpointMap;\n","import { ApiClient } from '../core/ApiClient';\nimport { BaseEsiClient } from './BaseEsiClient';\nimport { uiEndpoints } from '../core/endpoints/uiEndpoints';\n\nexport class UiClient extends BaseEsiClient<typeof uiEndpoints> {\n constructor(client: ApiClient) {\n super(client, uiEndpoints);\n }\n\n /**\n * Sets a solar system as an autopilot waypoint in the EVE client.\n *\n * @param destinationId - The solar system, station, or structure ID to set as waypoint\n * @param addToBeginning - Whether to add the waypoint to the beginning of the route\n * @param clearOtherWaypoints - Whether to clear existing waypoints first\n * @requires Authentication\n */\n setAutopilotWaypoint(\n destinationId: number,\n addToBeginning: boolean,\n clearOtherWaypoints: boolean,\n ): Promise<void> {\n return this.api.setAutopilotWaypoint(\n destinationId,\n addToBeginning,\n clearOtherWaypoints,\n ) as Promise<void>;\n }\n\n /**\n * Opens the contract window for a specific contract in the EVE client.\n *\n * @param contractId - The contract ID to display\n * @requires Authentication\n */\n openContractWindow(contractId: number): Promise<void> {\n return this.api.openContractWindow(contractId) as Promise<void>;\n }\n\n /**\n * Opens the information window for a specific entity in the EVE client.\n *\n * @param targetId - The character, corporation, alliance, or type ID to display\n * @requires Authentication\n */\n openInformationWindow(targetId: number): Promise<void> {\n return this.api.openInformationWindow(targetId) as Promise<void>;\n }\n\n /**\n * Opens the market details window for a specific type in the EVE client.\n *\n * @param typeId - The inventory type ID to display market details for\n * @requires Authentication\n */\n openMarketDetailsWindow(typeId: number): Promise<void> {\n return this.api.openMarketDetailsWindow(typeId) as Promise<void>;\n }\n\n /**\n * Opens the new mail composition window in the EVE client with pre-filled fields.\n *\n * @param body - The mail details including recipients (integer array), subject, and body text\n * @requires Authentication\n */\n openNewMailWindow(body: object): Promise<void> {\n return this.api.openNewMailWindow(body) as Promise<void>;\n }\n}\n","import { z } from 'zod';\r\nimport { EndpointMap } from './EndpointDefinition';\r\nimport {\r\n AncestrySchema,\r\n AsteroidBeltInfoSchema,\r\n BloodlineSchema,\r\n BulkIdResultSchema,\r\n ConstellationInfoSchema,\r\n FactionSchema,\r\n GraphicInfoSchema,\r\n ItemCategorySchema,\r\n ItemGroupSchema,\r\n MoonInfoSchema,\r\n NameAndCategorySchema,\r\n PlanetInfoSchema,\r\n RaceSchema,\r\n RegionInfoSchema,\r\n SchematicInfoSchema,\r\n SolarSystemInfoSchema,\r\n StarInfoSchema,\r\n StargateInfoSchema,\r\n StationInfoSchema,\r\n StructureInfoSchema,\r\n SystemJumpSchema,\r\n SystemKillSchema,\r\n TypeInfoSchema,\r\n} from '../../schemas/universe';\r\n\r\nexport const universeEndpoints = {\r\n getAncestries: {\r\n path: 'universe/ancestries',\r\n method: 'GET',\r\n requiresAuth: false,\r\n responseSchema: z.array(AncestrySchema),\r\n },\r\n getAsteroidBeltInfo: {\r\n path: 'universe/asteroid_belts/{asteroidBeltId}',\r\n method: 'GET',\r\n requiresAuth: false,\r\n pathParams: ['asteroidBeltId'],\r\n responseSchema: AsteroidBeltInfoSchema,\r\n },\r\n getBloodlines: {\r\n path: 'universe/bloodlines',\r\n method: 'GET',\r\n requiresAuth: false,\r\n responseSchema: z.array(BloodlineSchema),\r\n },\r\n getCategories: {\r\n path: 'universe/categories',\r\n method: 'GET',\r\n requiresAuth: false,\r\n responseSchema: z.array(z.number()),\r\n },\r\n getCategoryById: {\r\n path: 'universe/categories/{categoryId}',\r\n method: 'GET',\r\n requiresAuth: false,\r\n pathParams: ['categoryId'],\r\n responseSchema: ItemCategorySchema,\r\n },\r\n getConstellations: {\r\n path: 'universe/constellations',\r\n method: 'GET',\r\n requiresAuth: false,\r\n responseSchema: z.array(z.number()),\r\n },\r\n getConstellationById: {\r\n path: 'universe/constellations/{constellationId}',\r\n method: 'GET',\r\n requiresAuth: false,\r\n pathParams: ['constellationId'],\r\n responseSchema: ConstellationInfoSchema,\r\n },\r\n getFactions: {\r\n path: 'universe/factions',\r\n method: 'GET',\r\n requiresAuth: false,\r\n responseSchema: z.array(FactionSchema),\r\n },\r\n getGraphics: {\r\n path: 'universe/graphics',\r\n method: 'GET',\r\n requiresAuth: false,\r\n responseSchema: z.array(z.number()),\r\n },\r\n getGraphicById: {\r\n path: 'universe/graphics/{graphicId}',\r\n method: 'GET',\r\n requiresAuth: false,\r\n pathParams: ['graphicId'],\r\n responseSchema: GraphicInfoSchema,\r\n },\r\n getItemGroups: {\r\n path: 'universe/groups',\r\n method: 'GET',\r\n requiresAuth: false,\r\n responseSchema: z.array(z.number()),\r\n },\r\n getItemGroupById: {\r\n path: 'universe/groups/{groupId}',\r\n method: 'GET',\r\n requiresAuth: false,\r\n pathParams: ['groupId'],\r\n responseSchema: ItemGroupSchema,\r\n },\r\n postBulkNamesToIds: {\r\n path: 'universe/ids',\r\n method: 'POST',\r\n requiresAuth: false,\r\n bodyBuilder: (names: string[]) => names,\r\n responseSchema: BulkIdResultSchema,\r\n requestSchema: z.array(z.string().min(1)),\r\n },\r\n getMoonById: {\r\n path: 'universe/moons/{moonId}',\r\n method: 'GET',\r\n requiresAuth: false,\r\n pathParams: ['moonId'],\r\n responseSchema: MoonInfoSchema,\r\n },\r\n postNamesAndCategories: {\r\n path: 'universe/names',\r\n method: 'POST',\r\n requiresAuth: false,\r\n bodyBuilder: (ids: number[]) => ids,\r\n responseSchema: z.array(NameAndCategorySchema),\r\n requestSchema: z.array(z.number().int()),\r\n },\r\n getPlanetById: {\r\n path: 'universe/planets/{planetId}',\r\n method: 'GET',\r\n requiresAuth: false,\r\n pathParams: ['planetId'],\r\n responseSchema: PlanetInfoSchema,\r\n },\r\n getRaces: {\r\n path: 'universe/races',\r\n method: 'GET',\r\n requiresAuth: false,\r\n responseSchema: z.array(RaceSchema),\r\n },\r\n getRegions: {\r\n path: 'universe/regions',\r\n method: 'GET',\r\n requiresAuth: false,\r\n responseSchema: z.array(z.number()),\r\n },\r\n getRegionById: {\r\n path: 'universe/regions/{regionId}',\r\n method: 'GET',\r\n requiresAuth: false,\r\n pathParams: ['regionId'],\r\n responseSchema: RegionInfoSchema,\r\n },\r\n getSchematicById: {\r\n path: 'universe/schematics/{schematicId}',\r\n method: 'GET',\r\n requiresAuth: false,\r\n pathParams: ['schematicId'],\r\n responseSchema: SchematicInfoSchema,\r\n },\r\n getStargateById: {\r\n path: 'universe/stargates/{stargateId}',\r\n method: 'GET',\r\n requiresAuth: false,\r\n pathParams: ['stargateId'],\r\n responseSchema: StargateInfoSchema,\r\n },\r\n getStarById: {\r\n path: 'universe/stars/{starId}',\r\n method: 'GET',\r\n requiresAuth: false,\r\n pathParams: ['starId'],\r\n responseSchema: StarInfoSchema,\r\n },\r\n getStationById: {\r\n path: 'universe/stations/{stationId}',\r\n method: 'GET',\r\n requiresAuth: false,\r\n pathParams: ['stationId'],\r\n responseSchema: StationInfoSchema,\r\n },\r\n getStructures: {\r\n path: 'universe/structures',\r\n method: 'GET',\r\n requiresAuth: false,\r\n responseSchema: z.array(z.number()),\r\n },\r\n getStructureById: {\r\n path: 'universe/structures/{structureId}',\r\n method: 'GET',\r\n requiresAuth: true,\r\n pathParams: ['structureId'],\r\n responseSchema: StructureInfoSchema,\r\n },\r\n getSystemJumps: {\r\n path: 'universe/system_jumps',\r\n method: 'GET',\r\n requiresAuth: false,\r\n responseSchema: z.array(SystemJumpSchema),\r\n },\r\n getSystemKills: {\r\n path: 'universe/system_kills',\r\n method: 'GET',\r\n requiresAuth: false,\r\n responseSchema: z.array(SystemKillSchema),\r\n },\r\n getSystems: {\r\n path: 'universe/systems',\r\n method: 'GET',\r\n requiresAuth: false,\r\n responseSchema: z.array(z.number()),\r\n },\r\n getSystemById: {\r\n path: 'universe/systems/{systemId}',\r\n method: 'GET',\r\n requiresAuth: false,\r\n pathParams: ['systemId'],\r\n responseSchema: SolarSystemInfoSchema,\r\n },\r\n getTypes: {\r\n path: 'universe/types',\r\n method: 'GET',\r\n requiresAuth: false,\r\n responseSchema: z.array(z.number()),\r\n },\r\n getTypeById: {\r\n path: 'universe/types/{typeId}',\r\n method: 'GET',\r\n requiresAuth: false,\r\n pathParams: ['typeId'],\r\n responseSchema: TypeInfoSchema,\r\n },\r\n} as const satisfies EndpointMap;\r\n","import { ApiClient } from '../core/ApiClient';\nimport { BaseEsiClient } from './BaseEsiClient';\nimport { universeEndpoints } from '../core/endpoints/universeEndpoints';\nimport {\n Ancestry,\n AsteroidBeltInfo,\n Bloodline,\n BulkIdResult,\n ConstellationInfo,\n Faction,\n GraphicInfo,\n ItemCategory,\n ItemGroup,\n MoonInfo,\n NameAndCategory,\n PlanetInfo,\n Race,\n RegionInfo,\n SchematicInfo,\n SolarSystemInfo,\n StarInfo,\n StargateInfo,\n StationInfo,\n StructureInfo,\n SystemJump,\n SystemKill,\n TypeInfo,\n} from '../types/api-responses';\n\nexport class UniverseClient extends BaseEsiClient<typeof universeEndpoints> {\n constructor(client: ApiClient) {\n super(client, universeEndpoints);\n }\n\n /**\n * Retrieves all available character ancestries for character creation.\n *\n * @returns A list of character ancestries\n */\n getAncestries(): Promise<Ancestry[]> {\n return this.api.getAncestries() as Promise<Ancestry[]>;\n }\n\n /**\n * Retrieves information about an asteroid belt, including its position in space.\n *\n * @param asteroidBeltId - The ID of the asteroid belt\n * @returns Details about the asteroid belt\n */\n getAsteroidBeltInfo(asteroidBeltId: number): Promise<AsteroidBeltInfo> {\n return this.api.getAsteroidBeltInfo(\n asteroidBeltId,\n ) as Promise<AsteroidBeltInfo>;\n }\n\n /**\n * Retrieves all available character bloodlines for character creation.\n *\n * @returns A list of character bloodlines\n */\n getBloodlines(): Promise<Bloodline[]> {\n return this.api.getBloodlines() as Promise<Bloodline[]>;\n }\n\n /**\n * Retrieves information about a constellation, including its systems and position.\n *\n * @param constellationId - The ID of the constellation\n * @returns Detailed constellation information\n */\n getConstellationById(constellationId: number): Promise<ConstellationInfo> {\n return this.api.getConstellationById(\n constellationId,\n ) as Promise<ConstellationInfo>;\n }\n\n /**\n * Retrieves a list of all constellation IDs in the EVE universe.\n *\n * @returns A list of constellation IDs\n */\n getConstellations(): Promise<number[]> {\n return this.api.getConstellations() as Promise<number[]>;\n }\n\n /**\n * Retrieves all NPC factions in the EVE universe.\n *\n * @returns A list of NPC factions\n */\n getFactions(): Promise<Faction[]> {\n return this.api.getFactions() as Promise<Faction[]>;\n }\n\n /**\n * Retrieves information about a specific graphic asset used in the EVE client.\n *\n * @param graphicId - The ID of the graphic\n * @returns Detailed graphic information\n */\n getGraphicById(graphicId: number): Promise<GraphicInfo> {\n return this.api.getGraphicById(graphicId) as Promise<GraphicInfo>;\n }\n\n /**\n * Retrieves a list of all graphic asset IDs.\n *\n * @returns A list of graphic IDs\n */\n getGraphics(): Promise<number[]> {\n return this.api.getGraphics() as Promise<number[]>;\n }\n\n /**\n * Retrieves a list of all item category IDs in the EVE universe.\n *\n * @returns A list of item category IDs\n */\n getItemCategories(): Promise<number[]> {\n return this.api.getCategories() as Promise<number[]>;\n }\n\n /**\n * Retrieves information about a specific item category, including its groups.\n *\n * @param categoryId - The ID of the item category\n * @returns Detailed item category information\n */\n getItemCategoryById(categoryId: number): Promise<ItemCategory> {\n return this.api.getCategoryById(categoryId) as Promise<ItemCategory>;\n }\n\n /**\n * Retrieves information about a specific item group, including its types.\n *\n * @param groupId - The ID of the item group\n * @returns Detailed item group information\n */\n getItemGroupById(groupId: number): Promise<ItemGroup> {\n return this.api.getItemGroupById(groupId) as Promise<ItemGroup>;\n }\n\n /**\n * Retrieves a list of all item group IDs in the EVE universe.\n *\n * @returns A list of item group IDs\n */\n getItemGroups(): Promise<number[]> {\n return this.api.getItemGroups() as Promise<number[]>;\n }\n\n /**\n * Retrieves information about a moon, including its name and position.\n *\n * @param moonId - The ID of the moon\n * @returns Detailed moon information\n */\n getMoonById(moonId: number): Promise<MoonInfo> {\n return this.api.getMoonById(moonId) as Promise<MoonInfo>;\n }\n\n /**\n * Retrieves information about a planet, including its name, type, and position.\n *\n * @param planetId - The ID of the planet\n * @returns Detailed planet information\n */\n getPlanetById(planetId: number): Promise<PlanetInfo> {\n return this.api.getPlanetById(planetId) as Promise<PlanetInfo>;\n }\n\n /**\n * Retrieves all playable races in the EVE universe.\n *\n * @returns A list of playable races\n */\n getRaces(): Promise<Race[]> {\n return this.api.getRaces() as Promise<Race[]>;\n }\n\n /**\n * Retrieves information about a region, including its constellations and name.\n *\n * @param regionId - The ID of the region\n * @returns Detailed region information\n */\n getRegionById(regionId: number): Promise<RegionInfo> {\n return this.api.getRegionById(regionId) as Promise<RegionInfo>;\n }\n\n /**\n * Retrieves information about a star, including its spectral class and luminosity.\n *\n * @param starId - The ID of the star\n * @returns Detailed star information\n */\n getStarById(starId: number): Promise<StarInfo> {\n return this.api.getStarById(starId) as Promise<StarInfo>;\n }\n\n /**\n * Retrieves information about a stargate, including its destination and position.\n *\n * @param stargateId - The ID of the stargate\n * @returns Detailed stargate information\n */\n getStargateById(stargateId: number): Promise<StargateInfo> {\n return this.api.getStargateById(stargateId) as Promise<StargateInfo>;\n }\n\n /**\n * Retrieves public information about a station, including its services and location.\n *\n * @param stationId - The ID of the station\n * @returns Detailed station information\n */\n getStationById(stationId: number): Promise<StationInfo> {\n return this.api.getStationById(stationId) as Promise<StationInfo>;\n }\n\n /**\n * Retrieves information about a player-owned structure by its ID.\n *\n * @param structureId - The ID of the structure\n * @returns Detailed structure information\n * @requires Authentication\n */\n getStructureById(structureId: number): Promise<StructureInfo> {\n return this.api.getStructureById(structureId) as Promise<StructureInfo>;\n }\n\n /**\n * Retrieves a list of all publicly visible player-owned structure IDs.\n *\n * @returns A list of structure IDs\n */\n getStructures(): Promise<number[]> {\n return this.api.getStructures() as Promise<number[]>;\n }\n\n /**\n * Retrieves information about a solar system, including its planets, stargates, and security status.\n *\n * @param systemId - The ID of the solar system\n * @returns Detailed solar system information\n */\n getSystemById(systemId: number): Promise<SolarSystemInfo> {\n return this.api.getSystemById(systemId) as Promise<SolarSystemInfo>;\n }\n\n /**\n * Retrieves the number of ship jumps per solar system within the last hour.\n *\n * @returns A list of solar systems with their jump counts\n */\n getSystemJumps(): Promise<SystemJump[]> {\n return this.api.getSystemJumps() as Promise<SystemJump[]>;\n }\n\n /**\n * Retrieves the number of NPC and player ship kills per solar system within the last hour.\n *\n * @returns A list of solar systems with their kill counts\n */\n getSystemKills(): Promise<SystemKill[]> {\n return this.api.getSystemKills() as Promise<SystemKill[]>;\n }\n\n /**\n * Retrieves a list of all solar system IDs in the EVE universe.\n *\n * @returns A list of solar system IDs\n */\n getSystems(): Promise<number[]> {\n return this.api.getSystems() as Promise<number[]>;\n }\n\n /**\n * Retrieves information about a specific item type, including its description and attributes.\n *\n * @param typeId - The ID of the item type\n * @returns Detailed item type information\n */\n getTypeById(typeId: number): Promise<TypeInfo> {\n return this.api.getTypeById(typeId) as Promise<TypeInfo>;\n }\n\n /**\n * Retrieves a list of all item type IDs in the EVE universe.\n *\n * @returns A list of item type IDs\n */\n getTypes(): Promise<number[]> {\n return this.api.getTypes() as Promise<number[]>;\n }\n\n /**\n * Resolves a list of names to their corresponding IDs via a bulk POST operation.\n *\n * @param names - An array of names to resolve to IDs\n * @returns The resolved IDs grouped by entity category\n */\n postBulkNamesToIds(names: string[]): Promise<BulkIdResult> {\n return this.api.postBulkNamesToIds(names) as Promise<BulkIdResult>;\n }\n\n /**\n * Resolves a list of IDs to their names and categories via a bulk POST operation.\n *\n * @param ids - An array of entity IDs to resolve\n * @returns A list of names with their corresponding categories\n */\n postNamesAndCategories(ids: number[]): Promise<NameAndCategory[]> {\n return this.api.postNamesAndCategories(ids) as Promise<NameAndCategory[]>;\n }\n\n /**\n * Retrieves information about a planetary interaction schematic.\n *\n * @param schematicId - The ID of the PI schematic\n * @returns Detailed schematic information including inputs and outputs\n */\n getSchematicById(schematicId: number): Promise<SchematicInfo> {\n return this.api.getSchematicById(schematicId) as Promise<SchematicInfo>;\n }\n\n /**\n * Retrieves a list of all region IDs in the EVE universe.\n *\n * @returns A list of region IDs\n */\n getRegions(): Promise<number[]> {\n return this.api.getRegions() as Promise<number[]>;\n }\n}\n","import { z } from 'zod';\nimport { EndpointMap } from './EndpointDefinition';\nimport {\n WalletJournalSchema,\n WalletTransactionSchema,\n} from '../../schemas/wallet';\nimport { CorporationWalletDivisionSchema } from '../../schemas/corporation';\n\nexport const walletEndpoints = {\n getCharacterWallet: {\n path: 'characters/{characterId}/wallet',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n responseSchema: z.number(),\n },\n getCharacterWalletJournal: {\n path: 'characters/{characterId}/wallet/journal',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n responseSchema: z.array(WalletJournalSchema),\n },\n getCharacterWalletTransactions: {\n path: 'characters/{characterId}/wallet/transactions',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n responseSchema: z.array(WalletTransactionSchema),\n },\n getCorporationWallets: {\n path: 'corporations/{corporationId}/wallets',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId'],\n responseSchema: z.array(CorporationWalletDivisionSchema),\n },\n getCorporationWalletJournal: {\n path: 'corporations/{corporationId}/wallets/{division}/journal',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId', 'division'],\n responseSchema: z.array(WalletJournalSchema),\n },\n getCorporationWalletTransactions: {\n path: 'corporations/{corporationId}/wallets/{division}/transactions',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId', 'division'],\n responseSchema: z.array(WalletTransactionSchema),\n },\n} as const satisfies EndpointMap;\n","import { z } from 'zod';\r\n\r\nexport const WalletTransactionSchema = z.looseObject({\r\n transaction_id: z.number(),\r\n date: z.string(),\r\n type_id: z.number(),\r\n location_id: z.number(),\r\n unit_price: z.number(),\r\n quantity: z.number(),\r\n client_id: z.number(),\r\n is_buy: z.boolean(),\r\n is_personal: z.boolean(),\r\n journal_ref_id: z.number(),\r\n});\r\n\r\nexport const WalletJournalSchema = z.looseObject({\r\n id: z.number(),\r\n date: z.string(),\r\n ref_type: z.string(),\r\n first_party_id: z.number().optional(),\r\n second_party_id: z.number().optional(),\r\n amount: z.number().optional(),\r\n balance: z.number().optional(),\r\n reason: z.string().optional(),\r\n description: z.string(),\r\n context_id: z.number().optional(),\r\n context_id_type: z.string().optional(),\r\n tax: z.number().optional(),\r\n tax_receiver_id: z.number().optional(),\r\n});\r\n","import { ApiClient } from '../core/ApiClient';\r\nimport { BaseEsiClient } from './BaseEsiClient';\r\nimport { walletEndpoints } from '../core/endpoints/walletEndpoints';\r\nimport { WalletJournal, WalletTransaction } from '../types/api-responses';\r\nimport { PageResult } from '../core/pagination/AsyncPaginationIterator';\r\n\r\nexport class WalletClient extends BaseEsiClient<typeof walletEndpoints> {\r\n constructor(client: ApiClient) {\r\n super(client, walletEndpoints);\r\n }\r\n\r\n /**\r\n * Retrieves the current ISK balance of a character's wallet.\r\n *\r\n * @param characterId - The ID of the character\r\n * @returns The character's wallet balance in ISK\r\n * @requires Authentication\r\n */\r\n getCharacterWallet(characterId: number): Promise<number> {\r\n return this.api.getCharacterWallet(characterId);\r\n }\r\n\r\n /**\r\n * Retrieves the wallet journal entries for a character, showing ISK transactions and their reasons.\r\n *\r\n * @param characterId - The ID of the character\r\n * @returns A list of wallet journal entries\r\n * @requires Authentication\r\n */\r\n getCharacterWalletJournal(characterId: number): Promise<WalletJournal[]> {\r\n return this.api.getCharacterWalletJournal(characterId);\r\n }\r\n\r\n /**\r\n * Retrieves the market transaction history for a character's wallet.\r\n *\r\n * @param characterId - The ID of the character\r\n * @returns A list of market buy and sell transactions\r\n * @requires Authentication\r\n */\r\n getCharacterWalletTransactions(\r\n characterId: number,\r\n ): Promise<WalletTransaction[]> {\r\n return this.api.getCharacterWalletTransactions(characterId);\r\n }\r\n\r\n /**\r\n * Retrieves the balances for all wallet divisions of a corporation.\r\n *\r\n * @param corporationId - The ID of the corporation\r\n * @returns A list of wallet divisions with their balances\r\n * @requires Authentication\r\n */\r\n getCorporationWallets(\r\n corporationId: number,\r\n ): Promise<{ division: number; balance: number }[]> {\r\n return this.api.getCorporationWallets(corporationId);\r\n }\r\n\r\n /**\r\n * Retrieves the wallet journal entries for a specific division of a corporation wallet.\r\n *\r\n * @param corporationId - The ID of the corporation\r\n * @param division - The wallet division number (1-7)\r\n * @returns A list of wallet journal entries for the specified division\r\n * @requires Authentication\r\n */\r\n getCorporationWalletJournal(\r\n corporationId: number,\r\n division: number,\r\n ): Promise<WalletJournal[]> {\r\n return this.api.getCorporationWalletJournal(corporationId, division);\r\n }\r\n\r\n /**\r\n * Retrieves the market transaction history for a specific division of a corporation wallet.\r\n *\r\n * @param corporationId - The ID of the corporation\r\n * @param division - The wallet division number (1-7)\r\n * @returns A list of market buy and sell transactions for the specified division\r\n * @requires Authentication\r\n */\r\n getCorporationWalletTransactions(\r\n corporationId: number,\r\n division: number,\r\n ): Promise<WalletTransaction[]> {\r\n return this.api.getCorporationWalletTransactions(corporationId, division);\r\n }\r\n\r\n streamCharacterWalletJournal(\r\n characterId: number,\r\n ): AsyncGenerator<PageResult<WalletJournal>, void, undefined> {\r\n return this.streamEndpoint<WalletJournal>(\r\n 'getCharacterWalletJournal',\r\n characterId,\r\n );\r\n }\r\n\r\n streamCorporationWalletJournal(\r\n corporationId: number,\r\n division: number,\r\n ): AsyncGenerator<PageResult<WalletJournal>, void, undefined> {\r\n return this.streamEndpoint<WalletJournal>(\r\n 'getCorporationWalletJournal',\r\n corporationId,\r\n division,\r\n );\r\n }\r\n\r\n streamCharacterWalletTransactions(\r\n characterId: number,\r\n ): AsyncGenerator<PageResult<WalletTransaction>, void, undefined> {\r\n return this.streamEndpoint<WalletTransaction>(\r\n 'getCharacterWalletTransactions',\r\n characterId,\r\n );\r\n }\r\n\r\n streamCorporationWalletTransactions(\r\n corporationId: number,\r\n division: number,\r\n ): AsyncGenerator<PageResult<WalletTransaction>, void, undefined> {\r\n return this.streamEndpoint<WalletTransaction>(\r\n 'getCorporationWalletTransactions',\r\n corporationId,\r\n division,\r\n );\r\n }\r\n}\r\n","import { z } from 'zod';\nimport { EndpointMap } from './EndpointDefinition';\nimport { WarSchema } from '../../schemas/wars';\nimport { KillmailSummarySchema } from '../../schemas/killmails';\n\nexport const warEndpoints = {\n getWars: {\n path: 'wars',\n method: 'GET',\n requiresAuth: false,\n responseSchema: z.array(z.number()),\n },\n getWarById: {\n path: 'wars/{warId}',\n method: 'GET',\n requiresAuth: false,\n pathParams: ['warId'],\n responseSchema: WarSchema,\n },\n getWarKillmails: {\n path: 'wars/{warId}/killmails',\n method: 'GET',\n requiresAuth: false,\n pathParams: ['warId'],\n responseSchema: z.array(KillmailSummarySchema),\n },\n} as const satisfies EndpointMap;\n","import { z } from 'zod';\n\nexport const WarSchema = z.looseObject({\n id: z.number(),\n declared: z.string(),\n started: z.string().optional(),\n finished: z.string().optional(),\n retracted: z.string().optional(),\n mutual: z.boolean(),\n open_for_allies: z.boolean(),\n aggressor: z.looseObject({\n corporation_id: z.number().optional(),\n alliance_id: z.number().optional(),\n isk_destroyed: z.number(),\n ships_killed: z.number(),\n }),\n defender: z.looseObject({\n corporation_id: z.number().optional(),\n alliance_id: z.number().optional(),\n isk_destroyed: z.number(),\n ships_killed: z.number(),\n }),\n allies: z\n .array(\n z.looseObject({\n corporation_id: z.number().optional(),\n alliance_id: z.number().optional(),\n }),\n )\n .optional(),\n});\n","import { ApiClient } from '../core/ApiClient';\r\nimport { BaseEsiClient } from './BaseEsiClient';\r\nimport { warEndpoints } from '../core/endpoints/warEndpoints';\r\nimport { War, KillmailSummary } from '../types/api-responses';\r\nimport { PageResult } from '../core/pagination/AsyncPaginationIterator';\r\n\r\nexport class WarsClient extends BaseEsiClient<typeof warEndpoints> {\r\n constructor(client: ApiClient) {\r\n super(client, warEndpoints);\r\n }\r\n\r\n /**\r\n * Retrieves a list of all war IDs, ordered by war ID descending.\r\n *\r\n * @returns A list of war IDs\r\n */\r\n getWars(): Promise<number[]> {\r\n return this.api.getWars();\r\n }\r\n\r\n /**\r\n * Retrieves detailed information about a specific war, including aggressors, defenders, and status.\r\n *\r\n * @param warId - The ID of the war\r\n * @returns Detailed war information\r\n */\r\n getWarById(warId: number): Promise<War> {\r\n return this.api.getWarById(warId);\r\n }\r\n\r\n /**\r\n * Retrieves the killmail summaries associated with a specific war.\r\n *\r\n * @param warId - The ID of the war\r\n * @returns A list of killmail summaries for the war\r\n */\r\n getWarKillmails(warId: number): Promise<KillmailSummary[]> {\r\n return this.api.getWarKillmails(warId);\r\n }\r\n\r\n streamWars(): AsyncGenerator<PageResult<number>, void, undefined> {\r\n return this.streamEndpoint<number>('getWars');\r\n }\r\n\r\n streamWarKillmails(\r\n warId: number,\r\n ): AsyncGenerator<PageResult<KillmailSummary>, void, undefined> {\r\n return this.streamEndpoint<KillmailSummary>('getWarKillmails', warId);\r\n }\r\n}\r\n","import { z } from 'zod';\r\nimport { EndpointMap } from './EndpointDefinition';\r\nimport {\r\n MetaChangelogSchema,\r\n MetaCompatibilityDatesSchema,\r\n MetaNameSchema,\r\n MetaStatusSchema,\r\n} from '../../schemas/meta';\r\n\r\nexport const metaEndpoints = {\r\n getOpenApiJson: {\r\n path: 'meta/openapi.json',\r\n method: 'GET',\r\n requiresAuth: false,\r\n responseSchema: z.record(z.string(), z.unknown()),\r\n },\r\n getChangelog: {\r\n path: 'meta/changelog',\r\n method: 'GET',\r\n requiresAuth: false,\r\n responseSchema: MetaChangelogSchema,\r\n },\r\n getCompatibilityDates: {\r\n path: 'meta/compatibility-dates',\r\n method: 'GET',\r\n requiresAuth: false,\r\n responseSchema: MetaCompatibilityDatesSchema,\r\n },\r\n getName: {\r\n path: 'meta/name',\r\n method: 'GET',\r\n requiresAuth: false,\r\n responseSchema: MetaNameSchema,\r\n },\r\n getStatus: {\r\n path: 'meta/status',\r\n method: 'GET',\r\n requiresAuth: false,\r\n responseSchema: MetaStatusSchema,\r\n },\r\n} as const satisfies EndpointMap;\r\n","import { z } from 'zod';\r\n\r\nexport const MetaChangelogEntrySchema = z.looseObject({\r\n method: z.string(),\r\n path: z.string(),\r\n compatibility_date: z.string(),\r\n is_breaking: z.boolean(),\r\n description: z.string(),\r\n});\r\n\r\nexport const MetaChangelogSchema = z.record(\r\n z.string(),\r\n z.array(MetaChangelogEntrySchema),\r\n);\r\n\r\nexport const MetaCompatibilityDatesSchema = z.looseObject({\r\n compatibility_dates: z.array(z.string()),\r\n});\r\n\r\nexport const MetaNameSchema = z.looseObject({\r\n name: z.string(),\r\n});\r\n\r\nexport const MetaStatusSchema = z.looseObject({\r\n status: z.string(),\r\n});\r\n","import { ApiClient } from '../core/ApiClient';\r\nimport { BaseEsiClient } from './BaseEsiClient';\r\nimport { metaEndpoints } from '../core/endpoints/metaEndpoints';\r\nimport { logInfo, logError } from '../core/logger/loggerUtil';\r\nimport { USER_AGENT, COMPATIBILITY_DATE } from '../core/constants';\r\nimport {\r\n MetaChangelog,\r\n MetaCompatibilityDates,\r\n MetaName,\r\n MetaStatus,\r\n} from '../types/api-responses';\r\n\r\nexport class MetaClient extends BaseEsiClient<typeof metaEndpoints> {\r\n constructor(client: ApiClient) {\r\n super(client, metaEndpoints);\r\n }\r\n\r\n /**\r\n * Retrieves the ESI OpenAPI specification in JSON format.\r\n *\r\n * @returns The full ESI OpenAPI specification as a JSON object\r\n */\r\n /* eslint-disable @typescript-eslint/no-explicit-any */\r\n getOpenApiJson(): Promise<Record<string, any>> {\r\n return this.api.getOpenApiJson() as Promise<Record<string, any>>;\r\n }\r\n /* eslint-enable @typescript-eslint/no-explicit-any */\r\n\r\n /**\r\n * Retrieves the ESI OpenAPI specification in YAML format.\r\n *\r\n * @returns The full ESI OpenAPI specification as a YAML string\r\n */\r\n async getOpenApiYaml(): Promise<string> {\r\n const url = `${this._client.getLink()}/meta/openapi.yaml`;\r\n\r\n logInfo(`Hitting endpoint: ${url}`);\r\n\r\n try {\r\n const response = await fetch(url, {\r\n method: 'GET',\r\n headers: {\r\n accept: 'text/yaml, application/x-yaml, text/plain',\r\n 'User-Agent': USER_AGENT,\r\n 'X-Compatibility-Date': COMPATIBILITY_DATE,\r\n },\r\n });\r\n\r\n if (!response.ok) {\r\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\r\n }\r\n\r\n return await response.text();\r\n } catch (error) {\r\n if (error instanceof Error) {\r\n logError(`Error fetching YAML: ${error.message}`);\r\n throw error;\r\n } else {\r\n logError(`Unexpected error: ${String(error)}`);\r\n throw new Error(String(error));\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Retrieves the ESI changelog data.\r\n *\r\n * @returns The changelog keyed by compatibility date\r\n */\r\n getChangelog(): Promise<MetaChangelog> {\r\n return this.api.getChangelog();\r\n }\r\n\r\n /**\r\n * Retrieves the list of ESI compatibility dates.\r\n *\r\n * @returns An object containing the list of compatibility dates\r\n */\r\n getCompatibilityDates(): Promise<MetaCompatibilityDates> {\r\n return this.api.getCompatibilityDates();\r\n }\r\n\r\n /**\r\n * Retrieves the ESI name.\r\n *\r\n * @returns An object containing the ESI name\r\n */\r\n getName(): Promise<MetaName> {\r\n return this.api.getName();\r\n }\r\n\r\n /**\r\n * Retrieves the ESI status.\r\n *\r\n * @returns An object containing the ESI status\r\n */\r\n getStatus(): Promise<MetaStatus> {\r\n return this.api.getStatus();\r\n }\r\n}\r\n","import { z } from 'zod';\nimport { EndpointMap } from './EndpointDefinition';\nimport {\n FreelanceJobsListingSchema,\n FreelanceJobDetailSchema,\n CharacterFreelanceJobsListingSchema,\n FreelanceJobParticipationSchema,\n CorporationFreelanceJobsListingSchema,\n FreelanceJobParticipantSchema,\n} from '../../schemas/freelance-jobs';\n\nexport const freelanceJobsEndpoints = {\n getFreelanceJobs: {\n path: 'freelance-jobs',\n method: 'GET',\n requiresAuth: false,\n queryParams: { before: 'before', after: 'after' },\n responseSchema: FreelanceJobsListingSchema,\n },\n getFreelanceJobById: {\n path: 'freelance-jobs/{jobId}',\n method: 'GET',\n requiresAuth: false,\n pathParams: ['jobId'],\n responseSchema: FreelanceJobDetailSchema,\n },\n getCharacterFreelanceJobs: {\n path: 'characters/{characterId}/freelance-jobs',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId'],\n queryParams: { before: 'before', after: 'after' },\n responseSchema: CharacterFreelanceJobsListingSchema,\n },\n getCharacterFreelanceJobParticipation: {\n path: 'characters/{characterId}/freelance-jobs/{jobId}/participation',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['characterId', 'jobId'],\n responseSchema: FreelanceJobParticipationSchema,\n },\n getCorporationFreelanceJobs: {\n path: 'corporations/{corporationId}/freelance-jobs',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId'],\n queryParams: { before: 'before', after: 'after' },\n responseSchema: CorporationFreelanceJobsListingSchema,\n },\n getCorporationFreelanceJobParticipants: {\n path: 'corporations/{corporationId}/freelance-jobs/{jobId}/participants',\n method: 'GET',\n requiresAuth: true,\n pathParams: ['corporationId', 'jobId'],\n responseSchema: z.array(FreelanceJobParticipantSchema),\n },\n} as const satisfies EndpointMap;\n","import { z } from 'zod';\n\nexport const EsiCursorSchema = z.looseObject({\n before: z.string().nullable(),\n after: z.string().nullable(),\n});\n\nexport const FreelanceJobSummarySchema = z.looseObject({\n id: z.string(),\n name: z.string(),\n state: z.string(),\n last_modified: z.string(),\n progress: z.looseObject({\n current: z.number(),\n desired: z.number(),\n }),\n reward: z\n .looseObject({\n initial: z.number(),\n remaining: z.number(),\n })\n .optional(),\n});\n\nexport const FreelanceJobsListingSchema = z.looseObject({\n cursor: EsiCursorSchema.optional(),\n freelance_jobs: z.array(FreelanceJobSummarySchema),\n});\n\nexport const FreelanceJobDetailSchema = z.looseObject({\n id: z.string(),\n name: z.string(),\n state: z.string(),\n last_modified: z.string(),\n progress: z.looseObject({\n current: z.number(),\n desired: z.number(),\n }),\n reward: z\n .looseObject({\n initial: z.number(),\n remaining: z.number(),\n })\n .optional(),\n details: z.looseObject({\n description: z.string(),\n career: z.string(),\n created: z.string(),\n expires: z.string(),\n creator: z.looseObject({\n character: z.looseObject({\n id: z.number(),\n name: z.string(),\n }),\n corporation: z.looseObject({\n id: z.number(),\n name: z.string(),\n }),\n }),\n }),\n configuration: z.looseObject({\n version: z.number(),\n parameters: z.record(z.string(), z.unknown()),\n method: z.string(),\n }),\n contribution: z.looseObject({\n max_committed_participants: z.number(),\n reward_per_contribution: z.number().optional(),\n submission_multiplier: z.number().optional(),\n }),\n access_and_visibility: z.looseObject({\n acl_protected: z.boolean(),\n broadcast_locations: z.array(\n z.looseObject({\n id: z.number(),\n name: z.string(),\n }),\n ),\n }),\n});\n\nexport const CharacterFreelanceJobsListingSchema = z.looseObject({\n cursor: EsiCursorSchema.optional(),\n freelance_jobs: z.array(FreelanceJobSummarySchema),\n});\n\nexport const FreelanceJobParticipationSchema = z.looseObject({\n job_id: z.string(),\n character_id: z.number(),\n status: z.string(),\n contributions: z.number(),\n last_contribution: z.string().optional(),\n});\n\nexport const CorporationFreelanceJobsListingSchema = z.looseObject({\n cursor: EsiCursorSchema.optional(),\n freelance_jobs: z.array(FreelanceJobSummarySchema),\n});\n\nexport const FreelanceJobParticipantSchema = z.looseObject({\n character_id: z.number(),\n corporation_id: z.number(),\n status: z.string(),\n contributions: z.number(),\n last_contribution: z.string().optional(),\n});\n","import { ApiClient } from '../core/ApiClient';\nimport { BaseEsiClient } from './BaseEsiClient';\nimport { freelanceJobsEndpoints } from '../core/endpoints/freelanceJobsEndpoints';\nimport {\n FreelanceJobsListing,\n FreelanceJobDetail,\n CharacterFreelanceJobsListing,\n FreelanceJobParticipation,\n CorporationFreelanceJobsListing,\n FreelanceJobParticipant,\n} from '../types/api-responses';\n\nexport class FreelanceJobsClient extends BaseEsiClient<\n typeof freelanceJobsEndpoints\n> {\n constructor(client: ApiClient) {\n super(client, freelanceJobsEndpoints);\n }\n\n /**\n * Retrieves a paginated listing of all publicly available freelance jobs.\n *\n * @param before - Optional cursor token for fetching the previous page of results\n * @param after - Optional cursor token for fetching the next page of results\n * @returns A listing of freelance jobs with cursor pagination metadata\n */\n getFreelanceJobs(\n before?: string,\n after?: string,\n ): Promise<FreelanceJobsListing> {\n return this.api.getFreelanceJobs(\n before,\n after,\n ) as Promise<FreelanceJobsListing>;\n }\n\n /**\n * Retrieves detailed information about a specific freelance job.\n *\n * @param jobId - The unique identifier of the freelance job\n * @returns Detailed information about the freelance job\n */\n getFreelanceJobById(jobId: string): Promise<FreelanceJobDetail> {\n return this.api.getFreelanceJobById(jobId) as Promise<FreelanceJobDetail>;\n }\n\n /**\n * Retrieves a paginated listing of freelance jobs associated with a specific character.\n *\n * @param characterId - The ID of the character\n * @param before - Optional cursor token for fetching the previous page of results\n * @param after - Optional cursor token for fetching the next page of results\n * @returns A listing of the character's freelance jobs with cursor pagination metadata\n * @requires Authentication\n */\n getCharacterFreelanceJobs(\n characterId: number,\n before?: string,\n after?: string,\n ): Promise<CharacterFreelanceJobsListing> {\n return this.api.getCharacterFreelanceJobs(\n characterId,\n before,\n after,\n ) as Promise<CharacterFreelanceJobsListing>;\n }\n\n /**\n * Retrieves a character's participation details for a specific freelance job.\n *\n * @param characterId - The ID of the character\n * @param jobId - The unique identifier of the freelance job\n * @returns The character's participation details for the job\n * @requires Authentication\n */\n getCharacterFreelanceJobParticipation(\n characterId: number,\n jobId: string,\n ): Promise<FreelanceJobParticipation> {\n return this.api.getCharacterFreelanceJobParticipation(\n characterId,\n jobId,\n ) as Promise<FreelanceJobParticipation>;\n }\n\n /**\n * Retrieves a paginated listing of freelance jobs associated with a specific corporation.\n *\n * @param corporationId - The ID of the corporation\n * @param before - Optional cursor token for fetching the previous page of results\n * @param after - Optional cursor token for fetching the next page of results\n * @returns A listing of the corporation's freelance jobs with cursor pagination metadata\n * @requires Authentication\n */\n getCorporationFreelanceJobs(\n corporationId: number,\n before?: string,\n after?: string,\n ): Promise<CorporationFreelanceJobsListing> {\n return this.api.getCorporationFreelanceJobs(\n corporationId,\n before,\n after,\n ) as Promise<CorporationFreelanceJobsListing>;\n }\n\n /**\n * Retrieves the list of participants from a corporation in a specific freelance job.\n *\n * @param corporationId - The ID of the corporation\n * @param jobId - The unique identifier of the freelance job\n * @returns An array of participants from the corporation in the job\n * @requires Authentication\n */\n getCorporationFreelanceJobParticipants(\n corporationId: number,\n jobId: string,\n ): Promise<FreelanceJobParticipant[]> {\n return this.api.getCorporationFreelanceJobParticipants(\n corporationId,\n jobId,\n ) as Promise<FreelanceJobParticipant[]>;\n }\n}\n","import { z } from 'zod';\r\nimport { EndpointMap } from './EndpointDefinition';\r\nimport {\r\n SovereigntyHubSchema,\r\n OrbitalSkyhookSchema,\r\n RaidableSkyhookSchema,\r\n SkyhookDetailSchema,\r\n SovereigntyHubDetailSchema,\r\n} from '../../schemas/skyhooks';\r\n\r\nexport const skyhookEndpoints = {\r\n getSovereigntyHubs: {\r\n path: 'corporations/{corporationId}/structures/sovereignty-hubs',\r\n method: 'GET',\r\n requiresAuth: true,\r\n pathParams: ['corporationId'],\r\n responseSchema: z.array(SovereigntyHubSchema),\r\n },\r\n getOrbitalSkyhooks: {\r\n path: 'corporations/{corporationId}/structures/skyhooks',\r\n method: 'GET',\r\n requiresAuth: true,\r\n pathParams: ['corporationId'],\r\n responseSchema: z.array(OrbitalSkyhookSchema),\r\n },\r\n getRaidableSkyhooks: {\r\n path: 'skyhooks/raidable',\r\n method: 'GET',\r\n requiresAuth: false,\r\n responseSchema: z.array(RaidableSkyhookSchema),\r\n },\r\n getSkyhookDetail: {\r\n path: 'corporations/{corporationId}/structures/skyhooks/{skyhookId}',\r\n method: 'GET',\r\n requiresAuth: true,\r\n pathParams: ['corporationId', 'skyhookId'],\r\n responseSchema: SkyhookDetailSchema,\r\n },\r\n getSovereigntyHubDetail: {\r\n path: 'corporations/{corporationId}/structures/sovereignty-hubs/{sovereigntyHubId}',\r\n method: 'GET',\r\n requiresAuth: true,\r\n pathParams: ['corporationId', 'sovereigntyHubId'],\r\n responseSchema: SovereigntyHubDetailSchema,\r\n },\r\n} as const satisfies EndpointMap;\r\n","import { z } from 'zod';\r\nimport { esiEnum } from './esiEnum';\r\n\r\nexport const SovereigntyHubSchema = z.looseObject({\r\n structure_id: z.number(),\r\n system_id: z.number(),\r\n corporation_id: z.number(),\r\n alliance_id: z.number().optional(),\r\n online: z.boolean(),\r\n remaining_reagents: z.number().optional(),\r\n installed_upgrades: z.array(z.number()).optional(),\r\n});\r\n\r\nexport const OrbitalSkyhookSchema = z.looseObject({\r\n structure_id: z.number(),\r\n system_id: z.number(),\r\n corporation_id: z.number(),\r\n alliance_id: z.number().optional(),\r\n online: z.boolean(),\r\n reagent_silo_capacity: z.number().optional(),\r\n reagent_silo_level: z.number().optional(),\r\n});\r\n\r\nexport const RaidableSkyhookSchema = z.looseObject({\r\n structure_id: z.number(),\r\n system_id: z.number(),\r\n corporation_id: z.number(),\r\n alliance_id: z.number().optional(),\r\n raidable_at: z.string().optional(),\r\n is_raidable: z.boolean(),\r\n});\r\n\r\nexport const SkyhookDetailReagentSchema = z.looseObject({\r\n type_id: z.number(),\r\n secured_stock: z.number(),\r\n unsecured_stock: z.number(),\r\n last_cycle: z.string(),\r\n});\r\n\r\nexport const SkyhookDetailReinforcementTimerSchema = z.looseObject({\r\n end: z.string(),\r\n});\r\n\r\nexport const SkyhookDetailTheftVulnerabilitySchema = z.looseObject({\r\n start: z.string(),\r\n end: z.string(),\r\n});\r\n\r\nexport const SkyhookDetailSchema = z.looseObject({\r\n id: z.number(),\r\n planet_id: z.number(),\r\n state: esiEnum([\r\n 'Unspecified',\r\n 'ShieldVulnerable',\r\n 'ArmorReinforced',\r\n 'ArmorVulnerable',\r\n 'HullReinforced',\r\n 'HullVulnerable',\r\n ]),\r\n is_active: z.boolean(),\r\n effective_workforce: z.number().optional(),\r\n reagents: z.array(SkyhookDetailReagentSchema).optional(),\r\n reinforcement_timer: SkyhookDetailReinforcementTimerSchema.optional(),\r\n theft_vulnerability: SkyhookDetailTheftVulnerabilitySchema.optional(),\r\n});\r\n\r\nexport const SovereigntyHubDetailReagentSchema = z.looseObject({\r\n type_id: z.number(),\r\n amount: z.number(),\r\n burning_per_hour: z.number().optional(),\r\n});\r\n\r\nexport const SovereigntyHubDetailReagentBaySchema = z.looseObject({\r\n last_updated: z.string(),\r\n reagents: z.array(SovereigntyHubDetailReagentSchema),\r\n});\r\n\r\nexport const SovereigntyHubDetailResourceSchema = z.looseObject({\r\n available: z.number().optional(),\r\n used: z.number().optional(),\r\n});\r\n\r\nexport const SovereigntyHubDetailResourcesSchema = z.looseObject({\r\n power: SovereigntyHubDetailResourceSchema,\r\n workforce: SovereigntyHubDetailResourceSchema,\r\n});\r\n\r\nexport const SovereigntyHubDetailUpgradeSchema = z.looseObject({\r\n type_id: z.number(),\r\n power_state: esiEnum(['Unspecified', 'Online', 'Offline', 'Low', 'Pending']),\r\n});\r\n\r\nexport const SovereigntyHubDetailVulnerabilityWindowSchema = z.looseObject({\r\n start: z.string(),\r\n end: z.string(),\r\n});\r\n\r\nexport const SovereigntyHubDetailTransportSchema = z.looseObject({});\r\n\r\nexport const SovereigntyHubDetailSchema = z.looseObject({\r\n id: z.number(),\r\n solar_system_id: z.number(),\r\n upgrades: z.array(SovereigntyHubDetailUpgradeSchema),\r\n reagent_bay: SovereigntyHubDetailReagentBaySchema,\r\n resources: SovereigntyHubDetailResourcesSchema,\r\n workforce_transport: SovereigntyHubDetailTransportSchema,\r\n fuel_access_list_id: z.number().optional(),\r\n vulnerability_window:\r\n SovereigntyHubDetailVulnerabilityWindowSchema.optional(),\r\n});\r\n","import { ApiClient } from '../core/ApiClient';\r\nimport { BaseEsiClient } from './BaseEsiClient';\r\nimport { skyhookEndpoints } from '../core/endpoints/skyhookEndpoints';\r\nimport {\r\n SovereigntyHub,\r\n OrbitalSkyhook,\r\n RaidableSkyhook,\r\n SkyhookDetail,\r\n SovereigntyHubDetail,\r\n} from '../types/api-responses';\r\n\r\nexport class SkyhooksClient extends BaseEsiClient<typeof skyhookEndpoints> {\r\n constructor(client: ApiClient) {\r\n super(client, skyhookEndpoints);\r\n }\r\n\r\n /**\r\n * Retrieves all sovereignty hubs exposed as Upwell structures, including online status and installed upgrades.\r\n *\r\n * @param corporationId - The ID of the corporation to query sovereignty hubs for\r\n * @returns A list of sovereignty hubs\r\n * @requires Authentication\r\n */\r\n getSovereigntyHubs(corporationId: number): Promise<SovereigntyHub[]> {\r\n return this.api.getSovereigntyHubs(corporationId);\r\n }\r\n\r\n /**\r\n * Retrieves all orbital skyhooks with their silo capacity and levels.\r\n *\r\n * @param corporationId - The ID of the corporation to query skyhooks for\r\n * @returns A list of orbital skyhooks\r\n * @requires Authentication\r\n */\r\n getOrbitalSkyhooks(corporationId: number): Promise<OrbitalSkyhook[]> {\r\n return this.api.getOrbitalSkyhooks(corporationId);\r\n }\r\n\r\n /**\r\n * Retrieves the rolling list of skyhooks that are currently or becoming raidable across New Eden.\r\n *\r\n * @returns A list of raidable skyhooks\r\n */\r\n getRaidableSkyhooks(): Promise<RaidableSkyhook[]> {\r\n return this.api.getRaidableSkyhooks();\r\n }\r\n\r\n /**\r\n * Retrieves detail for a specific skyhook including reagents, reinforcement timer, and theft vulnerability.\r\n *\r\n * @param corporationId - The ID of the corporation\r\n * @param skyhookId - The ID of the skyhook\r\n * @returns Skyhook detail\r\n * @requires Authentication\r\n */\r\n getSkyhookDetail(\r\n corporationId: number,\r\n skyhookId: number,\r\n ): Promise<SkyhookDetail> {\r\n return this.api.getSkyhookDetail(corporationId, skyhookId);\r\n }\r\n\r\n /**\r\n * Retrieves detail for a specific sovereignty hub including reagent bay, resources, upgrades, and vulnerability window.\r\n *\r\n * @param corporationId - The ID of the corporation\r\n * @param sovereigntyHubId - The ID of the sovereignty hub\r\n * @returns Sovereignty hub detail\r\n * @requires Authentication\r\n */\r\n getSovereigntyHubDetail(\r\n corporationId: number,\r\n sovereigntyHubId: number,\r\n ): Promise<SovereigntyHubDetail> {\r\n return this.api.getSovereigntyHubDetail(corporationId, sovereigntyHubId);\r\n }\r\n}\r\n","import { z } from 'zod';\r\nimport { EndpointMap } from './EndpointDefinition';\r\nimport {\r\n MercenaryDenSchema,\r\n MercenaryTacticalOperationSchema,\r\n MercenaryDenDetailSchema,\r\n MercenaryTacticalOperationDetailSchema,\r\n} from '../../schemas/mercenary';\r\n\r\nexport const mercenaryEndpoints = {\r\n getMercenaryDens: {\r\n path: 'characters/{characterId}/structures/mercenary-dens',\r\n method: 'GET',\r\n requiresAuth: true,\r\n pathParams: ['characterId'],\r\n responseSchema: z.array(MercenaryDenSchema),\r\n },\r\n getMercenaryTacticalOperations: {\r\n path: 'characters/{characterId}/mercenary-tactical-operations',\r\n method: 'GET',\r\n requiresAuth: true,\r\n pathParams: ['characterId'],\r\n responseSchema: z.array(MercenaryTacticalOperationSchema),\r\n },\r\n getMercenaryDenDetail: {\r\n path: 'characters/{characterId}/structures/mercenary-dens/{mercenaryDenId}',\r\n method: 'GET',\r\n requiresAuth: true,\r\n pathParams: ['characterId', 'mercenaryDenId'],\r\n responseSchema: MercenaryDenDetailSchema,\r\n },\r\n getMercenaryTacticalOperationDetail: {\r\n path: 'characters/{characterId}/mercenary-tactical-operations/{operationId}',\r\n method: 'GET',\r\n requiresAuth: true,\r\n pathParams: ['characterId', 'operationId'],\r\n responseSchema: MercenaryTacticalOperationDetailSchema,\r\n },\r\n} as const satisfies EndpointMap;\r\n","import { z } from 'zod';\r\nimport { esiEnum } from './esiEnum';\r\n\r\nexport const MercenaryDenSchema = z.looseObject({\r\n den_id: z.number(),\r\n system_id: z.number(),\r\n constellation_id: z.number(),\r\n region_id: z.number(),\r\n development_level: z.number().optional(),\r\n anarchy_level: z.number().optional(),\r\n active_operations: z.number().optional(),\r\n});\r\n\r\nexport const MercenaryTacticalOperationSchema = z.looseObject({\r\n operation_id: z.number(),\r\n den_id: z.number(),\r\n system_id: z.number(),\r\n site_type: z.string(),\r\n status: esiEnum(['spawning', 'active', 'completed', 'expired']),\r\n started_at: z.string().optional(),\r\n expires_at: z.string().optional(),\r\n});\r\n\r\nconst MercenaryDenDetailEvolutionLevelSchema = z.looseObject({\r\n level: z.number().optional(),\r\n progress: z.number().optional(),\r\n});\r\n\r\nexport const MercenaryDenDetailEvolutionSchema = z.looseObject({\r\n development: MercenaryDenDetailEvolutionLevelSchema,\r\n anarchy: MercenaryDenDetailEvolutionLevelSchema,\r\n});\r\n\r\nexport const MercenaryDenDetailInfomorphsSchema = z.looseObject({\r\n amount: z.number(),\r\n});\r\n\r\nexport const MercenaryDenDetailReinforcementTimerSchema = z.looseObject({\r\n end: z.string(),\r\n});\r\n\r\nexport const MercenaryDenDetailSkyhookSchema = z.looseObject({\r\n id: z.number(),\r\n planet_id: z.number(),\r\n corporation_id: z.number(),\r\n});\r\n\r\nexport const MercenaryDenDetailSchema = z.looseObject({\r\n id: z.number(),\r\n type_id: z.number(),\r\n state: esiEnum(['Unspecified', 'Running', 'Paused', 'Disabled']),\r\n skyhook: MercenaryDenDetailSkyhookSchema,\r\n infomorphs: MercenaryDenDetailInfomorphsSchema,\r\n evolution: MercenaryDenDetailEvolutionSchema,\r\n reinforcement_timer: MercenaryDenDetailReinforcementTimerSchema.optional(),\r\n});\r\n\r\nexport const MercenaryTacticalOperationDetailSchema = z.looseObject({\r\n id: z.string(),\r\n mercenary_den_id: z.number(),\r\n state: esiEnum([\r\n 'Unspecified',\r\n 'Available',\r\n 'Started',\r\n 'Completed',\r\n 'Expired',\r\n 'Removed',\r\n ]),\r\n dungeon_type_id: z.number(),\r\n expires: z.string(),\r\n});\r\n","import { ApiClient } from '../core/ApiClient';\r\nimport { BaseEsiClient } from './BaseEsiClient';\r\nimport { mercenaryEndpoints } from '../core/endpoints/mercenaryEndpoints';\r\nimport {\r\n MercenaryDen,\r\n MercenaryTacticalOperation,\r\n MercenaryDenDetail,\r\n MercenaryTacticalOperationDetail,\r\n} from '../types/api-responses';\r\n\r\nexport class MercenaryClient extends BaseEsiClient<typeof mercenaryEndpoints> {\r\n constructor(client: ApiClient) {\r\n super(client, mercenaryEndpoints);\r\n }\r\n\r\n /**\r\n * Retrieves all mercenary dens with their development and anarchy parameters.\r\n *\r\n * @param characterId - The ID of the character to query mercenary dens for\r\n * @returns A list of mercenary dens\r\n * @requires Authentication\r\n */\r\n getMercenaryDens(characterId: number): Promise<MercenaryDen[]> {\r\n return this.api.getMercenaryDens(characterId);\r\n }\r\n\r\n /**\r\n * Retrieves all mercenary tactical operations (MTOs) spawned from mercenary dens.\r\n *\r\n * @param characterId - The ID of the character to query tactical operations for\r\n * @returns A list of mercenary tactical operations\r\n * @requires Authentication\r\n */\r\n getMercenaryTacticalOperations(\r\n characterId: number,\r\n ): Promise<MercenaryTacticalOperation[]> {\r\n return this.api.getMercenaryTacticalOperations(characterId);\r\n }\r\n\r\n /**\r\n * Retrieves detail for a specific mercenary den including evolution, infomorphs, and skyhook attachment.\r\n *\r\n * @param characterId - The ID of the character\r\n * @param mercenaryDenId - The ID of the mercenary den\r\n * @returns Mercenary den detail\r\n * @requires Authentication\r\n */\r\n getMercenaryDenDetail(\r\n characterId: number,\r\n mercenaryDenId: number,\r\n ): Promise<MercenaryDenDetail> {\r\n return this.api.getMercenaryDenDetail(characterId, mercenaryDenId);\r\n }\r\n\r\n /**\r\n * Retrieves detail for a specific mercenary tactical operation.\r\n *\r\n * @param characterId - The ID of the character\r\n * @param operationId - The UUID of the tactical operation\r\n * @returns Mercenary tactical operation detail\r\n * @requires Authentication\r\n */\r\n getMercenaryTacticalOperationDetail(\r\n characterId: number,\r\n operationId: string,\r\n ): Promise<MercenaryTacticalOperationDetail> {\r\n return this.api.getMercenaryTacticalOperationDetail(\r\n characterId,\r\n operationId,\r\n );\r\n }\r\n}\r\n","import { z } from 'zod';\r\nimport { EndpointMap } from './EndpointDefinition';\r\nimport { AccessListSchema } from '../../schemas/access-lists';\r\n\r\nexport const accessListEndpoints = {\r\n getAccessList: {\r\n path: 'characters/{characterId}/access-lists/{accessListId}',\r\n method: 'GET',\r\n requiresAuth: true,\r\n pathParams: ['characterId', 'accessListId'],\r\n responseSchema: AccessListSchema,\r\n },\r\n getCharacterAccessLists: {\r\n path: 'characters/{characterId}/access-lists',\r\n method: 'GET',\r\n requiresAuth: true,\r\n pathParams: ['characterId'],\r\n responseSchema: z.array(AccessListSchema),\r\n },\r\n} as const satisfies EndpointMap;\r\n","import { z } from 'zod';\r\nimport { esiEnum } from './esiEnum';\r\n\r\nexport const AccessListEntrySchema = z.looseObject({\r\n entity_id: z.number(),\r\n entity_type: esiEnum(['character', 'corporation', 'alliance']),\r\n access_type: esiEnum(['allowed', 'blocked']),\r\n});\r\n\r\nexport const AccessListSchema = z.looseObject({\r\n access_list_id: z.number(),\r\n name: z.string(),\r\n entries: z.array(AccessListEntrySchema),\r\n});\r\n","import { ApiClient } from '../core/ApiClient';\r\nimport { BaseEsiClient } from './BaseEsiClient';\r\nimport { accessListEndpoints } from '../core/endpoints/accessListEndpoints';\r\nimport { AccessList } from '../types/api-responses';\r\n\r\nexport class AccessListsClient extends BaseEsiClient<\r\n typeof accessListEndpoints\r\n> {\r\n constructor(client: ApiClient) {\r\n super(client, accessListEndpoints);\r\n }\r\n\r\n /**\r\n * Retrieves the contents of an access list (ACL) including all character, corporation, and alliance entries.\r\n *\r\n * @param characterId - The ID of the character who owns the access list\r\n * @param accessListId - The ID of the access list to retrieve\r\n * @returns The access list with its entries\r\n * @requires Authentication\r\n */\r\n getAccessList(\r\n characterId: number,\r\n accessListId: number,\r\n ): Promise<AccessList> {\r\n return this.api.getAccessList(characterId, accessListId);\r\n }\r\n\r\n /**\r\n * Retrieves all access lists for a character.\r\n *\r\n * @param characterId - The ID of the character\r\n * @returns An array of the character's access lists\r\n * @requires Authentication\r\n */\r\n getCharacterAccessLists(characterId: number): Promise<AccessList[]> {\r\n return this.api.getCharacterAccessLists(characterId);\r\n }\r\n}\r\n","import { z } from 'zod';\r\nimport { esiEnum } from './esiEnum';\r\n\r\nexport const SkinrLicenseSchema = z.looseObject({\r\n skinr_id: z.string(),\r\n activated: z.boolean(),\r\n unactivated: z.number(),\r\n});\r\n\r\nexport const CharacterSkinrSchema = z.looseObject({\r\n licenses: z.array(SkinrLicenseSchema),\r\n});\r\n\r\nexport const SkinrComponentRunsSchema = z.looseObject({\r\n remaining: z.number().optional(),\r\n unlimited: z.boolean().optional(),\r\n});\r\n\r\nexport const SkinrComponentLicenseSchema = z.looseObject({\r\n component_id: z.number(),\r\n type: esiEnum(['nanocoating', 'pattern']),\r\n runs: SkinrComponentRunsSchema,\r\n});\r\n\r\nexport const CharacterSkinrComponentsSchema = z.looseObject({\r\n licenses: z.array(SkinrComponentLicenseSchema),\r\n});\r\n\r\nexport const SkinrTierSchema = z.looseObject({\r\n level: z.number(),\r\n});\r\n\r\nexport const SkinrLayoutSlotSchema = z.looseObject({});\r\n\r\nexport const SkinrLayoutSchema = z.looseObject({\r\n slots: z.array(SkinrLayoutSlotSchema),\r\n pattern_blend_mode: esiEnum([\r\n 'normal',\r\n 'subtract',\r\n 'exclusion',\r\n 'nested',\r\n 'nested_inverted',\r\n ]),\r\n});\r\n\r\nexport const SkinrSchema = z.looseObject({\r\n id: z.string(),\r\n name: z.string(),\r\n creator_id: z.number(),\r\n ship_type_id: z.number(),\r\n line: z.string().optional(),\r\n tier: SkinrTierSchema,\r\n layout: SkinrLayoutSchema,\r\n});\r\n","import { EndpointMap } from './EndpointDefinition';\r\nimport {\r\n CharacterSkinrSchema,\r\n CharacterSkinrComponentsSchema,\r\n SkinrSchema,\r\n} from '../../schemas/cosmetics';\r\n\r\nexport const cosmeticsEndpoints = {\r\n getCharacterSkinr: {\r\n path: 'characters/{characterId}/cosmetics/skinr',\r\n method: 'GET',\r\n requiresAuth: true,\r\n pathParams: ['characterId'],\r\n responseSchema: CharacterSkinrSchema,\r\n },\r\n getCharacterSkinrComponents: {\r\n path: 'characters/{characterId}/cosmetics/skinr/components',\r\n method: 'GET',\r\n requiresAuth: true,\r\n pathParams: ['characterId'],\r\n responseSchema: CharacterSkinrComponentsSchema,\r\n },\r\n getSkinr: {\r\n path: 'cosmetics/skinr/{skinrId}',\r\n method: 'GET',\r\n requiresAuth: false,\r\n pathParams: ['skinrId'],\r\n responseSchema: SkinrSchema,\r\n },\r\n} as const satisfies EndpointMap;\r\n","import { ApiClient } from '../core/ApiClient';\r\nimport { BaseEsiClient } from './BaseEsiClient';\r\nimport { cosmeticsEndpoints } from '../core/endpoints/cosmeticsEndpoints';\r\nimport {\r\n CharacterSkinr,\r\n CharacterSkinrComponents,\r\n Skinr,\r\n} from '../types/api-responses';\r\n\r\nexport class CosmeticsClient extends BaseEsiClient<typeof cosmeticsEndpoints> {\r\n constructor(client: ApiClient) {\r\n super(client, cosmeticsEndpoints);\r\n }\r\n\r\n getCharacterSkinr(characterId: number): Promise<CharacterSkinr> {\r\n return this.api.getCharacterSkinr(characterId);\r\n }\r\n\r\n getCharacterSkinrComponents(\r\n characterId: number,\r\n ): Promise<CharacterSkinrComponents> {\r\n return this.api.getCharacterSkinrComponents(characterId);\r\n }\r\n\r\n getSkinr(skinrId: string): Promise<Skinr> {\r\n return this.api.getSkinr(skinrId);\r\n }\r\n}\r\n","import { z } from 'zod';\r\nimport { esiEnum } from './esiEnum';\r\n\r\nexport const ParagonHubCursorSchema = z.looseObject({\r\n after: z.string().optional(),\r\n before: z.string().optional(),\r\n});\r\n\r\nexport const ParagonHubSkinrPriceSchema = z.looseObject({\r\n isk: z.number().optional(),\r\n plex: z.number().optional(),\r\n});\r\n\r\nexport const ParagonHubSkinrListingSchema = z.looseObject({\r\n id: z.string(),\r\n state: esiEnum(['listed', 'sold_out', 'expired', 'removed']),\r\n last_modified: z.string(),\r\n seller_id: z.number(),\r\n skinr_id: z.string(),\r\n created: z.string(),\r\n expires: z.string(),\r\n quantity: z.number(),\r\n price: ParagonHubSkinrPriceSchema,\r\n});\r\n\r\nexport const ParagonHubSkinrTargetSchema = z.looseObject({\r\n character_id: z.number().optional(),\r\n corporation_id: z.number().optional(),\r\n alliance_id: z.number().optional(),\r\n public: z.boolean().optional(),\r\n});\r\n\r\nexport const ParagonHubCharacterListingSchema = z.looseObject({\r\n id: z.string(),\r\n state: esiEnum(['listed', 'sold_out', 'expired', 'removed']),\r\n last_modified: z.string(),\r\n seller_id: z.number(),\r\n skinr_id: z.string(),\r\n created: z.string(),\r\n expires: z.string(),\r\n quantity: z.number(),\r\n price: ParagonHubSkinrPriceSchema,\r\n target: ParagonHubSkinrTargetSchema,\r\n});\r\n\r\nexport const ParagonHubSkinrResponseSchema = z.looseObject({\r\n cursor: ParagonHubCursorSchema.optional(),\r\n listings: z.array(ParagonHubSkinrListingSchema),\r\n});\r\n\r\nexport const ParagonHubCharacterSkinrResponseSchema = z.looseObject({\r\n cursor: ParagonHubCursorSchema.optional(),\r\n listings: z.array(ParagonHubCharacterListingSchema),\r\n});\r\n","import { EndpointMap } from './EndpointDefinition';\r\nimport {\r\n ParagonHubSkinrResponseSchema,\r\n ParagonHubCharacterSkinrResponseSchema,\r\n} from '../../schemas/paragon-hub';\r\n\r\nexport const paragonHubEndpoints = {\r\n getPublicListings: {\r\n path: 'paragon-hub/skinr',\r\n method: 'GET',\r\n requiresAuth: false,\r\n queryParams: { after: 'after', before: 'before', limit: 'limit' },\r\n responseSchema: ParagonHubSkinrResponseSchema,\r\n },\r\n getCharacterListings: {\r\n path: 'characters/{characterId}/paragon-hub/skinr',\r\n method: 'GET',\r\n requiresAuth: true,\r\n pathParams: ['characterId'],\r\n queryParams: { after: 'after', before: 'before', limit: 'limit' },\r\n responseSchema: ParagonHubCharacterSkinrResponseSchema,\r\n },\r\n getAllianceListings: {\r\n path: 'paragon-hub/skinr/alliances/{allianceId}',\r\n method: 'GET',\r\n requiresAuth: true,\r\n pathParams: ['allianceId'],\r\n queryParams: { after: 'after', before: 'before', limit: 'limit' },\r\n responseSchema: ParagonHubSkinrResponseSchema,\r\n },\r\n getCharacterTargetedListings: {\r\n path: 'paragon-hub/skinr/characters/{characterId}',\r\n method: 'GET',\r\n requiresAuth: true,\r\n pathParams: ['characterId'],\r\n queryParams: { after: 'after', before: 'before', limit: 'limit' },\r\n responseSchema: ParagonHubSkinrResponseSchema,\r\n },\r\n getCorporationListings: {\r\n path: 'paragon-hub/skinr/corporations/{corporationId}',\r\n method: 'GET',\r\n requiresAuth: true,\r\n pathParams: ['corporationId'],\r\n queryParams: { after: 'after', before: 'before', limit: 'limit' },\r\n responseSchema: ParagonHubSkinrResponseSchema,\r\n },\r\n} as const satisfies EndpointMap;\r\n","import { ApiClient } from '../core/ApiClient';\r\nimport { BaseEsiClient } from './BaseEsiClient';\r\nimport { paragonHubEndpoints } from '../core/endpoints/paragonHubEndpoints';\r\nimport {\r\n ParagonHubSkinrResponse,\r\n ParagonHubCharacterSkinrResponse,\r\n} from '../types/api-responses';\r\n\r\nexport class ParagonHubClient extends BaseEsiClient<\r\n typeof paragonHubEndpoints\r\n> {\r\n constructor(client: ApiClient) {\r\n super(client, paragonHubEndpoints);\r\n }\r\n\r\n getPublicListings(\r\n after?: string,\r\n before?: string,\r\n limit?: number,\r\n ): Promise<ParagonHubSkinrResponse> {\r\n return this.api.getPublicListings(after, before, limit);\r\n }\r\n\r\n getCharacterListings(\r\n characterId: number,\r\n after?: string,\r\n before?: string,\r\n limit?: number,\r\n ): Promise<ParagonHubCharacterSkinrResponse> {\r\n return this.api.getCharacterListings(characterId, after, before, limit);\r\n }\r\n\r\n getAllianceListings(\r\n allianceId: number,\r\n after?: string,\r\n before?: string,\r\n limit?: number,\r\n ): Promise<ParagonHubSkinrResponse> {\r\n return this.api.getAllianceListings(allianceId, after, before, limit);\r\n }\r\n\r\n getCharacterTargetedListings(\r\n characterId: number,\r\n after?: string,\r\n before?: string,\r\n limit?: number,\r\n ): Promise<ParagonHubSkinrResponse> {\r\n return this.api.getCharacterTargetedListings(\r\n characterId,\r\n after,\r\n before,\r\n limit,\r\n );\r\n }\r\n\r\n getCorporationListings(\r\n corporationId: number,\r\n after?: string,\r\n before?: string,\r\n limit?: number,\r\n ): Promise<ParagonHubSkinrResponse> {\r\n return this.api.getCorporationListings(corporationId, after, before, limit);\r\n }\r\n}\r\n","import { z } from 'zod';\r\nimport { EndpointMap } from './EndpointDefinition';\r\nimport {\r\n MilitaryCampaignSchema,\r\n MilitaryCampaignObjectiveSchema,\r\n CharacterMilitaryCampaignObjectiveSchema,\r\n} from '../../schemas/military-campaigns';\r\n\r\nexport const militaryCampaignEndpoints = {\r\n getMilitaryCampaigns: {\r\n path: 'military-campaigns',\r\n method: 'GET',\r\n requiresAuth: false,\r\n responseSchema: z.array(MilitaryCampaignSchema),\r\n },\r\n getMilitaryCampaign: {\r\n path: 'military-campaigns/{campaignId}',\r\n method: 'GET',\r\n requiresAuth: false,\r\n pathParams: ['campaignId'],\r\n responseSchema: MilitaryCampaignSchema,\r\n },\r\n getMilitaryCampaignObjectives: {\r\n path: 'military-campaigns/{campaignId}/objectives',\r\n method: 'GET',\r\n requiresAuth: false,\r\n pathParams: ['campaignId'],\r\n responseSchema: z.array(MilitaryCampaignObjectiveSchema),\r\n },\r\n getMilitaryCampaignObjective: {\r\n path: 'military-campaigns/{campaignId}/objectives/{objectiveId}',\r\n method: 'GET',\r\n requiresAuth: false,\r\n pathParams: ['campaignId', 'objectiveId'],\r\n responseSchema: MilitaryCampaignObjectiveSchema,\r\n },\r\n getCharacterMilitaryCampaignObjectives: {\r\n path: 'characters/{characterId}/military-campaigns/objectives',\r\n method: 'GET',\r\n requiresAuth: true,\r\n pathParams: ['characterId'],\r\n responseSchema: z.array(CharacterMilitaryCampaignObjectiveSchema),\r\n },\r\n getCharacterMilitaryCampaignObjective: {\r\n path: 'characters/{characterId}/military-campaigns/objectives/{objectiveId}',\r\n method: 'GET',\r\n requiresAuth: true,\r\n pathParams: ['characterId', 'objectiveId'],\r\n responseSchema: CharacterMilitaryCampaignObjectiveSchema,\r\n },\r\n} as const satisfies EndpointMap;\r\n","import { z } from 'zod';\r\n\r\nexport const MilitaryCampaignSchema = z.looseObject({\r\n campaign_id: z.string(),\r\n state: z.string(),\r\n progress: z.number(),\r\n start_time: z.string(),\r\n finish_time: z.string().optional(),\r\n});\r\n\r\nexport const MilitaryCampaignObjectiveSchema = z.looseObject({\r\n objective_id: z.string(),\r\n campaign_id: z.string(),\r\n state: z.string(),\r\n progress: z.number(),\r\n participants: z.looseObject({\r\n total: z.number(),\r\n committed: z.number(),\r\n contributors: z.number(),\r\n }),\r\n});\r\n\r\nexport const CharacterMilitaryCampaignObjectiveSchema = z.looseObject({\r\n objective_id: z.string(),\r\n campaign_id: z.string(),\r\n committed: z.boolean(),\r\n contribution: z.number(),\r\n});\r\n","import { ApiClient } from '../core/ApiClient';\r\nimport { BaseEsiClient } from './BaseEsiClient';\r\nimport { militaryCampaignEndpoints } from '../core/endpoints/militaryCampaignEndpoints';\r\nimport {\r\n MilitaryCampaign,\r\n MilitaryCampaignObjective,\r\n CharacterMilitaryCampaignObjective,\r\n} from '../types/api-responses';\r\n\r\nexport class MilitaryCampaignsClient extends BaseEsiClient<\r\n typeof militaryCampaignEndpoints\r\n> {\r\n constructor(client: ApiClient) {\r\n super(client, militaryCampaignEndpoints);\r\n }\r\n\r\n /**\r\n * Retrieves a list of all active, completed, and expired military campaigns.\r\n *\r\n * @returns An array of military campaigns\r\n */\r\n getMilitaryCampaigns(): Promise<MilitaryCampaign[]> {\r\n return this.api.getMilitaryCampaigns();\r\n }\r\n\r\n /**\r\n * Retrieves detailed information about a specific military campaign.\r\n *\r\n * @param campaignId - The UUID of the military campaign\r\n * @returns Detailed information about the campaign\r\n */\r\n getMilitaryCampaign(campaignId: string): Promise<MilitaryCampaign> {\r\n return this.api.getMilitaryCampaign(campaignId);\r\n }\r\n\r\n /**\r\n * Retrieves all objectives for a specific military campaign.\r\n *\r\n * @param campaignId - The UUID of the military campaign\r\n * @returns An array of objectives for the campaign\r\n */\r\n getMilitaryCampaignObjectives(\r\n campaignId: string,\r\n ): Promise<MilitaryCampaignObjective[]> {\r\n return this.api.getMilitaryCampaignObjectives(campaignId);\r\n }\r\n\r\n /**\r\n * Retrieves detailed information about a specific objective in a military campaign.\r\n *\r\n * @param campaignId - The UUID of the military campaign\r\n * @param objectiveId - The UUID of the objective\r\n * @returns Detailed information about the objective\r\n */\r\n getMilitaryCampaignObjective(\r\n campaignId: string,\r\n objectiveId: string,\r\n ): Promise<MilitaryCampaignObjective> {\r\n return this.api.getMilitaryCampaignObjective(campaignId, objectiveId);\r\n }\r\n\r\n /**\r\n * Retrieves a character's participated objectives across military campaigns.\r\n *\r\n * @param characterId - The ID of the character\r\n * @returns An array of the character's campaign objective participations\r\n * @requires Authentication with scope esi.activity.char:read\r\n */\r\n getCharacterMilitaryCampaignObjectives(\r\n characterId: number,\r\n ): Promise<CharacterMilitaryCampaignObjective[]> {\r\n return this.api.getCharacterMilitaryCampaignObjectives(characterId);\r\n }\r\n\r\n /**\r\n * Retrieves a character's participation details for a specific campaign objective.\r\n *\r\n * @param characterId - The ID of the character\r\n * @param objectiveId - The UUID of the objective\r\n * @returns The character's participation details for the objective\r\n * @requires Authentication with scope esi.activity.char:read\r\n */\r\n getCharacterMilitaryCampaignObjective(\r\n characterId: number,\r\n objectiveId: string,\r\n ): Promise<CharacterMilitaryCampaignObjective> {\r\n return this.api.getCharacterMilitaryCampaignObjective(\r\n characterId,\r\n objectiveId,\r\n );\r\n }\r\n}\r\n","import { ApiClient } from './ApiClient';\r\nimport { AllianceClient } from '../clients/AllianceClient';\r\nimport { AssetsClient } from '../clients/AssetsClient';\r\nimport { CalendarClient } from '../clients/CalendarClient';\r\nimport { CharacterClient } from '../clients/CharacterClient';\r\nimport { ClonesClient } from '../clients/ClonesClient';\r\nimport { ContactsClient } from '../clients/ContactsClient';\r\nimport { ContractsClient } from '../clients/ContractsClient';\r\nimport { CorporationsClient } from '../clients/CorporationsClient';\r\nimport { CorporationProjectsClient } from '../clients/CorporationProjectsClient';\r\nimport { DogmaClient } from '../clients/DogmaClient';\r\nimport { FactionClient } from '../clients/FactionClient';\r\nimport { FittingsClient } from '../clients/FittingsClient';\r\nimport { FleetClient } from '../clients/FleetClient';\r\nimport { IncursionsClient } from '../clients/IncursionsClient';\r\nimport { IndustryClient } from '../clients/IndustryClient';\r\nimport { InsuranceClient } from '../clients/InsuranceClient';\r\nimport { KillmailsClient } from '../clients/KillmailsClient';\r\nimport { LocationClient } from '../clients/LocationClient';\r\nimport { LoyaltyClient } from '../clients/LoyaltyClient';\r\nimport { MailClient } from '../clients/MailClient';\r\nimport { MarketClient } from '../clients/MarketClient';\r\nimport { PiClient } from '../clients/PiClient';\r\nimport { RouteClient } from '../clients/RouteClient';\r\nimport { SearchClient } from '../clients/SearchClient';\r\nimport { CharacterSkillsClient } from '../clients/SkillsClient';\r\nimport { SovereigntyClient } from '../clients/SovereigntyClient';\r\nimport { StatusClient } from '../clients/StatusClient';\r\nimport { UiClient } from '../clients/UiClient';\r\nimport { UniverseClient } from '../clients/UniverseClient';\r\nimport { WalletClient } from '../clients/WalletClient';\r\nimport { WarsClient } from '../clients/WarsClient';\r\nimport { MetaClient } from '../clients/MetaClient';\r\nimport { FreelanceJobsClient } from '../clients/FreelanceJobsClient';\r\nimport { SkyhooksClient } from '../clients/SkyhooksClient';\r\nimport { MercenaryClient } from '../clients/MercenaryClient';\r\nimport { AccessListsClient } from '../clients/AccessListsClient';\r\nimport { CosmeticsClient } from '../clients/CosmeticsClient';\r\nimport { ParagonHubClient } from '../clients/ParagonHubClient';\r\nimport { MilitaryCampaignsClient } from '../clients/MilitaryCampaignsClient';\r\n\r\nexport type ApiClientType =\r\n | 'alliance'\r\n | 'assets'\r\n | 'calendar'\r\n | 'characters'\r\n | 'clones'\r\n | 'contacts'\r\n | 'contracts'\r\n | 'corporations'\r\n | 'corporationProjects'\r\n | 'dogma'\r\n | 'factions'\r\n | 'fittings'\r\n | 'fleets'\r\n | 'incursions'\r\n | 'industry'\r\n | 'insurance'\r\n | 'killmails'\r\n | 'location'\r\n | 'loyalty'\r\n | 'mail'\r\n | 'market'\r\n | 'pi'\r\n | 'route'\r\n | 'search'\r\n | 'skills'\r\n | 'sovereignty'\r\n | 'status'\r\n | 'ui'\r\n | 'universe'\r\n | 'wallet'\r\n | 'wars'\r\n | 'meta'\r\n | 'freelanceJobs'\r\n | 'skyhooks'\r\n | 'cosmetics'\r\n | 'paragonHub'\r\n | 'mercenary'\r\n | 'militaryCampaigns'\r\n | 'accessLists';\r\n\r\nexport type ClientInstance =\r\n | AllianceClient\r\n | AssetsClient\r\n | CalendarClient\r\n | CharacterClient\r\n | ClonesClient\r\n | ContactsClient\r\n | ContractsClient\r\n | CorporationsClient\r\n | CorporationProjectsClient\r\n | DogmaClient\r\n | FactionClient\r\n | FittingsClient\r\n | FleetClient\r\n | IncursionsClient\r\n | IndustryClient\r\n | InsuranceClient\r\n | KillmailsClient\r\n | LocationClient\r\n | LoyaltyClient\r\n | MailClient\r\n | MarketClient\r\n | PiClient\r\n | RouteClient\r\n | SearchClient\r\n | CharacterSkillsClient\r\n | SovereigntyClient\r\n | StatusClient\r\n | UiClient\r\n | UniverseClient\r\n | WalletClient\r\n | WarsClient\r\n | MetaClient\r\n | FreelanceJobsClient\r\n | SkyhooksClient\r\n | CosmeticsClient\r\n | ParagonHubClient\r\n | MercenaryClient\r\n | MilitaryCampaignsClient\r\n | AccessListsClient;\r\n\r\nconst clientFactories: Record<\r\n ApiClientType,\r\n new (apiClient: ApiClient) => ClientInstance\r\n> = {\r\n alliance: AllianceClient,\r\n assets: AssetsClient,\r\n calendar: CalendarClient,\r\n characters: CharacterClient,\r\n clones: ClonesClient,\r\n contacts: ContactsClient,\r\n contracts: ContractsClient,\r\n corporations: CorporationsClient,\r\n corporationProjects: CorporationProjectsClient,\r\n dogma: DogmaClient,\r\n factions: FactionClient,\r\n fittings: FittingsClient,\r\n fleets: FleetClient,\r\n incursions: IncursionsClient,\r\n industry: IndustryClient,\r\n insurance: InsuranceClient,\r\n killmails: KillmailsClient,\r\n location: LocationClient,\r\n loyalty: LoyaltyClient,\r\n mail: MailClient,\r\n market: MarketClient,\r\n pi: PiClient,\r\n route: RouteClient,\r\n search: SearchClient,\r\n skills: CharacterSkillsClient,\r\n sovereignty: SovereigntyClient,\r\n status: StatusClient,\r\n ui: UiClient,\r\n universe: UniverseClient,\r\n wallet: WalletClient,\r\n wars: WarsClient,\r\n meta: MetaClient,\r\n freelanceJobs: FreelanceJobsClient,\r\n skyhooks: SkyhooksClient,\r\n cosmetics: CosmeticsClient,\r\n paragonHub: ParagonHubClient,\r\n mercenary: MercenaryClient,\r\n militaryCampaigns: MilitaryCampaignsClient,\r\n accessLists: AccessListsClient,\r\n};\r\n\r\nexport function createClientInstance(\r\n name: ApiClientType,\r\n apiClient: ApiClient,\r\n): ClientInstance {\r\n // eslint-disable-next-line security/detect-object-injection\r\n return new clientFactories[name](apiClient);\r\n}\r\n\r\nconst allClientTypes: ApiClientType[] = Object.keys(\r\n clientFactories,\r\n) as ApiClientType[];\r\n\r\n// Re-export client classes for direct use\r\nexport {\r\n AllianceClient,\r\n AssetsClient,\r\n CalendarClient,\r\n CharacterClient,\r\n ClonesClient,\r\n ContactsClient,\r\n ContractsClient,\r\n CorporationsClient,\r\n CorporationProjectsClient,\r\n DogmaClient,\r\n FactionClient,\r\n FittingsClient,\r\n FleetClient,\r\n IncursionsClient,\r\n IndustryClient,\r\n InsuranceClient,\r\n KillmailsClient,\r\n LocationClient,\r\n LoyaltyClient,\r\n MailClient,\r\n MarketClient,\r\n PiClient,\r\n RouteClient,\r\n SearchClient,\r\n CharacterSkillsClient,\r\n SovereigntyClient,\r\n StatusClient,\r\n UiClient,\r\n UniverseClient,\r\n WalletClient,\r\n WarsClient,\r\n MetaClient,\r\n FreelanceJobsClient,\r\n SkyhooksClient,\r\n CosmeticsClient,\r\n ParagonHubClient,\r\n MercenaryClient,\r\n MilitaryCampaignsClient,\r\n AccessListsClient,\r\n};\r\n","import { ApiClient } from './ApiClient';\nimport { ETagCacheManager, ETagCacheConfig } from './cache/ETagCacheManager';\nimport { RequestDeduplicator } from './RequestDeduplicator';\n\nexport interface CacheStats {\n totalEntries: number;\n maxEntries: number;\n hits: number;\n misses: number;\n hitRate: number;\n oldestEntry: number | null;\n newestEntry: number | null;\n}\n\nexport interface CircuitBreakerStats {\n totalCircuits: number;\n openCircuits: number;\n circuits: Record<\n string,\n { state: 'closed' | 'open' | 'half-open'; failures: number }\n >;\n}\n\nexport class EsiDiagnostics {\n constructor(\n private apiClient: ApiClient,\n private etagCacheEnabled: boolean,\n private deduplicator: RequestDeduplicator | null,\n ) {}\n\n getCacheStats(): CacheStats | null {\n if (!this.etagCacheEnabled) return null;\n const cache = this.apiClient.getCache();\n return cache ? (cache as ETagCacheManager).getStats() : null;\n }\n\n clearCache(): void {\n const cache = this.apiClient.getCache();\n if (cache) {\n (cache as ETagCacheManager).clear();\n }\n }\n\n updateCacheConfig(newConfig: Partial<ETagCacheConfig>): void {\n const cache = this.apiClient.getCache();\n if (cache) {\n (cache as ETagCacheManager).updateConfig(newConfig);\n }\n }\n\n getCircuitBreakerStats(): CircuitBreakerStats | null {\n const cb = this.apiClient.getCircuitBreaker();\n return cb ? cb.getStats() : null;\n }\n\n resetCircuitBreaker(endpoint?: string): void {\n const cb = this.apiClient.getCircuitBreaker();\n if (cb) {\n cb.reset(endpoint);\n }\n }\n\n getDeduplicatorStats(): { pendingRequests: number } | null {\n return this.deduplicator\n ? { pendingRequests: this.deduplicator.pending }\n : null;\n }\n}\n","import { EsiError } from './util/error';\nimport { logDebug, logInfo } from './logger/loggerUtil';\n\nexport interface BatchOptions {\n concurrency?: number;\n onProgress?: (completed: number, total: number) => void;\n}\n\nexport interface BatchResult<K, T> {\n results: Map<K, T>;\n errors: Map<K, EsiError | Error>;\n}\n\nexport async function batchFetch<K, T>(\n keys: K[],\n fetcher: (key: K) => Promise<T>,\n options: BatchOptions = {},\n): Promise<BatchResult<K, T>> {\n const concurrency = options.concurrency ?? 20;\n const results = new Map<K, T>();\n const errors = new Map<K, EsiError | Error>();\n let completed = 0;\n let running = 0;\n let index = 0;\n\n logInfo(`Batch fetch: ${keys.length} items, concurrency=${concurrency}`);\n\n return new Promise((resolve) => {\n function next(): void {\n while (running < concurrency && index < keys.length) {\n const currentIndex = index++;\n const key = keys[currentIndex]!;\n running++;\n\n fetcher(key)\n .then((result) => {\n results.set(key, result);\n })\n .catch((err: unknown) => {\n const error =\n err instanceof EsiError || err instanceof Error\n ? err\n : new Error(String(err));\n errors.set(key, error);\n })\n .finally(() => {\n running--;\n completed++;\n if (options.onProgress) {\n options.onProgress(completed, keys.length);\n }\n if (completed === keys.length) {\n logDebug(\n `Batch complete: ${results.size} succeeded, ${errors.size} failed`,\n );\n resolve({ results, errors });\n } else {\n next();\n }\n });\n }\n }\n\n if (keys.length === 0) {\n resolve({ results, errors });\n return;\n }\n\n next();\n });\n}\n\nexport async function batchPost<T>(\n ids: number[],\n poster: (chunk: number[]) => Promise<T[]>,\n chunkSize: number = 1000,\n): Promise<T[]> {\n const chunks: number[][] = [];\n for (let i = 0; i < ids.length; i += chunkSize) {\n chunks.push(ids.slice(i, i + chunkSize));\n }\n\n logInfo(\n `Batch POST: ${ids.length} IDs in ${chunks.length} chunks of ${chunkSize}`,\n );\n\n const results: T[] = [];\n for (const chunk of chunks) {\n const chunkResult = await poster(chunk);\n results.push(...chunkResult);\n }\n\n return results;\n}\n","import { logInfo, logDebug } from '../logger/loggerUtil';\nimport { ICache, CacheEntry } from './ICache';\n\nexport type { CacheEntry } from './ICache';\n\nexport interface ETagCacheConfig {\n maxEntries?: number;\n defaultTtl?: number;\n cleanupInterval?: number;\n}\n\nexport class ETagCacheManager implements ICache {\n private cache: Map<string, CacheEntry> = new Map();\n private config: Required<ETagCacheConfig>;\n private cleanupTimer?: NodeJS.Timeout;\n private hits: number = 0;\n private misses: number = 0;\n\n constructor(config: ETagCacheConfig = {}) {\n this.config = {\n maxEntries: config.maxEntries ?? 1000,\n defaultTtl: config.defaultTtl ?? 5 * 60 * 1000, // 5 minutes default\n cleanupInterval: config.cleanupInterval ?? 60 * 1000, // 1 minute cleanup\n };\n\n this.startCleanupTimer();\n logInfo(\n `ETag cache manager initialized with ${this.config.maxEntries} max entries`,\n );\n }\n\n /**\n * Get cached data if ETag matches\n */\n get(url: string): CacheEntry | null {\n const entry = this.cache.get(url);\n\n if (!entry) {\n this.misses++;\n return null;\n }\n\n if (this.isExpired(entry)) {\n this.cache.delete(url);\n this.misses++;\n logDebug(`Cache entry expired for ${url}`);\n return null;\n }\n\n this.hits++;\n logDebug(`Cache hit for ${url} with ETag ${entry.etag}`);\n return entry;\n }\n\n /**\n * Get ETag for a URL (for If-None-Match header)\n */\n getETag(url: string): string | null {\n const entry = this.get(url);\n return entry ? entry.etag : null;\n }\n\n /**\n * Set cache entry\n */\n set(\n url: string,\n etag: string,\n data: unknown,\n headers: Record<string, string>,\n customTtl?: number,\n ): void {\n // Remove oldest entries if cache is full\n if (this.cache.size >= this.config.maxEntries) {\n this.evictOldest();\n }\n\n const entry: CacheEntry = {\n etag,\n data,\n headers,\n timestamp: Date.now(),\n ttl: customTtl ?? this.config.defaultTtl,\n };\n\n this.cache.set(url, entry);\n logDebug(`Cached response for ${url} with ETag ${etag}`);\n }\n\n /**\n * Check if cached data exists and is valid\n */\n has(url: string): boolean {\n const entry = this.cache.get(url);\n return entry !== undefined && !this.isExpired(entry);\n }\n\n /**\n * Clear specific cache entry\n */\n delete(url: string): boolean {\n return this.cache.delete(url);\n }\n\n /**\n * Delete all cache entries whose URL contains the given path segment\n */\n deleteByPath(pathSegment: string): number {\n let count = 0;\n for (const key of this.cache.keys()) {\n if (key.includes(pathSegment)) {\n this.cache.delete(key);\n count++;\n }\n }\n if (count > 0) {\n logDebug(`Invalidated ${count} cache entries matching ${pathSegment}`);\n }\n return count;\n }\n\n /**\n * Clear all cache entries\n */\n clear(): void {\n this.cache.clear();\n this.hits = 0;\n this.misses = 0;\n logInfo('ETag cache cleared');\n }\n\n /**\n * Get cache statistics\n */\n getStats(): {\n totalEntries: number;\n maxEntries: number;\n hits: number;\n misses: number;\n hitRate: number;\n oldestEntry: number | null;\n newestEntry: number | null;\n } {\n let oldest = Infinity;\n let newest = -Infinity;\n for (const entry of this.cache.values()) {\n if (entry.timestamp < oldest) oldest = entry.timestamp;\n if (entry.timestamp > newest) newest = entry.timestamp;\n }\n const total = this.hits + this.misses;\n\n return {\n totalEntries: this.cache.size,\n maxEntries: this.config.maxEntries,\n hits: this.hits,\n misses: this.misses,\n hitRate: total > 0 ? this.hits / total : 0,\n oldestEntry: this.cache.size > 0 ? oldest : null,\n newestEntry: this.cache.size > 0 ? newest : null,\n };\n }\n\n /**\n * Update cache configuration\n */\n updateConfig(newConfig: Partial<ETagCacheConfig>): void {\n this.config = { ...this.config, ...newConfig };\n logInfo('ETag cache configuration updated');\n }\n\n /**\n * Cleanup expired entries\n */\n cleanup(): number {\n const beforeSize = this.cache.size;\n\n for (const [url, entry] of this.cache.entries()) {\n if (this.isExpired(entry)) {\n this.cache.delete(url);\n }\n }\n\n const cleanedCount = beforeSize - this.cache.size;\n if (cleanedCount > 0) {\n logDebug(`Cleaned up ${cleanedCount} expired cache entries`);\n }\n\n return cleanedCount;\n }\n\n /**\n * Shutdown cache manager\n */\n shutdown(): void {\n if (this.cleanupTimer) {\n clearInterval(this.cleanupTimer);\n }\n logInfo('ETag cache manager shut down');\n }\n\n private isExpired(entry: CacheEntry): boolean {\n if (!entry.ttl) return false;\n return Date.now() - entry.timestamp > entry.ttl;\n }\n\n private evictOldest(): void {\n let oldestKey: string | null = null;\n let oldestTime = Infinity;\n\n for (const [key, entry] of this.cache.entries()) {\n if (entry.timestamp < oldestTime) {\n oldestTime = entry.timestamp;\n oldestKey = key;\n }\n }\n\n if (oldestKey) {\n this.cache.delete(oldestKey);\n logDebug(`Evicted oldest cache entry: ${oldestKey}`);\n }\n }\n\n private startCleanupTimer(): void {\n this.cleanupTimer = setInterval(() => {\n this.cleanup();\n }, this.config.cleanupInterval);\n // Don't prevent process exit (important for test runners and CLI tools)\n this.cleanupTimer.unref();\n }\n}\n","// Auto-generated from ESI OpenAPI spec — do not edit manually\r\n// Endpoints with rate limit groups: 146\r\n\r\nexport interface RateLimitGroupSpec {\r\n group: string;\r\n maxTokens: number;\r\n windowSizeMs: number;\r\n}\r\n\r\nexport const esiRateLimitGroups: Record<string, RateLimitGroupSpec> = {\r\n 'GET:alliances/{alliance_id}/contacts': { group: 'alliance-social', maxTokens: 300, windowSizeMs: 900000 },\r\n 'GET:alliances/{alliance_id}/contacts/labels': { group: 'alliance-social', maxTokens: 300, windowSizeMs: 900000 },\r\n 'GET:characters/{character_id}/agents_research': { group: 'char-industry', maxTokens: 600, windowSizeMs: 900000 },\r\n 'GET:characters/{character_id}/assets': { group: 'char-asset', maxTokens: 1800, windowSizeMs: 900000 },\r\n 'POST:characters/{character_id}/assets/locations': { group: 'char-asset', maxTokens: 1800, windowSizeMs: 900000 },\r\n 'POST:characters/{character_id}/assets/names': { group: 'char-asset', maxTokens: 1800, windowSizeMs: 900000 },\r\n 'GET:characters/{character_id}/attributes': { group: 'char-detail', maxTokens: 600, windowSizeMs: 900000 },\r\n 'GET:characters/{character_id}/blueprints': { group: 'char-industry', maxTokens: 600, windowSizeMs: 900000 },\r\n 'GET:characters/{character_id}/calendar': { group: 'char-social', maxTokens: 600, windowSizeMs: 900000 },\r\n 'GET:characters/{character_id}/calendar/{event_id}': { group: 'char-social', maxTokens: 600, windowSizeMs: 900000 },\r\n 'PUT:characters/{character_id}/calendar/{event_id}': { group: 'char-social', maxTokens: 600, windowSizeMs: 900000 },\r\n 'GET:characters/{character_id}/calendar/{event_id}/attendees': { group: 'char-social', maxTokens: 600, windowSizeMs: 900000 },\r\n 'GET:characters/{character_id}/clones': { group: 'char-location', maxTokens: 1200, windowSizeMs: 900000 },\r\n 'GET:characters/{character_id}/contacts': { group: 'char-social', maxTokens: 600, windowSizeMs: 900000 },\r\n 'POST:characters/{character_id}/contacts': { group: 'char-social', maxTokens: 600, windowSizeMs: 900000 },\r\n 'PUT:characters/{character_id}/contacts': { group: 'char-social', maxTokens: 600, windowSizeMs: 900000 },\r\n 'DELETE:characters/{character_id}/contacts': { group: 'char-social', maxTokens: 600, windowSizeMs: 900000 },\r\n 'GET:characters/{character_id}/contacts/labels': { group: 'char-social', maxTokens: 600, windowSizeMs: 900000 },\r\n 'GET:characters/{character_id}/contracts': { group: 'char-contract', maxTokens: 600, windowSizeMs: 900000 },\r\n 'GET:characters/{character_id}/contracts/{contract_id}/bids': { group: 'char-contract', maxTokens: 600, windowSizeMs: 900000 },\r\n 'GET:characters/{character_id}/contracts/{contract_id}/items': { group: 'char-contract', maxTokens: 600, windowSizeMs: 900000 },\r\n 'POST:characters/{character_id}/cspa': { group: 'char-detail', maxTokens: 600, windowSizeMs: 900000 },\r\n 'GET:characters/{character_id}/fatigue': { group: 'char-location', maxTokens: 1200, windowSizeMs: 900000 },\r\n 'GET:characters/{character_id}/fittings': { group: 'fitting', maxTokens: 150, windowSizeMs: 900000 },\r\n 'POST:characters/{character_id}/fittings': { group: 'fitting', maxTokens: 150, windowSizeMs: 900000 },\r\n 'DELETE:characters/{character_id}/fittings/{fitting_id}': { group: 'fitting', maxTokens: 150, windowSizeMs: 900000 },\r\n 'GET:characters/{character_id}/fleet': { group: 'fleet', maxTokens: 1800, windowSizeMs: 900000 },\r\n 'GET:characters/{character_id}/freelance-jobs': { group: 'char-freelance-job', maxTokens: 300, windowSizeMs: 900000 },\r\n 'GET:characters/{character_id}/freelance-jobs/{job_id}/participation': { group: 'char-freelance-job', maxTokens: 300, windowSizeMs: 900000 },\r\n 'GET:characters/{character_id}/fw/stats': { group: 'factional-warfare', maxTokens: 150, windowSizeMs: 900000 },\r\n 'GET:characters/{character_id}/implants': { group: 'char-detail', maxTokens: 600, windowSizeMs: 900000 },\r\n 'GET:characters/{character_id}/industry/jobs': { group: 'char-industry', maxTokens: 600, windowSizeMs: 900000 },\r\n 'GET:characters/{character_id}/killmails/recent': { group: 'char-killmail', maxTokens: 30, windowSizeMs: 900000 },\r\n 'GET:characters/{character_id}/location': { group: 'char-location', maxTokens: 1200, windowSizeMs: 900000 },\r\n 'GET:characters/{character_id}/loyalty/points': { group: 'char-wallet', maxTokens: 150, windowSizeMs: 900000 },\r\n 'GET:characters/{character_id}/mail': { group: 'char-social', maxTokens: 600, windowSizeMs: 900000 },\r\n 'POST:characters/{character_id}/mail': { group: 'char-social', maxTokens: 600, windowSizeMs: 900000 },\r\n 'GET:characters/{character_id}/mail/{mail_id}': { group: 'char-social', maxTokens: 600, windowSizeMs: 900000 },\r\n 'PUT:characters/{character_id}/mail/{mail_id}': { group: 'char-social', maxTokens: 600, windowSizeMs: 900000 },\r\n 'DELETE:characters/{character_id}/mail/{mail_id}': { group: 'char-social', maxTokens: 600, windowSizeMs: 900000 },\r\n 'GET:characters/{character_id}/mail/labels': { group: 'char-social', maxTokens: 600, windowSizeMs: 900000 },\r\n 'POST:characters/{character_id}/mail/labels': { group: 'char-social', maxTokens: 600, windowSizeMs: 900000 },\r\n 'DELETE:characters/{character_id}/mail/labels/{label_id}': { group: 'char-social', maxTokens: 600, windowSizeMs: 900000 },\r\n 'GET:characters/{character_id}/mail/lists': { group: 'char-social', maxTokens: 600, windowSizeMs: 900000 },\r\n 'GET:characters/{character_id}/medals': { group: 'char-detail', maxTokens: 600, windowSizeMs: 900000 },\r\n 'GET:characters/{character_id}/mining': { group: 'char-industry', maxTokens: 600, windowSizeMs: 900000 },\r\n 'GET:characters/{character_id}/notifications': { group: 'char-notification', maxTokens: 15, windowSizeMs: 900000 },\r\n 'GET:characters/{character_id}/notifications/contacts': { group: 'char-social', maxTokens: 600, windowSizeMs: 900000 },\r\n 'GET:characters/{character_id}/online': { group: 'char-location', maxTokens: 1200, windowSizeMs: 900000 },\r\n 'GET:characters/{character_id}/planets': { group: 'char-industry', maxTokens: 600, windowSizeMs: 900000 },\r\n 'GET:characters/{character_id}/planets/{planet_id}': { group: 'char-industry', maxTokens: 600, windowSizeMs: 900000 },\r\n 'GET:characters/{character_id}/portrait': { group: 'char-detail', maxTokens: 600, windowSizeMs: 900000 },\r\n 'GET:characters/{character_id}/roles': { group: 'char-detail', maxTokens: 600, windowSizeMs: 900000 },\r\n 'GET:characters/{character_id}/ship': { group: 'char-location', maxTokens: 1200, windowSizeMs: 900000 },\r\n 'GET:characters/{character_id}/skillqueue': { group: 'char-detail', maxTokens: 600, windowSizeMs: 900000 },\r\n 'GET:characters/{character_id}/skills': { group: 'char-detail', maxTokens: 600, windowSizeMs: 900000 },\r\n 'GET:characters/{character_id}/standings': { group: 'char-social', maxTokens: 600, windowSizeMs: 900000 },\r\n 'GET:characters/{character_id}/titles': { group: 'char-detail', maxTokens: 600, windowSizeMs: 900000 },\r\n 'GET:characters/{character_id}/wallet': { group: 'char-wallet', maxTokens: 150, windowSizeMs: 900000 },\r\n 'GET:characters/{character_id}/wallet/journal': { group: 'char-wallet', maxTokens: 150, windowSizeMs: 900000 },\r\n 'GET:characters/{character_id}/wallet/transactions': { group: 'char-wallet', maxTokens: 150, windowSizeMs: 900000 },\r\n 'GET:corporation/{corporation_id}/mining/extractions': { group: 'corp-industry', maxTokens: 600, windowSizeMs: 900000 },\r\n 'GET:corporation/{corporation_id}/mining/observers': { group: 'corp-industry', maxTokens: 600, windowSizeMs: 900000 },\r\n 'GET:corporation/{corporation_id}/mining/observers/{observer_id}': { group: 'corp-industry', maxTokens: 600, windowSizeMs: 900000 },\r\n 'GET:corporations/{corporation_id}/assets': { group: 'corp-asset', maxTokens: 1800, windowSizeMs: 900000 },\r\n 'POST:corporations/{corporation_id}/assets/locations': { group: 'corp-asset', maxTokens: 1800, windowSizeMs: 900000 },\r\n 'POST:corporations/{corporation_id}/assets/names': { group: 'corp-asset', maxTokens: 1800, windowSizeMs: 900000 },\r\n 'GET:corporations/{corporation_id}/blueprints': { group: 'corp-industry', maxTokens: 600, windowSizeMs: 900000 },\r\n 'GET:corporations/{corporation_id}/contacts': { group: 'corp-social', maxTokens: 300, windowSizeMs: 900000 },\r\n 'GET:corporations/{corporation_id}/contacts/labels': { group: 'corp-social', maxTokens: 300, windowSizeMs: 900000 },\r\n 'GET:corporations/{corporation_id}/containers/logs': { group: 'corp-structure', maxTokens: 300, windowSizeMs: 900000 },\r\n 'GET:corporations/{corporation_id}/contracts': { group: 'corp-contract', maxTokens: 600, windowSizeMs: 900000 },\r\n 'GET:corporations/{corporation_id}/contracts/{contract_id}/bids': { group: 'corp-contract', maxTokens: 600, windowSizeMs: 900000 },\r\n 'GET:corporations/{corporation_id}/contracts/{contract_id}/items': { group: 'corp-contract', maxTokens: 600, windowSizeMs: 900000 },\r\n 'GET:corporations/{corporation_id}/customs_offices': { group: 'corp-industry', maxTokens: 600, windowSizeMs: 900000 },\r\n 'GET:corporations/{corporation_id}/divisions': { group: 'corp-wallet', maxTokens: 300, windowSizeMs: 900000 },\r\n 'GET:corporations/{corporation_id}/facilities': { group: 'corp-structure', maxTokens: 300, windowSizeMs: 900000 },\r\n 'GET:corporations/{corporation_id}/freelance-jobs': { group: 'corp-freelance-job', maxTokens: 300, windowSizeMs: 900000 },\r\n 'GET:corporations/{corporation_id}/freelance-jobs/{job_id}/participants': { group: 'corp-freelance-job', maxTokens: 300, windowSizeMs: 900000 },\r\n 'GET:corporations/{corporation_id}/fw/stats': { group: 'factional-warfare', maxTokens: 150, windowSizeMs: 900000 },\r\n 'GET:corporations/{corporation_id}/industry/jobs': { group: 'corp-industry', maxTokens: 600, windowSizeMs: 900000 },\r\n 'GET:corporations/{corporation_id}/killmails/recent': { group: 'corp-killmail', maxTokens: 30, windowSizeMs: 900000 },\r\n 'GET:corporations/{corporation_id}/medals': { group: 'corp-detail', maxTokens: 300, windowSizeMs: 900000 },\r\n 'GET:corporations/{corporation_id}/medals/issued': { group: 'corp-detail', maxTokens: 300, windowSizeMs: 900000 },\r\n 'GET:corporations/{corporation_id}/members': { group: 'corp-member', maxTokens: 300, windowSizeMs: 900000 },\r\n 'GET:corporations/{corporation_id}/members/limit': { group: 'corp-member', maxTokens: 300, windowSizeMs: 900000 },\r\n 'GET:corporations/{corporation_id}/members/titles': { group: 'corp-member', maxTokens: 300, windowSizeMs: 900000 },\r\n 'GET:corporations/{corporation_id}/membertracking': { group: 'corp-member', maxTokens: 300, windowSizeMs: 900000 },\r\n 'GET:corporations/{corporation_id}/projects': { group: 'corp-project', maxTokens: 600, windowSizeMs: 900000 },\r\n 'GET:corporations/{corporation_id}/projects/{project_id}': { group: 'corp-project', maxTokens: 600, windowSizeMs: 900000 },\r\n 'GET:corporations/{corporation_id}/projects/{project_id}/contribution/{character_id}': { group: 'corp-project', maxTokens: 600, windowSizeMs: 900000 },\r\n 'GET:corporations/{corporation_id}/projects/{project_id}/contributors': { group: 'corp-project', maxTokens: 600, windowSizeMs: 900000 },\r\n 'GET:corporations/{corporation_id}/roles': { group: 'corp-member', maxTokens: 300, windowSizeMs: 900000 },\r\n 'GET:corporations/{corporation_id}/roles/history': { group: 'corp-member', maxTokens: 300, windowSizeMs: 900000 },\r\n 'GET:corporations/{corporation_id}/shareholders': { group: 'corp-detail', maxTokens: 300, windowSizeMs: 900000 },\r\n 'GET:corporations/{corporation_id}/standings': { group: 'corp-member', maxTokens: 300, windowSizeMs: 900000 },\r\n 'GET:corporations/{corporation_id}/starbases': { group: 'corp-structure', maxTokens: 300, windowSizeMs: 900000 },\r\n 'GET:corporations/{corporation_id}/starbases/{starbase_id}': { group: 'corp-structure', maxTokens: 300, windowSizeMs: 900000 },\r\n 'GET:corporations/{corporation_id}/structures': { group: 'corp-structure', maxTokens: 300, windowSizeMs: 900000 },\r\n 'GET:corporations/{corporation_id}/titles': { group: 'corp-detail', maxTokens: 300, windowSizeMs: 900000 },\r\n 'GET:corporations/{corporation_id}/wallets': { group: 'corp-wallet', maxTokens: 300, windowSizeMs: 900000 },\r\n 'GET:corporations/{corporation_id}/wallets/{division}/journal': { group: 'corp-wallet', maxTokens: 300, windowSizeMs: 900000 },\r\n 'GET:corporations/{corporation_id}/wallets/{division}/transactions': { group: 'corp-wallet', maxTokens: 300, windowSizeMs: 900000 },\r\n 'GET:fleets/{fleet_id}': { group: 'fleet', maxTokens: 1800, windowSizeMs: 900000 },\r\n 'PUT:fleets/{fleet_id}': { group: 'fleet', maxTokens: 1800, windowSizeMs: 900000 },\r\n 'GET:fleets/{fleet_id}/members': { group: 'fleet', maxTokens: 1800, windowSizeMs: 900000 },\r\n 'POST:fleets/{fleet_id}/members': { group: 'fleet', maxTokens: 1800, windowSizeMs: 900000 },\r\n 'PUT:fleets/{fleet_id}/members/{member_id}': { group: 'fleet', maxTokens: 1800, windowSizeMs: 900000 },\r\n 'DELETE:fleets/{fleet_id}/members/{member_id}': { group: 'fleet', maxTokens: 1800, windowSizeMs: 900000 },\r\n 'PUT:fleets/{fleet_id}/squads/{squad_id}': { group: 'fleet', maxTokens: 1800, windowSizeMs: 900000 },\r\n 'DELETE:fleets/{fleet_id}/squads/{squad_id}': { group: 'fleet', maxTokens: 1800, windowSizeMs: 900000 },\r\n 'GET:fleets/{fleet_id}/wings': { group: 'fleet', maxTokens: 1800, windowSizeMs: 900000 },\r\n 'POST:fleets/{fleet_id}/wings': { group: 'fleet', maxTokens: 1800, windowSizeMs: 900000 },\r\n 'PUT:fleets/{fleet_id}/wings/{wing_id}': { group: 'fleet', maxTokens: 1800, windowSizeMs: 900000 },\r\n 'DELETE:fleets/{fleet_id}/wings/{wing_id}': { group: 'fleet', maxTokens: 1800, windowSizeMs: 900000 },\r\n 'POST:fleets/{fleet_id}/wings/{wing_id}/squads': { group: 'fleet', maxTokens: 1800, windowSizeMs: 900000 },\r\n 'GET:freelance-jobs': { group: 'freelance-job', maxTokens: 12000, windowSizeMs: 900000 },\r\n 'GET:freelance-jobs/{job_id}': { group: 'freelance-job', maxTokens: 12000, windowSizeMs: 900000 },\r\n 'GET:fw/leaderboards': { group: 'factional-warfare', maxTokens: 150, windowSizeMs: 900000 },\r\n 'GET:fw/leaderboards/characters': { group: 'factional-warfare', maxTokens: 150, windowSizeMs: 900000 },\r\n 'GET:fw/leaderboards/corporations': { group: 'factional-warfare', maxTokens: 150, windowSizeMs: 900000 },\r\n 'GET:fw/stats': { group: 'factional-warfare', maxTokens: 150, windowSizeMs: 900000 },\r\n 'GET:fw/systems': { group: 'factional-warfare', maxTokens: 150, windowSizeMs: 900000 },\r\n 'GET:fw/wars': { group: 'factional-warfare', maxTokens: 150, windowSizeMs: 900000 },\r\n 'GET:incursions': { group: 'incursion', maxTokens: 150, windowSizeMs: 900000 },\r\n 'GET:industry/facilities': { group: 'industry', maxTokens: 150, windowSizeMs: 900000 },\r\n 'GET:industry/systems': { group: 'industry', maxTokens: 150, windowSizeMs: 900000 },\r\n 'GET:insurance/prices': { group: 'insurance', maxTokens: 150, windowSizeMs: 900000 },\r\n 'GET:killmails/{killmail_id}/{killmail_hash}': { group: 'killmail', maxTokens: 3600, windowSizeMs: 900000 },\r\n 'GET:markets/{region_id}/orders': { group: 'market-order', maxTokens: 12000, windowSizeMs: 900000 },\r\n 'GET:meta/changelog': { group: 'meta', maxTokens: 150, windowSizeMs: 900000 },\r\n 'GET:meta/compatibility-dates': { group: 'meta', maxTokens: 150, windowSizeMs: 900000 },\r\n 'GET:meta/status': { group: 'meta', maxTokens: 150, windowSizeMs: 900000 },\r\n 'POST:route/{origin_system_id}/{destination_system_id}': { group: 'routes', maxTokens: 3600, windowSizeMs: 900000 },\r\n 'GET:sovereignty/campaigns': { group: 'sovereignty', maxTokens: 600, windowSizeMs: 900000 },\r\n 'GET:sovereignty/map': { group: 'sovereignty', maxTokens: 600, windowSizeMs: 900000 },\r\n 'GET:sovereignty/structures': { group: 'sovereignty', maxTokens: 600, windowSizeMs: 900000 },\r\n 'GET:status': { group: 'status', maxTokens: 600, windowSizeMs: 900000 },\r\n 'POST:ui/autopilot/waypoint': { group: 'ui', maxTokens: 900, windowSizeMs: 900000 },\r\n 'POST:ui/openwindow/contract': { group: 'ui', maxTokens: 900, windowSizeMs: 900000 },\r\n 'POST:ui/openwindow/information': { group: 'ui', maxTokens: 900, windowSizeMs: 900000 },\r\n 'POST:ui/openwindow/marketdetails': { group: 'ui', maxTokens: 900, windowSizeMs: 900000 },\r\n 'POST:ui/openwindow/newmail': { group: 'ui', maxTokens: 900, windowSizeMs: 900000 },\r\n 'GET:wars': { group: 'killmail', maxTokens: 3600, windowSizeMs: 900000 },\r\n 'GET:wars/{war_id}': { group: 'killmail', maxTokens: 3600, windowSizeMs: 900000 },\r\n 'GET:wars/{war_id}/killmails': { group: 'killmail', maxTokens: 3600, windowSizeMs: 900000 },\r\n};\r\n","import { IRateLimiter, RateLimitGroupStatus } from './IRateLimiter';\r\nimport {\r\n esiRateLimitGroups,\r\n RateLimitGroupSpec,\r\n} from '../endpoints/esi-rate-limit-groups.generated';\r\nimport { camelToSnake } from '../util/stringUtil';\r\nimport { logWarn } from '../logger/loggerUtil';\r\nimport { sleep } from '../util/sleep';\r\nimport { EsiError } from '../util/error';\r\n\r\nexport interface RateLimitInfo {\r\n remaining: number;\r\n limit: number;\r\n used: number;\r\n group: string | null;\r\n errorLimitRemain: number;\r\n errorLimitReset: number;\r\n retryAfter: number | null;\r\n blockedUntil: number;\r\n}\r\n\r\nfunction getTokenCost(statusCode: number): number {\r\n if (statusCode >= 200 && statusCode < 300) return 2;\r\n if (statusCode >= 300 && statusCode < 400) return 1;\r\n if (statusCode >= 400 && statusCode < 500) return 5;\r\n if (statusCode >= 500 && statusCode < 600) return 0;\r\n return 2;\r\n}\r\n\r\nexport interface RateLimiterConfig {\r\n minDelayMs?: number;\r\n decelerationThreshold?: number;\r\n userKeyExtractor?: (headers: Record<string, string>) => string;\r\n}\r\n\r\ninterface GroupBucket {\r\n group: string;\r\n remaining: number;\r\n limit: number;\r\n used: number;\r\n windowSizeMs: number;\r\n blockedUntil: number;\r\n lastUpdated: number;\r\n}\r\n\r\ninterface ErrorLimitState {\r\n remain: number;\r\n reset: number;\r\n}\r\n\r\ninterface UserBucketSet {\r\n groups: Map<string, GroupBucket>;\r\n errorLimit: ErrorLimitState;\r\n lastAccessed: number;\r\n}\r\n\r\nconst DEFAULT_WINDOW_MS = 900_000;\r\nconst DEFAULT_ERROR_LIMIT: ErrorLimitState = { remain: 100, reset: 0 };\r\n\r\nexport class RateLimiter implements IRateLimiter {\r\n private readonly minDelayMs: number;\r\n private readonly decelerationThreshold: number;\r\n private readonly userKeyExtractor?: (\r\n headers: Record<string, string>,\r\n ) => string;\r\n\r\n private lastRequestTime: number = 0;\r\n private minDelayChain: Promise<void> = Promise.resolve();\r\n private isTestMode: boolean = false;\r\n\r\n private globalErrorLimit: ErrorLimitState = { ...DEFAULT_ERROR_LIMIT };\r\n\r\n private defaultBuckets: Map<string, GroupBucket> = new Map();\r\n private userBuckets: Map<string, UserBucketSet> | null = null;\r\n private fallbackBucket: GroupBucket;\r\n\r\n private lastCleanup: number = 0;\r\n private static readonly CLEANUP_INTERVAL_MS = 60_000;\r\n\r\n constructor(config?: RateLimiterConfig) {\r\n this.minDelayMs = config?.minDelayMs ?? 50;\r\n this.decelerationThreshold = config?.decelerationThreshold ?? 0.2;\r\n this.userKeyExtractor = config?.userKeyExtractor;\r\n if (this.userKeyExtractor) {\r\n this.userBuckets = new Map();\r\n }\r\n this.fallbackBucket = this.createFallbackBucket();\r\n }\r\n\r\n private createFallbackBucket(): GroupBucket {\r\n return {\r\n group: '__fallback__',\r\n remaining: -1,\r\n limit: 0,\r\n used: 0,\r\n windowSizeMs: DEFAULT_WINDOW_MS,\r\n blockedUntil: 0,\r\n lastUpdated: 0,\r\n };\r\n }\r\n\r\n private createBucketFromSpec(spec: RateLimitGroupSpec): GroupBucket {\r\n return {\r\n group: spec.group,\r\n remaining: spec.maxTokens,\r\n limit: spec.maxTokens,\r\n used: 0,\r\n windowSizeMs: spec.windowSizeMs,\r\n blockedUntil: 0,\r\n lastUpdated: 0,\r\n };\r\n }\r\n\r\n private createBucketForGroup(groupName: string): GroupBucket {\r\n return {\r\n group: groupName,\r\n remaining: -1,\r\n limit: 0,\r\n used: 0,\r\n windowSizeMs: DEFAULT_WINDOW_MS,\r\n blockedUntil: 0,\r\n lastUpdated: 0,\r\n };\r\n }\r\n\r\n private lookupGroupSpec(\r\n method?: string,\r\n templatePath?: string,\r\n ): RateLimitGroupSpec | undefined {\r\n if (!templatePath || !method) return undefined;\r\n const normalized = templatePath\r\n .replace(/\\/$/, '')\r\n .replace(/\\{(\\w+)\\}/g, (_, name: string) => `{${camelToSnake(name)}}`);\r\n const key = `${method}:${normalized}`;\r\n return esiRateLimitGroups[key];\r\n }\r\n\r\n private resolveUserSet(\r\n requestHeaders?: Record<string, string>,\r\n ): UserBucketSet | null {\r\n if (!this.userBuckets || !this.userKeyExtractor || !requestHeaders) {\r\n return null;\r\n }\r\n\r\n const userKey = this.userKeyExtractor(requestHeaders);\r\n let userSet = this.userBuckets.get(userKey);\r\n if (!userSet) {\r\n userSet = {\r\n groups: new Map(),\r\n errorLimit: { ...DEFAULT_ERROR_LIMIT },\r\n lastAccessed: Date.now(),\r\n };\r\n this.userBuckets.set(userKey, userSet);\r\n }\r\n userSet.lastAccessed = Date.now();\r\n return userSet;\r\n }\r\n\r\n private resolveBucketMap(\r\n requestHeaders?: Record<string, string>,\r\n ): Map<string, GroupBucket> {\r\n const userSet = this.resolveUserSet(requestHeaders);\r\n return userSet ? userSet.groups : this.defaultBuckets;\r\n }\r\n\r\n private resolveErrorLimit(\r\n requestHeaders?: Record<string, string>,\r\n ): ErrorLimitState {\r\n const userSet = this.resolveUserSet(requestHeaders);\r\n return userSet ? userSet.errorLimit : this.globalErrorLimit;\r\n }\r\n\r\n private getBucket(\r\n templatePath?: string,\r\n method?: string,\r\n requestHeaders?: Record<string, string>,\r\n groupNameOverride?: string,\r\n ): GroupBucket {\r\n const bucketMap = this.resolveBucketMap(requestHeaders);\r\n\r\n const spec = this.lookupGroupSpec(method, templatePath);\r\n const groupName = groupNameOverride ?? spec?.group;\r\n\r\n if (!groupName) return this.fallbackBucket;\r\n\r\n let bucket = bucketMap.get(groupName);\r\n if (!bucket) {\r\n bucket = spec\r\n ? this.createBucketFromSpec(spec)\r\n : this.createBucketForGroup(groupName);\r\n bucketMap.set(groupName, bucket);\r\n }\r\n return bucket;\r\n }\r\n\r\n private cleanupStaleUsers(): void {\r\n if (!this.userBuckets) return;\r\n const now = Date.now();\r\n if (now - this.lastCleanup < RateLimiter.CLEANUP_INTERVAL_MS) return;\r\n this.lastCleanup = now;\r\n\r\n for (const [userKey, userSet] of this.userBuckets) {\r\n if (now - userSet.lastAccessed > DEFAULT_WINDOW_MS) {\r\n this.userBuckets.delete(userKey);\r\n }\r\n }\r\n }\r\n\r\n updateFromResponse(\r\n headers: Record<string, string>,\r\n statusCode: number,\r\n templatePath?: string,\r\n method?: string,\r\n requestHeaders?: Record<string, string>,\r\n ): void {\r\n if (this.isTestMode) return;\r\n\r\n const responseGroup = headers['x-ratelimit-group'] || undefined;\r\n const bucket = this.getBucket(\r\n templatePath,\r\n method,\r\n requestHeaders,\r\n responseGroup,\r\n );\r\n\r\n if ('x-ratelimit-remaining' in headers) {\r\n bucket.remaining = parseInt(headers['x-ratelimit-remaining'], 10);\r\n }\r\n if ('x-ratelimit-limit' in headers) {\r\n bucket.limit = parseInt(headers['x-ratelimit-limit'], 10);\r\n }\r\n if ('x-ratelimit-used' in headers) {\r\n bucket.used = parseInt(headers['x-ratelimit-used'], 10);\r\n }\r\n bucket.lastUpdated = Date.now();\r\n\r\n if ('retry-after' in headers) {\r\n const retrySeconds = parseInt(headers['retry-after'], 10);\r\n bucket.blockedUntil = Date.now() + retrySeconds * 1000;\r\n }\r\n\r\n if (statusCode === 420 || statusCode === 429) {\r\n if (bucket.blockedUntil <= Date.now()) {\r\n bucket.blockedUntil = Date.now() + 60_000;\r\n }\r\n }\r\n\r\n const errorLimit = this.resolveErrorLimit(requestHeaders);\r\n if ('x-esi-error-limit-remain' in headers) {\r\n errorLimit.remain = parseInt(headers['x-esi-error-limit-remain'], 10);\r\n }\r\n if ('x-esi-error-limit-reset' in headers) {\r\n errorLimit.reset = parseInt(headers['x-esi-error-limit-reset'], 10);\r\n }\r\n }\r\n\r\n updateRateLimitInfo(headers: Record<string, string>): void {\r\n this.updateFromResponse(headers, 200);\r\n }\r\n\r\n async checkRateLimit(\r\n templatePath?: string,\r\n method?: string,\r\n requestHeaders?: Record<string, string>,\r\n ): Promise<void> {\r\n if (this.isTestMode) return;\r\n\r\n this.cleanupStaleUsers();\r\n\r\n // Re-check after sleeping on a block so a concurrent response that\r\n // re-blocked the group is respected (bounded to avoid infinite waits).\r\n let stillBlockedBucket: GroupBucket | undefined;\r\n for (let i = 0; i < 10; i++) {\r\n const bucket = this.getBucket(templatePath, method, requestHeaders);\r\n const now = Date.now();\r\n if (bucket.blockedUntil <= now) {\r\n stillBlockedBucket = undefined;\r\n break;\r\n }\r\n stillBlockedBucket = bucket;\r\n const waitedUntil = bucket.blockedUntil;\r\n const waitTime = waitedUntil - now;\r\n logWarn(\r\n `[ESI Rate Limit] Group '${bucket.group}' blocked for ${Math.ceil(waitTime / 1000)}s (420/429 received)`,\r\n );\r\n await sleep(waitTime);\r\n // Clear the block we waited for; leave intact if another response extended it\r\n if (bucket.blockedUntil <= waitedUntil) {\r\n bucket.blockedUntil = 0;\r\n }\r\n }\r\n // Never proceed while still blocked: if concurrent responses kept\r\n // re-extending blockedUntil past the retry budget above, fail fast\r\n // with a retryable rate-limit error rather than sending the request.\r\n if (stillBlockedBucket && stillBlockedBucket.blockedUntil > Date.now()) {\r\n const waitTime = stillBlockedBucket.blockedUntil - Date.now();\r\n logWarn(\r\n `[ESI Rate Limit] Group '${stillBlockedBucket.group}' still blocked after retry budget exhausted; aborting request instead of sending while blocked`,\r\n );\r\n throw new EsiError(\r\n 429,\r\n `Rate limit group '${stillBlockedBucket.group}' still blocked for ${Math.ceil(waitTime / 1000)}s`,\r\n );\r\n }\r\n\r\n const errorLimit = this.resolveErrorLimit(requestHeaders);\r\n if (errorLimit.remain <= 10 && errorLimit.remain > 0) {\r\n const resetMs = errorLimit.reset * 1000;\r\n const delay = Math.min(resetMs, 5000);\r\n if (delay > 0) {\r\n logWarn(\r\n `[ESI Rate Limit] Legacy error limit low (${errorLimit.remain}), waiting ${delay}ms`,\r\n );\r\n await sleep(delay);\r\n }\r\n } else if (errorLimit.remain <= 0 && errorLimit.reset > 0) {\r\n const waitTime = errorLimit.reset * 1000;\r\n logWarn(\r\n `[ESI Rate Limit] Legacy error limit exhausted, waiting ${Math.ceil(waitTime / 1000)}s`,\r\n );\r\n await sleep(waitTime);\r\n }\r\n\r\n const bucket = this.getBucket(templatePath, method, requestHeaders);\r\n if (bucket.remaining >= 0 && bucket.limit > 0) {\r\n const ratio = bucket.remaining / bucket.limit;\r\n\r\n if (bucket.remaining <= 0) {\r\n logWarn(\r\n `[ESI Rate Limit] Group '${bucket.group}' token bucket empty, waiting 1s`,\r\n );\r\n await sleep(1000);\r\n } else if (ratio <= this.decelerationThreshold) {\r\n const extraDelay = Math.ceil(\r\n (1 - ratio / this.decelerationThreshold) * 1000,\r\n );\r\n await sleep(extraDelay);\r\n }\r\n }\r\n\r\n await this.enforceMinDelay();\r\n }\r\n\r\n /**\r\n * Serializes min-delay waits so concurrent callers cannot all read the same\r\n * lastRequestTime and fire together after sleeping.\r\n */\r\n private async enforceMinDelay(): Promise<void> {\r\n if (this.isTestMode) {\r\n this.lastRequestTime = Date.now();\r\n return;\r\n }\r\n\r\n const run = async (): Promise<void> => {\r\n const now = Date.now();\r\n const timeSinceLastRequest = now - this.lastRequestTime;\r\n if (timeSinceLastRequest < this.minDelayMs) {\r\n await sleep(this.minDelayMs - timeSinceLastRequest);\r\n }\r\n this.lastRequestTime = Date.now();\r\n };\r\n\r\n const scheduled = this.minDelayChain.then(run, run);\r\n this.minDelayChain = scheduled.then(\r\n () => undefined,\r\n () => undefined,\r\n );\r\n await scheduled;\r\n }\r\n\r\n getStatus(): RateLimitInfo {\r\n let worstBucket = this.fallbackBucket;\r\n let worstRatio = Infinity;\r\n\r\n const checkBucket = (bucket: GroupBucket): void => {\r\n if (bucket.limit > 0) {\r\n const ratio = bucket.remaining / bucket.limit;\r\n if (ratio < worstRatio) {\r\n worstRatio = ratio;\r\n worstBucket = bucket;\r\n }\r\n }\r\n };\r\n\r\n for (const bucket of this.defaultBuckets.values()) {\r\n checkBucket(bucket);\r\n }\r\n\r\n if (this.userBuckets) {\r\n for (const userSet of this.userBuckets.values()) {\r\n for (const bucket of userSet.groups.values()) {\r\n checkBucket(bucket);\r\n }\r\n }\r\n }\r\n\r\n return {\r\n remaining: worstBucket.remaining,\r\n limit: worstBucket.limit,\r\n used: worstBucket.used,\r\n group: worstBucket.group === '__fallback__' ? null : worstBucket.group,\r\n errorLimitRemain: this.globalErrorLimit.remain,\r\n errorLimitReset: this.globalErrorLimit.reset,\r\n retryAfter:\r\n worstBucket.blockedUntil > Date.now()\r\n ? Math.ceil((worstBucket.blockedUntil - Date.now()) / 1000)\r\n : null,\r\n blockedUntil: worstBucket.blockedUntil,\r\n };\r\n }\r\n\r\n getGroupStatus(group: string): RateLimitGroupStatus | undefined {\r\n const bucket = this.defaultBuckets.get(group);\r\n if (!bucket) return undefined;\r\n return {\r\n group: bucket.group,\r\n remaining: bucket.remaining,\r\n limit: bucket.limit,\r\n used: bucket.used,\r\n windowSizeMs: bucket.windowSizeMs,\r\n blockedUntil: bucket.blockedUntil,\r\n };\r\n }\r\n\r\n getAllGroupStatuses(): Map<string, RateLimitGroupStatus> {\r\n const result = new Map<string, RateLimitGroupStatus>();\r\n for (const [name, bucket] of this.defaultBuckets) {\r\n result.set(name, {\r\n group: bucket.group,\r\n remaining: bucket.remaining,\r\n limit: bucket.limit,\r\n used: bucket.used,\r\n windowSizeMs: bucket.windowSizeMs,\r\n blockedUntil: bucket.blockedUntil,\r\n });\r\n }\r\n return result;\r\n }\r\n\r\n static getTokenCost(statusCode: number): number {\r\n return getTokenCost(statusCode);\r\n }\r\n\r\n isBlocked(group?: string): boolean {\r\n const now = Date.now();\r\n\r\n if (group) {\r\n const bucket = this.defaultBuckets.get(group);\r\n return bucket ? bucket.blockedUntil > now : false;\r\n }\r\n\r\n if (this.fallbackBucket.blockedUntil > now) return true;\r\n for (const bucket of this.defaultBuckets.values()) {\r\n if (bucket.blockedUntil > now) return true;\r\n }\r\n return false;\r\n }\r\n\r\n setTestMode(enabled: boolean): void {\r\n this.isTestMode = enabled;\r\n }\r\n\r\n reset(): void {\r\n this.defaultBuckets.clear();\r\n if (this.userBuckets) this.userBuckets.clear();\r\n this.fallbackBucket = this.createFallbackBucket();\r\n this.globalErrorLimit = { ...DEFAULT_ERROR_LIMIT };\r\n this.lastRequestTime = 0;\r\n this.minDelayChain = Promise.resolve();\r\n this.lastCleanup = 0;\r\n }\r\n}\r\n","import { logDebug } from './logger/loggerUtil';\r\nimport { IDeduplicator } from './IDeduplicator';\r\n\r\nexport class RequestDeduplicator implements IDeduplicator {\r\n private inflight = new Map<string, Promise<unknown>>();\r\n\r\n async dedupe<T>(key: string, execute: () => Promise<T>): Promise<T> {\r\n const existing = this.inflight.get(key);\r\n if (existing) {\r\n logDebug(`[Dedup] Coalescing request: ${key}`);\r\n return existing as Promise<T>;\r\n }\r\n\r\n const promise = execute().finally(() => {\r\n this.inflight.delete(key);\r\n });\r\n\r\n this.inflight.set(key, promise);\r\n return promise;\r\n }\r\n\r\n get pending(): number {\r\n return this.inflight.size;\r\n }\r\n\r\n clear(): void {\r\n this.inflight.clear();\r\n }\r\n}\r\n","import { ApiClient } from './ApiClient';\r\nimport { ETagCacheManager } from './cache/ETagCacheManager';\r\nimport { CircuitBreaker } from './circuitBreaker/CircuitBreaker';\r\nimport { RateLimiter } from './rateLimiter/RateLimiter';\r\nimport { RequestDeduplicator } from './RequestDeduplicator';\r\nimport type { EsiClientConfig } from '../EsiClient';\r\n\r\nexport interface ConfigureApiClientResult {\r\n deduplicator: RequestDeduplicator | null;\r\n}\r\n\r\n/**\r\n * Configures an existing ApiClient with the full middleware stack\r\n * based on an EsiClientConfig. This is the single source of truth\r\n * for how config maps to middleware — used by EsiClient,\r\n * CustomEsiClient, and EsiApiFactory.\r\n *\r\n * The caller is responsible for creating the ApiClient (with baseUrl,\r\n * clientId, accessToken) and setting datasource/language/tokenProvider\r\n * before calling this function, since those vary by construction surface.\r\n */\r\nexport function configureApiClient(\r\n client: ApiClient,\r\n config?: EsiClientConfig,\r\n): ConfigureApiClientResult {\r\n let deduplicator: RequestDeduplicator | null = null;\r\n\r\n // Rate limiter (always)\r\n client.setRateLimiter(new RateLimiter(config?.rateLimiterConfig));\r\n\r\n // Request deduplication (on by default)\r\n if (config?.enableRequestDeduplication !== false) {\r\n deduplicator = new RequestDeduplicator();\r\n client.setDeduplicator(deduplicator);\r\n }\r\n\r\n // ETag cache (on by default)\r\n if (config?.enableETagCache !== false) {\r\n client.setCache(new ETagCacheManager(config?.etagCacheConfig));\r\n }\r\n\r\n // Circuit breaker (off by default, opt-in)\r\n if (config?.enableCircuitBreaker) {\r\n client.setCircuitBreaker(new CircuitBreaker(config.circuitBreakerConfig));\r\n }\r\n\r\n // Retry config — default to 3 retries with exponential backoff so that\r\n // transient ESI failures (502/503/504) are handled automatically.\r\n if (config?.retryConfig) {\r\n client.setRetryConfig(config.retryConfig);\r\n } else if (config?.retryAttempts !== undefined) {\r\n client.setRetryConfig({ maxRetries: config.retryAttempts });\r\n } else {\r\n client.setRetryConfig({\r\n maxRetries: 3,\r\n baseDelayMs: 1000,\r\n maxDelayMs: 30000,\r\n });\r\n }\r\n\r\n // Retry strategy\r\n if (config?.retryStrategy) {\r\n client.setRetryStrategy(config.retryStrategy);\r\n }\r\n\r\n // Interceptors\r\n if (config?.requestInterceptors) {\r\n for (const interceptor of config.requestInterceptors) {\r\n client.addRequestInterceptor(interceptor);\r\n }\r\n }\r\n if (config?.responseInterceptors) {\r\n for (const interceptor of config.responseInterceptors) {\r\n client.addResponseInterceptor(interceptor);\r\n }\r\n }\r\n\r\n // Validate response\r\n if (config?.validateResponse !== undefined) {\r\n client.setValidateResponse(config.validateResponse);\r\n }\r\n\r\n // Validate request (opt-in, default false)\r\n if (config?.validateRequest !== undefined) {\r\n client.setValidateRequest(config.validateRequest);\r\n }\r\n\r\n // Timeout\r\n if (config?.timeout !== undefined) {\r\n client.setTimeout(config.timeout);\r\n }\r\n\r\n return { deduplicator };\r\n}\r\n","import { ApiClient, TokenProvider } from './core/ApiClient';\r\nimport {\r\n RequestInterceptor,\r\n ResponseInterceptor,\r\n} from './core/middleware/Middleware';\r\nimport { createClientInstance, ApiClientType } from './core/ClientRegistry';\r\nimport { AllianceClient } from './clients/AllianceClient';\r\nimport { AssetsClient } from './clients/AssetsClient';\r\nimport { CalendarClient } from './clients/CalendarClient';\r\nimport { CharacterClient } from './clients/CharacterClient';\r\nimport { ClonesClient } from './clients/ClonesClient';\r\nimport { ContactsClient } from './clients/ContactsClient';\r\nimport { ContractsClient } from './clients/ContractsClient';\r\nimport { CorporationsClient } from './clients/CorporationsClient';\r\nimport { CorporationProjectsClient } from './clients/CorporationProjectsClient';\r\nimport { DogmaClient } from './clients/DogmaClient';\r\nimport { FactionClient } from './clients/FactionClient';\r\nimport { FittingsClient } from './clients/FittingsClient';\r\nimport { FleetClient } from './clients/FleetClient';\r\nimport { IncursionsClient } from './clients/IncursionsClient';\r\nimport { IndustryClient } from './clients/IndustryClient';\r\nimport { InsuranceClient } from './clients/InsuranceClient';\r\nimport { KillmailsClient } from './clients/KillmailsClient';\r\nimport { LocationClient } from './clients/LocationClient';\r\nimport { LoyaltyClient } from './clients/LoyaltyClient';\r\nimport { MailClient } from './clients/MailClient';\r\nimport { MarketClient } from './clients/MarketClient';\r\nimport { PiClient } from './clients/PiClient';\r\nimport { RouteClient } from './clients/RouteClient';\r\nimport { SearchClient } from './clients/SearchClient';\r\nimport { CharacterSkillsClient } from './clients/SkillsClient';\r\nimport { SovereigntyClient } from './clients/SovereigntyClient';\r\nimport { StatusClient } from './clients/StatusClient';\r\nimport { UiClient } from './clients/UiClient';\r\nimport { UniverseClient } from './clients/UniverseClient';\r\nimport { WalletClient } from './clients/WalletClient';\r\nimport { WarsClient } from './clients/WarsClient';\r\nimport { MetaClient } from './clients/MetaClient';\r\nimport { FreelanceJobsClient } from './clients/FreelanceJobsClient';\r\nimport { CosmeticsClient } from './clients/CosmeticsClient';\r\nimport { ParagonHubClient } from './clients/ParagonHubClient';\r\nimport { SkyhooksClient } from './clients/SkyhooksClient';\r\nimport { MercenaryClient } from './clients/MercenaryClient';\r\nimport { AccessListsClient } from './clients/AccessListsClient';\r\nimport { MilitaryCampaignsClient } from './clients/MilitaryCampaignsClient';\r\nimport { validateBaseUrl } from './core/util/validation';\r\nimport {\r\n ETagCacheManager,\r\n ETagCacheConfig,\r\n} from './core/cache/ETagCacheManager';\r\nimport { CircuitBreakerConfig } from './core/circuitBreaker/CircuitBreaker';\r\nimport { RateLimiterConfig } from './core/rateLimiter/RateLimiter';\r\nimport { RequestDeduplicator } from './core/RequestDeduplicator';\r\nimport { RetryConfig } from './core/util/retry';\r\nimport { IRetryStrategy } from './core/IRetryStrategy';\r\nimport { EsiDiagnostics } from './core/EsiDiagnostics';\r\nimport {\r\n batchFetch,\r\n batchPost,\r\n BatchOptions,\r\n BatchResult,\r\n} from './core/BatchRequestHandler';\r\nimport { configureApiClient } from './core/configureApiClient';\r\nimport logger from './core/logger/logger';\r\n\r\nexport type EsiDatasource = 'tranquility' | 'singularity';\r\n\r\nexport interface EsiClientConfig {\r\n clientId?: string;\r\n baseUrl?: string;\r\n accessToken?: string;\r\n datasource?: EsiDatasource;\r\n onTokenRefresh?: TokenProvider;\r\n timeout?: number;\r\n retryAttempts?: number;\r\n retryConfig?: RetryConfig;\r\n retryStrategy?: IRetryStrategy;\r\n enableETagCache?: boolean;\r\n etagCacheConfig?: ETagCacheConfig;\r\n enableCircuitBreaker?: boolean;\r\n circuitBreakerConfig?: CircuitBreakerConfig;\r\n unsafeAllowCustomHost?: boolean;\r\n enableRequestDeduplication?: boolean;\r\n language?: string;\r\n compatibilityDate?: string;\r\n rateLimiterConfig?: RateLimiterConfig;\r\n requestInterceptors?: RequestInterceptor[];\r\n responseInterceptors?: ResponseInterceptor[];\r\n validateResponse?: boolean;\r\n validateRequest?: boolean;\r\n}\r\n\r\nexport class EsiClient {\r\n private apiClient: ApiClient;\r\n private clients: Map<string, unknown> = new Map();\r\n private etagCacheEnabled: boolean;\r\n private _diagnostics: EsiDiagnostics | null = null;\r\n private deduplicator: RequestDeduplicator | null = null;\r\n\r\n constructor(config?: EsiClientConfig) {\r\n const token = config?.accessToken || process.env.ESI_ACCESS_TOKEN;\r\n const baseUrl = validateBaseUrl(\r\n config?.baseUrl || process.env.ESI_BASE_URL || 'https://esi.evetech.net',\r\n config?.unsafeAllowCustomHost,\r\n );\r\n this.apiClient = new ApiClient(\r\n config?.clientId || process.env.ESI_CLIENT_ID || 'esi-client',\r\n baseUrl,\r\n token,\r\n );\r\n\r\n const datasource =\r\n config?.datasource ||\r\n (process.env.ESI_DATASOURCE as EsiDatasource | undefined);\r\n if (datasource) {\r\n this.apiClient.setDatasource(datasource);\r\n }\r\n\r\n if (config?.language) {\r\n this.apiClient.setLanguage(config.language);\r\n }\r\n\r\n if (config?.compatibilityDate) {\r\n this.apiClient.setCompatibilityDate(config.compatibilityDate);\r\n }\r\n\r\n if (config?.onTokenRefresh) {\r\n this.apiClient.setTokenProvider(config.onTokenRefresh);\r\n }\r\n\r\n const result = configureApiClient(this.apiClient, config);\r\n this.deduplicator = result.deduplicator;\r\n this.etagCacheEnabled = config?.enableETagCache !== false;\r\n\r\n logger.info('EsiClient initialized successfully');\r\n }\r\n\r\n private getClient<T>(name: ApiClientType): T {\r\n if (!this.clients.has(name)) {\r\n this.clients.set(name, createClientInstance(name, this.apiClient));\r\n }\r\n return this.clients.get(name) as T;\r\n }\r\n\r\n // Domain client accessors\r\n get alliance(): AllianceClient {\r\n return this.getClient('alliance');\r\n }\r\n get assets(): AssetsClient {\r\n return this.getClient('assets');\r\n }\r\n get calendar(): CalendarClient {\r\n return this.getClient('calendar');\r\n }\r\n get characters(): CharacterClient {\r\n return this.getClient('characters');\r\n }\r\n get clones(): ClonesClient {\r\n return this.getClient('clones');\r\n }\r\n get contacts(): ContactsClient {\r\n return this.getClient('contacts');\r\n }\r\n get contracts(): ContractsClient {\r\n return this.getClient('contracts');\r\n }\r\n get corporations(): CorporationsClient {\r\n return this.getClient('corporations');\r\n }\r\n get corporationProjects(): CorporationProjectsClient {\r\n return this.getClient('corporationProjects');\r\n }\r\n get dogma(): DogmaClient {\r\n return this.getClient('dogma');\r\n }\r\n get factions(): FactionClient {\r\n return this.getClient('factions');\r\n }\r\n get fittings(): FittingsClient {\r\n return this.getClient('fittings');\r\n }\r\n get fleets(): FleetClient {\r\n return this.getClient('fleets');\r\n }\r\n get incursions(): IncursionsClient {\r\n return this.getClient('incursions');\r\n }\r\n get industry(): IndustryClient {\r\n return this.getClient('industry');\r\n }\r\n get insurance(): InsuranceClient {\r\n return this.getClient('insurance');\r\n }\r\n get killmails(): KillmailsClient {\r\n return this.getClient('killmails');\r\n }\r\n get location(): LocationClient {\r\n return this.getClient('location');\r\n }\r\n get loyalty(): LoyaltyClient {\r\n return this.getClient('loyalty');\r\n }\r\n get mail(): MailClient {\r\n return this.getClient('mail');\r\n }\r\n get market(): MarketClient {\r\n return this.getClient('market');\r\n }\r\n get pi(): PiClient {\r\n return this.getClient('pi');\r\n }\r\n get route(): RouteClient {\r\n return this.getClient('route');\r\n }\r\n get search(): SearchClient {\r\n return this.getClient('search');\r\n }\r\n get skills(): CharacterSkillsClient {\r\n return this.getClient('skills');\r\n }\r\n get sovereignty(): SovereigntyClient {\r\n return this.getClient('sovereignty');\r\n }\r\n get status(): StatusClient {\r\n return this.getClient('status');\r\n }\r\n get ui(): UiClient {\r\n return this.getClient('ui');\r\n }\r\n get universe(): UniverseClient {\r\n return this.getClient('universe');\r\n }\r\n get wallet(): WalletClient {\r\n return this.getClient('wallet');\r\n }\r\n get wars(): WarsClient {\r\n return this.getClient('wars');\r\n }\r\n get meta(): MetaClient {\r\n return this.getClient('meta');\r\n }\r\n get freelanceJobs(): FreelanceJobsClient {\r\n return this.getClient('freelanceJobs');\r\n }\r\n get cosmetics(): CosmeticsClient {\r\n return this.getClient('cosmetics');\r\n }\r\n get paragonHub(): ParagonHubClient {\r\n return this.getClient('paragonHub');\r\n }\r\n get skyhooks(): SkyhooksClient {\r\n return this.getClient('skyhooks');\r\n }\r\n get mercenary(): MercenaryClient {\r\n return this.getClient('mercenary');\r\n }\r\n get militaryCampaigns(): MilitaryCampaignsClient {\r\n return this.getClient('militaryCampaigns');\r\n }\r\n get accessLists(): AccessListsClient {\r\n return this.getClient('accessLists');\r\n }\r\n\r\n addRequestInterceptor(fn: RequestInterceptor): () => void {\r\n return this.apiClient.addRequestInterceptor(fn);\r\n }\r\n\r\n addResponseInterceptor(fn: ResponseInterceptor): () => void {\r\n return this.apiClient.addResponseInterceptor(fn);\r\n }\r\n\r\n setAccessToken(token: string): void {\r\n this.apiClient.setAccessToken(token);\r\n logger.info('Access token updated');\r\n }\r\n\r\n setTokenProvider(provider: TokenProvider | undefined): void {\r\n this.apiClient.setTokenProvider(provider);\r\n logger.info(\r\n provider ? 'Token provider configured' : 'Token provider removed',\r\n );\r\n }\r\n\r\n get diagnostics(): EsiDiagnostics {\r\n if (!this._diagnostics) {\r\n this._diagnostics = new EsiDiagnostics(\r\n this.apiClient,\r\n this.etagCacheEnabled,\r\n this.deduplicator,\r\n );\r\n }\r\n return this._diagnostics;\r\n }\r\n\r\n getCacheStats() {\r\n return this.diagnostics.getCacheStats();\r\n }\r\n\r\n clearCache(): void {\r\n this.diagnostics.clearCache();\r\n }\r\n\r\n updateCacheConfig(newConfig: Partial<ETagCacheConfig>): void {\r\n this.diagnostics.updateCacheConfig(newConfig);\r\n }\r\n\r\n getCircuitBreakerStats() {\r\n return this.diagnostics.getCircuitBreakerStats();\r\n }\r\n\r\n resetCircuitBreaker(endpoint?: string): void {\r\n this.diagnostics.resetCircuitBreaker(endpoint);\r\n }\r\n\r\n async batch<K, T>(\r\n keys: K[],\r\n fetcher: (key: K) => Promise<T>,\r\n options?: BatchOptions,\r\n ): Promise<BatchResult<K, T>> {\r\n return batchFetch(keys, fetcher, options);\r\n }\r\n\r\n async batchPost<T>(\r\n ids: number[],\r\n poster: (chunk: number[]) => Promise<T[]>,\r\n chunkSize?: number,\r\n ): Promise<T[]> {\r\n return batchPost(ids, poster, chunkSize);\r\n }\r\n\r\n shutdown(): void {\r\n const cache = this.apiClient.getCache();\r\n if (cache) {\r\n (cache as ETagCacheManager).shutdown();\r\n }\r\n const cb = this.apiClient.getCircuitBreaker();\r\n if (cb) {\r\n cb.shutdown();\r\n }\r\n if (this.deduplicator) {\r\n this.deduplicator.clear();\r\n }\r\n this.clients.clear();\r\n logger.info('EsiClient shutdown completed');\r\n }\r\n}\r\n\r\nlet _defaultClient: EsiClient | null = null;\r\nexport function getDefaultClient(): EsiClient {\r\n if (!_defaultClient) {\r\n _defaultClient = new EsiClient();\r\n }\r\n return _defaultClient;\r\n}\r\n","import { ApiClient } from './core/ApiClient';\r\nimport { validateBaseUrl } from './core/util/validation';\r\nimport {\r\n ApiClientType,\r\n ClientInstance,\r\n createClientInstance,\r\n AllianceClient,\r\n AssetsClient,\r\n CalendarClient,\r\n CharacterClient,\r\n ClonesClient,\r\n ContactsClient,\r\n ContractsClient,\r\n CorporationsClient,\r\n DogmaClient,\r\n FactionClient,\r\n FittingsClient,\r\n FleetClient,\r\n IncursionsClient,\r\n IndustryClient,\r\n InsuranceClient,\r\n KillmailsClient,\r\n LocationClient,\r\n LoyaltyClient,\r\n MailClient,\r\n MarketClient,\r\n PiClient,\r\n RouteClient,\r\n SearchClient,\r\n CharacterSkillsClient,\r\n SovereigntyClient,\r\n StatusClient,\r\n UiClient,\r\n UniverseClient,\r\n WalletClient,\r\n WarsClient,\r\n MetaClient,\r\n FreelanceJobsClient,\r\n SkyhooksClient,\r\n MercenaryClient,\r\n AccessListsClient,\r\n} from './core/ClientRegistry';\r\nimport { EsiClientConfig } from './EsiClient';\r\nimport { configureApiClient } from './core/configureApiClient';\r\nimport { ETagCacheManager } from './core/cache/ETagCacheManager';\r\nimport { RequestDeduplicator } from './core/RequestDeduplicator';\r\nimport logger from './core/logger/logger';\r\n\r\nexport { ApiClientType, ClientInstance };\r\n\r\nexport class CustomEsiClient {\r\n private apiClient: ApiClient;\r\n private clients: Map<string, ClientInstance> = new Map();\r\n private enabledClients: Set<ApiClientType>;\r\n private deduplicator: RequestDeduplicator | null = null;\r\n\r\n constructor(config: EsiClientConfig & { clients: ApiClientType[] }) {\r\n this.enabledClients = new Set(config.clients);\r\n const baseUrl = validateBaseUrl(\r\n config.baseUrl || process.env.ESI_BASE_URL || 'https://esi.evetech.net',\r\n config.unsafeAllowCustomHost,\r\n );\r\n this.apiClient = new ApiClient(\r\n config.clientId || process.env.ESI_CLIENT_ID || 'esi-custom-client',\r\n baseUrl,\r\n config.accessToken || process.env.ESI_ACCESS_TOKEN,\r\n );\r\n\r\n if (config.language) {\r\n this.apiClient.setLanguage(config.language);\r\n }\r\n\r\n if (config.compatibilityDate) {\r\n this.apiClient.setCompatibilityDate(config.compatibilityDate);\r\n }\r\n\r\n if (config.onTokenRefresh) {\r\n this.apiClient.setTokenProvider(config.onTokenRefresh);\r\n }\r\n\r\n const datasource = config.datasource;\r\n if (datasource) {\r\n this.apiClient.setDatasource(datasource);\r\n }\r\n\r\n const result = configureApiClient(this.apiClient, config);\r\n this.deduplicator = result.deduplicator;\r\n\r\n for (const name of this.enabledClients) {\r\n this.clients.set(name, createClientInstance(name, this.apiClient));\r\n }\r\n\r\n logger.info(\r\n `CustomEsiClient initialized with clients: ${config.clients.join(', ')}`,\r\n );\r\n }\r\n\r\n getClient(clientType: ApiClientType): ClientInstance | undefined {\r\n return this.clients.get(clientType);\r\n }\r\n\r\n hasClient(clientType: ApiClientType): boolean {\r\n return this.clients.has(clientType);\r\n }\r\n\r\n getEnabledClients(): ApiClientType[] {\r\n return Array.from(this.enabledClients);\r\n }\r\n\r\n get alliance(): AllianceClient | undefined {\r\n return this.getClient('alliance') as AllianceClient;\r\n }\r\n get assets(): AssetsClient | undefined {\r\n return this.getClient('assets') as AssetsClient;\r\n }\r\n get calendar(): CalendarClient | undefined {\r\n return this.getClient('calendar') as CalendarClient;\r\n }\r\n get characters(): CharacterClient | undefined {\r\n return this.getClient('characters') as CharacterClient;\r\n }\r\n get clones(): ClonesClient | undefined {\r\n return this.getClient('clones') as ClonesClient;\r\n }\r\n get contacts(): ContactsClient | undefined {\r\n return this.getClient('contacts') as ContactsClient;\r\n }\r\n get contracts(): ContractsClient | undefined {\r\n return this.getClient('contracts') as ContractsClient;\r\n }\r\n get corporations(): CorporationsClient | undefined {\r\n return this.getClient('corporations') as CorporationsClient;\r\n }\r\n get dogma(): DogmaClient | undefined {\r\n return this.getClient('dogma') as DogmaClient;\r\n }\r\n get factions(): FactionClient | undefined {\r\n return this.getClient('factions') as FactionClient;\r\n }\r\n get fittings(): FittingsClient | undefined {\r\n return this.getClient('fittings') as FittingsClient;\r\n }\r\n get fleets(): FleetClient | undefined {\r\n return this.getClient('fleets') as FleetClient;\r\n }\r\n get incursions(): IncursionsClient | undefined {\r\n return this.getClient('incursions') as IncursionsClient;\r\n }\r\n get industry(): IndustryClient | undefined {\r\n return this.getClient('industry') as IndustryClient;\r\n }\r\n get insurance(): InsuranceClient | undefined {\r\n return this.getClient('insurance') as InsuranceClient;\r\n }\r\n get killmails(): KillmailsClient | undefined {\r\n return this.getClient('killmails') as KillmailsClient;\r\n }\r\n get location(): LocationClient | undefined {\r\n return this.getClient('location') as LocationClient;\r\n }\r\n get loyalty(): LoyaltyClient | undefined {\r\n return this.getClient('loyalty') as LoyaltyClient;\r\n }\r\n get mail(): MailClient | undefined {\r\n return this.getClient('mail') as MailClient;\r\n }\r\n get market(): MarketClient | undefined {\r\n return this.getClient('market') as MarketClient;\r\n }\r\n get pi(): PiClient | undefined {\r\n return this.getClient('pi') as PiClient;\r\n }\r\n get route(): RouteClient | undefined {\r\n return this.getClient('route') as RouteClient;\r\n }\r\n get search(): SearchClient | undefined {\r\n return this.getClient('search') as SearchClient;\r\n }\r\n get skills(): CharacterSkillsClient | undefined {\r\n return this.getClient('skills') as CharacterSkillsClient;\r\n }\r\n get sovereignty(): SovereigntyClient | undefined {\r\n return this.getClient('sovereignty') as SovereigntyClient;\r\n }\r\n get status(): StatusClient | undefined {\r\n return this.getClient('status') as StatusClient;\r\n }\r\n get ui(): UiClient | undefined {\r\n return this.getClient('ui') as UiClient;\r\n }\r\n get universe(): UniverseClient | undefined {\r\n return this.getClient('universe') as UniverseClient;\r\n }\r\n get wallet(): WalletClient | undefined {\r\n return this.getClient('wallet') as WalletClient;\r\n }\r\n get wars(): WarsClient | undefined {\r\n return this.getClient('wars') as WarsClient;\r\n }\r\n get meta(): MetaClient | undefined {\r\n return this.getClient('meta') as MetaClient;\r\n }\r\n get freelanceJobs(): FreelanceJobsClient | undefined {\r\n return this.getClient('freelanceJobs') as FreelanceJobsClient;\r\n }\r\n get skyhooks(): SkyhooksClient | undefined {\r\n return this.getClient('skyhooks') as SkyhooksClient;\r\n }\r\n get mercenary(): MercenaryClient | undefined {\r\n return this.getClient('mercenary') as MercenaryClient;\r\n }\r\n get accessLists(): AccessListsClient | undefined {\r\n return this.getClient('accessLists') as AccessListsClient;\r\n }\r\n\r\n shutdown(): void {\r\n const cache = this.apiClient.getCache();\r\n if (cache) {\r\n (cache as ETagCacheManager).shutdown();\r\n }\r\n const cb = this.apiClient.getCircuitBreaker();\r\n if (cb) {\r\n cb.shutdown();\r\n }\r\n if (this.deduplicator) {\r\n this.deduplicator.clear();\r\n }\r\n this.clients.clear();\r\n logger.info('CustomEsiClient shutdown completed');\r\n }\r\n}\r\n\r\nexport class EsiApiFactory {\r\n static createAllianceClient(config?: EsiClientConfig): AllianceClient {\r\n return createClientInstance(\r\n 'alliance',\r\n this.buildApiClient(config),\r\n ) as AllianceClient;\r\n }\r\n\r\n static createCharacterClient(config?: EsiClientConfig): CharacterClient {\r\n return createClientInstance(\r\n 'characters',\r\n this.buildApiClient(config),\r\n ) as CharacterClient;\r\n }\r\n\r\n static createCorporationClient(config?: EsiClientConfig): CorporationsClient {\r\n return createClientInstance(\r\n 'corporations',\r\n this.buildApiClient(config),\r\n ) as CorporationsClient;\r\n }\r\n\r\n static createMarketClient(config?: EsiClientConfig): MarketClient {\r\n return createClientInstance(\r\n 'market',\r\n this.buildApiClient(config),\r\n ) as MarketClient;\r\n }\r\n\r\n static createUniverseClient(config?: EsiClientConfig): UniverseClient {\r\n return createClientInstance(\r\n 'universe',\r\n this.buildApiClient(config),\r\n ) as UniverseClient;\r\n }\r\n\r\n static createFleetClient(config?: EsiClientConfig): FleetClient {\r\n return createClientInstance(\r\n 'fleets',\r\n this.buildApiClient(config),\r\n ) as FleetClient;\r\n }\r\n\r\n static createAssetsClient(config?: EsiClientConfig): AssetsClient {\r\n return createClientInstance(\r\n 'assets',\r\n this.buildApiClient(config),\r\n ) as AssetsClient;\r\n }\r\n\r\n static createWalletClient(config?: EsiClientConfig): WalletClient {\r\n return createClientInstance(\r\n 'wallet',\r\n this.buildApiClient(config),\r\n ) as WalletClient;\r\n }\r\n\r\n static createMailClient(config?: EsiClientConfig): MailClient {\r\n return createClientInstance(\r\n 'mail',\r\n this.buildApiClient(config),\r\n ) as MailClient;\r\n }\r\n\r\n static createClient(\r\n clientType: ApiClientType,\r\n config?: EsiClientConfig,\r\n ): ClientInstance {\r\n return createClientInstance(clientType, this.buildApiClient(config));\r\n }\r\n\r\n private static buildApiClient(config?: EsiClientConfig): ApiClient {\r\n const baseUrl = validateBaseUrl(\r\n config?.baseUrl || process.env.ESI_BASE_URL || 'https://esi.evetech.net',\r\n config?.unsafeAllowCustomHost,\r\n );\r\n const client = new ApiClient(\r\n config?.clientId || process.env.ESI_CLIENT_ID || 'esi-standalone-client',\r\n baseUrl,\r\n config?.accessToken || process.env.ESI_ACCESS_TOKEN,\r\n );\r\n\r\n if (config?.language) {\r\n client.setLanguage(config.language);\r\n }\r\n\r\n if (config?.onTokenRefresh) {\r\n client.setTokenProvider(config.onTokenRefresh);\r\n }\r\n\r\n const datasource = config?.datasource;\r\n if (datasource) {\r\n client.setDatasource(datasource);\r\n }\r\n\r\n configureApiClient(client, config);\r\n return client;\r\n }\r\n}\r\n\r\nexport class EsiClientBuilder {\r\n private clients: ApiClientType[] = [];\r\n private config: EsiClientConfig = {};\r\n\r\n addClient(clientType: ApiClientType): this {\r\n if (!this.clients.includes(clientType)) {\r\n this.clients.push(clientType);\r\n }\r\n return this;\r\n }\r\n\r\n addClients(clientTypes: ApiClientType[]): this {\r\n clientTypes.forEach((type) => this.addClient(type));\r\n return this;\r\n }\r\n\r\n withConfig(config: EsiClientConfig): this {\r\n this.config = { ...this.config, ...config };\r\n return this;\r\n }\r\n\r\n withClientId(clientId: string): this {\r\n this.config.clientId = clientId;\r\n return this;\r\n }\r\n\r\n withAccessToken(accessToken: string): this {\r\n this.config.accessToken = accessToken;\r\n return this;\r\n }\r\n\r\n build(): CustomEsiClient {\r\n if (this.clients.length === 0) {\r\n throw new Error('At least one client type must be specified');\r\n }\r\n return new CustomEsiClient({ ...this.config, clients: this.clients });\r\n }\r\n}\r\n","import { ApiClient } from './ApiClient';\nimport { IRateLimiter } from './rateLimiter/IRateLimiter';\nimport { RateLimiter } from './rateLimiter/RateLimiter';\nimport { ICache } from './cache/ICache';\nimport { CircuitBreaker } from './circuitBreaker/CircuitBreaker';\n\nexport class ApiClientBuilder {\n private clientId!: string;\n private link!: string;\n private accessToken?: string;\n private rateLimiter?: IRateLimiter;\n private cache?: ICache;\n private circuitBreaker?: CircuitBreaker;\n private _timeout?: number;\n\n setClientId(clientId: string): ApiClientBuilder {\n this.clientId = clientId;\n return this;\n }\n\n setLink(link: string): ApiClientBuilder {\n this.link = link;\n return this;\n }\n\n setAccessToken(accessToken?: string): ApiClientBuilder {\n this.accessToken = accessToken;\n return this;\n }\n\n setRateLimiter(limiter: IRateLimiter): ApiClientBuilder {\n this.rateLimiter = limiter;\n return this;\n }\n\n setCache(cache: ICache): ApiClientBuilder {\n this.cache = cache;\n return this;\n }\n\n setCircuitBreaker(cb: CircuitBreaker): ApiClientBuilder {\n this.circuitBreaker = cb;\n return this;\n }\n\n setTimeout(timeout: number): ApiClientBuilder {\n this._timeout = timeout;\n return this;\n }\n\n build(): ApiClient {\n const client = new ApiClient(this.clientId, this.link, this.accessToken);\n client.setRateLimiter(this.rateLimiter ?? new RateLimiter());\n if (this.cache) client.setCache(this.cache);\n if (this.circuitBreaker) client.setCircuitBreaker(this.circuitBreaker);\n if (this._timeout !== undefined) client.setTimeout(this._timeout);\n return client;\n }\n}\n","// Auto-generated from ESI OpenAPI spec — do not edit manually\r\n// Total scopes: 72\r\n// Endpoints requiring scopes: 127\r\n\r\nexport type EsiScope =\r\n | 'esi-access.read_lists.v1'\r\n | 'esi-activities.read_character.v1'\r\n | 'esi-alliances.read_contacts.v1'\r\n | 'esi-assets.read_assets.v1'\r\n | 'esi-assets.read_corporation_assets.v1'\r\n | 'esi-calendar.read_calendar_events.v1'\r\n | 'esi-calendar.respond_calendar_events.v1'\r\n | 'esi-characters.read_agents_research.v1'\r\n | 'esi-characters.read_blueprints.v1'\r\n | 'esi-characters.read_contacts.v1'\r\n | 'esi-characters.read_corporation_roles.v1'\r\n | 'esi-characters.read_fatigue.v1'\r\n | 'esi-characters.read_freelance_jobs.v1'\r\n | 'esi-characters.read_fw_stats.v1'\r\n | 'esi-characters.read_loyalty.v1'\r\n | 'esi-characters.read_medals.v1'\r\n | 'esi-characters.read_notifications.v1'\r\n | 'esi-characters.read_standings.v1'\r\n | 'esi-characters.read_titles.v1'\r\n | 'esi-characters.write_contacts.v1'\r\n | 'esi-clones.read_clones.v1'\r\n | 'esi-clones.read_implants.v1'\r\n | 'esi-contracts.read_character_contracts.v1'\r\n | 'esi-contracts.read_corporation_contracts.v1'\r\n | 'esi-corporations.read_blueprints.v1'\r\n | 'esi-corporations.read_contacts.v1'\r\n | 'esi-corporations.read_container_logs.v1'\r\n | 'esi-corporations.read_corporation_membership.v1'\r\n | 'esi-corporations.read_divisions.v1'\r\n | 'esi-corporations.read_facilities.v1'\r\n | 'esi-corporations.read_freelance_jobs.v1'\r\n | 'esi-corporations.read_fw_stats.v1'\r\n | 'esi-corporations.read_medals.v1'\r\n | 'esi-corporations.read_projects.v1'\r\n | 'esi-corporations.read_standings.v1'\r\n | 'esi-corporations.read_starbases.v1'\r\n | 'esi-corporations.read_structures.v1'\r\n | 'esi-corporations.read_titles.v1'\r\n | 'esi-corporations.track_members.v1'\r\n | 'esi-fittings.read_fittings.v1'\r\n | 'esi-fittings.write_fittings.v1'\r\n | 'esi-fleets.read_fleet.v1'\r\n | 'esi-fleets.write_fleet.v1'\r\n | 'esi-industry.read_character_jobs.v1'\r\n | 'esi-industry.read_character_mining.v1'\r\n | 'esi-industry.read_corporation_jobs.v1'\r\n | 'esi-industry.read_corporation_mining.v1'\r\n | 'esi-killmails.read_corporation_killmails.v1'\r\n | 'esi-killmails.read_killmails.v1'\r\n | 'esi-location.read_location.v1'\r\n | 'esi-location.read_online.v1'\r\n | 'esi-location.read_ship_type.v1'\r\n | 'esi-mail.organize_mail.v1'\r\n | 'esi-mail.read_mail.v1'\r\n | 'esi-mail.send_mail.v1'\r\n | 'esi-markets.read_character_orders.v1'\r\n | 'esi-markets.read_corporation_orders.v1'\r\n | 'esi-markets.structure_markets.v1'\r\n | 'esi-planets.manage_planets.v1'\r\n | 'esi-planets.read_customs_offices.v1'\r\n | 'esi-search.search_structures.v1'\r\n | 'esi-skills.read_skillqueue.v1'\r\n | 'esi-skills.read_skills.v1'\r\n | 'esi-structures.read_character.v1'\r\n | 'esi-structures.read_corporation.v1'\r\n | 'esi-ui.open_window.v1'\r\n | 'esi-ui.write_waypoint.v1'\r\n | 'esi-universe.read_structures.v1'\r\n | 'esi-wallet.read_character_wallet.v1'\r\n | 'esi-wallet.read_corporation_wallets.v1'\r\n | 'esi.activity.char:read'\r\n | 'esi.cosmetic.char:read';\r\n\r\nexport const esiEndpointScopes: Record<string, EsiScope[]> = {\r\n 'GET:alliances/{alliance_id}/contacts': ['esi-alliances.read_contacts.v1'],\r\n 'GET:alliances/{alliance_id}/contacts/labels': ['esi-alliances.read_contacts.v1'],\r\n 'GET:characters/{character_id}/agents_research': ['esi-characters.read_agents_research.v1'],\r\n 'GET:characters/{character_id}/assets': ['esi-assets.read_assets.v1'],\r\n 'POST:characters/{character_id}/assets/locations': ['esi-assets.read_assets.v1'],\r\n 'POST:characters/{character_id}/assets/names': ['esi-assets.read_assets.v1'],\r\n 'GET:characters/{character_id}/attributes': ['esi-skills.read_skills.v1'],\r\n 'GET:characters/{character_id}/blueprints': ['esi-characters.read_blueprints.v1'],\r\n 'GET:characters/{character_id}/calendar': ['esi-calendar.read_calendar_events.v1'],\r\n 'GET:characters/{character_id}/calendar/{event_id}': ['esi-calendar.read_calendar_events.v1'],\r\n 'PUT:characters/{character_id}/calendar/{event_id}': ['esi-calendar.respond_calendar_events.v1'],\r\n 'GET:characters/{character_id}/calendar/{event_id}/attendees': ['esi-calendar.read_calendar_events.v1'],\r\n 'GET:characters/{character_id}/clones': ['esi-clones.read_clones.v1'],\r\n 'GET:characters/{character_id}/contacts': ['esi-characters.read_contacts.v1'],\r\n 'POST:characters/{character_id}/contacts': ['esi-characters.write_contacts.v1'],\r\n 'PUT:characters/{character_id}/contacts': ['esi-characters.write_contacts.v1'],\r\n 'DELETE:characters/{character_id}/contacts': ['esi-characters.write_contacts.v1'],\r\n 'GET:characters/{character_id}/contacts/labels': ['esi-characters.read_contacts.v1'],\r\n 'GET:characters/{character_id}/contracts': ['esi-contracts.read_character_contracts.v1'],\r\n 'GET:characters/{character_id}/contracts/{contract_id}/bids': ['esi-contracts.read_character_contracts.v1'],\r\n 'GET:characters/{character_id}/contracts/{contract_id}/items': ['esi-contracts.read_character_contracts.v1'],\r\n 'POST:characters/{character_id}/cspa': ['esi-characters.read_contacts.v1'],\r\n 'GET:characters/{character_id}/fatigue': ['esi-characters.read_fatigue.v1'],\r\n 'GET:characters/{character_id}/fittings': ['esi-fittings.read_fittings.v1'],\r\n 'POST:characters/{character_id}/fittings': ['esi-fittings.write_fittings.v1'],\r\n 'DELETE:characters/{character_id}/fittings/{fitting_id}': ['esi-fittings.write_fittings.v1'],\r\n 'GET:characters/{character_id}/fleet': ['esi-fleets.read_fleet.v1'],\r\n 'GET:characters/{character_id}/freelance-jobs': ['esi-characters.read_freelance_jobs.v1'],\r\n 'GET:characters/{character_id}/freelance-jobs/{job_id}/participation': ['esi-characters.read_freelance_jobs.v1'],\r\n 'GET:characters/{character_id}/fw/stats': ['esi-characters.read_fw_stats.v1'],\r\n 'GET:characters/{character_id}/implants': ['esi-clones.read_implants.v1'],\r\n 'GET:characters/{character_id}/industry/jobs': ['esi-industry.read_character_jobs.v1'],\r\n 'GET:characters/{character_id}/killmails/recent': ['esi-killmails.read_killmails.v1'],\r\n 'GET:characters/{character_id}/location': ['esi-location.read_location.v1'],\r\n 'GET:characters/{character_id}/loyalty/points': ['esi-characters.read_loyalty.v1'],\r\n 'GET:characters/{character_id}/mail': ['esi-mail.read_mail.v1'],\r\n 'POST:characters/{character_id}/mail': ['esi-mail.send_mail.v1'],\r\n 'GET:characters/{character_id}/mail/{mail_id}': ['esi-mail.read_mail.v1'],\r\n 'PUT:characters/{character_id}/mail/{mail_id}': ['esi-mail.organize_mail.v1'],\r\n 'DELETE:characters/{character_id}/mail/{mail_id}': ['esi-mail.organize_mail.v1'],\r\n 'GET:characters/{character_id}/mail/labels': ['esi-mail.read_mail.v1'],\r\n 'POST:characters/{character_id}/mail/labels': ['esi-mail.organize_mail.v1'],\r\n 'DELETE:characters/{character_id}/mail/labels/{label_id}': ['esi-mail.organize_mail.v1'],\r\n 'GET:characters/{character_id}/mail/lists': ['esi-mail.read_mail.v1'],\r\n 'GET:characters/{character_id}/medals': ['esi-characters.read_medals.v1'],\r\n 'GET:characters/{character_id}/mining': ['esi-industry.read_character_mining.v1'],\r\n 'GET:characters/{character_id}/notifications': ['esi-characters.read_notifications.v1'],\r\n 'GET:characters/{character_id}/notifications/contacts': ['esi-characters.read_notifications.v1'],\r\n 'GET:characters/{character_id}/online': ['esi-location.read_online.v1'],\r\n 'GET:characters/{character_id}/orders': ['esi-markets.read_character_orders.v1'],\r\n 'GET:characters/{character_id}/orders/history': ['esi-markets.read_character_orders.v1'],\r\n 'GET:characters/{character_id}/planets': ['esi-planets.manage_planets.v1'],\r\n 'GET:characters/{character_id}/planets/{planet_id}': ['esi-planets.manage_planets.v1'],\r\n 'GET:characters/{character_id}/roles': ['esi-characters.read_corporation_roles.v1'],\r\n 'GET:characters/{character_id}/search': ['esi-search.search_structures.v1'],\r\n 'GET:characters/{character_id}/ship': ['esi-location.read_ship_type.v1'],\r\n 'GET:characters/{character_id}/skillqueue': ['esi-skills.read_skillqueue.v1'],\r\n 'GET:characters/{character_id}/skills': ['esi-skills.read_skills.v1'],\r\n 'GET:characters/{character_id}/standings': ['esi-characters.read_standings.v1'],\r\n 'GET:characters/{character_id}/titles': ['esi-characters.read_titles.v1'],\r\n 'GET:characters/{character_id}/wallet': ['esi-wallet.read_character_wallet.v1'],\r\n 'GET:characters/{character_id}/wallet/journal': ['esi-wallet.read_character_wallet.v1'],\r\n 'GET:characters/{character_id}/wallet/transactions': ['esi-wallet.read_character_wallet.v1'],\r\n 'GET:corporation/{corporation_id}/mining/extractions': ['esi-industry.read_corporation_mining.v1'],\r\n 'GET:corporation/{corporation_id}/mining/observers': ['esi-industry.read_corporation_mining.v1'],\r\n 'GET:corporation/{corporation_id}/mining/observers/{observer_id}': ['esi-industry.read_corporation_mining.v1'],\r\n 'GET:corporations/{corporation_id}/assets': ['esi-assets.read_corporation_assets.v1'],\r\n 'POST:corporations/{corporation_id}/assets/locations': ['esi-assets.read_corporation_assets.v1'],\r\n 'POST:corporations/{corporation_id}/assets/names': ['esi-assets.read_corporation_assets.v1'],\r\n 'GET:corporations/{corporation_id}/blueprints': ['esi-corporations.read_blueprints.v1'],\r\n 'GET:corporations/{corporation_id}/contacts': ['esi-corporations.read_contacts.v1'],\r\n 'GET:corporations/{corporation_id}/contacts/labels': ['esi-corporations.read_contacts.v1'],\r\n 'GET:corporations/{corporation_id}/containers/logs': ['esi-corporations.read_container_logs.v1'],\r\n 'GET:corporations/{corporation_id}/contracts': ['esi-contracts.read_corporation_contracts.v1'],\r\n 'GET:corporations/{corporation_id}/contracts/{contract_id}/bids': ['esi-contracts.read_corporation_contracts.v1'],\r\n 'GET:corporations/{corporation_id}/contracts/{contract_id}/items': ['esi-contracts.read_corporation_contracts.v1'],\r\n 'GET:corporations/{corporation_id}/customs_offices': ['esi-planets.read_customs_offices.v1'],\r\n 'GET:corporations/{corporation_id}/divisions': ['esi-corporations.read_divisions.v1'],\r\n 'GET:corporations/{corporation_id}/facilities': ['esi-corporations.read_facilities.v1'],\r\n 'GET:corporations/{corporation_id}/freelance-jobs': ['esi-corporations.read_freelance_jobs.v1'],\r\n 'GET:corporations/{corporation_id}/freelance-jobs/{job_id}/participants': ['esi-corporations.read_freelance_jobs.v1'],\r\n 'GET:corporations/{corporation_id}/fw/stats': ['esi-corporations.read_fw_stats.v1'],\r\n 'GET:corporations/{corporation_id}/industry/jobs': ['esi-industry.read_corporation_jobs.v1'],\r\n 'GET:corporations/{corporation_id}/killmails/recent': ['esi-killmails.read_corporation_killmails.v1'],\r\n 'GET:corporations/{corporation_id}/medals': ['esi-corporations.read_medals.v1'],\r\n 'GET:corporations/{corporation_id}/medals/issued': ['esi-corporations.read_medals.v1'],\r\n 'GET:corporations/{corporation_id}/members': ['esi-corporations.read_corporation_membership.v1'],\r\n 'GET:corporations/{corporation_id}/members/limit': ['esi-corporations.track_members.v1'],\r\n 'GET:corporations/{corporation_id}/members/titles': ['esi-corporations.read_titles.v1'],\r\n 'GET:corporations/{corporation_id}/membertracking': ['esi-corporations.track_members.v1'],\r\n 'GET:corporations/{corporation_id}/orders': ['esi-markets.read_corporation_orders.v1'],\r\n 'GET:corporations/{corporation_id}/orders/history': ['esi-markets.read_corporation_orders.v1'],\r\n 'GET:corporations/{corporation_id}/projects': ['esi-corporations.read_projects.v1'],\r\n 'GET:corporations/{corporation_id}/projects/{project_id}': ['esi-corporations.read_projects.v1'],\r\n 'GET:corporations/{corporation_id}/projects/{project_id}/contribution/{character_id}': ['esi-corporations.read_projects.v1'],\r\n 'GET:corporations/{corporation_id}/projects/{project_id}/contributors': ['esi-corporations.read_projects.v1'],\r\n 'GET:corporations/{corporation_id}/roles': ['esi-corporations.read_corporation_membership.v1'],\r\n 'GET:corporations/{corporation_id}/roles/history': ['esi-corporations.read_corporation_membership.v1'],\r\n 'GET:corporations/{corporation_id}/shareholders': ['esi-wallet.read_corporation_wallets.v1'],\r\n 'GET:corporations/{corporation_id}/standings': ['esi-corporations.read_standings.v1'],\r\n 'GET:corporations/{corporation_id}/starbases': ['esi-corporations.read_starbases.v1'],\r\n 'GET:corporations/{corporation_id}/starbases/{starbase_id}': ['esi-corporations.read_starbases.v1'],\r\n 'GET:corporations/{corporation_id}/structures': ['esi-corporations.read_structures.v1'],\r\n 'GET:corporations/{corporation_id}/titles': ['esi-corporations.read_titles.v1'],\r\n 'GET:corporations/{corporation_id}/wallets': ['esi-wallet.read_corporation_wallets.v1'],\r\n 'GET:corporations/{corporation_id}/wallets/{division}/journal': ['esi-wallet.read_corporation_wallets.v1'],\r\n 'GET:corporations/{corporation_id}/wallets/{division}/transactions': ['esi-wallet.read_corporation_wallets.v1'],\r\n 'GET:fleets/{fleet_id}': ['esi-fleets.read_fleet.v1'],\r\n 'PUT:fleets/{fleet_id}': ['esi-fleets.write_fleet.v1'],\r\n 'GET:fleets/{fleet_id}/members': ['esi-fleets.read_fleet.v1'],\r\n 'POST:fleets/{fleet_id}/members': ['esi-fleets.write_fleet.v1'],\r\n 'PUT:fleets/{fleet_id}/members/{member_id}': ['esi-fleets.write_fleet.v1'],\r\n 'DELETE:fleets/{fleet_id}/members/{member_id}': ['esi-fleets.write_fleet.v1'],\r\n 'PUT:fleets/{fleet_id}/squads/{squad_id}': ['esi-fleets.write_fleet.v1'],\r\n 'DELETE:fleets/{fleet_id}/squads/{squad_id}': ['esi-fleets.write_fleet.v1'],\r\n 'GET:fleets/{fleet_id}/wings': ['esi-fleets.read_fleet.v1'],\r\n 'POST:fleets/{fleet_id}/wings': ['esi-fleets.write_fleet.v1'],\r\n 'PUT:fleets/{fleet_id}/wings/{wing_id}': ['esi-fleets.write_fleet.v1'],\r\n 'DELETE:fleets/{fleet_id}/wings/{wing_id}': ['esi-fleets.write_fleet.v1'],\r\n 'POST:fleets/{fleet_id}/wings/{wing_id}/squads': ['esi-fleets.write_fleet.v1'],\r\n 'GET:markets/structures/{structure_id}': ['esi-markets.structure_markets.v1'],\r\n 'POST:ui/autopilot/waypoint': ['esi-ui.write_waypoint.v1'],\r\n 'POST:ui/openwindow/contract': ['esi-ui.open_window.v1'],\r\n 'POST:ui/openwindow/information': ['esi-ui.open_window.v1'],\r\n 'POST:ui/openwindow/marketdetails': ['esi-ui.open_window.v1'],\r\n 'POST:ui/openwindow/newmail': ['esi-ui.open_window.v1'],\r\n 'GET:universe/structures/{structure_id}': ['esi-universe.read_structures.v1'],\r\n};\r\n","declare const __brand: unique symbol;\n\ntype Brand<T, B extends string> = T & { readonly [__brand]: B };\n\nexport type CharacterId = Brand<number, 'CharacterId'>;\nexport type CorporationId = Brand<number, 'CorporationId'>;\nexport type AllianceId = Brand<number, 'AllianceId'>;\nexport type TypeId = Brand<number, 'TypeId'>;\nexport type RegionId = Brand<number, 'RegionId'>;\nexport type SystemId = Brand<number, 'SystemId'>;\nexport type StationId = Brand<number, 'StationId'>;\nexport type StructureId = Brand<number, 'StructureId'>;\nexport type OrderId = Brand<number, 'OrderId'>;\nexport type ContractId = Brand<number, 'ContractId'>;\nexport type KillmailId = Brand<number, 'KillmailId'>;\nexport type FactionId = Brand<number, 'FactionId'>;\nexport type CorporationAllianceId = Brand<number, 'CorporationAllianceId'>;\nexport type FleetId = Brand<number, 'FleetId'>;\nexport type PlanetId = Brand<number, 'PlanetId'>;\nexport type WarId = Brand<number, 'WarId'>;\n\nexport function brand<T>(value: number): T {\n return value as unknown as T;\n}\n","/* eslint-disable */\r\n// Auto-generated from ESI OpenAPI spec — do not edit manually\r\n// Spec hash: 6b05f68f07a2\r\n// Total interfaces: 161\r\n\r\n// --- Alliance ---\r\n\r\nexport interface AllianceDetail {\r\n creator_corporation_id: number;\r\n creator_id: number;\r\n date_founded: string;\r\n executor_corporation_id?: number;\r\n faction_id?: number;\r\n name: string;\r\n ticker: string;\r\n}\r\n\r\nexport interface AlliancesAllianceIdIconsGet {\r\n px128x128?: string;\r\n px64x64?: string;\r\n}\r\n\r\n// --- Assets ---\r\n\r\nexport interface CharactersCharacterIdAssetsGet {\r\n is_blueprint_copy?: boolean;\r\n is_singleton: boolean;\r\n item_id: number;\r\n location_flag: 'AssetSafety' | 'AutoFit' | 'BoosterBay' | 'CapsuleerDeliveries' | 'Cargo' | 'CorporationGoalDeliveries' | 'CorpseBay' | 'Deliveries' | 'DroneBay' | 'ExpeditionHold' | 'FighterBay' | 'FighterTube0' | 'FighterTube1' | 'FighterTube2' | 'FighterTube3' | 'FighterTube4' | 'FleetHangar' | 'FrigateEscapeBay' | 'Hangar' | 'HangarAll' | 'HiSlot0' | 'HiSlot1' | 'HiSlot2' | 'HiSlot3' | 'HiSlot4' | 'HiSlot5' | 'HiSlot6' | 'HiSlot7' | 'HiddenModifiers' | 'Implant' | 'InfrastructureHangar' | 'LoSlot0' | 'LoSlot1' | 'LoSlot2' | 'LoSlot3' | 'LoSlot4' | 'LoSlot5' | 'LoSlot6' | 'LoSlot7' | 'Locked' | 'MedSlot0' | 'MedSlot1' | 'MedSlot2' | 'MedSlot3' | 'MedSlot4' | 'MedSlot5' | 'MedSlot6' | 'MedSlot7' | 'MobileDepotHold' | 'MoonMaterialBay' | 'QuafeBay' | 'RigSlot0' | 'RigSlot1' | 'RigSlot2' | 'RigSlot3' | 'RigSlot4' | 'RigSlot5' | 'RigSlot6' | 'RigSlot7' | 'ShipHangar' | 'Skill' | 'SpecializedAmmoHold' | 'SpecializedAsteroidHold' | 'SpecializedCommandCenterHold' | 'SpecializedFuelBay' | 'SpecializedGasHold' | 'SpecializedIceHold' | 'SpecializedIndustrialShipHold' | 'SpecializedLargeShipHold' | 'SpecializedMaterialBay' | 'SpecializedMediumShipHold' | 'SpecializedMineralHold' | 'SpecializedOreHold' | 'SpecializedPlanetaryCommoditiesHold' | 'SpecializedSalvageHold' | 'SpecializedShipHold' | 'SpecializedSmallShipHold' | 'StructureDeedBay' | 'SubSystemBay' | 'SubSystemSlot0' | 'SubSystemSlot1' | 'SubSystemSlot2' | 'SubSystemSlot3' | 'SubSystemSlot4' | 'SubSystemSlot5' | 'SubSystemSlot6' | 'SubSystemSlot7' | 'Unlocked' | 'Wardrobe';\r\n location_id: number;\r\n location_type: 'station' | 'solar_system' | 'item' | 'other';\r\n quantity: number;\r\n type_id: number;\r\n}\r\n\r\nexport interface CharactersCharacterIdAssetsLocationsPost {\r\n item_id: number;\r\n position: {\r\n x: number;\r\n y: number;\r\n z: number;\r\n };\r\n}\r\n\r\nexport interface CharactersCharacterIdAssetsNamesPost {\r\n item_id: number;\r\n name: string;\r\n}\r\n\r\nexport interface CorporationsCorporationIdAssetsGet {\r\n is_blueprint_copy?: boolean;\r\n is_singleton: boolean;\r\n item_id: number;\r\n location_flag: 'AssetSafety' | 'AutoFit' | 'Bonus' | 'Booster' | 'BoosterBay' | 'Capsule' | 'CapsuleerDeliveries' | 'Cargo' | 'CorpDeliveries' | 'CorpSAG1' | 'CorpSAG2' | 'CorpSAG3' | 'CorpSAG4' | 'CorpSAG5' | 'CorpSAG6' | 'CorpSAG7' | 'CorporationGoalDeliveries' | 'CrateLoot' | 'Deliveries' | 'DroneBay' | 'DustBattle' | 'DustDatabank' | 'ExpeditionHold' | 'FighterBay' | 'FighterTube0' | 'FighterTube1' | 'FighterTube2' | 'FighterTube3' | 'FighterTube4' | 'FleetHangar' | 'FrigateEscapeBay' | 'Hangar' | 'HangarAll' | 'HiSlot0' | 'HiSlot1' | 'HiSlot2' | 'HiSlot3' | 'HiSlot4' | 'HiSlot5' | 'HiSlot6' | 'HiSlot7' | 'HiddenModifiers' | 'Implant' | 'Impounded' | 'InfrastructureHangar' | 'JunkyardReprocessed' | 'JunkyardTrashed' | 'LoSlot0' | 'LoSlot1' | 'LoSlot2' | 'LoSlot3' | 'LoSlot4' | 'LoSlot5' | 'LoSlot6' | 'LoSlot7' | 'Locked' | 'MedSlot0' | 'MedSlot1' | 'MedSlot2' | 'MedSlot3' | 'MedSlot4' | 'MedSlot5' | 'MedSlot6' | 'MedSlot7' | 'MobileDepotHold' | 'MoonMaterialBay' | 'OfficeFolder' | 'Pilot' | 'PlanetSurface' | 'QuafeBay' | 'QuantumCoreRoom' | 'Reward' | 'RigSlot0' | 'RigSlot1' | 'RigSlot2' | 'RigSlot3' | 'RigSlot4' | 'RigSlot5' | 'RigSlot6' | 'RigSlot7' | 'SecondaryStorage' | 'ServiceSlot0' | 'ServiceSlot1' | 'ServiceSlot2' | 'ServiceSlot3' | 'ServiceSlot4' | 'ServiceSlot5' | 'ServiceSlot6' | 'ServiceSlot7' | 'ShipHangar' | 'ShipOffline' | 'Skill' | 'SkillInTraining' | 'SpecializedAmmoHold' | 'SpecializedAsteroidHold' | 'SpecializedCommandCenterHold' | 'SpecializedFuelBay' | 'SpecializedGasHold' | 'SpecializedIceHold' | 'SpecializedIndustrialShipHold' | 'SpecializedLargeShipHold' | 'SpecializedMaterialBay' | 'SpecializedMediumShipHold' | 'SpecializedMineralHold' | 'SpecializedOreHold' | 'SpecializedPlanetaryCommoditiesHold' | 'SpecializedSalvageHold' | 'SpecializedShipHold' | 'SpecializedSmallShipHold' | 'StructureActive' | 'StructureFuel' | 'StructureInactive' | 'StructureOffline' | 'SubSystemBay' | 'SubSystemSlot0' | 'SubSystemSlot1' | 'SubSystemSlot2' | 'SubSystemSlot3' | 'SubSystemSlot4' | 'SubSystemSlot5' | 'SubSystemSlot6' | 'SubSystemSlot7' | 'Unlocked' | 'Wallet' | 'Wardrobe';\r\n location_id: number;\r\n location_type: 'station' | 'solar_system' | 'item' | 'other';\r\n quantity: number;\r\n type_id: number;\r\n}\r\n\r\nexport interface CorporationsCorporationIdAssetsLocationsPost {\r\n item_id: number;\r\n position: {\r\n x: number;\r\n y: number;\r\n z: number;\r\n };\r\n}\r\n\r\nexport interface CorporationsCorporationIdAssetsNamesPost {\r\n item_id: number;\r\n name: string;\r\n}\r\n\r\n// --- Calendar ---\r\n\r\nexport interface CharactersCharacterIdCalendarEventIdAttendeesGet {\r\n character_id?: number;\r\n event_response?: 'declined' | 'not_responded' | 'accepted' | 'tentative';\r\n}\r\n\r\nexport interface CharactersCharacterIdCalendarEventIdGet {\r\n date: string;\r\n duration: number;\r\n event_id: number;\r\n importance: number;\r\n owner_id: number;\r\n owner_name: string;\r\n owner_type: 'eve_server' | 'corporation' | 'faction' | 'character' | 'alliance';\r\n response: string;\r\n text: string;\r\n title: string;\r\n}\r\n\r\nexport interface CharactersCharacterIdCalendarGet {\r\n event_date?: string;\r\n event_id?: number;\r\n event_response?: 'declined' | 'not_responded' | 'accepted' | 'tentative';\r\n importance?: number;\r\n title?: string;\r\n}\r\n\r\n// --- Character ---\r\n\r\nexport interface CharactersAffiliationPost {\r\n alliance_id?: number;\r\n character_id: number;\r\n corporation_id: number;\r\n faction_id?: number;\r\n}\r\n\r\nexport interface CharactersCharacterIdAgentsResearchGet {\r\n agent_id: number;\r\n points_per_day: number;\r\n remainder_points: number;\r\n skill_type_id: number;\r\n started_at: string;\r\n}\r\n\r\nexport interface CharactersCharacterIdBlueprintsGet {\r\n item_id: number;\r\n location_flag: 'AutoFit' | 'Cargo' | 'CorpseBay' | 'DroneBay' | 'FleetHangar' | 'Deliveries' | 'HiddenModifiers' | 'Hangar' | 'HangarAll' | 'LoSlot0' | 'LoSlot1' | 'LoSlot2' | 'LoSlot3' | 'LoSlot4' | 'LoSlot5' | 'LoSlot6' | 'LoSlot7' | 'MedSlot0' | 'MedSlot1' | 'MedSlot2' | 'MedSlot3' | 'MedSlot4' | 'MedSlot5' | 'MedSlot6' | 'MedSlot7' | 'HiSlot0' | 'HiSlot1' | 'HiSlot2' | 'HiSlot3' | 'HiSlot4' | 'HiSlot5' | 'HiSlot6' | 'HiSlot7' | 'AssetSafety' | 'Locked' | 'Unlocked' | 'Implant' | 'QuafeBay' | 'RigSlot0' | 'RigSlot1' | 'RigSlot2' | 'RigSlot3' | 'RigSlot4' | 'RigSlot5' | 'RigSlot6' | 'RigSlot7' | 'ShipHangar' | 'SpecializedFuelBay' | 'SpecializedOreHold' | 'SpecializedGasHold' | 'SpecializedMineralHold' | 'SpecializedSalvageHold' | 'SpecializedShipHold' | 'SpecializedSmallShipHold' | 'SpecializedMediumShipHold' | 'SpecializedLargeShipHold' | 'SpecializedIndustrialShipHold' | 'SpecializedAmmoHold' | 'SpecializedCommandCenterHold' | 'SpecializedPlanetaryCommoditiesHold' | 'SpecializedMaterialBay' | 'SubSystemSlot0' | 'SubSystemSlot1' | 'SubSystemSlot2' | 'SubSystemSlot3' | 'SubSystemSlot4' | 'SubSystemSlot5' | 'SubSystemSlot6' | 'SubSystemSlot7' | 'FighterBay' | 'FighterTube0' | 'FighterTube1' | 'FighterTube2' | 'FighterTube3' | 'FighterTube4' | 'Module';\r\n location_id: number;\r\n material_efficiency: number;\r\n quantity: number;\r\n runs: number;\r\n time_efficiency: number;\r\n type_id: number;\r\n}\r\n\r\nexport interface CharactersCharacterIdCorporationhistoryGet {\r\n corporation_id: number;\r\n is_deleted?: boolean;\r\n record_id: number;\r\n start_date: string;\r\n}\r\n\r\nexport interface CharactersCharacterIdFatigueGet {\r\n jump_fatigue_expire_date?: string;\r\n last_jump_date?: string;\r\n last_update_date?: string;\r\n}\r\n\r\nexport interface CharactersCharacterIdMedalsGet {\r\n corporation_id: number;\r\n date: string;\r\n description: string;\r\n graphics: ({\r\n color?: number;\r\n graphic: string;\r\n layer: number;\r\n part: number;\r\n })[];\r\n issuer_id: number;\r\n medal_id: number;\r\n reason: string;\r\n status: 'public' | 'private';\r\n title: string;\r\n}\r\n\r\nexport interface CharactersCharacterIdNotificationsContactsGet {\r\n message: string;\r\n notification_id: number;\r\n send_date: string;\r\n sender_character_id: number;\r\n standing_level: number;\r\n}\r\n\r\nexport interface CharactersCharacterIdNotificationsGet {\r\n is_read?: boolean;\r\n notification_id: number;\r\n sender_id: number;\r\n sender_type: 'character' | 'corporation' | 'alliance' | 'faction' | 'other';\r\n text?: string;\r\n timestamp: string;\r\n type: 'AcceptedAlly' | 'AcceptedSurrender' | 'AgentRetiredTrigravian' | 'AllAnchoringMsg' | 'AllMaintenanceBillMsg' | 'AllStrucInvulnerableMsg' | 'AllStructVulnerableMsg' | 'AllWarCorpJoinedAllianceMsg' | 'AllWarDeclaredMsg' | 'AllWarInvalidatedMsg' | 'AllWarRetractedMsg' | 'AllWarSurrenderMsg' | 'AllianceCapitalChanged' | 'AllianceWarDeclaredV2' | 'AllyContractCancelled' | 'AllyJoinedWarAggressorMsg' | 'AllyJoinedWarAllyMsg' | 'AllyJoinedWarDefenderMsg' | 'BattlePunishFriendlyFire' | 'BillOutOfMoneyMsg' | 'BillPaidCorpAllMsg' | 'BountyClaimMsg' | 'BountyESSShared' | 'BountyESSTaken' | 'BountyPlacedAlliance' | 'BountyPlacedChar' | 'BountyPlacedCorp' | 'BountyYourBountyClaimed' | 'BuddyConnectContactAdd' | 'CharAppAcceptMsg' | 'CharAppRejectMsg' | 'CharAppWithdrawMsg' | 'CharLeftCorpMsg' | 'CharMedalMsg' | 'CharTerminationMsg' | 'CloneActivationMsg' | 'CloneActivationMsg2' | 'CloneMovedMsg' | 'CloneRevokedMsg1' | 'CloneRevokedMsg2' | 'CombatOperationFinished' | 'ContactAdd' | 'ContactEdit' | 'ContainerPasswordMsg' | 'ContractRegionChangedToPochven' | 'CorpAllBillMsg' | 'CorpAppAcceptMsg' | 'CorpAppInvitedMsg' | 'CorpAppNewMsg' | 'CorpAppRejectCustomMsg' | 'CorpAppRejectMsg' | 'CorpBecameWarEligible' | 'CorpDividendMsg' | 'CorpFriendlyFireDisableTimerCompleted' | 'CorpFriendlyFireDisableTimerStarted' | 'CorpFriendlyFireEnableTimerCompleted' | 'CorpFriendlyFireEnableTimerStarted' | 'CorpKicked' | 'CorpLiquidationMsg' | 'CorpNewCEOMsg' | 'CorpNewsMsg' | 'CorpNoLongerWarEligible' | 'CorpOfficeExpirationMsg' | 'CorpStructLostMsg' | 'CorpTaxChangeMsg' | 'CorpVoteCEORevokedMsg' | 'CorpVoteMsg' | 'CorpWarDeclaredMsg' | 'CorpWarDeclaredV2' | 'CorpWarFightingLegalMsg' | 'CorpWarInvalidatedMsg' | 'CorpWarRetractedMsg' | 'CorpWarSurrenderMsg' | 'CorporationGoalClosed' | 'CorporationGoalCompleted' | 'CorporationGoalCreated' | 'CorporationGoalExpired' | 'CorporationGoalLimitReached' | 'CorporationGoalNameChange' | 'CorporationLeft' | 'CustomsMsg' | 'DailyItemRewardAutoClaimed' | 'DeclareWar' | 'DistrictAttacked' | 'DustAppAcceptedMsg' | 'ESSMainBankLink' | 'EntosisCaptureStarted' | 'ExpertSystemExpired' | 'ExpertSystemExpiryImminent' | 'FWAllianceKickCeoIndividualStandingWarning' | 'FWAllianceKickMsg' | 'FWAllianceKickedCeoIndividualStanding' | 'FWAllianceWarningMsg' | 'FWCharKickMsg' | 'FWCharRankGainMsg' | 'FWCharRankLossMsg' | 'FWCharWarningMsg' | 'FWCharacterKickFromCorpIndividualStandingWarning' | 'FWCharacterKickedFromCorpIndividualStanding' | 'FWCorpJoinMsg' | 'FWCorpKickMsg' | 'FWCorpLeaveMsg' | 'FWCorpWarningMsg' | 'FWCorporationKickCeoIndividualStandingWarning' | 'FWCorporationKickedCeoIndividualStanding' | 'FacWarCorpJoinRequestMsg' | 'FacWarCorpJoinWithdrawMsg' | 'FacWarCorpLeaveRequestMsg' | 'FacWarCorpLeaveWithdrawMsg' | 'FacWarDirectEnlistmentRevoked' | 'FacWarLPDisqualifiedEvent' | 'FacWarLPDisqualifiedKill' | 'FacWarLPPayoutEvent' | 'FacWarLPPayoutKill' | 'FreelanceProjectACLDeleted' | 'FreelanceProjectClosed' | 'FreelanceProjectCompleted' | 'FreelanceProjectCreated' | 'FreelanceProjectExpired' | 'FreelanceProjectLimitReached' | 'FreelanceProjectParticipantKicked' | 'GameTimeAdded' | 'GameTimeReceived' | 'GameTimeSent' | 'GiftReceived' | 'IHubDestroyedByBillFailure' | 'IncursionCompletedMsg' | 'IndustryOperationFinished' | 'IndustryTeamAuctionLost' | 'IndustryTeamAuctionWon' | 'InfrastructureHubBillAboutToExpire' | 'InsuranceExpirationMsg' | 'InsuranceFirstShipMsg' | 'InsuranceInvalidatedMsg' | 'InsuranceIssuedMsg' | 'InsurancePayoutMsg' | 'InvasionCompletedMsg' | 'InvasionSystemLogin' | 'InvasionSystemStart' | 'JumpCloneDeletedMsg1' | 'JumpCloneDeletedMsg2' | 'KillReportFinalBlow' | 'KillReportVictim' | 'KillRightAvailable' | 'KillRightAvailableOpen' | 'KillRightEarned' | 'KillRightUnavailable' | 'KillRightUnavailableOpen' | 'KillRightUsed' | 'LPAutoRedeemed' | 'LocateCharMsg' | 'MadeWarMutual' | 'MercOfferRetractedMsg' | 'MercOfferedNegotiationMsg' | 'MercenaryDenAttacked' | 'MercenaryDenNewMTO' | 'MercenaryDenReinforced' | 'MissionCanceledTriglavian' | 'MissionOfferExpirationMsg' | 'MissionTimeoutMsg' | 'MoonminingAutomaticFracture' | 'MoonminingExtractionCancelled' | 'MoonminingExtractionFinished' | 'MoonminingExtractionStarted' | 'MoonminingLaserFired' | 'MutualWarExpired' | 'MutualWarInviteAccepted' | 'MutualWarInviteRejected' | 'MutualWarInviteSent' | 'NPCStandingsGained' | 'NPCStandingsLost' | 'OfferToAllyRetracted' | 'OfferedSurrender' | 'OfferedToAlly' | 'OfficeLeaseCanceledInsufficientStandings' | 'OldLscMessages' | 'OperationFinished' | 'OrbitalAttacked' | 'OrbitalReinforced' | 'OwnershipTransferred' | 'RaffleCreated' | 'RaffleExpired' | 'RaffleFinished' | 'ReimbursementMsg' | 'ResearchMissionAvailableMsg' | 'RetractsWar' | 'SPAutoRedeemed' | 'SeasonalChallengeCompleted' | 'SkinSequencingCompleted' | 'SkyhookDeployed' | 'SkyhookDestroyed' | 'SkyhookLostShields' | 'SkyhookOnline' | 'SkyhookUnderAttack' | 'SovAllClaimAquiredMsg' | 'SovAllClaimLostMsg' | 'SovCommandNodeEventStarted' | 'SovCorpBillLateMsg' | 'SovCorpClaimFailMsg' | 'SovDisruptorMsg' | 'SovStationEnteredFreeport' | 'SovStructureDestroyed' | 'SovStructureReinforced' | 'SovStructureSelfDestructCancel' | 'SovStructureSelfDestructFinished' | 'SovStructureSelfDestructRequested' | 'SovereigntyIHDamageMsg' | 'SovereigntySBUDamageMsg' | 'SovereigntyTCUDamageMsg' | 'StationAggressionMsg1' | 'StationAggressionMsg2' | 'StationConquerMsg' | 'StationServiceDisabled' | 'StationServiceEnabled' | 'StationStateChangeMsg' | 'StoryLineMissionAvailableMsg' | 'StructureAnchoring' | 'StructureCourierContractChanged' | 'StructureDestroyed' | 'StructureFuelAlert' | 'StructureImpendingAbandonmentAssetsAtRisk' | 'StructureItemsDelivered' | 'StructureItemsMovedToSafety' | 'StructureLostArmor' | 'StructureLostShields' | 'StructureLowReagentsAlert' | 'StructureNoReagentsAlert' | 'StructureOnline' | 'StructurePaintPurchased' | 'StructureServicesOffline' | 'StructureUnanchoring' | 'StructureUnderAttack' | 'StructureWentHighPower' | 'StructureWentLowPower' | 'StructuresJobsCancelled' | 'StructuresJobsPaused' | 'StructuresReinforcementChanged' | 'TowerAlertMsg' | 'TowerResourceAlertMsg' | 'TransactionReversalMsg' | 'TutorialMsg' | 'WarAdopted ' | 'WarAllyInherited' | 'WarAllyOfferDeclinedMsg' | 'WarConcordInvalidates' | 'WarDeclared' | 'WarEndedHqSecurityDrop' | 'WarHQRemovedFromSpace' | 'WarInherited' | 'WarInvalid' | 'WarRetracted' | 'WarRetractedByConcord' | 'WarSurrenderDeclinedMsg' | 'WarSurrenderOfferMsg';\r\n}\r\n\r\nexport interface CharactersCharacterIdPortraitGet {\r\n px128x128?: string;\r\n px256x256?: string;\r\n px512x512?: string;\r\n px64x64?: string;\r\n}\r\n\r\nexport interface CharactersCharacterIdRolesGet {\r\n roles?: 'Account_Take_1' | 'Account_Take_2' | 'Account_Take_3' | 'Account_Take_4' | 'Account_Take_5' | 'Account_Take_6' | 'Account_Take_7' | 'Accountant' | 'Auditor' | 'Brand_Manager' | 'Communications_Officer' | 'Config_Equipment' | 'Config_Starbase_Equipment' | 'Container_Take_1' | 'Container_Take_2' | 'Container_Take_3' | 'Container_Take_4' | 'Container_Take_5' | 'Container_Take_6' | 'Container_Take_7' | 'Contract_Manager' | 'Deliveries_Container_Take' | 'Deliveries_Query' | 'Deliveries_Take' | 'Diplomat' | 'Director' | 'Factory_Manager' | 'Fitting_Manager' | 'Hangar_Query_1' | 'Hangar_Query_2' | 'Hangar_Query_3' | 'Hangar_Query_4' | 'Hangar_Query_5' | 'Hangar_Query_6' | 'Hangar_Query_7' | 'Hangar_Take_1' | 'Hangar_Take_2' | 'Hangar_Take_3' | 'Hangar_Take_4' | 'Hangar_Take_5' | 'Hangar_Take_6' | 'Hangar_Take_7' | 'Junior_Accountant' | 'Personnel_Manager' | 'Project_Manager' | 'Rent_Factory_Facility' | 'Rent_Office' | 'Rent_Research_Facility' | 'Security_Officer' | 'Skill_Plan_Manager' | 'Starbase_Defense_Operator' | 'Starbase_Fuel_Technician' | 'Station_Manager' | 'Trader'[];\r\n roles_at_base?: 'Account_Take_1' | 'Account_Take_2' | 'Account_Take_3' | 'Account_Take_4' | 'Account_Take_5' | 'Account_Take_6' | 'Account_Take_7' | 'Accountant' | 'Auditor' | 'Brand_Manager' | 'Communications_Officer' | 'Config_Equipment' | 'Config_Starbase_Equipment' | 'Container_Take_1' | 'Container_Take_2' | 'Container_Take_3' | 'Container_Take_4' | 'Container_Take_5' | 'Container_Take_6' | 'Container_Take_7' | 'Contract_Manager' | 'Deliveries_Container_Take' | 'Deliveries_Query' | 'Deliveries_Take' | 'Diplomat' | 'Director' | 'Factory_Manager' | 'Fitting_Manager' | 'Hangar_Query_1' | 'Hangar_Query_2' | 'Hangar_Query_3' | 'Hangar_Query_4' | 'Hangar_Query_5' | 'Hangar_Query_6' | 'Hangar_Query_7' | 'Hangar_Take_1' | 'Hangar_Take_2' | 'Hangar_Take_3' | 'Hangar_Take_4' | 'Hangar_Take_5' | 'Hangar_Take_6' | 'Hangar_Take_7' | 'Junior_Accountant' | 'Personnel_Manager' | 'Project_Manager' | 'Rent_Factory_Facility' | 'Rent_Office' | 'Rent_Research_Facility' | 'Security_Officer' | 'Skill_Plan_Manager' | 'Starbase_Defense_Operator' | 'Starbase_Fuel_Technician' | 'Station_Manager' | 'Trader'[];\r\n roles_at_hq?: 'Account_Take_1' | 'Account_Take_2' | 'Account_Take_3' | 'Account_Take_4' | 'Account_Take_5' | 'Account_Take_6' | 'Account_Take_7' | 'Accountant' | 'Auditor' | 'Brand_Manager' | 'Communications_Officer' | 'Config_Equipment' | 'Config_Starbase_Equipment' | 'Container_Take_1' | 'Container_Take_2' | 'Container_Take_3' | 'Container_Take_4' | 'Container_Take_5' | 'Container_Take_6' | 'Container_Take_7' | 'Contract_Manager' | 'Deliveries_Container_Take' | 'Deliveries_Query' | 'Deliveries_Take' | 'Diplomat' | 'Director' | 'Factory_Manager' | 'Fitting_Manager' | 'Hangar_Query_1' | 'Hangar_Query_2' | 'Hangar_Query_3' | 'Hangar_Query_4' | 'Hangar_Query_5' | 'Hangar_Query_6' | 'Hangar_Query_7' | 'Hangar_Take_1' | 'Hangar_Take_2' | 'Hangar_Take_3' | 'Hangar_Take_4' | 'Hangar_Take_5' | 'Hangar_Take_6' | 'Hangar_Take_7' | 'Junior_Accountant' | 'Personnel_Manager' | 'Project_Manager' | 'Rent_Factory_Facility' | 'Rent_Office' | 'Rent_Research_Facility' | 'Security_Officer' | 'Skill_Plan_Manager' | 'Starbase_Defense_Operator' | 'Starbase_Fuel_Technician' | 'Station_Manager' | 'Trader'[];\r\n roles_at_other?: 'Account_Take_1' | 'Account_Take_2' | 'Account_Take_3' | 'Account_Take_4' | 'Account_Take_5' | 'Account_Take_6' | 'Account_Take_7' | 'Accountant' | 'Auditor' | 'Brand_Manager' | 'Communications_Officer' | 'Config_Equipment' | 'Config_Starbase_Equipment' | 'Container_Take_1' | 'Container_Take_2' | 'Container_Take_3' | 'Container_Take_4' | 'Container_Take_5' | 'Container_Take_6' | 'Container_Take_7' | 'Contract_Manager' | 'Deliveries_Container_Take' | 'Deliveries_Query' | 'Deliveries_Take' | 'Diplomat' | 'Director' | 'Factory_Manager' | 'Fitting_Manager' | 'Hangar_Query_1' | 'Hangar_Query_2' | 'Hangar_Query_3' | 'Hangar_Query_4' | 'Hangar_Query_5' | 'Hangar_Query_6' | 'Hangar_Query_7' | 'Hangar_Take_1' | 'Hangar_Take_2' | 'Hangar_Take_3' | 'Hangar_Take_4' | 'Hangar_Take_5' | 'Hangar_Take_6' | 'Hangar_Take_7' | 'Junior_Accountant' | 'Personnel_Manager' | 'Project_Manager' | 'Rent_Factory_Facility' | 'Rent_Office' | 'Rent_Research_Facility' | 'Security_Officer' | 'Skill_Plan_Manager' | 'Starbase_Defense_Operator' | 'Starbase_Fuel_Technician' | 'Station_Manager' | 'Trader'[];\r\n}\r\n\r\nexport interface CharactersCharacterIdStandingsGet {\r\n from_id: number;\r\n from_type: 'agent' | 'npc_corp' | 'faction';\r\n standing: number;\r\n}\r\n\r\nexport interface CharactersCharacterIdTitlesGet {\r\n name?: string;\r\n title_id?: number;\r\n}\r\n\r\nexport interface CharactersDetail {\r\n alliance_id?: number;\r\n birthday: string;\r\n bloodline_id: number;\r\n corporation_id: number;\r\n description?: string;\r\n faction_id?: number;\r\n gender: 'male' | 'female';\r\n name: string;\r\n race_id: number;\r\n security_status?: number;\r\n title?: string;\r\n}\r\n\r\n// --- Clones ---\r\n\r\nexport interface CharactersCharacterIdClonesGet {\r\n home_location?: {\r\n location_id?: number;\r\n location_type?: 'station' | 'structure';\r\n };\r\n jump_clones: ({\r\n implants: number[];\r\n jump_clone_id: number;\r\n location_id: number;\r\n location_type: 'station' | 'structure';\r\n name?: string;\r\n })[];\r\n last_clone_jump_date?: string;\r\n last_station_change_date?: string;\r\n}\r\n\r\n// --- Contacts ---\r\n\r\nexport interface AlliancesAllianceIdContactsGet {\r\n contact_id: number;\r\n contact_type: 'character' | 'corporation' | 'alliance' | 'faction';\r\n label_ids?: number[];\r\n standing: number;\r\n}\r\n\r\nexport interface AlliancesAllianceIdContactsLabelsGet {\r\n label_id: number;\r\n label_name: string;\r\n}\r\n\r\nexport interface CharactersCharacterIdContactsGet {\r\n contact_id: number;\r\n contact_type: 'character' | 'corporation' | 'alliance' | 'faction';\r\n is_blocked?: boolean;\r\n is_watched?: boolean;\r\n label_ids?: number[];\r\n standing: number;\r\n}\r\n\r\nexport interface CharactersCharacterIdContactsLabelsGet {\r\n label_id: number;\r\n label_name: string;\r\n}\r\n\r\nexport interface CorporationsCorporationIdContactsGet {\r\n contact_id: number;\r\n contact_type: 'character' | 'corporation' | 'alliance' | 'faction';\r\n is_watched?: boolean;\r\n label_ids?: number[];\r\n standing: number;\r\n}\r\n\r\nexport interface CorporationsCorporationIdContactsLabelsGet {\r\n label_id: number;\r\n label_name: string;\r\n}\r\n\r\n// --- Contracts ---\r\n\r\nexport interface CharactersCharacterIdContractsContractIdBidsGet {\r\n amount: number;\r\n bid_id: number;\r\n bidder_id: number;\r\n date_bid: string;\r\n}\r\n\r\nexport interface CharactersCharacterIdContractsContractIdItemsGet {\r\n is_included: boolean;\r\n is_singleton: boolean;\r\n quantity: number;\r\n raw_quantity?: number;\r\n record_id: number;\r\n type_id: number;\r\n}\r\n\r\nexport interface CharactersCharacterIdContractsGet {\r\n acceptor_id: number;\r\n assignee_id: number;\r\n availability: 'public' | 'personal' | 'corporation' | 'alliance';\r\n buyout?: number;\r\n collateral?: number;\r\n contract_id: number;\r\n date_accepted?: string;\r\n date_completed?: string;\r\n date_expired: string;\r\n date_issued: string;\r\n days_to_complete?: number;\r\n end_location_id?: number;\r\n for_corporation: boolean;\r\n issuer_corporation_id: number;\r\n issuer_id: number;\r\n price?: number;\r\n reward?: number;\r\n start_location_id?: number;\r\n status: 'outstanding' | 'in_progress' | 'finished_issuer' | 'finished_contractor' | 'finished' | 'cancelled' | 'rejected' | 'failed' | 'deleted' | 'reversed';\r\n title?: string;\r\n type: 'unknown' | 'item_exchange' | 'auction' | 'courier' | 'loan';\r\n volume?: number;\r\n}\r\n\r\nexport interface ContractsPublicBidsContractIdGet {\r\n amount: number;\r\n bid_id: number;\r\n date_bid: string;\r\n}\r\n\r\nexport interface ContractsPublicItemsContractIdGet {\r\n is_blueprint_copy?: boolean;\r\n is_included: boolean;\r\n item_id?: number;\r\n material_efficiency?: number;\r\n quantity: number;\r\n record_id: number;\r\n runs?: number;\r\n time_efficiency?: number;\r\n type_id: number;\r\n}\r\n\r\nexport interface ContractsPublicRegionIdGet {\r\n buyout?: number;\r\n collateral?: number;\r\n contract_id: number;\r\n date_expired: string;\r\n date_issued: string;\r\n days_to_complete?: number;\r\n end_location_id?: number;\r\n for_corporation?: boolean;\r\n issuer_corporation_id: number;\r\n issuer_id: number;\r\n price?: number;\r\n reward?: number;\r\n start_location_id?: number;\r\n title?: string;\r\n type: 'unknown' | 'item_exchange' | 'auction' | 'courier' | 'loan';\r\n volume?: number;\r\n}\r\n\r\nexport interface CorporationsCorporationIdContractsContractIdBidsGet {\r\n amount: number;\r\n bid_id: number;\r\n bidder_id: number;\r\n date_bid: string;\r\n}\r\n\r\nexport interface CorporationsCorporationIdContractsContractIdItemsGet {\r\n is_included: boolean;\r\n is_singleton: boolean;\r\n quantity: number;\r\n raw_quantity?: number;\r\n record_id: number;\r\n type_id: number;\r\n}\r\n\r\nexport interface CorporationsCorporationIdContractsGet {\r\n acceptor_id: number;\r\n assignee_id: number;\r\n availability: 'public' | 'personal' | 'corporation' | 'alliance';\r\n buyout?: number;\r\n collateral?: number;\r\n contract_id: number;\r\n date_accepted?: string;\r\n date_completed?: string;\r\n date_expired: string;\r\n date_issued: string;\r\n days_to_complete?: number;\r\n end_location_id?: number;\r\n for_corporation: boolean;\r\n issuer_corporation_id: number;\r\n issuer_id: number;\r\n price?: number;\r\n reward?: number;\r\n start_location_id?: number;\r\n status: 'outstanding' | 'in_progress' | 'finished_issuer' | 'finished_contractor' | 'finished' | 'cancelled' | 'rejected' | 'failed' | 'deleted' | 'reversed';\r\n title?: string;\r\n type: 'unknown' | 'item_exchange' | 'auction' | 'courier' | 'loan';\r\n volume?: number;\r\n}\r\n\r\n// --- Corporation ---\r\n\r\nexport interface CorporationsCorporationIdAlliancehistoryGet {\r\n alliance_id?: number;\r\n is_deleted?: boolean;\r\n record_id: number;\r\n start_date: string;\r\n}\r\n\r\nexport interface CorporationsCorporationIdBlueprintsGet {\r\n item_id: number;\r\n location_flag: 'AssetSafety' | 'AutoFit' | 'Bonus' | 'Booster' | 'BoosterBay' | 'Capsule' | 'CapsuleerDeliveries' | 'Cargo' | 'CorpDeliveries' | 'CorpSAG1' | 'CorpSAG2' | 'CorpSAG3' | 'CorpSAG4' | 'CorpSAG5' | 'CorpSAG6' | 'CorpSAG7' | 'CorporationGoalDeliveries' | 'CrateLoot' | 'Deliveries' | 'DroneBay' | 'DustBattle' | 'DustDatabank' | 'ExpeditionHold' | 'FighterBay' | 'FighterTube0' | 'FighterTube1' | 'FighterTube2' | 'FighterTube3' | 'FighterTube4' | 'FleetHangar' | 'FrigateEscapeBay' | 'Hangar' | 'HangarAll' | 'HiSlot0' | 'HiSlot1' | 'HiSlot2' | 'HiSlot3' | 'HiSlot4' | 'HiSlot5' | 'HiSlot6' | 'HiSlot7' | 'HiddenModifiers' | 'Implant' | 'Impounded' | 'InfrastructureHangar' | 'JunkyardReprocessed' | 'JunkyardTrashed' | 'LoSlot0' | 'LoSlot1' | 'LoSlot2' | 'LoSlot3' | 'LoSlot4' | 'LoSlot5' | 'LoSlot6' | 'LoSlot7' | 'Locked' | 'MedSlot0' | 'MedSlot1' | 'MedSlot2' | 'MedSlot3' | 'MedSlot4' | 'MedSlot5' | 'MedSlot6' | 'MedSlot7' | 'MobileDepotHold' | 'MoonMaterialBay' | 'OfficeFolder' | 'Pilot' | 'PlanetSurface' | 'QuafeBay' | 'QuantumCoreRoom' | 'Reward' | 'RigSlot0' | 'RigSlot1' | 'RigSlot2' | 'RigSlot3' | 'RigSlot4' | 'RigSlot5' | 'RigSlot6' | 'RigSlot7' | 'SecondaryStorage' | 'ServiceSlot0' | 'ServiceSlot1' | 'ServiceSlot2' | 'ServiceSlot3' | 'ServiceSlot4' | 'ServiceSlot5' | 'ServiceSlot6' | 'ServiceSlot7' | 'ShipHangar' | 'ShipOffline' | 'Skill' | 'SkillInTraining' | 'SpecializedAmmoHold' | 'SpecializedAsteroidHold' | 'SpecializedCommandCenterHold' | 'SpecializedFuelBay' | 'SpecializedGasHold' | 'SpecializedIceHold' | 'SpecializedIndustrialShipHold' | 'SpecializedLargeShipHold' | 'SpecializedMaterialBay' | 'SpecializedMediumShipHold' | 'SpecializedMineralHold' | 'SpecializedOreHold' | 'SpecializedPlanetaryCommoditiesHold' | 'SpecializedSalvageHold' | 'SpecializedShipHold' | 'SpecializedSmallShipHold' | 'StructureActive' | 'StructureFuel' | 'StructureInactive' | 'StructureOffline' | 'SubSystemBay' | 'SubSystemSlot0' | 'SubSystemSlot1' | 'SubSystemSlot2' | 'SubSystemSlot3' | 'SubSystemSlot4' | 'SubSystemSlot5' | 'SubSystemSlot6' | 'SubSystemSlot7' | 'Unlocked' | 'Wallet' | 'Wardrobe';\r\n location_id: number;\r\n material_efficiency: number;\r\n quantity: number;\r\n runs: number;\r\n time_efficiency: number;\r\n type_id: number;\r\n}\r\n\r\nexport interface CorporationsCorporationIdContainersLogsGet {\r\n action: 'add' | 'assemble' | 'configure' | 'enter_password' | 'lock' | 'move' | 'repackage' | 'set_name' | 'set_password' | 'unlock';\r\n character_id: number;\r\n container_id: number;\r\n container_type_id: number;\r\n location_flag: 'AssetSafety' | 'AutoFit' | 'Bonus' | 'Booster' | 'BoosterBay' | 'Capsule' | 'CapsuleerDeliveries' | 'Cargo' | 'CorpDeliveries' | 'CorpSAG1' | 'CorpSAG2' | 'CorpSAG3' | 'CorpSAG4' | 'CorpSAG5' | 'CorpSAG6' | 'CorpSAG7' | 'CorporationGoalDeliveries' | 'CrateLoot' | 'Deliveries' | 'DroneBay' | 'DustBattle' | 'DustDatabank' | 'ExpeditionHold' | 'FighterBay' | 'FighterTube0' | 'FighterTube1' | 'FighterTube2' | 'FighterTube3' | 'FighterTube4' | 'FleetHangar' | 'FrigateEscapeBay' | 'Hangar' | 'HangarAll' | 'HiSlot0' | 'HiSlot1' | 'HiSlot2' | 'HiSlot3' | 'HiSlot4' | 'HiSlot5' | 'HiSlot6' | 'HiSlot7' | 'HiddenModifiers' | 'Implant' | 'Impounded' | 'InfrastructureHangar' | 'JunkyardReprocessed' | 'JunkyardTrashed' | 'LoSlot0' | 'LoSlot1' | 'LoSlot2' | 'LoSlot3' | 'LoSlot4' | 'LoSlot5' | 'LoSlot6' | 'LoSlot7' | 'Locked' | 'MedSlot0' | 'MedSlot1' | 'MedSlot2' | 'MedSlot3' | 'MedSlot4' | 'MedSlot5' | 'MedSlot6' | 'MedSlot7' | 'MobileDepotHold' | 'MoonMaterialBay' | 'OfficeFolder' | 'Pilot' | 'PlanetSurface' | 'QuafeBay' | 'QuantumCoreRoom' | 'Reward' | 'RigSlot0' | 'RigSlot1' | 'RigSlot2' | 'RigSlot3' | 'RigSlot4' | 'RigSlot5' | 'RigSlot6' | 'RigSlot7' | 'SecondaryStorage' | 'ServiceSlot0' | 'ServiceSlot1' | 'ServiceSlot2' | 'ServiceSlot3' | 'ServiceSlot4' | 'ServiceSlot5' | 'ServiceSlot6' | 'ServiceSlot7' | 'ShipHangar' | 'ShipOffline' | 'Skill' | 'SkillInTraining' | 'SpecializedAmmoHold' | 'SpecializedAsteroidHold' | 'SpecializedCommandCenterHold' | 'SpecializedFuelBay' | 'SpecializedGasHold' | 'SpecializedIceHold' | 'SpecializedIndustrialShipHold' | 'SpecializedLargeShipHold' | 'SpecializedMaterialBay' | 'SpecializedMediumShipHold' | 'SpecializedMineralHold' | 'SpecializedOreHold' | 'SpecializedPlanetaryCommoditiesHold' | 'SpecializedSalvageHold' | 'SpecializedShipHold' | 'SpecializedSmallShipHold' | 'StructureActive' | 'StructureFuel' | 'StructureInactive' | 'StructureOffline' | 'SubSystemBay' | 'SubSystemSlot0' | 'SubSystemSlot1' | 'SubSystemSlot2' | 'SubSystemSlot3' | 'SubSystemSlot4' | 'SubSystemSlot5' | 'SubSystemSlot6' | 'SubSystemSlot7' | 'Unlocked' | 'Wallet' | 'Wardrobe';\r\n location_id: number;\r\n logged_at: string;\r\n new_config_bitmask?: number;\r\n old_config_bitmask?: number;\r\n password_type?: 'config' | 'general';\r\n quantity?: number;\r\n type_id?: number;\r\n}\r\n\r\nexport interface CorporationsCorporationIdDivisionsGet {\r\n hangar?: ({\r\n division?: number;\r\n name?: string;\r\n })[];\r\n wallet?: ({\r\n division?: number;\r\n name?: string;\r\n })[];\r\n}\r\n\r\nexport interface CorporationsCorporationIdFacilitiesGet {\r\n facility_id: number;\r\n system_id: number;\r\n type_id: number;\r\n}\r\n\r\nexport interface CorporationsCorporationIdIconsGet {\r\n px128x128?: string;\r\n px256x256?: string;\r\n px64x64?: string;\r\n}\r\n\r\nexport interface CorporationsCorporationIdMedalsGet {\r\n created_at: string;\r\n creator_id: number;\r\n description: string;\r\n medal_id: number;\r\n title: string;\r\n}\r\n\r\nexport interface CorporationsCorporationIdMedalsIssuedGet {\r\n character_id: number;\r\n issued_at: string;\r\n issuer_id: number;\r\n medal_id: number;\r\n reason: string;\r\n status: 'private' | 'public';\r\n}\r\n\r\nexport interface CorporationsCorporationIdMembersTitlesGet {\r\n character_id: number;\r\n titles: number[];\r\n}\r\n\r\nexport interface CorporationsCorporationIdMembertrackingGet {\r\n base_id?: number;\r\n character_id: number;\r\n location_id?: number;\r\n logoff_date?: string;\r\n logon_date?: string;\r\n ship_type_id?: number;\r\n start_date?: string;\r\n}\r\n\r\nexport interface CorporationsCorporationIdRolesGet {\r\n character_id: number;\r\n grantable_roles?: 'Account_Take_1' | 'Account_Take_2' | 'Account_Take_3' | 'Account_Take_4' | 'Account_Take_5' | 'Account_Take_6' | 'Account_Take_7' | 'Accountant' | 'Auditor' | 'Brand_Manager' | 'Communications_Officer' | 'Config_Equipment' | 'Config_Starbase_Equipment' | 'Container_Take_1' | 'Container_Take_2' | 'Container_Take_3' | 'Container_Take_4' | 'Container_Take_5' | 'Container_Take_6' | 'Container_Take_7' | 'Contract_Manager' | 'Deliveries_Container_Take' | 'Deliveries_Query' | 'Deliveries_Take' | 'Diplomat' | 'Director' | 'Factory_Manager' | 'Fitting_Manager' | 'Hangar_Query_1' | 'Hangar_Query_2' | 'Hangar_Query_3' | 'Hangar_Query_4' | 'Hangar_Query_5' | 'Hangar_Query_6' | 'Hangar_Query_7' | 'Hangar_Take_1' | 'Hangar_Take_2' | 'Hangar_Take_3' | 'Hangar_Take_4' | 'Hangar_Take_5' | 'Hangar_Take_6' | 'Hangar_Take_7' | 'Junior_Accountant' | 'Personnel_Manager' | 'Project_Manager' | 'Rent_Factory_Facility' | 'Rent_Office' | 'Rent_Research_Facility' | 'Security_Officer' | 'Skill_Plan_Manager' | 'Starbase_Defense_Operator' | 'Starbase_Fuel_Technician' | 'Station_Manager' | 'Trader'[];\r\n grantable_roles_at_base?: 'Account_Take_1' | 'Account_Take_2' | 'Account_Take_3' | 'Account_Take_4' | 'Account_Take_5' | 'Account_Take_6' | 'Account_Take_7' | 'Accountant' | 'Auditor' | 'Brand_Manager' | 'Communications_Officer' | 'Config_Equipment' | 'Config_Starbase_Equipment' | 'Container_Take_1' | 'Container_Take_2' | 'Container_Take_3' | 'Container_Take_4' | 'Container_Take_5' | 'Container_Take_6' | 'Container_Take_7' | 'Contract_Manager' | 'Deliveries_Container_Take' | 'Deliveries_Query' | 'Deliveries_Take' | 'Diplomat' | 'Director' | 'Factory_Manager' | 'Fitting_Manager' | 'Hangar_Query_1' | 'Hangar_Query_2' | 'Hangar_Query_3' | 'Hangar_Query_4' | 'Hangar_Query_5' | 'Hangar_Query_6' | 'Hangar_Query_7' | 'Hangar_Take_1' | 'Hangar_Take_2' | 'Hangar_Take_3' | 'Hangar_Take_4' | 'Hangar_Take_5' | 'Hangar_Take_6' | 'Hangar_Take_7' | 'Junior_Accountant' | 'Personnel_Manager' | 'Project_Manager' | 'Rent_Factory_Facility' | 'Rent_Office' | 'Rent_Research_Facility' | 'Security_Officer' | 'Skill_Plan_Manager' | 'Starbase_Defense_Operator' | 'Starbase_Fuel_Technician' | 'Station_Manager' | 'Trader'[];\r\n grantable_roles_at_hq?: 'Account_Take_1' | 'Account_Take_2' | 'Account_Take_3' | 'Account_Take_4' | 'Account_Take_5' | 'Account_Take_6' | 'Account_Take_7' | 'Accountant' | 'Auditor' | 'Brand_Manager' | 'Communications_Officer' | 'Config_Equipment' | 'Config_Starbase_Equipment' | 'Container_Take_1' | 'Container_Take_2' | 'Container_Take_3' | 'Container_Take_4' | 'Container_Take_5' | 'Container_Take_6' | 'Container_Take_7' | 'Contract_Manager' | 'Deliveries_Container_Take' | 'Deliveries_Query' | 'Deliveries_Take' | 'Diplomat' | 'Director' | 'Factory_Manager' | 'Fitting_Manager' | 'Hangar_Query_1' | 'Hangar_Query_2' | 'Hangar_Query_3' | 'Hangar_Query_4' | 'Hangar_Query_5' | 'Hangar_Query_6' | 'Hangar_Query_7' | 'Hangar_Take_1' | 'Hangar_Take_2' | 'Hangar_Take_3' | 'Hangar_Take_4' | 'Hangar_Take_5' | 'Hangar_Take_6' | 'Hangar_Take_7' | 'Junior_Accountant' | 'Personnel_Manager' | 'Project_Manager' | 'Rent_Factory_Facility' | 'Rent_Office' | 'Rent_Research_Facility' | 'Security_Officer' | 'Skill_Plan_Manager' | 'Starbase_Defense_Operator' | 'Starbase_Fuel_Technician' | 'Station_Manager' | 'Trader'[];\r\n grantable_roles_at_other?: 'Account_Take_1' | 'Account_Take_2' | 'Account_Take_3' | 'Account_Take_4' | 'Account_Take_5' | 'Account_Take_6' | 'Account_Take_7' | 'Accountant' | 'Auditor' | 'Brand_Manager' | 'Communications_Officer' | 'Config_Equipment' | 'Config_Starbase_Equipment' | 'Container_Take_1' | 'Container_Take_2' | 'Container_Take_3' | 'Container_Take_4' | 'Container_Take_5' | 'Container_Take_6' | 'Container_Take_7' | 'Contract_Manager' | 'Deliveries_Container_Take' | 'Deliveries_Query' | 'Deliveries_Take' | 'Diplomat' | 'Director' | 'Factory_Manager' | 'Fitting_Manager' | 'Hangar_Query_1' | 'Hangar_Query_2' | 'Hangar_Query_3' | 'Hangar_Query_4' | 'Hangar_Query_5' | 'Hangar_Query_6' | 'Hangar_Query_7' | 'Hangar_Take_1' | 'Hangar_Take_2' | 'Hangar_Take_3' | 'Hangar_Take_4' | 'Hangar_Take_5' | 'Hangar_Take_6' | 'Hangar_Take_7' | 'Junior_Accountant' | 'Personnel_Manager' | 'Project_Manager' | 'Rent_Factory_Facility' | 'Rent_Office' | 'Rent_Research_Facility' | 'Security_Officer' | 'Skill_Plan_Manager' | 'Starbase_Defense_Operator' | 'Starbase_Fuel_Technician' | 'Station_Manager' | 'Trader'[];\r\n roles?: 'Account_Take_1' | 'Account_Take_2' | 'Account_Take_3' | 'Account_Take_4' | 'Account_Take_5' | 'Account_Take_6' | 'Account_Take_7' | 'Accountant' | 'Auditor' | 'Brand_Manager' | 'Communications_Officer' | 'Config_Equipment' | 'Config_Starbase_Equipment' | 'Container_Take_1' | 'Container_Take_2' | 'Container_Take_3' | 'Container_Take_4' | 'Container_Take_5' | 'Container_Take_6' | 'Container_Take_7' | 'Contract_Manager' | 'Deliveries_Container_Take' | 'Deliveries_Query' | 'Deliveries_Take' | 'Diplomat' | 'Director' | 'Factory_Manager' | 'Fitting_Manager' | 'Hangar_Query_1' | 'Hangar_Query_2' | 'Hangar_Query_3' | 'Hangar_Query_4' | 'Hangar_Query_5' | 'Hangar_Query_6' | 'Hangar_Query_7' | 'Hangar_Take_1' | 'Hangar_Take_2' | 'Hangar_Take_3' | 'Hangar_Take_4' | 'Hangar_Take_5' | 'Hangar_Take_6' | 'Hangar_Take_7' | 'Junior_Accountant' | 'Personnel_Manager' | 'Project_Manager' | 'Rent_Factory_Facility' | 'Rent_Office' | 'Rent_Research_Facility' | 'Security_Officer' | 'Skill_Plan_Manager' | 'Starbase_Defense_Operator' | 'Starbase_Fuel_Technician' | 'Station_Manager' | 'Trader'[];\r\n roles_at_base?: 'Account_Take_1' | 'Account_Take_2' | 'Account_Take_3' | 'Account_Take_4' | 'Account_Take_5' | 'Account_Take_6' | 'Account_Take_7' | 'Accountant' | 'Auditor' | 'Brand_Manager' | 'Communications_Officer' | 'Config_Equipment' | 'Config_Starbase_Equipment' | 'Container_Take_1' | 'Container_Take_2' | 'Container_Take_3' | 'Container_Take_4' | 'Container_Take_5' | 'Container_Take_6' | 'Container_Take_7' | 'Contract_Manager' | 'Deliveries_Container_Take' | 'Deliveries_Query' | 'Deliveries_Take' | 'Diplomat' | 'Director' | 'Factory_Manager' | 'Fitting_Manager' | 'Hangar_Query_1' | 'Hangar_Query_2' | 'Hangar_Query_3' | 'Hangar_Query_4' | 'Hangar_Query_5' | 'Hangar_Query_6' | 'Hangar_Query_7' | 'Hangar_Take_1' | 'Hangar_Take_2' | 'Hangar_Take_3' | 'Hangar_Take_4' | 'Hangar_Take_5' | 'Hangar_Take_6' | 'Hangar_Take_7' | 'Junior_Accountant' | 'Personnel_Manager' | 'Project_Manager' | 'Rent_Factory_Facility' | 'Rent_Office' | 'Rent_Research_Facility' | 'Security_Officer' | 'Skill_Plan_Manager' | 'Starbase_Defense_Operator' | 'Starbase_Fuel_Technician' | 'Station_Manager' | 'Trader'[];\r\n roles_at_hq?: 'Account_Take_1' | 'Account_Take_2' | 'Account_Take_3' | 'Account_Take_4' | 'Account_Take_5' | 'Account_Take_6' | 'Account_Take_7' | 'Accountant' | 'Auditor' | 'Brand_Manager' | 'Communications_Officer' | 'Config_Equipment' | 'Config_Starbase_Equipment' | 'Container_Take_1' | 'Container_Take_2' | 'Container_Take_3' | 'Container_Take_4' | 'Container_Take_5' | 'Container_Take_6' | 'Container_Take_7' | 'Contract_Manager' | 'Deliveries_Container_Take' | 'Deliveries_Query' | 'Deliveries_Take' | 'Diplomat' | 'Director' | 'Factory_Manager' | 'Fitting_Manager' | 'Hangar_Query_1' | 'Hangar_Query_2' | 'Hangar_Query_3' | 'Hangar_Query_4' | 'Hangar_Query_5' | 'Hangar_Query_6' | 'Hangar_Query_7' | 'Hangar_Take_1' | 'Hangar_Take_2' | 'Hangar_Take_3' | 'Hangar_Take_4' | 'Hangar_Take_5' | 'Hangar_Take_6' | 'Hangar_Take_7' | 'Junior_Accountant' | 'Personnel_Manager' | 'Project_Manager' | 'Rent_Factory_Facility' | 'Rent_Office' | 'Rent_Research_Facility' | 'Security_Officer' | 'Skill_Plan_Manager' | 'Starbase_Defense_Operator' | 'Starbase_Fuel_Technician' | 'Station_Manager' | 'Trader'[];\r\n roles_at_other?: 'Account_Take_1' | 'Account_Take_2' | 'Account_Take_3' | 'Account_Take_4' | 'Account_Take_5' | 'Account_Take_6' | 'Account_Take_7' | 'Accountant' | 'Auditor' | 'Brand_Manager' | 'Communications_Officer' | 'Config_Equipment' | 'Config_Starbase_Equipment' | 'Container_Take_1' | 'Container_Take_2' | 'Container_Take_3' | 'Container_Take_4' | 'Container_Take_5' | 'Container_Take_6' | 'Container_Take_7' | 'Contract_Manager' | 'Deliveries_Container_Take' | 'Deliveries_Query' | 'Deliveries_Take' | 'Diplomat' | 'Director' | 'Factory_Manager' | 'Fitting_Manager' | 'Hangar_Query_1' | 'Hangar_Query_2' | 'Hangar_Query_3' | 'Hangar_Query_4' | 'Hangar_Query_5' | 'Hangar_Query_6' | 'Hangar_Query_7' | 'Hangar_Take_1' | 'Hangar_Take_2' | 'Hangar_Take_3' | 'Hangar_Take_4' | 'Hangar_Take_5' | 'Hangar_Take_6' | 'Hangar_Take_7' | 'Junior_Accountant' | 'Personnel_Manager' | 'Project_Manager' | 'Rent_Factory_Facility' | 'Rent_Office' | 'Rent_Research_Facility' | 'Security_Officer' | 'Skill_Plan_Manager' | 'Starbase_Defense_Operator' | 'Starbase_Fuel_Technician' | 'Station_Manager' | 'Trader'[];\r\n}\r\n\r\nexport interface CorporationsCorporationIdRolesHistoryGet {\r\n changed_at: string;\r\n character_id: number;\r\n issuer_id: number;\r\n new_roles: 'Account_Take_1' | 'Account_Take_2' | 'Account_Take_3' | 'Account_Take_4' | 'Account_Take_5' | 'Account_Take_6' | 'Account_Take_7' | 'Accountant' | 'Auditor' | 'Brand_Manager' | 'Communications_Officer' | 'Config_Equipment' | 'Config_Starbase_Equipment' | 'Container_Take_1' | 'Container_Take_2' | 'Container_Take_3' | 'Container_Take_4' | 'Container_Take_5' | 'Container_Take_6' | 'Container_Take_7' | 'Contract_Manager' | 'Deliveries_Container_Take' | 'Deliveries_Query' | 'Deliveries_Take' | 'Diplomat' | 'Director' | 'Factory_Manager' | 'Fitting_Manager' | 'Hangar_Query_1' | 'Hangar_Query_2' | 'Hangar_Query_3' | 'Hangar_Query_4' | 'Hangar_Query_5' | 'Hangar_Query_6' | 'Hangar_Query_7' | 'Hangar_Take_1' | 'Hangar_Take_2' | 'Hangar_Take_3' | 'Hangar_Take_4' | 'Hangar_Take_5' | 'Hangar_Take_6' | 'Hangar_Take_7' | 'Junior_Accountant' | 'Personnel_Manager' | 'Project_Manager' | 'Rent_Factory_Facility' | 'Rent_Office' | 'Rent_Research_Facility' | 'Security_Officer' | 'Skill_Plan_Manager' | 'Starbase_Defense_Operator' | 'Starbase_Fuel_Technician' | 'Station_Manager' | 'Trader'[];\r\n old_roles: 'Account_Take_1' | 'Account_Take_2' | 'Account_Take_3' | 'Account_Take_4' | 'Account_Take_5' | 'Account_Take_6' | 'Account_Take_7' | 'Accountant' | 'Auditor' | 'Brand_Manager' | 'Communications_Officer' | 'Config_Equipment' | 'Config_Starbase_Equipment' | 'Container_Take_1' | 'Container_Take_2' | 'Container_Take_3' | 'Container_Take_4' | 'Container_Take_5' | 'Container_Take_6' | 'Container_Take_7' | 'Contract_Manager' | 'Deliveries_Container_Take' | 'Deliveries_Query' | 'Deliveries_Take' | 'Diplomat' | 'Director' | 'Factory_Manager' | 'Fitting_Manager' | 'Hangar_Query_1' | 'Hangar_Query_2' | 'Hangar_Query_3' | 'Hangar_Query_4' | 'Hangar_Query_5' | 'Hangar_Query_6' | 'Hangar_Query_7' | 'Hangar_Take_1' | 'Hangar_Take_2' | 'Hangar_Take_3' | 'Hangar_Take_4' | 'Hangar_Take_5' | 'Hangar_Take_6' | 'Hangar_Take_7' | 'Junior_Accountant' | 'Personnel_Manager' | 'Project_Manager' | 'Rent_Factory_Facility' | 'Rent_Office' | 'Rent_Research_Facility' | 'Security_Officer' | 'Skill_Plan_Manager' | 'Starbase_Defense_Operator' | 'Starbase_Fuel_Technician' | 'Station_Manager' | 'Trader'[];\r\n role_type: 'grantable_roles' | 'grantable_roles_at_base' | 'grantable_roles_at_hq' | 'grantable_roles_at_other' | 'roles' | 'roles_at_base' | 'roles_at_hq' | 'roles_at_other';\r\n}\r\n\r\nexport interface CorporationsCorporationIdShareholdersGet {\r\n share_count: number;\r\n shareholder_id: number;\r\n shareholder_type: 'character' | 'corporation';\r\n}\r\n\r\nexport interface CorporationsCorporationIdStandingsGet {\r\n from_id: number;\r\n from_type: 'agent' | 'npc_corp' | 'faction';\r\n standing: number;\r\n}\r\n\r\nexport interface CorporationsCorporationIdStarbasesGet {\r\n moon_id?: number;\r\n onlined_since?: string;\r\n reinforced_until?: string;\r\n starbase_id: number;\r\n state?: 'offline' | 'online' | 'onlining' | 'reinforced' | 'unanchoring';\r\n system_id: number;\r\n type_id: number;\r\n unanchor_at?: string;\r\n}\r\n\r\nexport interface CorporationsCorporationIdStarbasesStarbaseIdGet {\r\n allow_alliance_members: boolean;\r\n allow_corporation_members: boolean;\r\n anchor: 'alliance_member' | 'config_starbase_equipment_role' | 'corporation_member' | 'starbase_fuel_technician_role';\r\n attack_if_at_war: boolean;\r\n attack_if_other_security_status_dropping: boolean;\r\n attack_security_status_threshold?: number;\r\n attack_standing_threshold?: number;\r\n fuel_bay_take: 'alliance_member' | 'config_starbase_equipment_role' | 'corporation_member' | 'starbase_fuel_technician_role';\r\n fuel_bay_view: 'alliance_member' | 'config_starbase_equipment_role' | 'corporation_member' | 'starbase_fuel_technician_role';\r\n fuels?: ({\r\n quantity: number;\r\n type_id: number;\r\n })[];\r\n offline: 'alliance_member' | 'config_starbase_equipment_role' | 'corporation_member' | 'starbase_fuel_technician_role';\r\n online: 'alliance_member' | 'config_starbase_equipment_role' | 'corporation_member' | 'starbase_fuel_technician_role';\r\n unanchor: 'alliance_member' | 'config_starbase_equipment_role' | 'corporation_member' | 'starbase_fuel_technician_role';\r\n use_alliance_standings: boolean;\r\n}\r\n\r\nexport interface CorporationsCorporationIdStructuresGet {\r\n corporation_id: number;\r\n fuel_expires?: string;\r\n name?: string;\r\n next_reinforce_apply?: string;\r\n next_reinforce_hour?: number;\r\n profile_id: number;\r\n reinforce_hour?: number;\r\n services?: ({\r\n name: string;\r\n state: 'online' | 'offline' | 'cleanup';\r\n })[];\r\n state: 'anchor_vulnerable' | 'anchoring' | 'armor_reinforce' | 'armor_vulnerable' | 'deploy_vulnerable' | 'fitting_invulnerable' | 'hull_reinforce' | 'hull_vulnerable' | 'online_deprecated' | 'onlining_vulnerable' | 'shield_vulnerable' | 'unanchored' | 'unknown';\r\n state_timer_end?: string;\r\n state_timer_start?: string;\r\n structure_id: number;\r\n system_id: number;\r\n type_id: number;\r\n unanchors_at?: string;\r\n}\r\n\r\nexport interface CorporationsCorporationIdTitlesGet {\r\n grantable_roles?: 'Account_Take_1' | 'Account_Take_2' | 'Account_Take_3' | 'Account_Take_4' | 'Account_Take_5' | 'Account_Take_6' | 'Account_Take_7' | 'Accountant' | 'Auditor' | 'Brand_Manager' | 'Communications_Officer' | 'Config_Equipment' | 'Config_Starbase_Equipment' | 'Container_Take_1' | 'Container_Take_2' | 'Container_Take_3' | 'Container_Take_4' | 'Container_Take_5' | 'Container_Take_6' | 'Container_Take_7' | 'Contract_Manager' | 'Deliveries_Container_Take' | 'Deliveries_Query' | 'Deliveries_Take' | 'Diplomat' | 'Director' | 'Factory_Manager' | 'Fitting_Manager' | 'Hangar_Query_1' | 'Hangar_Query_2' | 'Hangar_Query_3' | 'Hangar_Query_4' | 'Hangar_Query_5' | 'Hangar_Query_6' | 'Hangar_Query_7' | 'Hangar_Take_1' | 'Hangar_Take_2' | 'Hangar_Take_3' | 'Hangar_Take_4' | 'Hangar_Take_5' | 'Hangar_Take_6' | 'Hangar_Take_7' | 'Junior_Accountant' | 'Personnel_Manager' | 'Project_Manager' | 'Rent_Factory_Facility' | 'Rent_Office' | 'Rent_Research_Facility' | 'Security_Officer' | 'Skill_Plan_Manager' | 'Starbase_Defense_Operator' | 'Starbase_Fuel_Technician' | 'Station_Manager' | 'Trader'[];\r\n grantable_roles_at_base?: 'Account_Take_1' | 'Account_Take_2' | 'Account_Take_3' | 'Account_Take_4' | 'Account_Take_5' | 'Account_Take_6' | 'Account_Take_7' | 'Accountant' | 'Auditor' | 'Brand_Manager' | 'Communications_Officer' | 'Config_Equipment' | 'Config_Starbase_Equipment' | 'Container_Take_1' | 'Container_Take_2' | 'Container_Take_3' | 'Container_Take_4' | 'Container_Take_5' | 'Container_Take_6' | 'Container_Take_7' | 'Contract_Manager' | 'Deliveries_Container_Take' | 'Deliveries_Query' | 'Deliveries_Take' | 'Diplomat' | 'Director' | 'Factory_Manager' | 'Fitting_Manager' | 'Hangar_Query_1' | 'Hangar_Query_2' | 'Hangar_Query_3' | 'Hangar_Query_4' | 'Hangar_Query_5' | 'Hangar_Query_6' | 'Hangar_Query_7' | 'Hangar_Take_1' | 'Hangar_Take_2' | 'Hangar_Take_3' | 'Hangar_Take_4' | 'Hangar_Take_5' | 'Hangar_Take_6' | 'Hangar_Take_7' | 'Junior_Accountant' | 'Personnel_Manager' | 'Project_Manager' | 'Rent_Factory_Facility' | 'Rent_Office' | 'Rent_Research_Facility' | 'Security_Officer' | 'Skill_Plan_Manager' | 'Starbase_Defense_Operator' | 'Starbase_Fuel_Technician' | 'Station_Manager' | 'Trader'[];\r\n grantable_roles_at_hq?: 'Account_Take_1' | 'Account_Take_2' | 'Account_Take_3' | 'Account_Take_4' | 'Account_Take_5' | 'Account_Take_6' | 'Account_Take_7' | 'Accountant' | 'Auditor' | 'Brand_Manager' | 'Communications_Officer' | 'Config_Equipment' | 'Config_Starbase_Equipment' | 'Container_Take_1' | 'Container_Take_2' | 'Container_Take_3' | 'Container_Take_4' | 'Container_Take_5' | 'Container_Take_6' | 'Container_Take_7' | 'Contract_Manager' | 'Deliveries_Container_Take' | 'Deliveries_Query' | 'Deliveries_Take' | 'Diplomat' | 'Director' | 'Factory_Manager' | 'Fitting_Manager' | 'Hangar_Query_1' | 'Hangar_Query_2' | 'Hangar_Query_3' | 'Hangar_Query_4' | 'Hangar_Query_5' | 'Hangar_Query_6' | 'Hangar_Query_7' | 'Hangar_Take_1' | 'Hangar_Take_2' | 'Hangar_Take_3' | 'Hangar_Take_4' | 'Hangar_Take_5' | 'Hangar_Take_6' | 'Hangar_Take_7' | 'Junior_Accountant' | 'Personnel_Manager' | 'Project_Manager' | 'Rent_Factory_Facility' | 'Rent_Office' | 'Rent_Research_Facility' | 'Security_Officer' | 'Skill_Plan_Manager' | 'Starbase_Defense_Operator' | 'Starbase_Fuel_Technician' | 'Station_Manager' | 'Trader'[];\r\n grantable_roles_at_other?: 'Account_Take_1' | 'Account_Take_2' | 'Account_Take_3' | 'Account_Take_4' | 'Account_Take_5' | 'Account_Take_6' | 'Account_Take_7' | 'Accountant' | 'Auditor' | 'Brand_Manager' | 'Communications_Officer' | 'Config_Equipment' | 'Config_Starbase_Equipment' | 'Container_Take_1' | 'Container_Take_2' | 'Container_Take_3' | 'Container_Take_4' | 'Container_Take_5' | 'Container_Take_6' | 'Container_Take_7' | 'Contract_Manager' | 'Deliveries_Container_Take' | 'Deliveries_Query' | 'Deliveries_Take' | 'Diplomat' | 'Director' | 'Factory_Manager' | 'Fitting_Manager' | 'Hangar_Query_1' | 'Hangar_Query_2' | 'Hangar_Query_3' | 'Hangar_Query_4' | 'Hangar_Query_5' | 'Hangar_Query_6' | 'Hangar_Query_7' | 'Hangar_Take_1' | 'Hangar_Take_2' | 'Hangar_Take_3' | 'Hangar_Take_4' | 'Hangar_Take_5' | 'Hangar_Take_6' | 'Hangar_Take_7' | 'Junior_Accountant' | 'Personnel_Manager' | 'Project_Manager' | 'Rent_Factory_Facility' | 'Rent_Office' | 'Rent_Research_Facility' | 'Security_Officer' | 'Skill_Plan_Manager' | 'Starbase_Defense_Operator' | 'Starbase_Fuel_Technician' | 'Station_Manager' | 'Trader'[];\r\n name?: string;\r\n roles?: 'Account_Take_1' | 'Account_Take_2' | 'Account_Take_3' | 'Account_Take_4' | 'Account_Take_5' | 'Account_Take_6' | 'Account_Take_7' | 'Accountant' | 'Auditor' | 'Brand_Manager' | 'Communications_Officer' | 'Config_Equipment' | 'Config_Starbase_Equipment' | 'Container_Take_1' | 'Container_Take_2' | 'Container_Take_3' | 'Container_Take_4' | 'Container_Take_5' | 'Container_Take_6' | 'Container_Take_7' | 'Contract_Manager' | 'Deliveries_Container_Take' | 'Deliveries_Query' | 'Deliveries_Take' | 'Diplomat' | 'Director' | 'Factory_Manager' | 'Fitting_Manager' | 'Hangar_Query_1' | 'Hangar_Query_2' | 'Hangar_Query_3' | 'Hangar_Query_4' | 'Hangar_Query_5' | 'Hangar_Query_6' | 'Hangar_Query_7' | 'Hangar_Take_1' | 'Hangar_Take_2' | 'Hangar_Take_3' | 'Hangar_Take_4' | 'Hangar_Take_5' | 'Hangar_Take_6' | 'Hangar_Take_7' | 'Junior_Accountant' | 'Personnel_Manager' | 'Project_Manager' | 'Rent_Factory_Facility' | 'Rent_Office' | 'Rent_Research_Facility' | 'Security_Officer' | 'Skill_Plan_Manager' | 'Starbase_Defense_Operator' | 'Starbase_Fuel_Technician' | 'Station_Manager' | 'Trader'[];\r\n roles_at_base?: 'Account_Take_1' | 'Account_Take_2' | 'Account_Take_3' | 'Account_Take_4' | 'Account_Take_5' | 'Account_Take_6' | 'Account_Take_7' | 'Accountant' | 'Auditor' | 'Brand_Manager' | 'Communications_Officer' | 'Config_Equipment' | 'Config_Starbase_Equipment' | 'Container_Take_1' | 'Container_Take_2' | 'Container_Take_3' | 'Container_Take_4' | 'Container_Take_5' | 'Container_Take_6' | 'Container_Take_7' | 'Contract_Manager' | 'Deliveries_Container_Take' | 'Deliveries_Query' | 'Deliveries_Take' | 'Diplomat' | 'Director' | 'Factory_Manager' | 'Fitting_Manager' | 'Hangar_Query_1' | 'Hangar_Query_2' | 'Hangar_Query_3' | 'Hangar_Query_4' | 'Hangar_Query_5' | 'Hangar_Query_6' | 'Hangar_Query_7' | 'Hangar_Take_1' | 'Hangar_Take_2' | 'Hangar_Take_3' | 'Hangar_Take_4' | 'Hangar_Take_5' | 'Hangar_Take_6' | 'Hangar_Take_7' | 'Junior_Accountant' | 'Personnel_Manager' | 'Project_Manager' | 'Rent_Factory_Facility' | 'Rent_Office' | 'Rent_Research_Facility' | 'Security_Officer' | 'Skill_Plan_Manager' | 'Starbase_Defense_Operator' | 'Starbase_Fuel_Technician' | 'Station_Manager' | 'Trader'[];\r\n roles_at_hq?: 'Account_Take_1' | 'Account_Take_2' | 'Account_Take_3' | 'Account_Take_4' | 'Account_Take_5' | 'Account_Take_6' | 'Account_Take_7' | 'Accountant' | 'Auditor' | 'Brand_Manager' | 'Communications_Officer' | 'Config_Equipment' | 'Config_Starbase_Equipment' | 'Container_Take_1' | 'Container_Take_2' | 'Container_Take_3' | 'Container_Take_4' | 'Container_Take_5' | 'Container_Take_6' | 'Container_Take_7' | 'Contract_Manager' | 'Deliveries_Container_Take' | 'Deliveries_Query' | 'Deliveries_Take' | 'Diplomat' | 'Director' | 'Factory_Manager' | 'Fitting_Manager' | 'Hangar_Query_1' | 'Hangar_Query_2' | 'Hangar_Query_3' | 'Hangar_Query_4' | 'Hangar_Query_5' | 'Hangar_Query_6' | 'Hangar_Query_7' | 'Hangar_Take_1' | 'Hangar_Take_2' | 'Hangar_Take_3' | 'Hangar_Take_4' | 'Hangar_Take_5' | 'Hangar_Take_6' | 'Hangar_Take_7' | 'Junior_Accountant' | 'Personnel_Manager' | 'Project_Manager' | 'Rent_Factory_Facility' | 'Rent_Office' | 'Rent_Research_Facility' | 'Security_Officer' | 'Skill_Plan_Manager' | 'Starbase_Defense_Operator' | 'Starbase_Fuel_Technician' | 'Station_Manager' | 'Trader'[];\r\n roles_at_other?: 'Account_Take_1' | 'Account_Take_2' | 'Account_Take_3' | 'Account_Take_4' | 'Account_Take_5' | 'Account_Take_6' | 'Account_Take_7' | 'Accountant' | 'Auditor' | 'Brand_Manager' | 'Communications_Officer' | 'Config_Equipment' | 'Config_Starbase_Equipment' | 'Container_Take_1' | 'Container_Take_2' | 'Container_Take_3' | 'Container_Take_4' | 'Container_Take_5' | 'Container_Take_6' | 'Container_Take_7' | 'Contract_Manager' | 'Deliveries_Container_Take' | 'Deliveries_Query' | 'Deliveries_Take' | 'Diplomat' | 'Director' | 'Factory_Manager' | 'Fitting_Manager' | 'Hangar_Query_1' | 'Hangar_Query_2' | 'Hangar_Query_3' | 'Hangar_Query_4' | 'Hangar_Query_5' | 'Hangar_Query_6' | 'Hangar_Query_7' | 'Hangar_Take_1' | 'Hangar_Take_2' | 'Hangar_Take_3' | 'Hangar_Take_4' | 'Hangar_Take_5' | 'Hangar_Take_6' | 'Hangar_Take_7' | 'Junior_Accountant' | 'Personnel_Manager' | 'Project_Manager' | 'Rent_Factory_Facility' | 'Rent_Office' | 'Rent_Research_Facility' | 'Security_Officer' | 'Skill_Plan_Manager' | 'Starbase_Defense_Operator' | 'Starbase_Fuel_Technician' | 'Station_Manager' | 'Trader'[];\r\n title_id?: number;\r\n}\r\n\r\nexport interface CorporationsDetail {\r\n alliance_id?: number;\r\n ceo_id: number;\r\n creator_id: number;\r\n date_founded?: string;\r\n description?: string;\r\n faction_id?: number;\r\n home_station_id?: number;\r\n member_count: number;\r\n name: string;\r\n shares?: number;\r\n tax_rate: number;\r\n ticker: string;\r\n url?: string;\r\n war_eligible?: boolean;\r\n}\r\n\r\n// --- Corporation Projects ---\r\n\r\nexport interface CorporationsProjectsContribution {\r\n contributed: number;\r\n last_modified?: string;\r\n}\r\n\r\nexport interface CorporationsProjectsContributors {\r\n contributors: ({\r\n contributed: number;\r\n id: number;\r\n name: string;\r\n })[];\r\n cursor?: {\r\n after?: string;\r\n before?: string;\r\n };\r\n}\r\n\r\nexport interface CorporationsProjectsDetail {\r\n configuration: unknown;\r\n contribution?: {\r\n participation_limit?: number;\r\n reward_per_contribution?: number;\r\n submission_limit?: number;\r\n submission_multiplier?: number;\r\n };\r\n creator: {\r\n id: number;\r\n name: string;\r\n };\r\n details: {\r\n career: 'Unspecified' | 'Explorer' | 'Industrialist' | 'Enforcer' | 'Soldier of Fortune';\r\n created: string;\r\n description: string;\r\n expires?: string;\r\n finished?: string;\r\n };\r\n id: string;\r\n last_modified: string;\r\n name: string;\r\n progress: {\r\n current: number;\r\n desired: number;\r\n };\r\n reward?: {\r\n initial: number;\r\n remaining: number;\r\n };\r\n state: 'Unspecified' | 'Active' | 'Closed' | 'Completed' | 'Expired' | 'Deleted';\r\n}\r\n\r\nexport interface CorporationsProjectsListing {\r\n cursor?: {\r\n after?: string;\r\n before?: string;\r\n };\r\n projects: ({\r\n id: string;\r\n last_modified: string;\r\n name: string;\r\n progress: {\r\n current: number;\r\n desired: number;\r\n };\r\n reward?: {\r\n initial: number;\r\n remaining: number;\r\n };\r\n state: 'Unspecified' | 'Active' | 'Closed' | 'Completed' | 'Expired' | 'Deleted';\r\n })[];\r\n}\r\n\r\n// --- Dogma ---\r\n\r\nexport interface DogmaAttributesAttributeIdGet {\r\n attribute_id: number;\r\n default_value?: number;\r\n description?: string;\r\n display_name?: string;\r\n high_is_good?: boolean;\r\n icon_id?: number;\r\n name?: string;\r\n published?: boolean;\r\n stackable?: boolean;\r\n unit_id?: number;\r\n}\r\n\r\nexport interface DogmaDynamicItemsTypeIdItemIdGet {\r\n created_by: number;\r\n dogma_attributes: ({\r\n attribute_id: number;\r\n value: number;\r\n })[];\r\n dogma_effects: ({\r\n effect_id: number;\r\n is_default: boolean;\r\n })[];\r\n mutator_type_id: number;\r\n source_type_id: number;\r\n}\r\n\r\nexport interface DogmaEffectsEffectIdGet {\r\n description?: string;\r\n disallow_auto_repeat?: boolean;\r\n discharge_attribute_id?: number;\r\n display_name?: string;\r\n duration_attribute_id?: number;\r\n effect_category?: number;\r\n effect_id: number;\r\n electronic_chance?: boolean;\r\n falloff_attribute_id?: number;\r\n icon_id?: number;\r\n is_assistance?: boolean;\r\n is_offensive?: boolean;\r\n is_warp_safe?: boolean;\r\n modifiers?: ({\r\n domain?: string;\r\n effect_id?: number;\r\n func: string;\r\n modified_attribute_id?: number;\r\n modifying_attribute_id?: number;\r\n operator?: number;\r\n })[];\r\n name?: string;\r\n post_expression?: number;\r\n pre_expression?: number;\r\n published?: boolean;\r\n range_attribute_id?: number;\r\n range_chance?: boolean;\r\n tracking_speed_attribute_id?: number;\r\n}\r\n\r\n// --- Faction Warfare ---\r\n\r\nexport interface CharactersCharacterIdFwStatsGet {\r\n current_rank?: number;\r\n enlisted_on?: string;\r\n faction_id?: number;\r\n highest_rank?: number;\r\n kills: {\r\n last_week: number;\r\n total: number;\r\n yesterday: number;\r\n };\r\n victory_points: {\r\n last_week: number;\r\n total: number;\r\n yesterday: number;\r\n };\r\n}\r\n\r\nexport interface CorporationsCorporationIdFwStatsGet {\r\n enlisted_on?: string;\r\n faction_id?: number;\r\n kills: {\r\n last_week: number;\r\n total: number;\r\n yesterday: number;\r\n };\r\n pilots?: number;\r\n victory_points: {\r\n last_week: number;\r\n total: number;\r\n yesterday: number;\r\n };\r\n}\r\n\r\nexport interface FwLeaderboardsCharactersGet {\r\n kills: {\r\n active_total: ({\r\n amount?: number;\r\n character_id?: number;\r\n })[];\r\n last_week: ({\r\n amount?: number;\r\n character_id?: number;\r\n })[];\r\n yesterday: ({\r\n amount?: number;\r\n character_id?: number;\r\n })[];\r\n };\r\n victory_points: {\r\n active_total: ({\r\n amount?: number;\r\n character_id?: number;\r\n })[];\r\n last_week: ({\r\n amount?: number;\r\n character_id?: number;\r\n })[];\r\n yesterday: ({\r\n amount?: number;\r\n character_id?: number;\r\n })[];\r\n };\r\n}\r\n\r\nexport interface FwLeaderboardsCorporationsGet {\r\n kills: {\r\n active_total: ({\r\n amount?: number;\r\n corporation_id?: number;\r\n })[];\r\n last_week: ({\r\n amount?: number;\r\n corporation_id?: number;\r\n })[];\r\n yesterday: ({\r\n amount?: number;\r\n corporation_id?: number;\r\n })[];\r\n };\r\n victory_points: {\r\n active_total: ({\r\n amount?: number;\r\n corporation_id?: number;\r\n })[];\r\n last_week: ({\r\n amount?: number;\r\n corporation_id?: number;\r\n })[];\r\n yesterday: ({\r\n amount?: number;\r\n corporation_id?: number;\r\n })[];\r\n };\r\n}\r\n\r\nexport interface FwLeaderboardsGet {\r\n kills: {\r\n active_total: ({\r\n amount?: number;\r\n faction_id?: number;\r\n })[];\r\n last_week: ({\r\n amount?: number;\r\n faction_id?: number;\r\n })[];\r\n yesterday: ({\r\n amount?: number;\r\n faction_id?: number;\r\n })[];\r\n };\r\n victory_points: {\r\n active_total: ({\r\n amount?: number;\r\n faction_id?: number;\r\n })[];\r\n last_week: ({\r\n amount?: number;\r\n faction_id?: number;\r\n })[];\r\n yesterday: ({\r\n amount?: number;\r\n faction_id?: number;\r\n })[];\r\n };\r\n}\r\n\r\nexport interface FwStatsGet {\r\n faction_id: number;\r\n kills: {\r\n last_week: number;\r\n total: number;\r\n yesterday: number;\r\n };\r\n pilots: number;\r\n systems_controlled: number;\r\n victory_points: {\r\n last_week: number;\r\n total: number;\r\n yesterday: number;\r\n };\r\n}\r\n\r\nexport interface FwSystemsGet {\r\n contested: 'captured' | 'contested' | 'uncontested' | 'vulnerable';\r\n occupier_faction_id: number;\r\n owner_faction_id: number;\r\n solar_system_id: number;\r\n victory_points: number;\r\n victory_points_threshold: number;\r\n}\r\n\r\nexport interface FwWarsGet {\r\n against_id: number;\r\n faction_id: number;\r\n}\r\n\r\n// --- Fittings ---\r\n\r\nexport interface CharactersCharacterIdFittingsGet {\r\n description: string;\r\n fitting_id: number;\r\n items: ({\r\n flag: 'Cargo' | 'DroneBay' | 'FighterBay' | 'HiSlot0' | 'HiSlot1' | 'HiSlot2' | 'HiSlot3' | 'HiSlot4' | 'HiSlot5' | 'HiSlot6' | 'HiSlot7' | 'Invalid' | 'LoSlot0' | 'LoSlot1' | 'LoSlot2' | 'LoSlot3' | 'LoSlot4' | 'LoSlot5' | 'LoSlot6' | 'LoSlot7' | 'MedSlot0' | 'MedSlot1' | 'MedSlot2' | 'MedSlot3' | 'MedSlot4' | 'MedSlot5' | 'MedSlot6' | 'MedSlot7' | 'RigSlot0' | 'RigSlot1' | 'RigSlot2' | 'ServiceSlot0' | 'ServiceSlot1' | 'ServiceSlot2' | 'ServiceSlot3' | 'ServiceSlot4' | 'ServiceSlot5' | 'ServiceSlot6' | 'ServiceSlot7' | 'SubSystemSlot0' | 'SubSystemSlot1' | 'SubSystemSlot2' | 'SubSystemSlot3';\r\n quantity: number;\r\n type_id: number;\r\n })[];\r\n name: string;\r\n ship_type_id: number;\r\n}\r\n\r\n// --- Fleets ---\r\n\r\nexport interface CharactersCharacterIdFleetGet {\r\n fleet_boss_id: number;\r\n fleet_id: number;\r\n role: 'fleet_commander' | 'squad_commander' | 'squad_member' | 'wing_commander';\r\n squad_id: number;\r\n wing_id: number;\r\n}\r\n\r\nexport interface FleetsFleetIdGet {\r\n is_free_move: boolean;\r\n is_registered: boolean;\r\n is_voice_enabled: boolean;\r\n motd: string;\r\n}\r\n\r\nexport interface FleetsFleetIdMembersGet {\r\n character_id: number;\r\n join_time: string;\r\n role: 'fleet_commander' | 'wing_commander' | 'squad_commander' | 'squad_member';\r\n role_name: string;\r\n ship_type_id: number;\r\n solar_system_id: number;\r\n squad_id: number;\r\n station_id?: number;\r\n takes_fleet_warp: boolean;\r\n wing_id: number;\r\n}\r\n\r\nexport interface FleetsFleetIdWingsGet {\r\n id: number;\r\n name: string;\r\n squads: ({\r\n id: number;\r\n name: string;\r\n })[];\r\n}\r\n\r\n// --- Freelance Jobs ---\r\n\r\nexport interface CharactersFreelanceJobsListing {\r\n freelance_jobs: ({\r\n id: string;\r\n last_modified: string;\r\n name: string;\r\n progress: {\r\n current: number;\r\n desired: number;\r\n };\r\n reward?: {\r\n initial: number;\r\n remaining: number;\r\n };\r\n state: 'Unspecified' | 'Active' | 'Closed' | 'Completed' | 'Expired' | 'Deleted';\r\n })[];\r\n}\r\n\r\nexport interface CharactersFreelanceJobsParticipation {\r\n contributed: number;\r\n last_modified: string;\r\n state: 'Unspecified' | 'Committed' | 'Kicked' | 'Resigned';\r\n}\r\n\r\nexport interface CorporationsFreelanceJobsListing {\r\n cursor?: {\r\n after?: string;\r\n before?: string;\r\n };\r\n freelance_jobs: ({\r\n id: string;\r\n last_modified: string;\r\n name: string;\r\n progress: {\r\n current: number;\r\n desired: number;\r\n };\r\n reward?: {\r\n initial: number;\r\n remaining: number;\r\n };\r\n state: 'Unspecified' | 'Active' | 'Closed' | 'Completed' | 'Expired' | 'Deleted';\r\n })[];\r\n}\r\n\r\nexport interface CorporationsFreelanceJobsParticipants {\r\n cursor?: {\r\n after?: string;\r\n before?: string;\r\n };\r\n participants: ({\r\n contributed: number;\r\n id: number;\r\n name: string;\r\n state: 'Unspecified' | 'Committed' | 'Kicked' | 'Resigned';\r\n })[];\r\n}\r\n\r\nexport interface FreelanceJobsDetail {\r\n access_and_visibility: {\r\n acl_protected: boolean;\r\n broadcast_locations?: ({\r\n id: number;\r\n name: string;\r\n })[];\r\n restrictions?: {\r\n maximum_age?: number;\r\n minimum_age?: number;\r\n };\r\n };\r\n configuration: {\r\n method: string;\r\n parameters: Record<string, unknown>;\r\n version: number;\r\n };\r\n contribution?: {\r\n contribution_per_participant_limit?: number;\r\n max_committed_participants: number;\r\n reward_per_contribution?: number;\r\n submission_limit?: number;\r\n submission_multiplier?: number;\r\n };\r\n details: {\r\n career: 'Unspecified' | 'Explorer' | 'Industrialist' | 'Enforcer' | 'Soldier of Fortune';\r\n created: string;\r\n creator: {\r\n character: {\r\n id: number;\r\n name: string;\r\n };\r\n corporation: {\r\n id: number;\r\n name: string;\r\n };\r\n };\r\n description: string;\r\n expires?: string;\r\n finished?: string;\r\n };\r\n id: string;\r\n last_modified: string;\r\n name: string;\r\n progress: {\r\n current: number;\r\n desired: number;\r\n };\r\n reward?: {\r\n initial: number;\r\n remaining: number;\r\n };\r\n state: 'Unspecified' | 'Active' | 'Closed' | 'Completed' | 'Expired' | 'Deleted';\r\n}\r\n\r\nexport interface FreelanceJobsListing {\r\n cursor?: {\r\n after?: string;\r\n before?: string;\r\n };\r\n freelance_jobs: ({\r\n id: string;\r\n last_modified: string;\r\n name: string;\r\n progress: {\r\n current: number;\r\n desired: number;\r\n };\r\n reward?: {\r\n initial: number;\r\n remaining: number;\r\n };\r\n state: 'Unspecified' | 'Active' | 'Closed' | 'Completed' | 'Expired' | 'Deleted';\r\n })[];\r\n}\r\n\r\n// --- Incursions ---\r\n\r\nexport interface IncursionsGet {\r\n constellation_id: number;\r\n faction_id: number;\r\n has_boss: boolean;\r\n infested_solar_systems: number[];\r\n influence: number;\r\n staging_solar_system_id: number;\r\n state: 'withdrawing' | 'mobilizing' | 'established';\r\n type: string;\r\n}\r\n\r\n// --- Industry ---\r\n\r\nexport interface CharactersCharacterIdIndustryJobsGet {\r\n activity_id: number;\r\n blueprint_id: number;\r\n blueprint_location_id: number;\r\n blueprint_type_id: number;\r\n completed_character_id?: number;\r\n completed_date?: string;\r\n cost?: number;\r\n duration: number;\r\n end_date: string;\r\n facility_id: number;\r\n installer_id: number;\r\n job_id: number;\r\n licensed_runs?: number;\r\n output_location_id: number;\r\n pause_date?: string;\r\n probability?: number;\r\n product_type_id?: number;\r\n runs: number;\r\n start_date: string;\r\n station_id: number;\r\n status: 'active' | 'cancelled' | 'delivered' | 'paused' | 'ready' | 'reverted';\r\n successful_runs?: number;\r\n}\r\n\r\nexport interface CharactersCharacterIdMiningGet {\r\n date: string;\r\n quantity: number;\r\n solar_system_id: number;\r\n type_id: number;\r\n}\r\n\r\nexport interface CorporationCorporationIdMiningExtractionsGet {\r\n chunk_arrival_time: string;\r\n extraction_start_time: string;\r\n moon_id: number;\r\n natural_decay_time: string;\r\n structure_id: number;\r\n}\r\n\r\nexport interface CorporationCorporationIdMiningObserversGet {\r\n last_updated: string;\r\n observer_id: number;\r\n observer_type: 'structure';\r\n}\r\n\r\nexport interface CorporationCorporationIdMiningObserversObserverIdGet {\r\n character_id: number;\r\n last_updated: string;\r\n quantity: number;\r\n recorded_corporation_id: number;\r\n type_id: number;\r\n}\r\n\r\nexport interface CorporationsCorporationIdIndustryJobsGet {\r\n activity_id: number;\r\n blueprint_id: number;\r\n blueprint_location_id: number;\r\n blueprint_type_id: number;\r\n completed_character_id?: number;\r\n completed_date?: string;\r\n cost?: number;\r\n duration: number;\r\n end_date: string;\r\n facility_id: number;\r\n installer_id: number;\r\n job_id: number;\r\n licensed_runs?: number;\r\n location_id: number;\r\n output_location_id: number;\r\n pause_date?: string;\r\n probability?: number;\r\n product_type_id?: number;\r\n runs: number;\r\n start_date: string;\r\n status: 'active' | 'cancelled' | 'delivered' | 'paused' | 'ready' | 'reverted';\r\n successful_runs?: number;\r\n}\r\n\r\nexport interface IndustryFacilitiesGet {\r\n facility_id: number;\r\n owner_id: number;\r\n region_id: number;\r\n solar_system_id: number;\r\n tax?: number;\r\n type_id: number;\r\n}\r\n\r\nexport interface IndustrySystemsGet {\r\n cost_indices: ({\r\n activity: 'copying' | 'duplicating' | 'invention' | 'manufacturing' | 'none' | 'reaction' | 'researching_material_efficiency' | 'researching_technology' | 'researching_time_efficiency' | 'reverse_engineering';\r\n cost_index: number;\r\n })[];\r\n solar_system_id: number;\r\n}\r\n\r\n// --- Insurance ---\r\n\r\nexport interface InsurancePricesGet {\r\n levels: ({\r\n cost: number;\r\n name: string;\r\n payout: number;\r\n })[];\r\n type_id: number;\r\n}\r\n\r\n// --- Killmails ---\r\n\r\nexport interface CharactersCharacterIdKillmailsRecentGet {\r\n killmail_hash: string;\r\n killmail_id: number;\r\n}\r\n\r\nexport interface CorporationsCorporationIdKillmailsRecentGet {\r\n killmail_hash: string;\r\n killmail_id: number;\r\n}\r\n\r\nexport interface KillmailsKillmailIdKillmailHashGet {\r\n attackers: ({\r\n alliance_id?: number;\r\n character_id?: number;\r\n corporation_id?: number;\r\n damage_done: number;\r\n faction_id?: number;\r\n final_blow: boolean;\r\n security_status: number;\r\n ship_type_id?: number;\r\n weapon_type_id?: number;\r\n })[];\r\n killmail_id: number;\r\n killmail_time: string;\r\n moon_id?: number;\r\n solar_system_id: number;\r\n victim: {\r\n alliance_id?: number;\r\n character_id?: number;\r\n corporation_id?: number;\r\n damage_taken: number;\r\n faction_id?: number;\r\n items?: ({\r\n flag: number;\r\n item_type_id: number;\r\n items?: ({\r\n flag: number;\r\n item_type_id: number;\r\n quantity_destroyed?: number;\r\n quantity_dropped?: number;\r\n singleton: number;\r\n })[];\r\n quantity_destroyed?: number;\r\n quantity_dropped?: number;\r\n singleton: number;\r\n })[];\r\n position?: {\r\n x: number;\r\n y: number;\r\n z: number;\r\n };\r\n ship_type_id: number;\r\n };\r\n war_id?: number;\r\n}\r\n\r\n// --- Location ---\r\n\r\nexport interface CharactersCharacterIdLocationGet {\r\n solar_system_id: number;\r\n station_id?: number;\r\n structure_id?: number;\r\n}\r\n\r\nexport interface CharactersCharacterIdOnlineGet {\r\n last_login?: string;\r\n last_logout?: string;\r\n logins?: number;\r\n online: boolean;\r\n}\r\n\r\nexport interface CharactersCharacterIdShipGet {\r\n ship_item_id: number;\r\n ship_name: string;\r\n ship_type_id: number;\r\n}\r\n\r\n// --- Loyalty ---\r\n\r\nexport interface CharactersCharacterIdLoyaltyPointsGet {\r\n corporation_id: number;\r\n loyalty_points: number;\r\n}\r\n\r\nexport interface LoyaltyStoresCorporationIdOffersGet {\r\n ak_cost?: number;\r\n isk_cost: number;\r\n lp_cost: number;\r\n offer_id: number;\r\n quantity: number;\r\n required_items: ({\r\n quantity: number;\r\n type_id: number;\r\n })[];\r\n type_id: number;\r\n}\r\n\r\n// --- Mail ---\r\n\r\nexport interface CharactersCharacterIdMailGet {\r\n from?: number;\r\n is_read?: boolean;\r\n labels?: number[];\r\n mail_id?: number;\r\n recipients?: ({\r\n recipient_id: number;\r\n recipient_type: 'alliance' | 'character' | 'corporation' | 'mailing_list';\r\n })[];\r\n subject?: string;\r\n timestamp?: string;\r\n}\r\n\r\nexport interface CharactersCharacterIdMailLabelsGet {\r\n labels?: ({\r\n color?: '#0000fe' | '#006634' | '#0099ff' | '#00ff33' | '#01ffff' | '#349800' | '#660066' | '#666666' | '#999999' | '#99ffff' | '#9a0000' | '#ccff9a' | '#e6e6e6' | '#fe0000' | '#ff6600' | '#ffff01' | '#ffffcd' | '#ffffff';\r\n label_id?: number;\r\n name?: string;\r\n unread_count?: number;\r\n })[];\r\n total_unread_count?: number;\r\n}\r\n\r\nexport interface CharactersCharacterIdMailListsGet {\r\n mailing_list_id: number;\r\n name: string;\r\n}\r\n\r\nexport interface CharactersCharacterIdMailMailIdGet {\r\n body?: string;\r\n from?: number;\r\n labels?: number[];\r\n read?: boolean;\r\n recipients?: ({\r\n recipient_id: number;\r\n recipient_type: 'alliance' | 'character' | 'corporation' | 'mailing_list';\r\n })[];\r\n subject?: string;\r\n timestamp?: string;\r\n}\r\n\r\n// --- Market ---\r\n\r\nexport interface CharactersCharacterIdOrdersGet {\r\n duration: number;\r\n escrow?: number;\r\n is_buy_order?: boolean;\r\n is_corporation: boolean;\r\n issued: string;\r\n location_id: number;\r\n min_volume?: number;\r\n order_id: number;\r\n price: number;\r\n range: '1' | '10' | '2' | '20' | '3' | '30' | '4' | '40' | '5' | 'region' | 'solarsystem' | 'station';\r\n region_id: number;\r\n type_id: number;\r\n volume_remain: number;\r\n volume_total: number;\r\n}\r\n\r\nexport interface CharactersCharacterIdOrdersHistoryGet {\r\n duration: number;\r\n escrow?: number;\r\n is_buy_order?: boolean;\r\n is_corporation: boolean;\r\n issued: string;\r\n location_id: number;\r\n min_volume?: number;\r\n order_id: number;\r\n price: number;\r\n range: '1' | '10' | '2' | '20' | '3' | '30' | '4' | '40' | '5' | 'region' | 'solarsystem' | 'station';\r\n region_id: number;\r\n state: 'cancelled' | 'expired';\r\n type_id: number;\r\n volume_remain: number;\r\n volume_total: number;\r\n}\r\n\r\nexport interface CorporationsCorporationIdOrdersGet {\r\n duration: number;\r\n escrow?: number;\r\n is_buy_order?: boolean;\r\n issued: string;\r\n issued_by: number;\r\n location_id: number;\r\n min_volume?: number;\r\n order_id: number;\r\n price: number;\r\n range: '1' | '10' | '2' | '20' | '3' | '30' | '4' | '40' | '5' | 'region' | 'solarsystem' | 'station';\r\n region_id: number;\r\n type_id: number;\r\n volume_remain: number;\r\n volume_total: number;\r\n wallet_division: number;\r\n}\r\n\r\nexport interface CorporationsCorporationIdOrdersHistoryGet {\r\n duration: number;\r\n escrow?: number;\r\n is_buy_order?: boolean;\r\n issued: string;\r\n issued_by?: number;\r\n location_id: number;\r\n min_volume?: number;\r\n order_id: number;\r\n price: number;\r\n range: '1' | '10' | '2' | '20' | '3' | '30' | '4' | '40' | '5' | 'region' | 'solarsystem' | 'station';\r\n region_id: number;\r\n state: 'cancelled' | 'expired';\r\n type_id: number;\r\n volume_remain: number;\r\n volume_total: number;\r\n wallet_division: number;\r\n}\r\n\r\nexport interface MarketsGroupsMarketGroupIdGet {\r\n description: string;\r\n market_group_id: number;\r\n name: string;\r\n parent_group_id?: number;\r\n types: number[];\r\n}\r\n\r\nexport interface MarketsPricesGet {\r\n adjusted_price?: number;\r\n average_price?: number;\r\n type_id: number;\r\n}\r\n\r\nexport interface MarketsRegionIdHistoryGet {\r\n average: number;\r\n date: string;\r\n highest: number;\r\n lowest: number;\r\n order_count: number;\r\n volume: number;\r\n}\r\n\r\nexport interface MarketsRegionIdOrdersGet {\r\n duration: number;\r\n is_buy_order: boolean;\r\n issued: string;\r\n location_id: number;\r\n min_volume: number;\r\n order_id: number;\r\n price: number;\r\n range: 'station' | 'region' | 'solarsystem' | '1' | '2' | '3' | '4' | '5' | '10' | '20' | '30' | '40';\r\n system_id: number;\r\n type_id: number;\r\n volume_remain: number;\r\n volume_total: number;\r\n}\r\n\r\nexport interface MarketsStructuresStructureIdGet {\r\n duration: number;\r\n is_buy_order: boolean;\r\n issued: string;\r\n location_id: number;\r\n min_volume: number;\r\n order_id: number;\r\n price: number;\r\n range: 'station' | 'region' | 'solarsystem' | '1' | '2' | '3' | '4' | '5' | '10' | '20' | '30' | '40';\r\n type_id: number;\r\n volume_remain: number;\r\n volume_total: number;\r\n}\r\n\r\n// --- Meta ---\r\n\r\nexport interface MetaChangelog {\r\n changelog: Record<string, unknown>;\r\n}\r\n\r\nexport interface MetaCompatibilityDates {\r\n compatibility_dates: string[];\r\n}\r\n\r\nexport interface MetaStatus {\r\n routes: ({\r\n method: 'GET' | 'POST' | 'PUT' | 'DELETE';\r\n path: string;\r\n status: 'Unknown' | 'OK' | 'Degraded' | 'Down' | 'Recovering';\r\n })[];\r\n}\r\n\r\n// --- Planetary Interaction ---\r\n\r\nexport interface CharactersCharacterIdPlanetsGet {\r\n last_update: string;\r\n num_pins: number;\r\n owner_id: number;\r\n planet_id: number;\r\n planet_type: 'temperate' | 'barren' | 'oceanic' | 'ice' | 'gas' | 'lava' | 'storm' | 'plasma';\r\n solar_system_id: number;\r\n upgrade_level: number;\r\n}\r\n\r\nexport interface CharactersCharacterIdPlanetsPlanetIdGet {\r\n links: ({\r\n destination_pin_id: number;\r\n link_level: number;\r\n source_pin_id: number;\r\n })[];\r\n pins: ({\r\n contents?: ({\r\n amount: number;\r\n type_id: number;\r\n })[];\r\n expiry_time?: string;\r\n extractor_details?: {\r\n cycle_time?: number;\r\n head_radius?: number;\r\n heads: ({\r\n head_id: number;\r\n latitude: number;\r\n longitude: number;\r\n })[];\r\n product_type_id?: number;\r\n qty_per_cycle?: number;\r\n };\r\n factory_details?: {\r\n schematic_id: number;\r\n };\r\n install_time?: string;\r\n last_cycle_start?: string;\r\n latitude: number;\r\n longitude: number;\r\n pin_id: number;\r\n schematic_id?: number;\r\n type_id: number;\r\n })[];\r\n routes: ({\r\n content_type_id: number;\r\n destination_pin_id: number;\r\n quantity: number;\r\n route_id: number;\r\n source_pin_id: number;\r\n waypoints?: number[];\r\n })[];\r\n}\r\n\r\nexport interface CorporationsCorporationIdCustomsOfficesGet {\r\n alliance_tax_rate?: number;\r\n allow_access_with_standings: boolean;\r\n allow_alliance_access: boolean;\r\n bad_standing_tax_rate?: number;\r\n corporation_tax_rate?: number;\r\n excellent_standing_tax_rate?: number;\r\n good_standing_tax_rate?: number;\r\n neutral_standing_tax_rate?: number;\r\n office_id: number;\r\n reinforce_exit_end: number;\r\n reinforce_exit_start: number;\r\n standing_level?: 'bad' | 'excellent' | 'good' | 'neutral' | 'terrible';\r\n system_id: number;\r\n terrible_standing_tax_rate?: number;\r\n type_id?: number;\r\n}\r\n\r\nexport interface UniverseSchematicsSchematicIdGet {\r\n cycle_time: number;\r\n schematic_name: string;\r\n}\r\n\r\n// --- Routes ---\r\n\r\nexport interface Route {\r\n route: number[];\r\n}\r\n\r\n// --- Search ---\r\n\r\nexport interface CharactersCharacterIdSearchGet {\r\n agent?: number[];\r\n alliance?: number[];\r\n character?: number[];\r\n constellation?: number[];\r\n corporation?: number[];\r\n faction?: number[];\r\n inventory_type?: number[];\r\n region?: number[];\r\n solar_system?: number[];\r\n station?: number[];\r\n structure?: number[];\r\n}\r\n\r\n// --- Skills ---\r\n\r\nexport interface CharactersCharacterIdAttributesGet {\r\n accrued_remap_cooldown_date?: string;\r\n bonus_remaps?: number;\r\n charisma: number;\r\n intelligence: number;\r\n last_remap_date?: string;\r\n memory: number;\r\n perception: number;\r\n willpower: number;\r\n}\r\n\r\nexport interface CharactersSkillqueueSkill {\r\n finish_date?: string;\r\n finished_level: number;\r\n level_end_sp?: number;\r\n level_start_sp?: number;\r\n queue_position: number;\r\n skill_id: number;\r\n start_date?: string;\r\n training_start_sp?: number;\r\n}\r\n\r\nexport interface CharactersSkills {\r\n skills: ({\r\n active_skill_level: number;\r\n skill_id: number;\r\n skillpoints_in_skill: number;\r\n trained_skill_level: number;\r\n })[];\r\n total_sp: number;\r\n unallocated_sp?: number;\r\n}\r\n\r\n// --- Sovereignty ---\r\n\r\nexport interface SovereigntyCampaignsGet {\r\n attackers_score?: number;\r\n campaign_id: number;\r\n constellation_id: number;\r\n defender_id?: number;\r\n defender_score?: number;\r\n event_type: 'tcu_defense' | 'ihub_defense' | 'station_defense' | 'station_freeport';\r\n participants?: ({\r\n alliance_id: number;\r\n score: number;\r\n })[];\r\n solar_system_id: number;\r\n start_time: string;\r\n structure_id: number;\r\n}\r\n\r\nexport interface SovereigntyMapGet {\r\n alliance_id?: number;\r\n corporation_id?: number;\r\n faction_id?: number;\r\n system_id: number;\r\n}\r\n\r\nexport interface SovereigntyStructuresGet {\r\n alliance_id: number;\r\n solar_system_id: number;\r\n structure_id: number;\r\n structure_type_id: number;\r\n vulnerability_occupancy_level?: number;\r\n vulnerable_end_time?: string;\r\n vulnerable_start_time?: string;\r\n}\r\n\r\n// --- Status ---\r\n\r\nexport interface Status {\r\n players: number;\r\n server_version: string;\r\n start_time: string;\r\n vip: boolean;\r\n}\r\n\r\n// --- Universe ---\r\n\r\nexport interface UniverseAncestriesGet {\r\n bloodline_id: number;\r\n description: string;\r\n icon_id?: number;\r\n id: number;\r\n name: string;\r\n short_description?: string;\r\n}\r\n\r\nexport interface UniverseAsteroidBeltsAsteroidBeltIdGet {\r\n name: string;\r\n position: {\r\n x: number;\r\n y: number;\r\n z: number;\r\n };\r\n system_id: number;\r\n}\r\n\r\nexport interface UniverseBloodlinesGet {\r\n bloodline_id: number;\r\n charisma: number;\r\n corporation_id: number;\r\n description: string;\r\n intelligence: number;\r\n memory: number;\r\n name: string;\r\n perception: number;\r\n race_id: number;\r\n ship_type_id: number;\r\n willpower: number;\r\n}\r\n\r\nexport interface UniverseCategoriesCategoryIdGet {\r\n category_id: number;\r\n groups: number[];\r\n name: string;\r\n published: boolean;\r\n}\r\n\r\nexport interface UniverseConstellationsConstellationIdGet {\r\n constellation_id: number;\r\n name: string;\r\n position: {\r\n x: number;\r\n y: number;\r\n z: number;\r\n };\r\n region_id: number;\r\n systems: number[];\r\n}\r\n\r\nexport interface UniverseFactionsGet {\r\n corporation_id?: number;\r\n description: string;\r\n faction_id: number;\r\n is_unique: boolean;\r\n militia_corporation_id?: number;\r\n name: string;\r\n size_factor: number;\r\n solar_system_id?: number;\r\n station_count: number;\r\n station_system_count: number;\r\n}\r\n\r\nexport interface UniverseGraphicsGraphicIdGet {\r\n collision_file?: string;\r\n graphic_file?: string;\r\n graphic_id: number;\r\n icon_folder?: string;\r\n sof_dna?: string;\r\n sof_fation_name?: string;\r\n sof_hull_name?: string;\r\n sof_race_name?: string;\r\n}\r\n\r\nexport interface UniverseGroupsGroupIdGet {\r\n category_id: number;\r\n group_id: number;\r\n name: string;\r\n published: boolean;\r\n types: number[];\r\n}\r\n\r\nexport interface UniverseIdsPost {\r\n agents?: ({\r\n id?: number;\r\n name?: string;\r\n })[];\r\n alliances?: ({\r\n id?: number;\r\n name?: string;\r\n })[];\r\n characters?: ({\r\n id?: number;\r\n name?: string;\r\n })[];\r\n constellations?: ({\r\n id?: number;\r\n name?: string;\r\n })[];\r\n corporations?: ({\r\n id?: number;\r\n name?: string;\r\n })[];\r\n factions?: ({\r\n id?: number;\r\n name?: string;\r\n })[];\r\n inventory_types?: ({\r\n id?: number;\r\n name?: string;\r\n })[];\r\n regions?: ({\r\n id?: number;\r\n name?: string;\r\n })[];\r\n stations?: ({\r\n id?: number;\r\n name?: string;\r\n })[];\r\n systems?: ({\r\n id?: number;\r\n name?: string;\r\n })[];\r\n}\r\n\r\nexport interface UniverseMoonsMoonIdGet {\r\n moon_id: number;\r\n name: string;\r\n position: {\r\n x: number;\r\n y: number;\r\n z: number;\r\n };\r\n system_id: number;\r\n}\r\n\r\nexport interface UniverseNamesPost {\r\n category: 'alliance' | 'character' | 'constellation' | 'corporation' | 'inventory_type' | 'region' | 'solar_system' | 'station' | 'faction';\r\n id: number;\r\n name: string;\r\n}\r\n\r\nexport interface UniversePlanetsPlanetIdGet {\r\n name: string;\r\n planet_id: number;\r\n position: {\r\n x: number;\r\n y: number;\r\n z: number;\r\n };\r\n system_id: number;\r\n type_id: number;\r\n}\r\n\r\nexport interface UniverseRacesGet {\r\n alliance_id: number;\r\n description: string;\r\n name: string;\r\n race_id: number;\r\n}\r\n\r\nexport interface UniverseRegionsRegionIdGet {\r\n constellations: number[];\r\n description?: string;\r\n name: string;\r\n region_id: number;\r\n}\r\n\r\nexport interface UniverseStargatesStargateIdGet {\r\n destination: {\r\n stargate_id: number;\r\n system_id: number;\r\n };\r\n name: string;\r\n position: {\r\n x: number;\r\n y: number;\r\n z: number;\r\n };\r\n stargate_id: number;\r\n system_id: number;\r\n type_id: number;\r\n}\r\n\r\nexport interface UniverseStarsStarIdGet {\r\n age: number;\r\n luminosity: number;\r\n name: string;\r\n radius: number;\r\n solar_system_id: number;\r\n spectral_class: 'K2 V' | 'K4 V' | 'G2 V' | 'G8 V' | 'M7 V' | 'K7 V' | 'M2 V' | 'K5 V' | 'M3 V' | 'G0 V' | 'G7 V' | 'G3 V' | 'F9 V' | 'G5 V' | 'F6 V' | 'K8 V' | 'K9 V' | 'K6 V' | 'G9 V' | 'G6 V' | 'G4 VI' | 'G4 V' | 'F8 V' | 'F2 V' | 'F1 V' | 'K3 V' | 'F0 VI' | 'G1 VI' | 'G0 VI' | 'K1 V' | 'M4 V' | 'M1 V' | 'M6 V' | 'M0 V' | 'K2 IV' | 'G2 VI' | 'K0 V' | 'K5 IV' | 'F5 VI' | 'G6 VI' | 'F6 VI' | 'F2 IV' | 'G3 VI' | 'M8 V' | 'F1 VI' | 'K1 IV' | 'F7 V' | 'G5 VI' | 'M5 V' | 'G7 VI' | 'F5 V' | 'F4 VI' | 'F8 VI' | 'K3 IV' | 'F4 IV' | 'F0 V' | 'G7 IV' | 'G8 VI' | 'F2 VI' | 'F4 V' | 'F7 VI' | 'F3 V' | 'G1 V' | 'G9 VI' | 'F3 IV' | 'F9 VI' | 'M9 V' | 'K0 IV' | 'F1 IV' | 'G4 IV' | 'F3 VI' | 'K4 IV' | 'G5 IV' | 'G3 IV' | 'G1 IV' | 'K7 IV' | 'G0 IV' | 'K6 IV' | 'K9 IV' | 'G2 IV' | 'F9 IV' | 'F0 IV' | 'K8 IV' | 'G8 IV' | 'F6 IV' | 'F5 IV' | 'A0' | 'A0IV' | 'A0IV2';\r\n temperature: number;\r\n type_id: number;\r\n}\r\n\r\nexport interface UniverseStationsStationIdGet {\r\n max_dockable_ship_volume: number;\r\n name: string;\r\n office_rental_cost: number;\r\n owner?: number;\r\n position: {\r\n x: number;\r\n y: number;\r\n z: number;\r\n };\r\n race_id?: number;\r\n reprocessing_efficiency: number;\r\n reprocessing_stations_take: number;\r\n services: 'bounty-missions' | 'assasination-missions' | 'courier-missions' | 'interbus' | 'reprocessing-plant' | 'refinery' | 'market' | 'black-market' | 'stock-exchange' | 'cloning' | 'surgery' | 'dna-therapy' | 'repair-facilities' | 'factory' | 'labratory' | 'gambling' | 'fitting' | 'paintshop' | 'news' | 'storage' | 'insurance' | 'docking' | 'office-rental' | 'jump-clone-facility' | 'loyalty-point-store' | 'navy-offices' | 'security-offices'[];\r\n station_id: number;\r\n system_id: number;\r\n type_id: number;\r\n}\r\n\r\nexport interface UniverseStructuresStructureIdGet {\r\n name: string;\r\n owner_id: number;\r\n position?: {\r\n x: number;\r\n y: number;\r\n z: number;\r\n };\r\n solar_system_id: number;\r\n type_id?: number;\r\n}\r\n\r\nexport interface UniverseSystemJumpsGet {\r\n ship_jumps: number;\r\n system_id: number;\r\n}\r\n\r\nexport interface UniverseSystemKillsGet {\r\n npc_kills: number;\r\n pod_kills: number;\r\n ship_kills: number;\r\n system_id: number;\r\n}\r\n\r\nexport interface UniverseSystemsSystemIdGet {\r\n constellation_id: number;\r\n name: string;\r\n planets?: ({\r\n asteroid_belts?: number[];\r\n moons?: number[];\r\n planet_id: number;\r\n })[];\r\n position: {\r\n x: number;\r\n y: number;\r\n z: number;\r\n };\r\n security_class?: string;\r\n security_status: number;\r\n star_id?: number;\r\n stargates?: number[];\r\n stations?: number[];\r\n system_id: number;\r\n}\r\n\r\nexport interface UniverseTypesTypeIdGet {\r\n capacity?: number;\r\n description: string;\r\n dogma_attributes?: ({\r\n attribute_id: number;\r\n value: number;\r\n })[];\r\n dogma_effects?: ({\r\n effect_id: number;\r\n is_default: boolean;\r\n })[];\r\n graphic_id?: number;\r\n group_id: number;\r\n icon_id?: number;\r\n market_group_id?: number;\r\n mass?: number;\r\n name: string;\r\n packaged_volume?: number;\r\n portion_size?: number;\r\n published: boolean;\r\n radius?: number;\r\n type_id: number;\r\n volume?: number;\r\n}\r\n\r\n// --- Wallet ---\r\n\r\nexport interface CharactersCharacterIdWalletJournalGet {\r\n amount?: number;\r\n balance?: number;\r\n context_id?: number;\r\n context_id_type?: 'structure_id' | 'station_id' | 'market_transaction_id' | 'character_id' | 'corporation_id' | 'alliance_id' | 'eve_system' | 'industry_job_id' | 'contract_id' | 'planet_id' | 'system_id' | 'type_id';\r\n date: string;\r\n description: string;\r\n first_party_id?: number;\r\n id: number;\r\n reason?: string;\r\n ref_type: 'acceleration_gate_fee' | 'achievement_category_milestone_reward' | 'achievement_milestone_reward' | 'advertisement_listing_fee' | 'agent_donation' | 'agent_location_services' | 'agent_miscellaneous' | 'agent_mission_collateral_paid' | 'agent_mission_collateral_refunded' | 'agent_mission_reward' | 'agent_mission_reward_corporation_tax' | 'agent_mission_security_tax' | 'agent_mission_time_bonus_reward' | 'agent_mission_time_bonus_reward_corporation_tax' | 'agent_security_services' | 'agent_services_rendered' | 'agents_preward' | 'air_career_program_reward' | 'alliance_maintainance_fee' | 'alliance_registration_fee' | 'allignment_based_gate_toll' | 'asset_safety_recovery_tax' | 'bounty' | 'bounty_prize' | 'bounty_prize_corporation_tax' | 'bounty_prizes' | 'bounty_reimbursement' | 'bounty_surcharge' | 'brokers_fee' | 'campaign_objective_isk_reward' | 'clone_activation' | 'clone_transfer' | 'contraband_fine' | 'contract_auction_bid' | 'contract_auction_bid_corp' | 'contract_auction_bid_refund' | 'contract_auction_sold' | 'contract_brokers_fee' | 'contract_brokers_fee_corp' | 'contract_collateral' | 'contract_collateral_deposited_corp' | 'contract_collateral_payout' | 'contract_collateral_refund' | 'contract_deposit' | 'contract_deposit_corp' | 'contract_deposit_refund' | 'contract_deposit_sales_tax' | 'contract_price' | 'contract_price_payment_corp' | 'contract_reversal' | 'contract_reward' | 'contract_reward_deposited' | 'contract_reward_deposited_corp' | 'contract_reward_refund' | 'contract_sales_tax' | 'copying' | 'corporate_reward_payout' | 'corporate_reward_tax' | 'corporation_account_withdrawal' | 'corporation_bulk_payment' | 'corporation_dividend_payment' | 'corporation_liquidation' | 'corporation_logo_change_cost' | 'corporation_payment' | 'corporation_registration_fee' | 'cosmetic_market_component_item_purchase' | 'cosmetic_market_skin_purchase' | 'cosmetic_market_skin_sale' | 'cosmetic_market_skin_sale_broker_fee' | 'cosmetic_market_skin_sale_tax' | 'cosmetic_market_skin_transaction' | 'courier_mission_escrow' | 'cspa' | 'cspaofflinerefund' | 'daily_challenge_reward' | 'daily_goal_payouts' | 'daily_goal_payouts_tax' | 'datacore_fee' | 'dna_modification_fee' | 'docking_fee' | 'duel_wager_escrow' | 'duel_wager_payment' | 'duel_wager_refund' | 'ess_escrow_transfer' | 'external_trade_delivery' | 'external_trade_freeze' | 'external_trade_thaw' | 'factory_slot_rental_fee' | 'flux_payout' | 'flux_tax' | 'flux_ticket_repayment' | 'flux_ticket_sale' | 'freelance_jobs_broadcasting_fee' | 'freelance_jobs_duration_fee' | 'freelance_jobs_escrow_refund' | 'freelance_jobs_reward' | 'freelance_jobs_reward_corporation_tax' | 'freelance_jobs_reward_escrow' | 'gm_cash_transfer' | 'gm_plex_fee_refund' | 'industry_job_tax' | 'industry_security_tax' | 'infrastructure_hub_maintenance' | 'inheritance' | 'insurance' | 'insurgency_corruption_contribution_reward' | 'insurgency_suppression_contribution_reward' | 'item_trader_payment' | 'jump_clone_activation_fee' | 'jump_clone_installation_fee' | 'kill_right_fee' | 'lp_store' | 'manufacturing' | 'market_escrow' | 'market_fine_paid' | 'market_provider_tax' | 'market_security_tax' | 'market_transaction' | 'medal_creation' | 'medal_issued' | 'milestone_reward_payment' | 'mission_completion' | 'mission_cost' | 'mission_expiration' | 'mission_reward' | 'npc_bounty_security_tax' | 'office_rental_fee' | 'operation_bonus' | 'opportunity_reward' | 'planetary_construction' | 'planetary_export_tax' | 'planetary_import_tax' | 'player_donation' | 'player_trading' | 'project_discovery_reward' | 'project_discovery_tax' | 'project_payouts' | 'reaction' | 'redeemed_isk_token' | 'release_of_impounded_property' | 'repair_bill' | 'reprocessing_tax' | 'researching_material_productivity' | 'researching_technology' | 'researching_time_productivity' | 'resource_wars_reward' | 'reverse_engineering' | 'season_challenge_reward' | 'security_processing_fee' | 'shares' | 'skill_purchase' | 'skyhook_claim_fee' | 'sovereignity_bill' | 'store_purchase' | 'store_purchase_refund' | 'structure_gate_jump' | 'transaction_tax' | 'under_construction' | 'upkeep_adjustment_fee' | 'war_ally_contract' | 'war_fee' | 'war_fee_surrender';\r\n second_party_id?: number;\r\n tax?: number;\r\n tax_receiver_id?: number;\r\n}\r\n\r\nexport interface CharactersCharacterIdWalletTransactionsGet {\r\n client_id: number;\r\n date: string;\r\n is_buy: boolean;\r\n is_personal: boolean;\r\n journal_ref_id: number;\r\n location_id: number;\r\n quantity: number;\r\n transaction_id: number;\r\n type_id: number;\r\n unit_price: number;\r\n}\r\n\r\nexport interface CorporationsCorporationIdWalletsDivisionJournalGet {\r\n amount?: number;\r\n balance?: number;\r\n context_id?: number;\r\n context_id_type?: 'structure_id' | 'station_id' | 'market_transaction_id' | 'character_id' | 'corporation_id' | 'alliance_id' | 'eve_system' | 'industry_job_id' | 'contract_id' | 'planet_id' | 'system_id' | 'type_id';\r\n date: string;\r\n description: string;\r\n first_party_id?: number;\r\n id: number;\r\n reason?: string;\r\n ref_type: 'acceleration_gate_fee' | 'achievement_category_milestone_reward' | 'achievement_milestone_reward' | 'advertisement_listing_fee' | 'agent_donation' | 'agent_location_services' | 'agent_miscellaneous' | 'agent_mission_collateral_paid' | 'agent_mission_collateral_refunded' | 'agent_mission_reward' | 'agent_mission_reward_corporation_tax' | 'agent_mission_security_tax' | 'agent_mission_time_bonus_reward' | 'agent_mission_time_bonus_reward_corporation_tax' | 'agent_security_services' | 'agent_services_rendered' | 'agents_preward' | 'air_career_program_reward' | 'alliance_maintainance_fee' | 'alliance_registration_fee' | 'allignment_based_gate_toll' | 'asset_safety_recovery_tax' | 'bounty' | 'bounty_prize' | 'bounty_prize_corporation_tax' | 'bounty_prizes' | 'bounty_reimbursement' | 'bounty_surcharge' | 'brokers_fee' | 'campaign_objective_isk_reward' | 'clone_activation' | 'clone_transfer' | 'contraband_fine' | 'contract_auction_bid' | 'contract_auction_bid_corp' | 'contract_auction_bid_refund' | 'contract_auction_sold' | 'contract_brokers_fee' | 'contract_brokers_fee_corp' | 'contract_collateral' | 'contract_collateral_deposited_corp' | 'contract_collateral_payout' | 'contract_collateral_refund' | 'contract_deposit' | 'contract_deposit_corp' | 'contract_deposit_refund' | 'contract_deposit_sales_tax' | 'contract_price' | 'contract_price_payment_corp' | 'contract_reversal' | 'contract_reward' | 'contract_reward_deposited' | 'contract_reward_deposited_corp' | 'contract_reward_refund' | 'contract_sales_tax' | 'copying' | 'corporate_reward_payout' | 'corporate_reward_tax' | 'corporation_account_withdrawal' | 'corporation_bulk_payment' | 'corporation_dividend_payment' | 'corporation_liquidation' | 'corporation_logo_change_cost' | 'corporation_payment' | 'corporation_registration_fee' | 'cosmetic_market_component_item_purchase' | 'cosmetic_market_skin_purchase' | 'cosmetic_market_skin_sale' | 'cosmetic_market_skin_sale_broker_fee' | 'cosmetic_market_skin_sale_tax' | 'cosmetic_market_skin_transaction' | 'courier_mission_escrow' | 'cspa' | 'cspaofflinerefund' | 'daily_challenge_reward' | 'daily_goal_payouts' | 'daily_goal_payouts_tax' | 'datacore_fee' | 'dna_modification_fee' | 'docking_fee' | 'duel_wager_escrow' | 'duel_wager_payment' | 'duel_wager_refund' | 'ess_escrow_transfer' | 'external_trade_delivery' | 'external_trade_freeze' | 'external_trade_thaw' | 'factory_slot_rental_fee' | 'flux_payout' | 'flux_tax' | 'flux_ticket_repayment' | 'flux_ticket_sale' | 'freelance_jobs_broadcasting_fee' | 'freelance_jobs_duration_fee' | 'freelance_jobs_escrow_refund' | 'freelance_jobs_reward' | 'freelance_jobs_reward_corporation_tax' | 'freelance_jobs_reward_escrow' | 'gm_cash_transfer' | 'gm_plex_fee_refund' | 'industry_job_tax' | 'industry_security_tax' | 'infrastructure_hub_maintenance' | 'inheritance' | 'insurance' | 'insurgency_corruption_contribution_reward' | 'insurgency_suppression_contribution_reward' | 'item_trader_payment' | 'jump_clone_activation_fee' | 'jump_clone_installation_fee' | 'kill_right_fee' | 'lp_store' | 'manufacturing' | 'market_escrow' | 'market_fine_paid' | 'market_provider_tax' | 'market_security_tax' | 'market_transaction' | 'medal_creation' | 'medal_issued' | 'milestone_reward_payment' | 'mission_completion' | 'mission_cost' | 'mission_expiration' | 'mission_reward' | 'npc_bounty_security_tax' | 'office_rental_fee' | 'operation_bonus' | 'opportunity_reward' | 'planetary_construction' | 'planetary_export_tax' | 'planetary_import_tax' | 'player_donation' | 'player_trading' | 'project_discovery_reward' | 'project_discovery_tax' | 'project_payouts' | 'reaction' | 'redeemed_isk_token' | 'release_of_impounded_property' | 'repair_bill' | 'reprocessing_tax' | 'researching_material_productivity' | 'researching_technology' | 'researching_time_productivity' | 'resource_wars_reward' | 'reverse_engineering' | 'season_challenge_reward' | 'security_processing_fee' | 'shares' | 'skill_purchase' | 'skyhook_claim_fee' | 'sovereignity_bill' | 'store_purchase' | 'store_purchase_refund' | 'structure_gate_jump' | 'transaction_tax' | 'under_construction' | 'upkeep_adjustment_fee' | 'war_ally_contract' | 'war_fee' | 'war_fee_surrender';\r\n second_party_id?: number;\r\n tax?: number;\r\n tax_receiver_id?: number;\r\n}\r\n\r\nexport interface CorporationsCorporationIdWalletsDivisionTransactionsGet {\r\n client_id: number;\r\n date: string;\r\n is_buy: boolean;\r\n journal_ref_id: number;\r\n location_id: number;\r\n quantity: number;\r\n transaction_id: number;\r\n type_id: number;\r\n unit_price: number;\r\n}\r\n\r\nexport interface CorporationsCorporationIdWalletsGet {\r\n balance: number;\r\n division: number;\r\n}\r\n\r\n// --- Wars ---\r\n\r\nexport interface WarsWarIdGet {\r\n aggressor: {\r\n alliance_id?: number;\r\n corporation_id?: number;\r\n isk_destroyed: number;\r\n ships_killed: number;\r\n };\r\n allies?: ({\r\n alliance_id?: number;\r\n corporation_id?: number;\r\n })[];\r\n declared: string;\r\n defender: {\r\n alliance_id?: number;\r\n corporation_id?: number;\r\n isk_destroyed: number;\r\n ships_killed: number;\r\n };\r\n finished?: string;\r\n id: number;\r\n mutual: boolean;\r\n open_for_allies: boolean;\r\n retracted?: string;\r\n started?: string;\r\n}\r\n\r\nexport interface WarsWarIdKillmailsGet {\r\n killmail_hash: string;\r\n killmail_id: number;\r\n}\r\n\r\n// Operation ID → Response type mapping\r\nexport interface EsiOperationTypes {\r\n 'GetAlliancesAllianceId': AllianceDetail;\r\n 'GetAlliancesAllianceIdContacts': AlliancesAllianceIdContactsGet[];\r\n 'GetAlliancesAllianceIdContactsLabels': AlliancesAllianceIdContactsLabelsGet[];\r\n 'GetAlliancesAllianceIdIcons': AlliancesAllianceIdIconsGet;\r\n 'GetCharactersCharacterId': CharactersDetail;\r\n 'GetCharactersCharacterIdAgentsResearch': CharactersCharacterIdAgentsResearchGet[];\r\n 'GetCharactersCharacterIdAssets': CharactersCharacterIdAssetsGet[];\r\n 'GetCharactersCharacterIdAttributes': CharactersCharacterIdAttributesGet;\r\n 'GetCharactersCharacterIdBlueprints': CharactersCharacterIdBlueprintsGet[];\r\n 'GetCharactersCharacterIdCalendar': CharactersCharacterIdCalendarGet[];\r\n 'GetCharactersCharacterIdCalendarEventId': CharactersCharacterIdCalendarEventIdGet;\r\n 'GetCharactersCharacterIdCalendarEventIdAttendees': CharactersCharacterIdCalendarEventIdAttendeesGet[];\r\n 'GetCharactersCharacterIdClones': CharactersCharacterIdClonesGet;\r\n 'GetCharactersCharacterIdContacts': CharactersCharacterIdContactsGet[];\r\n 'GetCharactersCharacterIdContactsLabels': CharactersCharacterIdContactsLabelsGet[];\r\n 'GetCharactersCharacterIdContracts': CharactersCharacterIdContractsGet[];\r\n 'GetCharactersCharacterIdContractsContractIdBids': CharactersCharacterIdContractsContractIdBidsGet[];\r\n 'GetCharactersCharacterIdContractsContractIdItems': CharactersCharacterIdContractsContractIdItemsGet[];\r\n 'GetCharactersCharacterIdCorporationhistory': CharactersCharacterIdCorporationhistoryGet[];\r\n 'GetCharactersCharacterIdFatigue': CharactersCharacterIdFatigueGet;\r\n 'GetCharactersCharacterIdFittings': CharactersCharacterIdFittingsGet[];\r\n 'GetCharactersCharacterIdFleet': CharactersCharacterIdFleetGet;\r\n 'GetCharactersCharacterIdFwStats': CharactersCharacterIdFwStatsGet;\r\n 'GetCharactersCharacterIdIndustryJobs': CharactersCharacterIdIndustryJobsGet[];\r\n 'GetCharactersCharacterIdKillmailsRecent': CharactersCharacterIdKillmailsRecentGet[];\r\n 'GetCharactersCharacterIdLocation': CharactersCharacterIdLocationGet;\r\n 'GetCharactersCharacterIdLoyaltyPoints': CharactersCharacterIdLoyaltyPointsGet[];\r\n 'GetCharactersCharacterIdMail': CharactersCharacterIdMailGet[];\r\n 'GetCharactersCharacterIdMailLabels': CharactersCharacterIdMailLabelsGet;\r\n 'GetCharactersCharacterIdMailLists': CharactersCharacterIdMailListsGet[];\r\n 'GetCharactersCharacterIdMailMailId': CharactersCharacterIdMailMailIdGet;\r\n 'GetCharactersCharacterIdMedals': CharactersCharacterIdMedalsGet[];\r\n 'GetCharactersCharacterIdMining': CharactersCharacterIdMiningGet[];\r\n 'GetCharactersCharacterIdNotifications': CharactersCharacterIdNotificationsGet[];\r\n 'GetCharactersCharacterIdNotificationsContacts': CharactersCharacterIdNotificationsContactsGet[];\r\n 'GetCharactersCharacterIdOnline': CharactersCharacterIdOnlineGet;\r\n 'GetCharactersCharacterIdOrders': CharactersCharacterIdOrdersGet[];\r\n 'GetCharactersCharacterIdOrdersHistory': CharactersCharacterIdOrdersHistoryGet[];\r\n 'GetCharactersCharacterIdPlanets': CharactersCharacterIdPlanetsGet[];\r\n 'GetCharactersCharacterIdPlanetsPlanetId': CharactersCharacterIdPlanetsPlanetIdGet;\r\n 'GetCharactersCharacterIdPortrait': CharactersCharacterIdPortraitGet;\r\n 'GetCharactersCharacterIdRoles': CharactersCharacterIdRolesGet;\r\n 'GetCharactersCharacterIdSearch': CharactersCharacterIdSearchGet;\r\n 'GetCharactersCharacterIdShip': CharactersCharacterIdShipGet;\r\n 'GetCharactersCharacterIdSkillqueue': CharactersSkillqueueSkill[];\r\n 'GetCharactersCharacterIdSkills': CharactersSkills;\r\n 'GetCharactersCharacterIdStandings': CharactersCharacterIdStandingsGet[];\r\n 'GetCharactersCharacterIdTitles': CharactersCharacterIdTitlesGet[];\r\n 'GetCharactersCharacterIdWalletJournal': CharactersCharacterIdWalletJournalGet[];\r\n 'GetCharactersCharacterIdWalletTransactions': CharactersCharacterIdWalletTransactionsGet[];\r\n 'GetCharactersFreelanceJobsListing': CharactersFreelanceJobsListing;\r\n 'GetCharactersFreelanceJobsParticipation': CharactersFreelanceJobsParticipation;\r\n 'GetContractsPublicBidsContractId': ContractsPublicBidsContractIdGet[];\r\n 'GetContractsPublicItemsContractId': ContractsPublicItemsContractIdGet[];\r\n 'GetContractsPublicRegionId': ContractsPublicRegionIdGet[];\r\n 'GetCorporationCorporationIdMiningExtractions': CorporationCorporationIdMiningExtractionsGet[];\r\n 'GetCorporationCorporationIdMiningObservers': CorporationCorporationIdMiningObserversGet[];\r\n 'GetCorporationCorporationIdMiningObserversObserverId': CorporationCorporationIdMiningObserversObserverIdGet[];\r\n 'GetCorporationsCorporationId': CorporationsDetail;\r\n 'GetCorporationsCorporationIdAlliancehistory': CorporationsCorporationIdAlliancehistoryGet[];\r\n 'GetCorporationsCorporationIdAssets': CorporationsCorporationIdAssetsGet[];\r\n 'GetCorporationsCorporationIdBlueprints': CorporationsCorporationIdBlueprintsGet[];\r\n 'GetCorporationsCorporationIdContacts': CorporationsCorporationIdContactsGet[];\r\n 'GetCorporationsCorporationIdContactsLabels': CorporationsCorporationIdContactsLabelsGet[];\r\n 'GetCorporationsCorporationIdContainersLogs': CorporationsCorporationIdContainersLogsGet[];\r\n 'GetCorporationsCorporationIdContracts': CorporationsCorporationIdContractsGet[];\r\n 'GetCorporationsCorporationIdContractsContractIdBids': CorporationsCorporationIdContractsContractIdBidsGet[];\r\n 'GetCorporationsCorporationIdContractsContractIdItems': CorporationsCorporationIdContractsContractIdItemsGet[];\r\n 'GetCorporationsCorporationIdCustomsOffices': CorporationsCorporationIdCustomsOfficesGet[];\r\n 'GetCorporationsCorporationIdDivisions': CorporationsCorporationIdDivisionsGet;\r\n 'GetCorporationsCorporationIdFacilities': CorporationsCorporationIdFacilitiesGet[];\r\n 'GetCorporationsCorporationIdFwStats': CorporationsCorporationIdFwStatsGet;\r\n 'GetCorporationsCorporationIdIcons': CorporationsCorporationIdIconsGet;\r\n 'GetCorporationsCorporationIdIndustryJobs': CorporationsCorporationIdIndustryJobsGet[];\r\n 'GetCorporationsCorporationIdKillmailsRecent': CorporationsCorporationIdKillmailsRecentGet[];\r\n 'GetCorporationsCorporationIdMedals': CorporationsCorporationIdMedalsGet[];\r\n 'GetCorporationsCorporationIdMedalsIssued': CorporationsCorporationIdMedalsIssuedGet[];\r\n 'GetCorporationsCorporationIdMembersTitles': CorporationsCorporationIdMembersTitlesGet[];\r\n 'GetCorporationsCorporationIdMembertracking': CorporationsCorporationIdMembertrackingGet[];\r\n 'GetCorporationsCorporationIdOrders': CorporationsCorporationIdOrdersGet[];\r\n 'GetCorporationsCorporationIdOrdersHistory': CorporationsCorporationIdOrdersHistoryGet[];\r\n 'GetCorporationsCorporationIdRoles': CorporationsCorporationIdRolesGet[];\r\n 'GetCorporationsCorporationIdRolesHistory': CorporationsCorporationIdRolesHistoryGet[];\r\n 'GetCorporationsCorporationIdShareholders': CorporationsCorporationIdShareholdersGet[];\r\n 'GetCorporationsCorporationIdStandings': CorporationsCorporationIdStandingsGet[];\r\n 'GetCorporationsCorporationIdStarbases': CorporationsCorporationIdStarbasesGet[];\r\n 'GetCorporationsCorporationIdStarbasesStarbaseId': CorporationsCorporationIdStarbasesStarbaseIdGet;\r\n 'GetCorporationsCorporationIdStructures': CorporationsCorporationIdStructuresGet[];\r\n 'GetCorporationsCorporationIdTitles': CorporationsCorporationIdTitlesGet[];\r\n 'GetCorporationsCorporationIdWallets': CorporationsCorporationIdWalletsGet[];\r\n 'GetCorporationsCorporationIdWalletsDivisionJournal': CorporationsCorporationIdWalletsDivisionJournalGet[];\r\n 'GetCorporationsCorporationIdWalletsDivisionTransactions': CorporationsCorporationIdWalletsDivisionTransactionsGet[];\r\n 'GetCorporationsFreelanceJobsListing': CorporationsFreelanceJobsListing;\r\n 'GetCorporationsFreelanceJobsParticipants': CorporationsFreelanceJobsParticipants;\r\n 'GetCorporationsProjectsContribution': CorporationsProjectsContribution;\r\n 'GetCorporationsProjectsContributors': CorporationsProjectsContributors;\r\n 'GetCorporationsProjectsDetail': CorporationsProjectsDetail;\r\n 'GetCorporationsProjectsListing': CorporationsProjectsListing;\r\n 'GetDogmaAttributesAttributeId': DogmaAttributesAttributeIdGet;\r\n 'GetDogmaDynamicItemsTypeIdItemId': DogmaDynamicItemsTypeIdItemIdGet;\r\n 'GetDogmaEffectsEffectId': DogmaEffectsEffectIdGet;\r\n 'GetFleetsFleetId': FleetsFleetIdGet;\r\n 'GetFleetsFleetIdMembers': FleetsFleetIdMembersGet[];\r\n 'GetFleetsFleetIdWings': FleetsFleetIdWingsGet[];\r\n 'GetFreelanceJobsDetail': FreelanceJobsDetail;\r\n 'GetFreelanceJobsListing': FreelanceJobsListing;\r\n 'GetFwLeaderboards': FwLeaderboardsGet;\r\n 'GetFwLeaderboardsCharacters': FwLeaderboardsCharactersGet;\r\n 'GetFwLeaderboardsCorporations': FwLeaderboardsCorporationsGet;\r\n 'GetFwStats': FwStatsGet[];\r\n 'GetFwSystems': FwSystemsGet[];\r\n 'GetFwWars': FwWarsGet[];\r\n 'GetIncursions': IncursionsGet[];\r\n 'GetIndustryFacilities': IndustryFacilitiesGet[];\r\n 'GetIndustrySystems': IndustrySystemsGet[];\r\n 'GetInsurancePrices': InsurancePricesGet[];\r\n 'GetKillmailsKillmailIdKillmailHash': KillmailsKillmailIdKillmailHashGet;\r\n 'GetLoyaltyStoresCorporationIdOffers': LoyaltyStoresCorporationIdOffersGet[];\r\n 'GetMarketsGroupsMarketGroupId': MarketsGroupsMarketGroupIdGet;\r\n 'GetMarketsPrices': MarketsPricesGet[];\r\n 'GetMarketsRegionIdHistory': MarketsRegionIdHistoryGet[];\r\n 'GetMarketsRegionIdOrders': MarketsRegionIdOrdersGet[];\r\n 'GetMarketsStructuresStructureId': MarketsStructuresStructureIdGet[];\r\n 'GetMetaChangelog': MetaChangelog;\r\n 'GetMetaCompatibilityDates': MetaCompatibilityDates;\r\n 'GetMetaStatus': MetaStatus;\r\n 'GetSovereigntyCampaigns': SovereigntyCampaignsGet[];\r\n 'GetSovereigntyMap': SovereigntyMapGet[];\r\n 'GetSovereigntyStructures': SovereigntyStructuresGet[];\r\n 'GetStatus': Status;\r\n 'GetUniverseAncestries': UniverseAncestriesGet[];\r\n 'GetUniverseAsteroidBeltsAsteroidBeltId': UniverseAsteroidBeltsAsteroidBeltIdGet;\r\n 'GetUniverseBloodlines': UniverseBloodlinesGet[];\r\n 'GetUniverseCategoriesCategoryId': UniverseCategoriesCategoryIdGet;\r\n 'GetUniverseConstellationsConstellationId': UniverseConstellationsConstellationIdGet;\r\n 'GetUniverseFactions': UniverseFactionsGet[];\r\n 'GetUniverseGraphicsGraphicId': UniverseGraphicsGraphicIdGet;\r\n 'GetUniverseGroupsGroupId': UniverseGroupsGroupIdGet;\r\n 'GetUniverseMoonsMoonId': UniverseMoonsMoonIdGet;\r\n 'GetUniversePlanetsPlanetId': UniversePlanetsPlanetIdGet;\r\n 'GetUniverseRaces': UniverseRacesGet[];\r\n 'GetUniverseRegionsRegionId': UniverseRegionsRegionIdGet;\r\n 'GetUniverseSchematicsSchematicId': UniverseSchematicsSchematicIdGet;\r\n 'GetUniverseStargatesStargateId': UniverseStargatesStargateIdGet;\r\n 'GetUniverseStarsStarId': UniverseStarsStarIdGet;\r\n 'GetUniverseStationsStationId': UniverseStationsStationIdGet;\r\n 'GetUniverseStructuresStructureId': UniverseStructuresStructureIdGet;\r\n 'GetUniverseSystemJumps': UniverseSystemJumpsGet[];\r\n 'GetUniverseSystemKills': UniverseSystemKillsGet[];\r\n 'GetUniverseSystemsSystemId': UniverseSystemsSystemIdGet;\r\n 'GetUniverseTypesTypeId': UniverseTypesTypeIdGet;\r\n 'GetWarsWarId': WarsWarIdGet;\r\n 'GetWarsWarIdKillmails': WarsWarIdKillmailsGet[];\r\n 'PostCharactersAffiliation': CharactersAffiliationPost[];\r\n 'PostCharactersCharacterIdAssetsLocations': CharactersCharacterIdAssetsLocationsPost[];\r\n 'PostCharactersCharacterIdAssetsNames': CharactersCharacterIdAssetsNamesPost[];\r\n 'PostCorporationsCorporationIdAssetsLocations': CorporationsCorporationIdAssetsLocationsPost[];\r\n 'PostCorporationsCorporationIdAssetsNames': CorporationsCorporationIdAssetsNamesPost[];\r\n 'PostRoute': Route;\r\n 'PostUniverseIds': UniverseIdsPost;\r\n 'PostUniverseNames': UniverseNamesPost[];\r\n}\r\n","export { esiEnum } from './esiEnum';\r\nexport * from './common';\r\nexport * from './access-lists';\r\nexport * from './alliance';\r\nexport * from './assets';\r\nexport * from './calendar';\r\nexport * from './character';\r\nexport * from './clones';\r\nexport * from './contacts';\r\nexport * from './contracts';\r\nexport * from './cosmetics';\r\nexport * from './corporation';\r\nexport * from './corporation-projects';\r\nexport * from './dogma';\r\nexport * from './faction-warfare';\r\nexport * from './fittings';\r\nexport * from './fleet';\r\nexport * from './freelance-jobs';\r\nexport * from './incursions';\r\nexport * from './industry';\r\nexport * from './insurance';\r\nexport * from './killmails';\r\nexport * from './location';\r\nexport * from './loyalty';\r\nexport * from './mail';\r\nexport * from './market';\r\nexport * from './mercenary';\r\nexport * from './meta';\r\nexport * from './paragon-hub';\r\nexport * from './military-campaigns';\r\nexport * from './pi';\r\nexport * from './skills';\r\nexport * from './skyhooks';\r\nexport * from './sovereignty';\r\nexport * from './status';\r\nexport * from './universe';\r\nexport * from './wallet';\r\nexport * from './wars';\r\n\r\n// Drift detection (scripts/generate-schema-drift-report.ts) compares these\r\n// hand-written schemas directly against the live ESI OpenAPI spec at runtime.\r\n// No generated Zod schemas are needed.\r\n"],"mappings":";;;;;;;AA2BO,IAAM,oBAAN,MAAwB;AAAA,EACrB,sBAA4C,CAAC;AAAA,EAC7C,uBAA8C,CAAC;AAAA,EAEvD,sBAAsB,IAAoC;AACxD,SAAK,oBAAoB,KAAK,EAAE;AAChC,WAAO,MAAM;AACX,WAAK,sBAAsB,KAAK,oBAAoB;AAAA,QAClD,CAAC,MAAM,MAAM;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EAEA,uBAAuB,IAAqC;AAC1D,SAAK,qBAAqB,KAAK,EAAE;AACjC,WAAO,MAAM;AACX,WAAK,uBAAuB,KAAK,qBAAqB;AAAA,QACpD,CAAC,MAAM,MAAM;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,yBACJ,SACyB;AACzB,QAAI,MAAM;AACV,eAAW,eAAe,KAAK,qBAAqB;AAClD,YAAM,MAAM,YAAY,GAAG;AAAA,IAC7B;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,0BACJ,SAC0B;AAC1B,QAAI,MAAM;AACV,eAAW,eAAe,KAAK,sBAAsB;AACnD,YAAM,MAAM,YAAY,GAAG;AAAA,IAC7B;AACA,WAAO;AAAA,EACT;AAAA,EAEA,kBAA2B;AACzB,WACE,KAAK,oBAAoB,SAAS,KAClC,KAAK,qBAAqB,SAAS;AAAA,EAEvC;AAAA,EAEA,QAAc;AACZ,SAAK,sBAAsB,CAAC;AAC5B,SAAK,uBAAuB,CAAC;AAAA,EAC/B;AACF;;;AChEO,IAAM,YAAN,MAAgB;AAAA,EAiBrB,YACU,UACA,MACA,aACR;AAHQ;AACA;AACA;AAER,SAAK,OAAO,KAAK,KAAK,QAAQ,OAAO,EAAE;AAAA,EACzC;AAAA,EALU;AAAA,EACA;AAAA,EACA;AAAA,EAnBF;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAgC,IAAI,kBAAkB;AAAA,EACtD,QAAuB;AAAA,EACvB,cAAmC;AAAA,EACnC,iBAAyC;AAAA,EACzC,UAAkB;AAAA,EAClB,eAAqC;AAAA,EACrC,cAAkC;AAAA,EAClC,gBAAuC;AAAA,EACvC,mBAA4B;AAAA,EAC5B,kBAA2B;AAAA,EAC3B;AAAA,EACA;AAAA,EAUR,aAAqB;AACnB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,WAAW,SAAuB;AAChC,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,WAA0B;AACxB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,SAAS,OAA4B;AACnC,SAAK,QAAQ;AAAA,EACf;AAAA,EAEA,iBAAsC;AACpC,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,eAAe,SAAoC;AACjD,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,oBAA4C;AAC1C,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,kBAAkB,IAAkC;AAClD,SAAK,iBAAiB;AAAA,EACxB;AAAA,EAEA,kBAAwC;AACtC,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,gBAAgB,OAAmC;AACjD,SAAK,eAAe;AAAA,EACtB;AAAA,EAEA,iBAAqC;AACnC,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,eAAe,QAAkC;AAC/C,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,mBAA0C;AACxC,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,iBAAiB,UAAuC;AACtD,SAAK,gBAAgB;AAAA,EACvB;AAAA,EAEA,sBAA+B;AAC7B,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,oBAAoB,UAAyB;AAC3C,SAAK,mBAAmB;AAAA,EAC1B;AAAA,EAEA,qBAA8B;AAC5B,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,mBAAmB,UAAyB;AAC1C,SAAK,kBAAkB;AAAA,EACzB;AAAA,EAEA,gBAAmC;AACjC,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,sBAAsB,IAAoC;AACxD,WAAO,KAAK,WAAW,sBAAsB,EAAE;AAAA,EACjD;AAAA,EAEA,uBAAuB,IAAqC;AAC1D,WAAO,KAAK,WAAW,uBAAuB,EAAE;AAAA,EAClD;AAAA,EAEA,yBAA6C;AAC3C,WAAO,KAAK,cAAc,UAAU,KAAK,WAAW,KAAK;AAAA,EAC3D;AAAA,EAEA,UAAkB;AAChB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,gBAA2C;AACzC,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,cAAc,YAA6C;AACzD,SAAK,aAAa;AAAA,EACpB;AAAA,EAEA,cAAkC;AAChC,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,YAAY,UAAoC;AAC9C,SAAK,WAAW;AAAA,EAClB;AAAA,EAEA,uBAA2C;AACzC,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,qBAAqB,MAAgC;AACnD,SAAK,oBAAoB;AAAA,EAC3B;AAAA,EAEA,eAAe,OAAqB;AAClC,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,iBAAiB,UAA2C;AAC1D,SAAK,gBAAgB;AAAA,EACvB;AAAA,EAEA,mBAA4B;AAC1B,WAAO,KAAK,kBAAkB;AAAA,EAChC;AAAA,EAEA,SAAkC;AAChC,WAAO;AAAA,MACL,MAAM,KAAK;AAAA,MACX,YAAY,KAAK;AAAA,MACjB,SAAS,KAAK;AAAA,MACd,UAAU,KAAK,UAAU;AAAA,MACzB,gBAAgB,KAAK,gBAAgB;AAAA,MACrC,mBAAmB,KAAK,mBAAmB;AAAA,MAC3C,iBAAiB,KAAK,iBAAiB;AAAA,MACvC,kBAAkB,KAAK,kBAAkB;AAAA,MACzC,kBAAkB,KAAK;AAAA,MACvB,iBAAiB,KAAK;AAAA,MACtB,UAAU,KAAK;AAAA,MACf,mBAAmB,KAAK;AAAA,IAC1B;AAAA,EACF;AAAA,EAEA,MAAM,eAAgC;AACpC,QAAI,CAAC,KAAK,eAAe;AACvB,YAAM,IAAI,MAAM,8BAA8B;AAAA,IAChD;AAEA,QAAI,KAAK,iBAAiB;AACxB,aAAO,KAAK;AAAA,IACd;AAEA,SAAK,kBAAkB,KAAK,cAAc,EAAE;AAAA,MAC1C,CAAC,UAAU;AACT,aAAK,cAAc;AACnB,aAAK,kBAAkB;AACvB,eAAO;AAAA,MACT;AAAA,MACA,CAAC,QAAQ;AACP,aAAK,kBAAkB;AACvB,cAAM;AAAA,MACR;AAAA,IACF;AAEA,WAAO,KAAK;AAAA,EACd;AACF;;;ACjNA,OAAO,UAAU;AAGjB,IAAM,aAAa,KAAK,EAAE,OAAO,QAAQ,IAAI,iBAAiB,OAAO,CAAC;AAEtE,IAAM,SAAkB;AAAA,EACtB,MAAM,CAAC,QAAgB;AACrB,eAAW,KAAK,GAAG;AAAA,EACrB;AAAA,EACA,MAAM,CAAC,QAAgB;AACrB,eAAW,KAAK,GAAG;AAAA,EACrB;AAAA,EACA,OAAO,CAAC,QAAgB;AACtB,eAAW,MAAM,GAAG;AAAA,EACtB;AAAA,EACA,OAAO,CAAC,QAAgB;AACtB,eAAW,MAAM,GAAG;AAAA,EACtB;AACF;AAEA,IAAO,iBAAQ;;;ACff,IAAI,eAAwB;AAErB,IAAM,YAAY,CAAC,iBAAgC;AACxD,iBAAe;AACjB;AAIO,IAAM,UAAU,CAAC,YAAoB;AAC1C,eAAa,KAAK,OAAO;AAC3B;AAEO,IAAM,WAAW,CAAC,YAAoB;AAC3C,eAAa,MAAM,OAAO;AAC5B;AAEO,IAAM,UAAU,CAAC,YAAoB;AAC1C,eAAa,KAAK,OAAO;AAC3B;AAEO,IAAM,WAAW,CAAC,YAAoB;AAC3C,eAAa,MAAM,OAAO;AAC5B;;;ACJO,IAAM,iBAAN,MAAgD;AAAA,EAC7C,WAAuC,oBAAI,IAAI;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACT,eAAsD;AAAA,EAE9D,YAAY,SAA+B,CAAC,GAAG;AAC7C,SAAK,mBAAmB,OAAO,oBAAoB;AACnD,SAAK,iBAAiB,OAAO,kBAAkB;AAC/C,SAAK,sBAAsB,OAAO,uBAAuB;AACzD,SAAK,mBAAmB,OAAO,oBAAoB;AACnD,SAAK,cAAc,OAAO,eAAe;AAEzC,UAAM,oBAAoB,OAAO;AACjC,QAAI,sBAAsB,UAAa,oBAAoB,GAAG;AAC5D,WAAK,kBAAkB,iBAAiB;AAAA,IAC1C;AAAA,EACF;AAAA,EAEQ,OAAO,UAA0B;AACvC,WAAO,SAAS,MAAM,GAAG,EAAE,CAAC;AAAA,EAC9B;AAAA,EAEQ,YAAY,KAA4B;AAC9C,QAAI,SAAS,KAAK,SAAS,IAAI,GAAG;AAClC,QAAI,CAAC,QAAQ;AACX,eAAS;AAAA,QACP,OAAO;AAAA,QACP,UAAU;AAAA,QACV,iBAAiB;AAAA,QACjB,kBAAkB;AAAA,MACpB;AACA,WAAK,SAAS,IAAI,KAAK,MAAM;AAAA,IAC/B;AACA,WAAO;AAAA,EACT;AAAA,EAEA,aAAa,UAAwB;AACnC,UAAM,MAAM,KAAK,OAAO,QAAQ;AAChC,UAAM,SAAS,KAAK,YAAY,GAAG;AAEnC,QAAI,OAAO,UAAU,SAAU;AAE/B,QAAI,OAAO,UAAU,QAAQ;AAC3B,YAAM,UAAU,KAAK,IAAI,IAAI,OAAO;AACpC,UAAI,WAAW,KAAK,gBAAgB;AAClC,eAAO,QAAQ;AACf,eAAO,mBAAmB;AAC1B,gBAAQ,yBAAyB,GAAG,0BAA0B;AAC9D;AAAA,MACF;AACA,YAAM,cAAc,KAAK,iBAAiB;AAC1C,YAAM,IAAI,iBAAiB,KAAK,OAAO,UAAU,WAAW;AAAA,IAC9D;AAEA,QAAI,OAAO,UAAU,aAAa;AAChC,UAAI,OAAO,oBAAoB,KAAK,qBAAqB;AACvD,cAAM,IAAI,iBAAiB,KAAK,OAAO,UAAU,KAAK,cAAc;AAAA,MACtE;AACA,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,cAAc,UAAwB;AACpC,UAAM,MAAM,KAAK,OAAO,QAAQ;AAChC,UAAM,SAAS,KAAK,SAAS,IAAI,GAAG;AACpC,QAAI,CAAC,OAAQ;AAEb,QAAI,OAAO,UAAU,aAAa;AAChC,cAAQ,sBAAsB,GAAG,yBAAyB;AAAA,IAC5D;AAEA,WAAO,QAAQ;AACf,WAAO,WAAW;AAClB,WAAO,mBAAmB;AAAA,EAC5B;AAAA,EAEA,cAAc,UAAkB,YAA0B;AAExD,QACE,eAAe,KACf,aAAa,OACb,eAAe,OACf,eAAe,KACf;AACA;AAAA,IACF;AAEA,UAAM,MAAM,KAAK,OAAO,QAAQ;AAChC,UAAM,SAAS,KAAK,YAAY,GAAG;AAEnC,WAAO;AACP,WAAO,kBAAkB,KAAK,IAAI;AAElC,QAAI,OAAO,UAAU,aAAa;AAChC,aAAO,QAAQ;AACf;AAAA,QACE,yBAAyB,GAAG,wBAAwB,OAAO,QAAQ;AAAA,MACrE;AACA;AAAA,IACF;AAEA,QAAI,OAAO,YAAY,KAAK,kBAAkB;AAC5C,aAAO,QAAQ;AACf;AAAA,QACE,sBAAsB,GAAG,UAAU,OAAO,QAAQ;AAAA,MACpD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,SAAS,UAAgC;AACvC,UAAM,MAAM,KAAK,OAAO,QAAQ;AAChC,UAAM,SAAS,KAAK,SAAS,IAAI,GAAG;AACpC,QAAI,CAAC,OAAQ,QAAO;AAEpB,QAAI,OAAO,UAAU,QAAQ;AAC3B,YAAM,UAAU,KAAK,IAAI,IAAI,OAAO;AACpC,UAAI,WAAW,KAAK,gBAAgB;AAClC,eAAO;AAAA,MACT;AAAA,IACF;AAEA,WAAO,OAAO;AAAA,EAChB;AAAA,EAEA,WAIE;AACA,UAAM,WACJ,CAAC;AACH,QAAI,eAAe;AAEnB,eAAW,CAAC,KAAK,MAAM,KAAK,KAAK,SAAS,QAAQ,GAAG;AACnD,YAAM,QAAQ,KAAK,SAAS,GAAG;AAE/B,eAAS,GAAG,IAAI,EAAE,OAAO,UAAU,OAAO,SAAS;AACnD,UAAI,UAAU,OAAQ;AAAA,IACxB;AAEA,WAAO;AAAA,MACL,eAAe,KAAK,SAAS;AAAA,MAC7B;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,UAAyB;AAC7B,QAAI,UAAU;AACZ,WAAK,SAAS,OAAO,KAAK,OAAO,QAAQ,CAAC;AAAA,IAC5C,OAAO;AACL,WAAK,SAAS,MAAM;AAAA,IACtB;AAAA,EACF;AAAA,EAEA,UAAkB;AAChB,UAAM,MAAM,KAAK,IAAI;AACrB,QAAI,UAAU;AACd,eAAW,CAAC,KAAK,MAAM,KAAK,KAAK,SAAS,QAAQ,GAAG;AACnD,UACE,OAAO,UAAU,YACjB,OAAO,aAAa,KACpB,OAAO,kBAAkB,KACzB,MAAM,OAAO,kBAAkB,KAAK,kBACpC;AACA,aAAK,SAAS,OAAO,GAAG;AACxB;AAAA,MACF;AAAA,IACF;AACA,QAAI,UAAU,GAAG;AACf,cAAQ,oCAAoC,OAAO,iBAAiB;AAAA,IACtE;AACA,WAAO;AAAA,EACT;AAAA,EAEA,iBAA0C;AACxC,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,UAAgB;AACd,QAAI,KAAK,cAAc;AACrB,oBAAc,KAAK,YAAY;AAC/B,WAAK,eAAe;AAAA,IACtB;AACA,SAAK,SAAS,MAAM;AAAA,EACtB;AAAA,EAEA,WAAiB;AACf,SAAK,QAAQ;AAAA,EACf;AAAA,EAEQ,kBAAkB,YAA0B;AAClD,SAAK,eAAe,YAAY,MAAM;AACpC,WAAK,QAAQ;AAAA,IACf,GAAG,UAAU;AAEb,SAAK,aAAa,MAAM;AAAA,EAC1B;AACF;AAEO,IAAM,mBAAN,cAA+B,MAAM;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EAET,YAAY,UAAkB,UAAkB,cAAsB;AACpE;AAAA,MACE,4BAA4B,QAAQ,UAAU,QAAQ,0BAA0B,KAAK,KAAK,eAAe,GAAI,CAAC;AAAA,IAChH;AACA,SAAK,OAAO;AACZ,SAAK,WAAW;AAChB,SAAK,WAAW;AAChB,SAAK,eAAe;AAAA,EACtB;AACF;;;ACjPA,IAAM,mBAAmB;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,SAAS,YAAY,KAAkC;AAC5D,MAAI,CAAC,IAAK,QAAO;AACjB,MAAI;AACF,UAAM,SAAS,IAAI,IAAI,GAAG;AAC1B,eAAW,SAAS,kBAAkB;AACpC,UAAI,OAAO,aAAa,IAAI,KAAK,GAAG;AAClC,eAAO,aAAa,IAAI,OAAO,YAAY;AAAA,MAC7C;AAAA,IACF;AACA,WAAO,OAAO,SAAS;AAAA,EACzB,QAAQ;AACN,UAAM,SAAS,IAAI,QAAQ,GAAG;AAC9B,WAAO,UAAU,IAAI,IAAI,UAAU,GAAG,MAAM,IAAI,uBAAuB;AAAA,EACzE;AACF;AAEO,IAAM,WAAN,cAAuB,MAAM;AAAA,EAGlC,YACkB,YAChB,SACA,KACgB,WAChB;AACA,UAAM,OAAO;AALG;AAGA;AAGhB,SAAK,OAAO;AACZ,SAAK,MAAM,YAAY,GAAG;AAAA,EAC5B;AAAA,EARkB;AAAA,EAGA;AAAA,EANF;AAAA,EAahB,gBAAyB;AACvB,WAAO,KAAK,eAAe,OAAO,KAAK,eAAe;AAAA,EACxD;AAAA,EAEA,aAAsB;AACpB,WAAO,KAAK,eAAe;AAAA,EAC7B;AAAA,EAEA,iBAA0B;AACxB,WAAO,KAAK,eAAe;AAAA,EAC7B;AAAA,EAEA,cAAuB;AACrB,WAAO,KAAK,eAAe;AAAA,EAC7B;AAAA,EAEA,gBAAyB;AACvB,WAAO,KAAK,cAAc;AAAA,EAC5B;AAAA,EAEA,YAAqB;AACnB,WAAO,KAAK,eAAe;AAAA,EAC7B;AAAA,EAEA,IAAI,YAAqB;AACvB,WACE,KAAK,eAAe,KACpB,KAAK,eAAe,OACpB,KAAK,eAAe,OACpB,KAAK,eAAe,OACpB,KAAK,eAAe,OACpB,KAAK,eAAe;AAAA,EAExB;AACF;AAEO,SAAS,WAAW,OAAmC;AAC5D,SAAO,iBAAiB;AAC1B;AAEO,SAAS,cAAc,OAAmC;AAC/D,SAAO,iBAAiB,YAAY,MAAM,cAAc;AAC1D;AAEO,SAAS,WAAW,OAAmC;AAC5D,SAAO,iBAAiB,YAAY,MAAM,WAAW;AACvD;AAEO,SAAS,eAAe,OAAmC;AAChE,SAAO,iBAAiB,YAAY,MAAM,eAAe;AAC3D;AAEO,SAAS,YAAY,OAAmC;AAC7D,SAAO,iBAAiB,YAAY,MAAM,YAAY;AACxD;AAEO,SAAS,cAAc,OAAmC;AAC/D,SAAO,iBAAiB,YAAY,MAAM,cAAc;AAC1D;AAEO,IAAM,eAAN,cAA2B,SAAS;AAAA,EACzC,YACkB,WAChB,KACA,WACA;AACA,UAAM,GAAG,2BAA2B,SAAS,MAAM,KAAK,SAAS;AAJjD;AAKhB,SAAK,OAAO;AAAA,EACd;AAAA,EANkB;AAOpB;AAEO,SAAS,UAAU,OAAuC;AAC/D,SAAO,iBAAiB;AAC1B;AAEO,SAAS,YAAY,OAAmC;AAC7D,SAAO,iBAAiB,YAAY,MAAM;AAC5C;AAMO,SAAS,cAAc,OAA2C;AACvE,SAAO,iBAAiB;AAC1B;AAEO,IAAM,aAAa,CACxB,SACA,OAAe,SACf,QACU;AACV,QAAM,QAAQ,IAAI,MAAM,IAAI,IAAI,KAAK,OAAO,EAAE;AAC9C,MAAI,KAAK;AACP,IAAC,MAAkC,MAAM;AAAA,EAC3C;AACA,SAAO;AACT;AAIO,IAAM,qBAAN,cAAiC,SAAS;AAAA,EAC/B;AAAA,EACA;AAAA,EAEhB,YACE,KACA,UACA,WACA,YAAiC,YACjC;AACA,UAAM,UAAU,YAAY,GAAG,KAAK;AACpC,UAAM,QAAQ,cAAc,YAAY,iBAAiB;AACzD,UAAM,GAAG,GAAG,KAAK,0BAA0B,OAAO,IAAI,KAAK,SAAS;AACpE,SAAK,OAAO;AACZ,SAAK,kBAAkB;AACvB,SAAK,YAAY;AAAA,EACnB;AACF;AAEO,SAAS,kBAAkB,OAA6C;AAC7E,SAAO,iBAAiB;AAC1B;;;ACtKA,SAAS,kBAAkB;AAGpB,SAAS,cACd,KACA,QACA,eAAwB,OAChB;AACR,MAAI,CAAC,aAAc,QAAO;AAC1B,QAAM,aAAa,OAAO,uBAAuB;AACjD,MAAI,CAAC,WAAY,QAAO;AACxB,QAAM,OAAO,WAAW,QAAQ,EAC7B,OAAO,UAAU,EACjB,OAAO,KAAK,EACZ,MAAM,GAAG,EAAE;AACd,SAAO,GAAG,IAAI,IAAI,GAAG;AACvB;;;AChBO,IAAM,eAAe;AACrB,IAAM,kBAAkB;AACxB,IAAM,aAAa,GAAG,YAAY,IAAI,eAAe;AACrD,IAAM,qBAAqB;;;ACO3B,IAAM,uBAAuB,CAClC,YACuB;AACvB,QAAM,eAAe,QAAQ,eAAe,KAAK,QAAQ,eAAe;AACxE,MAAI,CAAC,aAAc,QAAO;AAC1B,QAAM,QAAQ,gBAAgB,KAAK,YAAY;AAC/C,SAAO,QAAQ,SAAS,MAAM,CAAC,GAAI,EAAE,IAAI,MAAO;AAClD;AAKO,SAAS,oBACd,QACA,KACA,QACA,cACA,SACA,MACAA,eACa;AACb,QAAM,UAAuB;AAAA,IAC3B,QAAQ;AAAA,IACR,mBAAmB;AAAA,IACnB,cAAc;AAAA,IACd,wBAAwB,OAAO,qBAAqB,KAAK;AAAA,EAC3D;AAEA,QAAM,WAAW,OAAO,YAAY;AACpC,MAAI,UAAU;AACZ,YAAQ,iBAAiB,IAAI;AAAA,EAC/B;AAEA,MAAI,cAAc;AAChB,UAAM,aAAa,OAAO,uBAAuB;AACjD,QAAI,CAAC,YAAY;AACf,YAAM;AAAA,QACJ;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,YAAQ,eAAe,IAAI;AAAA,EAC7B;AAEA,QAAM,QAAQA,cAAa,MAAM;AACjC,MAAI,WAAW,WAAW,SAAS,OAAO;AACxC,UAAM,MAAM,cAAc,KAAK,QAAQ,YAAY;AACnD,UAAM,aAAa,MAAM,QAAQ,GAAG;AACpC,QAAI,YAAY;AACd,cAAQ,eAAe,IAAI;AAC3B,eAAS,gCAAgC,UAAU,EAAE;AAAA,IACvD;AAAA,EACF;AAEA,MAAI,MAAM;AACR,YAAQ,cAAc,IAAI;AAAA,EAC5B;AAEA,SAAO;AACT;;;ACrEO,SAAS,aAAa,GAAmB;AAC9C,SAAO,EAAE,QAAQ,UAAU,CAAC,MAAM,IAAI,EAAE,YAAY,CAAC,EAAE;AACzD;;;ACCO,IAAM,eAAuC;AAAA,EAClD,iBAAiB;AAAA,EACjB,+BAA+B;AAAA,EAC/B,wCAAwC;AAAA,EACxC,+CAA+C;AAAA,EAC/C,4CAA4C;AAAA,EAC5C,iCAAiC;AAAA,EACjC,iDAAiD;AAAA,EACjD,wCAAwC;AAAA,EACxC,4CAA4C;AAAA,EAC5C,4CAA4C;AAAA,EAC5C,0CAA0C;AAAA,EAC1C,qDAAqD;AAAA,EACrD,qDAAqD;AAAA,EACrD,+DAA+D;AAAA,EAC/D,wCAAwC;AAAA,EACxC,0CAA0C;AAAA,EAC1C,iDAAiD;AAAA,EACjD,2CAA2C;AAAA,EAC3C,8DAA8D;AAAA,EAC9D,+DAA+D;AAAA,EAC/D,oDAAoD;AAAA,EACpD,yCAAyC;AAAA,EACzC,0CAA0C;AAAA,EAC1C,uCAAuC;AAAA,EACvC,gDAAgD;AAAA,EAChD,uEAAuE;AAAA,EACvE,0CAA0C;AAAA,EAC1C,+CAA+C;AAAA,EAC/C,kDAAkD;AAAA,EAClD,0CAA0C;AAAA,EAC1C,gDAAgD;AAAA,EAChD,sCAAsC;AAAA,EACtC,gDAAgD;AAAA,EAChD,6CAA6C;AAAA,EAC7C,4CAA4C;AAAA,EAC5C,wCAAwC;AAAA,EACxC,wCAAwC;AAAA,EACxC,+CAA+C;AAAA,EAC/C,wDAAwD;AAAA,EACxD,wCAAwC;AAAA,EACxC,wCAAwC;AAAA,EACxC,gDAAgD;AAAA,EAChD,yCAAyC;AAAA,EACzC,qDAAqD;AAAA,EACrD,uCAAuC;AAAA,EACvC,wCAAwC;AAAA,EACxC,sCAAsC;AAAA,EACtC,4CAA4C;AAAA,EAC5C,wCAAwC;AAAA,EACxC,2CAA2C;AAAA,EAC3C,wCAAwC;AAAA,EACxC,wCAAwC;AAAA,EACxC,gDAAgD;AAAA,EAChD,qDAAqD;AAAA,EACrD,+BAA+B;AAAA,EAC/B,oCAAoC;AAAA,EACpC,2CAA2C;AAAA,EAC3C,4CAA4C;AAAA,EAC5C,uDAAuD;AAAA,EACvD,qDAAqD;AAAA,EACrD,mEAAmE;AAAA,EACnE,qCAAqC;AAAA,EACrC,qDAAqD;AAAA,EACrD,4CAA4C;AAAA,EAC5C,gDAAgD;AAAA,EAChD,8CAA8C;AAAA,EAC9C,qDAAqD;AAAA,EACrD,qDAAqD;AAAA,EACrD,+CAA+C;AAAA,EAC/C,kEAAkE;AAAA,EAClE,mEAAmE;AAAA,EACnE,qDAAqD;AAAA,EACrD,+CAA+C;AAAA,EAC/C,gDAAgD;AAAA,EAChD,2CAA2C;AAAA,EAC3C,mDAAmD;AAAA,EACnD,sDAAsD;AAAA,EACtD,4CAA4C;AAAA,EAC5C,mDAAmD;AAAA,EACnD,6CAA6C;AAAA,EAC7C,mDAAmD;AAAA,EACnD,oDAAoD;AAAA,EACpD,oDAAoD;AAAA,EACpD,4CAA4C;AAAA,EAC5C,oDAAoD;AAAA,EACpD,2DAA2D;AAAA,EAC3D,uFAAuF;AAAA,EACvF,2CAA2C;AAAA,EAC3C,mDAAmD;AAAA,EACnD,kDAAkD;AAAA,EAClD,+CAA+C;AAAA,EAC/C,+CAA+C;AAAA,EAC/C,6DAA6D;AAAA,EAC7D,gDAAgD;AAAA,EAChD,4CAA4C;AAAA,EAC5C,6CAA6C;AAAA,EAC7C,gEAAgE;AAAA,EAChE,qEAAqE;AAAA,EACrE,yBAAyB;AAAA,EACzB,iCAAiC;AAAA,EACjC,+BAA+B;AAAA,EAC/B,+BAA+B;AAAA,EAC/B,kBAAkB;AAAA,EAClB,kBAAkB;AAAA,EAClB,2BAA2B;AAAA,EAC3B,wBAAwB;AAAA,EACxB,wBAAwB;AAAA,EACxB,+CAA+C;AAAA,EAC/C,kCAAkC;AAAA,EAClC,iCAAiC;AAAA,EACjC,sBAAsB;AAAA,EACtB,yCAAyC;AAAA,EACzC,sBAAsB;AAAA,EACtB,gCAAgC;AAAA,EAChC,6BAA6B;AAAA,EAC7B,uBAAuB;AAAA,EACvB,8BAA8B;AAAA,EAC9B,cAAc;AAAA,EACd,0CAA0C;AAAA,EAC1C,2BAA2B;AAAA,EAC3B,0CAA0C;AAAA,EAC1C,6BAA6B;AAAA,EAC7B,6BAA6B;AAAA,EAC7B,YAAY;AAAA,EACZ,qBAAqB;AAAA,EACrB,+BAA+B;AACjC;;;AC1GO,SAAS,cACd,QACA,cACoB;AACpB,QAAM,aAAa,aAChB,QAAQ,OAAO,EAAE,EACjB,QAAQ,cAAc,CAAC,GAAG,SAAiB,IAAI,aAAa,IAAI,CAAC,GAAG;AACvE,QAAM,MAAM,GAAG,MAAM,IAAI,UAAU;AACnC,QAAM,UAAU,aAAa,GAAG;AAChC,SAAO,OAAO,YAAY,WAAW,UAAU,MAAO;AACxD;AAKO,SAAS,qBACd,QACA,KACA,QACA,cACAC,eACA,eAAwB,OACG;AAC3B,MAAI,WAAW,SAAS,CAAC,aAAc,QAAO;AAC9C,QAAM,YAAY,cAAc,QAAQ,YAAY;AACpD,MAAI,CAAC,UAAW,QAAO;AACvB,QAAM,QAAQA,cAAa,MAAM;AACjC,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,MAAM,cAAc,KAAK,QAAQ,YAAY;AACnD,QAAM,QAAQ,MAAM,IAAI,GAAG;AAC3B,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,MAAM,KAAK,IAAI,IAAI,MAAM;AAC/B,MAAI,MAAM,WAAW;AACnB;AAAA,MACE,4BAA4B,GAAG,SAAS,KAAK,MAAM,MAAM,GAAI,CAAC,UAAU,KAAK,MAAM,YAAY,GAAI,CAAC;AAAA,IACtG;AACA,WAAO;AAAA,MACL,SAAS,MAAM;AAAA,MACf,MAAM,MAAM;AAAA,MACZ,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,cAAc;AAAA,IAChB;AAAA,EACF;AACA,SAAO;AACT;AAKO,SAAS,sBACd,QACA,KACA,QACAA,eACA,eAAwB,OACG;AAC3B,QAAM,QAAQA,cAAa,MAAM;AACjC,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,MAAM,cAAc,KAAK,QAAQ,YAAY;AACnD,QAAM,cAAc,MAAM,IAAI,GAAG;AACjC,MAAI,CAAC,YAAa,QAAO;AACzB,SAAO;AAAA,IACL,SAAS,EAAE,GAAG,YAAY,SAAS,GAAG,OAAO,IAAI;AAAA,IACjD,MAAM,YAAY;AAAA,IAClB,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,OAAO;AAAA,IACP,cAAc;AAAA,EAChB;AACF;AAKO,SAAS,cACd,QACA,KACA,QACA,UACA,QACA,MACA,SACAA,eACA,cACA,eAAwB,OAClB;AACN,QAAM,QAAQA,cAAa,MAAM;AACjC,MAAI,WAAW,WAAW,SAAS,SAAS,OAAO,MAAM;AACvD,UAAM,MAAM,cAAc,KAAK,QAAQ,YAAY;AACnD,UAAM,YAAY,qBAAqB,OAAO,GAAG;AACjD,UAAM,YAAY,eACd,cAAc,QAAQ,YAAY,IAClC;AACJ,UAAM,MAAM,aAAa;AACzB,UAAM,IAAI,KAAK,OAAO,MAAM,MAAM,OAAO,KAAK,GAAG;AACjD,UAAM,UAAU,MAAM,SAAS,GAAG,QAAQ;AAC1C,aAAS,uBAAuB,GAAG,cAAc,OAAO,IAAI,GAAG,OAAO,EAAE;AAAA,EAC1E;AAEA,MAAI,WAAW,SAAS,OAAO;AAC7B,UAAM,aAAa,SAAS,MAAM,GAAG,EAAE,CAAC,CAAE;AAAA,EAC5C;AACF;;;ACpHO,IAAM,kBAA0C;AAAA,EACrD,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AACP;AAKO,SAAS,kBACd,QACA,QACA,KACA,QACA,SACAC,eACA,eAAwB,OACG;AAC3B,MAAI,WAAW,KAAK;AAClB,WAAO,EAAE,SAAS,OAAO,KAAK,MAAM,QAAW,QAAQ,IAAI;AAAA,EAC7D;AAEA,MAAI,WAAW,KAAK;AAClB,YAAQ,4BAA4B,GAAG,EAAE;AACzC,WAAO,EAAE,SAAS,OAAO,KAAK,MAAM,QAAW,QAAQ,IAAI;AAAA,EAC7D;AAEA,MAAI,WAAW,KAAK;AAClB,UAAM,QAAQA,cAAa,MAAM;AACjC,QAAI,WAAW,OAAO;AACpB,YAAM,MAAM,cAAc,KAAK,QAAQ,YAAY;AACnD,YAAM,cAAc,MAAM,IAAI,GAAG;AACjC,UAAI,aAAa;AACf,gBAAQ,iCAAiC,GAAG,EAAE;AAC9C,eAAO;AAAA,UACL,SAAS,EAAE,GAAG,YAAY,SAAS,GAAG,OAAO,IAAI;AAAA,UACjD,MAAM,YAAY;AAAA,UAClB,QAAQ;AAAA,UACR,WAAW;AAAA,UACX,cAAc;AAAA,QAChB;AAAA,MACF;AAAA,IACF;AACA,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,MACA,OAAO,aAAa;AAAA,IACtB;AAAA,EACF;AAEA,SAAO;AACT;AAKO,SAAS,oBACd,QACA,UACA,KACA,QACA,SACAA,eACA,eAAwB,OACI;AAC5B,QAAM,eAAe,gBAAgB,SAAS,MAAM,KAAK,SAAS;AAElE,MAAI,SAAS,UAAU,OAAO,SAAS;AACrC,UAAM,cAAc;AAAA,MAClB;AAAA,MACA;AAAA,MACA;AAAA,MACAA;AAAA,MACA;AAAA,IACF;AACA,QAAI,aAAa;AACf,cAAQ,GAAG,YAAY,QAAQ,GAAG,6BAAwB;AAC1D,aAAO,EAAE,GAAG,aAAa,QAAQ,SAAS,OAAO;AAAA,IACnD;AAAA,EACF;AAEA,MAAI,SAAS,WAAW,OAAO,SAAS,WAAW,KAAK;AACtD,YAAQ,iBAAiB,SAAS,MAAM,QAAQ,GAAG,EAAE;AAAA,EACvD;AAEA,QAAM,IAAI;AAAA,IACR,SAAS;AAAA,IACT;AAAA,IACA;AAAA,IACA,OAAO,aAAa;AAAA,EACtB;AACF;AAKO,SAAS,UAAU,OAAuB;AAC/C,MAAI,iBAAiB,YAAY,iBAAiB,kBAAkB;AAClE,UAAM;AAAA,EACR;AACA,MAAI,iBAAiB,OAAO;AAC1B,aAAS,qBAAqB,MAAM,OAAO,EAAE;AAC7C,UAAM,WAAW,MAAM,SAAS,aAAa;AAAA,EAC/C;AACA,WAAS,qBAAqB,OAAO,KAAK,CAAC,EAAE;AAC7C,QAAM,WAAW,OAAO,KAAK,GAAG,aAAa;AAC/C;;;AC1HO,SAAS,WACd,SACA,QACA,OACQ;AACR,QAAM,cAAc,SAAS,KAAK,IAAI,GAAG,OAAO;AAEhD,QAAM,SAAS,eAAe,OAAO,KAAK,OAAO,IAAI;AACrD,SAAO,KAAK,IAAI,QAAQ,KAAK;AAC/B;;;AChBO,SAAS,MAAM,IAA2B;AAC/C,SAAO,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,EAAE,CAAC;AACzD;;;ACeO,IAAM,gBAAN,MAA8C;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEjB,YAAY,QAAsB;AAChC,SAAK,aAAa,QAAQ,cAAc;AACxC,SAAK,cAAc,QAAQ,eAAe;AAC1C,SAAK,aAAa,QAAQ,cAAc;AACxC,SAAK,iBAAiB,QAAQ,kBAAkB;AAAA,EAClD;AAAA,EAEA,MAAM,QACJ,WACA,SACY;AACZ,UAAM,iBAAiB,QAAQ,WAAW,SAAS,KAAK;AAExD,QAAI;AACJ,QAAI,mBAAmB;AAEvB,aAAS,UAAU,GAAG,WAAW,KAAK,YAAY,WAAW;AAC3D,UAAI;AACF,eAAO,MAAM,UAAU;AAAA,MACzB,SAAS,OAAgB;AACvB,YAAI,iBAAiB,kBAAkB;AACrC,gBAAM;AAAA,QACR;AAEA,YACE,CAAC,oBACD,iBAAiB,YACjB,MAAM,eAAe,OACrB,QAAQ,gBACR,QAAQ,cACR;AACA,6BAAmB;AACnB,kBAAQ,2CAA2C;AACnD,cAAI;AACF,kBAAM,QAAQ,aAAa;AAAA,UAC7B,SAAS,cAAuB;AAC9B,gBACE,wBAAwB,YACxB,wBAAwB,kBACxB;AACA,oBAAM;AAAA,YACR;AACA,kBAAM,MACJ,wBAAwB,QACpB,aAAa,UACb,OAAO,YAAY;AACzB,qBAAS,yBAAyB,GAAG,EAAE;AACvC,kBAAM;AAAA,cACJ,yBAAyB,GAAG;AAAA,cAC5B;AAAA,YACF;AAAA,UACF;AACA,kBAAQ,mCAAmC;AAG3C;AACA;AAAA,QACF;AAEA,YACE,iBAAiB,YACjB,MAAM,aACN,kBACA,UAAU,KAAK,YACf;AACA,gBAAM,QAAQ,WAAW,SAAS,KAAK,aAAa,KAAK,UAAU;AACnE;AAAA,YACE,cAAc,QAAQ,QAAQ,YAAY,MAAM,UAAU,kBAAkB,KAAK,MAAM,KAAK,CAAC,eAAe,UAAU,CAAC,IAAI,KAAK,UAAU;AAAA,UAC5I;AACA,gBAAM,MAAM,KAAK;AACjB,sBAAY;AACZ;AAAA,QACF;AAEA,cAAM;AAAA,MACR;AAAA,IACF;AAEA,UAAM;AAAA,EACR;AACF;;;AC/FO,SAAS,aAAa,QAAkC;AAC7D,SAAO,OAAO,SAAS;AACzB;AAEO,SAAS,mBAAmB,QAAiC;AAClE,QAAM,UAAU,OAAO,eAAe;AACtC,MAAI,CAAC,SAAS;AACZ,UAAM;AAAA,MACJ;AAAA,MAEA;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,sBACd,QACwB;AACxB,SAAO,OAAO,kBAAkB;AAClC;AAEO,SAAS,qBAAqB,QAAmC;AACtE,SACE,OAAO,iBAAiB,KACxB,IAAI,cAAc,OAAO,eAAe,KAAK,MAAS;AAE1D;;;ACnBO,IAAM,oBAAN,MAAwB;AAAA,EAC7B,OAAwB,kBAA+C;AAAA,IACrE,UAAU;AAAA,IACV,iBAAiB;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,aAAa,oBACX,QACA,UACA,QACA,cACA,eACA,YACA,MACA,SACA,WACA,cACoB;AACpB,UAAM,OAAO,EAAE,GAAG,KAAK,iBAAiB,GAAG,QAAQ;AACnD,UAAM,cAAc,OAAO,eAAe;AAC1C,UAAM,UAAqB,CAAC,GAAG,aAAa;AAE5C,UAAM,mBAAmB,KAAK,IAAI,YAAY,KAAK,QAAQ;AAE3D,QAAI,oBAAoB,GAAG;AACzB,aAAO;AAAA,IACT;AAEA,YAAQ,oBAAoB,gBAAgB,QAAQ,QAAQ,KAAK;AAEjE,aAAS,OAAO,GAAG,QAAQ,kBAAkB,QAAQ;AACnD,UAAI;AACF,YAAI,YAAa,OAAM,YAAY,eAAe,cAAc,MAAM;AAEtE,cAAM,WAAW,MAAM,KAAK;AAAA,UAC1B;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAEA,YAAI,KAAK,oBAAoB,CAAC,YAAY,SAAS,WAAW,IAAI;AAChE,kBAAQ,QAAQ,IAAI,iCAAiC;AACrD;AAAA,QACF;AAEA,gBAAQ,KAAK,GAAG,QAAQ;AACxB;AAAA,UACE,gBAAgB,IAAI,IAAI,gBAAgB,KAAK,SAAS,MAAM;AAAA,QAC9D;AAAA,MACF,SAAS,OAAO;AACd;AAAA,UACE,wBAAwB,IAAI,KAAK,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC;AAAA,QACzF;AACA,cAAM,iBAAiB,QACnB,QACA,IAAI,MAAM,wBAAwB,IAAI,KAAK,OAAO,KAAK,CAAC,EAAE;AAAA,MAChE;AAAA,IACF;AAEA;AAAA,MACE,gCAAgC,QAAQ,MAAM,2BAA2B,gBAAgB;AAAA,IAC3F;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,aAAqB,mBACnB,QACA,UACA,QACA,cACA,MACA,WACoB;AACpB,UAAM,gBAAgB,qBAAqB,MAAM;AACjD,UAAM,oBAAoB,KAAK,uBAAuB,UAAU,IAAI;AAEpE,WAAO,cAAc;AAAA,MACnB,MAAM;AACJ,gBAAQ,iBAAiB,IAAI,kBAAkB,iBAAiB,EAAE;AAClE,eAAO,UAAU,iBAAiB;AAAA,MACpC;AAAA,MACA;AAAA,QACE,UAAU;AAAA,QACV;AAAA,QACA;AAAA,QACA,cAAc,OAAO,iBAAiB,IAClC,MAAM,OAAO,aAAa,EAAE,KAAK,MAAM;AAAA,QAAC,CAAC,IACzC;AAAA,MACN;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAe,uBACb,UACA,MACQ;AACR,UAAM,YAAY,SAAS,SAAS,GAAG,IAAI,MAAM;AACjD,WAAO,GAAG,QAAQ,GAAG,SAAS,QAAQ,IAAI;AAAA,EAC5C;AACF;;;ACnHO,SAAS,uBACd,QACA,MAC2B;AAC3B,MAAI,CAAC,OAAO,oBAAqB,QAAO;AAExC,QAAM,UAAwB;AAAA,IAC5B,QAAQ,OAAO;AAAA,IACf,OAAO,OAAO;AAAA,EAChB;AAEA,SAAO,EAAE,SAAS,OAAO,KAAK,MAAM,MAAM,QAAQ,KAAK,QAAQ;AACjE;AAKA,eAAsB,uBACpB,QACA,UACA,QACA,cACA,QACA,MACA,MACA,KACA,SACA,WACAC,eACA,cAC6B;AAC7B,QAAM,aAAa,OAAO;AAE1B,MAAI,cAAc,GAAG;AACnB,WAAO,EAAE,SAAS,OAAO,KAAK,MAAM,MAAM,QAAQ,IAAI;AAAA,EACxD;AAEA;AAAA,IACE,SAAS,UAAU;AAAA,EACrB;AAEA,MAAI;AACF,UAAM,gBAAgB,MAAM,QAAQ,IAAI,IAAI,OAAO,CAAC,IAAI;AACxD,UAAM,UAAU,MAAM,kBAAkB;AAAA,MACtC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,QACE,UAAU,KAAK,IAAI,YAAY,GAAI;AAAA,QACnC,iBAAiB;AAAA,MACnB;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACAA;AAAA,MACA;AAAA,IACF;AACA,WAAO,EAAE,SAAS,OAAO,KAAK,MAAM,SAAS,QAAQ,IAAI;AAAA,EAC3D,SAAS,iBAA0B;AACjC,UAAM,MACJ,2BAA2B,QACvB,gBAAgB,UAChB,OAAO,eAAe;AAC5B,YAAQ,yBAAyB,GAAG,KAAK,GAAG,EAAE;AAC9C,QACE,2BAA2B,YAC3B,2BAA2B,kBAC3B;AACA,YAAM;AAAA,IACR;AACA,UAAM;AAAA,MACJ,6BAA6B,GAAG,KAAK,GAAG;AAAA,MACxC;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;;;ACnGA,eAAsB,uBACpB,QACA,KACA,UACA,QACA,SACA,MAC0E;AAC1E,QAAM,aAAa,OAAO,cAAc;AACxC,MAAI,CAAC,WAAW,gBAAgB,GAAG;AACjC,WAAO,EAAE,KAAK,SAAS,KAAK;AAAA,EAC9B;AACA,QAAM,SAAyB;AAAA,IAC7B;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS,EAAE,GAAG,QAAQ;AAAA,IACtB;AAAA,EACF;AACA,QAAM,WAAW,MAAM,WAAW,yBAAyB,MAAM;AACjE,SAAO;AAAA,IACL,KAAK,SAAS;AAAA,IACd,SAAS,SAAS;AAAA,IAClB,MAAM,SAAS;AAAA,EACjB;AACF;AAKA,eAAsB,0BACpB,QACA,QACA,KACA,UACA,QACA,WAC6B;AAC7B,QAAM,aAAa,OAAO,cAAc;AACxC,MAAI,CAAC,WAAW,gBAAgB,EAAG,QAAO;AAE1C,QAAM,cAA+B;AAAA,IACnC;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ,OAAO,UAAU;AAAA,IACzB,SAAS,OAAO;AAAA,IAChB,MAAM,OAAO;AAAA,IACb,YAAY,KAAK,IAAI,IAAI;AAAA,IACzB,WAAW,OAAO,aAAa;AAAA,EACjC;AAEA,QAAM,WAAW,MAAM,WAAW,0BAA0B,WAAW;AACvE,SAAO;AAAA,IACL,GAAG;AAAA,IACH,SAAS,SAAS;AAAA,IAClB,MAAM,SAAS;AAAA,EACjB;AACF;;;AC5CO,SAAS,aACd,OACmB;AACnB,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,QACJ,wBAAwB,KAAK,KAAK,KAClC,2BAA2B,KAAK,KAAK;AACvC,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,CAAC,EAAE,MAAM,OAAO,IAAI;AAC1B,SAAO,EAAE,MAAM,SAAS,MAAO,EAAE,GAAG,QAAkB;AACxD;AAEO,SAAS,aAAa,cAAsC;AACjE,QAAM,MAA8B,CAAC;AACrC,eAAa,QAAQ,CAAC,OAAO,QAAQ;AACnC,QAAI,IAAI,YAAY,CAAC,IAAI;AAAA,EAC3B,CAAC;AAED,QAAM,eAAe,IAAI,iBAAiB,KAAK;AAC/C,QAAM,cAAc,IAAI,gBAAgB,KAAK;AAE7C,SAAO;AAAA,IACL;AAAA,IACA,QAAQ,SAAS,IAAI,SAAS,KAAK,KAAK,EAAE;AAAA,IAC1C,MAAM,IAAI,MAAM,KAAK;AAAA,IACrB,cAAc,IAAI,eAAe,KAAK;AAAA,IACtC,SAAS,IAAI,SAAS,KAAK;AAAA,IAC3B,cAAc,IAAI,eAAe,KAAK;AAAA,IACtC;AAAA,IACA;AAAA,IACA,qBAAqB,qBAAqB,OAAO,oBAAoB;AAAA,IACrE,SAAS,aAAa,IAAI,SAAS,CAAC;AAAA,IACpC,WAAW,IAAI,kBAAkB,KAAK;AAAA,IACtC,MAAM,IAAI,MAAM,KAAK;AAAA,IACrB,iBAAiB,IAAI,kBAAkB,KAAK;AAAA,EAC9C;AACF;;;AC9BA,eAAsB,mBACpB,QACA,UACA,QACA,MACA,cACA,SACAC,eACAC,qBACAC,wBACA,gBACA,cACyB;AACzB,QAAM,SAAS,GAAG,OAAO,QAAQ,CAAC,IAAI,QAAQ;AAC9C,QAAM,eAAe;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACAF;AAAA,EACF;AAEA,QAAM,MAAM,MAAM;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,QAAM,UAAuB;AAAA,IAC3B;AAAA,IACA,SAAS,IAAI;AAAA,IACb,MAAM,IAAI,OAAO,KAAK,UAAU,IAAI,IAAI,IAAI;AAAA,EAC9C;AAEA,QAAM,MAAM,IAAI;AAChB,UAAQ,qBAAqB,GAAG,EAAE;AAElC,QAAM,KAAKE,uBAAsB,MAAM;AACvC,QAAM,QACJ,MAAM,gBAAgB,GAAG,iBAAiB,MAAM,aAC5C,eACA;AAEN,MAAI,GAAI,IAAG,aAAa,KAAK;AAE7B,MAAI,aAAa;AAEjB,MAAI;AACF,UAAM,cAAcD,oBAAmB,MAAM;AAC7C,UAAM,YAAY,eAAe,cAAc,QAAQ,IAAI,OAAO;AAElE,UAAM,YAAY,kBAAkB,OAAO,WAAW;AACtD,UAAM,aAAa,IAAI,gBAAgB;AACvC,UAAM,QAAQ,WAAW,WAAW,MAAM,WAAW,MAAM,GAAG,SAAS;AACvE,YAAQ,SAAS,WAAW;AAE5B,QAAI;AACJ,QAAI;AACF,iBAAW,MAAM,MAAM,KAAK,OAAO;AAAA,IACrC,SAAS,KAAK;AACZ,mBAAa,KAAK;AAClB,UAAI,IAAI;AACN,WAAG,cAAc,OAAO,CAAC;AACzB,qBAAa;AAAA,MACf;AACA,UAAI,eAAe,SAAS,IAAI,SAAS,cAAc;AACrD,cAAM,IAAI,aAAa,WAAW,GAAG;AAAA,MACvC;AACA,YAAM;AAAA,IACR;AACA,iBAAa,KAAK;AAElB,UAAM,SAAS,aAAa,SAAS,OAAO;AAE5C,gBAAY;AAAA,MACV,OAAO;AAAA,MACP,SAAS;AAAA,MACT;AAAA,MACA;AAAA,MACA,IAAI;AAAA,IACN;AAEA,QAAI,IAAI;AACN,UACE,SAAS,UAAU,OACnB,SAAS,WAAW,OACpB,SAAS,WAAW,KACpB;AACA,WAAG,cAAc,OAAO,SAAS,MAAM;AAAA,MACzC,OAAO;AACL,WAAG,cAAc,KAAK;AAAA,MACxB;AACA,mBAAa;AAAA,IACf;AAEA,QAAI,OAAO,SAAS;AAClB;AAAA,QACE,eAAe,OAAO,QAAQ,IAAI,QAAQ,GAAG,KAAK,OAAO,QAAQ,OAAO;AAAA,MAC1E;AAAA,IACF;AAEA,WAAO,EAAE,UAAU,QAAQ,IAAI;AAAA,EACjC,UAAE;AACA,QAAI,MAAM,CAAC,YAAY;AACrB,SAAG,cAAc,OAAO,CAAC;AAAA,IAC3B;AAAA,EACF;AACF;AAKA,eAAsB,cACpB,UACA,MACkB;AAClB,MAAI;AACF,WAAQ,MAAM,SAAS,KAAK;AAAA,EAC9B,SAAS,WAAW;AAClB,UAAM,MACJ,qBAAqB,QAAQ,UAAU,UAAU,OAAO,SAAS;AACnE,aAAS,kCAAkC,GAAG,EAAE;AAChD,UAAM,WAAW,0BAA0B,GAAG,IAAI,kBAAkB;AAAA,EACtE;AACF;AAKA,eAAsB,aACpB,QACA,UACA,QACA,MACA,cACA,SACAD,eACAC,qBACAC,wBACA,gBACA,cAC4B;AAC5B,QAAM,EAAE,UAAU,QAAQ,IAAI,IAAI,MAAM;AAAA,IACtC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACAF;AAAA,IACAC;AAAA,IACAC;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,MAAI,CAAC,SAAS,IAAI;AAChB,UAAM,IAAI;AAAA,MACR,SAAS;AAAA,MACT,gBAAgB,SAAS,MAAM,KAAK,SAAS;AAAA,MAC7C;AAAA,MACA,OAAO,aAAa;AAAA,IACtB;AAAA,EACF;AAEA,QAAM,OAAO,MAAM,cAAc,UAAU,GAAG;AAC9C,SAAO,EAAE,MAAM,QAAQ,IAAI;AAC7B;;;AC/KA,IAAM,iBAAiB,OACrB,QACA,UACA,QACA,MACA,eAAwB,OACxB,UAAmB,MACnB,gBACA,iBACgC;AAChC,QAAM,YAAY,KAAK,IAAI;AAC3B,QAAM,SAAS,CAAC,MAA0B;AACxC,MAAE,iBAAiB,KAAK,IAAI,IAAI;AAChC,UAAM,SAAS,GAAG,OAAO,QAAQ,CAAC,IAAI,QAAQ;AAC9C,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,MAAI;AACF,UAAM,EAAE,UAAU,QAAQ,IAAI,IAAI,MAAM;AAAA,MACtC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,QAAI,SAAS,WAAW,KAAK;AAC3B,UAAIC;AACJ,UAAI;AACF,QAAAA,QAAQ,MAAM,SAAS,KAAK;AAAA,MAC9B,QAAQ;AACN,QAAAA,QAAO;AAAA,MACT;AACA,aAAO,OAAO,EAAE,SAAS,OAAO,KAAK,MAAMA,OAAM,QAAQ,IAAI,CAAC;AAAA,IAChE;AAEA,UAAM,cAAc;AAAA,MAClB;AAAA,MACA,SAAS;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,QAAI,YAAa,QAAO,OAAO,WAAW;AAE1C,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,eAAe;AAAA,QACnB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACA,aAAO,OAAO,YAAY;AAAA,IAC5B;AAEA,UAAM,OAAO,MAAM,cAAc,UAAU,GAAG;AAC9C;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,UAAM,eAAe,uBAAuB,QAAQ,IAAI;AACxD,QAAI,aAAc,QAAO,OAAO,YAAY;AAE5C,UAAM,YAAY,OAAO,sBAAkD;AACzE,YAAM,SAAS,MAAM;AAAA,QACnB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACA,aAAO,MAAM,QAAQ,OAAO,IAAI,IAC3B,OAAO,OACR,CAAC,OAAO,IAAI;AAAA,IAClB;AAEA,UAAM,kBAAkB,MAAM;AAAA,MAC5B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,WAAO,OAAO,eAAe;AAAA,EAC/B,SAAS,OAAgB;AACvB,cAAU,KAAK;AAAA,EACjB;AACF;AAEO,IAAM,0BAA0B,OACrC,QACA,UACA,QACA,MACA,eAAwB,OACxB,cACA,mBACgC;AAChC,QAAM,YAAY,MAChB;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,CAAC,EAAE,MAAM,OAAO,OAAO;AAAA,IAC5B,SAAS,OAAO;AAAA,IAChB,MAAM;AAAA,EACR,EAAE;AAEJ,QAAM,gBAAgB,qBAAqB,MAAM;AAEjD,SAAO,cAAc,QAA4B,WAAW;AAAA,IAC1D;AAAA,IACA;AAAA,IACA;AAAA,IACA,cAAc,OAAO,iBAAiB,IAClC,MAAM,OAAO,aAAa,EAAE,KAAK,MAAM;AAAA,IAAC,CAAC,IACzC;AAAA,EACN,CAAC;AACH;AAEO,IAAM,gBAAgB,OAC3B,QACA,UACA,QACA,MACA,eAAwB,OACxB,UAAmB,MACnB,cACA,mBACgC;AAChC,QAAM,SAAS,GAAG,OAAO,QAAQ,CAAC,IAAI,QAAQ;AAC9C,QAAM,YAAY,KAAK,IAAI;AAC3B,QAAM,UAAU;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,MAAI,SAAS;AACX,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,QAAM,YAAY,MAChB;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEF,QAAM,QAAQ,OAAO,gBAAgB;AACrC,QAAM,WAAW,SAAS,WAAW,SAAS,CAAC;AAE/C,QAAM,YAAY,MAChB,WACI,MAAM,OAA2B,UAAU,SAAS,IACpD,UAAU;AAEhB,QAAM,gBAAgB,qBAAqB,MAAM;AAEjD,SAAO,cAAc,QAA4B,WAAW;AAAA,IAC1D;AAAA,IACA;AAAA,IACA;AAAA,IACA,cAAc,OAAO,iBAAiB,IAClC,MAAM,OAAO,aAAa,EAAE,KAAK,MAAM;AAAA,IAAC,CAAC,IACzC;AAAA,EACN,CAAC;AACH;;;AC3PA,IAAM,oBAAoB;AAEnB,SAAS,kBAAkB,WAAmB,OAAwB;AAC3E,MAAI,UAAU,QAAQ,UAAU,UAAa,UAAU,IAAI;AACzD,UAAM;AAAA,MACJ,mBAAmB,SAAS;AAAA,MAC5B;AAAA,IACF;AAAA,EACF;AAEA,QAAM,MAAM,GAAG,KAAwB;AAEvC,MAAI,kBAAkB,KAAK,GAAG,GAAG;AAC/B,UAAM;AAAA,MACJ,mBAAmB,SAAS;AAAA,MAC5B;AAAA,IACF;AAAA,EACF;AAEA,MAAI,OAAO,UAAU,YAAY,CAAC,OAAO,SAAS,KAAK,GAAG;AACxD,UAAM;AAAA,MACJ,mBAAmB,SAAS;AAAA,MAC5B;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAEA,IAAM,oBAAoB,CAAC,iBAAiB;AAErC,SAAS,gBACd,KACA,iBACQ;AACR,MAAI;AACJ,MAAI;AACF,aAAS,IAAI,IAAI,GAAG;AAAA,EACtB,QAAQ;AACN,UAAM,WAAW,qBAAqB,GAAG,IAAI,kBAAkB;AAAA,EACjE;AAEA,MAAI,OAAO,aAAa,UAAU;AAChC,UAAM,WAAW,oCAAoC,kBAAkB;AAAA,EACzE;AAEA,MAAI,CAAC,mBAAmB,CAAC,kBAAkB,SAAS,OAAO,QAAQ,GAAG;AACpE,UAAM;AAAA,MACJ,kBAAkB,OAAO,QAAQ,6CACb,kBAAkB,KAAK,IAAI,CAAC;AAAA,MAEhD;AAAA,IACF;AAAA,EACF;AAEA,SAAO,IAAI,QAAQ,OAAO,EAAE;AAC9B;AAEO,SAAS,mBAAmB,WAAmB,OAAwB;AAC5E,MAAI,UAAU,QAAQ,UAAU,QAAW;AACzC,UAAM;AAAA,MACJ,oBAAoB,SAAS;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAEA,QAAM,MAAM,GAAG,KAAwB;AAEvC,MAAI,OAAO,UAAU,YAAY,CAAC,OAAO,SAAS,KAAK,GAAG;AACxD,UAAM;AAAA,MACJ,oBAAoB,SAAS;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAEA,MAAI,IAAI,SAAS,KAAM;AACrB,UAAM;AAAA,MACJ,oBAAoB,SAAS;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;;;AC7EO,SAAS,kBACd,KACA,MACA,YACoB;AACpB,MAAI,WAAW;AACf,MAAI,OAAO,IAAI;AAEf,MAAI,IAAI,YAAY;AAClB,eAAW,SAAS,IAAI,YAAY;AAClC,YAAM,MAAM,KAAK,UAAU;AAC3B,YAAM,YAAY,kBAAkB,OAAO,GAAG;AAC9C,aAAO,KAAK,QAAQ,IAAI,KAAK,KAAK,mBAAmB,SAAS,CAAC;AAAA,IACjE;AAAA,EACF;AAEA,MAAI,IAAI,aAAa;AACnB,UAAM,aAAuB,CAAC;AAC9B,eAAW,CAAC,WAAW,QAAQ,KAAK,OAAO,QAAQ,IAAI,WAAW,GAAG;AACnE,YAAM,QAAQ,KAAK,UAAU;AAC7B,UAAI,UAAU,QAAW;AACvB,cAAM,YAAY,mBAAmB,WAAW,KAAK;AACrD,mBAAW,KAAK,GAAG,QAAQ,IAAI,mBAAmB,SAAS,CAAC,EAAE;AAAA,MAChE;AAAA,IACF;AACA,QAAI,WAAW,SAAS,GAAG;AACzB,eAAS,KAAK,SAAS,GAAG,IAAI,MAAM,OAAO,WAAW,KAAK,GAAG;AAAA,IAChE;AAAA,EACF;AAEA,MAAI,OAAgB;AACpB,MAAI,IAAI,aAAa;AAEnB,WAAO,IAAI;AAAA,MACT,GAAI,KAAK,MAAM,QAAQ;AAAA,IACzB;AAAA,EAEF,WAAW,IAAI,SAAS;AAEtB,WAAO,KAAK,QAAQ;AAAA,EACtB;AAEA,MAAI,YAAY;AACd,aACG,KAAK,SAAS,GAAG,IAAI,MAAM,OAC5B,cAAc,mBAAmB,UAAU,CAAC;AAAA,EAChD;AAEA,SAAO,EAAE,MAAM,KAAK;AACtB;;;ACSA,SAAS,UAAU,UAA+C;AAChE,QAAM,OAAwB;AAAA,IAC5B,SAAS,SAAS;AAAA,IAClB,WAAW,SAAS,aAAa;AAAA,IACjC,OAAO,SAAS,SAAS;AAAA,EAC3B;AACA,MAAI,SAAS,aAAc,MAAK,eAAe,SAAS;AACxD,MAAI,SAAS,mBAAmB;AAC9B,SAAK,iBAAiB,SAAS;AACjC,QAAM,IAAI,aAAa,SAAS,QAAQ,SAAS,CAAC;AAClD,MAAI,EAAG,MAAK,UAAU;AACtB,MAAI,SAAS,QAAQ,kBAAkB;AACrC,SAAK,YAAY,SAAS,QAAQ,kBAAkB;AACtD,MAAI,SAAS,QAAQ,MAAM,EAAG,MAAK,OAAO,SAAS,QAAQ,MAAM;AACjE,MAAI,SAAS,QAAQ,kBAAkB;AACrC,SAAK,kBAAkB,SAAS,QAAQ,kBAAkB;AAC5D,MAAI,SAAS,QAAQ,uBAAuB,GAAG;AAC7C,SAAK,YAAY;AAAA,MACf,WAAW,SAAS,SAAS,QAAQ,uBAAuB,GAAG,EAAE;AAAA,MACjE,OAAO,SAAS,SAAS,QAAQ,mBAAmB,KAAK,KAAK,EAAE;AAAA,MAChE,MAAM,SAAS,SAAS,QAAQ,kBAAkB,KAAK,KAAK,EAAE;AAAA,MAC9D,OAAO,SAAS,QAAQ,mBAAmB,KAAK;AAAA,IAClD;AAAA,EACF;AACA,SAAO;AACT;AAGO,SAAS,aACd,WACA,WACA,SACkB;AAClB,QAAM,SAAS,CAAC;AAChB,QAAM,iBAAiB,SAAS,kBAAkB;AAClD,QAAM,WAAW,SAAS,YAAY;AAEtC,aAAW,CAAC,YAAY,GAAG,KAAK,OAAO,QAAQ,SAAS,GAAG;AAEzD,IAAC,OACC,UACF,IAAI,UAAU,SAAoB;AAChC,UAAI;AACF,YAAI,IAAI,YAAY;AAClB,gBAAM,QAAQ,CAAC,aAAa,UAAU,kBAAkB;AACxD,cAAI,IAAI,WAAW,QAAS,OAAM,KAAK,IAAI,WAAW,OAAO;AAC7D,cAAI,IAAI,WAAW;AACjB,kBAAM,KAAK,QAAQ,IAAI,WAAW,UAAU,YAAY;AAC1D,cAAI,IAAI,WAAW;AACjB,kBAAM,KAAK,gBAAgB,IAAI,WAAW,UAAU,GAAG;AACzD,kBAAQ,MAAM,KAAK,GAAG,CAAC;AAAA,QACzB;AAEA,cAAM,QAAQ,kBAAkB,KAAK,MAAM,UAAU,cAAc,CAAC;AACpE,YAAI,OAAO,MAAM;AACjB,cAAM,OAAO,MAAM;AAGnB,YACE,UAAU,mBAAmB,KAC7B,IAAI,iBACJ,QAAQ,MACR;AACA,gBAAM,YAAY,IAAI,cAAc,UAAU,IAAI;AAClD,cAAI,CAAC,UAAU,SAAS;AACtB,kBAAM,IAAI;AAAA,cACR,GAAG,UAAU,QAAQ,CAAC,IAAI,IAAI;AAAA,cAC9B,UAAU;AAAA,cACV;AAAA,cACA;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,YAAI,IAAI,kBAAkB;AACxB,gBAAM,UAAU,KAAK,KAAK,SAAS,CAAC;AACpC,gBAAM,cACJ,WAAW,QACX,OAAO,YAAY,aAClB,YAAY,WAAW,WAAW;AACrC,gBAAM,aAAwC,cACzC,UACD;AAEJ,cAAI,YAAY;AACd,kBAAM,QAAkB,CAAC;AACzB,gBAAI,WAAW;AACb,oBAAM,KAAK,UAAU,mBAAmB,WAAW,MAAM,CAAC,EAAE;AAC9D,gBAAI,WAAW;AACb,oBAAM,KAAK,SAAS,mBAAmB,WAAW,KAAK,CAAC,EAAE;AAC5D,gBAAI,MAAM,SAAS,GAAG;AACpB,uBAAS,KAAK,SAAS,GAAG,IAAI,MAAM,OAAO,MAAM,KAAK,GAAG;AAAA,YAC3D;AAAA,UACF;AAEA,gBAAMC,YAAW,MAAM;AAAA,YACrB;AAAA,YACA;AAAA,YACA,IAAI;AAAA,YACJ;AAAA,YACA,IAAI;AAAA,YACJ;AAAA,YACA,IAAI;AAAA,UACN;AACA,cAAIC,gBAAeD,UAAS;AAC5B,cAAI,IAAI,kBAAkB,UAAU,oBAAoB,GAAG;AACzD,kBAAM,SAAS,IAAI,eAAe,UAAUC,aAAY;AACxD,gBAAI,CAAC,OAAO,SAAS;AACnB,oBAAM,IAAI;AAAA,gBACR,GAAG,UAAU,QAAQ,CAAC,IAAI,IAAI;AAAA,gBAC9B,OAAO;AAAA,cACT;AAAA,YACF;AACA,YAAAA,gBAAe,OAAO;AAAA,UACxB;AACA,cAAI;AACJ,cAAI,MAAM,QAAQA,aAAY,GAAG;AAC/B,mBAAOA;AAAA,UACT,WAAWA,kBAAiB,QAAQA,kBAAiB,QAAW;AAC9D,mBAAO,CAACA,aAAY;AAAA,UACtB,OAAO;AACL,mBAAO,CAAC;AAAA,UACV;AACA,gBAAM,eAA6B;AAAA,YACjC;AAAA,YACA,SAASD,UAAS,WAAW,EAAE,QAAQ,MAAM,OAAO,KAAK;AAAA,UAC3D;AAEA,cAAI,kBAAkB,UAAU;AAC9B,kBAAM,OAAO,UAAUA,SAAQ;AAC/B,gBAAI,UAAU;AACZ,qBAAO,EAAE,IAAI,MAAM,MAAM,cAAc,KAAK;AAAA,YAC9C;AACA,mBAAO,EAAE,MAAM,cAAc,KAAK;AAAA,UACpC;AACA,iBAAO;AAAA,QACT;AAEA,cAAM,WAAW,MAAM;AAAA,UACrB;AAAA,UACA;AAAA,UACA,IAAI;AAAA,UACJ;AAAA,UACA,IAAI;AAAA,UACJ;AAAA,UACA,IAAI;AAAA,QACN;AACA,YAAI,eAAe,SAAS;AAC5B,YAAI,IAAI,kBAAkB,UAAU,oBAAoB,GAAG;AACzD,gBAAM,SAAS,IAAI,eAAe,UAAU,YAAY;AACxD,cAAI,CAAC,OAAO,SAAS;AACnB,kBAAM,IAAI;AAAA,cACR,GAAG,UAAU,QAAQ,CAAC,IAAI,IAAI;AAAA,cAC9B,OAAO;AAAA,YACT;AAAA,UACF;AACA,yBAAe,OAAO;AAAA,QACxB;AACA,YAAI,UAAU;AACZ,iBAAO,EAAE,IAAI,MAAM,MAAM,cAAc,MAAM,UAAU,QAAQ,EAAE;AAAA,QACnE;AACA,YAAI,gBAAgB;AAClB,iBAAO,EAAE,MAAM,cAAc,MAAM,UAAU,QAAQ,EAAE;AAAA,QACzD;AACA,eAAO;AAAA,MACT,SAAS,KAAK;AACZ,YAAI,UAAU;AACZ,gBAAM,QACJ,eAAe,WACX,MACA,IAAI;AAAA,YACF;AAAA,YACA,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAAA,UACjD;AACN,iBAAO,EAAE,IAAI,OAAO,MAAM;AAAA,QAC5B;AACA,cAAM;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAuBA,eAAsB,oBACpB,SACA,UACA,WAIkB;AAClB,QAAM,UAAmB,CAAC;AAC1B,MAAI;AACJ,MAAI,UAAU;AAEd,SAAO,SAAS;AACd,UAAM,WAAW,MAAM,QAAQ,QAAW,UAAU;AACpD,UAAM,QAAQ,SAAS,QAAQ;AAE/B,QAAI,CAAC,SAAS,MAAM,WAAW,GAAG;AAChC,gBAAU;AACV;AAAA,IACF;AAEA,YAAQ,KAAK,GAAG,KAAK;AAErB,UAAM,SAAS,UAAU,QAAQ;AACjC,QAAI,CAAC,OAAO,OAAO;AACjB,gBAAU;AACV;AAAA,IACF;AAEA,iBAAa,OAAO;AAAA,EACtB;AAEA,SAAO;AACT;;;AClSA,SAAS,aAAgB,MAAoB;AAC3C,MAAI,MAAM,QAAQ,IAAI,EAAG,QAAO;AAChC,MAAI,SAAS,UAAa,SAAS,KAAM,QAAO,CAAC,IAAS;AAC1D,SAAO,CAAC;AACV;AAEA,SAAS,iBACP,MACA,QACA,KACA,UACS;AACT,MAAI,CAAC,UAAU,CAAC,SAAU,QAAO;AACjC,QAAM,SAAS,OAAO,UAAU,IAAI;AACpC,MAAI,CAAC,OAAO,SAAS;AACnB,UAAM,IAAI,mBAAmB,KAAK,OAAO,KAAK;AAAA,EAChD;AACA,SAAO,OAAO;AAChB;AAEA,gBAAuB,WACrB,QACA,UACA,QACA,eAAwB,OACxB,MACA,cACA,gBACgD;AAChD,QAAM,WAAW,OAAO,oBAAoB;AAC5C,QAAM,gBAAgB,MAAM;AAAA,IAC1B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,QAAM,YAAY;AAAA,IAChB,cAAc;AAAA,IACd;AAAA,IACA,GAAG,OAAO,QAAQ,CAAC,IAAI,QAAQ;AAAA,IAC/B;AAAA,EACF;AAEA,QAAM,aAAa,SAAS,cAAc,QAAQ,SAAS,KAAK,KAAK,EAAE;AAEvE,QAAM,EAAE,MAAM,aAAgB,SAAS,GAAG,MAAM,GAAG,WAAW;AAE9D,WAAS,OAAO,GAAG,QAAQ,YAAY,QAAQ;AAC7C,UAAM,MAAM,SAAS,SAAS,GAAG,IAAI,MAAM;AAC3C,UAAM,gBAAgB,GAAG,QAAQ,GAAG,GAAG,QAAQ,IAAI;AAEnD,YAAQ,iBAAiB,IAAI,IAAI,UAAU,KAAK,aAAa,EAAE;AAE/D,UAAM,WAAW,MAAM;AAAA,MACrB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,UAAM,WAAW;AAAA,MACf,SAAS;AAAA,MACT;AAAA,MACA,GAAG,OAAO,QAAQ,CAAC,IAAI,aAAa;AAAA,MACpC;AAAA,IACF;AACA,UAAM,WAAW,aAAgB,QAAQ;AACzC,QAAI,SAAS,WAAW,EAAG;AAE3B,UAAM,EAAE,MAAM,UAAU,MAAM,WAAW;AAAA,EAC3C;AACF;;;AC1EO,IAAe,gBAAf,MAAoD;AAAA,EAC/C;AAAA,EACA;AAAA,EACA;AAAA,EACF;AAAA,EACA;AAAA,EAER,YAAY,QAAmB,WAAc;AAC3C,SAAK,UAAU;AACf,SAAK,aAAa;AAClB,SAAK,MAAM,aAAa,QAAQ,SAAS;AAAA,EAC3C;AAAA,EAEO,eACL,iBACG,MAC6C;AAChD,UAAM,MAAM,KAAK,WAAW,YAAY;AACxC,UAAM,EAAE,MAAM,KAAK,IAAI;AAAA,MACrB;AAAA,MACA;AAAA,MACA,KAAK,QAAQ,cAAc;AAAA,IAC7B;AACA,WAAO;AAAA,MACL,KAAK;AAAA,MACL;AAAA,MACA,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ;AAAA,MACA,IAAI;AAAA,MACJ,IAAI;AAAA,IACN;AAAA,EACF;AAAA,EAEA,eAA0E;AACxE,QAAI,CAAC,KAAK,UAAU;AAClB,WAAK,WAAW,aAAa,KAAK,SAAS,KAAK,YAAY;AAAA,QAC1D,gBAAgB;AAAA,MAClB,CAAC;AAAA,IACH;AACA,WAAO,KAAK;AAAA,EAGd;AAAA,EAEA,eAA0E;AACxE,QAAI,CAAC,KAAK,UAAU;AAClB,WAAK,WAAW,aAAa,KAAK,SAAS,KAAK,YAAY;AAAA,QAC1D,UAAU;AAAA,MACZ,CAAC;AAAA,IACH;AACA,WAAO,KAAK;AAAA,EAGd;AACF;;;ACvEA,SAAS,KAAAE,UAAS;;;ACAlB,SAAS,KAAAC,UAAS;;;ACAlB,SAAS,SAAS;AAEX,SAAS,QACd,QACsC;AACtC,SAAO,EAAE,MAAM;AAAA,IACb,EAAE,KAAK,MAA0C;AAAA,IACjD,EAAE,OAAO;AAAA,EACX,CAAC;AACH;;;ADNO,IAAM,qBAAqBC,GAAE,YAAY;AAAA,EAC9C,aAAaA,GAAE,OAAO,EAAE,SAAS;AAAA,EACjC,MAAMA,GAAE,OAAO;AAAA,EACf,QAAQA,GAAE,OAAO;AAAA,EACjB,YAAYA,GAAE,OAAO;AAAA,EACrB,wBAAwBA,GAAE,OAAO;AAAA,EACjC,yBAAyBA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC7C,cAAcA,GAAE,OAAO;AAAA,EACvB,YAAYA,GAAE,OAAO,EAAE,SAAS;AAClC,CAAC;AAEM,IAAM,wBAAwBA,GAAE,YAAY;AAAA,EACjD,YAAYA,GAAE,OAAO;AAAA,EACrB,cAAc,QAAQ,CAAC,aAAa,eAAe,UAAU,CAAC;AAAA,EAC9D,UAAUA,GAAE,OAAO;AAAA,EACnB,WAAWA,GAAE,MAAMA,GAAE,OAAO,CAAC,EAAE,SAAS;AAC1C,CAAC;AAEM,IAAM,6BAA6BA,GAAE,YAAY;AAAA,EACtD,UAAUA,GAAE,OAAO;AAAA,EACnB,YAAYA,GAAE,OAAO;AACvB,CAAC;AAEM,IAAM,qBAAqBA,GAAE,YAAY;AAAA,EAC9C,SAASA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,WAAWA,GAAE,OAAO,EAAE,SAAS;AACjC,CAAC;;;ADzBM,IAAM,oBAAoB;AAAA,EAC/B,iBAAiB;AAAA,IACf,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,YAAY;AAAA,IACzB,gBAAgB;AAAA,EAClB;AAAA,EACA,iBAAiB;AAAA,IACf,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,YAAY;AAAA,IACzB,gBAAgBC,GAAE,MAAMA,GAAE,OAAO,CAAC;AAAA,EACpC;AAAA,EACA,UAAU;AAAA,IACR,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,YAAY;AAAA,IACzB,gBAAgB;AAAA,EAClB;AAAA,EACA,cAAc;AAAA,IACZ,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,gBAAgBA,GAAE,MAAMA,GAAE,OAAO,CAAC;AAAA,EACpC;AACF;;;AGhCA,SAAS,KAAAC,UAAS;;;ACAlB,SAAS,KAAAC,UAAS;AAGX,IAAM,gBAAgBC,GAAE,YAAY;AAAA,EACzC,YAAYA,GAAE,OAAO;AAAA,EACrB,cAAc,QAAQ,CAAC,aAAa,eAAe,YAAY,SAAS,CAAC;AAAA,EACzE,UAAUA,GAAE,OAAO;AAAA,EACnB,WAAWA,GAAE,MAAMA,GAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACxC,YAAYA,GAAE,QAAQ,EAAE,SAAS;AAAA,EACjC,YAAYA,GAAE,QAAQ,EAAE,SAAS;AACnC,CAAC;AAEM,IAAM,qBAAqBA,GAAE,YAAY;AAAA,EAC9C,UAAUA,GAAE,OAAO;AAAA,EACnB,YAAYA,GAAE,OAAO;AACvB,CAAC;;;ADXM,IAAM,mBAAmB;AAAA,EAC9B,qBAAqB;AAAA,IACnB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,YAAY;AAAA,IACzB,gBAAgBC,GAAE,MAAM,aAAa;AAAA,EACvC;AAAA,EACA,0BAA0B;AAAA,IACxB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,YAAY;AAAA,IACzB,gBAAgBA,GAAE,MAAM,kBAAkB;AAAA,EAC5C;AAAA,EACA,sBAAsB;AAAA,IACpB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,gBAAgBA,GAAE,MAAM,aAAa;AAAA,EACvC;AAAA,EACA,2BAA2B;AAAA,IACzB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,gBAAgBA,GAAE,MAAM,kBAAkB;AAAA,EAC5C;AAAA,EACA,wBAAwB;AAAA,IACtB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,eAAe;AAAA,IAC5B,gBAAgBA,GAAE,MAAM,aAAa;AAAA,EACvC;AAAA,EACA,6BAA6B;AAAA,IAC3B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,eAAe;AAAA,IAC5B,gBAAgBA,GAAE,MAAM,kBAAkB;AAAA,EAC5C;AAAA,EACA,aAAa;AAAA,IACX,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,aAAa,EAAE,UAAU,WAAW;AAAA,IACpC,aAAa,CAAC,eAAyB;AAAA,IACvC,eAAeA,GAAE,MAAMA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACzC;AAAA,EACA,cAAc;AAAA,IACZ,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,aAAa,EAAE,UAAU,WAAW;AAAA,IACpC,aAAa,CAAC,eAAyB;AAAA,EACzC;AAAA,EACA,yBAAyB;AAAA,IACvB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,aAAa,EAAE,YAAY,cAAc;AAAA,EAC3C;AACF;;;AEzDO,IAAM,iBAAN,cAA6B,cAAwC;AAAA,EAClE;AAAA,EAER,YAAY,QAAmB;AAC7B,UAAM,QAAQ,iBAAiB;AAC/B,SAAK,aAAa,aAAa,QAAQ,gBAAgB;AAAA,EACzD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,gBAAgB,YAA2C;AACzD,WAAO,KAAK,IAAI,gBAAgB,UAAU;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,YAAY,YAAgD;AAC1D;AAAA,MACE;AAAA,IACF;AAGA,WAAO,KAAK,WAAW;AAAA,MACrB;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,iBAAiB,YAAqD;AACpE;AAAA,MACE;AAAA,IACF;AAGA,WAAO,KAAK,WAAW,yBAAyB,UAAU;AAAA,EAC5D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,gBAAgB,YAAuC;AACrD,WAAO,KAAK,IAAI,gBAAgB,UAAU;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,SAAS,YAA2C;AAClD,WAAO,KAAK,IAAI,SAAS,UAAU;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,eAAkC;AAChC,WAAO,KAAK,IAAI,aAAa;AAAA,EAC/B;AAAA,EAEA,kBAAuE;AACrE,WAAO,KAAK,eAAuB,cAAc;AAAA,EACnD;AAAA,EAEA,mBACE,YACqD;AACrD,WAAO,KAAK,eAAuB,mBAAmB,UAAU;AAAA,EAClE;AACF;;;AC1GA,SAAS,KAAAC,UAAS;;;ACAlB,SAAS,KAAAC,UAAS;AAGX,IAAM,uBAAuBC,GAAE,YAAY;AAAA,EAChD,SAASA,GAAE,OAAO;AAAA,EAClB,SAASA,GAAE,OAAO;AAAA,EAClB,UAAUA,GAAE,OAAO;AAAA,EACnB,aAAaA,GAAE,OAAO;AAAA,EACtB,eAAe,QAAQ,CAAC,WAAW,gBAAgB,QAAQ,OAAO,CAAC;AAAA,EACnE,eAAeA,GAAE,OAAO;AAAA,EACxB,cAAcA,GAAE,QAAQ;AAAA,EACxB,mBAAmBA,GAAE,QAAQ,EAAE,SAAS;AAC1C,CAAC;AAEM,IAAM,sBAAsBA,GAAE,YAAY;AAAA,EAC/C,SAASA,GAAE,OAAO;AAAA,EAClB,UAAUA,GAAE,YAAY;AAAA,IACtB,GAAGA,GAAE,OAAO;AAAA,IACZ,GAAGA,GAAE,OAAO;AAAA,IACZ,GAAGA,GAAE,OAAO;AAAA,EACd,CAAC;AACH,CAAC;AAEM,IAAM,kBAAkBA,GAAE,YAAY;AAAA,EAC3C,SAASA,GAAE,OAAO;AAAA,EAClB,MAAMA,GAAE,OAAO;AACjB,CAAC;;;ADlBM,IAAM,iBAAiB;AAAA,EAC5B,oBAAoB;AAAA,IAClB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,gBAAgBC,GAAE,MAAM,oBAAoB;AAAA,EAC9C;AAAA,EACA,sBAAsB;AAAA,IACpB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,eAAe;AAAA,IAC5B,gBAAgBA,GAAE,MAAM,oBAAoB;AAAA,EAC9C;AAAA,EACA,6BAA6B;AAAA,IAC3B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,aAAa,CAAC,YAAsB;AAAA,IACpC,gBAAgBA,GAAE,MAAM,mBAAmB;AAAA,EAC7C;AAAA,EACA,yBAAyB;AAAA,IACvB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,aAAa,CAAC,YAAsB;AAAA,IACpC,gBAAgBA,GAAE,MAAM,eAAe;AAAA,EACzC;AAAA,EACA,+BAA+B;AAAA,IAC7B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,eAAe;AAAA,IAC5B,aAAa,CAAC,YAAsB;AAAA,EACtC;AAAA,EACA,2BAA2B;AAAA,IACzB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,eAAe;AAAA,IAC5B,aAAa,CAAC,YAAsB;AAAA,EACtC;AACF;;;AE3CO,IAAM,eAAN,cAA2B,cAAqC;AAAA,EACrE,YAAY,QAAmB;AAC7B,UAAM,QAAQ,cAAc;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,mBAAmB,aAAgD;AACjE,WAAO,KAAK,IAAI,mBAAmB,WAAW;AAAA,EAGhD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,4BACE,aACA,SAC0B;AAC1B,WAAO,KAAK,IAAI;AAAA,MACd;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,wBACE,aACA,SACsB;AACtB,WAAO,KAAK,IAAI,wBAAwB,aAAa,OAAO;AAAA,EAG9D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,qBAAqB,eAAkD;AACrE,WAAO,KAAK,IAAI,qBAAqB,aAAa;AAAA,EAGpD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,8BACE,eACA,SAC0B;AAC1B,WAAO,KAAK,IAAI;AAAA,MACd;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,0BACE,eACA,SACsB;AACtB,WAAO,KAAK,IAAI;AAAA,MACd;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,sBACE,aAC6D;AAC7D,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,wBACE,eAC6D;AAC7D,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;;;ACjIA,SAAS,KAAAC,UAAS;;;ACAlB,SAAS,KAAAC,UAAS;AAGX,IAAM,sBAAsBC,GAAE,YAAY;AAAA,EAC/C,UAAUA,GAAE,OAAO;AAAA,EACnB,YAAYA,GAAE,OAAO;AAAA,EACrB,OAAOA,GAAE,OAAO;AAAA,EAChB,YAAYA,GAAE,OAAO;AAAA,EACrB,gBAAgB,QAAQ;AAAA,IACtB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACH,CAAC;AAEM,IAAM,4BAA4BA,GAAE,YAAY;AAAA,EACrD,UAAUA,GAAE,OAAO;AAAA,EACnB,MAAMA,GAAE,OAAO;AAAA,EACf,OAAOA,GAAE,OAAO;AAAA,EAChB,MAAMA,GAAE,OAAO;AAAA,EACf,UAAUA,GAAE,OAAO;AAAA,EACnB,YAAYA,GAAE,OAAO;AAAA,EACrB,YAAY,QAAQ;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAAA,EACD,UAAUA,GAAE,OAAO;AAAA,EACnB,YAAYA,GAAE,OAAO;AAAA,EACrB,UAAUA,GAAE,OAAO;AACrB,CAAC;AAEM,IAAM,8BAA8BA,GAAE,YAAY;AAAA,EACvD,cAAcA,GAAE,OAAO;AAAA,EACvB,gBAAgB,QAAQ;AAAA,IACtB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACH,CAAC;;;ADnCM,IAAM,oBAAoB;AAAA,EAC/B,mBAAmB;AAAA,IACjB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,gBAAgBC,GAAE,MAAM,mBAAmB;AAAA,EAC7C;AAAA,EACA,sBAAsB;AAAA,IACpB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,eAAe,SAAS;AAAA,IACrC,gBAAgB;AAAA,EAClB;AAAA,EACA,mBAAmB;AAAA,IACjB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,eAAe,SAAS;AAAA,IACrC,gBAAgBA,GAAE,MAAM,2BAA2B;AAAA,EACrD;AAAA,EACA,wBAAwB;AAAA,IACtB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,eAAe,SAAS;AAAA,IACrC,aAAa,CAAC,cAAsB,EAAE,SAAS;AAAA,EACjD;AACF;;;AE3BO,IAAM,iBAAN,cAA6B,cAAwC;AAAA,EAC1E,YAAY,QAAmB;AAC7B,UAAM,QAAQ,iBAAiB;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,kBAAkB,aAA+C;AAC/D,WAAO,KAAK,IAAI,kBAAkB,WAAW;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,qBACE,aACA,SAC8B;AAC9B,WAAO,KAAK,IAAI,qBAAqB,aAAa,OAAO;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,uBACE,aACA,SACA,UACe;AACf,WAAO,KAAK,IAAI;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,kBACE,aACA,SACkC;AAClC,WAAO,KAAK,IAAI,kBAAkB,aAAa,OAAO;AAAA,EACxD;AAAA,EAEA,qBACE,aAC4D;AAC5D,WAAO,KAAK,eAA8B,qBAAqB,WAAW;AAAA,EAC5E;AAAA,EAEA,qBACE,aACA,SACoE;AACpE,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;;;AC5FA,SAAS,KAAAC,WAAS;;;ACAlB,SAAS,KAAAC,WAAS;AAGX,IAAM,sBAAsBC,IAAE,YAAY;AAAA,EAC/C,cAAcA,IAAE,OAAO,EAAE,SAAS;AAAA,EAClC,MAAMA,IAAE,OAAO;AAAA,EACf,aAAaA,IAAE,OAAO,EAAE,SAAS;AAAA,EACjC,gBAAgBA,IAAE,OAAO;AAAA,EACzB,aAAaA,IAAE,OAAO,EAAE,SAAS;AAAA,EACjC,YAAYA,IAAE,OAAO,EAAE,SAAS;AAAA,EAChC,aAAaA,IAAE,OAAO,EAAE,SAAS;AAAA,EACjC,cAAcA,IAAE,OAAO;AAAA,EACvB,SAASA,IAAE,OAAO;AAAA,EAClB,QAAQ,QAAQ,CAAC,QAAQ,QAAQ,CAAC;AAAA,EAClC,iBAAiBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACrC,OAAOA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,UAAUA,IAAE,OAAO;AACrB,CAAC;AAEM,IAAM,0BAA0BA,IAAE,YAAY;AAAA,EACnD,SAASA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,WAAWA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,WAAWA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,WAAWA,IAAE,OAAO,EAAE,SAAS;AACjC,CAAC;AAEM,IAAM,4BAA4BA,IAAE,YAAY;AAAA,EACrD,UAAUA,IAAE,OAAO;AAAA,EACnB,cAAcA,IAAE,OAAO;AAAA,EACvB,QAAQA,IAAE,OAAO;AAAA,EACjB,YAAYA,IAAE,OAAO;AAAA,EACrB,WAAWA,IAAE,OAAO;AAAA,EACpB,cAAcA,IAAE,OAAO,EAAE,SAAS;AAAA,EAClC,iBAAiBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACrC,6BAA6BA,IAAE,OAAO,EAAE,SAAS;AACnD,CAAC;AAEM,IAAM,sBAAsBA,IAAE,YAAY;AAAA,EAC/C,UAAUA,IAAE,OAAO;AAAA,EACnB,eAAeA,IAAE,OAAO;AAAA,EACxB,YAAYA,IAAE,OAAO;AAAA,EACrB,gBAAgBA,IAAE,OAAO;AAAA,EACzB,kBAAkBA,IAAE,OAAO;AAC7B,CAAC;AAEM,IAAM,kBAAkBA,IAAE,YAAY;AAAA,EAC3C,SAASA,IAAE,OAAO;AAAA,EAClB,SAASA,IAAE,OAAO;AAAA,EAClB,aAAaA,IAAE,OAAO;AAAA,EACtB,eAAeA,IAAE,OAAO;AAAA,EACxB,UAAUA,IAAE,OAAO;AAAA,EACnB,iBAAiBA,IAAE,OAAO;AAAA,EAC1B,qBAAqBA,IAAE,OAAO;AAAA,EAC9B,MAAMA,IAAE,OAAO;AACjB,CAAC;AAEM,IAAM,2BAA2BA,IAAE,YAAY;AAAA,EACpD,gBAAgBA,IAAE,OAAO;AAAA,EACzB,WAAWA,IAAE,OAAO;AAAA,EACpB,YAAYA,IAAE,OAAO;AAAA,EACrB,YAAYA,IAAE,QAAQ,EAAE,SAAS;AACnC,CAAC;AAEM,IAAM,oBAAoBA,IAAE,YAAY;AAAA,EAC7C,0BAA0BA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC9C,gBAAgBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACpC,kBAAkBA,IAAE,OAAO,EAAE,SAAS;AACxC,CAAC;AAEM,IAAM,cAAcA,IAAE,YAAY;AAAA,EACvC,UAAUA,IAAE,OAAO;AAAA,EACnB,OAAOA,IAAE,OAAO;AAAA,EAChB,aAAaA,IAAE,OAAO;AAAA,EACtB,MAAMA,IAAE,OAAO;AAAA,EACf,WAAWA,IAAE,OAAO;AAAA,EACpB,gBAAgBA,IAAE,OAAO;AAAA,EACzB,QAAQA,IAAE,OAAO;AAAA,EACjB,QAAQ,QAAQ,CAAC,WAAW,QAAQ,CAAC;AAAA,EACrC,UAAUA,IAAE;AAAA,IACVA,IAAE,YAAY;AAAA,MACZ,MAAMA,IAAE,OAAO;AAAA,MACf,OAAOA,IAAE,OAAO;AAAA,MAChB,SAASA,IAAE,OAAO;AAAA,MAClB,OAAOA,IAAE,OAAO,EAAE,SAAS;AAAA,IAC7B,CAAC;AAAA,EACH;AACF,CAAC;AAEM,IAAM,qBAAqBA,IAAE,YAAY;AAAA,EAC9C,iBAAiBA,IAAE,OAAO;AAAA,EAC1B,MAAMA,IAAE,OAAO;AAAA,EACf,WAAWA,IAAE,OAAO;AAAA,EACpB,aAAa,QAAQ;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAAA,EACD,WAAWA,IAAE,OAAO;AAAA,EACpB,MAAMA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,SAASA,IAAE,QAAQ,EAAE,SAAS;AAChC,CAAC;AAEM,IAAM,uBAAuBA,IAAE,YAAY;AAAA,EAChD,UAAUA,IAAE,OAAO;AAAA,EACnB,MAAMA,IAAE,OAAO;AACjB,CAAC;AAEM,IAAM,6BAA6BA,IAAE,YAAY;AAAA,EACtD,cAAcA,IAAE,OAAO;AAAA,EACvB,gBAAgBA,IAAE,OAAO;AAAA,EACzB,aAAaA,IAAE,OAAO,EAAE,SAAS;AAAA,EACjC,YAAYA,IAAE,OAAO,EAAE,SAAS;AAClC,CAAC;AAEM,IAAM,4BAA4BA,IAAE,YAAY;AAAA,EACrD,iBAAiBA,IAAE,OAAO;AAAA,EAC1B,qBAAqBA,IAAE,OAAO;AAAA,EAC9B,SAASA,IAAE,OAAO;AAAA,EAClB,WAAWA,IAAE,OAAO;AAAA,EACpB,gBAAgBA,IAAE,OAAO;AAC3B,CAAC;AAEM,IAAM,sBAAsBA,IAAE,YAAY;AAAA,EAC/C,OAAOA,IAAE,MAAMA,IAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACpC,aAAaA,IAAE,MAAMA,IAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EAC1C,eAAeA,IAAE,MAAMA,IAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EAC5C,gBAAgBA,IAAE,MAAMA,IAAE,OAAO,CAAC,EAAE,SAAS;AAC/C,CAAC;;;ACjID,SAAS,KAAAC,WAAS;AAGX,IAAM,iBAAiBC,IAAE,YAAY;AAAA,EAC1C,SAASA,IAAE,OAAO;AAAA,EAClB,WAAW,QAAQ,CAAC,SAAS,YAAY,SAAS,CAAC;AAAA,EACnD,UAAUA,IAAE,OAAO;AACrB,CAAC;AAEM,IAAM,sBAAsBA,IAAE,OAAO;AAAA,EAC1C,WAAWA,IAAE,OAAO;AAAA,EACpB,OAAOA,IAAE,OAAO;AAAA,EAChB,MAAMA,IAAE,OAAO;AAAA,EACf,OAAOA,IAAE,OAAO,EAAE,SAAS;AAC7B,CAAC;AAEM,IAAM,wBAAwBA,IAAE,YAAY;AAAA,EACjD,SAASA,IAAE,OAAOA,IAAE,OAAO,GAAGA,IAAE,OAAO,CAAC;AAAA,EACxC,WAAWA,IAAE,QAAQ;AAAA,EACrB,OAAOA,IAAE,QAAQ;AAAA,EACjB,cAAcA,IAAE,KAAK,CAAC,YAAY,YAAY,gBAAgB,CAAC,EAAE,SAAS;AAAA,EAC1E,SAASA,IACN,OAAO;AAAA,IACN,MAAMA,IAAE,OAAO;AAAA,IACf,SAASA,IAAE,OAAO;AAAA,EACpB,CAAC,EACA,SAAS;AAAA,EACZ,WAAWA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,MAAMA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,iBAAiBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACrC,WAAW,oBAAoB,SAAS;AAAA,EACxC,gBAAgBA,IAAE,OAAO,EAAE,SAAS;AACtC,CAAC;AAEM,SAAS,YAAoC,YAAe;AACjE,SAAOA,IAAE,OAAO;AAAA,IACd,MAAM;AAAA,IACN,MAAM;AAAA,EACR,CAAC;AACH;;;AFtBO,IAAM,qBAAqB;AAAA,EAChC,wBAAwB;AAAA,IACtB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,gBAAgB;AAAA,EAClB;AAAA,EACA,mBAAmB;AAAA,IACjB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,gBAAgBC,IAAE,MAAM,mBAAmB;AAAA,EAC7C;AAAA,EACA,eAAe;AAAA,IACb,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,gBAAgBA,IAAE,MAAM,eAAe;AAAA,EACzC;AAAA,EACA,UAAU;AAAA,IACR,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,gBAAgB;AAAA,EAClB;AAAA,EACA,cAAc;AAAA,IACZ,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,gBAAgBA,IAAE,MAAM,cAAc;AAAA,EACxC;AAAA,EACA,WAAW;AAAA,IACT,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,gBAAgBA,IAAE,MAAM,oBAAoB;AAAA,EAC9C;AAAA,EACA,yBAAyB;AAAA,IACvB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,gBAAgBA,IAAE,MAAM,yBAAyB;AAAA,EACnD;AAAA,EACA,uBAAuB;AAAA,IACrB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,gBAAgBA,IAAE,MAAM,wBAAwB;AAAA,EAClD;AAAA,EACA,gBAAgB;AAAA,IACd,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,gBAAgB;AAAA,EAClB;AAAA,EACA,WAAW;AAAA,IACT,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,gBAAgBA,IAAE,MAAM,WAAW;AAAA,EACrC;AAAA,EACA,kBAAkB;AAAA,IAChB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,gBAAgBA,IAAE,MAAM,kBAAkB;AAAA,EAC5C;AAAA,EACA,aAAa;AAAA,IACX,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,gBAAgB;AAAA,EAClB;AAAA,EACA,0BAA0B;AAAA,IACxB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,SAAS;AAAA,EACX;AAAA,EACA,yBAAyB;AAAA,IACvB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,SAAS;AAAA,EACX;AACF;;;AGhGO,IAAM,kBAAN,cAA8B,cAAyC;AAAA,EAC5E,YAAY,QAAmB;AAC7B,UAAM,QAAQ,kBAAkB;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,uBAAuB,aAA6C;AAClE,WAAO,KAAK,IAAI,uBAAuB,WAAW;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,2BAA2B,aAA+C;AACxE,WAAO,KAAK,IAAI,kBAAkB,WAAW;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,uBAAuB,aAA2C;AAChE,WAAO,KAAK,IAAI,cAAc,WAAW;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,+BACE,aAC+B;AAC/B,WAAO,KAAK,IAAI,sBAAsB,WAAW;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,mBACE,aACA,YACiB;AACjB,WAAO,KAAK,IAAI;AAAA,MACd;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,oBAAoB,aAA2C;AAC7D,WAAO,KAAK,IAAI,eAAe,WAAW;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,mBAAmB,aAAuC;AACxD,WAAO,KAAK,IAAI,UAAU,WAAW;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,0BAA0B,aAA8C;AACtE,WAAO,KAAK,IAAI,iBAAiB,WAAW;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,kCACE,aACyB;AAGzB,WAAO,KAAK,IAAI,wBAAwB,WAAW;AAAA,EAGrD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,qBAAqB,aAAiD;AACpE,WAAO,KAAK,IAAI,YAAY,WAAW;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,kBAAkB,aAA6C;AAC7D,WAAO,KAAK,IAAI,SAAS,WAAW;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,sBAAsB,aAA0C;AAC9D,WAAO,KAAK,IAAI,aAAa,WAAW;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,mBAAmB,aAAgD;AACjE,WAAO,KAAK,IAAI,UAAU,WAAW;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,yBACE,YACiC;AACjC,WAAO,KAAK,IAAI,yBAAyB,UAAU;AAAA,EAGrD;AAAA,EAEA,8BACE,aAC4D;AAC5D,WAAO,KAAK,eAA8B,qBAAqB,WAAW;AAAA,EAC5E;AAAA,EAEA,0BACE,aACwD;AACxD,WAAO,KAAK,eAA0B,iBAAiB,WAAW;AAAA,EACpE;AAAA,EAEA,kCACE,aACiE;AACjE,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,sBACE,aACoD;AACpD,WAAO,KAAK,eAAsB,aAAa,WAAW;AAAA,EAC5D;AAAA,EAEA,6BACE,aAC2D;AAC3D,WAAO,KAAK,eAA6B,oBAAoB,WAAW;AAAA,EAC1E;AAAA,EAEA,qCACE,aAC2D;AAC3D,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,yBACE,aACuD;AACvD,WAAO,KAAK,eAAyB,gBAAgB,WAAW;AAAA,EAClE;AAAA,EAEA,sBACE,aAC6D;AAC7D,WAAO,KAAK,eAA+B,aAAa,WAAW;AAAA,EACrE;AACF;;;ACtPA,SAAS,KAAAC,WAAS;;;ACAlB,SAAS,KAAAC,WAAS;AAGX,IAAM,kBAAkBC,IAAE,YAAY;AAAA,EAC3C,eAAeA,IACZ,YAAY;AAAA,IACX,aAAaA,IAAE,OAAO;AAAA,IACtB,eAAe,QAAQ,CAAC,WAAW,WAAW,CAAC;AAAA,EACjD,CAAC,EACA,SAAS;AAAA,EACZ,aAAaA,IAAE;AAAA,IACbA,IAAE,YAAY;AAAA,MACZ,eAAeA,IAAE,OAAO;AAAA,MACxB,aAAaA,IAAE,OAAO;AAAA,MACtB,eAAe,QAAQ,CAAC,WAAW,WAAW,CAAC;AAAA,MAC/C,UAAUA,IAAE,MAAMA,IAAE,OAAO,CAAC;AAAA,MAC5B,MAAMA,IAAE,OAAO,EAAE,SAAS;AAAA,IAC5B,CAAC;AAAA,EACH;AAAA,EACA,sBAAsBA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC1C,0BAA0BA,IAAE,OAAO,EAAE,SAAS;AAChD,CAAC;;;ADjBM,IAAM,iBAAiB;AAAA,EAC5B,WAAW;AAAA,IACT,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,gBAAgB;AAAA,EAClB;AAAA,EACA,aAAa;AAAA,IACX,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,gBAAgBC,IAAE,MAAMA,IAAE,OAAO,CAAC;AAAA,EACpC;AACF;;;AEbO,IAAM,eAAN,cAA2B,cAAqC;AAAA,EACrE,YAAY,QAAmB;AAC7B,UAAM,QAAQ,cAAc;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,UAAU,aAAyC;AACjD,WAAO,KAAK,IAAI,UAAU,WAAW;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,YAAY,aAAwC;AAClD,WAAO,KAAK,IAAI,YAAY,WAAW;AAAA,EACzC;AAAA,EAEA,eACE,aACqD;AACrD,WAAO,KAAK,eAAuB,eAAe,WAAW;AAAA,EAC/D;AACF;;;AChCO,IAAM,iBAAN,cAA6B,cAAuC;AAAA,EACzE,YAAY,QAAmB;AAC7B,UAAM,QAAQ,gBAAgB;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,oBAAoB,YAAwC;AAC1D,WAAO,KAAK,IAAI,oBAAoB,UAAU;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,yBAAyB,YAA6C;AACpE,WAAO,KAAK,IAAI,yBAAyB,UAAU;AAAA,EACrD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,wBACE,aACA,YACe;AACf,WAAO,KAAK,IAAI;AAAA,MACd;AAAA,MACA,WAAW,KAAK,GAAG;AAAA,IACrB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,qBAAqB,aAAyC;AAC5D,WAAO,KAAK,IAAI,qBAAqB,WAAW;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,sBACE,aACA,UACA,YACmB;AACnB,WAAO,KAAK,IAAI,YAAY,aAAa,UAAU,UAAU;AAAA,EAG/D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,qBACE,aACA,UACA,YACe;AACf,WAAO,KAAK,IAAI;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,0BAA0B,aAA8C;AACtE,WAAO,KAAK,IAAI,0BAA0B,WAAW;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,uBAAuB,eAA2C;AAChE,WAAO,KAAK,IAAI,uBAAuB,aAAa;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,4BAA4B,eAAgD;AAC1E,WAAO,KAAK,IAAI,4BAA4B,aAAa;AAAA,EAC3D;AAAA,EAEA,uBACE,YACsD;AACtD,WAAO,KAAK,eAAwB,uBAAuB,UAAU;AAAA,EACvE;AAAA,EAEA,4BACE,YAC2D;AAC3D,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,wBACE,aACsD;AACtD,WAAO,KAAK,eAAwB,wBAAwB,WAAW;AAAA,EACzE;AAAA,EAEA,6BACE,aAC2D;AAC3D,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,0BACE,eACsD;AACtD,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,+BACE,eAC2D;AAC3D,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;;;ACpLA,SAAS,KAAAC,WAAS;;;ACAlB,SAAS,KAAAC,WAAS;AAGX,IAAM,iBAAiBC,IAAE,YAAY;AAAA,EAC1C,aAAaA,IAAE,OAAO;AAAA,EACtB,WAAWA,IAAE,OAAO;AAAA,EACpB,uBAAuBA,IAAE,OAAO;AAAA,EAChC,aAAaA,IAAE,OAAO,EAAE,SAAS;AAAA,EACjC,aAAaA,IAAE,OAAO,EAAE,SAAS;AAAA,EACjC,mBAAmBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACvC,iBAAiBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACrC,MAAM,QAAQ,CAAC,WAAW,iBAAiB,WAAW,WAAW,MAAM,CAAC;AAAA,EACxE,QAAQ,QAAQ;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC,EAAE,SAAS;AAAA,EACZ,OAAOA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,iBAAiBA,IAAE,QAAQ,EAAE,SAAS;AAAA,EACtC,cAAc,QAAQ;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC,EAAE,SAAS;AAAA,EACZ,aAAaA,IAAE,OAAO;AAAA,EACtB,cAAcA,IAAE,OAAO;AAAA,EACvB,eAAeA,IAAE,OAAO,EAAE,SAAS;AAAA,EACnC,gBAAgBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACpC,kBAAkBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACtC,OAAOA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,QAAQA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,YAAYA,IAAE,OAAO,EAAE,SAAS;AAAA,EAChC,QAAQA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,QAAQA,IAAE,OAAO,EAAE,SAAS;AAC9B,CAAC;AAEM,IAAM,qBAAqBA,IAAE,YAAY;AAAA,EAC9C,WAAWA,IAAE,OAAO;AAAA,EACpB,SAASA,IAAE,OAAO;AAAA,EAClB,UAAUA,IAAE,OAAO;AAAA,EACnB,cAAcA,IAAE,OAAO,EAAE,SAAS;AAAA,EAClC,cAAcA,IAAE,QAAQ;AAAA,EACxB,mBAAmBA,IAAE,QAAQ,EAAE,SAAS;AAAA,EACxC,aAAaA,IAAE,QAAQ;AACzB,CAAC;AAEM,IAAM,oBAAoBA,IAAE,YAAY;AAAA,EAC7C,QAAQA,IAAE,OAAO;AAAA,EACjB,WAAWA,IAAE,OAAO;AAAA,EACpB,UAAUA,IAAE,OAAO;AAAA,EACnB,QAAQA,IAAE,OAAO;AACnB,CAAC;;;ADnDM,IAAM,oBAAoB;AAAA,EAC/B,uBAAuB;AAAA,IACrB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,gBAAgBC,IAAE,MAAM,cAAc;AAAA,EACxC;AAAA,EACA,0BAA0B;AAAA,IACxB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,eAAe,YAAY;AAAA,IACxC,gBAAgBA,IAAE,MAAM,iBAAiB;AAAA,EAC3C;AAAA,EACA,2BAA2B;AAAA,IACzB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,eAAe,YAAY;AAAA,IACxC,gBAAgBA,IAAE,MAAM,kBAAkB;AAAA,EAC5C;AAAA,EACA,yBAAyB;AAAA,IACvB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,eAAe;AAAA,IAC5B,gBAAgBA,IAAE,MAAM,cAAc;AAAA,EACxC;AAAA,EACA,4BAA4B;AAAA,IAC1B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,iBAAiB,YAAY;AAAA,IAC1C,gBAAgBA,IAAE,MAAM,iBAAiB;AAAA,EAC3C;AAAA,EACA,6BAA6B;AAAA,IAC3B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,iBAAiB,YAAY;AAAA,IAC1C,gBAAgBA,IAAE,MAAM,kBAAkB;AAAA,EAC5C;AAAA,EACA,oBAAoB;AAAA,IAClB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,UAAU;AAAA,IACvB,gBAAgBA,IAAE,MAAM,cAAc;AAAA,EACxC;AAAA,EACA,uBAAuB;AAAA,IACrB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,YAAY;AAAA,IACzB,gBAAgBA,IAAE,MAAM,iBAAiB;AAAA,EAC3C;AAAA,EACA,wBAAwB;AAAA,IACtB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,YAAY;AAAA,IACzB,gBAAgBA,IAAE,MAAM,kBAAkB;AAAA,EAC5C;AACF;;;AElEO,IAAM,kBAAN,cAA8B,cAAwC;AAAA,EAC3E,YAAY,QAAmB;AAC7B,UAAM,QAAQ,iBAAiB;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,sBAAsB,aAA0C;AAC9D,WAAO,KAAK,IAAI,sBAAsB,WAAW;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,yBACE,aACA,YACwB;AACxB,WAAO,KAAK,IAAI;AAAA,MACd;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,0BACE,aACA,YACyB;AACzB,WAAO,KAAK,IAAI;AAAA,MACd;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,mBAAmB,UAAuC;AACxD,WAAO,KAAK,IAAI,mBAAmB,QAAQ;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,sBAAsB,YAA4C;AAChE,WAAO,KAAK,IAAI,sBAAsB,UAAU;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,uBAAuB,YAA6C;AAClE,WAAO,KAAK,IAAI,uBAAuB,UAAU;AAAA,EAGnD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,wBAAwB,eAA4C;AAClE,WAAO,KAAK,IAAI,wBAAwB,aAAa;AAAA,EAGvD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,2BACE,eACA,YACwB;AACxB,WAAO,KAAK,IAAI;AAAA,MACd;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,4BACE,eACA,YACyB;AACzB,WAAO,KAAK,IAAI;AAAA,MACd;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,sBACE,UACuD;AACvD,WAAO,KAAK,eAAyB,sBAAsB,QAAQ;AAAA,EACrE;AAAA,EAEA,yBACE,aACuD;AACvD,WAAO,KAAK,eAAyB,yBAAyB,WAAW;AAAA,EAC3E;AAAA,EAEA,2BACE,eACuD;AACvD,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;;;AC/JA,SAAS,KAAAC,WAAS;;;ACAlB,SAAS,KAAAC,WAAS;AAGX,IAAM,wBAAwBC,IAAE,YAAY;AAAA,EACjD,gBAAgBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACpC,MAAMA,IAAE,OAAO;AAAA,EACf,QAAQA,IAAE,OAAO;AAAA,EACjB,aAAaA,IAAE,OAAO,EAAE,SAAS;AAAA,EACjC,KAAKA,IAAE,OAAO,EAAE,SAAS;AAAA,EACzB,aAAaA,IAAE,OAAO,EAAE,SAAS;AAAA,EACjC,QAAQA,IAAE,OAAO;AAAA,EACjB,YAAYA,IAAE,OAAO;AAAA,EACrB,cAAcA,IAAE,OAAO,EAAE,SAAS;AAAA,EAClC,YAAYA,IAAE,OAAO,EAAE,SAAS;AAAA,EAChC,iBAAiBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACrC,cAAcA,IAAE,OAAO;AAAA,EACvB,QAAQA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,UAAUA,IAAE,OAAO;AAAA,EACnB,cAAcA,IAAE,QAAQ,EAAE,SAAS;AACrC,CAAC;AAEM,IAAM,mCAAmCA,IAAE,YAAY;AAAA,EAC5D,aAAaA,IAAE,OAAO,EAAE,SAAS;AAAA,EACjC,YAAYA,IAAE,QAAQ,EAAE,SAAS;AAAA,EACjC,WAAWA,IAAE,OAAO;AAAA,EACpB,YAAYA,IAAE,OAAO;AACvB,CAAC;AAEM,IAAM,yBAAyBA,IAAE,YAAY;AAAA,EAClD,UAAUA,IAAE,OAAO;AAAA,EACnB,OAAOA,IAAE,OAAO;AAAA,EAChB,aAAaA,IAAE,OAAO;AAAA,EACtB,YAAYA,IAAE,OAAO;AAAA,EACrB,MAAMA,IAAE,OAAO;AACjB,CAAC;AAEM,IAAM,4BAA4BA,IAAE,YAAY;AAAA,EACrD,aAAaA,IAAE,OAAO;AAAA,EACtB,SAASA,IAAE,OAAO;AAAA,EAClB,WAAWA,IAAE,OAAO;AAAA,EACpB,OAAO,QAAQ;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAAA,EACD,SAASA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,eAAeA,IAAE,OAAO,EAAE,SAAS;AAAA,EACnC,kBAAkBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACtC,aAAaA,IAAE,OAAO,EAAE,SAAS;AACnC,CAAC;AAEM,IAAM,6BAA6BA,IAAE,YAAY;AAAA,EACtD,QAAQA,IACL;AAAA,IACCA,IAAE,YAAY;AAAA,MACZ,UAAUA,IAAE,OAAO;AAAA,MACnB,MAAMA,IAAE,OAAO,EAAE,SAAS;AAAA,IAC5B,CAAC;AAAA,EACH,EACC,SAAS;AAAA,EACZ,QAAQA,IACL;AAAA,IACCA,IAAE,YAAY;AAAA,MACZ,UAAUA,IAAE,OAAO;AAAA,MACnB,MAAMA,IAAE,OAAO,EAAE,SAAS;AAAA,IAC5B,CAAC;AAAA,EACH,EACC,SAAS;AACd,CAAC;AAEM,IAAM,4BAA4BA,IAAE,YAAY;AAAA,EACrD,aAAaA,IAAE,OAAO;AAAA,EACtB,SAASA,IAAE,OAAO;AAAA,EAClB,WAAWA,IAAE,OAAO;AACtB,CAAC;AAEM,IAAM,+BAA+BA,IAAE,YAAY;AAAA,EACxD,UAAUA,IAAE,OAAO;AAAA,EACnB,OAAOA,IAAE,OAAO;AAAA,EAChB,aAAaA,IAAE,OAAO;AAAA,EACtB,cAAcA,IAAE,OAAO;AAAA,EACvB,WAAWA,IAAE,OAAO;AAAA,EACpB,WAAWA,IAAE,OAAO;AAAA,EACpB,QAAQA,IAAE,OAAO;AAAA,EACjB,QAAQ,QAAQ,CAAC,WAAW,QAAQ,CAAC;AACvC,CAAC;AAEM,IAAM,+BAA+BA,IAAE,YAAY;AAAA,EACxD,cAAcA,IAAE,OAAO;AAAA,EACvB,QAAQA,IAAE,MAAMA,IAAE,OAAO,CAAC;AAC5B,CAAC;AAEM,IAAM,kCAAkCA,IAAE,YAAY;AAAA,EAC3D,cAAcA,IAAE,OAAO;AAAA,EACvB,YAAYA,IAAE,OAAO;AAAA,EACrB,SAASA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,aAAaA,IAAE,OAAO,EAAE,SAAS;AAAA,EACjC,aAAaA,IAAE,OAAO,EAAE,SAAS;AAAA,EACjC,YAAYA,IAAE,OAAO,EAAE,SAAS;AAAA,EAChC,QAAQA,IAAE,QAAQ,EAAE,SAAS;AAAA,EAC7B,cAAcA,IAAE,OAAO,EAAE,SAAS;AACpC,CAAC;AAEM,IAAM,8BAA8BA,IAAE,YAAY;AAAA,EACvD,cAAcA,IAAE,OAAO;AAAA,EACvB,OAAOA,IAAE,MAAMA,IAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACpC,iBAAiBA,IAAE,MAAMA,IAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EAC9C,aAAaA,IAAE,MAAMA,IAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EAC1C,uBAAuBA,IAAE,MAAMA,IAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACpD,eAAeA,IAAE,MAAMA,IAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EAC5C,yBAAyBA,IAAE,MAAMA,IAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACtD,gBAAgBA,IAAE,MAAMA,IAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EAC7C,0BAA0BA,IAAE,MAAMA,IAAE,OAAO,CAAC,EAAE,SAAS;AACzD,CAAC;AAEM,IAAM,+BAA+BA,IAAE,YAAY;AAAA,EACxD,cAAcA,IAAE,OAAO;AAAA,EACvB,YAAYA,IAAE,OAAO;AAAA,EACrB,WAAWA,IAAE,OAAO;AAAA,EACpB,WAAWA,IAAE,OAAO;AAAA,EACpB,QAAQA,IAAE,MAAMA,IAAE,OAAO,CAAC;AAAA,EAC1B,OAAOA,IAAE,MAAMA,IAAE,OAAO,CAAC;AAC3B,CAAC;AAEM,IAAM,+BAA+BA,IAAE,YAAY;AAAA,EACxD,gBAAgBA,IAAE,OAAO;AAAA,EACzB,kBAAkB,QAAQ,CAAC,aAAa,aAAa,CAAC;AAAA,EACtD,aAAaA,IAAE,OAAO;AACxB,CAAC;AAEM,IAAM,kCAAkCA,IAAE,YAAY;AAAA,EAC3D,OAAO,QAAQ;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAAA,EACD,OAAOA,IACJ;AAAA,IACCA,IAAE,YAAY;AAAA,MACZ,SAASA,IAAE,OAAO;AAAA,MAClB,UAAUA,IAAE,OAAO;AAAA,IACrB,CAAC;AAAA,EACH,EACC,SAAS;AAAA,EACZ,wBAAwBA,IAAE,QAAQ,EAAE,SAAS;AAAA,EAC7C,2BAA2BA,IAAE,QAAQ,EAAE,SAAS;AAAA,EAChD,QAAQA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,kBAAkBA,IAAE,QAAQ,EAAE,SAAS;AAAA,EACvC,0CAA0CA,IAAE,QAAQ,EAAE,SAAS;AAAA,EAC/D,kCAAkCA,IAAE,OAAO,EAAE,SAAS;AAAA,EACtD,2BAA2BA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC/C,eAAeA,IAAE,OAAO,EAAE,SAAS;AAAA,EACnC,eAAeA,IAAE,OAAO,EAAE,SAAS;AAAA,EACnC,SAASA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,QAAQA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,UAAUA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,wBAAwBA,IAAE,QAAQ,EAAE,SAAS;AAC/C,CAAC;AAEM,IAAM,6BAA6BA,IAAE,YAAY;AAAA,EACtD,cAAcA,IAAE,OAAO;AAAA,EACvB,gBAAgBA,IAAE,OAAO;AAAA,EACzB,SAASA,IAAE,OAAO;AAAA,EAClB,WAAWA,IAAE,OAAO;AAAA,EACpB,YAAYA,IAAE,OAAO;AAAA,EACrB,UAAUA,IACP;AAAA,IACCA,IAAE,YAAY;AAAA,MACZ,MAAMA,IAAE,OAAO;AAAA,MACf,OAAO,QAAQ,CAAC,UAAU,WAAW,SAAS,CAAC;AAAA,IACjD,CAAC;AAAA,EACH,EACC,SAAS;AAAA,EACZ,cAAcA,IAAE,OAAO,EAAE,SAAS;AAAA,EAClC,MAAMA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,OAAOA,IAAE,OAAO;AAAA,EAChB,mBAAmBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACvC,iBAAiBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACrC,cAAcA,IAAE,OAAO,EAAE,SAAS;AAAA,EAClC,gBAAgBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACpC,qBAAqBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACzC,sBAAsBA,IAAE,OAAO,EAAE,SAAS;AAC5C,CAAC;AAEM,IAAM,yBAAyBA,IAAE,YAAY;AAAA,EAClD,UAAUA,IAAE,OAAO;AAAA,EACnB,MAAMA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,OAAOA,IAAE,MAAMA,IAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACpC,iBAAiBA,IAAE,MAAMA,IAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EAC9C,aAAaA,IAAE,MAAMA,IAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EAC1C,uBAAuBA,IAAE,MAAMA,IAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACpD,eAAeA,IAAE,MAAMA,IAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EAC5C,yBAAyBA,IAAE,MAAMA,IAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACtD,gBAAgBA,IAAE,MAAMA,IAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EAC7C,0BAA0BA,IAAE,MAAMA,IAAE,OAAO,CAAC,EAAE,SAAS;AACzD,CAAC;AAEM,IAAM,wBAAwBA,IAAE,YAAY;AAAA,EACjD,SAASA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,WAAWA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,WAAWA,IAAE,OAAO,EAAE,SAAS;AACjC,CAAC;AAIM,IAAM,kCAAkCA,IAAE,YAAY;AAAA,EAC3D,UAAUA,IAAE,OAAO;AAAA,EACnB,SAASA,IAAE,OAAO;AACpB,CAAC;AAEM,IAAM,qBAAqBA,IAAE,YAAY;AAAA,EAC9C,WAAWA,IAAE,OAAO;AAAA,EACpB,cAAcA,IAAE,OAAO;AAAA,EACvB,mBAAmBA,IAAE,OAAO;AAAA,EAC5B,cAAcA,IAAE,OAAO;AAAA,EACvB,aAAaA,IAAE,OAAO;AAAA,EACtB,eAAeA,IAAE,OAAO;AAAA,EACxB,QAAQA,IAAE,OAAO;AAAA,EACjB,eAAe,QAAQ,CAAC,UAAU,SAAS,CAAC,EAAE,SAAS;AAAA,EACvD,SAASA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,UAAUA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,oBAAoBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACxC,oBAAoBA,IAAE,OAAO,EAAE,SAAS;AAC1C,CAAC;;;AD1MM,IAAM,uBAAuB;AAAA,EAClC,oBAAoB;AAAA,IAClB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,eAAe;AAAA,IAC5B,gBAAgB;AAAA,EAClB;AAAA,EACA,+BAA+B;AAAA,IAC7B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,eAAe;AAAA,IAC5B,gBAAgBC,IAAE,MAAM,gCAAgC;AAAA,EAC1D;AAAA,EACA,0BAA0B;AAAA,IACxB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,eAAe;AAAA,IAC5B,gBAAgBA,IAAE,MAAM,eAAe;AAAA,EACzC;AAAA,EACA,wBAAwB;AAAA,IACtB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,eAAe;AAAA,IAC5B,gBAAgBA,IAAE,MAAM,kBAAkB;AAAA,EAC5C;AAAA,EACA,yBAAyB;AAAA,IACvB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,eAAe;AAAA,IAC5B,gBAAgB;AAAA,EAClB;AAAA,EACA,0BAA0B;AAAA,IACxB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,eAAe;AAAA,IAC5B,gBAAgBA,IAAE,MAAM,yBAAyB;AAAA,EACnD;AAAA,EACA,oBAAoB;AAAA,IAClB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,eAAe;AAAA,IAC5B,gBAAgB;AAAA,EAClB;AAAA,EACA,sBAAsB;AAAA,IACpB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,eAAe;AAAA,IAC5B,gBAAgBA,IAAE,MAAM,sBAAsB;AAAA,EAChD;AAAA,EACA,4BAA4B;AAAA,IAC1B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,eAAe;AAAA,IAC5B,gBAAgBA,IAAE,MAAM,4BAA4B;AAAA,EACtD;AAAA,EACA,uBAAuB;AAAA,IACrB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,eAAe;AAAA,IAC5B,gBAAgBA,IAAE,MAAMA,IAAE,OAAO,CAAC;AAAA,EACpC;AAAA,EACA,2BAA2B;AAAA,IACzB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,eAAe;AAAA,IAC5B,gBAAgBA,IAAE,OAAO;AAAA,EAC3B;AAAA,EACA,6BAA6B;AAAA,IAC3B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,eAAe;AAAA,IAC5B,gBAAgBA,IAAE,MAAM,4BAA4B;AAAA,EACtD;AAAA,EACA,8BAA8B;AAAA,IAC5B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,eAAe;AAAA,IAC5B,gBAAgBA,IAAE,MAAM,+BAA+B;AAAA,EACzD;AAAA,EACA,2BAA2B;AAAA,IACzB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,eAAe;AAAA,IAC5B,gBAAgBA,IAAE,MAAM,2BAA2B;AAAA,EACrD;AAAA,EACA,kCAAkC;AAAA,IAChC,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,eAAe;AAAA,IAC5B,gBAAgBA,IAAE,MAAM,4BAA4B;AAAA,EACtD;AAAA,EACA,4BAA4B;AAAA,IAC1B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,eAAe;AAAA,IAC5B,gBAAgBA,IAAE,MAAM,4BAA4B;AAAA,EACtD;AAAA,EACA,yBAAyB;AAAA,IACvB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,eAAe;AAAA,IAC5B,gBAAgBA,IAAE,MAAM,cAAyB;AAAA,EACnD;AAAA,EACA,yBAAyB;AAAA,IACvB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,eAAe;AAAA,IAC5B,gBAAgBA,IAAE,MAAM,yBAAyB;AAAA,EACnD;AAAA,EACA,8BAA8B;AAAA,IAC5B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,iBAAiB,YAAY;AAAA,IAC1C,gBAAgB;AAAA,EAClB;AAAA,EACA,0BAA0B;AAAA,IACxB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,eAAe;AAAA,IAC5B,gBAAgBA,IAAE,MAAM,0BAA0B;AAAA,EACpD;AAAA,EACA,sBAAsB;AAAA,IACpB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,eAAe;AAAA,IAC5B,gBAAgBA,IAAE,MAAM,sBAAsB;AAAA,EAChD;AAAA,EACA,oBAAoB;AAAA,IAClB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,gBAAgBA,IAAE,MAAMA,IAAE,OAAO,CAAC;AAAA,EACpC;AACF;;;AE1JO,IAAM,qBAAN,cAAiC,cAEtC;AAAA,EACA,YAAY,QAAmB;AAC7B,UAAM,QAAQ,oBAAoB;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,mBAAmB,eAAiD;AAClE,WAAO,KAAK,IAAI,mBAAmB,aAAa;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,8BACE,eACuC;AACvC,WAAO,KAAK,IAAI,8BAA8B,aAAa;AAAA,EAC7D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,yBAAyB,eAA6C;AACpE,WAAO,KAAK,IAAI,yBAAyB,aAAa;AAAA,EACxD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,uBAAuB,eAAgD;AACrE,WAAO,KAAK,IAAI,uBAAuB,aAAa;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,wBACE,eAC+B;AAC/B,WAAO,KAAK,IAAI,wBAAwB,aAAa;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,yBACE,eACgC;AAChC,WAAO,KAAK,IAAI,yBAAyB,aAAa;AAAA,EACxD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,mBACE,eACuE;AACvE,WAAO,KAAK,IAAI,mBAAmB,aAAa;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,qBAAqB,eAAoD;AACvE,WAAO,KAAK,IAAI,qBAAqB,aAAa;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,2BACE,eACmC;AACnC,WAAO,KAAK,IAAI,2BAA2B,aAAa;AAAA,EAC1D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,sBAAsB,eAA0C;AAC9D,WAAO,KAAK,IAAI,sBAAsB,aAAa;AAAA,EACrD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,0BAA0B,eAAwC;AAChE,WAAO,KAAK,IAAI,0BAA0B,aAAa;AAAA,EACzD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,2BACE,eACmC;AACnC,WAAO,KAAK,IAAI,4BAA4B,aAAa;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,6BACE,eACsC;AACtC,WAAO,KAAK,IAAI,6BAA6B,aAAa;AAAA,EAC5D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,oBAAoB,eAAyD;AAC3E,WAAO,KAAK,IAAI,0BAA0B,aAAa;AAAA,EACzD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,2BACE,eACmC;AACnC,WAAO,KAAK,IAAI,iCAAiC,aAAa;AAAA,EAChE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,2BACE,eACmC;AACnC,WAAO,KAAK,IAAI,2BAA2B,aAAa;AAAA,EAC1D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,wBAAwB,eAA4C;AAClE,WAAO,KAAK,IAAI,wBAAwB,aAAa;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,wBACE,eACgC;AAChC,WAAO,KAAK,IAAI,wBAAwB,aAAa;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,6BACE,eACA,YACoC;AACpC,WAAO,KAAK,IAAI,6BAA6B,eAAe,UAAU;AAAA,EACxE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,yBACE,eACiC;AACjC,WAAO,KAAK,IAAI,yBAAyB,aAAa;AAAA,EACxD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,qBAAqB,eAAoD;AACvE,WAAO,KAAK,IAAI,qBAAqB,aAAa;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,qBAAwC;AACtC,WAAO,KAAK,IAAI,mBAAmB;AAAA,EACrC;AAAA,EAEA,iCACE,eACyE;AACzE,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,4BACE,eACwD;AACxD,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,0BACE,eAC2D;AAC3D,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,4BACE,eACkE;AAClE,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,wBACE,eAC+D;AAC/D,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,8BACE,eACqE;AACrE,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,yBACE,eACqD;AACrD,WAAO,KAAK,eAAuB,yBAAyB,aAAa;AAAA,EAC3E;AAAA,EAEA,8BACE,eACqE;AACrE,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,gCACE,eACwE;AACxE,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,uBACE,eACoE;AACpE,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,8BACE,eACqE;AACrE,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,8BACE,eACqE;AACrE,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,2BACE,eACuD;AACvD,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,2BACE,eACkE;AAClE,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,4BACE,eACmE;AACnE,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,wBACE,eAC+D;AAC/D,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,wBAA6E;AAC3E,WAAO,KAAK,eAAuB,oBAAoB;AAAA,EACzD;AACF;;;ACvbA,SAAS,KAAAC,WAAS;;;ACAlB,SAAS,KAAAC,WAAS;AAEX,IAAM,2BAA2BA,IAAE,YAAY;AAAA,EACpD,YAAYA,IAAE,OAAO;AAAA,EACrB,OAAOA,IAAE,OAAO;AAAA,EAChB,UAAUA,IAAE,OAAO;AAAA,EACnB,YAAYA,IAAE,OAAO;AAAA,EACrB,aAAaA,IAAE,OAAO,EAAE,SAAS;AACnC,CAAC;AAEM,IAAM,uCAAuCA,IAAE,YAAY;AAAA,EAChE,cAAcA,IAAE,OAAO;AAAA,EACvB,cAAcA,IAAE,OAAO;AACzB,CAAC;AAEM,IAAM,sCAAsCA,IAAE,YAAY;AAAA,EAC/D,cAAcA,IAAE,OAAO;AAAA,EACvB,cAAcA,IAAE,OAAO;AACzB,CAAC;;;ADVM,IAAM,8BAA8B;AAAA,EACzC,wBAAwB;AAAA,IACtB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,eAAe;AAAA,IAC5B,gBAAgBC,IAAE,MAAM,wBAAwB;AAAA,EAClD;AAAA,EACA,uBAAuB;AAAA,IACrB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,iBAAiB,WAAW;AAAA,IACzC,gBAAgB;AAAA,EAClB;AAAA,EACA,mCAAmC;AAAA,IACjC,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,iBAAiB,aAAa,aAAa;AAAA,IACxD,gBAAgB;AAAA,EAClB;AAAA,EACA,mCAAmC;AAAA,IACjC,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,iBAAiB,WAAW;AAAA,IACzC,gBAAgBA,IAAE,MAAM,mCAAmC;AAAA,EAC7D;AACF;;;AE5BO,IAAM,4BAAN,cAAwC,cAE7C;AAAA,EACA,YAAY,QAAmB;AAC7B,UAAM,QAAQ,2BAA2B;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,uBAAuB,eAAsD;AAC3E,WAAO,KAAK,IAAI,uBAAuB,aAAa;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,sBACE,eACA,WAC6B;AAC7B,WAAO,KAAK,IAAI,sBAAsB,eAAe,SAAS;AAAA,EAChE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,kCACE,eACA,WACA,aACyC;AACzC,WAAO,KAAK,IAAI;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,kCACE,eACA,WAC0C;AAC1C,WAAO,KAAK,IAAI,kCAAkC,eAAe,SAAS;AAAA,EAC5E;AACF;;;AC7EA,SAAS,KAAAC,WAAS;;;ACAlB,SAAS,KAAAC,WAAS;AAEX,IAAM,uBAAuBA,IAAE,YAAY;AAAA,EAChD,cAAcA,IAAE,OAAO;AAAA,EACvB,MAAMA,IAAE,OAAO;AAAA,EACf,aAAaA,IAAE,OAAO,EAAE,SAAS;AAAA,EACjC,SAASA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,eAAeA,IAAE,OAAO,EAAE,SAAS;AAAA,EACnC,WAAWA,IAAE,QAAQ,EAAE,SAAS;AAAA,EAChC,cAAcA,IAAE,OAAO,EAAE,SAAS;AAAA,EAClC,SAASA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,WAAWA,IAAE,QAAQ,EAAE,SAAS;AAAA,EAChC,cAAcA,IAAE,QAAQ,EAAE,SAAS;AACrC,CAAC;AAEM,IAAM,oBAAoBA,IAAE,YAAY;AAAA,EAC7C,WAAWA,IAAE,OAAO;AAAA,EACpB,MAAMA,IAAE,OAAO;AAAA,EACf,aAAaA,IAAE,OAAO,EAAE,SAAS;AAAA,EACjC,SAASA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,cAAcA,IAAE,OAAO,EAAE,SAAS;AAAA,EAClC,WAAWA,IAAE,QAAQ,EAAE,SAAS;AAAA,EAChC,iBAAiBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACrC,eAAeA,IAAE,QAAQ,EAAE,SAAS;AAAA,EACpC,cAAcA,IAAE,QAAQ,EAAE,SAAS;AAAA,EACnC,cAAcA,IAAE,QAAQ,EAAE,SAAS;AAAA,EACnC,sBAAsBA,IAAE,QAAQ,EAAE,SAAS;AAAA,EAC3C,wBAAwBA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC5C,uBAAuBA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC3C,mBAAmBA,IAAE,QAAQ,EAAE,SAAS;AAAA,EACxC,sBAAsBA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC1C,WAAWA,IACR;AAAA,IACCA,IAAE,YAAY;AAAA,MACZ,QAAQA,IAAE,OAAO,EAAE,SAAS;AAAA,MAC5B,WAAWA,IAAE,OAAO,EAAE,SAAS;AAAA,MAC/B,MAAMA,IAAE,OAAO;AAAA,MACf,uBAAuBA,IAAE,OAAO,EAAE,SAAS;AAAA,MAC3C,wBAAwBA,IAAE,OAAO,EAAE,SAAS;AAAA,MAC5C,UAAUA,IAAE,OAAO,EAAE,SAAS;AAAA,IAChC,CAAC;AAAA,EACH,EACC,SAAS;AAAA,EACZ,iBAAiBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACrC,gBAAgBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACpC,oBAAoBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACxC,cAAcA,IAAE,QAAQ,EAAE,SAAS;AAAA,EACnC,6BAA6BA,IAAE,OAAO,EAAE,SAAS;AACnD,CAAC;AAEM,IAAM,yBAAyBA,IAAE,YAAY;AAAA,EAClD,YAAYA,IAAE,OAAO;AAAA,EACrB,kBAAkBA,IAAE;AAAA,IAClBA,IAAE,YAAY;AAAA,MACZ,cAAcA,IAAE,OAAO;AAAA,MACvB,OAAOA,IAAE,OAAO;AAAA,IAClB,CAAC;AAAA,EACH;AAAA,EACA,eAAeA,IAAE;AAAA,IACfA,IAAE,YAAY;AAAA,MACZ,WAAWA,IAAE,OAAO;AAAA,MACpB,YAAYA,IAAE,QAAQ;AAAA,IACxB,CAAC;AAAA,EACH;AAAA,EACA,iBAAiBA,IAAE,OAAO;AAAA,EAC1B,gBAAgBA,IAAE,OAAO;AAC3B,CAAC;;;AD1DM,IAAM,iBAAiB;AAAA,EAC5B,eAAe;AAAA,IACb,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,gBAAgBC,IAAE,MAAMA,IAAE,OAAO,CAAC;AAAA,EACpC;AAAA,EACA,kBAAkB;AAAA,IAChB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,gBAAgB;AAAA,EAClB;AAAA,EACA,YAAY;AAAA,IACV,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,gBAAgBA,IAAE,MAAMA,IAAE,OAAO,CAAC;AAAA,EACpC;AAAA,EACA,eAAe;AAAA,IACb,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,UAAU;AAAA,IACvB,gBAAgB;AAAA,EAClB;AAAA,EACA,oBAAoB;AAAA,IAClB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,UAAU,QAAQ;AAAA,IAC/B,gBAAgB;AAAA,EAClB;AACF;;;AEjCO,IAAM,cAAN,cAA0B,cAAqC;AAAA,EACpE,YAAY,QAAmB;AAC7B,UAAM,QAAQ,cAAc;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,gBAAmC;AACjC,WAAO,KAAK,IAAI,cAAc;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,iBAAiB,aAA8C;AAC7D,WAAO,KAAK,IAAI,iBAAiB,WAAW;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,mBACE,QACA,QAC2B;AAC3B,WAAO,KAAK,IAAI;AAAA,MACd;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,aAAgC;AAC9B,WAAO,KAAK,IAAI,WAAW;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,cAAc,UAAwC;AACpD,WAAO,KAAK,IAAI,cAAc,QAAQ;AAAA,EACxC;AACF;;;ACpEA,SAAS,KAAAC,WAAS;;;ACAlB,SAAS,KAAAC,WAAS;AAGX,IAAM,4BAA4BC,IAAE,YAAY;AAAA,EACrD,YAAYA,IAAE,OAAO;AAAA,EACrB,QAAQA,IAAE,OAAO;AAAA,EACjB,oBAAoBA,IAAE,OAAO;AAAA,EAC7B,OAAOA,IAAE,YAAY;AAAA,IACnB,WAAWA,IAAE,OAAO;AAAA,IACpB,WAAWA,IAAE,OAAO;AAAA,IACpB,OAAOA,IAAE,OAAO;AAAA,EAClB,CAAC;AAAA,EACD,gBAAgBA,IAAE,YAAY;AAAA,IAC5B,WAAWA,IAAE,OAAO;AAAA,IACpB,WAAWA,IAAE,OAAO;AAAA,IACpB,OAAOA,IAAE,OAAO;AAAA,EAClB,CAAC;AACH,CAAC;AAEM,IAAM,qCAAqCA,IAAE,YAAY;AAAA,EAC9D,YAAYA,IAAE,OAAO,EAAE,SAAS;AAAA,EAChC,aAAaA,IAAE,OAAO,EAAE,SAAS;AAAA,EACjC,cAAcA,IAAE,OAAO,EAAE,SAAS;AAAA,EAClC,cAAcA,IAAE,OAAO,EAAE,SAAS;AAAA,EAClC,OAAOA,IAAE,YAAY;AAAA,IACnB,WAAWA,IAAE,OAAO;AAAA,IACpB,WAAWA,IAAE,OAAO;AAAA,IACpB,OAAOA,IAAE,OAAO;AAAA,EAClB,CAAC;AAAA,EACD,gBAAgBA,IAAE,YAAY;AAAA,IAC5B,WAAWA,IAAE,OAAO;AAAA,IACpB,WAAWA,IAAE,OAAO;AAAA,IACpB,OAAOA,IAAE,OAAO;AAAA,EAClB,CAAC;AACH,CAAC;AAEM,IAAM,6BAA6BA,IAAE,YAAY;AAAA,EACtD,iBAAiBA,IAAE,OAAO;AAAA,EAC1B,kBAAkBA,IAAE,OAAO;AAAA,EAC3B,qBAAqBA,IAAE,OAAO;AAAA,EAC9B,WAAW,QAAQ,CAAC,YAAY,aAAa,eAAe,YAAY,CAAC;AAAA,EACzE,gBAAgBA,IAAE,OAAO;AAAA,EACzB,0BAA0BA,IAAE,OAAO;AACrC,CAAC;AAEM,IAAM,0BAA0BA,IAAE,YAAY;AAAA,EACnD,YAAYA,IAAE,OAAO;AAAA,EACrB,YAAYA,IAAE,OAAO;AACvB,CAAC;AAEM,IAAM,kCAAkCA,IAAE,YAAY;AAAA,EAC3D,OAAOA,IAAE,YAAY;AAAA,IACnB,WAAWA,IAAE;AAAA,MACXA,IAAE,YAAY;AAAA,QACZ,QAAQA,IAAE,OAAO;AAAA,QACjB,IAAIA,IAAE,OAAO,EAAE,SAAS;AAAA,MAC1B,CAAC;AAAA,IACH;AAAA,IACA,WAAWA,IAAE;AAAA,MACXA,IAAE,YAAY;AAAA,QACZ,QAAQA,IAAE,OAAO;AAAA,QACjB,IAAIA,IAAE,OAAO,EAAE,SAAS;AAAA,MAC1B,CAAC;AAAA,IACH;AAAA,IACA,cAAcA,IAAE;AAAA,MACdA,IAAE,YAAY;AAAA,QACZ,QAAQA,IAAE,OAAO;AAAA,QACjB,IAAIA,IAAE,OAAO,EAAE,SAAS;AAAA,MAC1B,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AAAA,EACD,gBAAgBA,IAAE,YAAY;AAAA,IAC5B,WAAWA,IAAE;AAAA,MACXA,IAAE,YAAY;AAAA,QACZ,QAAQA,IAAE,OAAO;AAAA,QACjB,IAAIA,IAAE,OAAO,EAAE,SAAS;AAAA,MAC1B,CAAC;AAAA,IACH;AAAA,IACA,WAAWA,IAAE;AAAA,MACXA,IAAE,YAAY;AAAA,QACZ,QAAQA,IAAE,OAAO;AAAA,QACjB,IAAIA,IAAE,OAAO,EAAE,SAAS;AAAA,MAC1B,CAAC;AAAA,IACH;AAAA,IACA,cAAcA,IAAE;AAAA,MACdA,IAAE,YAAY;AAAA,QACZ,QAAQA,IAAE,OAAO;AAAA,QACjB,IAAIA,IAAE,OAAO,EAAE,SAAS;AAAA,MAC1B,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AACH,CAAC;AAEM,IAAM,uCAAuCA,IAAE,YAAY;AAAA,EAChE,YAAYA,IAAE,OAAO,EAAE,SAAS;AAAA,EAChC,aAAaA,IAAE,OAAO,EAAE,SAAS;AAAA,EACjC,QAAQA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,OAAOA,IAAE,YAAY;AAAA,IACnB,WAAWA,IAAE,OAAO;AAAA,IACpB,WAAWA,IAAE,OAAO;AAAA,IACpB,OAAOA,IAAE,OAAO;AAAA,EAClB,CAAC;AAAA,EACD,gBAAgBA,IAAE,YAAY;AAAA,IAC5B,WAAWA,IAAE,OAAO;AAAA,IACpB,WAAWA,IAAE,OAAO;AAAA,IACpB,OAAOA,IAAE,OAAO;AAAA,EAClB,CAAC;AACH,CAAC;;;ADhGM,IAAM,mBAAmB;AAAA,EAC9B,mBAAmB;AAAA,IACjB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,gBAAgB;AAAA,EAClB;AAAA,EACA,qBAAqB;AAAA,IACnB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,eAAe;AAAA,IAC5B,gBAAgB;AAAA,EAClB;AAAA,EACA,YAAY;AAAA,IACV,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,gBAAgB;AAAA,EAClB;AAAA,EACA,eAAe;AAAA,IACb,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,gBAAgB;AAAA,EAClB;AAAA,EACA,iBAAiB;AAAA,IACf,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,gBAAgB;AAAA,EAClB;AAAA,EACA,UAAU;AAAA,IACR,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,gBAAgBC,IAAE,MAAM,yBAAyB;AAAA,EACnD;AAAA,EACA,YAAY;AAAA,IACV,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,gBAAgBA,IAAE,MAAM,0BAA0B;AAAA,EACpD;AAAA,EACA,SAAS;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,gBAAgBA,IAAE,MAAM,uBAAuB;AAAA,EACjD;AACF;;;AElDO,IAAM,gBAAN,cAA4B,cAAuC;AAAA,EACxE,YAAY,QAAmB;AAC7B,UAAM,QAAQ,gBAAgB;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,4BAAgE;AAC9D,WAAO,KAAK,IAAI,cAAc;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,8BAAkE;AAChE,WAAO,KAAK,IAAI,gBAAgB;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,yBAA6D;AAC3D,WAAO,KAAK,IAAI,WAAW;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,WAA2C;AACzC,WAAO,KAAK,IAAI,SAAS;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,kBACE,aACuC;AACvC,WAAO,KAAK,IAAI;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,oBACE,eACyC;AACzC,WAAO,KAAK,IAAI;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,aAA8C;AAC5C,WAAO,KAAK,IAAI,WAAW;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,UAAwC;AACtC,WAAO,KAAK,IAAI,QAAQ;AAAA,EAC1B;AACF;;;ACpGA,SAAS,KAAAC,WAAS;;;ACAlB,SAAS,KAAAC,WAAS;AAEX,IAAM,gBAAgBA,IAAE,YAAY;AAAA,EACzC,YAAYA,IAAE,OAAO;AAAA,EACrB,MAAMA,IAAE,OAAO;AAAA,EACf,aAAaA,IAAE,OAAO;AAAA,EACtB,cAAcA,IAAE,OAAO;AAAA,EACvB,OAAOA,IAAE;AAAA,IACPA,IAAE,YAAY;AAAA,MACZ,SAASA,IAAE,OAAO;AAAA,MAClB,MAAMA,IAAE,MAAM,CAACA,IAAE,OAAO,GAAGA,IAAE,OAAO,CAAC,CAAC;AAAA,MACtC,UAAUA,IAAE,OAAO;AAAA,IACrB,CAAC;AAAA,EACH;AACF,CAAC;;;ADVM,IAAM,mBAAmB;AAAA,EAC9B,aAAa;AAAA,IACX,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,gBAAgBC,IAAE,MAAM,aAAa;AAAA,EACvC;AAAA,EACA,eAAe;AAAA,IACb,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,SAAS;AAAA,EACX;AAAA,EACA,eAAe;AAAA,IACb,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,eAAe,WAAW;AAAA,EACzC;AACF;;;AEnBO,IAAM,iBAAN,cAA6B,cAAuC;AAAA,EACzE,YAAY,QAAmB;AAC7B,UAAM,QAAQ,gBAAgB;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,YAAY,aAAyC;AACnD,WAAO,KAAK,IAAI,YAAY,WAAW;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,cACE,aACA,aACiC;AACjC,WAAO,KAAK,IAAI,cAAc,aAAa,WAAW;AAAA,EAGxD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,cAAc,aAAqB,WAAkC;AACnE,WAAO,KAAK,IAAI,cAAc,aAAa,SAAS;AAAA,EACtD;AAAA,EAEA,eACE,aACsD;AACtD,WAAO,KAAK,eAAwB,eAAe,WAAW;AAAA,EAChE;AACF;;;ACvDA,SAAS,KAAAC,WAAS;;;ACAlB,SAAS,KAAAC,WAAS;AAGX,IAAM,kBAAkBC,IAAE,YAAY;AAAA,EAC3C,UAAUA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,eAAeA,IAAE,OAAO,EAAE,SAAS;AAAA,EACnC,cAAcA,IAAE,QAAQ;AAAA,EACxB,eAAeA,IAAE,QAAQ;AAAA,EACzB,kBAAkBA,IAAE,QAAQ;AAAA,EAC5B,MAAMA,IAAE,OAAO;AACjB,CAAC;AAEM,IAAM,oBAAoBA,IAAE,YAAY;AAAA,EAC7C,cAAcA,IAAE,OAAO;AAAA,EACvB,cAAcA,IAAE,OAAO;AAAA,EACvB,SAASA,IAAE,OAAO;AAAA,EAClB,UAAUA,IAAE,OAAO;AAAA,EACnB,MAAM,QAAQ;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAAA,EACD,WAAWA,IAAE,OAAO;AAAA,EACpB,WAAWA,IAAE,OAAO;AAAA,EACpB,kBAAkBA,IAAE,QAAQ;AAAA,EAC5B,iBAAiBA,IAAE,OAAO;AAAA,EAC1B,YAAYA,IAAE,OAAO,EAAE,SAAS;AAClC,CAAC;AAEM,IAAM,kBAAkBA,IAAE,YAAY;AAAA,EAC3C,IAAIA,IAAE,OAAO;AAAA,EACb,MAAMA,IAAE,OAAO;AAAA,EACf,QAAQA,IAAE;AAAA,IACRA,IAAE,YAAY;AAAA,MACZ,IAAIA,IAAE,OAAO;AAAA,MACb,MAAMA,IAAE,OAAO;AAAA,IACjB,CAAC;AAAA,EACH;AACF,CAAC;AAEM,IAAM,2BAA2BA,IAAE,YAAY;AAAA,EACpD,UAAUA,IAAE,OAAO;AAAA,EACnB,eAAeA,IAAE,OAAO,EAAE,SAAS;AAAA,EACnC,MAAM,QAAQ;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAAA,EACD,UAAUA,IAAE,OAAO;AAAA,EACnB,SAASA,IAAE,OAAO;AACpB,CAAC;;;AD3CM,IAAM,iBAAiB;AAAA,EAC5B,uBAAuB;AAAA,IACrB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,gBAAgB;AAAA,EAClB;AAAA,EACA,cAAc;AAAA,IACZ,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,SAAS;AAAA,IACtB,gBAAgB;AAAA,EAClB;AAAA,EACA,aAAa;AAAA,IACX,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,SAAS;AAAA,IACtB,SAAS;AAAA,IACT,eAAeC,IAAE,YAAY;AAAA,MAC3B,cAAcA,IAAE,QAAQ,EAAE,SAAS;AAAA,MACnC,MAAMA,IAAE,OAAO,EAAE,SAAS;AAAA,IAC5B,CAAC;AAAA,EACH;AAAA,EACA,iBAAiB;AAAA,IACf,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,SAAS;AAAA,IACtB,gBAAgBA,IAAE,MAAM,iBAAiB;AAAA,EAC3C;AAAA,EACA,uBAAuB;AAAA,IACrB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,SAAS;AAAA,IACtB,SAAS;AAAA,EACX;AAAA,EACA,iBAAiB;AAAA,IACf,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,WAAW,UAAU;AAAA,EACpC;AAAA,EACA,iBAAiB;AAAA,IACf,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,WAAW,UAAU;AAAA,IAClC,SAAS;AAAA,EACX;AAAA,EACA,kBAAkB;AAAA,IAChB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,WAAW,SAAS;AAAA,EACnC;AAAA,EACA,kBAAkB;AAAA,IAChB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,WAAW,SAAS;AAAA,IACjC,aAAa,CAAC,UAAkB,EAAE,KAAK;AAAA,EACzC;AAAA,EACA,eAAe;AAAA,IACb,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,SAAS;AAAA,IACtB,gBAAgBA,IAAE,MAAM,eAAe;AAAA,EACzC;AAAA,EACA,iBAAiB;AAAA,IACf,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,SAAS;AAAA,IACtB,SAAS;AAAA,EACX;AAAA,EACA,iBAAiB;AAAA,IACf,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,WAAW,QAAQ;AAAA,EAClC;AAAA,EACA,iBAAiB;AAAA,IACf,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,WAAW,QAAQ;AAAA,IAChC,aAAa,CAAC,UAAkB,EAAE,KAAK;AAAA,EACzC;AAAA,EACA,kBAAkB;AAAA,IAChB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,WAAW,QAAQ;AAAA,EAClC;AACF;;;AEjGO,IAAM,cAAN,cAA0B,cAAqC;AAAA,EACpE,YAAY,QAAmB;AAC7B,UAAM,QAAQ,cAAc;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,sBAAsB,aAAkD;AACtE,WAAO,KAAK,IAAI,sBAAsB,WAAW;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,oBAAoB,SAAqC;AACvD,WAAO,KAAK,IAAI,aAAa,OAAO;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,YAAY,SAAiB,MAA6B;AACxD,WAAO,KAAK,IAAI,YAAY,SAAS,IAAI;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,gBAAgB,SAAyC;AACvD,WAAO,KAAK,IAAI,gBAAgB,OAAO;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,sBAAsB,SAAiB,MAA6B;AAClE,WAAO,KAAK,IAAI,sBAAsB,SAAS,IAAI;AAAA,EACrD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,gBAAgB,SAAiB,UAAiC;AAChE,WAAO,KAAK,IAAI,gBAAgB,SAAS,QAAQ;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,gBACE,SACA,UACA,MACe;AACf,WAAO,KAAK,IAAI,gBAAgB,SAAS,UAAU,IAAI;AAAA,EACzD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,iBAAiB,SAAiB,SAAgC;AAChE,WAAO,KAAK,IAAI,iBAAiB,SAAS,OAAO;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,iBACE,SACA,SACA,MACe;AACf,QAAI,KAAK,SAAS,IAAI;AACpB,aAAO,QAAQ;AAAA,QACb,IAAI;AAAA,UACF,qBAAqB,IAAI;AAAA,QAC3B;AAAA,MACF;AAAA,IACF;AACA,WAAO,KAAK,IAAI,iBAAiB,SAAS,SAAS,IAAI;AAAA,EACzD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,cAAc,SAAuC;AACnD,WAAO,KAAK,IAAI,cAAc,OAAO;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,gBAAgB,SAAiB,MAA4C;AAC3E,WAAO,KAAK,IAAI,gBAAgB,SAAS,IAAI;AAAA,EAG/C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,gBAAgB,SAAiB,QAA+B;AAC9D,WAAO,KAAK,IAAI,gBAAgB,SAAS,MAAM;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,gBACE,SACA,QACA,MACe;AACf,QAAI,KAAK,SAAS,IAAI;AACpB,aAAO,QAAQ;AAAA,QACb,IAAI;AAAA,UACF,oBAAoB,IAAI;AAAA,QAC1B;AAAA,MACF;AAAA,IACF;AACA,WAAO,KAAK,IAAI,gBAAgB,SAAS,QAAQ,IAAI;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,iBACE,SACA,QAC+B;AAC/B,WAAO,KAAK,IAAI,iBAAiB,SAAS,MAAM;AAAA,EAGlD;AAAA,EAEA,mBACE,SAC0D;AAC1D,WAAO,KAAK,eAA4B,mBAAmB,OAAO;AAAA,EACpE;AAAA,EAEA,iBACE,SACwD;AACxD,WAAO,KAAK,eAA0B,iBAAiB,OAAO;AAAA,EAChE;AACF;;;AC3NA,SAAS,KAAAC,WAAS;;;ACAlB,SAAS,KAAAC,WAAS;AAGX,IAAM,kBAAkBC,IAAE,YAAY;AAAA,EAC3C,MAAMA,IAAE,OAAO;AAAA,EACf,OAAO,QAAQ,CAAC,eAAe,cAAc,aAAa,CAAC;AAAA,EAC3D,yBAAyBA,IAAE,OAAO;AAAA,EAClC,kBAAkBA,IAAE,OAAO;AAAA,EAC3B,wBAAwBA,IAAE,MAAMA,IAAE,OAAO,CAAC;AAAA,EAC1C,UAAUA,IAAE,QAAQ;AAAA,EACpB,YAAYA,IAAE,OAAO;AAAA,EACrB,WAAWA,IAAE,OAAO;AACtB,CAAC;;;ADRM,IAAM,qBAAqB;AAAA,EAChC,eAAe;AAAA,IACb,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,gBAAgBC,IAAE,MAAM,eAAe;AAAA,EACzC;AACF;;;AENO,IAAM,mBAAN,cAA+B,cAAyC;AAAA,EAC7E,YAAY,QAAmB;AAC7B,UAAM,QAAQ,kBAAkB;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,gBAAsC;AACpC,WAAO,KAAK,IAAI,cAAc;AAAA,EAChC;AACF;;;AClBA,SAAS,KAAAC,WAAS;;;ACAlB,SAAS,KAAAC,WAAS;AAGX,IAAM,oBAAoBC,IAAE,YAAY;AAAA,EAC7C,QAAQA,IAAE,OAAO;AAAA,EACjB,cAAcA,IAAE,OAAO;AAAA,EACvB,aAAaA,IAAE,OAAO;AAAA,EACtB,YAAYA,IAAE,OAAO;AAAA,EACrB,aAAaA,IAAE,OAAO;AAAA,EACtB,cAAcA,IAAE,OAAO;AAAA,EACvB,mBAAmBA,IAAE,OAAO;AAAA,EAC5B,uBAAuBA,IAAE,OAAO;AAAA,EAChC,oBAAoBA,IAAE,OAAO;AAAA,EAC7B,MAAMA,IAAE,OAAO;AAAA,EACf,MAAMA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,eAAeA,IAAE,OAAO,EAAE,SAAS;AAAA,EACnC,aAAaA,IAAE,OAAO,EAAE,SAAS;AAAA,EACjC,iBAAiBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACrC,QAAQ,QAAQ;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAAA,EACD,UAAUA,IAAE,OAAO;AAAA,EACnB,YAAYA,IAAE,OAAO;AAAA,EACrB,UAAUA,IAAE,OAAO;AAAA,EACnB,YAAYA,IAAE,OAAO,EAAE,SAAS;AAAA,EAChC,gBAAgBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACpC,wBAAwBA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC5C,iBAAiBA,IAAE,OAAO,EAAE,SAAS;AACvC,CAAC;AAEM,IAAM,0BAA0BA,IAAE,YAAY;AAAA,EACnD,MAAMA,IAAE,OAAO;AAAA,EACf,iBAAiBA,IAAE,OAAO;AAAA,EAC1B,SAASA,IAAE,OAAO;AAAA,EAClB,UAAUA,IAAE,OAAO;AACrB,CAAC;AAEM,IAAM,yBAAyBA,IAAE,YAAY;AAAA,EAClD,aAAaA,IAAE,OAAO;AAAA,EACtB,UAAUA,IAAE,OAAO;AAAA,EACnB,WAAWA,IAAE,OAAO;AAAA,EACpB,iBAAiBA,IAAE,OAAO;AAAA,EAC1B,KAAKA,IAAE,OAAO,EAAE,SAAS;AAAA,EACzB,SAASA,IAAE,OAAO;AACpB,CAAC;AAEM,IAAM,uBAAuBA,IAAE,YAAY;AAAA,EAChD,iBAAiBA,IAAE,OAAO;AAAA,EAC1B,cAAcA,IAAE;AAAA,IACdA,IAAE,YAAY;AAAA,MACZ,UAAUA,IAAE,OAAO;AAAA,MACnB,YAAYA,IAAE,OAAO;AAAA,IACvB,CAAC;AAAA,EACH;AACF,CAAC;AAEM,IAAM,4BAA4BA,IAAE,YAAY;AAAA,EACrD,cAAcA,IAAE,OAAO;AAAA,EACvB,SAASA,IAAE,OAAO;AAAA,EAClB,uBAAuBA,IAAE,OAAO;AAAA,EAChC,oBAAoBA,IAAE,OAAO;AAAA,EAC7B,oBAAoBA,IAAE,OAAO;AAC/B,CAAC;AAEM,IAAM,uBAAuBA,IAAE,YAAY;AAAA,EAChD,aAAaA,IAAE,OAAO;AAAA,EACtB,eAAeA,IAAE,OAAO;AAAA,EACxB,cAAcA,IAAE,OAAO;AACzB,CAAC;AAEM,IAAM,4BAA4BA,IAAE,YAAY;AAAA,EACrD,cAAcA,IAAE,OAAO;AAAA,EACvB,yBAAyBA,IAAE,OAAO;AAAA,EAClC,SAASA,IAAE,OAAO;AAAA,EAClB,UAAUA,IAAE,OAAO;AAAA,EACnB,cAAcA,IAAE,OAAO;AACzB,CAAC;;;ADrEM,IAAM,oBAAoB;AAAA,EAC/B,0BAA0B;AAAA,IACxB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,gBAAgBC,IAAE,MAAM,iBAAiB;AAAA,EAC3C;AAAA,EACA,0BAA0B;AAAA,IACxB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,gBAAgBA,IAAE,MAAM,uBAAuB;AAAA,EACjD;AAAA,EACA,4BAA4B;AAAA,IAC1B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,eAAe;AAAA,IAC5B,gBAAgBA,IAAE,MAAM,iBAAiB;AAAA,EAC3C;AAAA,EACA,yBAAyB;AAAA,IACvB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,eAAe;AAAA,IAC5B,gBAAgBA,IAAE,MAAM,yBAAyB;AAAA,EACnD;AAAA,EACA,+BAA+B;AAAA,IAC7B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,eAAe;AAAA,IAC5B,gBAAgBA,IAAE,MAAM,oBAAoB;AAAA,EAC9C;AAAA,EACA,8BAA8B;AAAA,IAC5B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,iBAAiB,YAAY;AAAA,IAC1C,gBAAgBA,IAAE,MAAM,yBAAyB;AAAA,EACnD;AAAA,EACA,uBAAuB;AAAA,IACrB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,gBAAgBA,IAAE,MAAM,sBAAsB;AAAA,EAChD;AAAA,EACA,oBAAoB;AAAA,IAClB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,gBAAgBA,IAAE,MAAM,oBAAoB;AAAA,EAC9C;AACF;;;AErDO,IAAM,iBAAN,cAA6B,cAAwC;AAAA,EAC1E,YAAY,QAAmB;AAC7B,UAAM,QAAQ,iBAAiB;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,yBAAyB,aAA6C;AACpE,WAAO,KAAK,IAAI,yBAAyB,WAAW;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,yBAAyB,aAAmD;AAC1E,WAAO,KAAK,IAAI,yBAAyB,WAAW;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,wBACE,eACgC;AAChC,WAAO,KAAK,IAAI,wBAAwB,aAAa;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,8BACE,eAC2B;AAC3B,WAAO,KAAK,IAAI,8BAA8B,aAAa;AAAA,EAC7D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,6BACE,eACA,YACgC;AAChC,WAAO,KAAK,IAAI,6BAA6B,eAAe,UAAU;AAAA,EACxE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,2BAA2B,eAA+C;AACxE,WAAO,KAAK,IAAI,2BAA2B,aAAa;AAAA,EAC1D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,wBAAqD;AACnD,WAAO,KAAK,IAAI,sBAAsB;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,qBAAgD;AAC9C,WAAO,KAAK,IAAI,mBAAmB;AAAA,EACrC;AAAA,EAEA,4BACE,aAC0D;AAC1D,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,4BACE,aACgE;AAChE,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,8BACE,eAC0D;AAC1D,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,2BACE,eACkE;AAClE,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,iCACE,eAC6D;AAC7D,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,gCACE,eACA,YACkE;AAClE,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,2BAIE;AACA,WAAO,KAAK,eAAiC,uBAAuB;AAAA,EACtE;AAAA,EAEA,wBAIE;AACA,WAAO,KAAK,eAA+B,oBAAoB;AAAA,EACjE;AACF;;;ACtLA,SAAS,KAAAC,WAAS;;;ACAlB,SAAS,KAAAC,WAAS;AAEX,IAAM,uBAAuBA,IAAE,YAAY;AAAA,EAChD,SAASA,IAAE,OAAO;AAAA,EAClB,QAAQA,IAAE;AAAA,IACRA,IAAE,YAAY;AAAA,MACZ,MAAMA,IAAE,OAAO;AAAA,MACf,QAAQA,IAAE,OAAO;AAAA,MACjB,MAAMA,IAAE,OAAO;AAAA,IACjB,CAAC;AAAA,EACH;AACF,CAAC;;;ADPM,IAAM,qBAAqB;AAAA,EAChC,oBAAoB;AAAA,IAClB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,gBAAgBC,IAAE,MAAM,oBAAoB;AAAA,EAC9C;AACF;;;AENO,IAAM,kBAAN,cAA8B,cAAyC;AAAA,EAC5E,YAAY,QAAmB;AAC7B,UAAM,QAAQ,kBAAkB;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,qBAAgD;AAC9C,WAAO,KAAK,IAAI,mBAAmB;AAAA,EACrC;AACF;;;AClBA,SAAS,KAAAC,WAAS;;;ACAlB,SAAS,KAAAC,WAAS;AAEX,IAAM,wBAAwBA,IAAE,YAAY;AAAA,EACjD,aAAaA,IAAE,OAAO;AAAA,EACtB,eAAeA,IAAE,OAAO;AAC1B,CAAC;AAEM,IAAM,iBAAiBA,IAAE,YAAY;AAAA,EAC1C,aAAaA,IAAE,OAAO;AAAA,EACtB,eAAeA,IAAE,OAAO;AAAA,EACxB,iBAAiBA,IAAE,OAAO;AAAA,EAC1B,SAASA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,QAAQA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,QAAQA,IAAE,YAAY;AAAA,IACpB,cAAcA,IAAE,OAAO,EAAE,SAAS;AAAA,IAClC,gBAAgBA,IAAE,OAAO,EAAE,SAAS;AAAA,IACpC,aAAaA,IAAE,OAAO,EAAE,SAAS;AAAA,IACjC,YAAYA,IAAE,OAAO,EAAE,SAAS;AAAA,IAChC,cAAcA,IAAE,OAAO;AAAA,IACvB,cAAcA,IAAE,OAAO;AAAA,IACvB,UAAUA,IACP,YAAY;AAAA,MACX,GAAGA,IAAE,OAAO;AAAA,MACZ,GAAGA,IAAE,OAAO;AAAA,MACZ,GAAGA,IAAE,OAAO;AAAA,IACd,CAAC,EACA,SAAS;AAAA,IACZ,OAAOA,IAAE,MAAMA,IAAE,QAAQ,CAAC,EAAE,SAAS;AAAA,EACvC,CAAC;AAAA,EACD,WAAWA,IAAE;AAAA,IACXA,IAAE,YAAY;AAAA,MACZ,cAAcA,IAAE,OAAO,EAAE,SAAS;AAAA,MAClC,gBAAgBA,IAAE,OAAO,EAAE,SAAS;AAAA,MACpC,aAAaA,IAAE,OAAO,EAAE,SAAS;AAAA,MACjC,YAAYA,IAAE,OAAO,EAAE,SAAS;AAAA,MAChC,cAAcA,IAAE,OAAO,EAAE,SAAS;AAAA,MAClC,gBAAgBA,IAAE,OAAO,EAAE,SAAS;AAAA,MACpC,aAAaA,IAAE,OAAO;AAAA,MACtB,YAAYA,IAAE,QAAQ;AAAA,MACtB,iBAAiBA,IAAE,OAAO;AAAA,IAC5B,CAAC;AAAA,EACH;AACF,CAAC;;;ADtCM,IAAM,oBAAoB;AAAA,EAC/B,6BAA6B;AAAA,IAC3B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,gBAAgBC,IAAE,MAAM,qBAAqB;AAAA,EAC/C;AAAA,EACA,+BAA+B;AAAA,IAC7B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,eAAe;AAAA,IAC5B,gBAAgBA,IAAE,MAAM,qBAAqB;AAAA,EAC/C;AAAA,EACA,aAAa;AAAA,IACX,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,cAAc,cAAc;AAAA,IACzC,gBAAgB;AAAA,EAClB;AACF;;;AEpBO,IAAM,kBAAN,cAA8B,cAAwC;AAAA,EAC3E,YAAY,QAAmB;AAC7B,UAAM,QAAQ,iBAAiB;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,4BAA4B,aAAiD;AAC3E,WAAO,KAAK,IAAI,4BAA4B,WAAW;AAAA,EAGzD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,8BACE,eAC4B;AAC5B,WAAO,KAAK,IAAI,8BAA8B,aAAa;AAAA,EAG7D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,YAAY,YAAoB,cAAyC;AACvE,WAAO,KAAK,IAAI,YAAY,YAAY,YAAY;AAAA,EACtD;AAAA,EAEA,+BACE,aAC8D;AAC9D,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,iCACE,eAC8D;AAC9D,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;;;ACnEA,SAAS,KAAAC,WAAS;AAEX,IAAM,0BAA0BA,IAAE,YAAY;AAAA,EACnD,iBAAiBA,IAAE,OAAO;AAAA,EAC1B,YAAYA,IAAE,OAAO,EAAE,SAAS;AAAA,EAChC,cAAcA,IAAE,OAAO,EAAE,SAAS;AACpC,CAAC;AAEM,IAAM,wBAAwBA,IAAE,YAAY;AAAA,EACjD,QAAQA,IAAE,QAAQ;AAAA,EAClB,YAAYA,IAAE,OAAO,EAAE,SAAS;AAAA,EAChC,aAAaA,IAAE,OAAO,EAAE,SAAS;AAAA,EACjC,QAAQA,IAAE,OAAO,EAAE,SAAS;AAC9B,CAAC;AAEM,IAAM,sBAAsBA,IAAE,YAAY;AAAA,EAC/C,cAAcA,IAAE,OAAO;AAAA,EACvB,WAAWA,IAAE,OAAO;AAAA,EACpB,cAAcA,IAAE,OAAO;AACzB,CAAC;;;ACZM,IAAM,oBAAoB;AAAA,EAC/B,sBAAsB;AAAA,IACpB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,gBAAgB;AAAA,EAClB;AAAA,EACA,oBAAoB;AAAA,IAClB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,gBAAgB;AAAA,EAClB;AAAA,EACA,kBAAkB;AAAA,IAChB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,gBAAgB;AAAA,EAClB;AACF;;;ACpBO,IAAM,iBAAN,cAA6B,cAAwC;AAAA,EAC1E,YAAY,QAAmB;AAC7B,UAAM,QAAQ,iBAAiB;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,qBAAqB,aAAiD;AACpE,WAAO,KAAK,IAAI;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,mBAAmB,aAA+C;AAChE,WAAO,KAAK,IAAI,mBAAmB,WAAW;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,iBAAiB,aAA6C;AAC5D,WAAO,KAAK,IAAI,iBAAiB,WAAW;AAAA,EAC9C;AACF;;;AChDA,SAAS,KAAAC,WAAS;;;ACAlB,SAAS,KAAAC,WAAS;AAEX,IAAM,sBAAsBA,IAAE,YAAY;AAAA,EAC/C,gBAAgBA,IAAE,OAAO;AAAA,EACzB,gBAAgBA,IAAE,OAAO;AAC3B,CAAC;AAEM,IAAM,0BAA0BA,IAAE,YAAY;AAAA,EACnD,UAAUA,IAAE,OAAO;AAAA,EACnB,SAASA,IAAE,OAAO;AAAA,EAClB,UAAUA,IAAE,OAAO;AAAA,EACnB,SAASA,IAAE,OAAO;AAAA,EAClB,UAAUA,IAAE,OAAO;AAAA,EACnB,SAASA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,gBAAgBA,IAAE;AAAA,IAChBA,IAAE,YAAY;AAAA,MACZ,SAASA,IAAE,OAAO;AAAA,MAClB,UAAUA,IAAE,OAAO;AAAA,IACrB,CAAC;AAAA,EACH;AACF,CAAC;;;ADbM,IAAM,mBAAmB;AAAA,EAC9B,kBAAkB;AAAA,IAChB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,gBAAgBC,IAAE,MAAM,mBAAmB;AAAA,EAC7C;AAAA,EACA,uBAAuB;AAAA,IACrB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,eAAe;AAAA,IAC5B,gBAAgBA,IAAE,MAAM,uBAAuB;AAAA,EACjD;AACF;;;AEhBO,IAAM,gBAAN,cAA4B,cAAuC;AAAA,EACxE,YAAY,QAAmB;AAC7B,UAAM,QAAQ,gBAAgB;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,iBAAiB,aAA+C;AAC9D,WAAO,KAAK,IAAI,iBAAiB,WAAW;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,sBAAsB,eAAqD;AACzE,WAAO,KAAK,IAAI,sBAAsB,aAAa;AAAA,EACrD;AAAA,EAEA,oBACE,aAC4D;AAC5D,WAAO,KAAK,eAA8B,oBAAoB,WAAW;AAAA,EAC3E;AAAA,EAEA,yBACE,eACgE;AAChE,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;;;AC9CA,SAAS,KAAAC,WAAS;;;ACAlB,SAAS,KAAAC,WAAS;AAGX,IAAM,oBAAoBC,IAAE,YAAY;AAAA,EAC7C,SAASA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,SAASA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,MAAMA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,WAAWA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,QAAQA,IAAE,MAAMA,IAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACrC,SAASA,IAAE,QAAQ,EAAE,SAAS;AAAA,EAC9B,MAAMA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,YAAYA,IACT;AAAA,IACCA,IAAE,YAAY;AAAA,MACZ,cAAcA,IAAE,OAAO;AAAA,MACvB,gBAAgB,QAAQ;AAAA,QACtB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AAAA,EACH,EACC,SAAS;AACd,CAAC;AAEM,IAAM,kBAAkBA,IAAE,YAAY;AAAA,EAC3C,UAAUA,IAAE,OAAO;AAAA,EACnB,MAAMA,IAAE,OAAO;AAAA,EACf,OAAOA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,cAAcA,IAAE,OAAO,EAAE,SAAS;AACpC,CAAC;AAEM,IAAM,2BAA2BA,IAAE,YAAY;AAAA,EACpD,QAAQA,IAAE,MAAM,eAAe,EAAE,SAAS;AAAA,EAC1C,oBAAoBA,IAAE,OAAO,EAAE,SAAS;AAC1C,CAAC;AAEM,IAAM,oBAAoBA,IAAE,YAAY;AAAA,EAC7C,iBAAiBA,IAAE,OAAO;AAAA,EAC1B,MAAMA,IAAE,OAAO;AACjB,CAAC;;;ADhCM,IAAM,gBAAgB;AAAA,EAC3B,yBAAyB;AAAA,IACvB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,gBAAgBC,IAAE,MAAM,iBAAiB;AAAA,EAC3C;AAAA,EACA,UAAU;AAAA,IACR,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,SAAS;AAAA,IACT,eAAeA,IAAE,YAAY;AAAA,MAC3B,YAAYA,IAAE;AAAA,QACZA,IAAE,YAAY;AAAA,UACZ,cAAcA,IAAE,OAAO,EAAE,IAAI;AAAA,UAC7B,gBAAgBA,IAAE,KAAK;AAAA,YACrB;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF,CAAC;AAAA,QACH,CAAC;AAAA,MACH;AAAA,MACA,SAASA,IAAE,OAAO,EAAE,IAAI,CAAC;AAAA,MACzB,MAAMA,IAAE,OAAO,EAAE,IAAI,CAAC;AAAA,IACxB,CAAC;AAAA,EACH;AAAA,EACA,SAAS;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,eAAe,QAAQ;AAAA,IACpC,gBAAgB;AAAA,EAClB;AAAA,EACA,YAAY;AAAA,IACV,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,eAAe,QAAQ;AAAA,EACtC;AAAA,EACA,oBAAoB;AAAA,IAClB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,eAAe,QAAQ;AAAA,IACpC,SAAS;AAAA,EACX;AAAA,EACA,eAAe;AAAA,IACb,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,gBAAgB;AAAA,EAClB;AAAA,EACA,iBAAiB;AAAA,IACf,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,SAAS;AAAA,EACX;AAAA,EACA,iBAAiB;AAAA,IACf,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,eAAe,SAAS;AAAA,EACvC;AAAA,EACA,iBAAiB;AAAA,IACf,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,gBAAgBA,IAAE,MAAM,iBAAiB;AAAA,EAC3C;AACF;;;AEhFO,IAAM,aAAN,cAAyB,cAAoC;AAAA,EAClE,YAAY,QAAmB;AAC7B,UAAM,QAAQ,aAAa;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,eAAe,aAA6C;AAC1D,WAAO,KAAK,IAAI,wBAAwB,WAAW;AAAA,EACrD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,SAAS,aAAqB,MAA+B;AAC3D,WAAO,KAAK,IAAI,SAAS,aAAa,IAAI;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,WAAW,aAAqB,QAA+B;AAC7D,WAAO,KAAK,IAAI,WAAW,aAAa,MAAM;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,QAAQ,aAAqB,QAAsC;AACjE,WAAO,KAAK,IAAI,QAAQ,aAAa,MAAM;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,mBACE,aACA,QACA,MACe;AACf,WAAO,KAAK,IAAI;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,cACE,aACgE;AAChE,WAAO,KAAK,IAAI,cAAc,WAAW;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,gBAAgB,aAAqB,MAA+B;AAClE,WAAO,KAAK,IAAI,gBAAgB,aAAa,IAAI;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,gBAAgB,aAAqB,SAAgC;AACnE,WAAO,KAAK,IAAI,gBAAgB,aAAa,OAAO;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,gBACE,aACsD;AACtD,WAAO,KAAK,IAAI,gBAAgB,WAAW;AAAA,EAC7C;AAAA,EAEA,kBACE,aAC0D;AAC1D,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,mBACE,aAKA;AACA,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;;;ACtJA,SAAS,KAAAC,WAAS;;;ACAlB,SAAS,KAAAC,WAAS;AAIX,IAAM,oBAAoBC,IAAE,YAAY;AAAA,EAC7C,UAAUA,IAAE,OAAO;AAAA,EACnB,SAASA,IAAE,OAAO;AAAA,EAClB,aAAaA,IAAE,OAAO;AAAA,EACtB,cAAcA,IAAE,OAAO;AAAA,EACvB,eAAeA,IAAE,OAAO;AAAA,EACxB,YAAYA,IAAE,OAAO;AAAA,EACrB,OAAOA,IAAE,OAAO;AAAA,EAChB,cAAcA,IAAE,QAAQ;AAAA,EACxB,WAAWA,IAAE,OAAO;AAAA,EACpB,UAAUA,IAAE,OAAO;AAAA,EACnB,QAAQA,IAAE,OAAO;AAAA,EACjB,OAAOA,IAAE,OAAO;AAClB,CAAC;AAGM,IAAM,6BAA6BA,IAAE,YAAY;AAAA,EACtD,UAAUA,IAAE,OAAO;AAAA,EACnB,SAASA,IAAE,OAAO;AAAA,EAClB,aAAaA,IAAE,OAAO;AAAA,EACtB,cAAcA,IAAE,OAAO;AAAA,EACvB,eAAeA,IAAE,OAAO;AAAA,EACxB,YAAYA,IAAE,OAAO,EAAE,SAAS;AAAA,EAChC,OAAOA,IAAE,OAAO;AAAA,EAChB,cAAcA,IAAE,QAAQ,EAAE,SAAS;AAAA,EACnC,gBAAgBA,IAAE,QAAQ;AAAA,EAC1B,WAAWA,IAAE,OAAO;AAAA,EACpB,UAAUA,IAAE,OAAO;AAAA,EACnB,QAAQA,IAAE,OAAO;AAAA,EACjB,OAAOA,IAAE,OAAO;AAAA,EAChB,QAAQA,IAAE,OAAO,EAAE,SAAS;AAC9B,CAAC;AAGM,IAAM,oCAAoCA,IAAE,YAAY;AAAA,EAC7D,UAAUA,IAAE,OAAO;AAAA,EACnB,SAASA,IAAE,OAAO;AAAA,EAClB,aAAaA,IAAE,OAAO;AAAA,EACtB,cAAcA,IAAE,OAAO;AAAA,EACvB,eAAeA,IAAE,OAAO;AAAA,EACxB,YAAYA,IAAE,OAAO,EAAE,SAAS;AAAA,EAChC,OAAOA,IAAE,OAAO;AAAA,EAChB,cAAcA,IAAE,QAAQ,EAAE,SAAS;AAAA,EACnC,gBAAgBA,IAAE,QAAQ;AAAA,EAC1B,WAAWA,IAAE,OAAO;AAAA,EACpB,UAAUA,IAAE,OAAO;AAAA,EACnB,QAAQA,IAAE,OAAO;AAAA,EACjB,OAAOA,IAAE,OAAO;AAAA,EAChB,OAAO,QAAQ,CAAC,aAAa,SAAS,CAAC;AAAA,EACvC,QAAQA,IAAE,OAAO,EAAE,SAAS;AAC9B,CAAC;AAGM,IAAM,+BAA+BA,IAAE,YAAY;AAAA,EACxD,UAAUA,IAAE,OAAO;AAAA,EACnB,SAASA,IAAE,OAAO;AAAA,EAClB,aAAaA,IAAE,OAAO;AAAA,EACtB,cAAcA,IAAE,OAAO;AAAA,EACvB,eAAeA,IAAE,OAAO;AAAA,EACxB,YAAYA,IAAE,OAAO,EAAE,SAAS;AAAA,EAChC,OAAOA,IAAE,OAAO;AAAA,EAChB,cAAcA,IAAE,QAAQ,EAAE,SAAS;AAAA,EACnC,WAAWA,IAAE,OAAO;AAAA,EACpB,WAAWA,IAAE,OAAO;AAAA,EACpB,iBAAiBA,IAAE,OAAO;AAAA,EAC1B,UAAUA,IAAE,OAAO;AAAA,EACnB,QAAQA,IAAE,OAAO;AAAA,EACjB,OAAOA,IAAE,OAAO;AAAA,EAChB,QAAQA,IAAE,OAAO,EAAE,SAAS;AAC9B,CAAC;AAGM,IAAM,sCAAsCA,IAAE,YAAY;AAAA,EAC/D,UAAUA,IAAE,OAAO;AAAA,EACnB,SAASA,IAAE,OAAO;AAAA,EAClB,aAAaA,IAAE,OAAO;AAAA,EACtB,cAAcA,IAAE,OAAO;AAAA,EACvB,eAAeA,IAAE,OAAO;AAAA,EACxB,YAAYA,IAAE,OAAO,EAAE,SAAS;AAAA,EAChC,OAAOA,IAAE,OAAO;AAAA,EAChB,cAAcA,IAAE,QAAQ,EAAE,SAAS;AAAA,EACnC,WAAWA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,WAAWA,IAAE,OAAO;AAAA,EACpB,iBAAiBA,IAAE,OAAO;AAAA,EAC1B,UAAUA,IAAE,OAAO;AAAA,EACnB,QAAQA,IAAE,OAAO;AAAA,EACjB,OAAOA,IAAE,OAAO;AAAA,EAChB,OAAO,QAAQ,CAAC,aAAa,SAAS,CAAC;AAAA,EACvC,QAAQA,IAAE,OAAO,EAAE,SAAS;AAC9B,CAAC;AAGM,IAAM,6BAA6BA,IAAE,YAAY;AAAA,EACtD,UAAUA,IAAE,OAAO;AAAA,EACnB,SAASA,IAAE,OAAO;AAAA,EAClB,aAAaA,IAAE,OAAO;AAAA,EACtB,cAAcA,IAAE,OAAO;AAAA,EACvB,eAAeA,IAAE,OAAO;AAAA,EACxB,YAAYA,IAAE,OAAO;AAAA,EACrB,OAAOA,IAAE,OAAO;AAAA,EAChB,cAAcA,IAAE,QAAQ;AAAA,EACxB,UAAUA,IAAE,OAAO;AAAA,EACnB,QAAQA,IAAE,OAAO;AAAA,EACjB,OAAOA,IAAE,OAAO;AAClB,CAAC;AAEM,IAAM,sBAAsBA,IAAE,YAAY;AAAA,EAC/C,MAAMA,IAAE,OAAO;AAAA,EACf,aAAaA,IAAE,OAAO;AAAA,EACtB,QAAQA,IAAE,OAAO;AAAA,EACjB,SAASA,IAAE,OAAO;AAAA,EAClB,SAASA,IAAE,OAAO;AAAA,EAClB,QAAQA,IAAE,OAAO;AACnB,CAAC;AAEM,IAAM,oBAAoBA,IAAE,YAAY;AAAA,EAC7C,iBAAiBA,IAAE,OAAO;AAAA,EAC1B,MAAMA,IAAE,OAAO;AAAA,EACf,aAAaA,IAAE,OAAO;AAAA,EACtB,OAAOA,IAAE,MAAMA,IAAE,OAAO,CAAC;AAAA,EACzB,iBAAiBA,IAAE,OAAO,EAAE,SAAS;AACvC,CAAC;AAEM,IAAM,oBAAoBA,IAAE,YAAY;AAAA,EAC7C,SAASA,IAAE,OAAO;AAAA,EAClB,eAAeA,IAAE,OAAO,EAAE,SAAS;AAAA,EACnC,gBAAgBA,IAAE,OAAO,EAAE,SAAS;AACtC,CAAC;;;ADrHM,IAAM,kBAAkB;AAAA,EAC7B,oBAAoB;AAAA,IAClB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,gBAAgBC,IAAE,MAAM,0BAA0B;AAAA,EACpD;AAAA,EACA,0BAA0B;AAAA,IACxB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,gBAAgBA,IAAE,MAAM,iCAAiC;AAAA,EAC3D;AAAA,EACA,sBAAsB;AAAA,IACpB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,eAAe;AAAA,IAC5B,gBAAgBA,IAAE,MAAM,4BAA4B;AAAA,EACtD;AAAA,EACA,4BAA4B;AAAA,IAC1B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,eAAe;AAAA,IAC5B,gBAAgBA,IAAE,MAAM,mCAAmC;AAAA,EAC7D;AAAA,EACA,iBAAiB;AAAA,IACf,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,gBAAgBA,IAAE,MAAMA,IAAE,OAAO,CAAC;AAAA,EACpC;AAAA,EACA,2BAA2B;AAAA,IACzB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,eAAe;AAAA,IAC5B,gBAAgB;AAAA,EAClB;AAAA,EACA,iBAAiB;AAAA,IACf,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,gBAAgBA,IAAE,MAAM,iBAAiB;AAAA,EAC3C;AAAA,EACA,4BAA4B;AAAA,IAC1B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,gBAAgBA,IAAE,MAAM,0BAA0B;AAAA,EACpD;AAAA,EACA,kBAAkB;AAAA,IAChB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,UAAU;AAAA,IACvB,aAAa,EAAE,QAAQ,UAAU;AAAA,IACjC,gBAAgBA,IAAE,MAAM,mBAAmB;AAAA,EAC7C;AAAA,EACA,iBAAiB;AAAA,IACf,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,UAAU;AAAA,IACvB,aAAa,EAAE,WAAW,aAAa;AAAA,IACvC,gBAAgBA,IAAE,MAAM,iBAAiB;AAAA,EAC3C;AAAA,EACA,gBAAgB;AAAA,IACd,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,UAAU;AAAA,IACvB,gBAAgBA,IAAE,MAAMA,IAAE,OAAO,CAAC;AAAA,EACpC;AACF;;;AE5EO,IAAM,eAAN,cAA2B,cAAsC;AAAA,EACtE,YAAY,QAAmB;AAC7B,UAAM,QAAQ,eAAe;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,mBAAmB,aAAsD;AACvE,WAAO,KAAK,IAAI,mBAAmB,WAAW;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,yBACE,aACwC;AACxC,WAAO,KAAK,IAAI,yBAAyB,WAAW;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,qBACE,eACmC;AACnC,WAAO,KAAK,IAAI,qBAAqB,aAAa;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,2BACE,eAC0C;AAC1C,WAAO,KAAK,IAAI,2BAA2B,aAAa;AAAA,EAC1D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,iBAAiB,UAAkB,QAA0C;AAC3E,WAAO,KAAK,IAAI,iBAAiB,UAAU,MAAM;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,gBAAgB,UAA0C;AACxD,WAAO,KAAK,IAAI,gBAAgB,UAAU,KAAK;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,eAAe,UAAqC;AAClD,WAAO,KAAK,IAAI,eAAe,QAAQ;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,kBAAqC;AACnC,WAAO,KAAK,IAAI,gBAAgB;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,0BAA0B,eAA6C;AACrE,WAAO,KAAK,IAAI,0BAA0B,aAAa;AAAA,EACzD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,kBAA0C;AACxC,WAAO,KAAK,IAAI,gBAAgB;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,2BACE,aACiC;AACjC,WAAO,KAAK,IAAI,2BAA2B,WAAW;AAAA,EACxD;AAAA,EAEA,mBACE,UAC0D;AAC1D,WAAO,KAAK,eAA4B,mBAAmB,UAAU,KAAK;AAAA,EAC5E;AAAA,EAEA,kBACE,UACqD;AACrD,WAAO,KAAK,eAAuB,kBAAkB,QAAQ;AAAA,EAC/D;AAAA,EAEA,4BACE,aAC0E;AAC1E,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,wBACE,eACqE;AACrE,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,8BACE,eAKA;AACA,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,8BACE,aACmE;AACnE,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;;;AClMA,SAAS,KAAAC,WAAS;;;ACAlB,SAAS,KAAAC,WAAS;AAGX,IAAM,wBAAwBC,IAAE,YAAY;AAAA,EACjD,iBAAiBA,IAAE,OAAO;AAAA,EAC1B,WAAWA,IAAE,OAAO;AAAA,EACpB,aAAa,QAAQ;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAAA,EACD,UAAUA,IAAE,OAAO;AAAA,EACnB,aAAaA,IAAE,OAAO;AAAA,EACtB,eAAeA,IAAE,OAAO;AAAA,EACxB,UAAUA,IAAE,OAAO;AACrB,CAAC;AAEM,IAAM,sBAAsBA,IAAE,YAAY;AAAA,EAC/C,WAAWA,IAAE,OAAO;AAAA,EACpB,WAAWA,IAAE,OAAO;AAAA,EACpB,sBAAsBA,IAAE,OAAO;AAAA,EAC/B,oBAAoBA,IAAE,OAAO;AAAA,EAC7B,6BAA6BA,IAAE,QAAQ,EAAE,SAAS;AAAA,EAClD,uBAAuBA,IAAE,QAAQ,EAAE,SAAS;AAAA,EAC5C,mBAAmBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACvC,sBAAsBA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC1C,gBAAgBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACpC,4BAA4BA,IAAE,OAAO,EAAE,SAAS;AAAA,EAChD,uBAAuBA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC3C,2BAA2BA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC/C,wBAAwBA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC5C,6BAA6BA,IAAE,OAAO,EAAE,SAAS;AAAA,EACjD,SAASA,IAAE,OAAO,EAAE,SAAS;AAC/B,CAAC;AAEM,IAAM,qBAAqBA,IAAE,YAAY;AAAA,EAC9C,OAAOA,IAAE;AAAA,IACPA,IAAE,YAAY;AAAA,MACZ,eAAeA,IAAE,OAAO;AAAA,MACxB,oBAAoBA,IAAE,OAAO;AAAA,MAC7B,YAAYA,IAAE,OAAO;AAAA,IACvB,CAAC;AAAA,EACH;AAAA,EACA,MAAMA,IAAE;AAAA,IACNA,IAAE,YAAY;AAAA,MACZ,QAAQA,IAAE,OAAO;AAAA,MACjB,SAASA,IAAE,OAAO;AAAA,MAClB,UAAUA,IAAE,OAAO;AAAA,MACnB,WAAWA,IAAE,OAAO;AAAA,MACpB,cAAcA,IAAE,OAAO,EAAE,SAAS;AAAA,MAClC,mBAAmBA,IAChB,YAAY;AAAA,QACX,OAAOA,IAAE;AAAA,UACPA,IAAE,YAAY;AAAA,YACZ,SAASA,IAAE,OAAO;AAAA,YAClB,UAAUA,IAAE,OAAO;AAAA,YACnB,WAAWA,IAAE,OAAO;AAAA,UACtB,CAAC;AAAA,QACH;AAAA,QACA,iBAAiBA,IAAE,OAAO,EAAE,SAAS;AAAA,QACrC,YAAYA,IAAE,OAAO,EAAE,SAAS;AAAA,QAChC,aAAaA,IAAE,OAAO,EAAE,SAAS;AAAA,QACjC,eAAeA,IAAE,OAAO,EAAE,SAAS;AAAA,MACrC,CAAC,EACA,SAAS;AAAA,MACZ,iBAAiBA,IACd,YAAY;AAAA,QACX,cAAcA,IAAE,OAAO;AAAA,MACzB,CAAC,EACA,SAAS;AAAA,MACZ,UAAUA,IACP;AAAA,QACCA,IAAE,YAAY;AAAA,UACZ,SAASA,IAAE,OAAO;AAAA,UAClB,QAAQA,IAAE,OAAO;AAAA,QACnB,CAAC;AAAA,MACH,EACC,SAAS;AAAA,MACZ,cAAcA,IAAE,OAAO,EAAE,SAAS;AAAA,MAClC,aAAaA,IAAE,OAAO,EAAE,SAAS;AAAA,MACjC,kBAAkBA,IAAE,OAAO,EAAE,SAAS;AAAA,IACxC,CAAC;AAAA,EACH;AAAA,EACA,QAAQA,IAAE;AAAA,IACRA,IAAE,YAAY;AAAA,MACZ,UAAUA,IAAE,OAAO;AAAA,MACnB,eAAeA,IAAE,OAAO;AAAA,MACxB,oBAAoBA,IAAE,OAAO;AAAA,MAC7B,iBAAiBA,IAAE,OAAO;AAAA,MAC1B,UAAUA,IAAE,OAAO;AAAA,MACnB,WAAWA,IAAE,MAAMA,IAAE,OAAO,CAAC,EAAE,SAAS;AAAA,IAC1C,CAAC;AAAA,EACH;AACF,CAAC;;;AClGD,SAAS,KAAAC,WAAS;AAGlB,IAAM,iBAAiBC,IAAE,YAAY;AAAA,EACnC,GAAGA,IAAE,OAAO;AAAA,EACZ,GAAGA,IAAE,OAAO;AAAA,EACZ,GAAGA,IAAE,OAAO;AACd,CAAC;AAEM,IAAM,wBAAwBA,IAAE,YAAY;AAAA,EACjD,WAAWA,IAAE,OAAO;AAAA,EACpB,MAAMA,IAAE,OAAO;AAAA,EACf,kBAAkBA,IAAE,OAAO;AAAA,EAC3B,UAAU,eAAe,SAAS;AAAA,EAClC,gBAAgBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACpC,iBAAiBA,IAAE,OAAO;AAAA,EAC1B,SAASA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,WAAWA,IAAE,MAAMA,IAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACxC,UAAUA,IAAE,MAAMA,IAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACvC,SAASA,IACN;AAAA,IACCA,IAAE,YAAY;AAAA,MACZ,gBAAgBA,IAAE,MAAMA,IAAE,OAAO,CAAC,EAAE,SAAS;AAAA,MAC7C,OAAOA,IAAE,MAAMA,IAAE,OAAO,CAAC,EAAE,SAAS;AAAA,MACpC,WAAWA,IAAE,OAAO;AAAA,IACtB,CAAC;AAAA,EACH,EACC,SAAS;AACd,CAAC;AAEM,IAAM,0BAA0BA,IAAE,YAAY;AAAA,EACnD,kBAAkBA,IAAE,OAAO;AAAA,EAC3B,MAAMA,IAAE,OAAO;AAAA,EACf,WAAWA,IAAE,OAAO;AAAA,EACpB,SAASA,IAAE,MAAMA,IAAE,OAAO,CAAC;AAAA,EAC3B,UAAU;AACZ,CAAC;AAEM,IAAM,mBAAmBA,IAAE,YAAY;AAAA,EAC5C,WAAWA,IAAE,OAAO;AAAA,EACpB,MAAMA,IAAE,OAAO;AAAA,EACf,aAAaA,IAAE,OAAO,EAAE,SAAS;AAAA,EACjC,gBAAgBA,IAAE,MAAMA,IAAE,OAAO,CAAC;AACpC,CAAC;AAEM,IAAM,iBAAiBA,IAAE,YAAY;AAAA,EAC1C,IAAIA,IAAE,OAAO;AAAA,EACb,MAAMA,IAAE,OAAO;AAAA,EACf,cAAcA,IAAE,OAAO;AAAA,EACvB,aAAaA,IAAE,OAAO;AAAA,EACtB,mBAAmBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACvC,SAASA,IAAE,OAAO,EAAE,SAAS;AAC/B,CAAC;AAEM,IAAM,kBAAkBA,IAAE,YAAY;AAAA,EAC3C,cAAcA,IAAE,OAAO;AAAA,EACvB,MAAMA,IAAE,OAAO;AAAA,EACf,aAAaA,IAAE,OAAO;AAAA,EACtB,SAASA,IAAE,OAAO;AAAA,EAClB,gBAAgBA,IAAE,OAAO;AAAA,EACzB,cAAcA,IAAE,OAAO,EAAE,SAAS;AAAA,EAClC,UAAUA,IAAE,OAAO;AAAA,EACnB,cAAcA,IAAE,OAAO;AAAA,EACvB,QAAQA,IAAE,OAAO;AAAA,EACjB,YAAYA,IAAE,OAAO;AAAA,EACrB,WAAWA,IAAE,OAAO;AACtB,CAAC;AAEM,IAAM,gBAAgBA,IAAE,YAAY;AAAA,EACzC,YAAYA,IAAE,OAAO;AAAA,EACrB,MAAMA,IAAE,OAAO;AAAA,EACf,aAAaA,IAAE,OAAO;AAAA,EACtB,aAAaA,IAAE,OAAO;AAAA,EACtB,eAAeA,IAAE,OAAO;AAAA,EACxB,sBAAsBA,IAAE,OAAO;AAAA,EAC/B,WAAWA,IAAE,QAAQ;AAAA,EACrB,iBAAiBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACrC,gBAAgBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACpC,wBAAwBA,IAAE,OAAO,EAAE,SAAS;AAC9C,CAAC;AAEM,IAAM,aAAaA,IAAE,YAAY;AAAA,EACtC,SAASA,IAAE,OAAO;AAAA,EAClB,MAAMA,IAAE,OAAO;AAAA,EACf,aAAaA,IAAE,OAAO;AAAA,EACtB,aAAaA,IAAE,OAAO;AACxB,CAAC;AAEM,IAAM,oBAAoBA,IAAE,YAAY;AAAA,EAC7C,YAAYA,IAAE,OAAO;AAAA,EACrB,MAAMA,IAAE,OAAO;AAAA,EACf,OAAOA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,WAAWA,IAAE,OAAO;AAAA,EACpB,SAASA,IAAE,OAAO;AAAA,EAClB,SAASA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,yBAAyBA,IAAE,OAAO;AAAA,EAClC,4BAA4BA,IAAE,OAAO;AAAA,EACrC,0BAA0BA,IAAE,OAAO;AAAA,EACnC,oBAAoBA,IAAE,OAAO;AAAA,EAC7B,UAAUA,IAAE,MAAMA,IAAE,OAAO,CAAC;AAAA,EAC5B,UAAU;AACZ,CAAC;AAEM,IAAM,iBAAiBA,IAAE,YAAY;AAAA,EAC1C,SAASA,IAAE,OAAO;AAAA,EAClB,MAAMA,IAAE,OAAO;AAAA,EACf,aAAaA,IAAE,OAAO;AAAA,EACtB,WAAWA,IAAE,QAAQ;AAAA,EACrB,UAAUA,IAAE,OAAO;AAAA,EACnB,iBAAiBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACrC,QAAQA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,QAAQA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,iBAAiBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACrC,UAAUA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,cAAcA,IAAE,OAAO,EAAE,SAAS;AAAA,EAClC,MAAMA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,SAASA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,YAAYA,IAAE,OAAO,EAAE,SAAS;AAAA,EAChC,kBAAkBA,IACf;AAAA,IACCA,IAAE,YAAY;AAAA,MACZ,cAAcA,IAAE,OAAO;AAAA,MACvB,OAAOA,IAAE,OAAO;AAAA,IAClB,CAAC;AAAA,EACH,EACC,SAAS;AAAA,EACZ,eAAeA,IACZ;AAAA,IACCA,IAAE,YAAY;AAAA,MACZ,WAAWA,IAAE,OAAO;AAAA,MACpB,YAAYA,IAAE,QAAQ;AAAA,IACxB,CAAC;AAAA,EACH,EACC,SAAS;AACd,CAAC;AAEM,IAAM,yBAAyBA,IAAE,YAAY;AAAA,EAClD,MAAMA,IAAE,OAAO;AAAA,EACf,UAAU;AAAA,EACV,WAAWA,IAAE,OAAO;AACtB,CAAC;AAEM,IAAM,oBAAoBA,IAAE,YAAY;AAAA,EAC7C,YAAYA,IAAE,OAAO;AAAA,EACrB,gBAAgBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACpC,cAAcA,IAAE,OAAO,EAAE,SAAS;AAAA,EAClC,aAAaA,IAAE,OAAO,EAAE,SAAS;AAAA,EACjC,SAASA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,iBAAiBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACrC,eAAeA,IAAE,OAAO,EAAE,SAAS;AAAA,EACnC,eAAeA,IAAE,OAAO,EAAE,SAAS;AACrC,CAAC;AAEM,IAAM,qBAAqBA,IAAE,YAAY;AAAA,EAC9C,aAAaA,IAAE,OAAO;AAAA,EACtB,MAAMA,IAAE,OAAO;AAAA,EACf,QAAQA,IAAE,MAAMA,IAAE,OAAO,CAAC;AAAA,EAC1B,WAAWA,IAAE,QAAQ;AACvB,CAAC;AAEM,IAAM,kBAAkBA,IAAE,YAAY;AAAA,EAC3C,UAAUA,IAAE,OAAO;AAAA,EACnB,MAAMA,IAAE,OAAO;AAAA,EACf,aAAaA,IAAE,OAAO;AAAA,EACtB,OAAOA,IAAE,MAAMA,IAAE,OAAO,CAAC;AAAA,EACzB,WAAWA,IAAE,QAAQ;AACvB,CAAC;AAEM,IAAM,iBAAiBA,IAAE,YAAY;AAAA,EAC1C,SAASA,IAAE,OAAO;AAAA,EAClB,MAAMA,IAAE,OAAO;AAAA,EACf,WAAWA,IAAE,OAAO;AAAA,EACpB,UAAU;AACZ,CAAC;AAEM,IAAM,mBAAmBA,IAAE,YAAY;AAAA,EAC5C,WAAWA,IAAE,OAAO;AAAA,EACpB,MAAMA,IAAE,OAAO;AAAA,EACf,WAAWA,IAAE,OAAO;AAAA,EACpB,SAASA,IAAE,OAAO;AAAA,EAClB,UAAU;AACZ,CAAC;AAEM,IAAM,iBAAiBA,IAAE,YAAY;AAAA,EAC1C,SAASA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,iBAAiBA,IAAE,OAAO;AAAA,EAC1B,MAAMA,IAAE,OAAO;AAAA,EACf,SAASA,IAAE,OAAO;AAAA,EAClB,KAAKA,IAAE,OAAO;AAAA,EACd,YAAYA,IAAE,OAAO;AAAA,EACrB,QAAQA,IAAE,OAAO;AAAA,EACjB,gBAAgBA,IAAE,OAAO;AAAA,EACzB,aAAaA,IAAE,OAAO;AACxB,CAAC;AAEM,IAAM,qBAAqBA,IAAE,YAAY;AAAA,EAC9C,aAAaA,IAAE,OAAO;AAAA,EACtB,MAAMA,IAAE,OAAO;AAAA,EACf,WAAWA,IAAE,OAAO;AAAA,EACpB,SAASA,IAAE,OAAO;AAAA,EAClB,UAAU;AAAA,EACV,aAAaA,IAAE,YAAY;AAAA,IACzB,WAAWA,IAAE,OAAO;AAAA,IACpB,aAAaA,IAAE,OAAO;AAAA,EACxB,CAAC;AACH,CAAC;AAEM,IAAM,sBAAsBA,IAAE,YAAY;AAAA,EAC/C,cAAcA,IAAE,OAAO,EAAE,SAAS;AAAA,EAClC,MAAMA,IAAE,OAAO;AAAA,EACf,UAAUA,IAAE,OAAO;AAAA,EACnB,iBAAiBA,IAAE,OAAO;AAAA,EAC1B,SAASA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,UAAU,eAAe,SAAS;AACpC,CAAC;AAEM,IAAM,mBAAmBA,IAAE,YAAY;AAAA,EAC5C,WAAWA,IAAE,OAAO;AAAA,EACpB,YAAYA,IAAE,OAAO;AACvB,CAAC;AAEM,IAAM,mBAAmBA,IAAE,YAAY;AAAA,EAC5C,WAAWA,IAAE,OAAO;AAAA,EACpB,WAAWA,IAAE,OAAO;AAAA,EACpB,WAAWA,IAAE,OAAO;AAAA,EACpB,YAAYA,IAAE,OAAO;AACvB,CAAC;AAED,IAAM,eAAeA,IAAE,YAAY;AAAA,EACjC,IAAIA,IAAE,OAAO;AAAA,EACb,MAAMA,IAAE,OAAO;AACjB,CAAC;AAEM,IAAM,qBAAqBA,IAAE,YAAY;AAAA,EAC9C,QAAQA,IAAE,MAAM,YAAY,EAAE,SAAS;AAAA,EACvC,WAAWA,IAAE,MAAM,YAAY,EAAE,SAAS;AAAA,EAC1C,YAAYA,IAAE,MAAM,YAAY,EAAE,SAAS;AAAA,EAC3C,gBAAgBA,IAAE,MAAM,YAAY,EAAE,SAAS;AAAA,EAC/C,cAAcA,IAAE,MAAM,YAAY,EAAE,SAAS;AAAA,EAC7C,UAAUA,IAAE,MAAM,YAAY,EAAE,SAAS;AAAA,EACzC,iBAAiBA,IAAE,MAAM,YAAY,EAAE,SAAS;AAAA,EAChD,SAASA,IAAE,MAAM,YAAY,EAAE,SAAS;AAAA,EACxC,SAASA,IAAE,MAAM,YAAY,EAAE,SAAS;AAAA,EACxC,UAAUA,IAAE,MAAM,YAAY,EAAE,SAAS;AAC3C,CAAC;AAEM,IAAM,wBAAwBA,IAAE,YAAY;AAAA,EACjD,IAAIA,IAAE,OAAO;AAAA,EACb,MAAMA,IAAE,OAAO;AAAA,EACf,UAAU,QAAQ;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACH,CAAC;AAEM,IAAM,sBAAsBA,IAAE,YAAY;AAAA,EAC/C,gBAAgBA,IAAE,OAAO;AAAA,EACzB,YAAYA,IAAE,OAAO;AACvB,CAAC;AAEM,IAAM,qBAAqBA,IAAE,YAAY;AAAA,EAC9C,OAAOA,IAAE,MAAMA,IAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACpC,UAAUA,IAAE,MAAMA,IAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACvC,WAAWA,IAAE,MAAMA,IAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACxC,eAAeA,IAAE,MAAMA,IAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EAC5C,aAAaA,IAAE,MAAMA,IAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EAC1C,SAASA,IAAE,MAAMA,IAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACtC,gBAAgBA,IAAE,MAAMA,IAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EAC7C,QAAQA,IAAE,MAAMA,IAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACrC,cAAcA,IAAE,MAAMA,IAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EAC3C,SAASA,IAAE,MAAMA,IAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACtC,WAAWA,IAAE,MAAMA,IAAE,OAAO,CAAC,EAAE,SAAS;AAC1C,CAAC;;;AF9QM,IAAM,cAAc;AAAA,EACzB,aAAa;AAAA,IACX,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,gBAAgBC,IAAE,MAAM,qBAAqB;AAAA,EAC/C;AAAA,EACA,iBAAiB;AAAA,IACf,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,eAAe,UAAU;AAAA,IACtC,gBAAgB;AAAA,EAClB;AAAA,EACA,8BAA8B;AAAA,IAC5B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,eAAe;AAAA,IAC5B,gBAAgBA,IAAE,MAAM,mBAAmB;AAAA,EAC7C;AAAA,EACA,yBAAyB;AAAA,IACvB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,gBAAgB;AAAA,EAClB;AACF;;;AG3BO,IAAM,WAAN,cAAuB,cAAkC;AAAA,EAC9D,YAAY,QAAmB;AAC7B,UAAM,QAAQ,WAAW;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,YAAY,aAAiD;AAC3D,WAAO,KAAK,IAAI,YAAY,WAAW;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,gBACE,aACA,UACuB;AACvB,WAAO,KAAK,IAAI,gBAAgB,aAAa,QAAQ;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,6BACE,eAC0B;AAC1B,WAAO,KAAK,IAAI,6BAA6B,aAAa;AAAA,EAC5D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,wBAAwB,aAA6C;AACnE,WAAO,KAAK,IAAI,wBAAwB,WAAW;AAAA,EACrD;AAAA,EAEA,eACE,aAC8D;AAC9D,WAAO,KAAK,eAAgC,eAAe,WAAW;AAAA,EACxE;AAAA,EAEA,gCACE,eAC4D;AAC5D,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;;;AC/EA,SAAS,KAAAC,WAAS;AAGX,IAAM,iBAAiB;AAAA,EAC5B,UAAU;AAAA,IACR,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,UAAU,aAAa;AAAA,IACpC,SAAS;AAAA,IACT,gBAAgBA,IAAE,YAAY,EAAE,OAAOA,IAAE,MAAMA,IAAE,OAAO,CAAC,EAAE,CAAC;AAAA,EAC9D;AACF;;;ACDO,IAAM,cAAN,cAA0B,cAAqC;AAAA,EACpE,YAAY,QAAmB;AAC7B,UAAM,QAAQ,cAAc;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,SACJ,QACA,aACA,SACmB;AACnB,UAAM,OAAO,WAAW,CAAC;AACzB,UAAM,SAAU,MAAM,KAAK,IAAI,SAAS,QAAQ,aAAa,IAAI;AAGjE,WAAO,OAAO;AAAA,EAChB;AACF;;;AChCO,IAAM,kBAAkB;AAAA,EAC7B,iBAAiB;AAAA,IACf,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,aAAa,EAAE,cAAc,UAAU,YAAY,aAAa;AAAA,IAChE,gBAAgB;AAAA,EAClB;AACF;;;ACPO,IAAM,eAAN,cAA2B,cAAsC;AAAA,EACtE,YAAY,QAAmB;AAC7B,UAAM,QAAQ,eAAe;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,gBACE,aACA,cACA,YACuB;AACvB,WAAO,KAAK,IAAI;AAAA,MACd;AAAA,MACA;AAAA,MACA,WAAW,KAAK,GAAG;AAAA,IACrB;AAAA,EACF;AACF;;;AC7BA,SAAS,KAAAC,WAAS;;;ACAlB,SAAS,KAAAC,WAAS;AAEX,IAAM,uBAAuBA,IAAE,YAAY;AAAA,EAChD,UAAUA,IAAE,OAAO;AAAA,EACnB,sBAAsBA,IAAE,OAAO;AAAA,EAC/B,qBAAqBA,IAAE,OAAO;AAAA,EAC9B,oBAAoBA,IAAE,OAAO;AAC/B,CAAC;AAEM,IAAM,gCAAgCA,IAAE,YAAY;AAAA,EACzD,QAAQA,IAAE;AAAA,IACRA,IAAE,YAAY;AAAA,MACZ,UAAUA,IAAE,OAAO;AAAA,MACnB,sBAAsBA,IAAE,OAAO;AAAA,MAC/B,qBAAqBA,IAAE,OAAO;AAAA,MAC9B,oBAAoBA,IAAE,OAAO;AAAA,IAC/B,CAAC;AAAA,EACH;AAAA,EACA,UAAUA,IAAE,OAAO;AAAA,EACnB,gBAAgBA,IAAE,OAAO,EAAE,SAAS;AACtC,CAAC;AAEM,IAAM,mBAAmBA,IAAE,YAAY;AAAA,EAC5C,UAAUA,IAAE,OAAO;AAAA,EACnB,gBAAgBA,IAAE,OAAO;AAAA,EACzB,gBAAgBA,IAAE,OAAO;AAAA,EACzB,cAAcA,IAAE,OAAO,EAAE,SAAS;AAAA,EAClC,gBAAgBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACpC,mBAAmBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACvC,YAAYA,IAAE,OAAO,EAAE,SAAS;AAAA,EAChC,aAAaA,IAAE,OAAO,EAAE,SAAS;AACnC,CAAC;;;ADvBM,IAAM,iBAAiB;AAAA,EAC5B,wBAAwB;AAAA,IACtB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,gBAAgB;AAAA,EAClB;AAAA,EACA,wBAAwB;AAAA,IACtB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,gBAAgBC,IAAE,MAAM,gBAAgB;AAAA,EAC1C;AAAA,EACA,oBAAoB;AAAA,IAClB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,gBAAgB;AAAA,EAClB;AACF;;;AEpBO,IAAM,wBAAN,cAAoC,cAEzC;AAAA,EACA,YAAY,QAAmB;AAC7B,UAAM,QAAQ,cAAc;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,uBAAuB,aAAmD;AACxE,WAAO,KAAK,IAAI,uBAAuB,WAAW;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,uBAAuB,aAA4C;AACjE,WAAO,KAAK,IAAI,uBAAuB,WAAW;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,mBAAmB,aAIhB;AACD,WAAO,KAAK,IAAI,mBAAmB,WAAW;AAAA,EAChD;AAAA,EAEA,0BACE,aACyD;AACzD,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;;;AC9DA,SAAS,KAAAC,WAAS;;;ACAlB,SAAS,KAAAC,WAAS;AAGX,IAAM,4BAA4BC,IAAE,YAAY;AAAA,EACrD,aAAaA,IAAE,OAAO;AAAA,EACtB,cAAcA,IAAE,OAAO;AAAA,EACvB,iBAAiBA,IAAE,OAAO;AAAA,EAC1B,kBAAkBA,IAAE,OAAO;AAAA,EAC3B,YAAY,QAAQ;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAAA,EACD,YAAYA,IAAE,OAAO;AAAA,EACrB,aAAaA,IAAE,OAAO,EAAE,SAAS;AAAA,EACjC,gBAAgBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACpC,iBAAiBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACrC,cAAcA,IACX;AAAA,IACCA,IAAE,YAAY;AAAA,MACZ,aAAaA,IAAE,OAAO;AAAA,MACtB,OAAOA,IAAE,OAAO;AAAA,IAClB,CAAC;AAAA,EACH,EACC,SAAS;AACd,CAAC;AAEM,IAAM,mCAAmCA,IAAE,YAAY;AAAA,EAC5D,aAAaA,IAAE,OAAO,EAAE,SAAS;AAAA,EACjC,iBAAiBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACrC,cAAcA,IAAE,OAAO;AAAA,EACvB,mBAAmBA,IAAE,OAAO;AAAA,EAC5B,+BAA+BA,IAAE,OAAO,EAAE,SAAS;AAAA,EACnD,uBAAuBA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC3C,qBAAqBA,IAAE,OAAO,EAAE,SAAS;AAC3C,CAAC;AAED,IAAM,uCAAuCA,IAAE,YAAY;AAAA,EACzD,OAAOA,IAAE,OAAO;AAAA,EAChB,KAAKA,IAAE,OAAO;AAChB,CAAC;AAED,IAAM,uBAAuBA,IAAE,YAAY;AAAA,EACzC,IAAIA,IAAE,OAAO;AAAA,EACb,sBAAsB,qCAAqC,SAAS;AACtE,CAAC;AAED,IAAM,+BAA+BA,IAAE,YAAY;AAAA,EACjD,6BAA6BA,IAAE,OAAO,EAAE,SAAS;AAAA,EACjD,gBAAgBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACpC,kBAAkBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACtC,iBAAiBA,IAAE,OAAO,EAAE,SAAS;AACvC,CAAC;AAED,IAAM,iCAAiCA,IAAE,YAAY;AAAA,EACnD,aAAaA,IAAE,OAAO;AAAA,EACtB,gBAAgBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACpC,eAAeA,IAAE,OAAO,EAAE,SAAS;AAAA,EACnC,iBAAiB,qBAAqB,SAAS;AAAA,EAC/C,mBAAmBA,IAAE,QAAQ,EAAE,SAAS;AAAA,EACxC,aAAa,6BAA6B,SAAS;AACrD,CAAC;AAED,IAAM,gCAAgCA,IAAE,YAAY;AAAA,EAClD,YAAYA,IAAE,OAAO;AACvB,CAAC;AAED,IAAM,yBAAyBA,IAAE,YAAY;AAAA,EAC3C,UAAU,+BAA+B,SAAS;AAAA,EAClD,SAAS,8BAA8B,SAAS;AAAA,EAChD,WAAWA,IAAE,QAAQ,EAAE,SAAS;AAClC,CAAC;AAED,IAAM,+BAA+BA,IAAE,YAAY;AAAA,EACjD,iBAAiBA,IAAE,OAAO;AAAA,EAC1B,OAAO;AACT,CAAC;AAEM,IAAM,0BAA0BA,IAAE,YAAY;AAAA,EACnD,eAAeA,IAAE,MAAM,4BAA4B;AACrD,CAAC;;;AD1EM,IAAM,uBAAuB;AAAA,EAClC,yBAAyB;AAAA,IACvB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,gBAAgBC,IAAE,MAAM,yBAAyB;AAAA,EACnD;AAAA,EACA,uBAAuB;AAAA,IACrB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,gBAAgB;AAAA,EAClB;AACF;;;AEfO,IAAM,oBAAN,cAAgC,cAErC;AAAA,EACA,YAAY,QAAmB;AAC7B,UAAM,QAAQ,oBAAoB;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,0BAA0D;AACxD,WAAO,KAAK,IAAI,wBAAwB;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,wBAAoD;AAClD,WAAO,KAAK,IAAI,sBAAsB;AAAA,EACxC;AACF;;;AC7BA,SAAS,KAAAC,WAAS;AAEX,IAAM,qBAAqBA,IAAE,YAAY;AAAA,EAC9C,SAASA,IAAE,OAAO;AAAA,EAClB,gBAAgBA,IAAE,OAAO;AAAA,EACzB,YAAYA,IAAE,OAAO;AAAA,EACrB,KAAKA,IAAE,QAAQ,EAAE,SAAS;AAC5B,CAAC;;;ACJM,IAAM,kBAAkB;AAAA,EAC7B,WAAW;AAAA,IACT,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,gBAAgB;AAAA,EAClB;AACF;;;ACLO,IAAM,eAAN,cAA2B,cAAsC;AAAA,EACtE,YAAY,QAAmB;AAC7B,UAAM,QAAQ,eAAe;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,YAAmC;AACjC,WAAO,KAAK,IAAI,UAAU;AAAA,EAC5B;AACF;;;AChBO,IAAM,cAAc;AAAA,EACzB,sBAAsB;AAAA,IACpB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,aAAa;AAAA,MACX,eAAe;AAAA,MACf,gBAAgB;AAAA,MAChB,qBAAqB;AAAA,IACvB;AAAA,EACF;AAAA,EACA,oBAAoB;AAAA,IAClB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,aAAa,EAAE,YAAY,cAAc;AAAA,EAC3C;AAAA,EACA,uBAAuB;AAAA,IACrB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,aAAa,EAAE,UAAU,YAAY;AAAA,EACvC;AAAA,EACA,yBAAyB;AAAA,IACvB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,aAAa,EAAE,QAAQ,UAAU;AAAA,EACnC;AAAA,EACA,mBAAmB;AAAA,IACjB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,SAAS;AAAA,EACX;AACF;;;ACjCO,IAAM,WAAN,cAAuB,cAAkC;AAAA,EAC9D,YAAY,QAAmB;AAC7B,UAAM,QAAQ,WAAW;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,qBACE,eACA,gBACA,qBACe;AACf,WAAO,KAAK,IAAI;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,mBAAmB,YAAmC;AACpD,WAAO,KAAK,IAAI,mBAAmB,UAAU;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,sBAAsB,UAAiC;AACrD,WAAO,KAAK,IAAI,sBAAsB,QAAQ;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,wBAAwB,QAA+B;AACrD,WAAO,KAAK,IAAI,wBAAwB,MAAM;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,kBAAkB,MAA6B;AAC7C,WAAO,KAAK,IAAI,kBAAkB,IAAI;AAAA,EACxC;AACF;;;ACpEA,SAAS,KAAAC,WAAS;AA4BX,IAAM,oBAAoB;AAAA,EAC/B,eAAe;AAAA,IACb,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,gBAAgBC,IAAE,MAAM,cAAc;AAAA,EACxC;AAAA,EACA,qBAAqB;AAAA,IACnB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,gBAAgB;AAAA,IAC7B,gBAAgB;AAAA,EAClB;AAAA,EACA,eAAe;AAAA,IACb,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,gBAAgBA,IAAE,MAAM,eAAe;AAAA,EACzC;AAAA,EACA,eAAe;AAAA,IACb,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,gBAAgBA,IAAE,MAAMA,IAAE,OAAO,CAAC;AAAA,EACpC;AAAA,EACA,iBAAiB;AAAA,IACf,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,YAAY;AAAA,IACzB,gBAAgB;AAAA,EAClB;AAAA,EACA,mBAAmB;AAAA,IACjB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,gBAAgBA,IAAE,MAAMA,IAAE,OAAO,CAAC;AAAA,EACpC;AAAA,EACA,sBAAsB;AAAA,IACpB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,iBAAiB;AAAA,IAC9B,gBAAgB;AAAA,EAClB;AAAA,EACA,aAAa;AAAA,IACX,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,gBAAgBA,IAAE,MAAM,aAAa;AAAA,EACvC;AAAA,EACA,aAAa;AAAA,IACX,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,gBAAgBA,IAAE,MAAMA,IAAE,OAAO,CAAC;AAAA,EACpC;AAAA,EACA,gBAAgB;AAAA,IACd,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,WAAW;AAAA,IACxB,gBAAgB;AAAA,EAClB;AAAA,EACA,eAAe;AAAA,IACb,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,gBAAgBA,IAAE,MAAMA,IAAE,OAAO,CAAC;AAAA,EACpC;AAAA,EACA,kBAAkB;AAAA,IAChB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,SAAS;AAAA,IACtB,gBAAgB;AAAA,EAClB;AAAA,EACA,oBAAoB;AAAA,IAClB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,aAAa,CAAC,UAAoB;AAAA,IAClC,gBAAgB;AAAA,IAChB,eAAeA,IAAE,MAAMA,IAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AAAA,EAC1C;AAAA,EACA,aAAa;AAAA,IACX,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,QAAQ;AAAA,IACrB,gBAAgB;AAAA,EAClB;AAAA,EACA,wBAAwB;AAAA,IACtB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,aAAa,CAAC,QAAkB;AAAA,IAChC,gBAAgBA,IAAE,MAAM,qBAAqB;AAAA,IAC7C,eAAeA,IAAE,MAAMA,IAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACzC;AAAA,EACA,eAAe;AAAA,IACb,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,UAAU;AAAA,IACvB,gBAAgB;AAAA,EAClB;AAAA,EACA,UAAU;AAAA,IACR,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,gBAAgBA,IAAE,MAAM,UAAU;AAAA,EACpC;AAAA,EACA,YAAY;AAAA,IACV,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,gBAAgBA,IAAE,MAAMA,IAAE,OAAO,CAAC;AAAA,EACpC;AAAA,EACA,eAAe;AAAA,IACb,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,UAAU;AAAA,IACvB,gBAAgB;AAAA,EAClB;AAAA,EACA,kBAAkB;AAAA,IAChB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,gBAAgB;AAAA,EAClB;AAAA,EACA,iBAAiB;AAAA,IACf,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,YAAY;AAAA,IACzB,gBAAgB;AAAA,EAClB;AAAA,EACA,aAAa;AAAA,IACX,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,QAAQ;AAAA,IACrB,gBAAgB;AAAA,EAClB;AAAA,EACA,gBAAgB;AAAA,IACd,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,WAAW;AAAA,IACxB,gBAAgB;AAAA,EAClB;AAAA,EACA,eAAe;AAAA,IACb,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,gBAAgBA,IAAE,MAAMA,IAAE,OAAO,CAAC;AAAA,EACpC;AAAA,EACA,kBAAkB;AAAA,IAChB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,gBAAgB;AAAA,EAClB;AAAA,EACA,gBAAgB;AAAA,IACd,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,gBAAgBA,IAAE,MAAM,gBAAgB;AAAA,EAC1C;AAAA,EACA,gBAAgB;AAAA,IACd,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,gBAAgBA,IAAE,MAAM,gBAAgB;AAAA,EAC1C;AAAA,EACA,YAAY;AAAA,IACV,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,gBAAgBA,IAAE,MAAMA,IAAE,OAAO,CAAC;AAAA,EACpC;AAAA,EACA,eAAe;AAAA,IACb,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,UAAU;AAAA,IACvB,gBAAgB;AAAA,EAClB;AAAA,EACA,UAAU;AAAA,IACR,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,gBAAgBA,IAAE,MAAMA,IAAE,OAAO,CAAC;AAAA,EACpC;AAAA,EACA,aAAa;AAAA,IACX,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,QAAQ;AAAA,IACrB,gBAAgB;AAAA,EAClB;AACF;;;AC7MO,IAAM,iBAAN,cAA6B,cAAwC;AAAA,EAC1E,YAAY,QAAmB;AAC7B,UAAM,QAAQ,iBAAiB;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,gBAAqC;AACnC,WAAO,KAAK,IAAI,cAAc;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,oBAAoB,gBAAmD;AACrE,WAAO,KAAK,IAAI;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,gBAAsC;AACpC,WAAO,KAAK,IAAI,cAAc;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,qBAAqB,iBAAqD;AACxE,WAAO,KAAK,IAAI;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,oBAAuC;AACrC,WAAO,KAAK,IAAI,kBAAkB;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,cAAkC;AAChC,WAAO,KAAK,IAAI,YAAY;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,eAAe,WAAyC;AACtD,WAAO,KAAK,IAAI,eAAe,SAAS;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,cAAiC;AAC/B,WAAO,KAAK,IAAI,YAAY;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,oBAAuC;AACrC,WAAO,KAAK,IAAI,cAAc;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,oBAAoB,YAA2C;AAC7D,WAAO,KAAK,IAAI,gBAAgB,UAAU;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,iBAAiB,SAAqC;AACpD,WAAO,KAAK,IAAI,iBAAiB,OAAO;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,gBAAmC;AACjC,WAAO,KAAK,IAAI,cAAc;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,YAAY,QAAmC;AAC7C,WAAO,KAAK,IAAI,YAAY,MAAM;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,cAAc,UAAuC;AACnD,WAAO,KAAK,IAAI,cAAc,QAAQ;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,WAA4B;AAC1B,WAAO,KAAK,IAAI,SAAS;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,cAAc,UAAuC;AACnD,WAAO,KAAK,IAAI,cAAc,QAAQ;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,YAAY,QAAmC;AAC7C,WAAO,KAAK,IAAI,YAAY,MAAM;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,gBAAgB,YAA2C;AACzD,WAAO,KAAK,IAAI,gBAAgB,UAAU;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,eAAe,WAAyC;AACtD,WAAO,KAAK,IAAI,eAAe,SAAS;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,iBAAiB,aAA6C;AAC5D,WAAO,KAAK,IAAI,iBAAiB,WAAW;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,gBAAmC;AACjC,WAAO,KAAK,IAAI,cAAc;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,cAAc,UAA4C;AACxD,WAAO,KAAK,IAAI,cAAc,QAAQ;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,iBAAwC;AACtC,WAAO,KAAK,IAAI,eAAe;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,iBAAwC;AACtC,WAAO,KAAK,IAAI,eAAe;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,aAAgC;AAC9B,WAAO,KAAK,IAAI,WAAW;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,YAAY,QAAmC;AAC7C,WAAO,KAAK,IAAI,YAAY,MAAM;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,WAA8B;AAC5B,WAAO,KAAK,IAAI,SAAS;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,mBAAmB,OAAwC;AACzD,WAAO,KAAK,IAAI,mBAAmB,KAAK;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,uBAAuB,KAA2C;AAChE,WAAO,KAAK,IAAI,uBAAuB,GAAG;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,iBAAiB,aAA6C;AAC5D,WAAO,KAAK,IAAI,iBAAiB,WAAW;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,aAAgC;AAC9B,WAAO,KAAK,IAAI,WAAW;AAAA,EAC7B;AACF;;;AC9UA,SAAS,KAAAC,WAAS;;;ACAlB,SAAS,KAAAC,WAAS;AAEX,IAAM,0BAA0BA,IAAE,YAAY;AAAA,EACnD,gBAAgBA,IAAE,OAAO;AAAA,EACzB,MAAMA,IAAE,OAAO;AAAA,EACf,SAASA,IAAE,OAAO;AAAA,EAClB,aAAaA,IAAE,OAAO;AAAA,EACtB,YAAYA,IAAE,OAAO;AAAA,EACrB,UAAUA,IAAE,OAAO;AAAA,EACnB,WAAWA,IAAE,OAAO;AAAA,EACpB,QAAQA,IAAE,QAAQ;AAAA,EAClB,aAAaA,IAAE,QAAQ;AAAA,EACvB,gBAAgBA,IAAE,OAAO;AAC3B,CAAC;AAEM,IAAM,sBAAsBA,IAAE,YAAY;AAAA,EAC/C,IAAIA,IAAE,OAAO;AAAA,EACb,MAAMA,IAAE,OAAO;AAAA,EACf,UAAUA,IAAE,OAAO;AAAA,EACnB,gBAAgBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACpC,iBAAiBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACrC,QAAQA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,SAASA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,QAAQA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,aAAaA,IAAE,OAAO;AAAA,EACtB,YAAYA,IAAE,OAAO,EAAE,SAAS;AAAA,EAChC,iBAAiBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACrC,KAAKA,IAAE,OAAO,EAAE,SAAS;AAAA,EACzB,iBAAiBA,IAAE,OAAO,EAAE,SAAS;AACvC,CAAC;;;ADrBM,IAAM,kBAAkB;AAAA,EAC7B,oBAAoB;AAAA,IAClB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,gBAAgBC,IAAE,OAAO;AAAA,EAC3B;AAAA,EACA,2BAA2B;AAAA,IACzB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,gBAAgBA,IAAE,MAAM,mBAAmB;AAAA,EAC7C;AAAA,EACA,gCAAgC;AAAA,IAC9B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,gBAAgBA,IAAE,MAAM,uBAAuB;AAAA,EACjD;AAAA,EACA,uBAAuB;AAAA,IACrB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,eAAe;AAAA,IAC5B,gBAAgBA,IAAE,MAAM,+BAA+B;AAAA,EACzD;AAAA,EACA,6BAA6B;AAAA,IAC3B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,iBAAiB,UAAU;AAAA,IACxC,gBAAgBA,IAAE,MAAM,mBAAmB;AAAA,EAC7C;AAAA,EACA,kCAAkC;AAAA,IAChC,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,iBAAiB,UAAU;AAAA,IACxC,gBAAgBA,IAAE,MAAM,uBAAuB;AAAA,EACjD;AACF;;;AE7CO,IAAM,eAAN,cAA2B,cAAsC;AAAA,EACtE,YAAY,QAAmB;AAC7B,UAAM,QAAQ,eAAe;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,mBAAmB,aAAsC;AACvD,WAAO,KAAK,IAAI,mBAAmB,WAAW;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,0BAA0B,aAA+C;AACvE,WAAO,KAAK,IAAI,0BAA0B,WAAW;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,+BACE,aAC8B;AAC9B,WAAO,KAAK,IAAI,+BAA+B,WAAW;AAAA,EAC5D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,sBACE,eACkD;AAClD,WAAO,KAAK,IAAI,sBAAsB,aAAa;AAAA,EACrD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,4BACE,eACA,UAC0B;AAC1B,WAAO,KAAK,IAAI,4BAA4B,eAAe,QAAQ;AAAA,EACrE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,iCACE,eACA,UAC8B;AAC9B,WAAO,KAAK,IAAI,iCAAiC,eAAe,QAAQ;AAAA,EAC1E;AAAA,EAEA,6BACE,aAC4D;AAC5D,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,+BACE,eACA,UAC4D;AAC5D,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,kCACE,aACgE;AAChE,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,oCACE,eACA,UACgE;AAChE,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;;;AChIA,SAAS,KAAAC,WAAS;;;ACAlB,SAAS,KAAAC,WAAS;AAEX,IAAM,YAAYA,IAAE,YAAY;AAAA,EACrC,IAAIA,IAAE,OAAO;AAAA,EACb,UAAUA,IAAE,OAAO;AAAA,EACnB,SAASA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,UAAUA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,WAAWA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,QAAQA,IAAE,QAAQ;AAAA,EAClB,iBAAiBA,IAAE,QAAQ;AAAA,EAC3B,WAAWA,IAAE,YAAY;AAAA,IACvB,gBAAgBA,IAAE,OAAO,EAAE,SAAS;AAAA,IACpC,aAAaA,IAAE,OAAO,EAAE,SAAS;AAAA,IACjC,eAAeA,IAAE,OAAO;AAAA,IACxB,cAAcA,IAAE,OAAO;AAAA,EACzB,CAAC;AAAA,EACD,UAAUA,IAAE,YAAY;AAAA,IACtB,gBAAgBA,IAAE,OAAO,EAAE,SAAS;AAAA,IACpC,aAAaA,IAAE,OAAO,EAAE,SAAS;AAAA,IACjC,eAAeA,IAAE,OAAO;AAAA,IACxB,cAAcA,IAAE,OAAO;AAAA,EACzB,CAAC;AAAA,EACD,QAAQA,IACL;AAAA,IACCA,IAAE,YAAY;AAAA,MACZ,gBAAgBA,IAAE,OAAO,EAAE,SAAS;AAAA,MACpC,aAAaA,IAAE,OAAO,EAAE,SAAS;AAAA,IACnC,CAAC;AAAA,EACH,EACC,SAAS;AACd,CAAC;;;ADzBM,IAAM,eAAe;AAAA,EAC1B,SAAS;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,gBAAgBC,IAAE,MAAMA,IAAE,OAAO,CAAC;AAAA,EACpC;AAAA,EACA,YAAY;AAAA,IACV,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,OAAO;AAAA,IACpB,gBAAgB;AAAA,EAClB;AAAA,EACA,iBAAiB;AAAA,IACf,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,OAAO;AAAA,IACpB,gBAAgBA,IAAE,MAAM,qBAAqB;AAAA,EAC/C;AACF;;;AEpBO,IAAM,aAAN,cAAyB,cAAmC;AAAA,EACjE,YAAY,QAAmB;AAC7B,UAAM,QAAQ,YAAY;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,UAA6B;AAC3B,WAAO,KAAK,IAAI,QAAQ;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,WAAW,OAA6B;AACtC,WAAO,KAAK,IAAI,WAAW,KAAK;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,gBAAgB,OAA2C;AACzD,WAAO,KAAK,IAAI,gBAAgB,KAAK;AAAA,EACvC;AAAA,EAEA,aAAkE;AAChE,WAAO,KAAK,eAAuB,SAAS;AAAA,EAC9C;AAAA,EAEA,mBACE,OAC8D;AAC9D,WAAO,KAAK,eAAgC,mBAAmB,KAAK;AAAA,EACtE;AACF;;;ACjDA,SAAS,KAAAC,WAAS;;;ACAlB,SAAS,KAAAC,WAAS;AAEX,IAAM,2BAA2BA,IAAE,YAAY;AAAA,EACpD,QAAQA,IAAE,OAAO;AAAA,EACjB,MAAMA,IAAE,OAAO;AAAA,EACf,oBAAoBA,IAAE,OAAO;AAAA,EAC7B,aAAaA,IAAE,QAAQ;AAAA,EACvB,aAAaA,IAAE,OAAO;AACxB,CAAC;AAEM,IAAM,sBAAsBA,IAAE;AAAA,EACnCA,IAAE,OAAO;AAAA,EACTA,IAAE,MAAM,wBAAwB;AAClC;AAEO,IAAM,+BAA+BA,IAAE,YAAY;AAAA,EACxD,qBAAqBA,IAAE,MAAMA,IAAE,OAAO,CAAC;AACzC,CAAC;AAEM,IAAM,iBAAiBA,IAAE,YAAY;AAAA,EAC1C,MAAMA,IAAE,OAAO;AACjB,CAAC;AAEM,IAAM,mBAAmBA,IAAE,YAAY;AAAA,EAC5C,QAAQA,IAAE,OAAO;AACnB,CAAC;;;ADhBM,IAAM,gBAAgB;AAAA,EAC3B,gBAAgB;AAAA,IACd,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,gBAAgBC,IAAE,OAAOA,IAAE,OAAO,GAAGA,IAAE,QAAQ,CAAC;AAAA,EAClD;AAAA,EACA,cAAc;AAAA,IACZ,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,gBAAgB;AAAA,EAClB;AAAA,EACA,uBAAuB;AAAA,IACrB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,gBAAgB;AAAA,EAClB;AAAA,EACA,SAAS;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,gBAAgB;AAAA,EAClB;AAAA,EACA,WAAW;AAAA,IACT,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,gBAAgB;AAAA,EAClB;AACF;;;AE5BO,IAAM,aAAN,cAAyB,cAAoC;AAAA,EAClE,YAAY,QAAmB;AAC7B,UAAM,QAAQ,aAAa;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,iBAA+C;AAC7C,WAAO,KAAK,IAAI,eAAe;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,iBAAkC;AACtC,UAAM,MAAM,GAAG,KAAK,QAAQ,QAAQ,CAAC;AAErC,YAAQ,qBAAqB,GAAG,EAAE;AAElC,QAAI;AACF,YAAM,WAAW,MAAM,MAAM,KAAK;AAAA,QAChC,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,QAAQ;AAAA,UACR,cAAc;AAAA,UACd,wBAAwB;AAAA,QAC1B;AAAA,MACF,CAAC;AAED,UAAI,CAAC,SAAS,IAAI;AAChB,cAAM,IAAI,MAAM,QAAQ,SAAS,MAAM,KAAK,SAAS,UAAU,EAAE;AAAA,MACnE;AAEA,aAAO,MAAM,SAAS,KAAK;AAAA,IAC7B,SAAS,OAAO;AACd,UAAI,iBAAiB,OAAO;AAC1B,iBAAS,wBAAwB,MAAM,OAAO,EAAE;AAChD,cAAM;AAAA,MACR,OAAO;AACL,iBAAS,qBAAqB,OAAO,KAAK,CAAC,EAAE;AAC7C,cAAM,IAAI,MAAM,OAAO,KAAK,CAAC;AAAA,MAC/B;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,eAAuC;AACrC,WAAO,KAAK,IAAI,aAAa;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,wBAAyD;AACvD,WAAO,KAAK,IAAI,sBAAsB;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,UAA6B;AAC3B,WAAO,KAAK,IAAI,QAAQ;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,YAAiC;AAC/B,WAAO,KAAK,IAAI,UAAU;AAAA,EAC5B;AACF;;;ACnGA,SAAS,KAAAC,WAAS;;;ACAlB,SAAS,KAAAC,WAAS;AAEX,IAAM,kBAAkBA,IAAE,YAAY;AAAA,EAC3C,QAAQA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,OAAOA,IAAE,OAAO,EAAE,SAAS;AAC7B,CAAC;AAEM,IAAM,4BAA4BA,IAAE,YAAY;AAAA,EACrD,IAAIA,IAAE,OAAO;AAAA,EACb,MAAMA,IAAE,OAAO;AAAA,EACf,OAAOA,IAAE,OAAO;AAAA,EAChB,eAAeA,IAAE,OAAO;AAAA,EACxB,UAAUA,IAAE,YAAY;AAAA,IACtB,SAASA,IAAE,OAAO;AAAA,IAClB,SAASA,IAAE,OAAO;AAAA,EACpB,CAAC;AAAA,EACD,QAAQA,IACL,YAAY;AAAA,IACX,SAASA,IAAE,OAAO;AAAA,IAClB,WAAWA,IAAE,OAAO;AAAA,EACtB,CAAC,EACA,SAAS;AACd,CAAC;AAEM,IAAM,6BAA6BA,IAAE,YAAY;AAAA,EACtD,QAAQ,gBAAgB,SAAS;AAAA,EACjC,gBAAgBA,IAAE,MAAM,yBAAyB;AACnD,CAAC;AAEM,IAAM,2BAA2BA,IAAE,YAAY;AAAA,EACpD,IAAIA,IAAE,OAAO;AAAA,EACb,MAAMA,IAAE,OAAO;AAAA,EACf,OAAOA,IAAE,OAAO;AAAA,EAChB,eAAeA,IAAE,OAAO;AAAA,EACxB,UAAUA,IAAE,YAAY;AAAA,IACtB,SAASA,IAAE,OAAO;AAAA,IAClB,SAASA,IAAE,OAAO;AAAA,EACpB,CAAC;AAAA,EACD,QAAQA,IACL,YAAY;AAAA,IACX,SAASA,IAAE,OAAO;AAAA,IAClB,WAAWA,IAAE,OAAO;AAAA,EACtB,CAAC,EACA,SAAS;AAAA,EACZ,SAASA,IAAE,YAAY;AAAA,IACrB,aAAaA,IAAE,OAAO;AAAA,IACtB,QAAQA,IAAE,OAAO;AAAA,IACjB,SAASA,IAAE,OAAO;AAAA,IAClB,SAASA,IAAE,OAAO;AAAA,IAClB,SAASA,IAAE,YAAY;AAAA,MACrB,WAAWA,IAAE,YAAY;AAAA,QACvB,IAAIA,IAAE,OAAO;AAAA,QACb,MAAMA,IAAE,OAAO;AAAA,MACjB,CAAC;AAAA,MACD,aAAaA,IAAE,YAAY;AAAA,QACzB,IAAIA,IAAE,OAAO;AAAA,QACb,MAAMA,IAAE,OAAO;AAAA,MACjB,CAAC;AAAA,IACH,CAAC;AAAA,EACH,CAAC;AAAA,EACD,eAAeA,IAAE,YAAY;AAAA,IAC3B,SAASA,IAAE,OAAO;AAAA,IAClB,YAAYA,IAAE,OAAOA,IAAE,OAAO,GAAGA,IAAE,QAAQ,CAAC;AAAA,IAC5C,QAAQA,IAAE,OAAO;AAAA,EACnB,CAAC;AAAA,EACD,cAAcA,IAAE,YAAY;AAAA,IAC1B,4BAA4BA,IAAE,OAAO;AAAA,IACrC,yBAAyBA,IAAE,OAAO,EAAE,SAAS;AAAA,IAC7C,uBAAuBA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC7C,CAAC;AAAA,EACD,uBAAuBA,IAAE,YAAY;AAAA,IACnC,eAAeA,IAAE,QAAQ;AAAA,IACzB,qBAAqBA,IAAE;AAAA,MACrBA,IAAE,YAAY;AAAA,QACZ,IAAIA,IAAE,OAAO;AAAA,QACb,MAAMA,IAAE,OAAO;AAAA,MACjB,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AACH,CAAC;AAEM,IAAM,sCAAsCA,IAAE,YAAY;AAAA,EAC/D,QAAQ,gBAAgB,SAAS;AAAA,EACjC,gBAAgBA,IAAE,MAAM,yBAAyB;AACnD,CAAC;AAEM,IAAM,kCAAkCA,IAAE,YAAY;AAAA,EAC3D,QAAQA,IAAE,OAAO;AAAA,EACjB,cAAcA,IAAE,OAAO;AAAA,EACvB,QAAQA,IAAE,OAAO;AAAA,EACjB,eAAeA,IAAE,OAAO;AAAA,EACxB,mBAAmBA,IAAE,OAAO,EAAE,SAAS;AACzC,CAAC;AAEM,IAAM,wCAAwCA,IAAE,YAAY;AAAA,EACjE,QAAQ,gBAAgB,SAAS;AAAA,EACjC,gBAAgBA,IAAE,MAAM,yBAAyB;AACnD,CAAC;AAEM,IAAM,gCAAgCA,IAAE,YAAY;AAAA,EACzD,cAAcA,IAAE,OAAO;AAAA,EACvB,gBAAgBA,IAAE,OAAO;AAAA,EACzB,QAAQA,IAAE,OAAO;AAAA,EACjB,eAAeA,IAAE,OAAO;AAAA,EACxB,mBAAmBA,IAAE,OAAO,EAAE,SAAS;AACzC,CAAC;;;AD9FM,IAAM,yBAAyB;AAAA,EACpC,kBAAkB;AAAA,IAChB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,aAAa,EAAE,QAAQ,UAAU,OAAO,QAAQ;AAAA,IAChD,gBAAgB;AAAA,EAClB;AAAA,EACA,qBAAqB;AAAA,IACnB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,OAAO;AAAA,IACpB,gBAAgB;AAAA,EAClB;AAAA,EACA,2BAA2B;AAAA,IACzB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,aAAa,EAAE,QAAQ,UAAU,OAAO,QAAQ;AAAA,IAChD,gBAAgB;AAAA,EAClB;AAAA,EACA,uCAAuC;AAAA,IACrC,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,eAAe,OAAO;AAAA,IACnC,gBAAgB;AAAA,EAClB;AAAA,EACA,6BAA6B;AAAA,IAC3B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,eAAe;AAAA,IAC5B,aAAa,EAAE,QAAQ,UAAU,OAAO,QAAQ;AAAA,IAChD,gBAAgB;AAAA,EAClB;AAAA,EACA,wCAAwC;AAAA,IACtC,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,iBAAiB,OAAO;AAAA,IACrC,gBAAgBC,IAAE,MAAM,6BAA6B;AAAA,EACvD;AACF;;;AE5CO,IAAM,sBAAN,cAAkC,cAEvC;AAAA,EACA,YAAY,QAAmB;AAC7B,UAAM,QAAQ,sBAAsB;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,iBACE,QACA,OAC+B;AAC/B,WAAO,KAAK,IAAI;AAAA,MACd;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,oBAAoB,OAA4C;AAC9D,WAAO,KAAK,IAAI,oBAAoB,KAAK;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,0BACE,aACA,QACA,OACwC;AACxC,WAAO,KAAK,IAAI;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,sCACE,aACA,OACoC;AACpC,WAAO,KAAK,IAAI;AAAA,MACd;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,4BACE,eACA,QACA,OAC0C;AAC1C,WAAO,KAAK,IAAI;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,uCACE,eACA,OACoC;AACpC,WAAO,KAAK,IAAI;AAAA,MACd;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;;;AC3HA,SAAS,KAAAC,WAAS;;;ACAlB,SAAS,KAAAC,WAAS;AAGX,IAAMC,wBAAuBC,IAAE,YAAY;AAAA,EAChD,cAAcA,IAAE,OAAO;AAAA,EACvB,WAAWA,IAAE,OAAO;AAAA,EACpB,gBAAgBA,IAAE,OAAO;AAAA,EACzB,aAAaA,IAAE,OAAO,EAAE,SAAS;AAAA,EACjC,QAAQA,IAAE,QAAQ;AAAA,EAClB,oBAAoBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACxC,oBAAoBA,IAAE,MAAMA,IAAE,OAAO,CAAC,EAAE,SAAS;AACnD,CAAC;AAEM,IAAM,uBAAuBA,IAAE,YAAY;AAAA,EAChD,cAAcA,IAAE,OAAO;AAAA,EACvB,WAAWA,IAAE,OAAO;AAAA,EACpB,gBAAgBA,IAAE,OAAO;AAAA,EACzB,aAAaA,IAAE,OAAO,EAAE,SAAS;AAAA,EACjC,QAAQA,IAAE,QAAQ;AAAA,EAClB,uBAAuBA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC3C,oBAAoBA,IAAE,OAAO,EAAE,SAAS;AAC1C,CAAC;AAEM,IAAM,wBAAwBA,IAAE,YAAY;AAAA,EACjD,cAAcA,IAAE,OAAO;AAAA,EACvB,WAAWA,IAAE,OAAO;AAAA,EACpB,gBAAgBA,IAAE,OAAO;AAAA,EACzB,aAAaA,IAAE,OAAO,EAAE,SAAS;AAAA,EACjC,aAAaA,IAAE,OAAO,EAAE,SAAS;AAAA,EACjC,aAAaA,IAAE,QAAQ;AACzB,CAAC;AAEM,IAAM,6BAA6BA,IAAE,YAAY;AAAA,EACtD,SAASA,IAAE,OAAO;AAAA,EAClB,eAAeA,IAAE,OAAO;AAAA,EACxB,iBAAiBA,IAAE,OAAO;AAAA,EAC1B,YAAYA,IAAE,OAAO;AACvB,CAAC;AAEM,IAAM,wCAAwCA,IAAE,YAAY;AAAA,EACjE,KAAKA,IAAE,OAAO;AAChB,CAAC;AAEM,IAAM,wCAAwCA,IAAE,YAAY;AAAA,EACjE,OAAOA,IAAE,OAAO;AAAA,EAChB,KAAKA,IAAE,OAAO;AAChB,CAAC;AAEM,IAAM,sBAAsBA,IAAE,YAAY;AAAA,EAC/C,IAAIA,IAAE,OAAO;AAAA,EACb,WAAWA,IAAE,OAAO;AAAA,EACpB,OAAO,QAAQ;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAAA,EACD,WAAWA,IAAE,QAAQ;AAAA,EACrB,qBAAqBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACzC,UAAUA,IAAE,MAAM,0BAA0B,EAAE,SAAS;AAAA,EACvD,qBAAqB,sCAAsC,SAAS;AAAA,EACpE,qBAAqB,sCAAsC,SAAS;AACtE,CAAC;AAEM,IAAM,oCAAoCA,IAAE,YAAY;AAAA,EAC7D,SAASA,IAAE,OAAO;AAAA,EAClB,QAAQA,IAAE,OAAO;AAAA,EACjB,kBAAkBA,IAAE,OAAO,EAAE,SAAS;AACxC,CAAC;AAEM,IAAM,uCAAuCA,IAAE,YAAY;AAAA,EAChE,cAAcA,IAAE,OAAO;AAAA,EACvB,UAAUA,IAAE,MAAM,iCAAiC;AACrD,CAAC;AAEM,IAAM,qCAAqCA,IAAE,YAAY;AAAA,EAC9D,WAAWA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,MAAMA,IAAE,OAAO,EAAE,SAAS;AAC5B,CAAC;AAEM,IAAM,sCAAsCA,IAAE,YAAY;AAAA,EAC/D,OAAO;AAAA,EACP,WAAW;AACb,CAAC;AAEM,IAAM,oCAAoCA,IAAE,YAAY;AAAA,EAC7D,SAASA,IAAE,OAAO;AAAA,EAClB,aAAa,QAAQ,CAAC,eAAe,UAAU,WAAW,OAAO,SAAS,CAAC;AAC7E,CAAC;AAEM,IAAM,gDAAgDA,IAAE,YAAY;AAAA,EACzE,OAAOA,IAAE,OAAO;AAAA,EAChB,KAAKA,IAAE,OAAO;AAChB,CAAC;AAEM,IAAM,sCAAsCA,IAAE,YAAY,CAAC,CAAC;AAE5D,IAAM,6BAA6BA,IAAE,YAAY;AAAA,EACtD,IAAIA,IAAE,OAAO;AAAA,EACb,iBAAiBA,IAAE,OAAO;AAAA,EAC1B,UAAUA,IAAE,MAAM,iCAAiC;AAAA,EACnD,aAAa;AAAA,EACb,WAAW;AAAA,EACX,qBAAqB;AAAA,EACrB,qBAAqBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACzC,sBACE,8CAA8C,SAAS;AAC3D,CAAC;;;ADnGM,IAAM,mBAAmB;AAAA,EAC9B,oBAAoB;AAAA,IAClB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,eAAe;AAAA,IAC5B,gBAAgBC,IAAE,MAAMC,qBAAoB;AAAA,EAC9C;AAAA,EACA,oBAAoB;AAAA,IAClB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,eAAe;AAAA,IAC5B,gBAAgBD,IAAE,MAAM,oBAAoB;AAAA,EAC9C;AAAA,EACA,qBAAqB;AAAA,IACnB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,gBAAgBA,IAAE,MAAM,qBAAqB;AAAA,EAC/C;AAAA,EACA,kBAAkB;AAAA,IAChB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,iBAAiB,WAAW;AAAA,IACzC,gBAAgB;AAAA,EAClB;AAAA,EACA,yBAAyB;AAAA,IACvB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,iBAAiB,kBAAkB;AAAA,IAChD,gBAAgB;AAAA,EAClB;AACF;;;AElCO,IAAM,iBAAN,cAA6B,cAAuC;AAAA,EACzE,YAAY,QAAmB;AAC7B,UAAM,QAAQ,gBAAgB;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,mBAAmB,eAAkD;AACnE,WAAO,KAAK,IAAI,mBAAmB,aAAa;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,mBAAmB,eAAkD;AACnE,WAAO,KAAK,IAAI,mBAAmB,aAAa;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,sBAAkD;AAChD,WAAO,KAAK,IAAI,oBAAoB;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,iBACE,eACA,WACwB;AACxB,WAAO,KAAK,IAAI,iBAAiB,eAAe,SAAS;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,wBACE,eACA,kBAC+B;AAC/B,WAAO,KAAK,IAAI,wBAAwB,eAAe,gBAAgB;AAAA,EACzE;AACF;;;AC5EA,SAAS,KAAAE,WAAS;;;ACAlB,SAAS,KAAAC,WAAS;AAGX,IAAM,qBAAqBC,IAAE,YAAY;AAAA,EAC9C,QAAQA,IAAE,OAAO;AAAA,EACjB,WAAWA,IAAE,OAAO;AAAA,EACpB,kBAAkBA,IAAE,OAAO;AAAA,EAC3B,WAAWA,IAAE,OAAO;AAAA,EACpB,mBAAmBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACvC,eAAeA,IAAE,OAAO,EAAE,SAAS;AAAA,EACnC,mBAAmBA,IAAE,OAAO,EAAE,SAAS;AACzC,CAAC;AAEM,IAAM,mCAAmCA,IAAE,YAAY;AAAA,EAC5D,cAAcA,IAAE,OAAO;AAAA,EACvB,QAAQA,IAAE,OAAO;AAAA,EACjB,WAAWA,IAAE,OAAO;AAAA,EACpB,WAAWA,IAAE,OAAO;AAAA,EACpB,QAAQ,QAAQ,CAAC,YAAY,UAAU,aAAa,SAAS,CAAC;AAAA,EAC9D,YAAYA,IAAE,OAAO,EAAE,SAAS;AAAA,EAChC,YAAYA,IAAE,OAAO,EAAE,SAAS;AAClC,CAAC;AAED,IAAM,yCAAyCA,IAAE,YAAY;AAAA,EAC3D,OAAOA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,UAAUA,IAAE,OAAO,EAAE,SAAS;AAChC,CAAC;AAEM,IAAM,oCAAoCA,IAAE,YAAY;AAAA,EAC7D,aAAa;AAAA,EACb,SAAS;AACX,CAAC;AAEM,IAAM,qCAAqCA,IAAE,YAAY;AAAA,EAC9D,QAAQA,IAAE,OAAO;AACnB,CAAC;AAEM,IAAM,6CAA6CA,IAAE,YAAY;AAAA,EACtE,KAAKA,IAAE,OAAO;AAChB,CAAC;AAEM,IAAM,kCAAkCA,IAAE,YAAY;AAAA,EAC3D,IAAIA,IAAE,OAAO;AAAA,EACb,WAAWA,IAAE,OAAO;AAAA,EACpB,gBAAgBA,IAAE,OAAO;AAC3B,CAAC;AAEM,IAAM,2BAA2BA,IAAE,YAAY;AAAA,EACpD,IAAIA,IAAE,OAAO;AAAA,EACb,SAASA,IAAE,OAAO;AAAA,EAClB,OAAO,QAAQ,CAAC,eAAe,WAAW,UAAU,UAAU,CAAC;AAAA,EAC/D,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,qBAAqB,2CAA2C,SAAS;AAC3E,CAAC;AAEM,IAAM,yCAAyCA,IAAE,YAAY;AAAA,EAClE,IAAIA,IAAE,OAAO;AAAA,EACb,kBAAkBA,IAAE,OAAO;AAAA,EAC3B,OAAO,QAAQ;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAAA,EACD,iBAAiBA,IAAE,OAAO;AAAA,EAC1B,SAASA,IAAE,OAAO;AACpB,CAAC;;;AD7DM,IAAM,qBAAqB;AAAA,EAChC,kBAAkB;AAAA,IAChB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,gBAAgBC,IAAE,MAAM,kBAAkB;AAAA,EAC5C;AAAA,EACA,gCAAgC;AAAA,IAC9B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,gBAAgBA,IAAE,MAAM,gCAAgC;AAAA,EAC1D;AAAA,EACA,uBAAuB;AAAA,IACrB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,eAAe,gBAAgB;AAAA,IAC5C,gBAAgB;AAAA,EAClB;AAAA,EACA,qCAAqC;AAAA,IACnC,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,eAAe,aAAa;AAAA,IACzC,gBAAgB;AAAA,EAClB;AACF;;;AE5BO,IAAM,kBAAN,cAA8B,cAAyC;AAAA,EAC5E,YAAY,QAAmB;AAC7B,UAAM,QAAQ,kBAAkB;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,iBAAiB,aAA8C;AAC7D,WAAO,KAAK,IAAI,iBAAiB,WAAW;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,+BACE,aACuC;AACvC,WAAO,KAAK,IAAI,+BAA+B,WAAW;AAAA,EAC5D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,sBACE,aACA,gBAC6B;AAC7B,WAAO,KAAK,IAAI,sBAAsB,aAAa,cAAc;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,oCACE,aACA,aAC2C;AAC3C,WAAO,KAAK,IAAI;AAAA,MACd;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;;;ACvEA,SAAS,KAAAC,WAAS;;;ACAlB,SAAS,KAAAC,WAAS;AAGX,IAAM,wBAAwBC,IAAE,YAAY;AAAA,EACjD,WAAWA,IAAE,OAAO;AAAA,EACpB,aAAa,QAAQ,CAAC,aAAa,eAAe,UAAU,CAAC;AAAA,EAC7D,aAAa,QAAQ,CAAC,WAAW,SAAS,CAAC;AAC7C,CAAC;AAEM,IAAM,mBAAmBA,IAAE,YAAY;AAAA,EAC5C,gBAAgBA,IAAE,OAAO;AAAA,EACzB,MAAMA,IAAE,OAAO;AAAA,EACf,SAASA,IAAE,MAAM,qBAAqB;AACxC,CAAC;;;ADTM,IAAM,sBAAsB;AAAA,EACjC,eAAe;AAAA,IACb,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,eAAe,cAAc;AAAA,IAC1C,gBAAgB;AAAA,EAClB;AAAA,EACA,yBAAyB;AAAA,IACvB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,gBAAgBC,IAAE,MAAM,gBAAgB;AAAA,EAC1C;AACF;;;AEdO,IAAM,oBAAN,cAAgC,cAErC;AAAA,EACA,YAAY,QAAmB;AAC7B,UAAM,QAAQ,mBAAmB;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,cACE,aACA,cACqB;AACrB,WAAO,KAAK,IAAI,cAAc,aAAa,YAAY;AAAA,EACzD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,wBAAwB,aAA4C;AAClE,WAAO,KAAK,IAAI,wBAAwB,WAAW;AAAA,EACrD;AACF;;;ACrCA,SAAS,KAAAC,WAAS;AAGX,IAAM,qBAAqBC,IAAE,YAAY;AAAA,EAC9C,UAAUA,IAAE,OAAO;AAAA,EACnB,WAAWA,IAAE,QAAQ;AAAA,EACrB,aAAaA,IAAE,OAAO;AACxB,CAAC;AAEM,IAAM,uBAAuBA,IAAE,YAAY;AAAA,EAChD,UAAUA,IAAE,MAAM,kBAAkB;AACtC,CAAC;AAEM,IAAM,2BAA2BA,IAAE,YAAY;AAAA,EACpD,WAAWA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,WAAWA,IAAE,QAAQ,EAAE,SAAS;AAClC,CAAC;AAEM,IAAM,8BAA8BA,IAAE,YAAY;AAAA,EACvD,cAAcA,IAAE,OAAO;AAAA,EACvB,MAAM,QAAQ,CAAC,eAAe,SAAS,CAAC;AAAA,EACxC,MAAM;AACR,CAAC;AAEM,IAAM,iCAAiCA,IAAE,YAAY;AAAA,EAC1D,UAAUA,IAAE,MAAM,2BAA2B;AAC/C,CAAC;AAEM,IAAM,kBAAkBA,IAAE,YAAY;AAAA,EAC3C,OAAOA,IAAE,OAAO;AAClB,CAAC;AAEM,IAAM,wBAAwBA,IAAE,YAAY,CAAC,CAAC;AAE9C,IAAM,oBAAoBA,IAAE,YAAY;AAAA,EAC7C,OAAOA,IAAE,MAAM,qBAAqB;AAAA,EACpC,oBAAoB,QAAQ;AAAA,IAC1B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACH,CAAC;AAEM,IAAM,cAAcA,IAAE,YAAY;AAAA,EACvC,IAAIA,IAAE,OAAO;AAAA,EACb,MAAMA,IAAE,OAAO;AAAA,EACf,YAAYA,IAAE,OAAO;AAAA,EACrB,cAAcA,IAAE,OAAO;AAAA,EACvB,MAAMA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,MAAM;AAAA,EACN,QAAQ;AACV,CAAC;;;AC9CM,IAAM,qBAAqB;AAAA,EAChC,mBAAmB;AAAA,IACjB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,gBAAgB;AAAA,EAClB;AAAA,EACA,6BAA6B;AAAA,IAC3B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,gBAAgB;AAAA,EAClB;AAAA,EACA,UAAU;AAAA,IACR,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,SAAS;AAAA,IACtB,gBAAgB;AAAA,EAClB;AACF;;;ACpBO,IAAM,kBAAN,cAA8B,cAAyC;AAAA,EAC5E,YAAY,QAAmB;AAC7B,UAAM,QAAQ,kBAAkB;AAAA,EAClC;AAAA,EAEA,kBAAkB,aAA8C;AAC9D,WAAO,KAAK,IAAI,kBAAkB,WAAW;AAAA,EAC/C;AAAA,EAEA,4BACE,aACmC;AACnC,WAAO,KAAK,IAAI,4BAA4B,WAAW;AAAA,EACzD;AAAA,EAEA,SAAS,SAAiC;AACxC,WAAO,KAAK,IAAI,SAAS,OAAO;AAAA,EAClC;AACF;;;AC3BA,SAAS,KAAAC,WAAS;AAGX,IAAM,yBAAyBC,IAAE,YAAY;AAAA,EAClD,OAAOA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,QAAQA,IAAE,OAAO,EAAE,SAAS;AAC9B,CAAC;AAEM,IAAM,6BAA6BA,IAAE,YAAY;AAAA,EACtD,KAAKA,IAAE,OAAO,EAAE,SAAS;AAAA,EACzB,MAAMA,IAAE,OAAO,EAAE,SAAS;AAC5B,CAAC;AAEM,IAAM,+BAA+BA,IAAE,YAAY;AAAA,EACxD,IAAIA,IAAE,OAAO;AAAA,EACb,OAAO,QAAQ,CAAC,UAAU,YAAY,WAAW,SAAS,CAAC;AAAA,EAC3D,eAAeA,IAAE,OAAO;AAAA,EACxB,WAAWA,IAAE,OAAO;AAAA,EACpB,UAAUA,IAAE,OAAO;AAAA,EACnB,SAASA,IAAE,OAAO;AAAA,EAClB,SAASA,IAAE,OAAO;AAAA,EAClB,UAAUA,IAAE,OAAO;AAAA,EACnB,OAAO;AACT,CAAC;AAEM,IAAM,8BAA8BA,IAAE,YAAY;AAAA,EACvD,cAAcA,IAAE,OAAO,EAAE,SAAS;AAAA,EAClC,gBAAgBA,IAAE,OAAO,EAAE,SAAS;AAAA,EACpC,aAAaA,IAAE,OAAO,EAAE,SAAS;AAAA,EACjC,QAAQA,IAAE,QAAQ,EAAE,SAAS;AAC/B,CAAC;AAEM,IAAM,mCAAmCA,IAAE,YAAY;AAAA,EAC5D,IAAIA,IAAE,OAAO;AAAA,EACb,OAAO,QAAQ,CAAC,UAAU,YAAY,WAAW,SAAS,CAAC;AAAA,EAC3D,eAAeA,IAAE,OAAO;AAAA,EACxB,WAAWA,IAAE,OAAO;AAAA,EACpB,UAAUA,IAAE,OAAO;AAAA,EACnB,SAASA,IAAE,OAAO;AAAA,EAClB,SAASA,IAAE,OAAO;AAAA,EAClB,UAAUA,IAAE,OAAO;AAAA,EACnB,OAAO;AAAA,EACP,QAAQ;AACV,CAAC;AAEM,IAAM,gCAAgCA,IAAE,YAAY;AAAA,EACzD,QAAQ,uBAAuB,SAAS;AAAA,EACxC,UAAUA,IAAE,MAAM,4BAA4B;AAChD,CAAC;AAEM,IAAM,yCAAyCA,IAAE,YAAY;AAAA,EAClE,QAAQ,uBAAuB,SAAS;AAAA,EACxC,UAAUA,IAAE,MAAM,gCAAgC;AACpD,CAAC;;;AC/CM,IAAM,sBAAsB;AAAA,EACjC,mBAAmB;AAAA,IACjB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,aAAa,EAAE,OAAO,SAAS,QAAQ,UAAU,OAAO,QAAQ;AAAA,IAChE,gBAAgB;AAAA,EAClB;AAAA,EACA,sBAAsB;AAAA,IACpB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,aAAa,EAAE,OAAO,SAAS,QAAQ,UAAU,OAAO,QAAQ;AAAA,IAChE,gBAAgB;AAAA,EAClB;AAAA,EACA,qBAAqB;AAAA,IACnB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,YAAY;AAAA,IACzB,aAAa,EAAE,OAAO,SAAS,QAAQ,UAAU,OAAO,QAAQ;AAAA,IAChE,gBAAgB;AAAA,EAClB;AAAA,EACA,8BAA8B;AAAA,IAC5B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,aAAa,EAAE,OAAO,SAAS,QAAQ,UAAU,OAAO,QAAQ;AAAA,IAChE,gBAAgB;AAAA,EAClB;AAAA,EACA,wBAAwB;AAAA,IACtB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,eAAe;AAAA,IAC5B,aAAa,EAAE,OAAO,SAAS,QAAQ,UAAU,OAAO,QAAQ;AAAA,IAChE,gBAAgB;AAAA,EAClB;AACF;;;ACtCO,IAAM,mBAAN,cAA+B,cAEpC;AAAA,EACA,YAAY,QAAmB;AAC7B,UAAM,QAAQ,mBAAmB;AAAA,EACnC;AAAA,EAEA,kBACE,OACA,QACA,OACkC;AAClC,WAAO,KAAK,IAAI,kBAAkB,OAAO,QAAQ,KAAK;AAAA,EACxD;AAAA,EAEA,qBACE,aACA,OACA,QACA,OAC2C;AAC3C,WAAO,KAAK,IAAI,qBAAqB,aAAa,OAAO,QAAQ,KAAK;AAAA,EACxE;AAAA,EAEA,oBACE,YACA,OACA,QACA,OACkC;AAClC,WAAO,KAAK,IAAI,oBAAoB,YAAY,OAAO,QAAQ,KAAK;AAAA,EACtE;AAAA,EAEA,6BACE,aACA,OACA,QACA,OACkC;AAClC,WAAO,KAAK,IAAI;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,uBACE,eACA,OACA,QACA,OACkC;AAClC,WAAO,KAAK,IAAI,uBAAuB,eAAe,OAAO,QAAQ,KAAK;AAAA,EAC5E;AACF;;;AC/DA,SAAS,KAAAC,WAAS;;;ACAlB,SAAS,KAAAC,WAAS;AAEX,IAAM,yBAAyBA,IAAE,YAAY;AAAA,EAClD,aAAaA,IAAE,OAAO;AAAA,EACtB,OAAOA,IAAE,OAAO;AAAA,EAChB,UAAUA,IAAE,OAAO;AAAA,EACnB,YAAYA,IAAE,OAAO;AAAA,EACrB,aAAaA,IAAE,OAAO,EAAE,SAAS;AACnC,CAAC;AAEM,IAAM,kCAAkCA,IAAE,YAAY;AAAA,EAC3D,cAAcA,IAAE,OAAO;AAAA,EACvB,aAAaA,IAAE,OAAO;AAAA,EACtB,OAAOA,IAAE,OAAO;AAAA,EAChB,UAAUA,IAAE,OAAO;AAAA,EACnB,cAAcA,IAAE,YAAY;AAAA,IAC1B,OAAOA,IAAE,OAAO;AAAA,IAChB,WAAWA,IAAE,OAAO;AAAA,IACpB,cAAcA,IAAE,OAAO;AAAA,EACzB,CAAC;AACH,CAAC;AAEM,IAAM,2CAA2CA,IAAE,YAAY;AAAA,EACpE,cAAcA,IAAE,OAAO;AAAA,EACvB,aAAaA,IAAE,OAAO;AAAA,EACtB,WAAWA,IAAE,QAAQ;AAAA,EACrB,cAAcA,IAAE,OAAO;AACzB,CAAC;;;ADnBM,IAAM,4BAA4B;AAAA,EACvC,sBAAsB;AAAA,IACpB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,gBAAgBC,IAAE,MAAM,sBAAsB;AAAA,EAChD;AAAA,EACA,qBAAqB;AAAA,IACnB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,YAAY;AAAA,IACzB,gBAAgB;AAAA,EAClB;AAAA,EACA,+BAA+B;AAAA,IAC7B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,YAAY;AAAA,IACzB,gBAAgBA,IAAE,MAAM,+BAA+B;AAAA,EACzD;AAAA,EACA,8BAA8B;AAAA,IAC5B,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,cAAc,aAAa;AAAA,IACxC,gBAAgB;AAAA,EAClB;AAAA,EACA,wCAAwC;AAAA,IACtC,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,aAAa;AAAA,IAC1B,gBAAgBA,IAAE,MAAM,wCAAwC;AAAA,EAClE;AAAA,EACA,uCAAuC;AAAA,IACrC,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,CAAC,eAAe,aAAa;AAAA,IACzC,gBAAgB;AAAA,EAClB;AACF;;;AEzCO,IAAM,0BAAN,cAAsC,cAE3C;AAAA,EACA,YAAY,QAAmB;AAC7B,UAAM,QAAQ,yBAAyB;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,uBAAoD;AAClD,WAAO,KAAK,IAAI,qBAAqB;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,oBAAoB,YAA+C;AACjE,WAAO,KAAK,IAAI,oBAAoB,UAAU;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,8BACE,YACsC;AACtC,WAAO,KAAK,IAAI,8BAA8B,UAAU;AAAA,EAC1D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,6BACE,YACA,aACoC;AACpC,WAAO,KAAK,IAAI,6BAA6B,YAAY,WAAW;AAAA,EACtE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,uCACE,aAC+C;AAC/C,WAAO,KAAK,IAAI,uCAAuC,WAAW;AAAA,EACpE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,sCACE,aACA,aAC6C;AAC7C,WAAO,KAAK,IAAI;AAAA,MACd;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;;;ACgCA,IAAM,kBAGF;AAAA,EACF,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,WAAW;AAAA,EACX,cAAc;AAAA,EACd,qBAAqB;AAAA,EACrB,OAAO;AAAA,EACP,UAAU;AAAA,EACV,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,WAAW;AAAA,EACX,WAAW;AAAA,EACX,UAAU;AAAA,EACV,SAAS;AAAA,EACT,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,IAAI;AAAA,EACJ,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,QAAQ;AAAA,EACR,IAAI;AAAA,EACJ,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,MAAM;AAAA,EACN,eAAe;AAAA,EACf,UAAU;AAAA,EACV,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,mBAAmB;AAAA,EACnB,aAAa;AACf;AAEO,SAAS,qBACd,MACA,WACgB;AAEhB,SAAO,IAAI,gBAAgB,IAAI,EAAE,SAAS;AAC5C;AAEA,IAAM,iBAAkC,OAAO;AAAA,EAC7C;AACF;;;AC3JO,IAAM,iBAAN,MAAqB;AAAA,EAC1B,YACU,WACA,kBACA,cACR;AAHQ;AACA;AACA;AAAA,EACP;AAAA,EAHO;AAAA,EACA;AAAA,EACA;AAAA,EAGV,gBAAmC;AACjC,QAAI,CAAC,KAAK,iBAAkB,QAAO;AACnC,UAAM,QAAQ,KAAK,UAAU,SAAS;AACtC,WAAO,QAAS,MAA2B,SAAS,IAAI;AAAA,EAC1D;AAAA,EAEA,aAAmB;AACjB,UAAM,QAAQ,KAAK,UAAU,SAAS;AACtC,QAAI,OAAO;AACT,MAAC,MAA2B,MAAM;AAAA,IACpC;AAAA,EACF;AAAA,EAEA,kBAAkB,WAA2C;AAC3D,UAAM,QAAQ,KAAK,UAAU,SAAS;AACtC,QAAI,OAAO;AACT,MAAC,MAA2B,aAAa,SAAS;AAAA,IACpD;AAAA,EACF;AAAA,EAEA,yBAAqD;AACnD,UAAM,KAAK,KAAK,UAAU,kBAAkB;AAC5C,WAAO,KAAK,GAAG,SAAS,IAAI;AAAA,EAC9B;AAAA,EAEA,oBAAoB,UAAyB;AAC3C,UAAM,KAAK,KAAK,UAAU,kBAAkB;AAC5C,QAAI,IAAI;AACN,SAAG,MAAM,QAAQ;AAAA,IACnB;AAAA,EACF;AAAA,EAEA,uBAA2D;AACzD,WAAO,KAAK,eACR,EAAE,iBAAiB,KAAK,aAAa,QAAQ,IAC7C;AAAA,EACN;AACF;;;ACtDA,eAAsB,WACpB,MACA,SACA,UAAwB,CAAC,GACG;AAC5B,QAAM,cAAc,QAAQ,eAAe;AAC3C,QAAM,UAAU,oBAAI,IAAU;AAC9B,QAAM,SAAS,oBAAI,IAAyB;AAC5C,MAAI,YAAY;AAChB,MAAI,UAAU;AACd,MAAI,QAAQ;AAEZ,UAAQ,gBAAgB,KAAK,MAAM,uBAAuB,WAAW,EAAE;AAEvE,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,aAAS,OAAa;AACpB,aAAO,UAAU,eAAe,QAAQ,KAAK,QAAQ;AACnD,cAAM,eAAe;AACrB,cAAM,MAAM,KAAK,YAAY;AAC7B;AAEA,gBAAQ,GAAG,EACR,KAAK,CAAC,WAAW;AAChB,kBAAQ,IAAI,KAAK,MAAM;AAAA,QACzB,CAAC,EACA,MAAM,CAAC,QAAiB;AACvB,gBAAM,QACJ,eAAe,YAAY,eAAe,QACtC,MACA,IAAI,MAAM,OAAO,GAAG,CAAC;AAC3B,iBAAO,IAAI,KAAK,KAAK;AAAA,QACvB,CAAC,EACA,QAAQ,MAAM;AACb;AACA;AACA,cAAI,QAAQ,YAAY;AACtB,oBAAQ,WAAW,WAAW,KAAK,MAAM;AAAA,UAC3C;AACA,cAAI,cAAc,KAAK,QAAQ;AAC7B;AAAA,cACE,mBAAmB,QAAQ,IAAI,eAAe,OAAO,IAAI;AAAA,YAC3D;AACA,oBAAQ,EAAE,SAAS,OAAO,CAAC;AAAA,UAC7B,OAAO;AACL,iBAAK;AAAA,UACP;AAAA,QACF,CAAC;AAAA,MACL;AAAA,IACF;AAEA,QAAI,KAAK,WAAW,GAAG;AACrB,cAAQ,EAAE,SAAS,OAAO,CAAC;AAC3B;AAAA,IACF;AAEA,SAAK;AAAA,EACP,CAAC;AACH;AAEA,eAAsB,UACpB,KACA,QACA,YAAoB,KACN;AACd,QAAM,SAAqB,CAAC;AAC5B,WAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK,WAAW;AAC9C,WAAO,KAAK,IAAI,MAAM,GAAG,IAAI,SAAS,CAAC;AAAA,EACzC;AAEA;AAAA,IACE,eAAe,IAAI,MAAM,WAAW,OAAO,MAAM,cAAc,SAAS;AAAA,EAC1E;AAEA,QAAM,UAAe,CAAC;AACtB,aAAW,SAAS,QAAQ;AAC1B,UAAM,cAAc,MAAM,OAAO,KAAK;AACtC,YAAQ,KAAK,GAAG,WAAW;AAAA,EAC7B;AAEA,SAAO;AACT;;;AClFO,IAAM,mBAAN,MAAyC;AAAA,EACtC,QAAiC,oBAAI,IAAI;AAAA,EACzC;AAAA,EACA;AAAA,EACA,OAAe;AAAA,EACf,SAAiB;AAAA,EAEzB,YAAY,SAA0B,CAAC,GAAG;AACxC,SAAK,SAAS;AAAA,MACZ,YAAY,OAAO,cAAc;AAAA,MACjC,YAAY,OAAO,cAAc,IAAI,KAAK;AAAA;AAAA,MAC1C,iBAAiB,OAAO,mBAAmB,KAAK;AAAA;AAAA,IAClD;AAEA,SAAK,kBAAkB;AACvB;AAAA,MACE,uCAAuC,KAAK,OAAO,UAAU;AAAA,IAC/D;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,KAAgC;AAClC,UAAM,QAAQ,KAAK,MAAM,IAAI,GAAG;AAEhC,QAAI,CAAC,OAAO;AACV,WAAK;AACL,aAAO;AAAA,IACT;AAEA,QAAI,KAAK,UAAU,KAAK,GAAG;AACzB,WAAK,MAAM,OAAO,GAAG;AACrB,WAAK;AACL,eAAS,2BAA2B,GAAG,EAAE;AACzC,aAAO;AAAA,IACT;AAEA,SAAK;AACL,aAAS,iBAAiB,GAAG,cAAc,MAAM,IAAI,EAAE;AACvD,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,QAAQ,KAA4B;AAClC,UAAM,QAAQ,KAAK,IAAI,GAAG;AAC1B,WAAO,QAAQ,MAAM,OAAO;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKA,IACE,KACA,MACA,MACA,SACA,WACM;AAEN,QAAI,KAAK,MAAM,QAAQ,KAAK,OAAO,YAAY;AAC7C,WAAK,YAAY;AAAA,IACnB;AAEA,UAAM,QAAoB;AAAA,MACxB;AAAA,MACA;AAAA,MACA;AAAA,MACA,WAAW,KAAK,IAAI;AAAA,MACpB,KAAK,aAAa,KAAK,OAAO;AAAA,IAChC;AAEA,SAAK,MAAM,IAAI,KAAK,KAAK;AACzB,aAAS,uBAAuB,GAAG,cAAc,IAAI,EAAE;AAAA,EACzD;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,KAAsB;AACxB,UAAM,QAAQ,KAAK,MAAM,IAAI,GAAG;AAChC,WAAO,UAAU,UAAa,CAAC,KAAK,UAAU,KAAK;AAAA,EACrD;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,KAAsB;AAC3B,WAAO,KAAK,MAAM,OAAO,GAAG;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKA,aAAa,aAA6B;AACxC,QAAI,QAAQ;AACZ,eAAW,OAAO,KAAK,MAAM,KAAK,GAAG;AACnC,UAAI,IAAI,SAAS,WAAW,GAAG;AAC7B,aAAK,MAAM,OAAO,GAAG;AACrB;AAAA,MACF;AAAA,IACF;AACA,QAAI,QAAQ,GAAG;AACb,eAAS,eAAe,KAAK,2BAA2B,WAAW,EAAE;AAAA,IACvE;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,QAAc;AACZ,SAAK,MAAM,MAAM;AACjB,SAAK,OAAO;AACZ,SAAK,SAAS;AACd,YAAQ,oBAAoB;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKA,WAQE;AACA,QAAI,SAAS;AACb,QAAI,SAAS;AACb,eAAW,SAAS,KAAK,MAAM,OAAO,GAAG;AACvC,UAAI,MAAM,YAAY,OAAQ,UAAS,MAAM;AAC7C,UAAI,MAAM,YAAY,OAAQ,UAAS,MAAM;AAAA,IAC/C;AACA,UAAM,QAAQ,KAAK,OAAO,KAAK;AAE/B,WAAO;AAAA,MACL,cAAc,KAAK,MAAM;AAAA,MACzB,YAAY,KAAK,OAAO;AAAA,MACxB,MAAM,KAAK;AAAA,MACX,QAAQ,KAAK;AAAA,MACb,SAAS,QAAQ,IAAI,KAAK,OAAO,QAAQ;AAAA,MACzC,aAAa,KAAK,MAAM,OAAO,IAAI,SAAS;AAAA,MAC5C,aAAa,KAAK,MAAM,OAAO,IAAI,SAAS;AAAA,IAC9C;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,aAAa,WAA2C;AACtD,SAAK,SAAS,EAAE,GAAG,KAAK,QAAQ,GAAG,UAAU;AAC7C,YAAQ,kCAAkC;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA,EAKA,UAAkB;AAChB,UAAM,aAAa,KAAK,MAAM;AAE9B,eAAW,CAAC,KAAK,KAAK,KAAK,KAAK,MAAM,QAAQ,GAAG;AAC/C,UAAI,KAAK,UAAU,KAAK,GAAG;AACzB,aAAK,MAAM,OAAO,GAAG;AAAA,MACvB;AAAA,IACF;AAEA,UAAM,eAAe,aAAa,KAAK,MAAM;AAC7C,QAAI,eAAe,GAAG;AACpB,eAAS,cAAc,YAAY,wBAAwB;AAAA,IAC7D;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,WAAiB;AACf,QAAI,KAAK,cAAc;AACrB,oBAAc,KAAK,YAAY;AAAA,IACjC;AACA,YAAQ,8BAA8B;AAAA,EACxC;AAAA,EAEQ,UAAU,OAA4B;AAC5C,QAAI,CAAC,MAAM,IAAK,QAAO;AACvB,WAAO,KAAK,IAAI,IAAI,MAAM,YAAY,MAAM;AAAA,EAC9C;AAAA,EAEQ,cAAoB;AAC1B,QAAI,YAA2B;AAC/B,QAAI,aAAa;AAEjB,eAAW,CAAC,KAAK,KAAK,KAAK,KAAK,MAAM,QAAQ,GAAG;AAC/C,UAAI,MAAM,YAAY,YAAY;AAChC,qBAAa,MAAM;AACnB,oBAAY;AAAA,MACd;AAAA,IACF;AAEA,QAAI,WAAW;AACb,WAAK,MAAM,OAAO,SAAS;AAC3B,eAAS,+BAA+B,SAAS,EAAE;AAAA,IACrD;AAAA,EACF;AAAA,EAEQ,oBAA0B;AAChC,SAAK,eAAe,YAAY,MAAM;AACpC,WAAK,QAAQ;AAAA,IACf,GAAG,KAAK,OAAO,eAAe;AAE9B,SAAK,aAAa,MAAM;AAAA,EAC1B;AACF;;;AC5NO,IAAM,qBAAyD;AAAA,EACpE,wCAAwC,EAAE,OAAO,mBAAmB,WAAW,KAAK,cAAc,IAAO;AAAA,EACzG,+CAA+C,EAAE,OAAO,mBAAmB,WAAW,KAAK,cAAc,IAAO;AAAA,EAChH,iDAAiD,EAAE,OAAO,iBAAiB,WAAW,KAAK,cAAc,IAAO;AAAA,EAChH,wCAAwC,EAAE,OAAO,cAAc,WAAW,MAAM,cAAc,IAAO;AAAA,EACrG,mDAAmD,EAAE,OAAO,cAAc,WAAW,MAAM,cAAc,IAAO;AAAA,EAChH,+CAA+C,EAAE,OAAO,cAAc,WAAW,MAAM,cAAc,IAAO;AAAA,EAC5G,4CAA4C,EAAE,OAAO,eAAe,WAAW,KAAK,cAAc,IAAO;AAAA,EACzG,4CAA4C,EAAE,OAAO,iBAAiB,WAAW,KAAK,cAAc,IAAO;AAAA,EAC3G,0CAA0C,EAAE,OAAO,eAAe,WAAW,KAAK,cAAc,IAAO;AAAA,EACvG,qDAAqD,EAAE,OAAO,eAAe,WAAW,KAAK,cAAc,IAAO;AAAA,EAClH,qDAAqD,EAAE,OAAO,eAAe,WAAW,KAAK,cAAc,IAAO;AAAA,EAClH,+DAA+D,EAAE,OAAO,eAAe,WAAW,KAAK,cAAc,IAAO;AAAA,EAC5H,wCAAwC,EAAE,OAAO,iBAAiB,WAAW,MAAM,cAAc,IAAO;AAAA,EACxG,0CAA0C,EAAE,OAAO,eAAe,WAAW,KAAK,cAAc,IAAO;AAAA,EACvG,2CAA2C,EAAE,OAAO,eAAe,WAAW,KAAK,cAAc,IAAO;AAAA,EACxG,0CAA0C,EAAE,OAAO,eAAe,WAAW,KAAK,cAAc,IAAO;AAAA,EACvG,6CAA6C,EAAE,OAAO,eAAe,WAAW,KAAK,cAAc,IAAO;AAAA,EAC1G,iDAAiD,EAAE,OAAO,eAAe,WAAW,KAAK,cAAc,IAAO;AAAA,EAC9G,2CAA2C,EAAE,OAAO,iBAAiB,WAAW,KAAK,cAAc,IAAO;AAAA,EAC1G,8DAA8D,EAAE,OAAO,iBAAiB,WAAW,KAAK,cAAc,IAAO;AAAA,EAC7H,+DAA+D,EAAE,OAAO,iBAAiB,WAAW,KAAK,cAAc,IAAO;AAAA,EAC9H,uCAAuC,EAAE,OAAO,eAAe,WAAW,KAAK,cAAc,IAAO;AAAA,EACpG,yCAAyC,EAAE,OAAO,iBAAiB,WAAW,MAAM,cAAc,IAAO;AAAA,EACzG,0CAA0C,EAAE,OAAO,WAAW,WAAW,KAAK,cAAc,IAAO;AAAA,EACnG,2CAA2C,EAAE,OAAO,WAAW,WAAW,KAAK,cAAc,IAAO;AAAA,EACpG,0DAA0D,EAAE,OAAO,WAAW,WAAW,KAAK,cAAc,IAAO;AAAA,EACnH,uCAAuC,EAAE,OAAO,SAAS,WAAW,MAAM,cAAc,IAAO;AAAA,EAC/F,gDAAgD,EAAE,OAAO,sBAAsB,WAAW,KAAK,cAAc,IAAO;AAAA,EACpH,uEAAuE,EAAE,OAAO,sBAAsB,WAAW,KAAK,cAAc,IAAO;AAAA,EAC3I,0CAA0C,EAAE,OAAO,qBAAqB,WAAW,KAAK,cAAc,IAAO;AAAA,EAC7G,0CAA0C,EAAE,OAAO,eAAe,WAAW,KAAK,cAAc,IAAO;AAAA,EACvG,+CAA+C,EAAE,OAAO,iBAAiB,WAAW,KAAK,cAAc,IAAO;AAAA,EAC9G,kDAAkD,EAAE,OAAO,iBAAiB,WAAW,IAAI,cAAc,IAAO;AAAA,EAChH,0CAA0C,EAAE,OAAO,iBAAiB,WAAW,MAAM,cAAc,IAAO;AAAA,EAC1G,gDAAgD,EAAE,OAAO,eAAe,WAAW,KAAK,cAAc,IAAO;AAAA,EAC7G,sCAAsC,EAAE,OAAO,eAAe,WAAW,KAAK,cAAc,IAAO;AAAA,EACnG,uCAAuC,EAAE,OAAO,eAAe,WAAW,KAAK,cAAc,IAAO;AAAA,EACpG,gDAAgD,EAAE,OAAO,eAAe,WAAW,KAAK,cAAc,IAAO;AAAA,EAC7G,gDAAgD,EAAE,OAAO,eAAe,WAAW,KAAK,cAAc,IAAO;AAAA,EAC7G,mDAAmD,EAAE,OAAO,eAAe,WAAW,KAAK,cAAc,IAAO;AAAA,EAChH,6CAA6C,EAAE,OAAO,eAAe,WAAW,KAAK,cAAc,IAAO;AAAA,EAC1G,8CAA8C,EAAE,OAAO,eAAe,WAAW,KAAK,cAAc,IAAO;AAAA,EAC3G,2DAA2D,EAAE,OAAO,eAAe,WAAW,KAAK,cAAc,IAAO;AAAA,EACxH,4CAA4C,EAAE,OAAO,eAAe,WAAW,KAAK,cAAc,IAAO;AAAA,EACzG,wCAAwC,EAAE,OAAO,eAAe,WAAW,KAAK,cAAc,IAAO;AAAA,EACrG,wCAAwC,EAAE,OAAO,iBAAiB,WAAW,KAAK,cAAc,IAAO;AAAA,EACvG,+CAA+C,EAAE,OAAO,qBAAqB,WAAW,IAAI,cAAc,IAAO;AAAA,EACjH,wDAAwD,EAAE,OAAO,eAAe,WAAW,KAAK,cAAc,IAAO;AAAA,EACrH,wCAAwC,EAAE,OAAO,iBAAiB,WAAW,MAAM,cAAc,IAAO;AAAA,EACxG,yCAAyC,EAAE,OAAO,iBAAiB,WAAW,KAAK,cAAc,IAAO;AAAA,EACxG,qDAAqD,EAAE,OAAO,iBAAiB,WAAW,KAAK,cAAc,IAAO;AAAA,EACpH,0CAA0C,EAAE,OAAO,eAAe,WAAW,KAAK,cAAc,IAAO;AAAA,EACvG,uCAAuC,EAAE,OAAO,eAAe,WAAW,KAAK,cAAc,IAAO;AAAA,EACpG,sCAAsC,EAAE,OAAO,iBAAiB,WAAW,MAAM,cAAc,IAAO;AAAA,EACtG,4CAA4C,EAAE,OAAO,eAAe,WAAW,KAAK,cAAc,IAAO;AAAA,EACzG,wCAAwC,EAAE,OAAO,eAAe,WAAW,KAAK,cAAc,IAAO;AAAA,EACrG,2CAA2C,EAAE,OAAO,eAAe,WAAW,KAAK,cAAc,IAAO;AAAA,EACxG,wCAAwC,EAAE,OAAO,eAAe,WAAW,KAAK,cAAc,IAAO;AAAA,EACrG,wCAAwC,EAAE,OAAO,eAAe,WAAW,KAAK,cAAc,IAAO;AAAA,EACrG,gDAAgD,EAAE,OAAO,eAAe,WAAW,KAAK,cAAc,IAAO;AAAA,EAC7G,qDAAqD,EAAE,OAAO,eAAe,WAAW,KAAK,cAAc,IAAO;AAAA,EAClH,uDAAuD,EAAE,OAAO,iBAAiB,WAAW,KAAK,cAAc,IAAO;AAAA,EACtH,qDAAqD,EAAE,OAAO,iBAAiB,WAAW,KAAK,cAAc,IAAO;AAAA,EACpH,mEAAmE,EAAE,OAAO,iBAAiB,WAAW,KAAK,cAAc,IAAO;AAAA,EAClI,4CAA4C,EAAE,OAAO,cAAc,WAAW,MAAM,cAAc,IAAO;AAAA,EACzG,uDAAuD,EAAE,OAAO,cAAc,WAAW,MAAM,cAAc,IAAO;AAAA,EACpH,mDAAmD,EAAE,OAAO,cAAc,WAAW,MAAM,cAAc,IAAO;AAAA,EAChH,gDAAgD,EAAE,OAAO,iBAAiB,WAAW,KAAK,cAAc,IAAO;AAAA,EAC/G,8CAA8C,EAAE,OAAO,eAAe,WAAW,KAAK,cAAc,IAAO;AAAA,EAC3G,qDAAqD,EAAE,OAAO,eAAe,WAAW,KAAK,cAAc,IAAO;AAAA,EAClH,qDAAqD,EAAE,OAAO,kBAAkB,WAAW,KAAK,cAAc,IAAO;AAAA,EACrH,+CAA+C,EAAE,OAAO,iBAAiB,WAAW,KAAK,cAAc,IAAO;AAAA,EAC9G,kEAAkE,EAAE,OAAO,iBAAiB,WAAW,KAAK,cAAc,IAAO;AAAA,EACjI,mEAAmE,EAAE,OAAO,iBAAiB,WAAW,KAAK,cAAc,IAAO;AAAA,EAClI,qDAAqD,EAAE,OAAO,iBAAiB,WAAW,KAAK,cAAc,IAAO;AAAA,EACpH,+CAA+C,EAAE,OAAO,eAAe,WAAW,KAAK,cAAc,IAAO;AAAA,EAC5G,gDAAgD,EAAE,OAAO,kBAAkB,WAAW,KAAK,cAAc,IAAO;AAAA,EAChH,oDAAoD,EAAE,OAAO,sBAAsB,WAAW,KAAK,cAAc,IAAO;AAAA,EACxH,0EAA0E,EAAE,OAAO,sBAAsB,WAAW,KAAK,cAAc,IAAO;AAAA,EAC9I,8CAA8C,EAAE,OAAO,qBAAqB,WAAW,KAAK,cAAc,IAAO;AAAA,EACjH,mDAAmD,EAAE,OAAO,iBAAiB,WAAW,KAAK,cAAc,IAAO;AAAA,EAClH,sDAAsD,EAAE,OAAO,iBAAiB,WAAW,IAAI,cAAc,IAAO;AAAA,EACpH,4CAA4C,EAAE,OAAO,eAAe,WAAW,KAAK,cAAc,IAAO;AAAA,EACzG,mDAAmD,EAAE,OAAO,eAAe,WAAW,KAAK,cAAc,IAAO;AAAA,EAChH,6CAA6C,EAAE,OAAO,eAAe,WAAW,KAAK,cAAc,IAAO;AAAA,EAC1G,mDAAmD,EAAE,OAAO,eAAe,WAAW,KAAK,cAAc,IAAO;AAAA,EAChH,oDAAoD,EAAE,OAAO,eAAe,WAAW,KAAK,cAAc,IAAO;AAAA,EACjH,oDAAoD,EAAE,OAAO,eAAe,WAAW,KAAK,cAAc,IAAO;AAAA,EACjH,8CAA8C,EAAE,OAAO,gBAAgB,WAAW,KAAK,cAAc,IAAO;AAAA,EAC5G,2DAA2D,EAAE,OAAO,gBAAgB,WAAW,KAAK,cAAc,IAAO;AAAA,EACzH,uFAAuF,EAAE,OAAO,gBAAgB,WAAW,KAAK,cAAc,IAAO;AAAA,EACrJ,wEAAwE,EAAE,OAAO,gBAAgB,WAAW,KAAK,cAAc,IAAO;AAAA,EACtI,2CAA2C,EAAE,OAAO,eAAe,WAAW,KAAK,cAAc,IAAO;AAAA,EACxG,mDAAmD,EAAE,OAAO,eAAe,WAAW,KAAK,cAAc,IAAO;AAAA,EAChH,kDAAkD,EAAE,OAAO,eAAe,WAAW,KAAK,cAAc,IAAO;AAAA,EAC/G,+CAA+C,EAAE,OAAO,eAAe,WAAW,KAAK,cAAc,IAAO;AAAA,EAC5G,+CAA+C,EAAE,OAAO,kBAAkB,WAAW,KAAK,cAAc,IAAO;AAAA,EAC/G,6DAA6D,EAAE,OAAO,kBAAkB,WAAW,KAAK,cAAc,IAAO;AAAA,EAC7H,gDAAgD,EAAE,OAAO,kBAAkB,WAAW,KAAK,cAAc,IAAO;AAAA,EAChH,4CAA4C,EAAE,OAAO,eAAe,WAAW,KAAK,cAAc,IAAO;AAAA,EACzG,6CAA6C,EAAE,OAAO,eAAe,WAAW,KAAK,cAAc,IAAO;AAAA,EAC1G,gEAAgE,EAAE,OAAO,eAAe,WAAW,KAAK,cAAc,IAAO;AAAA,EAC7H,qEAAqE,EAAE,OAAO,eAAe,WAAW,KAAK,cAAc,IAAO;AAAA,EAClI,yBAAyB,EAAE,OAAO,SAAS,WAAW,MAAM,cAAc,IAAO;AAAA,EACjF,yBAAyB,EAAE,OAAO,SAAS,WAAW,MAAM,cAAc,IAAO;AAAA,EACjF,iCAAiC,EAAE,OAAO,SAAS,WAAW,MAAM,cAAc,IAAO;AAAA,EACzF,kCAAkC,EAAE,OAAO,SAAS,WAAW,MAAM,cAAc,IAAO;AAAA,EAC1F,6CAA6C,EAAE,OAAO,SAAS,WAAW,MAAM,cAAc,IAAO;AAAA,EACrG,gDAAgD,EAAE,OAAO,SAAS,WAAW,MAAM,cAAc,IAAO;AAAA,EACxG,2CAA2C,EAAE,OAAO,SAAS,WAAW,MAAM,cAAc,IAAO;AAAA,EACnG,8CAA8C,EAAE,OAAO,SAAS,WAAW,MAAM,cAAc,IAAO;AAAA,EACtG,+BAA+B,EAAE,OAAO,SAAS,WAAW,MAAM,cAAc,IAAO;AAAA,EACvF,gCAAgC,EAAE,OAAO,SAAS,WAAW,MAAM,cAAc,IAAO;AAAA,EACxF,yCAAyC,EAAE,OAAO,SAAS,WAAW,MAAM,cAAc,IAAO;AAAA,EACjG,4CAA4C,EAAE,OAAO,SAAS,WAAW,MAAM,cAAc,IAAO;AAAA,EACpG,iDAAiD,EAAE,OAAO,SAAS,WAAW,MAAM,cAAc,IAAO;AAAA,EACzG,sBAAsB,EAAE,OAAO,iBAAiB,WAAW,MAAO,cAAc,IAAO;AAAA,EACvF,+BAA+B,EAAE,OAAO,iBAAiB,WAAW,MAAO,cAAc,IAAO;AAAA,EAChG,uBAAuB,EAAE,OAAO,qBAAqB,WAAW,KAAK,cAAc,IAAO;AAAA,EAC1F,kCAAkC,EAAE,OAAO,qBAAqB,WAAW,KAAK,cAAc,IAAO;AAAA,EACrG,oCAAoC,EAAE,OAAO,qBAAqB,WAAW,KAAK,cAAc,IAAO;AAAA,EACvG,gBAAgB,EAAE,OAAO,qBAAqB,WAAW,KAAK,cAAc,IAAO;AAAA,EACnF,kBAAkB,EAAE,OAAO,qBAAqB,WAAW,KAAK,cAAc,IAAO;AAAA,EACrF,eAAe,EAAE,OAAO,qBAAqB,WAAW,KAAK,cAAc,IAAO;AAAA,EAClF,kBAAkB,EAAE,OAAO,aAAa,WAAW,KAAK,cAAc,IAAO;AAAA,EAC7E,2BAA2B,EAAE,OAAO,YAAY,WAAW,KAAK,cAAc,IAAO;AAAA,EACrF,wBAAwB,EAAE,OAAO,YAAY,WAAW,KAAK,cAAc,IAAO;AAAA,EAClF,wBAAwB,EAAE,OAAO,aAAa,WAAW,KAAK,cAAc,IAAO;AAAA,EACnF,+CAA+C,EAAE,OAAO,YAAY,WAAW,MAAM,cAAc,IAAO;AAAA,EAC1G,kCAAkC,EAAE,OAAO,gBAAgB,WAAW,MAAO,cAAc,IAAO;AAAA,EAClG,sBAAsB,EAAE,OAAO,QAAQ,WAAW,KAAK,cAAc,IAAO;AAAA,EAC5E,gCAAgC,EAAE,OAAO,QAAQ,WAAW,KAAK,cAAc,IAAO;AAAA,EACtF,mBAAmB,EAAE,OAAO,QAAQ,WAAW,KAAK,cAAc,IAAO;AAAA,EACzE,yDAAyD,EAAE,OAAO,UAAU,WAAW,MAAM,cAAc,IAAO;AAAA,EAClH,6BAA6B,EAAE,OAAO,eAAe,WAAW,KAAK,cAAc,IAAO;AAAA,EAC1F,uBAAuB,EAAE,OAAO,eAAe,WAAW,KAAK,cAAc,IAAO;AAAA,EACpF,8BAA8B,EAAE,OAAO,eAAe,WAAW,KAAK,cAAc,IAAO;AAAA,EAC3F,cAAc,EAAE,OAAO,UAAU,WAAW,KAAK,cAAc,IAAO;AAAA,EACtE,8BAA8B,EAAE,OAAO,MAAM,WAAW,KAAK,cAAc,IAAO;AAAA,EAClF,+BAA+B,EAAE,OAAO,MAAM,WAAW,KAAK,cAAc,IAAO;AAAA,EACnF,kCAAkC,EAAE,OAAO,MAAM,WAAW,KAAK,cAAc,IAAO;AAAA,EACtF,oCAAoC,EAAE,OAAO,MAAM,WAAW,KAAK,cAAc,IAAO;AAAA,EACxF,8BAA8B,EAAE,OAAO,MAAM,WAAW,KAAK,cAAc,IAAO;AAAA,EAClF,YAAY,EAAE,OAAO,YAAY,WAAW,MAAM,cAAc,IAAO;AAAA,EACvE,qBAAqB,EAAE,OAAO,YAAY,WAAW,MAAM,cAAc,IAAO;AAAA,EAChF,+BAA+B,EAAE,OAAO,YAAY,WAAW,MAAM,cAAc,IAAO;AAC5F;;;ACvIA,SAAS,aAAa,YAA4B;AAChD,MAAI,cAAc,OAAO,aAAa,IAAK,QAAO;AAClD,MAAI,cAAc,OAAO,aAAa,IAAK,QAAO;AAClD,MAAI,cAAc,OAAO,aAAa,IAAK,QAAO;AAClD,MAAI,cAAc,OAAO,aAAa,IAAK,QAAO;AAClD,SAAO;AACT;AA6BA,IAAM,oBAAoB;AAC1B,IAAM,sBAAuC,EAAE,QAAQ,KAAK,OAAO,EAAE;AAE9D,IAAM,cAAN,MAAM,aAAoC;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EAIT,kBAA0B;AAAA,EAC1B,gBAA+B,QAAQ,QAAQ;AAAA,EAC/C,aAAsB;AAAA,EAEtB,mBAAoC,EAAE,GAAG,oBAAoB;AAAA,EAE7D,iBAA2C,oBAAI,IAAI;AAAA,EACnD,cAAiD;AAAA,EACjD;AAAA,EAEA,cAAsB;AAAA,EAC9B,OAAwB,sBAAsB;AAAA,EAE9C,YAAY,QAA4B;AACtC,SAAK,aAAa,QAAQ,cAAc;AACxC,SAAK,wBAAwB,QAAQ,yBAAyB;AAC9D,SAAK,mBAAmB,QAAQ;AAChC,QAAI,KAAK,kBAAkB;AACzB,WAAK,cAAc,oBAAI,IAAI;AAAA,IAC7B;AACA,SAAK,iBAAiB,KAAK,qBAAqB;AAAA,EAClD;AAAA,EAEQ,uBAAoC;AAC1C,WAAO;AAAA,MACL,OAAO;AAAA,MACP,WAAW;AAAA,MACX,OAAO;AAAA,MACP,MAAM;AAAA,MACN,cAAc;AAAA,MACd,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,EACF;AAAA,EAEQ,qBAAqB,MAAuC;AAClE,WAAO;AAAA,MACL,OAAO,KAAK;AAAA,MACZ,WAAW,KAAK;AAAA,MAChB,OAAO,KAAK;AAAA,MACZ,MAAM;AAAA,MACN,cAAc,KAAK;AAAA,MACnB,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,EACF;AAAA,EAEQ,qBAAqB,WAAgC;AAC3D,WAAO;AAAA,MACL,OAAO;AAAA,MACP,WAAW;AAAA,MACX,OAAO;AAAA,MACP,MAAM;AAAA,MACN,cAAc;AAAA,MACd,cAAc;AAAA,MACd,aAAa;AAAA,IACf;AAAA,EACF;AAAA,EAEQ,gBACN,QACA,cACgC;AAChC,QAAI,CAAC,gBAAgB,CAAC,OAAQ,QAAO;AACrC,UAAM,aAAa,aAChB,QAAQ,OAAO,EAAE,EACjB,QAAQ,cAAc,CAAC,GAAG,SAAiB,IAAI,aAAa,IAAI,CAAC,GAAG;AACvE,UAAM,MAAM,GAAG,MAAM,IAAI,UAAU;AACnC,WAAO,mBAAmB,GAAG;AAAA,EAC/B;AAAA,EAEQ,eACN,gBACsB;AACtB,QAAI,CAAC,KAAK,eAAe,CAAC,KAAK,oBAAoB,CAAC,gBAAgB;AAClE,aAAO;AAAA,IACT;AAEA,UAAM,UAAU,KAAK,iBAAiB,cAAc;AACpD,QAAI,UAAU,KAAK,YAAY,IAAI,OAAO;AAC1C,QAAI,CAAC,SAAS;AACZ,gBAAU;AAAA,QACR,QAAQ,oBAAI,IAAI;AAAA,QAChB,YAAY,EAAE,GAAG,oBAAoB;AAAA,QACrC,cAAc,KAAK,IAAI;AAAA,MACzB;AACA,WAAK,YAAY,IAAI,SAAS,OAAO;AAAA,IACvC;AACA,YAAQ,eAAe,KAAK,IAAI;AAChC,WAAO;AAAA,EACT;AAAA,EAEQ,iBACN,gBAC0B;AAC1B,UAAM,UAAU,KAAK,eAAe,cAAc;AAClD,WAAO,UAAU,QAAQ,SAAS,KAAK;AAAA,EACzC;AAAA,EAEQ,kBACN,gBACiB;AACjB,UAAM,UAAU,KAAK,eAAe,cAAc;AAClD,WAAO,UAAU,QAAQ,aAAa,KAAK;AAAA,EAC7C;AAAA,EAEQ,UACN,cACA,QACA,gBACA,mBACa;AACb,UAAM,YAAY,KAAK,iBAAiB,cAAc;AAEtD,UAAM,OAAO,KAAK,gBAAgB,QAAQ,YAAY;AACtD,UAAM,YAAY,qBAAqB,MAAM;AAE7C,QAAI,CAAC,UAAW,QAAO,KAAK;AAE5B,QAAI,SAAS,UAAU,IAAI,SAAS;AACpC,QAAI,CAAC,QAAQ;AACX,eAAS,OACL,KAAK,qBAAqB,IAAI,IAC9B,KAAK,qBAAqB,SAAS;AACvC,gBAAU,IAAI,WAAW,MAAM;AAAA,IACjC;AACA,WAAO;AAAA,EACT;AAAA,EAEQ,oBAA0B;AAChC,QAAI,CAAC,KAAK,YAAa;AACvB,UAAM,MAAM,KAAK,IAAI;AACrB,QAAI,MAAM,KAAK,cAAc,aAAY,oBAAqB;AAC9D,SAAK,cAAc;AAEnB,eAAW,CAAC,SAAS,OAAO,KAAK,KAAK,aAAa;AACjD,UAAI,MAAM,QAAQ,eAAe,mBAAmB;AAClD,aAAK,YAAY,OAAO,OAAO;AAAA,MACjC;AAAA,IACF;AAAA,EACF;AAAA,EAEA,mBACE,SACA,YACA,cACA,QACA,gBACM;AACN,QAAI,KAAK,WAAY;AAErB,UAAM,gBAAgB,QAAQ,mBAAmB,KAAK;AACtD,UAAM,SAAS,KAAK;AAAA,MAClB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,QAAI,2BAA2B,SAAS;AACtC,aAAO,YAAY,SAAS,QAAQ,uBAAuB,GAAG,EAAE;AAAA,IAClE;AACA,QAAI,uBAAuB,SAAS;AAClC,aAAO,QAAQ,SAAS,QAAQ,mBAAmB,GAAG,EAAE;AAAA,IAC1D;AACA,QAAI,sBAAsB,SAAS;AACjC,aAAO,OAAO,SAAS,QAAQ,kBAAkB,GAAG,EAAE;AAAA,IACxD;AACA,WAAO,cAAc,KAAK,IAAI;AAE9B,QAAI,iBAAiB,SAAS;AAC5B,YAAM,eAAe,SAAS,QAAQ,aAAa,GAAG,EAAE;AACxD,aAAO,eAAe,KAAK,IAAI,IAAI,eAAe;AAAA,IACpD;AAEA,QAAI,eAAe,OAAO,eAAe,KAAK;AAC5C,UAAI,OAAO,gBAAgB,KAAK,IAAI,GAAG;AACrC,eAAO,eAAe,KAAK,IAAI,IAAI;AAAA,MACrC;AAAA,IACF;AAEA,UAAM,aAAa,KAAK,kBAAkB,cAAc;AACxD,QAAI,8BAA8B,SAAS;AACzC,iBAAW,SAAS,SAAS,QAAQ,0BAA0B,GAAG,EAAE;AAAA,IACtE;AACA,QAAI,6BAA6B,SAAS;AACxC,iBAAW,QAAQ,SAAS,QAAQ,yBAAyB,GAAG,EAAE;AAAA,IACpE;AAAA,EACF;AAAA,EAEA,oBAAoB,SAAuC;AACzD,SAAK,mBAAmB,SAAS,GAAG;AAAA,EACtC;AAAA,EAEA,MAAM,eACJ,cACA,QACA,gBACe;AACf,QAAI,KAAK,WAAY;AAErB,SAAK,kBAAkB;AAIvB,QAAI;AACJ,aAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AAC3B,YAAMC,UAAS,KAAK,UAAU,cAAc,QAAQ,cAAc;AAClE,YAAM,MAAM,KAAK,IAAI;AACrB,UAAIA,QAAO,gBAAgB,KAAK;AAC9B,6BAAqB;AACrB;AAAA,MACF;AACA,2BAAqBA;AACrB,YAAM,cAAcA,QAAO;AAC3B,YAAM,WAAW,cAAc;AAC/B;AAAA,QACE,2BAA2BA,QAAO,KAAK,iBAAiB,KAAK,KAAK,WAAW,GAAI,CAAC;AAAA,MACpF;AACA,YAAM,MAAM,QAAQ;AAEpB,UAAIA,QAAO,gBAAgB,aAAa;AACtC,QAAAA,QAAO,eAAe;AAAA,MACxB;AAAA,IACF;AAIA,QAAI,sBAAsB,mBAAmB,eAAe,KAAK,IAAI,GAAG;AACtE,YAAM,WAAW,mBAAmB,eAAe,KAAK,IAAI;AAC5D;AAAA,QACE,2BAA2B,mBAAmB,KAAK;AAAA,MACrD;AACA,YAAM,IAAI;AAAA,QACR;AAAA,QACA,qBAAqB,mBAAmB,KAAK,uBAAuB,KAAK,KAAK,WAAW,GAAI,CAAC;AAAA,MAChG;AAAA,IACF;AAEA,UAAM,aAAa,KAAK,kBAAkB,cAAc;AACxD,QAAI,WAAW,UAAU,MAAM,WAAW,SAAS,GAAG;AACpD,YAAM,UAAU,WAAW,QAAQ;AACnC,YAAM,QAAQ,KAAK,IAAI,SAAS,GAAI;AACpC,UAAI,QAAQ,GAAG;AACb;AAAA,UACE,4CAA4C,WAAW,MAAM,cAAc,KAAK;AAAA,QAClF;AACA,cAAM,MAAM,KAAK;AAAA,MACnB;AAAA,IACF,WAAW,WAAW,UAAU,KAAK,WAAW,QAAQ,GAAG;AACzD,YAAM,WAAW,WAAW,QAAQ;AACpC;AAAA,QACE,0DAA0D,KAAK,KAAK,WAAW,GAAI,CAAC;AAAA,MACtF;AACA,YAAM,MAAM,QAAQ;AAAA,IACtB;AAEA,UAAM,SAAS,KAAK,UAAU,cAAc,QAAQ,cAAc;AAClE,QAAI,OAAO,aAAa,KAAK,OAAO,QAAQ,GAAG;AAC7C,YAAM,QAAQ,OAAO,YAAY,OAAO;AAExC,UAAI,OAAO,aAAa,GAAG;AACzB;AAAA,UACE,2BAA2B,OAAO,KAAK;AAAA,QACzC;AACA,cAAM,MAAM,GAAI;AAAA,MAClB,WAAW,SAAS,KAAK,uBAAuB;AAC9C,cAAM,aAAa,KAAK;AAAA,WACrB,IAAI,QAAQ,KAAK,yBAAyB;AAAA,QAC7C;AACA,cAAM,MAAM,UAAU;AAAA,MACxB;AAAA,IACF;AAEA,UAAM,KAAK,gBAAgB;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAc,kBAAiC;AAC7C,QAAI,KAAK,YAAY;AACnB,WAAK,kBAAkB,KAAK,IAAI;AAChC;AAAA,IACF;AAEA,UAAM,MAAM,YAA2B;AACrC,YAAM,MAAM,KAAK,IAAI;AACrB,YAAM,uBAAuB,MAAM,KAAK;AACxC,UAAI,uBAAuB,KAAK,YAAY;AAC1C,cAAM,MAAM,KAAK,aAAa,oBAAoB;AAAA,MACpD;AACA,WAAK,kBAAkB,KAAK,IAAI;AAAA,IAClC;AAEA,UAAM,YAAY,KAAK,cAAc,KAAK,KAAK,GAAG;AAClD,SAAK,gBAAgB,UAAU;AAAA,MAC7B,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AACA,UAAM;AAAA,EACR;AAAA,EAEA,YAA2B;AACzB,QAAI,cAAc,KAAK;AACvB,QAAI,aAAa;AAEjB,UAAM,cAAc,CAAC,WAA8B;AACjD,UAAI,OAAO,QAAQ,GAAG;AACpB,cAAM,QAAQ,OAAO,YAAY,OAAO;AACxC,YAAI,QAAQ,YAAY;AACtB,uBAAa;AACb,wBAAc;AAAA,QAChB;AAAA,MACF;AAAA,IACF;AAEA,eAAW,UAAU,KAAK,eAAe,OAAO,GAAG;AACjD,kBAAY,MAAM;AAAA,IACpB;AAEA,QAAI,KAAK,aAAa;AACpB,iBAAW,WAAW,KAAK,YAAY,OAAO,GAAG;AAC/C,mBAAW,UAAU,QAAQ,OAAO,OAAO,GAAG;AAC5C,sBAAY,MAAM;AAAA,QACpB;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,MACL,WAAW,YAAY;AAAA,MACvB,OAAO,YAAY;AAAA,MACnB,MAAM,YAAY;AAAA,MAClB,OAAO,YAAY,UAAU,iBAAiB,OAAO,YAAY;AAAA,MACjE,kBAAkB,KAAK,iBAAiB;AAAA,MACxC,iBAAiB,KAAK,iBAAiB;AAAA,MACvC,YACE,YAAY,eAAe,KAAK,IAAI,IAChC,KAAK,MAAM,YAAY,eAAe,KAAK,IAAI,KAAK,GAAI,IACxD;AAAA,MACN,cAAc,YAAY;AAAA,IAC5B;AAAA,EACF;AAAA,EAEA,eAAe,OAAiD;AAC9D,UAAM,SAAS,KAAK,eAAe,IAAI,KAAK;AAC5C,QAAI,CAAC,OAAQ,QAAO;AACpB,WAAO;AAAA,MACL,OAAO,OAAO;AAAA,MACd,WAAW,OAAO;AAAA,MAClB,OAAO,OAAO;AAAA,MACd,MAAM,OAAO;AAAA,MACb,cAAc,OAAO;AAAA,MACrB,cAAc,OAAO;AAAA,IACvB;AAAA,EACF;AAAA,EAEA,sBAAyD;AACvD,UAAM,SAAS,oBAAI,IAAkC;AACrD,eAAW,CAAC,MAAM,MAAM,KAAK,KAAK,gBAAgB;AAChD,aAAO,IAAI,MAAM;AAAA,QACf,OAAO,OAAO;AAAA,QACd,WAAW,OAAO;AAAA,QAClB,OAAO,OAAO;AAAA,QACd,MAAM,OAAO;AAAA,QACb,cAAc,OAAO;AAAA,QACrB,cAAc,OAAO;AAAA,MACvB,CAAC;AAAA,IACH;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,aAAa,YAA4B;AAC9C,WAAO,aAAa,UAAU;AAAA,EAChC;AAAA,EAEA,UAAU,OAAyB;AACjC,UAAM,MAAM,KAAK,IAAI;AAErB,QAAI,OAAO;AACT,YAAM,SAAS,KAAK,eAAe,IAAI,KAAK;AAC5C,aAAO,SAAS,OAAO,eAAe,MAAM;AAAA,IAC9C;AAEA,QAAI,KAAK,eAAe,eAAe,IAAK,QAAO;AACnD,eAAW,UAAU,KAAK,eAAe,OAAO,GAAG;AACjD,UAAI,OAAO,eAAe,IAAK,QAAO;AAAA,IACxC;AACA,WAAO;AAAA,EACT;AAAA,EAEA,YAAY,SAAwB;AAClC,SAAK,aAAa;AAAA,EACpB;AAAA,EAEA,QAAc;AACZ,SAAK,eAAe,MAAM;AAC1B,QAAI,KAAK,YAAa,MAAK,YAAY,MAAM;AAC7C,SAAK,iBAAiB,KAAK,qBAAqB;AAChD,SAAK,mBAAmB,EAAE,GAAG,oBAAoB;AACjD,SAAK,kBAAkB;AACvB,SAAK,gBAAgB,QAAQ,QAAQ;AACrC,SAAK,cAAc;AAAA,EACrB;AACF;;;ACpdO,IAAM,sBAAN,MAAmD;AAAA,EAChD,WAAW,oBAAI,IAA8B;AAAA,EAErD,MAAM,OAAU,KAAa,SAAuC;AAClE,UAAM,WAAW,KAAK,SAAS,IAAI,GAAG;AACtC,QAAI,UAAU;AACZ,eAAS,+BAA+B,GAAG,EAAE;AAC7C,aAAO;AAAA,IACT;AAEA,UAAM,UAAU,QAAQ,EAAE,QAAQ,MAAM;AACtC,WAAK,SAAS,OAAO,GAAG;AAAA,IAC1B,CAAC;AAED,SAAK,SAAS,IAAI,KAAK,OAAO;AAC9B,WAAO;AAAA,EACT;AAAA,EAEA,IAAI,UAAkB;AACpB,WAAO,KAAK,SAAS;AAAA,EACvB;AAAA,EAEA,QAAc;AACZ,SAAK,SAAS,MAAM;AAAA,EACtB;AACF;;;ACPO,SAAS,mBACd,QACA,QAC0B;AAC1B,MAAI,eAA2C;AAG/C,SAAO,eAAe,IAAI,YAAY,QAAQ,iBAAiB,CAAC;AAGhE,MAAI,QAAQ,+BAA+B,OAAO;AAChD,mBAAe,IAAI,oBAAoB;AACvC,WAAO,gBAAgB,YAAY;AAAA,EACrC;AAGA,MAAI,QAAQ,oBAAoB,OAAO;AACrC,WAAO,SAAS,IAAI,iBAAiB,QAAQ,eAAe,CAAC;AAAA,EAC/D;AAGA,MAAI,QAAQ,sBAAsB;AAChC,WAAO,kBAAkB,IAAI,eAAe,OAAO,oBAAoB,CAAC;AAAA,EAC1E;AAIA,MAAI,QAAQ,aAAa;AACvB,WAAO,eAAe,OAAO,WAAW;AAAA,EAC1C,WAAW,QAAQ,kBAAkB,QAAW;AAC9C,WAAO,eAAe,EAAE,YAAY,OAAO,cAAc,CAAC;AAAA,EAC5D,OAAO;AACL,WAAO,eAAe;AAAA,MACpB,YAAY;AAAA,MACZ,aAAa;AAAA,MACb,YAAY;AAAA,IACd,CAAC;AAAA,EACH;AAGA,MAAI,QAAQ,eAAe;AACzB,WAAO,iBAAiB,OAAO,aAAa;AAAA,EAC9C;AAGA,MAAI,QAAQ,qBAAqB;AAC/B,eAAW,eAAe,OAAO,qBAAqB;AACpD,aAAO,sBAAsB,WAAW;AAAA,IAC1C;AAAA,EACF;AACA,MAAI,QAAQ,sBAAsB;AAChC,eAAW,eAAe,OAAO,sBAAsB;AACrD,aAAO,uBAAuB,WAAW;AAAA,IAC3C;AAAA,EACF;AAGA,MAAI,QAAQ,qBAAqB,QAAW;AAC1C,WAAO,oBAAoB,OAAO,gBAAgB;AAAA,EACpD;AAGA,MAAI,QAAQ,oBAAoB,QAAW;AACzC,WAAO,mBAAmB,OAAO,eAAe;AAAA,EAClD;AAGA,MAAI,QAAQ,YAAY,QAAW;AACjC,WAAO,WAAW,OAAO,OAAO;AAAA,EAClC;AAEA,SAAO,EAAE,aAAa;AACxB;;;ACDO,IAAM,YAAN,MAAgB;AAAA,EACb;AAAA,EACA,UAAgC,oBAAI,IAAI;AAAA,EACxC;AAAA,EACA,eAAsC;AAAA,EACtC,eAA2C;AAAA,EAEnD,YAAY,QAA0B;AACpC,UAAM,QAAQ,QAAQ,eAAe,QAAQ,IAAI;AACjD,UAAM,UAAU;AAAA,MACd,QAAQ,WAAW,QAAQ,IAAI,gBAAgB;AAAA,MAC/C,QAAQ;AAAA,IACV;AACA,SAAK,YAAY,IAAI;AAAA,MACnB,QAAQ,YAAY,QAAQ,IAAI,iBAAiB;AAAA,MACjD;AAAA,MACA;AAAA,IACF;AAEA,UAAM,aACJ,QAAQ,cACP,QAAQ,IAAI;AACf,QAAI,YAAY;AACd,WAAK,UAAU,cAAc,UAAU;AAAA,IACzC;AAEA,QAAI,QAAQ,UAAU;AACpB,WAAK,UAAU,YAAY,OAAO,QAAQ;AAAA,IAC5C;AAEA,QAAI,QAAQ,mBAAmB;AAC7B,WAAK,UAAU,qBAAqB,OAAO,iBAAiB;AAAA,IAC9D;AAEA,QAAI,QAAQ,gBAAgB;AAC1B,WAAK,UAAU,iBAAiB,OAAO,cAAc;AAAA,IACvD;AAEA,UAAM,SAAS,mBAAmB,KAAK,WAAW,MAAM;AACxD,SAAK,eAAe,OAAO;AAC3B,SAAK,mBAAmB,QAAQ,oBAAoB;AAEpD,mBAAO,KAAK,oCAAoC;AAAA,EAClD;AAAA,EAEQ,UAAa,MAAwB;AAC3C,QAAI,CAAC,KAAK,QAAQ,IAAI,IAAI,GAAG;AAC3B,WAAK,QAAQ,IAAI,MAAM,qBAAqB,MAAM,KAAK,SAAS,CAAC;AAAA,IACnE;AACA,WAAO,KAAK,QAAQ,IAAI,IAAI;AAAA,EAC9B;AAAA;AAAA,EAGA,IAAI,WAA2B;AAC7B,WAAO,KAAK,UAAU,UAAU;AAAA,EAClC;AAAA,EACA,IAAI,SAAuB;AACzB,WAAO,KAAK,UAAU,QAAQ;AAAA,EAChC;AAAA,EACA,IAAI,WAA2B;AAC7B,WAAO,KAAK,UAAU,UAAU;AAAA,EAClC;AAAA,EACA,IAAI,aAA8B;AAChC,WAAO,KAAK,UAAU,YAAY;AAAA,EACpC;AAAA,EACA,IAAI,SAAuB;AACzB,WAAO,KAAK,UAAU,QAAQ;AAAA,EAChC;AAAA,EACA,IAAI,WAA2B;AAC7B,WAAO,KAAK,UAAU,UAAU;AAAA,EAClC;AAAA,EACA,IAAI,YAA6B;AAC/B,WAAO,KAAK,UAAU,WAAW;AAAA,EACnC;AAAA,EACA,IAAI,eAAmC;AACrC,WAAO,KAAK,UAAU,cAAc;AAAA,EACtC;AAAA,EACA,IAAI,sBAAiD;AACnD,WAAO,KAAK,UAAU,qBAAqB;AAAA,EAC7C;AAAA,EACA,IAAI,QAAqB;AACvB,WAAO,KAAK,UAAU,OAAO;AAAA,EAC/B;AAAA,EACA,IAAI,WAA0B;AAC5B,WAAO,KAAK,UAAU,UAAU;AAAA,EAClC;AAAA,EACA,IAAI,WAA2B;AAC7B,WAAO,KAAK,UAAU,UAAU;AAAA,EAClC;AAAA,EACA,IAAI,SAAsB;AACxB,WAAO,KAAK,UAAU,QAAQ;AAAA,EAChC;AAAA,EACA,IAAI,aAA+B;AACjC,WAAO,KAAK,UAAU,YAAY;AAAA,EACpC;AAAA,EACA,IAAI,WAA2B;AAC7B,WAAO,KAAK,UAAU,UAAU;AAAA,EAClC;AAAA,EACA,IAAI,YAA6B;AAC/B,WAAO,KAAK,UAAU,WAAW;AAAA,EACnC;AAAA,EACA,IAAI,YAA6B;AAC/B,WAAO,KAAK,UAAU,WAAW;AAAA,EACnC;AAAA,EACA,IAAI,WAA2B;AAC7B,WAAO,KAAK,UAAU,UAAU;AAAA,EAClC;AAAA,EACA,IAAI,UAAyB;AAC3B,WAAO,KAAK,UAAU,SAAS;AAAA,EACjC;AAAA,EACA,IAAI,OAAmB;AACrB,WAAO,KAAK,UAAU,MAAM;AAAA,EAC9B;AAAA,EACA,IAAI,SAAuB;AACzB,WAAO,KAAK,UAAU,QAAQ;AAAA,EAChC;AAAA,EACA,IAAI,KAAe;AACjB,WAAO,KAAK,UAAU,IAAI;AAAA,EAC5B;AAAA,EACA,IAAI,QAAqB;AACvB,WAAO,KAAK,UAAU,OAAO;AAAA,EAC/B;AAAA,EACA,IAAI,SAAuB;AACzB,WAAO,KAAK,UAAU,QAAQ;AAAA,EAChC;AAAA,EACA,IAAI,SAAgC;AAClC,WAAO,KAAK,UAAU,QAAQ;AAAA,EAChC;AAAA,EACA,IAAI,cAAiC;AACnC,WAAO,KAAK,UAAU,aAAa;AAAA,EACrC;AAAA,EACA,IAAI,SAAuB;AACzB,WAAO,KAAK,UAAU,QAAQ;AAAA,EAChC;AAAA,EACA,IAAI,KAAe;AACjB,WAAO,KAAK,UAAU,IAAI;AAAA,EAC5B;AAAA,EACA,IAAI,WAA2B;AAC7B,WAAO,KAAK,UAAU,UAAU;AAAA,EAClC;AAAA,EACA,IAAI,SAAuB;AACzB,WAAO,KAAK,UAAU,QAAQ;AAAA,EAChC;AAAA,EACA,IAAI,OAAmB;AACrB,WAAO,KAAK,UAAU,MAAM;AAAA,EAC9B;AAAA,EACA,IAAI,OAAmB;AACrB,WAAO,KAAK,UAAU,MAAM;AAAA,EAC9B;AAAA,EACA,IAAI,gBAAqC;AACvC,WAAO,KAAK,UAAU,eAAe;AAAA,EACvC;AAAA,EACA,IAAI,YAA6B;AAC/B,WAAO,KAAK,UAAU,WAAW;AAAA,EACnC;AAAA,EACA,IAAI,aAA+B;AACjC,WAAO,KAAK,UAAU,YAAY;AAAA,EACpC;AAAA,EACA,IAAI,WAA2B;AAC7B,WAAO,KAAK,UAAU,UAAU;AAAA,EAClC;AAAA,EACA,IAAI,YAA6B;AAC/B,WAAO,KAAK,UAAU,WAAW;AAAA,EACnC;AAAA,EACA,IAAI,oBAA6C;AAC/C,WAAO,KAAK,UAAU,mBAAmB;AAAA,EAC3C;AAAA,EACA,IAAI,cAAiC;AACnC,WAAO,KAAK,UAAU,aAAa;AAAA,EACrC;AAAA,EAEA,sBAAsB,IAAoC;AACxD,WAAO,KAAK,UAAU,sBAAsB,EAAE;AAAA,EAChD;AAAA,EAEA,uBAAuB,IAAqC;AAC1D,WAAO,KAAK,UAAU,uBAAuB,EAAE;AAAA,EACjD;AAAA,EAEA,eAAe,OAAqB;AAClC,SAAK,UAAU,eAAe,KAAK;AACnC,mBAAO,KAAK,sBAAsB;AAAA,EACpC;AAAA,EAEA,iBAAiB,UAA2C;AAC1D,SAAK,UAAU,iBAAiB,QAAQ;AACxC,mBAAO;AAAA,MACL,WAAW,8BAA8B;AAAA,IAC3C;AAAA,EACF;AAAA,EAEA,IAAI,cAA8B;AAChC,QAAI,CAAC,KAAK,cAAc;AACtB,WAAK,eAAe,IAAI;AAAA,QACtB,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,MACP;AAAA,IACF;AACA,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,gBAAgB;AACd,WAAO,KAAK,YAAY,cAAc;AAAA,EACxC;AAAA,EAEA,aAAmB;AACjB,SAAK,YAAY,WAAW;AAAA,EAC9B;AAAA,EAEA,kBAAkB,WAA2C;AAC3D,SAAK,YAAY,kBAAkB,SAAS;AAAA,EAC9C;AAAA,EAEA,yBAAyB;AACvB,WAAO,KAAK,YAAY,uBAAuB;AAAA,EACjD;AAAA,EAEA,oBAAoB,UAAyB;AAC3C,SAAK,YAAY,oBAAoB,QAAQ;AAAA,EAC/C;AAAA,EAEA,MAAM,MACJ,MACA,SACA,SAC4B;AAC5B,WAAO,WAAW,MAAM,SAAS,OAAO;AAAA,EAC1C;AAAA,EAEA,MAAM,UACJ,KACA,QACA,WACc;AACd,WAAO,UAAU,KAAK,QAAQ,SAAS;AAAA,EACzC;AAAA,EAEA,WAAiB;AACf,UAAM,QAAQ,KAAK,UAAU,SAAS;AACtC,QAAI,OAAO;AACT,MAAC,MAA2B,SAAS;AAAA,IACvC;AACA,UAAM,KAAK,KAAK,UAAU,kBAAkB;AAC5C,QAAI,IAAI;AACN,SAAG,SAAS;AAAA,IACd;AACA,QAAI,KAAK,cAAc;AACrB,WAAK,aAAa,MAAM;AAAA,IAC1B;AACA,SAAK,QAAQ,MAAM;AACnB,mBAAO,KAAK,8BAA8B;AAAA,EAC5C;AACF;AAEA,IAAI,iBAAmC;AAChC,SAAS,mBAA8B;AAC5C,MAAI,CAAC,gBAAgB;AACnB,qBAAiB,IAAI,UAAU;AAAA,EACjC;AACA,SAAO;AACT;;;AC/SO,IAAM,kBAAN,MAAsB;AAAA,EACnB;AAAA,EACA,UAAuC,oBAAI,IAAI;AAAA,EAC/C;AAAA,EACA,eAA2C;AAAA,EAEnD,YAAY,QAAwD;AAClE,SAAK,iBAAiB,IAAI,IAAI,OAAO,OAAO;AAC5C,UAAM,UAAU;AAAA,MACd,OAAO,WAAW,QAAQ,IAAI,gBAAgB;AAAA,MAC9C,OAAO;AAAA,IACT;AACA,SAAK,YAAY,IAAI;AAAA,MACnB,OAAO,YAAY,QAAQ,IAAI,iBAAiB;AAAA,MAChD;AAAA,MACA,OAAO,eAAe,QAAQ,IAAI;AAAA,IACpC;AAEA,QAAI,OAAO,UAAU;AACnB,WAAK,UAAU,YAAY,OAAO,QAAQ;AAAA,IAC5C;AAEA,QAAI,OAAO,mBAAmB;AAC5B,WAAK,UAAU,qBAAqB,OAAO,iBAAiB;AAAA,IAC9D;AAEA,QAAI,OAAO,gBAAgB;AACzB,WAAK,UAAU,iBAAiB,OAAO,cAAc;AAAA,IACvD;AAEA,UAAM,aAAa,OAAO;AAC1B,QAAI,YAAY;AACd,WAAK,UAAU,cAAc,UAAU;AAAA,IACzC;AAEA,UAAM,SAAS,mBAAmB,KAAK,WAAW,MAAM;AACxD,SAAK,eAAe,OAAO;AAE3B,eAAW,QAAQ,KAAK,gBAAgB;AACtC,WAAK,QAAQ,IAAI,MAAM,qBAAqB,MAAM,KAAK,SAAS,CAAC;AAAA,IACnE;AAEA,mBAAO;AAAA,MACL,6CAA6C,OAAO,QAAQ,KAAK,IAAI,CAAC;AAAA,IACxE;AAAA,EACF;AAAA,EAEA,UAAU,YAAuD;AAC/D,WAAO,KAAK,QAAQ,IAAI,UAAU;AAAA,EACpC;AAAA,EAEA,UAAU,YAAoC;AAC5C,WAAO,KAAK,QAAQ,IAAI,UAAU;AAAA,EACpC;AAAA,EAEA,oBAAqC;AACnC,WAAO,MAAM,KAAK,KAAK,cAAc;AAAA,EACvC;AAAA,EAEA,IAAI,WAAuC;AACzC,WAAO,KAAK,UAAU,UAAU;AAAA,EAClC;AAAA,EACA,IAAI,SAAmC;AACrC,WAAO,KAAK,UAAU,QAAQ;AAAA,EAChC;AAAA,EACA,IAAI,WAAuC;AACzC,WAAO,KAAK,UAAU,UAAU;AAAA,EAClC;AAAA,EACA,IAAI,aAA0C;AAC5C,WAAO,KAAK,UAAU,YAAY;AAAA,EACpC;AAAA,EACA,IAAI,SAAmC;AACrC,WAAO,KAAK,UAAU,QAAQ;AAAA,EAChC;AAAA,EACA,IAAI,WAAuC;AACzC,WAAO,KAAK,UAAU,UAAU;AAAA,EAClC;AAAA,EACA,IAAI,YAAyC;AAC3C,WAAO,KAAK,UAAU,WAAW;AAAA,EACnC;AAAA,EACA,IAAI,eAA+C;AACjD,WAAO,KAAK,UAAU,cAAc;AAAA,EACtC;AAAA,EACA,IAAI,QAAiC;AACnC,WAAO,KAAK,UAAU,OAAO;AAAA,EAC/B;AAAA,EACA,IAAI,WAAsC;AACxC,WAAO,KAAK,UAAU,UAAU;AAAA,EAClC;AAAA,EACA,IAAI,WAAuC;AACzC,WAAO,KAAK,UAAU,UAAU;AAAA,EAClC;AAAA,EACA,IAAI,SAAkC;AACpC,WAAO,KAAK,UAAU,QAAQ;AAAA,EAChC;AAAA,EACA,IAAI,aAA2C;AAC7C,WAAO,KAAK,UAAU,YAAY;AAAA,EACpC;AAAA,EACA,IAAI,WAAuC;AACzC,WAAO,KAAK,UAAU,UAAU;AAAA,EAClC;AAAA,EACA,IAAI,YAAyC;AAC3C,WAAO,KAAK,UAAU,WAAW;AAAA,EACnC;AAAA,EACA,IAAI,YAAyC;AAC3C,WAAO,KAAK,UAAU,WAAW;AAAA,EACnC;AAAA,EACA,IAAI,WAAuC;AACzC,WAAO,KAAK,UAAU,UAAU;AAAA,EAClC;AAAA,EACA,IAAI,UAAqC;AACvC,WAAO,KAAK,UAAU,SAAS;AAAA,EACjC;AAAA,EACA,IAAI,OAA+B;AACjC,WAAO,KAAK,UAAU,MAAM;AAAA,EAC9B;AAAA,EACA,IAAI,SAAmC;AACrC,WAAO,KAAK,UAAU,QAAQ;AAAA,EAChC;AAAA,EACA,IAAI,KAA2B;AAC7B,WAAO,KAAK,UAAU,IAAI;AAAA,EAC5B;AAAA,EACA,IAAI,QAAiC;AACnC,WAAO,KAAK,UAAU,OAAO;AAAA,EAC/B;AAAA,EACA,IAAI,SAAmC;AACrC,WAAO,KAAK,UAAU,QAAQ;AAAA,EAChC;AAAA,EACA,IAAI,SAA4C;AAC9C,WAAO,KAAK,UAAU,QAAQ;AAAA,EAChC;AAAA,EACA,IAAI,cAA6C;AAC/C,WAAO,KAAK,UAAU,aAAa;AAAA,EACrC;AAAA,EACA,IAAI,SAAmC;AACrC,WAAO,KAAK,UAAU,QAAQ;AAAA,EAChC;AAAA,EACA,IAAI,KAA2B;AAC7B,WAAO,KAAK,UAAU,IAAI;AAAA,EAC5B;AAAA,EACA,IAAI,WAAuC;AACzC,WAAO,KAAK,UAAU,UAAU;AAAA,EAClC;AAAA,EACA,IAAI,SAAmC;AACrC,WAAO,KAAK,UAAU,QAAQ;AAAA,EAChC;AAAA,EACA,IAAI,OAA+B;AACjC,WAAO,KAAK,UAAU,MAAM;AAAA,EAC9B;AAAA,EACA,IAAI,OAA+B;AACjC,WAAO,KAAK,UAAU,MAAM;AAAA,EAC9B;AAAA,EACA,IAAI,gBAAiD;AACnD,WAAO,KAAK,UAAU,eAAe;AAAA,EACvC;AAAA,EACA,IAAI,WAAuC;AACzC,WAAO,KAAK,UAAU,UAAU;AAAA,EAClC;AAAA,EACA,IAAI,YAAyC;AAC3C,WAAO,KAAK,UAAU,WAAW;AAAA,EACnC;AAAA,EACA,IAAI,cAA6C;AAC/C,WAAO,KAAK,UAAU,aAAa;AAAA,EACrC;AAAA,EAEA,WAAiB;AACf,UAAM,QAAQ,KAAK,UAAU,SAAS;AACtC,QAAI,OAAO;AACT,MAAC,MAA2B,SAAS;AAAA,IACvC;AACA,UAAM,KAAK,KAAK,UAAU,kBAAkB;AAC5C,QAAI,IAAI;AACN,SAAG,SAAS;AAAA,IACd;AACA,QAAI,KAAK,cAAc;AACrB,WAAK,aAAa,MAAM;AAAA,IAC1B;AACA,SAAK,QAAQ,MAAM;AACnB,mBAAO,KAAK,oCAAoC;AAAA,EAClD;AACF;AAEO,IAAM,gBAAN,MAAoB;AAAA,EACzB,OAAO,qBAAqB,QAA0C;AACpE,WAAO;AAAA,MACL;AAAA,MACA,KAAK,eAAe,MAAM;AAAA,IAC5B;AAAA,EACF;AAAA,EAEA,OAAO,sBAAsB,QAA2C;AACtE,WAAO;AAAA,MACL;AAAA,MACA,KAAK,eAAe,MAAM;AAAA,IAC5B;AAAA,EACF;AAAA,EAEA,OAAO,wBAAwB,QAA8C;AAC3E,WAAO;AAAA,MACL;AAAA,MACA,KAAK,eAAe,MAAM;AAAA,IAC5B;AAAA,EACF;AAAA,EAEA,OAAO,mBAAmB,QAAwC;AAChE,WAAO;AAAA,MACL;AAAA,MACA,KAAK,eAAe,MAAM;AAAA,IAC5B;AAAA,EACF;AAAA,EAEA,OAAO,qBAAqB,QAA0C;AACpE,WAAO;AAAA,MACL;AAAA,MACA,KAAK,eAAe,MAAM;AAAA,IAC5B;AAAA,EACF;AAAA,EAEA,OAAO,kBAAkB,QAAuC;AAC9D,WAAO;AAAA,MACL;AAAA,MACA,KAAK,eAAe,MAAM;AAAA,IAC5B;AAAA,EACF;AAAA,EAEA,OAAO,mBAAmB,QAAwC;AAChE,WAAO;AAAA,MACL;AAAA,MACA,KAAK,eAAe,MAAM;AAAA,IAC5B;AAAA,EACF;AAAA,EAEA,OAAO,mBAAmB,QAAwC;AAChE,WAAO;AAAA,MACL;AAAA,MACA,KAAK,eAAe,MAAM;AAAA,IAC5B;AAAA,EACF;AAAA,EAEA,OAAO,iBAAiB,QAAsC;AAC5D,WAAO;AAAA,MACL;AAAA,MACA,KAAK,eAAe,MAAM;AAAA,IAC5B;AAAA,EACF;AAAA,EAEA,OAAO,aACL,YACA,QACgB;AAChB,WAAO,qBAAqB,YAAY,KAAK,eAAe,MAAM,CAAC;AAAA,EACrE;AAAA,EAEA,OAAe,eAAe,QAAqC;AACjE,UAAM,UAAU;AAAA,MACd,QAAQ,WAAW,QAAQ,IAAI,gBAAgB;AAAA,MAC/C,QAAQ;AAAA,IACV;AACA,UAAM,SAAS,IAAI;AAAA,MACjB,QAAQ,YAAY,QAAQ,IAAI,iBAAiB;AAAA,MACjD;AAAA,MACA,QAAQ,eAAe,QAAQ,IAAI;AAAA,IACrC;AAEA,QAAI,QAAQ,UAAU;AACpB,aAAO,YAAY,OAAO,QAAQ;AAAA,IACpC;AAEA,QAAI,QAAQ,gBAAgB;AAC1B,aAAO,iBAAiB,OAAO,cAAc;AAAA,IAC/C;AAEA,UAAM,aAAa,QAAQ;AAC3B,QAAI,YAAY;AACd,aAAO,cAAc,UAAU;AAAA,IACjC;AAEA,uBAAmB,QAAQ,MAAM;AACjC,WAAO;AAAA,EACT;AACF;AAEO,IAAM,mBAAN,MAAuB;AAAA,EACpB,UAA2B,CAAC;AAAA,EAC5B,SAA0B,CAAC;AAAA,EAEnC,UAAU,YAAiC;AACzC,QAAI,CAAC,KAAK,QAAQ,SAAS,UAAU,GAAG;AACtC,WAAK,QAAQ,KAAK,UAAU;AAAA,IAC9B;AACA,WAAO;AAAA,EACT;AAAA,EAEA,WAAW,aAAoC;AAC7C,gBAAY,QAAQ,CAAC,SAAS,KAAK,UAAU,IAAI,CAAC;AAClD,WAAO;AAAA,EACT;AAAA,EAEA,WAAW,QAA+B;AACxC,SAAK,SAAS,EAAE,GAAG,KAAK,QAAQ,GAAG,OAAO;AAC1C,WAAO;AAAA,EACT;AAAA,EAEA,aAAa,UAAwB;AACnC,SAAK,OAAO,WAAW;AACvB,WAAO;AAAA,EACT;AAAA,EAEA,gBAAgB,aAA2B;AACzC,SAAK,OAAO,cAAc;AAC1B,WAAO;AAAA,EACT;AAAA,EAEA,QAAyB;AACvB,QAAI,KAAK,QAAQ,WAAW,GAAG;AAC7B,YAAM,IAAI,MAAM,4CAA4C;AAAA,IAC9D;AACA,WAAO,IAAI,gBAAgB,EAAE,GAAG,KAAK,QAAQ,SAAS,KAAK,QAAQ,CAAC;AAAA,EACtE;AACF;;;AC3WO,IAAM,mBAAN,MAAuB;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAER,YAAY,UAAoC;AAC9C,SAAK,WAAW;AAChB,WAAO;AAAA,EACT;AAAA,EAEA,QAAQ,MAAgC;AACtC,SAAK,OAAO;AACZ,WAAO;AAAA,EACT;AAAA,EAEA,eAAe,aAAwC;AACrD,SAAK,cAAc;AACnB,WAAO;AAAA,EACT;AAAA,EAEA,eAAe,SAAyC;AACtD,SAAK,cAAc;AACnB,WAAO;AAAA,EACT;AAAA,EAEA,SAAS,OAAiC;AACxC,SAAK,QAAQ;AACb,WAAO;AAAA,EACT;AAAA,EAEA,kBAAkB,IAAsC;AACtD,SAAK,iBAAiB;AACtB,WAAO;AAAA,EACT;AAAA,EAEA,WAAW,SAAmC;AAC5C,SAAK,WAAW;AAChB,WAAO;AAAA,EACT;AAAA,EAEA,QAAmB;AACjB,UAAM,SAAS,IAAI,UAAU,KAAK,UAAU,KAAK,MAAM,KAAK,WAAW;AACvE,WAAO,eAAe,KAAK,eAAe,IAAI,YAAY,CAAC;AAC3D,QAAI,KAAK,MAAO,QAAO,SAAS,KAAK,KAAK;AAC1C,QAAI,KAAK,eAAgB,QAAO,kBAAkB,KAAK,cAAc;AACrE,QAAI,KAAK,aAAa,OAAW,QAAO,WAAW,KAAK,QAAQ;AAChE,WAAO;AAAA,EACT;AACF;;;ACoBO,IAAM,oBAAgD;AAAA,EAC3D,wCAAwC,CAAC,gCAAgC;AAAA,EACzE,+CAA+C,CAAC,gCAAgC;AAAA,EAChF,iDAAiD,CAAC,wCAAwC;AAAA,EAC1F,wCAAwC,CAAC,2BAA2B;AAAA,EACpE,mDAAmD,CAAC,2BAA2B;AAAA,EAC/E,+CAA+C,CAAC,2BAA2B;AAAA,EAC3E,4CAA4C,CAAC,2BAA2B;AAAA,EACxE,4CAA4C,CAAC,mCAAmC;AAAA,EAChF,0CAA0C,CAAC,sCAAsC;AAAA,EACjF,qDAAqD,CAAC,sCAAsC;AAAA,EAC5F,qDAAqD,CAAC,yCAAyC;AAAA,EAC/F,+DAA+D,CAAC,sCAAsC;AAAA,EACtG,wCAAwC,CAAC,2BAA2B;AAAA,EACpE,0CAA0C,CAAC,iCAAiC;AAAA,EAC5E,2CAA2C,CAAC,kCAAkC;AAAA,EAC9E,0CAA0C,CAAC,kCAAkC;AAAA,EAC7E,6CAA6C,CAAC,kCAAkC;AAAA,EAChF,iDAAiD,CAAC,iCAAiC;AAAA,EACnF,2CAA2C,CAAC,2CAA2C;AAAA,EACvF,8DAA8D,CAAC,2CAA2C;AAAA,EAC1G,+DAA+D,CAAC,2CAA2C;AAAA,EAC3G,uCAAuC,CAAC,iCAAiC;AAAA,EACzE,yCAAyC,CAAC,gCAAgC;AAAA,EAC1E,0CAA0C,CAAC,+BAA+B;AAAA,EAC1E,2CAA2C,CAAC,gCAAgC;AAAA,EAC5E,0DAA0D,CAAC,gCAAgC;AAAA,EAC3F,uCAAuC,CAAC,0BAA0B;AAAA,EAClE,gDAAgD,CAAC,uCAAuC;AAAA,EACxF,uEAAuE,CAAC,uCAAuC;AAAA,EAC/G,0CAA0C,CAAC,iCAAiC;AAAA,EAC5E,0CAA0C,CAAC,6BAA6B;AAAA,EACxE,+CAA+C,CAAC,qCAAqC;AAAA,EACrF,kDAAkD,CAAC,iCAAiC;AAAA,EACpF,0CAA0C,CAAC,+BAA+B;AAAA,EAC1E,gDAAgD,CAAC,gCAAgC;AAAA,EACjF,sCAAsC,CAAC,uBAAuB;AAAA,EAC9D,uCAAuC,CAAC,uBAAuB;AAAA,EAC/D,gDAAgD,CAAC,uBAAuB;AAAA,EACxE,gDAAgD,CAAC,2BAA2B;AAAA,EAC5E,mDAAmD,CAAC,2BAA2B;AAAA,EAC/E,6CAA6C,CAAC,uBAAuB;AAAA,EACrE,8CAA8C,CAAC,2BAA2B;AAAA,EAC1E,2DAA2D,CAAC,2BAA2B;AAAA,EACvF,4CAA4C,CAAC,uBAAuB;AAAA,EACpE,wCAAwC,CAAC,+BAA+B;AAAA,EACxE,wCAAwC,CAAC,uCAAuC;AAAA,EAChF,+CAA+C,CAAC,sCAAsC;AAAA,EACtF,wDAAwD,CAAC,sCAAsC;AAAA,EAC/F,wCAAwC,CAAC,6BAA6B;AAAA,EACtE,wCAAwC,CAAC,sCAAsC;AAAA,EAC/E,gDAAgD,CAAC,sCAAsC;AAAA,EACvF,yCAAyC,CAAC,+BAA+B;AAAA,EACzE,qDAAqD,CAAC,+BAA+B;AAAA,EACrF,uCAAuC,CAAC,0CAA0C;AAAA,EAClF,wCAAwC,CAAC,iCAAiC;AAAA,EAC1E,sCAAsC,CAAC,gCAAgC;AAAA,EACvE,4CAA4C,CAAC,+BAA+B;AAAA,EAC5E,wCAAwC,CAAC,2BAA2B;AAAA,EACpE,2CAA2C,CAAC,kCAAkC;AAAA,EAC9E,wCAAwC,CAAC,+BAA+B;AAAA,EACxE,wCAAwC,CAAC,qCAAqC;AAAA,EAC9E,gDAAgD,CAAC,qCAAqC;AAAA,EACtF,qDAAqD,CAAC,qCAAqC;AAAA,EAC3F,uDAAuD,CAAC,yCAAyC;AAAA,EACjG,qDAAqD,CAAC,yCAAyC;AAAA,EAC/F,mEAAmE,CAAC,yCAAyC;AAAA,EAC7G,4CAA4C,CAAC,uCAAuC;AAAA,EACpF,uDAAuD,CAAC,uCAAuC;AAAA,EAC/F,mDAAmD,CAAC,uCAAuC;AAAA,EAC3F,gDAAgD,CAAC,qCAAqC;AAAA,EACtF,8CAA8C,CAAC,mCAAmC;AAAA,EAClF,qDAAqD,CAAC,mCAAmC;AAAA,EACzF,qDAAqD,CAAC,yCAAyC;AAAA,EAC/F,+CAA+C,CAAC,6CAA6C;AAAA,EAC7F,kEAAkE,CAAC,6CAA6C;AAAA,EAChH,mEAAmE,CAAC,6CAA6C;AAAA,EACjH,qDAAqD,CAAC,qCAAqC;AAAA,EAC3F,+CAA+C,CAAC,oCAAoC;AAAA,EACpF,gDAAgD,CAAC,qCAAqC;AAAA,EACtF,oDAAoD,CAAC,yCAAyC;AAAA,EAC9F,0EAA0E,CAAC,yCAAyC;AAAA,EACpH,8CAA8C,CAAC,mCAAmC;AAAA,EAClF,mDAAmD,CAAC,uCAAuC;AAAA,EAC3F,sDAAsD,CAAC,6CAA6C;AAAA,EACpG,4CAA4C,CAAC,iCAAiC;AAAA,EAC9E,mDAAmD,CAAC,iCAAiC;AAAA,EACrF,6CAA6C,CAAC,iDAAiD;AAAA,EAC/F,mDAAmD,CAAC,mCAAmC;AAAA,EACvF,oDAAoD,CAAC,iCAAiC;AAAA,EACtF,oDAAoD,CAAC,mCAAmC;AAAA,EACxF,4CAA4C,CAAC,wCAAwC;AAAA,EACrF,oDAAoD,CAAC,wCAAwC;AAAA,EAC7F,8CAA8C,CAAC,mCAAmC;AAAA,EAClF,2DAA2D,CAAC,mCAAmC;AAAA,EAC/F,uFAAuF,CAAC,mCAAmC;AAAA,EAC3H,wEAAwE,CAAC,mCAAmC;AAAA,EAC5G,2CAA2C,CAAC,iDAAiD;AAAA,EAC7F,mDAAmD,CAAC,iDAAiD;AAAA,EACrG,kDAAkD,CAAC,wCAAwC;AAAA,EAC3F,+CAA+C,CAAC,oCAAoC;AAAA,EACpF,+CAA+C,CAAC,oCAAoC;AAAA,EACpF,6DAA6D,CAAC,oCAAoC;AAAA,EAClG,gDAAgD,CAAC,qCAAqC;AAAA,EACtF,4CAA4C,CAAC,iCAAiC;AAAA,EAC9E,6CAA6C,CAAC,wCAAwC;AAAA,EACtF,gEAAgE,CAAC,wCAAwC;AAAA,EACzG,qEAAqE,CAAC,wCAAwC;AAAA,EAC9G,yBAAyB,CAAC,0BAA0B;AAAA,EACpD,yBAAyB,CAAC,2BAA2B;AAAA,EACrD,iCAAiC,CAAC,0BAA0B;AAAA,EAC5D,kCAAkC,CAAC,2BAA2B;AAAA,EAC9D,6CAA6C,CAAC,2BAA2B;AAAA,EACzE,gDAAgD,CAAC,2BAA2B;AAAA,EAC5E,2CAA2C,CAAC,2BAA2B;AAAA,EACvE,8CAA8C,CAAC,2BAA2B;AAAA,EAC1E,+BAA+B,CAAC,0BAA0B;AAAA,EAC1D,gCAAgC,CAAC,2BAA2B;AAAA,EAC5D,yCAAyC,CAAC,2BAA2B;AAAA,EACrE,4CAA4C,CAAC,2BAA2B;AAAA,EACxE,iDAAiD,CAAC,2BAA2B;AAAA,EAC7E,yCAAyC,CAAC,kCAAkC;AAAA,EAC5E,8BAA8B,CAAC,0BAA0B;AAAA,EACzD,+BAA+B,CAAC,uBAAuB;AAAA,EACvD,kCAAkC,CAAC,uBAAuB;AAAA,EAC1D,oCAAoC,CAAC,uBAAuB;AAAA,EAC5D,8BAA8B,CAAC,uBAAuB;AAAA,EACtD,0CAA0C,CAAC,iCAAiC;AAC9E;;;ACzLO,SAAS,MAAS,OAAkB;AACzC,SAAO;AACT;;;ACvBA;;;ACAA;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;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;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;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,8BAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;","names":["resolveCache","resolveCache","resolveCache","resolveCache","resolveCache","resolveRateLimiter","resolveCircuitBreaker","data","response","responseBody","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","SovereigntyHubSchema","z","z","SovereigntyHubSchema","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","bucket","SovereigntyHubSchema"]}