@lgriffin/esi.ts 9.6.0 → 9.7.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 (83) hide show
  1. package/CHANGELOG.md +417 -388
  2. package/LICENSE +26 -26
  3. package/README.md +1037 -1030
  4. package/dist/clients/AllianceClient.d.ts +2 -0
  5. package/dist/clients/AllianceClient.d.ts.map +1 -1
  6. package/dist/clients/AssetsClient.d.ts +2 -0
  7. package/dist/clients/AssetsClient.d.ts.map +1 -1
  8. package/dist/clients/BaseEsiClient.d.ts +1 -0
  9. package/dist/clients/BaseEsiClient.d.ts.map +1 -1
  10. package/dist/clients/CalendarClient.d.ts +2 -0
  11. package/dist/clients/CalendarClient.d.ts.map +1 -1
  12. package/dist/clients/CharacterClient.d.ts +8 -0
  13. package/dist/clients/CharacterClient.d.ts.map +1 -1
  14. package/dist/clients/ClonesClient.d.ts +1 -0
  15. package/dist/clients/ClonesClient.d.ts.map +1 -1
  16. package/dist/clients/ContactsClient.d.ts +6 -0
  17. package/dist/clients/ContactsClient.d.ts.map +1 -1
  18. package/dist/clients/ContractsClient.d.ts +3 -0
  19. package/dist/clients/ContractsClient.d.ts.map +1 -1
  20. package/dist/clients/CorporationsClient.d.ts +17 -0
  21. package/dist/clients/CorporationsClient.d.ts.map +1 -1
  22. package/dist/clients/FittingsClient.d.ts +1 -0
  23. package/dist/clients/FittingsClient.d.ts.map +1 -1
  24. package/dist/clients/FleetClient.d.ts +2 -0
  25. package/dist/clients/FleetClient.d.ts.map +1 -1
  26. package/dist/clients/IndustryClient.d.ts +8 -0
  27. package/dist/clients/IndustryClient.d.ts.map +1 -1
  28. package/dist/clients/KillmailsClient.d.ts +2 -0
  29. package/dist/clients/KillmailsClient.d.ts.map +1 -1
  30. package/dist/clients/LoyaltyClient.d.ts +2 -0
  31. package/dist/clients/LoyaltyClient.d.ts.map +1 -1
  32. package/dist/clients/MailClient.d.ts +5 -0
  33. package/dist/clients/MailClient.d.ts.map +1 -1
  34. package/dist/clients/MarketClient.d.ts +6 -0
  35. package/dist/clients/MarketClient.d.ts.map +1 -1
  36. package/dist/clients/PiClient.d.ts +2 -0
  37. package/dist/clients/PiClient.d.ts.map +1 -1
  38. package/dist/clients/SkillsClient.d.ts +1 -0
  39. package/dist/clients/SkillsClient.d.ts.map +1 -1
  40. package/dist/clients/WalletClient.d.ts +4 -0
  41. package/dist/clients/WalletClient.d.ts.map +1 -1
  42. package/dist/clients/WarsClient.d.ts +2 -0
  43. package/dist/clients/WarsClient.d.ts.map +1 -1
  44. package/dist/core/ApiClient.d.ts +4 -0
  45. package/dist/core/ApiClient.d.ts.map +1 -1
  46. package/dist/core/ApiClientBuilder.d.ts +3 -1
  47. package/dist/core/ApiClientBuilder.d.ts.map +1 -1
  48. package/dist/core/constants.d.ts +2 -2
  49. package/dist/core/endpoints/EndpointDefinition.d.ts +2 -2
  50. package/dist/core/endpoints/EndpointDefinition.d.ts.map +1 -1
  51. package/dist/core/endpoints/createClient.d.ts +2 -2
  52. package/dist/core/endpoints/createClient.d.ts.map +1 -1
  53. package/dist/core/logger/NoopLogger.d.ts +3 -0
  54. package/dist/core/logger/NoopLogger.d.ts.map +1 -0
  55. package/dist/core/pagination/AsyncPaginationIterator.d.ts +1 -0
  56. package/dist/core/pagination/AsyncPaginationIterator.d.ts.map +1 -1
  57. package/dist/core/rateLimiter/RateLimiter.d.ts +6 -0
  58. package/dist/core/rateLimiter/RateLimiter.d.ts.map +1 -1
  59. package/dist/core/requestPipeline/headers.d.ts.map +1 -1
  60. package/dist/core/requestPipeline/statusHandling.d.ts.map +1 -1
  61. package/dist/errors.js.map +1 -1
  62. package/dist/errors.mjs.map +1 -1
  63. package/dist/index.d.ts +4 -3
  64. package/dist/index.d.ts.map +1 -1
  65. package/dist/index.js +644 -27
  66. package/dist/index.js.map +1 -1
  67. package/dist/index.mjs +642 -27
  68. package/dist/index.mjs.map +1 -1
  69. package/dist/schemas/common.d.ts +11 -1
  70. package/dist/schemas/common.d.ts.map +1 -1
  71. package/dist/schemas/index.js +6 -1
  72. package/dist/schemas/index.js.map +1 -1
  73. package/dist/schemas/index.mjs +6 -1
  74. package/dist/schemas/index.mjs.map +1 -1
  75. package/dist/sde/index.js.map +1 -1
  76. package/dist/sde/index.mjs.map +1 -1
  77. package/dist/sde/memory.js.map +1 -1
  78. package/dist/sde/memory.mjs.map +1 -1
  79. package/dist/testing/index.js.map +1 -1
  80. package/dist/testing/index.mjs.map +1 -1
  81. package/dist/types/generated/esi-spec.generated.d.ts +12 -12
  82. package/dist/types/generated/esi-spec.generated.d.ts.map +1 -1
  83. package/package.json +303 -289
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/core/logger/logger.ts","../../src/core/util/error.ts","../../src/testing/TestDataFactory.ts"],"sourcesContent":["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","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","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport {\r\n AllianceInfo,\r\n CharacterInfo,\r\n CorporationInfo,\r\n AllianceContact,\r\n AllianceContactLabel,\r\n CharacterPortrait,\r\n CharacterAttributes,\r\n CharacterSkill,\r\n MarketOrder,\r\n WalletTransaction,\r\n Contract,\r\n SovereigntySystem,\r\n SovereigntyHub,\r\n OrbitalSkyhook,\r\n RaidableSkyhook,\r\n MercenaryDen,\r\n MercenaryTacticalOperation,\r\n AccessListEntry,\r\n} from '../types/api-responses';\r\nimport { EsiError } from '../core/util/error';\r\n\r\nexport class TestDataFactory {\r\n // Alliance test data\r\n static createAllianceInfo(\r\n overrides: Partial<AllianceInfo> = {},\r\n ): AllianceInfo {\r\n return {\r\n alliance_id: 99005338,\r\n name: 'Goonswarm Federation',\r\n ticker: 'CONDI',\r\n creator_id: 1689391488,\r\n creator_corporation_id: 1344654522,\r\n executor_corporation_id: 1344654522,\r\n date_founded: '2010-06-01T00:00:00Z',\r\n faction_id: 500001,\r\n ...overrides,\r\n };\r\n }\r\n\r\n static createAllianceContact(\r\n overrides: Partial<AllianceContact> = {},\r\n ): AllianceContact {\r\n return {\r\n contact_id: 1689391488,\r\n contact_type: 'character',\r\n standing: 10.0,\r\n label_ids: [1, 2],\r\n ...overrides,\r\n };\r\n }\r\n\r\n static createAllianceContactLabel(\r\n overrides: Partial<AllianceContactLabel> = {},\r\n ): AllianceContactLabel {\r\n return {\r\n label_id: 1,\r\n label_name: 'Friendly',\r\n ...overrides,\r\n };\r\n }\r\n\r\n // Character test data\r\n static createCharacterInfo(\r\n overrides: Partial<CharacterInfo> = {},\r\n ): CharacterInfo {\r\n return {\r\n character_id: 1689391488,\r\n name: 'Test Character',\r\n corporation_id: 1344654522,\r\n alliance_id: 99005338,\r\n bloodline_id: 4,\r\n race_id: 1,\r\n gender: 'male',\r\n birthday: '2003-05-06T00:00:00Z',\r\n description: 'A test character for BDD scenarios',\r\n security_status: 5.0,\r\n title: 'Test Pilot',\r\n ...overrides,\r\n };\r\n }\r\n\r\n static createCharacterPortrait(\r\n characterId: number = 1689391488,\r\n ): CharacterPortrait {\r\n return {\r\n px64x64: `https://images.evetech.net/characters/${characterId}/portrait?size=64`,\r\n px128x128: `https://images.evetech.net/characters/${characterId}/portrait?size=128`,\r\n px256x256: `https://images.evetech.net/characters/${characterId}/portrait?size=256`,\r\n px512x512: `https://images.evetech.net/characters/${characterId}/portrait?size=512`,\r\n };\r\n }\r\n\r\n static createCharacterAttributes(\r\n overrides: Partial<CharacterAttributes> = {},\r\n ): CharacterAttributes {\r\n return {\r\n charisma: 20,\r\n intelligence: 24,\r\n memory: 21,\r\n perception: 23,\r\n willpower: 22,\r\n bonus_remaps: 2,\r\n last_remap_date: '2023-01-01T00:00:00Z',\r\n accrued_remap_cooldown_date: '2024-01-01T00:00:00Z',\r\n ...overrides,\r\n };\r\n }\r\n\r\n static createCharacterSkill(\r\n overrides: Partial<CharacterSkill> = {},\r\n ): CharacterSkill {\r\n return {\r\n skill_id: 3300,\r\n skillpoints_in_skill: 256000,\r\n trained_skill_level: 5,\r\n active_skill_level: 5,\r\n ...overrides,\r\n };\r\n }\r\n\r\n static createCharacterRoles(overrides: Record<string, any> = {}): any {\r\n return {\r\n roles: ['Director'],\r\n roles_at_base: [],\r\n roles_at_hq: ['Director'],\r\n roles_at_other: [],\r\n ...overrides,\r\n };\r\n }\r\n\r\n static createCorporationHistoryEntry(\r\n overrides: Record<string, any> = {},\r\n ): any {\r\n return {\r\n corporation_id: 1344654522,\r\n is_deleted: false,\r\n record_id: 1,\r\n start_date: '2020-01-01T00:00:00Z',\r\n ...overrides,\r\n };\r\n }\r\n\r\n static createCharacterMedal(overrides: Record<string, any> = {}): any {\r\n return {\r\n medal_id: 1,\r\n title: 'Test Medal',\r\n description: 'A test medal for demonstration',\r\n corporation_id: 1344654522,\r\n date: '2023-01-01T00:00:00Z',\r\n issuer_id: 1689391489,\r\n reason: 'Outstanding service',\r\n ...overrides,\r\n };\r\n }\r\n\r\n static createCharacterNotification(overrides: Record<string, any> = {}): any {\r\n return {\r\n notification_id: 1000001,\r\n sender_id: 1689391489,\r\n sender_type: 'character',\r\n text: 'Test notification',\r\n timestamp: '2024-01-15T12:00:00Z',\r\n type: 'AllWarDeclaredMsg',\r\n is_read: false,\r\n ...overrides,\r\n };\r\n }\r\n\r\n // Market test data\r\n static createMarketPrice(overrides: Record<string, any> = {}): any {\r\n return {\r\n type_id: 34,\r\n average_price: 4.5,\r\n adjusted_price: 4.55,\r\n ...overrides,\r\n };\r\n }\r\n\r\n static createMarketHistory(overrides: Record<string, any> = {}): any {\r\n return {\r\n date: '2024-01-15',\r\n volume: 1000000000,\r\n order_count: 2500,\r\n lowest: 4.2,\r\n highest: 4.8,\r\n average: 4.5,\r\n ...overrides,\r\n };\r\n }\r\n\r\n static createCharacterMarketOrder(overrides: Record<string, any> = {}): any {\r\n return {\r\n order_id: 5000000001,\r\n type_id: 34,\r\n region_id: 10000002,\r\n location_id: 60003760,\r\n range: 'region',\r\n volume_total: 1000000,\r\n volume_remain: 750000,\r\n min_volume: 1,\r\n price: 4.5,\r\n is_buy_order: true,\r\n is_corporation: false,\r\n duration: 90,\r\n issued: '2024-01-15T12:00:00Z',\r\n ...overrides,\r\n };\r\n }\r\n\r\n static createCharacterOrderHistory(overrides: Record<string, any> = {}): any {\r\n return {\r\n order_id: 5000000001,\r\n type_id: 34,\r\n region_id: 10000002,\r\n location_id: 60003760,\r\n range: 'region',\r\n volume_total: 1000000,\r\n volume_remain: 0,\r\n min_volume: 1,\r\n price: 4.5,\r\n is_buy_order: true,\r\n is_corporation: false,\r\n duration: 90,\r\n issued: '2024-01-10T12:00:00Z',\r\n state: 'expired',\r\n ...overrides,\r\n };\r\n }\r\n\r\n // Universe test data\r\n static createSolarSystem(overrides: Record<string, any> = {}): any {\r\n return {\r\n system_id: 30000142,\r\n name: 'Jita',\r\n constellation_id: 20000020,\r\n security_status: 0.9459991455078125,\r\n star_id: 40000001,\r\n stargates: [50000001, 50000002],\r\n stations: [60003760, 60003761],\r\n planets: [\r\n { planet_id: 40000001, moons: [40000002, 40000003] },\r\n { planet_id: 40000004, moons: [40000005] },\r\n ],\r\n ...overrides,\r\n };\r\n }\r\n\r\n static createStation(overrides: Record<string, any> = {}): any {\r\n return {\r\n station_id: 60003760,\r\n name: 'Jita IV - Moon 4 - Caldari Navy Assembly Plant',\r\n owner: 1000035,\r\n type_id: 52678,\r\n race_id: 1,\r\n system_id: 30000142,\r\n reprocessing_efficiency: 0.5,\r\n reprocessing_stations_take: 0.05,\r\n max_dockable_ship_volume: 50000000,\r\n office_rental_cost: 10000000,\r\n services: [\r\n 'bounty-missions',\r\n 'courier-missions',\r\n 'interbus',\r\n 'reprocessing-plant',\r\n 'market',\r\n 'stock-exchange',\r\n ],\r\n ...overrides,\r\n };\r\n }\r\n\r\n static createStructure(overrides: Record<string, any> = {}): any {\r\n return {\r\n structure_id: 1021975535893,\r\n name: 'Test Citadel',\r\n owner_id: 1689391488,\r\n solar_system_id: 30000142,\r\n type_id: 35832,\r\n position: { x: 1000000000, y: 2000000000, z: 3000000000 },\r\n ...overrides,\r\n };\r\n }\r\n\r\n static createItemType(overrides: Record<string, any> = {}): any {\r\n return {\r\n type_id: 34,\r\n name: 'Tritanium',\r\n description: 'The most common ore type in the known universe.',\r\n group_id: 18,\r\n category_id: 4,\r\n market_group_id: 1857,\r\n mass: 1.0,\r\n volume: 0.01,\r\n capacity: 0.0,\r\n portion_size: 1,\r\n radius: 1.0,\r\n published: true,\r\n ...overrides,\r\n };\r\n }\r\n\r\n static createItemGroup(overrides: Record<string, any> = {}): any {\r\n return {\r\n group_id: 18,\r\n name: 'Mineral',\r\n category_id: 4,\r\n published: true,\r\n types: [34, 35, 36, 37, 38, 39, 40, 11399],\r\n ...overrides,\r\n };\r\n }\r\n\r\n static createStar(overrides: Record<string, any> = {}): any {\r\n return {\r\n star_id: 40000001,\r\n name: 'Jita - Star',\r\n type_id: 3802,\r\n solar_system_id: 30000142,\r\n age: 4600000000,\r\n luminosity: 0.06575,\r\n radius: 62140000,\r\n spectral_class: 'K2 V',\r\n temperature: 4567,\r\n ...overrides,\r\n };\r\n }\r\n\r\n static createPlanet(overrides: Record<string, any> = {}): any {\r\n return {\r\n planet_id: 40000004,\r\n name: 'Jita IV',\r\n type_id: 11,\r\n system_id: 30000142,\r\n position: { x: 150000000000, y: 0, z: 0 },\r\n ...overrides,\r\n };\r\n }\r\n\r\n static createSearchResults(overrides: Record<string, any> = {}): any {\r\n return {\r\n systems: [],\r\n stations: [],\r\n structures: [],\r\n characters: [],\r\n corporations: [],\r\n alliances: [],\r\n ...overrides,\r\n };\r\n }\r\n\r\n static createEntityName(overrides: Record<string, any> = {}): any {\r\n return {\r\n id: 30000142,\r\n name: 'Jita',\r\n category: 'solar_system',\r\n ...overrides,\r\n };\r\n }\r\n\r\n // Corporation test data\r\n static createCorporationMemberRoles(\r\n overrides: Record<string, any> = {},\r\n ): any {\r\n return {\r\n character_id: 1689391488,\r\n roles: ['Director', 'Personnel_Manager'],\r\n grantable_roles: ['Hangar_Take_1', 'Hangar_Take_2'],\r\n roles_at_hq: ['Director'],\r\n roles_at_base: [],\r\n roles_at_other: [],\r\n ...overrides,\r\n };\r\n }\r\n\r\n static createCorporationAsset(overrides: Record<string, any> = {}): any {\r\n return {\r\n item_id: 1000000000001,\r\n type_id: 587,\r\n quantity: 100,\r\n location_id: 60003760,\r\n location_flag: 'CorpSAG1',\r\n location_type: 'station',\r\n ...overrides,\r\n };\r\n }\r\n\r\n static createCorporationStructure(overrides: Record<string, any> = {}): any {\r\n return {\r\n structure_id: 1021975535893,\r\n type_id: 35832,\r\n system_id: 30000142,\r\n profile_id: 101853,\r\n fuel_expires: '2024-02-01T12:00:00Z',\r\n state_timer_start: '2024-01-15T12:00:00Z',\r\n state_timer_end: '2024-01-22T12:00:00Z',\r\n state: 'shield_vulnerable',\r\n ...overrides,\r\n };\r\n }\r\n\r\n static createCorporationWallet(overrides: Record<string, any> = {}): any {\r\n return {\r\n division: 1,\r\n balance: 1000000000.0,\r\n ...overrides,\r\n };\r\n }\r\n\r\n static createWalletJournalEntry(overrides: Record<string, any> = {}): any {\r\n return {\r\n id: 1000000001,\r\n date: '2024-01-15T12:00:00Z',\r\n ref_type: 'market_transaction',\r\n first_party_id: 1344654522,\r\n amount: 1000000.0,\r\n balance: 1000000000.0,\r\n reason: 'Market transaction',\r\n description: 'Sold items on market',\r\n ...overrides,\r\n };\r\n }\r\n\r\n // Fleet test data\r\n static createFleetInfo(overrides: Record<string, any> = {}): any {\r\n return {\r\n fleet_id: 1234567890,\r\n fleet_boss_id: 1689391488,\r\n is_free_move: false,\r\n is_registered: true,\r\n is_voice_enabled: true,\r\n motd: 'Fleet operations in progress',\r\n ...overrides,\r\n };\r\n }\r\n\r\n static createFleetMember(overrides: Record<string, any> = {}): any {\r\n return {\r\n character_id: 1689391488,\r\n role: 'fleet_commander',\r\n ship_type_id: 17918,\r\n solar_system_id: 30000142,\r\n station_id: 60003760,\r\n ...overrides,\r\n };\r\n }\r\n\r\n static createFleetWing(overrides: Record<string, any> = {}): any {\r\n return {\r\n wing_id: 987654321,\r\n name: 'Wing 1',\r\n squads: [{ squad_id: 123456789, name: 'Squad 1' }],\r\n ...overrides,\r\n };\r\n }\r\n\r\n // Industry test data\r\n static createIndustryJob(overrides: Record<string, any> = {}): any {\r\n return {\r\n job_id: 1000001,\r\n installer_id: 1689391488,\r\n facility_id: 60003760,\r\n activity_id: 1,\r\n blueprint_id: 1000000001,\r\n blueprint_type_id: 17918,\r\n product_type_id: 17918,\r\n runs: 1,\r\n status: 'active',\r\n start_date: '2024-01-15T12:00:00Z',\r\n end_date: '2024-01-16T12:00:00Z',\r\n ...overrides,\r\n };\r\n }\r\n\r\n static createBlueprint(overrides: Record<string, any> = {}): any {\r\n return {\r\n item_id: 1000000001,\r\n type_id: 17918,\r\n location_id: 60003760,\r\n location_flag: 'Hangar',\r\n quantity: -2,\r\n time_efficiency: 10,\r\n material_efficiency: 10,\r\n runs: 100,\r\n ...overrides,\r\n };\r\n }\r\n\r\n static createCharacterAsset(overrides: Record<string, any> = {}): any {\r\n return {\r\n item_id: 1000000002,\r\n type_id: 34,\r\n quantity: 1000000,\r\n location_id: 60003760,\r\n location_flag: 'Hangar',\r\n location_type: 'station',\r\n ...overrides,\r\n };\r\n }\r\n\r\n static createCharacterLocation(overrides: Record<string, any> = {}): any {\r\n return {\r\n solar_system_id: 30000142,\r\n station_id: 60003760,\r\n structure_id: undefined,\r\n ...overrides,\r\n };\r\n }\r\n\r\n static createCharacterSkills(overrides: Record<string, any> = {}): any {\r\n return {\r\n skills: [\r\n {\r\n skill_id: 3300,\r\n skillpoints_in_skill: 256000,\r\n trained_skill_level: 5,\r\n active_skill_level: 5,\r\n },\r\n {\r\n skill_id: 3301,\r\n skillpoints_in_skill: 128000,\r\n trained_skill_level: 4,\r\n active_skill_level: 4,\r\n },\r\n ],\r\n total_sp: 384000,\r\n unallocated_sp: 0,\r\n ...overrides,\r\n };\r\n }\r\n\r\n // Corporation test data\r\n static createCorporationInfo(\r\n overrides: Partial<CorporationInfo> = {},\r\n ): CorporationInfo {\r\n return {\r\n corporation_id: 1344654522,\r\n name: 'GoonWaffe',\r\n ticker: 'GEWNS',\r\n ceo_id: 1689391488,\r\n creator_id: 1689391488,\r\n member_count: 15000,\r\n tax_rate: 0.1,\r\n alliance_id: 99005338,\r\n date_founded: '2003-05-06T00:00:00Z',\r\n description: 'The founding corporation of Goonswarm Federation',\r\n home_station_id: 60003760,\r\n shares: 1000,\r\n // eslint-disable-next-line sonarjs/no-clear-text-protocols\r\n url: 'http://www.goonfleet.com/',\r\n faction_id: 500001,\r\n war_eligible: true,\r\n ...overrides,\r\n };\r\n }\r\n\r\n // Market test data\r\n static createMarketOrder(overrides: Partial<MarketOrder> = {}): MarketOrder {\r\n return {\r\n order_id: 123456789,\r\n type_id: 34, // Tritanium\r\n location_id: 60003760, // Jita 4-4\r\n volume_total: 1000000,\r\n volume_remain: 500000,\r\n min_volume: 1,\r\n price: 5.5,\r\n is_buy_order: false,\r\n system_id: 30000142,\r\n duration: 90,\r\n issued: '2023-12-01T12:00:00Z',\r\n range: 'region',\r\n ...overrides,\r\n };\r\n }\r\n\r\n // Wallet test data\r\n static createWalletTransaction(\r\n overrides: Partial<WalletTransaction> = {},\r\n ): WalletTransaction {\r\n return {\r\n transaction_id: 123456789,\r\n date: '2023-12-01T12:00:00Z',\r\n type_id: 34,\r\n location_id: 60003760,\r\n unit_price: 5.5,\r\n quantity: 1000,\r\n client_id: 1689391488,\r\n is_buy: false,\r\n is_personal: true,\r\n journal_ref_id: 987654321,\r\n ...overrides,\r\n };\r\n }\r\n\r\n // Contract test data\r\n static createContract(overrides: Partial<Contract> = {}): Contract {\r\n return {\r\n contract_id: 123456789,\r\n issuer_id: 1689391488,\r\n issuer_corporation_id: 1344654522,\r\n assignee_id: 987654321,\r\n start_location_id: 60003760,\r\n end_location_id: 60008494,\r\n type: 'courier',\r\n status: 'outstanding',\r\n title: 'Test Courier Contract',\r\n for_corporation: false,\r\n availability: 'public',\r\n date_issued: '2023-12-01T12:00:00Z',\r\n date_expired: '2023-12-08T12:00:00Z',\r\n days_to_complete: 3,\r\n price: 1000000,\r\n reward: 500000,\r\n collateral: 10000000,\r\n volume: 1000,\r\n ...overrides,\r\n };\r\n }\r\n\r\n // Sovereignty test data (Equinox)\r\n static createSovereigntySystem(\r\n overrides: Partial<SovereigntySystem> = {},\r\n ): SovereigntySystem {\r\n return {\r\n solar_systems: [\r\n {\r\n solar_system_id: 30000142,\r\n claim: {\r\n alliance: {\r\n alliance_id: 99005338,\r\n corporation_id: 1344654522,\r\n claimed_since: '2020-10-08T00:38:16Z',\r\n is_capital_system: false,\r\n development: {\r\n activity_defense_multiplier: 4.5,\r\n military_level: 5,\r\n industrial_level: 3,\r\n strategic_level: 1,\r\n },\r\n },\r\n },\r\n },\r\n ],\r\n ...overrides,\r\n };\r\n }\r\n\r\n static createSovereigntyHub(\r\n overrides: Partial<SovereigntyHub> = {},\r\n ): SovereigntyHub {\r\n return {\r\n structure_id: 100000001,\r\n system_id: 30000142,\r\n corporation_id: 98000002,\r\n alliance_id: 99000006,\r\n online: true,\r\n remaining_reagents: 500,\r\n installed_upgrades: [1, 2, 3],\r\n ...overrides,\r\n };\r\n }\r\n\r\n static createOrbitalSkyhook(\r\n overrides: Partial<OrbitalSkyhook> = {},\r\n ): OrbitalSkyhook {\r\n return {\r\n structure_id: 200000001,\r\n system_id: 30000142,\r\n corporation_id: 98000002,\r\n alliance_id: 99000006,\r\n online: true,\r\n reagent_silo_capacity: 1000,\r\n reagent_silo_level: 750,\r\n ...overrides,\r\n };\r\n }\r\n\r\n static createRaidableSkyhook(\r\n overrides: Partial<RaidableSkyhook> = {},\r\n ): RaidableSkyhook {\r\n return {\r\n structure_id: 200000001,\r\n system_id: 30000142,\r\n corporation_id: 98000002,\r\n alliance_id: 99000006,\r\n raidable_at: '2026-05-20T12:00:00Z',\r\n is_raidable: true,\r\n ...overrides,\r\n };\r\n }\r\n\r\n static createMercenaryDen(\r\n overrides: Partial<MercenaryDen> = {},\r\n ): MercenaryDen {\r\n return {\r\n den_id: 5001,\r\n system_id: 30000142,\r\n constellation_id: 20000125,\r\n region_id: 10000002,\r\n development_level: 3,\r\n anarchy_level: 2,\r\n active_operations: 1,\r\n ...overrides,\r\n };\r\n }\r\n\r\n static createMercenaryTacticalOperation(\r\n overrides: Partial<MercenaryTacticalOperation> = {},\r\n ): MercenaryTacticalOperation {\r\n return {\r\n operation_id: 7001,\r\n den_id: 5001,\r\n system_id: 30000142,\r\n site_type: 'assault',\r\n status: 'active',\r\n started_at: '2026-05-20T10:00:00Z',\r\n expires_at: '2026-05-20T22:00:00Z',\r\n ...overrides,\r\n };\r\n }\r\n\r\n static createAccessListEntry(\r\n overrides: Partial<AccessListEntry> = {},\r\n ): AccessListEntry {\r\n return {\r\n entity_id: 1689391488,\r\n entity_type: 'character',\r\n access_type: 'allowed',\r\n ...overrides,\r\n };\r\n }\r\n\r\n // Error test data\r\n static createError(statusCode: number, message?: string): EsiError {\r\n const defaultMessages: Record<number, string> = {\r\n 400: 'Bad request',\r\n 401: 'Unauthorized',\r\n 403: 'Forbidden',\r\n 404: 'Resource not found',\r\n 429: 'Rate limit exceeded',\r\n 500: 'Internal server error',\r\n 503: 'Service unavailable',\r\n };\r\n return new EsiError(\r\n statusCode,\r\n // eslint-disable-next-line security/detect-object-injection\r\n message || defaultMessages[statusCode] || 'Unknown error',\r\n );\r\n }\r\n\r\n // Test scenarios\r\n static createTestScenarios() {\r\n return {\r\n alliances: [\r\n { id: 99005338, name: 'Goonswarm Federation', ticker: 'CONDI' },\r\n { id: 99000001, name: 'Test Alliance Please Ignore', ticker: 'TEST' },\r\n { id: 99000002, name: 'Brave Collective', ticker: 'BRAVE' },\r\n { id: 99000003, name: 'Pandemic Legion', ticker: 'PL' },\r\n { id: 99000004, name: 'Northern Coalition.', ticker: 'NC.' },\r\n ],\r\n characters: [\r\n {\r\n id: 1689391488,\r\n name: 'Test Character',\r\n corp: 1344654522,\r\n alliance: 99005338,\r\n },\r\n {\r\n id: 123456789,\r\n name: 'Demo Pilot',\r\n corp: 987654321,\r\n alliance: 99000001,\r\n },\r\n {\r\n id: 111111111,\r\n name: 'Alpha Tester',\r\n corp: 222222222,\r\n alliance: 99000002,\r\n },\r\n {\r\n id: 333333333,\r\n name: 'Beta User',\r\n corp: 444444444,\r\n alliance: 99000003,\r\n },\r\n {\r\n id: 555555555,\r\n name: 'Gamma Pilot',\r\n corp: 666666666,\r\n alliance: 99000004,\r\n },\r\n ],\r\n corporations: [\r\n {\r\n id: 1344654522,\r\n name: 'GoonWaffe',\r\n ticker: 'GEWNS',\r\n alliance: 99005338,\r\n },\r\n {\r\n id: 987654321,\r\n name: 'Test Corp Please Ignore',\r\n ticker: 'TCPI',\r\n alliance: 99000001,\r\n },\r\n {\r\n id: 222222222,\r\n name: 'Brave Newbies Inc.',\r\n ticker: 'BNI',\r\n alliance: 99000002,\r\n },\r\n {\r\n id: 444444444,\r\n name: 'Sniggerdly',\r\n ticker: 'SNIGG',\r\n alliance: 99000003,\r\n },\r\n {\r\n id: 666666666,\r\n name: 'Tactical Narcotics Team',\r\n ticker: 'TNT',\r\n alliance: 99000004,\r\n },\r\n ],\r\n errorScenarios: [\r\n { statusCode: 0, label: 'network_error', probability: 0.1 },\r\n { statusCode: 429, label: 'rate_limited', probability: 0.05 },\r\n { statusCode: 500, label: 'server_error', probability: 0.02 },\r\n { statusCode: 504, label: 'timeout', probability: 0.03 },\r\n { statusCode: 404, label: 'not_found', probability: 0.01 },\r\n ],\r\n };\r\n }\r\n\r\n // Performance test data\r\n static createPerformanceTestData(\r\n size: 'small' | 'medium' | 'large' = 'medium',\r\n ) {\r\n const sizes = {\r\n small: { alliances: 5, characters: 20, corporations: 10 },\r\n medium: { alliances: 20, characters: 100, corporations: 50 },\r\n large: { alliances: 100, characters: 1000, corporations: 500 },\r\n };\r\n\r\n // eslint-disable-next-line security/detect-object-injection\r\n const config = sizes[size];\r\n const data = {\r\n alliances: [] as AllianceInfo[],\r\n characters: [] as CharacterInfo[],\r\n corporations: [] as CorporationInfo[],\r\n };\r\n\r\n // Generate alliances\r\n for (let i = 1; i <= config.alliances; i++) {\r\n data.alliances.push(\r\n this.createAllianceInfo({\r\n alliance_id: 99000000 + i,\r\n name: `Test Alliance ${i}`,\r\n ticker: `TST${i.toString().padStart(2, '0')}`,\r\n creator_id: 1000000 + i,\r\n }),\r\n );\r\n }\r\n\r\n // Generate corporations\r\n for (let i = 1; i <= config.corporations; i++) {\r\n const allianceIndex = Math.floor(\r\n (i - 1) / (config.corporations / config.alliances),\r\n );\r\n data.corporations.push(\r\n this.createCorporationInfo({\r\n corporation_id: 2000000 + i,\r\n name: `Test Corporation ${i}`,\r\n ticker: `TC${i.toString().padStart(3, '0')}`,\r\n // eslint-disable-next-line security/detect-object-injection\r\n alliance_id: data.alliances[allianceIndex]?.alliance_id,\r\n ceo_id: 3000000 + i,\r\n }),\r\n );\r\n }\r\n\r\n // Generate characters\r\n for (let i = 1; i <= config.characters; i++) {\r\n const corpIndex = Math.floor(\r\n (i - 1) / (config.characters / config.corporations),\r\n );\r\n // eslint-disable-next-line security/detect-object-injection\r\n const corp = data.corporations[corpIndex];\r\n data.characters.push(\r\n this.createCharacterInfo({\r\n character_id: 3000000 + i,\r\n name: `Test Character ${i}`,\r\n corporation_id: corp?.corporation_id || 2000001,\r\n alliance_id: corp?.alliance_id,\r\n }),\r\n );\r\n }\r\n\r\n return data;\r\n }\r\n\r\n // Realistic test data with relationships\r\n static createRealisticTestData() {\r\n const goonswarm = this.createAllianceInfo({\r\n alliance_id: 99005338,\r\n name: 'Goonswarm Federation',\r\n ticker: 'CONDI',\r\n creator_id: 1689391488,\r\n creator_corporation_id: 1344654522,\r\n executor_corporation_id: 1344654522,\r\n date_founded: '2010-06-01T00:00:00Z',\r\n });\r\n\r\n const goonwaffe = this.createCorporationInfo({\r\n corporation_id: 1344654522,\r\n name: 'GoonWaffe',\r\n ticker: 'GEWNS',\r\n alliance_id: 99005338,\r\n ceo_id: 1689391488,\r\n creator_id: 1689391488,\r\n member_count: 15000,\r\n date_founded: '2003-05-06T00:00:00Z',\r\n });\r\n\r\n const testCharacter = this.createCharacterInfo({\r\n character_id: 1689391488,\r\n name: 'The Mittani',\r\n corporation_id: 1344654522,\r\n alliance_id: 99005338,\r\n birthday: '2003-05-06T00:00:00Z',\r\n });\r\n\r\n return {\r\n alliances: [goonswarm],\r\n corporations: [goonwaffe],\r\n characters: [testCharacter],\r\n relationships: {\r\n allianceExecutor: { alliance: 99005338, corporation: 1344654522 },\r\n corporationCEO: { corporation: 1344654522, character: 1689391488 },\r\n characterMembership: {\r\n character: 1689391488,\r\n corporation: 1344654522,\r\n alliance: 99005338,\r\n },\r\n },\r\n };\r\n }\r\n}\r\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/core/logger/logger.ts","../../src/core/util/error.ts","../../src/testing/TestDataFactory.ts"],"sourcesContent":["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","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","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n AllianceInfo,\n CharacterInfo,\n CorporationInfo,\n AllianceContact,\n AllianceContactLabel,\n CharacterPortrait,\n CharacterAttributes,\n CharacterSkill,\n MarketOrder,\n WalletTransaction,\n Contract,\n SovereigntySystem,\n SovereigntyHub,\n OrbitalSkyhook,\n RaidableSkyhook,\n MercenaryDen,\n MercenaryTacticalOperation,\n AccessListEntry,\n} from '../types/api-responses';\nimport { EsiError } from '../core/util/error';\n\nexport class TestDataFactory {\n // Alliance test data\n static createAllianceInfo(\n overrides: Partial<AllianceInfo> = {},\n ): AllianceInfo {\n return {\n alliance_id: 99005338,\n name: 'Goonswarm Federation',\n ticker: 'CONDI',\n creator_id: 1689391488,\n creator_corporation_id: 1344654522,\n executor_corporation_id: 1344654522,\n date_founded: '2010-06-01T00:00:00Z',\n faction_id: 500001,\n ...overrides,\n };\n }\n\n static createAllianceContact(\n overrides: Partial<AllianceContact> = {},\n ): AllianceContact {\n return {\n contact_id: 1689391488,\n contact_type: 'character',\n standing: 10.0,\n label_ids: [1, 2],\n ...overrides,\n };\n }\n\n static createAllianceContactLabel(\n overrides: Partial<AllianceContactLabel> = {},\n ): AllianceContactLabel {\n return {\n label_id: 1,\n label_name: 'Friendly',\n ...overrides,\n };\n }\n\n // Character test data\n static createCharacterInfo(\n overrides: Partial<CharacterInfo> = {},\n ): CharacterInfo {\n return {\n character_id: 1689391488,\n name: 'Test Character',\n corporation_id: 1344654522,\n alliance_id: 99005338,\n bloodline_id: 4,\n race_id: 1,\n gender: 'male',\n birthday: '2003-05-06T00:00:00Z',\n description: 'A test character for BDD scenarios',\n security_status: 5.0,\n title: 'Test Pilot',\n ...overrides,\n };\n }\n\n static createCharacterPortrait(\n characterId: number = 1689391488,\n ): CharacterPortrait {\n return {\n px64x64: `https://images.evetech.net/characters/${characterId}/portrait?size=64`,\n px128x128: `https://images.evetech.net/characters/${characterId}/portrait?size=128`,\n px256x256: `https://images.evetech.net/characters/${characterId}/portrait?size=256`,\n px512x512: `https://images.evetech.net/characters/${characterId}/portrait?size=512`,\n };\n }\n\n static createCharacterAttributes(\n overrides: Partial<CharacterAttributes> = {},\n ): CharacterAttributes {\n return {\n charisma: 20,\n intelligence: 24,\n memory: 21,\n perception: 23,\n willpower: 22,\n bonus_remaps: 2,\n last_remap_date: '2023-01-01T00:00:00Z',\n accrued_remap_cooldown_date: '2024-01-01T00:00:00Z',\n ...overrides,\n };\n }\n\n static createCharacterSkill(\n overrides: Partial<CharacterSkill> = {},\n ): CharacterSkill {\n return {\n skill_id: 3300,\n skillpoints_in_skill: 256000,\n trained_skill_level: 5,\n active_skill_level: 5,\n ...overrides,\n };\n }\n\n static createCharacterRoles(overrides: Record<string, any> = {}): any {\n return {\n roles: ['Director'],\n roles_at_base: [],\n roles_at_hq: ['Director'],\n roles_at_other: [],\n ...overrides,\n };\n }\n\n static createCorporationHistoryEntry(\n overrides: Record<string, any> = {},\n ): any {\n return {\n corporation_id: 1344654522,\n is_deleted: false,\n record_id: 1,\n start_date: '2020-01-01T00:00:00Z',\n ...overrides,\n };\n }\n\n static createCharacterMedal(overrides: Record<string, any> = {}): any {\n return {\n medal_id: 1,\n title: 'Test Medal',\n description: 'A test medal for demonstration',\n corporation_id: 1344654522,\n date: '2023-01-01T00:00:00Z',\n issuer_id: 1689391489,\n reason: 'Outstanding service',\n ...overrides,\n };\n }\n\n static createCharacterNotification(overrides: Record<string, any> = {}): any {\n return {\n notification_id: 1000001,\n sender_id: 1689391489,\n sender_type: 'character',\n text: 'Test notification',\n timestamp: '2024-01-15T12:00:00Z',\n type: 'AllWarDeclaredMsg',\n is_read: false,\n ...overrides,\n };\n }\n\n // Market test data\n static createMarketPrice(overrides: Record<string, any> = {}): any {\n return {\n type_id: 34,\n average_price: 4.5,\n adjusted_price: 4.55,\n ...overrides,\n };\n }\n\n static createMarketHistory(overrides: Record<string, any> = {}): any {\n return {\n date: '2024-01-15',\n volume: 1000000000,\n order_count: 2500,\n lowest: 4.2,\n highest: 4.8,\n average: 4.5,\n ...overrides,\n };\n }\n\n static createCharacterMarketOrder(overrides: Record<string, any> = {}): any {\n return {\n order_id: 5000000001,\n type_id: 34,\n region_id: 10000002,\n location_id: 60003760,\n range: 'region',\n volume_total: 1000000,\n volume_remain: 750000,\n min_volume: 1,\n price: 4.5,\n is_buy_order: true,\n is_corporation: false,\n duration: 90,\n issued: '2024-01-15T12:00:00Z',\n ...overrides,\n };\n }\n\n static createCharacterOrderHistory(overrides: Record<string, any> = {}): any {\n return {\n order_id: 5000000001,\n type_id: 34,\n region_id: 10000002,\n location_id: 60003760,\n range: 'region',\n volume_total: 1000000,\n volume_remain: 0,\n min_volume: 1,\n price: 4.5,\n is_buy_order: true,\n is_corporation: false,\n duration: 90,\n issued: '2024-01-10T12:00:00Z',\n state: 'expired',\n ...overrides,\n };\n }\n\n // Universe test data\n static createSolarSystem(overrides: Record<string, any> = {}): any {\n return {\n system_id: 30000142,\n name: 'Jita',\n constellation_id: 20000020,\n security_status: 0.9459991455078125,\n star_id: 40000001,\n stargates: [50000001, 50000002],\n stations: [60003760, 60003761],\n planets: [\n { planet_id: 40000001, moons: [40000002, 40000003] },\n { planet_id: 40000004, moons: [40000005] },\n ],\n ...overrides,\n };\n }\n\n static createStation(overrides: Record<string, any> = {}): any {\n return {\n station_id: 60003760,\n name: 'Jita IV - Moon 4 - Caldari Navy Assembly Plant',\n owner: 1000035,\n type_id: 52678,\n race_id: 1,\n system_id: 30000142,\n reprocessing_efficiency: 0.5,\n reprocessing_stations_take: 0.05,\n max_dockable_ship_volume: 50000000,\n office_rental_cost: 10000000,\n services: [\n 'bounty-missions',\n 'courier-missions',\n 'interbus',\n 'reprocessing-plant',\n 'market',\n 'stock-exchange',\n ],\n ...overrides,\n };\n }\n\n static createStructure(overrides: Record<string, any> = {}): any {\n return {\n structure_id: 1021975535893,\n name: 'Test Citadel',\n owner_id: 1689391488,\n solar_system_id: 30000142,\n type_id: 35832,\n position: { x: 1000000000, y: 2000000000, z: 3000000000 },\n ...overrides,\n };\n }\n\n static createItemType(overrides: Record<string, any> = {}): any {\n return {\n type_id: 34,\n name: 'Tritanium',\n description: 'The most common ore type in the known universe.',\n group_id: 18,\n category_id: 4,\n market_group_id: 1857,\n mass: 1.0,\n volume: 0.01,\n capacity: 0.0,\n portion_size: 1,\n radius: 1.0,\n published: true,\n ...overrides,\n };\n }\n\n static createItemGroup(overrides: Record<string, any> = {}): any {\n return {\n group_id: 18,\n name: 'Mineral',\n category_id: 4,\n published: true,\n types: [34, 35, 36, 37, 38, 39, 40, 11399],\n ...overrides,\n };\n }\n\n static createStar(overrides: Record<string, any> = {}): any {\n return {\n star_id: 40000001,\n name: 'Jita - Star',\n type_id: 3802,\n solar_system_id: 30000142,\n age: 4600000000,\n luminosity: 0.06575,\n radius: 62140000,\n spectral_class: 'K2 V',\n temperature: 4567,\n ...overrides,\n };\n }\n\n static createPlanet(overrides: Record<string, any> = {}): any {\n return {\n planet_id: 40000004,\n name: 'Jita IV',\n type_id: 11,\n system_id: 30000142,\n position: { x: 150000000000, y: 0, z: 0 },\n ...overrides,\n };\n }\n\n static createSearchResults(overrides: Record<string, any> = {}): any {\n return {\n systems: [],\n stations: [],\n structures: [],\n characters: [],\n corporations: [],\n alliances: [],\n ...overrides,\n };\n }\n\n static createEntityName(overrides: Record<string, any> = {}): any {\n return {\n id: 30000142,\n name: 'Jita',\n category: 'solar_system',\n ...overrides,\n };\n }\n\n // Corporation test data\n static createCorporationMemberRoles(\n overrides: Record<string, any> = {},\n ): any {\n return {\n character_id: 1689391488,\n roles: ['Director', 'Personnel_Manager'],\n grantable_roles: ['Hangar_Take_1', 'Hangar_Take_2'],\n roles_at_hq: ['Director'],\n roles_at_base: [],\n roles_at_other: [],\n ...overrides,\n };\n }\n\n static createCorporationAsset(overrides: Record<string, any> = {}): any {\n return {\n item_id: 1000000000001,\n type_id: 587,\n quantity: 100,\n location_id: 60003760,\n location_flag: 'CorpSAG1',\n location_type: 'station',\n ...overrides,\n };\n }\n\n static createCorporationStructure(overrides: Record<string, any> = {}): any {\n return {\n structure_id: 1021975535893,\n type_id: 35832,\n system_id: 30000142,\n profile_id: 101853,\n fuel_expires: '2024-02-01T12:00:00Z',\n state_timer_start: '2024-01-15T12:00:00Z',\n state_timer_end: '2024-01-22T12:00:00Z',\n state: 'shield_vulnerable',\n ...overrides,\n };\n }\n\n static createCorporationWallet(overrides: Record<string, any> = {}): any {\n return {\n division: 1,\n balance: 1000000000.0,\n ...overrides,\n };\n }\n\n static createWalletJournalEntry(overrides: Record<string, any> = {}): any {\n return {\n id: 1000000001,\n date: '2024-01-15T12:00:00Z',\n ref_type: 'market_transaction',\n first_party_id: 1344654522,\n amount: 1000000.0,\n balance: 1000000000.0,\n reason: 'Market transaction',\n description: 'Sold items on market',\n ...overrides,\n };\n }\n\n // Fleet test data\n static createFleetInfo(overrides: Record<string, any> = {}): any {\n return {\n fleet_id: 1234567890,\n fleet_boss_id: 1689391488,\n is_free_move: false,\n is_registered: true,\n is_voice_enabled: true,\n motd: 'Fleet operations in progress',\n ...overrides,\n };\n }\n\n static createFleetMember(overrides: Record<string, any> = {}): any {\n return {\n character_id: 1689391488,\n role: 'fleet_commander',\n ship_type_id: 17918,\n solar_system_id: 30000142,\n station_id: 60003760,\n ...overrides,\n };\n }\n\n static createFleetWing(overrides: Record<string, any> = {}): any {\n return {\n wing_id: 987654321,\n name: 'Wing 1',\n squads: [{ squad_id: 123456789, name: 'Squad 1' }],\n ...overrides,\n };\n }\n\n // Industry test data\n static createIndustryJob(overrides: Record<string, any> = {}): any {\n return {\n job_id: 1000001,\n installer_id: 1689391488,\n facility_id: 60003760,\n activity_id: 1,\n blueprint_id: 1000000001,\n blueprint_type_id: 17918,\n product_type_id: 17918,\n runs: 1,\n status: 'active',\n start_date: '2024-01-15T12:00:00Z',\n end_date: '2024-01-16T12:00:00Z',\n ...overrides,\n };\n }\n\n static createBlueprint(overrides: Record<string, any> = {}): any {\n return {\n item_id: 1000000001,\n type_id: 17918,\n location_id: 60003760,\n location_flag: 'Hangar',\n quantity: -2,\n time_efficiency: 10,\n material_efficiency: 10,\n runs: 100,\n ...overrides,\n };\n }\n\n static createCharacterAsset(overrides: Record<string, any> = {}): any {\n return {\n item_id: 1000000002,\n type_id: 34,\n quantity: 1000000,\n location_id: 60003760,\n location_flag: 'Hangar',\n location_type: 'station',\n ...overrides,\n };\n }\n\n static createCharacterLocation(overrides: Record<string, any> = {}): any {\n return {\n solar_system_id: 30000142,\n station_id: 60003760,\n structure_id: undefined,\n ...overrides,\n };\n }\n\n static createCharacterSkills(overrides: Record<string, any> = {}): any {\n return {\n skills: [\n {\n skill_id: 3300,\n skillpoints_in_skill: 256000,\n trained_skill_level: 5,\n active_skill_level: 5,\n },\n {\n skill_id: 3301,\n skillpoints_in_skill: 128000,\n trained_skill_level: 4,\n active_skill_level: 4,\n },\n ],\n total_sp: 384000,\n unallocated_sp: 0,\n ...overrides,\n };\n }\n\n // Corporation test data\n static createCorporationInfo(\n overrides: Partial<CorporationInfo> = {},\n ): CorporationInfo {\n return {\n corporation_id: 1344654522,\n name: 'GoonWaffe',\n ticker: 'GEWNS',\n ceo_id: 1689391488,\n creator_id: 1689391488,\n member_count: 15000,\n tax_rate: 0.1,\n alliance_id: 99005338,\n date_founded: '2003-05-06T00:00:00Z',\n description: 'The founding corporation of Goonswarm Federation',\n home_station_id: 60003760,\n shares: 1000,\n // eslint-disable-next-line sonarjs/no-clear-text-protocols\n url: 'http://www.goonfleet.com/',\n faction_id: 500001,\n war_eligible: true,\n ...overrides,\n };\n }\n\n // Market test data\n static createMarketOrder(overrides: Partial<MarketOrder> = {}): MarketOrder {\n return {\n order_id: 123456789,\n type_id: 34, // Tritanium\n location_id: 60003760, // Jita 4-4\n volume_total: 1000000,\n volume_remain: 500000,\n min_volume: 1,\n price: 5.5,\n is_buy_order: false,\n system_id: 30000142,\n duration: 90,\n issued: '2023-12-01T12:00:00Z',\n range: 'region',\n ...overrides,\n };\n }\n\n // Wallet test data\n static createWalletTransaction(\n overrides: Partial<WalletTransaction> = {},\n ): WalletTransaction {\n return {\n transaction_id: 123456789,\n date: '2023-12-01T12:00:00Z',\n type_id: 34,\n location_id: 60003760,\n unit_price: 5.5,\n quantity: 1000,\n client_id: 1689391488,\n is_buy: false,\n is_personal: true,\n journal_ref_id: 987654321,\n ...overrides,\n };\n }\n\n // Contract test data\n static createContract(overrides: Partial<Contract> = {}): Contract {\n return {\n contract_id: 123456789,\n issuer_id: 1689391488,\n issuer_corporation_id: 1344654522,\n assignee_id: 987654321,\n start_location_id: 60003760,\n end_location_id: 60008494,\n type: 'courier',\n status: 'outstanding',\n title: 'Test Courier Contract',\n for_corporation: false,\n availability: 'public',\n date_issued: '2023-12-01T12:00:00Z',\n date_expired: '2023-12-08T12:00:00Z',\n days_to_complete: 3,\n price: 1000000,\n reward: 500000,\n collateral: 10000000,\n volume: 1000,\n ...overrides,\n };\n }\n\n // Sovereignty test data (Equinox)\n static createSovereigntySystem(\n overrides: Partial<SovereigntySystem> = {},\n ): SovereigntySystem {\n return {\n solar_systems: [\n {\n solar_system_id: 30000142,\n claim: {\n alliance: {\n alliance_id: 99005338,\n corporation_id: 1344654522,\n claimed_since: '2020-10-08T00:38:16Z',\n is_capital_system: false,\n development: {\n activity_defense_multiplier: 4.5,\n military_level: 5,\n industrial_level: 3,\n strategic_level: 1,\n },\n },\n },\n },\n ],\n ...overrides,\n };\n }\n\n static createSovereigntyHub(\n overrides: Partial<SovereigntyHub> = {},\n ): SovereigntyHub {\n return {\n structure_id: 100000001,\n system_id: 30000142,\n corporation_id: 98000002,\n alliance_id: 99000006,\n online: true,\n remaining_reagents: 500,\n installed_upgrades: [1, 2, 3],\n ...overrides,\n };\n }\n\n static createOrbitalSkyhook(\n overrides: Partial<OrbitalSkyhook> = {},\n ): OrbitalSkyhook {\n return {\n structure_id: 200000001,\n system_id: 30000142,\n corporation_id: 98000002,\n alliance_id: 99000006,\n online: true,\n reagent_silo_capacity: 1000,\n reagent_silo_level: 750,\n ...overrides,\n };\n }\n\n static createRaidableSkyhook(\n overrides: Partial<RaidableSkyhook> = {},\n ): RaidableSkyhook {\n return {\n structure_id: 200000001,\n system_id: 30000142,\n corporation_id: 98000002,\n alliance_id: 99000006,\n raidable_at: '2026-05-20T12:00:00Z',\n is_raidable: true,\n ...overrides,\n };\n }\n\n static createMercenaryDen(\n overrides: Partial<MercenaryDen> = {},\n ): MercenaryDen {\n return {\n den_id: 5001,\n system_id: 30000142,\n constellation_id: 20000125,\n region_id: 10000002,\n development_level: 3,\n anarchy_level: 2,\n active_operations: 1,\n ...overrides,\n };\n }\n\n static createMercenaryTacticalOperation(\n overrides: Partial<MercenaryTacticalOperation> = {},\n ): MercenaryTacticalOperation {\n return {\n operation_id: 7001,\n den_id: 5001,\n system_id: 30000142,\n site_type: 'assault',\n status: 'active',\n started_at: '2026-05-20T10:00:00Z',\n expires_at: '2026-05-20T22:00:00Z',\n ...overrides,\n };\n }\n\n static createAccessListEntry(\n overrides: Partial<AccessListEntry> = {},\n ): AccessListEntry {\n return {\n entity_id: 1689391488,\n entity_type: 'character',\n access_type: 'allowed',\n ...overrides,\n };\n }\n\n // Error test data\n static createError(statusCode: number, message?: string): EsiError {\n const defaultMessages: Record<number, string> = {\n 400: 'Bad request',\n 401: 'Unauthorized',\n 403: 'Forbidden',\n 404: 'Resource not found',\n 429: 'Rate limit exceeded',\n 500: 'Internal server error',\n 503: 'Service unavailable',\n };\n return new EsiError(\n statusCode,\n // eslint-disable-next-line security/detect-object-injection\n message || defaultMessages[statusCode] || 'Unknown error',\n );\n }\n\n // Test scenarios\n static createTestScenarios() {\n return {\n alliances: [\n { id: 99005338, name: 'Goonswarm Federation', ticker: 'CONDI' },\n { id: 99000001, name: 'Test Alliance Please Ignore', ticker: 'TEST' },\n { id: 99000002, name: 'Brave Collective', ticker: 'BRAVE' },\n { id: 99000003, name: 'Pandemic Legion', ticker: 'PL' },\n { id: 99000004, name: 'Northern Coalition.', ticker: 'NC.' },\n ],\n characters: [\n {\n id: 1689391488,\n name: 'Test Character',\n corp: 1344654522,\n alliance: 99005338,\n },\n {\n id: 123456789,\n name: 'Demo Pilot',\n corp: 987654321,\n alliance: 99000001,\n },\n {\n id: 111111111,\n name: 'Alpha Tester',\n corp: 222222222,\n alliance: 99000002,\n },\n {\n id: 333333333,\n name: 'Beta User',\n corp: 444444444,\n alliance: 99000003,\n },\n {\n id: 555555555,\n name: 'Gamma Pilot',\n corp: 666666666,\n alliance: 99000004,\n },\n ],\n corporations: [\n {\n id: 1344654522,\n name: 'GoonWaffe',\n ticker: 'GEWNS',\n alliance: 99005338,\n },\n {\n id: 987654321,\n name: 'Test Corp Please Ignore',\n ticker: 'TCPI',\n alliance: 99000001,\n },\n {\n id: 222222222,\n name: 'Brave Newbies Inc.',\n ticker: 'BNI',\n alliance: 99000002,\n },\n {\n id: 444444444,\n name: 'Sniggerdly',\n ticker: 'SNIGG',\n alliance: 99000003,\n },\n {\n id: 666666666,\n name: 'Tactical Narcotics Team',\n ticker: 'TNT',\n alliance: 99000004,\n },\n ],\n errorScenarios: [\n { statusCode: 0, label: 'network_error', probability: 0.1 },\n { statusCode: 429, label: 'rate_limited', probability: 0.05 },\n { statusCode: 500, label: 'server_error', probability: 0.02 },\n { statusCode: 504, label: 'timeout', probability: 0.03 },\n { statusCode: 404, label: 'not_found', probability: 0.01 },\n ],\n };\n }\n\n // Performance test data\n static createPerformanceTestData(\n size: 'small' | 'medium' | 'large' = 'medium',\n ) {\n const sizes = {\n small: { alliances: 5, characters: 20, corporations: 10 },\n medium: { alliances: 20, characters: 100, corporations: 50 },\n large: { alliances: 100, characters: 1000, corporations: 500 },\n };\n\n // eslint-disable-next-line security/detect-object-injection\n const config = sizes[size];\n const data = {\n alliances: [] as AllianceInfo[],\n characters: [] as CharacterInfo[],\n corporations: [] as CorporationInfo[],\n };\n\n // Generate alliances\n for (let i = 1; i <= config.alliances; i++) {\n data.alliances.push(\n this.createAllianceInfo({\n alliance_id: 99000000 + i,\n name: `Test Alliance ${i}`,\n ticker: `TST${i.toString().padStart(2, '0')}`,\n creator_id: 1000000 + i,\n }),\n );\n }\n\n // Generate corporations\n for (let i = 1; i <= config.corporations; i++) {\n const allianceIndex = Math.floor(\n (i - 1) / (config.corporations / config.alliances),\n );\n data.corporations.push(\n this.createCorporationInfo({\n corporation_id: 2000000 + i,\n name: `Test Corporation ${i}`,\n ticker: `TC${i.toString().padStart(3, '0')}`,\n // eslint-disable-next-line security/detect-object-injection\n alliance_id: data.alliances[allianceIndex]?.alliance_id,\n ceo_id: 3000000 + i,\n }),\n );\n }\n\n // Generate characters\n for (let i = 1; i <= config.characters; i++) {\n const corpIndex = Math.floor(\n (i - 1) / (config.characters / config.corporations),\n );\n // eslint-disable-next-line security/detect-object-injection\n const corp = data.corporations[corpIndex];\n data.characters.push(\n this.createCharacterInfo({\n character_id: 3000000 + i,\n name: `Test Character ${i}`,\n corporation_id: corp?.corporation_id || 2000001,\n alliance_id: corp?.alliance_id,\n }),\n );\n }\n\n return data;\n }\n\n // Realistic test data with relationships\n static createRealisticTestData() {\n const goonswarm = this.createAllianceInfo({\n alliance_id: 99005338,\n name: 'Goonswarm Federation',\n ticker: 'CONDI',\n creator_id: 1689391488,\n creator_corporation_id: 1344654522,\n executor_corporation_id: 1344654522,\n date_founded: '2010-06-01T00:00:00Z',\n });\n\n const goonwaffe = this.createCorporationInfo({\n corporation_id: 1344654522,\n name: 'GoonWaffe',\n ticker: 'GEWNS',\n alliance_id: 99005338,\n ceo_id: 1689391488,\n creator_id: 1689391488,\n member_count: 15000,\n date_founded: '2003-05-06T00:00:00Z',\n });\n\n const testCharacter = this.createCharacterInfo({\n character_id: 1689391488,\n name: 'The Mittani',\n corporation_id: 1344654522,\n alliance_id: 99005338,\n birthday: '2003-05-06T00:00:00Z',\n });\n\n return {\n alliances: [goonswarm],\n corporations: [goonwaffe],\n characters: [testCharacter],\n relationships: {\n allianceExecutor: { alliance: 99005338, corporation: 1344654522 },\n corporationCEO: { corporation: 1344654522, character: 1689391488 },\n characterMembership: {\n character: 1689391488,\n corporation: 1344654522,\n alliance: 99005338,\n },\n },\n };\n }\n}\n"],"mappings":"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","names":[]}
@@ -1,4 +1,8 @@
1
- export interface AllianceDetail {
1
+ export interface AlliancesAllianceIdIconsGet {
2
+ px128x128?: string;
3
+ px64x64?: string;
4
+ }
5
+ export interface AlliancesDetail {
2
6
  creator_corporation_id: number;
3
7
  creator_id: number;
4
8
  date_founded: string;
@@ -7,10 +11,6 @@ export interface AllianceDetail {
7
11
  name: string;
8
12
  ticker: string;
9
13
  }
10
- export interface AlliancesAllianceIdIconsGet {
11
- px128x128?: string;
12
- px64x64?: string;
13
- }
14
14
  export interface CharactersCharacterIdAssetsGet {
15
15
  is_blueprint_copy?: boolean;
16
16
  is_singleton: boolean;
@@ -1120,18 +1120,18 @@ export interface KillmailsKillmailIdKillmailHashGet {
1120
1120
  };
1121
1121
  war_id?: number;
1122
1122
  }
1123
- export interface CharactersCharacterIdLocationGet {
1123
+ export interface CharactersLocation {
1124
1124
  solar_system_id: number;
1125
1125
  station_id?: number;
1126
1126
  structure_id?: number;
1127
1127
  }
1128
- export interface CharactersCharacterIdOnlineGet {
1128
+ export interface CharactersOnline {
1129
1129
  last_login?: string;
1130
1130
  last_logout?: string;
1131
1131
  logins?: number;
1132
1132
  online: boolean;
1133
1133
  }
1134
- export interface CharactersCharacterIdShipGet {
1134
+ export interface CharactersShip {
1135
1135
  ship_item_id: number;
1136
1136
  ship_name: string;
1137
1137
  ship_type_id: number;
@@ -1823,7 +1823,7 @@ export interface WarsWarIdKillmailsGet {
1823
1823
  killmail_id: number;
1824
1824
  }
1825
1825
  export interface EsiOperationTypes {
1826
- 'GetAlliancesAllianceId': AllianceDetail;
1826
+ 'GetAlliancesAllianceId': AlliancesDetail;
1827
1827
  'GetAlliancesAllianceIdContacts': AlliancesAllianceIdContactsGet[];
1828
1828
  'GetAlliancesAllianceIdContactsLabels': AlliancesAllianceIdContactsLabelsGet[];
1829
1829
  'GetAlliancesAllianceIdIcons': AlliancesAllianceIdIconsGet;
@@ -1848,7 +1848,7 @@ export interface EsiOperationTypes {
1848
1848
  'GetCharactersCharacterIdFwStats': CharactersCharacterIdFwStatsGet;
1849
1849
  'GetCharactersCharacterIdIndustryJobs': CharactersCharacterIdIndustryJobsGet[];
1850
1850
  'GetCharactersCharacterIdKillmailsRecent': CharactersCharacterIdKillmailsRecentGet[];
1851
- 'GetCharactersCharacterIdLocation': CharactersCharacterIdLocationGet;
1851
+ 'GetCharactersCharacterIdLocation': CharactersLocation;
1852
1852
  'GetCharactersCharacterIdLoyaltyPoints': CharactersCharacterIdLoyaltyPointsGet[];
1853
1853
  'GetCharactersCharacterIdMail': CharactersCharacterIdMailGet[];
1854
1854
  'GetCharactersCharacterIdMailLabels': CharactersCharacterIdMailLabelsGet;
@@ -1858,7 +1858,7 @@ export interface EsiOperationTypes {
1858
1858
  'GetCharactersCharacterIdMining': CharactersCharacterIdMiningGet[];
1859
1859
  'GetCharactersCharacterIdNotifications': CharactersCharacterIdNotificationsGet[];
1860
1860
  'GetCharactersCharacterIdNotificationsContacts': CharactersCharacterIdNotificationsContactsGet[];
1861
- 'GetCharactersCharacterIdOnline': CharactersCharacterIdOnlineGet;
1861
+ 'GetCharactersCharacterIdOnline': CharactersOnline;
1862
1862
  'GetCharactersCharacterIdOrders': CharactersCharacterIdOrdersGet[];
1863
1863
  'GetCharactersCharacterIdOrdersHistory': CharactersCharacterIdOrdersHistoryGet[];
1864
1864
  'GetCharactersCharacterIdPlanets': CharactersCharacterIdPlanetsGet[];
@@ -1866,7 +1866,7 @@ export interface EsiOperationTypes {
1866
1866
  'GetCharactersCharacterIdPortrait': CharactersCharacterIdPortraitGet;
1867
1867
  'GetCharactersCharacterIdRoles': CharactersCharacterIdRolesGet;
1868
1868
  'GetCharactersCharacterIdSearch': CharactersCharacterIdSearchGet;
1869
- 'GetCharactersCharacterIdShip': CharactersCharacterIdShipGet;
1869
+ 'GetCharactersCharacterIdShip': CharactersShip;
1870
1870
  'GetCharactersCharacterIdSkillqueue': CharactersSkillqueueSkill[];
1871
1871
  'GetCharactersCharacterIdSkills': CharactersSkills;
1872
1872
  'GetCharactersCharacterIdStandings': CharactersCharacterIdStandingsGet[];