@lgriffin/esi.ts 7.4.0 → 8.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +26 -26
- package/README.md +967 -910
- package/dist/EsiClient.d.ts +3 -0
- package/dist/EsiClient.d.ts.map +1 -1
- package/dist/EsiClientBuilder.d.ts +1 -0
- package/dist/EsiClientBuilder.d.ts.map +1 -1
- package/dist/clients/AllianceClient.d.ts +3 -0
- package/dist/clients/AllianceClient.d.ts.map +1 -1
- package/dist/clients/BaseEsiClient.d.ts +1 -1
- package/dist/clients/BaseEsiClient.d.ts.map +1 -1
- package/dist/clients/CalendarClient.d.ts +3 -0
- package/dist/clients/CalendarClient.d.ts.map +1 -1
- package/dist/clients/CharacterClient.d.ts +10 -2
- package/dist/clients/CharacterClient.d.ts.map +1 -1
- package/dist/clients/ClonesClient.d.ts +2 -0
- package/dist/clients/ClonesClient.d.ts.map +1 -1
- package/dist/clients/ContactsClient.d.ts +7 -0
- package/dist/clients/ContactsClient.d.ts.map +1 -1
- package/dist/clients/CorporationsClient.d.ts +18 -0
- package/dist/clients/CorporationsClient.d.ts.map +1 -1
- package/dist/clients/FittingsClient.d.ts +2 -0
- package/dist/clients/FittingsClient.d.ts.map +1 -1
- package/dist/clients/FleetClient.d.ts +3 -0
- package/dist/clients/FleetClient.d.ts.map +1 -1
- package/dist/clients/IndustryClient.d.ts +9 -0
- package/dist/clients/IndustryClient.d.ts.map +1 -1
- package/dist/clients/LoyaltyClient.d.ts +3 -0
- package/dist/clients/LoyaltyClient.d.ts.map +1 -1
- package/dist/clients/MailClient.d.ts +6 -0
- package/dist/clients/MailClient.d.ts.map +1 -1
- package/dist/clients/MarketClient.d.ts +13 -22
- package/dist/clients/MarketClient.d.ts.map +1 -1
- package/dist/clients/PiClient.d.ts +3 -0
- package/dist/clients/PiClient.d.ts.map +1 -1
- package/dist/clients/SkillsClient.d.ts +2 -0
- package/dist/clients/SkillsClient.d.ts.map +1 -1
- package/dist/clients/WalletClient.d.ts +1 -0
- package/dist/clients/WalletClient.d.ts.map +1 -1
- package/dist/clients/WarsClient.d.ts +3 -0
- package/dist/clients/WarsClient.d.ts.map +1 -1
- package/dist/core/ApiClient.d.ts +14 -6
- package/dist/core/ApiClient.d.ts.map +1 -1
- package/dist/core/ApiRequestHandler.d.ts +3 -11
- package/dist/core/ApiRequestHandler.d.ts.map +1 -1
- package/dist/core/IDeduplicator.d.ts +6 -0
- package/dist/core/IDeduplicator.d.ts.map +1 -0
- package/dist/core/IRetryStrategy.d.ts +5 -0
- package/dist/core/IRetryStrategy.d.ts.map +1 -0
- package/dist/core/RequestDeduplicator.d.ts +2 -1
- package/dist/core/RequestDeduplicator.d.ts.map +1 -1
- package/dist/core/RetryStrategy.d.ts +19 -0
- package/dist/core/RetryStrategy.d.ts.map +1 -0
- package/dist/core/circuitBreaker/CircuitBreaker.d.ts +11 -1
- package/dist/core/circuitBreaker/CircuitBreaker.d.ts.map +1 -1
- package/dist/core/circuitBreaker/ICircuitBreaker.d.ts +23 -0
- package/dist/core/circuitBreaker/ICircuitBreaker.d.ts.map +1 -0
- package/dist/core/configureApiClient.d.ts +18 -0
- package/dist/core/configureApiClient.d.ts.map +1 -0
- package/dist/core/endpoints/EndpointDefinition.d.ts +2 -0
- package/dist/core/endpoints/EndpointDefinition.d.ts.map +1 -1
- package/dist/core/endpoints/calendarEndpoints.d.ts +1 -1
- package/dist/core/endpoints/characterEndpoints.d.ts +3 -3
- package/dist/core/endpoints/contactEndpoints.d.ts +7 -3
- package/dist/core/endpoints/contactEndpoints.d.ts.map +1 -1
- package/dist/core/endpoints/corporationEndpoints.d.ts +4 -1
- package/dist/core/endpoints/corporationEndpoints.d.ts.map +1 -1
- package/dist/core/endpoints/createClient.d.ts +18 -1
- package/dist/core/endpoints/createClient.d.ts.map +1 -1
- package/dist/core/endpoints/dogmaEndpoints.d.ts +17 -0
- package/dist/core/endpoints/dogmaEndpoints.d.ts.map +1 -1
- package/dist/core/endpoints/esi-scopes.generated.d.ts +1 -1
- package/dist/core/endpoints/esi-scopes.generated.d.ts.map +1 -1
- package/dist/core/endpoints/fleetEndpoints.d.ts +5 -0
- package/dist/core/endpoints/fleetEndpoints.d.ts.map +1 -1
- package/dist/core/endpoints/mailEndpoints.d.ts +13 -0
- package/dist/core/endpoints/mailEndpoints.d.ts.map +1 -1
- package/dist/core/endpoints/marketEndpoints.d.ts +29 -48
- package/dist/core/endpoints/marketEndpoints.d.ts.map +1 -1
- package/dist/core/endpoints/piEndpoints.d.ts +3 -0
- package/dist/core/endpoints/piEndpoints.d.ts.map +1 -1
- package/dist/core/endpoints/universeEndpoints.d.ts +13 -2
- package/dist/core/endpoints/universeEndpoints.d.ts.map +1 -1
- package/dist/core/endpoints/walletEndpoints.d.ts +4 -0
- package/dist/core/endpoints/walletEndpoints.d.ts.map +1 -1
- package/dist/core/logger/logger.d.ts +2 -1
- package/dist/core/logger/logger.d.ts.map +1 -1
- package/dist/core/pagination/AsyncPaginationIterator.d.ts +4 -1
- package/dist/core/pagination/AsyncPaginationIterator.d.ts.map +1 -1
- package/dist/core/pagination/CursorPaginationHandler.d.ts +6 -2
- package/dist/core/pagination/CursorPaginationHandler.d.ts.map +1 -1
- package/dist/core/pagination/PaginationHandler.d.ts +1 -1
- package/dist/core/pagination/PaginationHandler.d.ts.map +1 -1
- package/dist/core/rateLimiter/RateLimiter.d.ts +8 -2
- package/dist/core/rateLimiter/RateLimiter.d.ts.map +1 -1
- package/dist/core/requestPipeline/cachePolicy.d.ts +30 -0
- package/dist/core/requestPipeline/cachePolicy.d.ts.map +1 -0
- package/dist/core/requestPipeline/dependencies.d.ts +10 -0
- package/dist/core/requestPipeline/dependencies.d.ts.map +1 -0
- package/dist/core/requestPipeline/fetchExecution.d.ts +28 -0
- package/dist/core/requestPipeline/fetchExecution.d.ts.map +1 -0
- package/dist/core/requestPipeline/headers.d.ts +11 -0
- package/dist/core/requestPipeline/headers.d.ts.map +1 -0
- package/dist/core/requestPipeline/index.d.ts +10 -0
- package/dist/core/requestPipeline/index.d.ts.map +1 -0
- package/dist/core/requestPipeline/middlewareBridge.d.ts +15 -0
- package/dist/core/requestPipeline/middlewareBridge.d.ts.map +1 -0
- package/dist/core/requestPipeline/paginationOrchestration.d.ts +15 -0
- package/dist/core/requestPipeline/paginationOrchestration.d.ts.map +1 -0
- package/dist/core/requestPipeline/statusHandling.d.ts +18 -0
- package/dist/core/requestPipeline/statusHandling.d.ts.map +1 -0
- package/dist/core/util/error.d.ts +4 -1
- package/dist/core/util/error.d.ts.map +1 -1
- package/dist/index.d.ts +9 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9926 -176
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +9824 -0
- package/dist/index.mjs.map +1 -0
- package/dist/schemas/calendar.d.ts +1 -1
- package/dist/schemas/character.d.ts +1 -10
- package/dist/schemas/character.d.ts.map +1 -1
- package/dist/schemas/common.d.ts +9 -0
- package/dist/schemas/common.d.ts.map +1 -1
- package/dist/schemas/contacts.d.ts +2 -1
- package/dist/schemas/contacts.d.ts.map +1 -1
- package/dist/schemas/corporation.d.ts +4 -9
- package/dist/schemas/corporation.d.ts.map +1 -1
- package/dist/schemas/dogma.d.ts +17 -0
- package/dist/schemas/dogma.d.ts.map +1 -1
- package/dist/schemas/fleet.d.ts +1 -0
- package/dist/schemas/fleet.d.ts.map +1 -1
- package/dist/schemas/generated/alliance.generated.d.ts +15 -0
- package/dist/schemas/generated/alliance.generated.d.ts.map +1 -0
- package/dist/schemas/generated/assets.generated.d.ts +272 -0
- package/dist/schemas/generated/assets.generated.d.ts.map +1 -0
- package/dist/schemas/generated/calendar.generated.d.ts +41 -0
- package/dist/schemas/generated/calendar.generated.d.ts.map +1 -0
- package/dist/schemas/generated/character.generated.d.ts +670 -0
- package/dist/schemas/generated/character.generated.d.ts.map +1 -0
- package/dist/schemas/generated/clones.generated.d.ts +23 -0
- package/dist/schemas/generated/clones.generated.d.ts.map +1 -0
- package/dist/schemas/generated/contacts.generated.d.ts +50 -0
- package/dist/schemas/generated/contacts.generated.d.ts.map +1 -0
- package/dist/schemas/generated/contracts.generated.d.ts +162 -0
- package/dist/schemas/generated/contracts.generated.d.ts.map +1 -0
- package/dist/schemas/generated/corporation-projects.generated.d.ts +89 -0
- package/dist/schemas/generated/corporation-projects.generated.d.ts.map +1 -0
- package/dist/schemas/generated/corporation.generated.d.ts +1515 -0
- package/dist/schemas/generated/corporation.generated.d.ts.map +1 -0
- package/dist/schemas/generated/dogma.generated.d.ts +57 -0
- package/dist/schemas/generated/dogma.generated.d.ts.map +1 -0
- package/dist/schemas/generated/faction-warfare.generated.d.ts +155 -0
- package/dist/schemas/generated/faction-warfare.generated.d.ts.map +1 -0
- package/dist/schemas/generated/fittings.generated.d.ts +57 -0
- package/dist/schemas/generated/fittings.generated.d.ts.map +1 -0
- package/dist/schemas/generated/fleets.generated.d.ts +45 -0
- package/dist/schemas/generated/fleets.generated.d.ts.map +1 -0
- package/dist/schemas/generated/freelance-jobs.generated.d.ts +173 -0
- package/dist/schemas/generated/freelance-jobs.generated.d.ts.map +1 -0
- package/dist/schemas/generated/incursions.generated.d.ts +16 -0
- package/dist/schemas/generated/incursions.generated.d.ts.map +1 -0
- package/dist/schemas/generated/index.d.ts +33 -0
- package/dist/schemas/generated/index.d.ts.map +1 -0
- package/dist/schemas/generated/industry.generated.d.ts +117 -0
- package/dist/schemas/generated/industry.generated.d.ts.map +1 -0
- package/dist/schemas/generated/insurance.generated.d.ts +10 -0
- package/dist/schemas/generated/insurance.generated.d.ts.map +1 -0
- package/dist/schemas/generated/killmails.generated.d.ts +55 -0
- package/dist/schemas/generated/killmails.generated.d.ts.map +1 -0
- package/dist/schemas/generated/location.generated.d.ts +18 -0
- package/dist/schemas/generated/location.generated.d.ts.map +1 -0
- package/dist/schemas/generated/loyalty.generated.d.ts +18 -0
- package/dist/schemas/generated/loyalty.generated.d.ts.map +1 -0
- package/dist/schemas/generated/mail.generated.d.ts +68 -0
- package/dist/schemas/generated/mail.generated.d.ts.map +1 -0
- package/dist/schemas/generated/market.generated.d.ts +201 -0
- package/dist/schemas/generated/market.generated.d.ts.map +1 -0
- package/dist/schemas/generated/meta.generated.d.ts +26 -0
- package/dist/schemas/generated/meta.generated.d.ts.map +1 -0
- package/dist/schemas/generated/planetary-interaction.generated.d.ts +90 -0
- package/dist/schemas/generated/planetary-interaction.generated.d.ts.map +1 -0
- package/dist/schemas/generated/routes.generated.d.ts +5 -0
- package/dist/schemas/generated/routes.generated.d.ts.map +1 -0
- package/dist/schemas/generated/search.generated.d.ts +15 -0
- package/dist/schemas/generated/search.generated.d.ts.map +1 -0
- package/dist/schemas/generated/skills.generated.d.ts +32 -0
- package/dist/schemas/generated/skills.generated.d.ts.map +1 -0
- package/dist/schemas/generated/sovereignty.generated.d.ts +37 -0
- package/dist/schemas/generated/sovereignty.generated.d.ts.map +1 -0
- package/dist/schemas/generated/status.generated.d.ts +8 -0
- package/dist/schemas/generated/status.generated.d.ts.map +1 -0
- package/dist/schemas/generated/universe.generated.d.ts +394 -0
- package/dist/schemas/generated/universe.generated.d.ts.map +1 -0
- package/dist/schemas/generated/wallet.generated.d.ts +411 -0
- package/dist/schemas/generated/wallet.generated.d.ts.map +1 -0
- package/dist/schemas/generated/wars.generated.d.ts +31 -0
- package/dist/schemas/generated/wars.generated.d.ts.map +1 -0
- package/dist/schemas/market.d.ts +91 -4
- package/dist/schemas/market.d.ts.map +1 -1
- package/dist/schemas/pi.d.ts +3 -0
- package/dist/schemas/pi.d.ts.map +1 -1
- package/dist/schemas/sovereignty.d.ts +2 -0
- package/dist/schemas/sovereignty.d.ts.map +1 -1
- package/dist/schemas/universe.d.ts +11 -2
- package/dist/schemas/universe.d.ts.map +1 -1
- package/dist/schemas/wallet.d.ts +2 -0
- package/dist/schemas/wallet.d.ts.map +1 -1
- package/dist/testing/TestDataFactory.d.ts.map +1 -1
- package/dist/types/character.d.ts +2 -1
- package/dist/types/character.d.ts.map +1 -1
- package/dist/types/generated/spec-alignment.check.d.ts +9 -0
- package/dist/types/generated/spec-alignment.check.d.ts.map +1 -1
- package/dist/types/market.d.ts +7 -1
- package/dist/types/market.d.ts.map +1 -1
- package/package.json +235 -226
- package/dist/EsiClient.js +0 -251
- package/dist/EsiClientBuilder.js +0 -217
- package/dist/clients/AccessListsClient.js +0 -20
- package/dist/clients/AllianceClient.js +0 -72
- package/dist/clients/AssetsClient.js +0 -81
- package/dist/clients/BaseEsiClient.js +0 -40
- package/dist/clients/CalendarClient.js +0 -54
- package/dist/clients/CharacterClient.js +0 -149
- package/dist/clients/ClonesClient.js +0 -31
- package/dist/clients/ContactsClient.js +0 -104
- package/dist/clients/ContractsClient.js +0 -111
- package/dist/clients/CorporationsClient.js +0 -227
- package/dist/clients/DogmaClient.js +0 -55
- package/dist/clients/FactionClient.js +0 -79
- package/dist/clients/FittingsClient.js +0 -42
- package/dist/clients/FleetClient.js +0 -162
- package/dist/clients/FreelanceJobsClient.js +0 -76
- package/dist/clients/IncursionsClient.js +0 -19
- package/dist/clients/IndustryClient.js +0 -88
- package/dist/clients/InsuranceClient.js +0 -19
- package/dist/clients/KillmailsClient.js +0 -47
- package/dist/clients/LocationClient.js +0 -41
- package/dist/clients/LoyaltyClient.js +0 -30
- package/dist/clients/MailClient.js +0 -108
- package/dist/clients/MarketClient.js +0 -131
- package/dist/clients/MercenaryClient.js +0 -27
- package/dist/clients/MetaClient.js +0 -56
- package/dist/clients/PiClient.js +0 -51
- package/dist/clients/RouteClient.js +0 -24
- package/dist/clients/SearchClient.js +0 -22
- package/dist/clients/SkillsClient.js +0 -41
- package/dist/clients/SkyhooksClient.js +0 -35
- package/dist/clients/SovereigntyClient.js +0 -27
- package/dist/clients/StatusClient.js +0 -19
- package/dist/clients/UiClient.js +0 -58
- package/dist/clients/UniverseClient.js +0 -277
- package/dist/clients/WalletClient.js +0 -82
- package/dist/clients/WarsClient.js +0 -37
- package/dist/config/configManager.js +0 -47
- package/dist/config/jest/globalSetup.js +0 -7
- package/dist/config/jest/globalTeardown.js +0 -7
- package/dist/config/jest/jest.setup.js +0 -29
- package/dist/core/ApiClient.js +0 -123
- package/dist/core/ApiClientBuilder.js +0 -54
- package/dist/core/ApiRequestHandler.js +0 -444
- package/dist/core/BatchRequestHandler.js +0 -66
- package/dist/core/ClientRegistry.js +0 -116
- package/dist/core/EsiDiagnostics.js +0 -47
- package/dist/core/RequestDeduplicator.js +0 -26
- package/dist/core/cache/ETagCacheManager.js +0 -184
- package/dist/core/cache/ICache.js +0 -2
- package/dist/core/circuitBreaker/CircuitBreaker.js +0 -156
- package/dist/core/constants.js +0 -7
- package/dist/core/endpoints/EndpointDefinition.js +0 -2
- package/dist/core/endpoints/accessListEndpoints.js +0 -13
- package/dist/core/endpoints/allianceEndpoints.js +0 -34
- package/dist/core/endpoints/assetEndpoints.js +0 -51
- package/dist/core/endpoints/buildEndpointPath.js +0 -44
- package/dist/core/endpoints/calendarEndpoints.js +0 -35
- package/dist/core/endpoints/characterEndpoints.js +0 -104
- package/dist/core/endpoints/cloneEndpoints.js +0 -21
- package/dist/core/endpoints/contactEndpoints.js +0 -72
- package/dist/core/endpoints/contractEndpoints.js +0 -70
- package/dist/core/endpoints/corporationEndpoints.js +0 -161
- package/dist/core/endpoints/createClient.js +0 -175
- package/dist/core/endpoints/dogmaEndpoints.js +0 -40
- package/dist/core/endpoints/esi-cache-ttls.generated.js +0 -133
- package/dist/core/endpoints/esi-rate-limit-groups.generated.js +0 -153
- package/dist/core/endpoints/esi-scopes.generated.js +0 -135
- package/dist/core/endpoints/factionEndpoints.js +0 -57
- package/dist/core/endpoints/fittingEndpoints.js +0 -27
- package/dist/core/endpoints/fleetEndpoints.js +0 -101
- package/dist/core/endpoints/freelanceJobsEndpoints.js +0 -51
- package/dist/core/endpoints/incursionEndpoints.js +0 -13
- package/dist/core/endpoints/industryEndpoints.js +0 -61
- package/dist/core/endpoints/insuranceEndpoints.js +0 -13
- package/dist/core/endpoints/killmailEndpoints.js +0 -28
- package/dist/core/endpoints/locationEndpoints.js +0 -27
- package/dist/core/endpoints/loyaltyEndpoints.js +0 -21
- package/dist/core/endpoints/mailEndpoints.js +0 -68
- package/dist/core/endpoints/marketEndpoints.js +0 -84
- package/dist/core/endpoints/mercenaryEndpoints.js +0 -19
- package/dist/core/endpoints/metaEndpoints.js +0 -12
- package/dist/core/endpoints/piEndpoints.js +0 -36
- package/dist/core/endpoints/routeEndpoints.js +0 -14
- package/dist/core/endpoints/searchEndpoints.js +0 -14
- package/dist/core/endpoints/skillEndpoints.js +0 -29
- package/dist/core/endpoints/skyhookEndpoints.js +0 -25
- package/dist/core/endpoints/sovereigntyEndpoints.js +0 -19
- package/dist/core/endpoints/statusEndpoints.js +0 -12
- package/dist/core/endpoints/uiEndpoints.js +0 -39
- package/dist/core/endpoints/universeEndpoints.js +0 -210
- package/dist/core/endpoints/walletEndpoints.js +0 -50
- package/dist/core/endpoints/warEndpoints.js +0 -28
- package/dist/core/logger/ILogger.js +0 -2
- package/dist/core/logger/logger.js +0 -16
- package/dist/core/logger/loggerUtil.js +0 -30
- package/dist/core/middleware/Middleware.js +0 -42
- package/dist/core/pagination/AsyncPaginationIterator.js +0 -27
- package/dist/core/pagination/CursorPaginationHandler.js +0 -148
- package/dist/core/pagination/PaginationHandler.js +0 -115
- package/dist/core/rateLimiter/IRateLimiter.js +0 -2
- package/dist/core/rateLimiter/RateLimiter.js +0 -307
- package/dist/core/util/error.js +0 -122
- package/dist/core/util/headersUtil.js +0 -37
- package/dist/core/util/retry.js +0 -9
- package/dist/core/util/sleep.js +0 -6
- package/dist/core/util/stringUtil.js +0 -6
- package/dist/core/util/testHelpers.js +0 -9
- package/dist/core/util/validation.js +0 -52
- package/dist/schemas/access-lists.js +0 -14
- package/dist/schemas/alliance.js +0 -28
- package/dist/schemas/assets.js +0 -26
- package/dist/schemas/calendar.js +0 -43
- package/dist/schemas/character.js +0 -122
- package/dist/schemas/clones.js +0 -21
- package/dist/schemas/common.js +0 -34
- package/dist/schemas/contacts.js +0 -15
- package/dist/schemas/contracts.js +0 -58
- package/dist/schemas/corporation.js +0 -192
- package/dist/schemas/dogma.js +0 -42
- package/dist/schemas/faction-warfare.js +0 -92
- package/dist/schemas/fittings.js +0 -15
- package/dist/schemas/fleet.js +0 -48
- package/dist/schemas/freelance-jobs.js +0 -99
- package/dist/schemas/incursions.js +0 -14
- package/dist/schemas/index.js +0 -48
- package/dist/schemas/industry.js +0 -75
- package/dist/schemas/insurance.js +0 -12
- package/dist/schemas/killmails.js +0 -42
- package/dist/schemas/location.js +0 -20
- package/dist/schemas/loyalty.js +0 -20
- package/dist/schemas/mail.js +0 -38
- package/dist/schemas/market.js +0 -39
- package/dist/schemas/mercenary.js +0 -22
- package/dist/schemas/pi.js +0 -85
- package/dist/schemas/skills.js +0 -30
- package/dist/schemas/skyhooks.js +0 -30
- package/dist/schemas/sovereignty.js +0 -70
- package/dist/schemas/status.js +0 -10
- package/dist/schemas/universe.js +0 -245
- package/dist/schemas/wallet.js +0 -29
- package/dist/schemas/wars.js +0 -31
- package/dist/testing/TestDataFactory.js +0 -823
- package/dist/types/access-lists.js +0 -2
- package/dist/types/alliance.js +0 -2
- package/dist/types/api-responses.js +0 -73
- package/dist/types/assets.js +0 -2
- package/dist/types/branded.js +0 -6
- package/dist/types/calendar.js +0 -2
- package/dist/types/character.js +0 -2
- package/dist/types/clones.js +0 -2
- package/dist/types/common.js +0 -2
- package/dist/types/contacts.js +0 -2
- package/dist/types/contracts.js +0 -2
- package/dist/types/corporation.js +0 -2
- package/dist/types/dogma.js +0 -2
- package/dist/types/faction-warfare.js +0 -2
- package/dist/types/fittings.js +0 -2
- package/dist/types/fleet.js +0 -2
- package/dist/types/freelance-jobs.js +0 -2
- package/dist/types/generated/esi-spec.generated.js +0 -6
- package/dist/types/generated/spec-alignment.check.js +0 -14
- package/dist/types/incursions.js +0 -2
- package/dist/types/industry.js +0 -2
- package/dist/types/insurance.js +0 -2
- package/dist/types/killmails.js +0 -2
- package/dist/types/location.js +0 -2
- package/dist/types/loyalty.js +0 -2
- package/dist/types/mail.js +0 -2
- package/dist/types/market.js +0 -2
- package/dist/types/mercenary.js +0 -2
- package/dist/types/pi.js +0 -2
- package/dist/types/skills.js +0 -2
- package/dist/types/skyhooks.js +0 -2
- package/dist/types/sovereignty.js +0 -2
- package/dist/types/status.js +0 -2
- package/dist/types/universe.js +0 -2
- package/dist/types/wallet.js +0 -2
- package/dist/types/wars.js +0 -2
|
@@ -1,444 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.handleRequest = exports.handleSinglePageRequest = void 0;
|
|
4
|
-
const error_1 = require("../core/util/error");
|
|
5
|
-
const loggerUtil_1 = require("../core/logger/loggerUtil");
|
|
6
|
-
const headersUtil_1 = require("../core/util/headersUtil");
|
|
7
|
-
const PaginationHandler_1 = require("./pagination/PaginationHandler");
|
|
8
|
-
const constants_1 = require("./constants");
|
|
9
|
-
const esi_cache_ttls_generated_1 = require("./endpoints/esi-cache-ttls.generated");
|
|
10
|
-
const retry_1 = require("./util/retry");
|
|
11
|
-
const sleep_1 = require("./util/sleep");
|
|
12
|
-
const CircuitBreaker_1 = require("./circuitBreaker/CircuitBreaker");
|
|
13
|
-
const STATUS_MESSAGES = {
|
|
14
|
-
201: 'Created',
|
|
15
|
-
204: 'No Content',
|
|
16
|
-
304: 'Not Modified',
|
|
17
|
-
400: 'Bad Request',
|
|
18
|
-
401: 'Unauthorized',
|
|
19
|
-
403: 'Forbidden',
|
|
20
|
-
404: 'Resource not found',
|
|
21
|
-
420: 'Error Limited',
|
|
22
|
-
422: 'Unprocessable Entity',
|
|
23
|
-
429: 'Too many requests',
|
|
24
|
-
500: 'Internal server error',
|
|
25
|
-
503: 'Service Unavailable',
|
|
26
|
-
504: 'Gateway Timeout',
|
|
27
|
-
520: 'Internal server error, did the request terminate too soon?',
|
|
28
|
-
};
|
|
29
|
-
// --- Dependency resolution ---
|
|
30
|
-
function resolveCache(client) {
|
|
31
|
-
return client.getCache();
|
|
32
|
-
}
|
|
33
|
-
function resolveRateLimiter(client) {
|
|
34
|
-
const limiter = client.getRateLimiter();
|
|
35
|
-
if (!limiter) {
|
|
36
|
-
throw (0, error_1.buildError)('No rate limiter configured on ApiClient. ' +
|
|
37
|
-
'Set one via apiClient.setRateLimiter(new RateLimiter()).', 'CONFIGURATION_ERROR');
|
|
38
|
-
}
|
|
39
|
-
return limiter;
|
|
40
|
-
}
|
|
41
|
-
function resolveCircuitBreaker(client) {
|
|
42
|
-
return client.getCircuitBreaker();
|
|
43
|
-
}
|
|
44
|
-
// --- Pure helpers ---
|
|
45
|
-
const stringUtil_1 = require("./util/stringUtil");
|
|
46
|
-
function lookupSpecTtl(method, templatePath) {
|
|
47
|
-
const normalized = templatePath
|
|
48
|
-
.replace(/\/$/, '')
|
|
49
|
-
.replace(/\{(\w+)\}/g, (_, name) => `{${(0, stringUtil_1.camelToSnake)(name)}}`);
|
|
50
|
-
const key = `${method}:${normalized}`;
|
|
51
|
-
const seconds = esi_cache_ttls_generated_1.esiCacheTtls[key];
|
|
52
|
-
return typeof seconds === 'number' ? seconds * 1000 : undefined;
|
|
53
|
-
}
|
|
54
|
-
function trySpecAwareCacheHit(client, url, method, templatePath) {
|
|
55
|
-
if (method !== 'GET' || !templatePath)
|
|
56
|
-
return null;
|
|
57
|
-
const specTtlMs = lookupSpecTtl(method, templatePath);
|
|
58
|
-
if (!specTtlMs)
|
|
59
|
-
return null;
|
|
60
|
-
const cache = resolveCache(client);
|
|
61
|
-
if (!cache)
|
|
62
|
-
return null;
|
|
63
|
-
const entry = cache.get(url);
|
|
64
|
-
if (!entry)
|
|
65
|
-
return null;
|
|
66
|
-
const age = Date.now() - entry.timestamp;
|
|
67
|
-
if (age < specTtlMs) {
|
|
68
|
-
(0, loggerUtil_1.logDebug)(`Spec-aware cache hit for ${url} (age=${Math.round(age / 1000)}s, ttl=${Math.round(specTtlMs / 1000)}s)`);
|
|
69
|
-
return {
|
|
70
|
-
headers: entry.headers,
|
|
71
|
-
body: entry.data,
|
|
72
|
-
fromCache: true,
|
|
73
|
-
cacheHitType: 'spec-ttl',
|
|
74
|
-
};
|
|
75
|
-
}
|
|
76
|
-
return null;
|
|
77
|
-
}
|
|
78
|
-
const parseCacheControlTtl = (headers) => {
|
|
79
|
-
const cacheControl = headers['cache-control'] ?? headers['Cache-Control'];
|
|
80
|
-
if (!cacheControl)
|
|
81
|
-
return undefined;
|
|
82
|
-
const match = /max-age=(\d+)/.exec(cacheControl);
|
|
83
|
-
return match ? parseInt(match[1], 10) * 1000 : undefined;
|
|
84
|
-
};
|
|
85
|
-
function buildRequestHeaders(client, url, method, requiresAuth, useETag, body) {
|
|
86
|
-
const headers = {
|
|
87
|
-
accept: 'gzip, deflate, br',
|
|
88
|
-
'User-Agent': constants_1.USER_AGENT,
|
|
89
|
-
'X-Compatibility-Date': constants_1.COMPATIBILITY_DATE,
|
|
90
|
-
};
|
|
91
|
-
const language = client.getLanguage();
|
|
92
|
-
if (language) {
|
|
93
|
-
headers['Accept-Language'] = language;
|
|
94
|
-
}
|
|
95
|
-
if (requiresAuth) {
|
|
96
|
-
const authHeader = client.getAuthorizationHeader();
|
|
97
|
-
if (!authHeader) {
|
|
98
|
-
throw (0, error_1.buildError)('Authorization header is required but not provided', 'NO_AUTH_TOKEN');
|
|
99
|
-
}
|
|
100
|
-
headers['Authorization'] = authHeader;
|
|
101
|
-
}
|
|
102
|
-
const cache = resolveCache(client);
|
|
103
|
-
if (useETag && method === 'GET' && cache) {
|
|
104
|
-
const cachedETag = cache.getETag(url);
|
|
105
|
-
if (cachedETag) {
|
|
106
|
-
headers['If-None-Match'] = cachedETag;
|
|
107
|
-
(0, loggerUtil_1.logDebug)(`Adding If-None-Match header: ${cachedETag}`);
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
if (body) {
|
|
111
|
-
headers['Content-Type'] = 'application/json';
|
|
112
|
-
}
|
|
113
|
-
return headers;
|
|
114
|
-
}
|
|
115
|
-
function handleEarlyStatus(client, status, url, parsed, useETag) {
|
|
116
|
-
if (status === 201) {
|
|
117
|
-
return { headers: parsed.raw, body: undefined };
|
|
118
|
-
}
|
|
119
|
-
if (status === 204) {
|
|
120
|
-
(0, loggerUtil_1.logInfo)(`No Content for endpoint: ${url}`);
|
|
121
|
-
return { headers: parsed.raw, body: undefined };
|
|
122
|
-
}
|
|
123
|
-
if (status === 304) {
|
|
124
|
-
const cache = resolveCache(client);
|
|
125
|
-
if (useETag && cache) {
|
|
126
|
-
const cachedEntry = cache.get(url);
|
|
127
|
-
if (cachedEntry) {
|
|
128
|
-
(0, loggerUtil_1.logInfo)(`Cache hit (304) for endpoint: ${url}`);
|
|
129
|
-
return {
|
|
130
|
-
headers: { ...cachedEntry.headers, ...parsed.raw },
|
|
131
|
-
body: cachedEntry.data,
|
|
132
|
-
fromCache: true,
|
|
133
|
-
cacheHitType: 'etag-304',
|
|
134
|
-
};
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
throw new error_1.EsiError(304, 'Not Modified — no cached data available', url, parsed.requestId ?? undefined);
|
|
138
|
-
}
|
|
139
|
-
return null;
|
|
140
|
-
}
|
|
141
|
-
function tryStaleCacheResponse(client, url, parsed) {
|
|
142
|
-
const cache = resolveCache(client);
|
|
143
|
-
if (!cache)
|
|
144
|
-
return null;
|
|
145
|
-
const cachedEntry = cache.get(url);
|
|
146
|
-
if (!cachedEntry)
|
|
147
|
-
return null;
|
|
148
|
-
return {
|
|
149
|
-
headers: { ...cachedEntry.headers, ...parsed.raw },
|
|
150
|
-
body: cachedEntry.data,
|
|
151
|
-
fromCache: true,
|
|
152
|
-
stale: true,
|
|
153
|
-
cacheHitType: 'stale-on-error',
|
|
154
|
-
};
|
|
155
|
-
}
|
|
156
|
-
function cacheResponse(client, url, method, endpoint, parsed, data, useETag) {
|
|
157
|
-
const cache = resolveCache(client);
|
|
158
|
-
if (useETag && method === 'GET' && cache && parsed.etag) {
|
|
159
|
-
const ttl = parseCacheControlTtl(parsed.raw);
|
|
160
|
-
cache.set(url, parsed.etag, data, parsed.raw, ttl);
|
|
161
|
-
const ttlInfo = ttl ? ` (ttl=${ttl}ms)` : '';
|
|
162
|
-
(0, loggerUtil_1.logDebug)(`Cached response for ${url} with ETag ${parsed.etag}${ttlInfo}`);
|
|
163
|
-
}
|
|
164
|
-
if (method !== 'GET' && cache) {
|
|
165
|
-
cache.deleteByPath(endpoint.split('?')[0]);
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
async function parseJsonBody(response, _url) {
|
|
169
|
-
try {
|
|
170
|
-
return (await response.json());
|
|
171
|
-
}
|
|
172
|
-
catch (jsonError) {
|
|
173
|
-
const msg = jsonError instanceof Error ? jsonError.message : String(jsonError);
|
|
174
|
-
(0, loggerUtil_1.logError)(`Failed to parse JSON response: ${msg}`);
|
|
175
|
-
throw (0, error_1.buildError)(`Invalid JSON response: ${msg}`, 'JSON_PARSE_ERROR');
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
function handleCursorPagination(parsed, data) {
|
|
179
|
-
if (!parsed.hasCursorPagination)
|
|
180
|
-
return null;
|
|
181
|
-
const cursors = {
|
|
182
|
-
before: parsed.cursorBefore,
|
|
183
|
-
after: parsed.cursorAfter,
|
|
184
|
-
};
|
|
185
|
-
return { headers: parsed.raw, body: data, cursors };
|
|
186
|
-
}
|
|
187
|
-
async function handleOffsetPagination(client, endpoint, method, requiresAuth, parsed, data, body, url, useETag, pageFetch, templatePath) {
|
|
188
|
-
const totalPages = parsed.xPages;
|
|
189
|
-
if (totalPages <= 1) {
|
|
190
|
-
return { headers: parsed.raw, body: data };
|
|
191
|
-
}
|
|
192
|
-
(0, loggerUtil_1.logInfo)(`Found ${totalPages} pages, fetching additional pages with rate limiting...`);
|
|
193
|
-
try {
|
|
194
|
-
const firstPageData = Array.isArray(data) ? data : [data];
|
|
195
|
-
const allData = await PaginationHandler_1.PaginationHandler.fetchRemainingPages(client, endpoint, method, requiresAuth, firstPageData, totalPages, body, {
|
|
196
|
-
maxPages: Math.min(totalPages, 1000),
|
|
197
|
-
stopOnEmptyPage: true,
|
|
198
|
-
maxRetries: 3,
|
|
199
|
-
}, pageFetch, templatePath);
|
|
200
|
-
cacheResponse(client, url, method, endpoint, parsed, allData, useETag);
|
|
201
|
-
return { headers: parsed.raw, body: allData };
|
|
202
|
-
}
|
|
203
|
-
catch (paginationError) {
|
|
204
|
-
const msg = paginationError instanceof Error
|
|
205
|
-
? paginationError.message
|
|
206
|
-
: String(paginationError);
|
|
207
|
-
(0, loggerUtil_1.logWarn)(`Pagination failed, returning first page only: ${msg}`);
|
|
208
|
-
return { headers: parsed.raw, body: data };
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
// --- Response interceptor wrapper ---
|
|
212
|
-
async function applyResponseInterceptors(client, result, url, endpoint, method, startTime) {
|
|
213
|
-
const middleware = client.getMiddleware();
|
|
214
|
-
if (!middleware.hasInterceptors())
|
|
215
|
-
return result;
|
|
216
|
-
const responseCtx = {
|
|
217
|
-
url,
|
|
218
|
-
endpoint,
|
|
219
|
-
method,
|
|
220
|
-
status: 200,
|
|
221
|
-
headers: result.headers,
|
|
222
|
-
body: result.body,
|
|
223
|
-
durationMs: Date.now() - startTime,
|
|
224
|
-
fromCache: result.fromCache ?? false,
|
|
225
|
-
};
|
|
226
|
-
const modified = await middleware.applyResponseInterceptors(responseCtx);
|
|
227
|
-
return {
|
|
228
|
-
...result,
|
|
229
|
-
headers: modified.headers,
|
|
230
|
-
body: modified.body,
|
|
231
|
-
};
|
|
232
|
-
}
|
|
233
|
-
// --- Main request functions ---
|
|
234
|
-
async function applyRequestMiddleware(client, url, endpoint, method, headers, body) {
|
|
235
|
-
const middleware = client.getMiddleware();
|
|
236
|
-
if (!middleware.hasInterceptors()) {
|
|
237
|
-
return { url, headers, body };
|
|
238
|
-
}
|
|
239
|
-
const reqCtx = {
|
|
240
|
-
url,
|
|
241
|
-
endpoint,
|
|
242
|
-
method,
|
|
243
|
-
headers: { ...headers },
|
|
244
|
-
body,
|
|
245
|
-
};
|
|
246
|
-
const modified = await middleware.applyRequestInterceptors(reqCtx);
|
|
247
|
-
return {
|
|
248
|
-
url: modified.url,
|
|
249
|
-
headers: modified.headers,
|
|
250
|
-
body: modified.body,
|
|
251
|
-
};
|
|
252
|
-
}
|
|
253
|
-
function handleErrorResponse(client, response, url, parsed, useETag) {
|
|
254
|
-
const errorMessage = STATUS_MESSAGES[response.status] || response.statusText;
|
|
255
|
-
if (response.status >= 500 && useETag) {
|
|
256
|
-
const staleResult = tryStaleCacheResponse(client, url, parsed);
|
|
257
|
-
if (staleResult) {
|
|
258
|
-
(0, loggerUtil_1.logWarn)(`${errorMessage} for ${url} — serving stale cache`);
|
|
259
|
-
return staleResult;
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
if (response.status === 420 || response.status === 429) {
|
|
263
|
-
(0, loggerUtil_1.logWarn)(`Rate limited (${response.status}) on ${url}`);
|
|
264
|
-
}
|
|
265
|
-
throw new error_1.EsiError(response.status, errorMessage, url, parsed.requestId ?? undefined);
|
|
266
|
-
}
|
|
267
|
-
function wrapError(error) {
|
|
268
|
-
if (error instanceof error_1.EsiError || error instanceof CircuitBreaker_1.CircuitOpenError) {
|
|
269
|
-
throw error;
|
|
270
|
-
}
|
|
271
|
-
if (error instanceof Error) {
|
|
272
|
-
(0, loggerUtil_1.logError)(`Unexpected error: ${error.message}`);
|
|
273
|
-
throw (0, error_1.buildError)(error.message, 'ESIJS_ERROR');
|
|
274
|
-
}
|
|
275
|
-
(0, loggerUtil_1.logError)(`Unexpected error: ${String(error)}`);
|
|
276
|
-
throw (0, error_1.buildError)(String(error), 'ESIJS_ERROR');
|
|
277
|
-
}
|
|
278
|
-
async function executeSingleFetch(client, endpoint, method, body, requiresAuth, useETag, requestTimeout, templatePath) {
|
|
279
|
-
const rawUrl = `${client.getLink()}/${endpoint}`;
|
|
280
|
-
const builtHeaders = buildRequestHeaders(client, rawUrl, method, requiresAuth, useETag, body);
|
|
281
|
-
const req = await applyRequestMiddleware(client, rawUrl, endpoint, method, builtHeaders, body);
|
|
282
|
-
const options = {
|
|
283
|
-
method,
|
|
284
|
-
headers: req.headers,
|
|
285
|
-
body: req.body ? JSON.stringify(req.body) : undefined,
|
|
286
|
-
};
|
|
287
|
-
const url = req.url;
|
|
288
|
-
(0, loggerUtil_1.logInfo)(`Hitting endpoint: ${url}`);
|
|
289
|
-
const cb = resolveCircuitBreaker(client);
|
|
290
|
-
if (cb)
|
|
291
|
-
cb.checkCircuit(endpoint);
|
|
292
|
-
const rateLimiter = resolveRateLimiter(client);
|
|
293
|
-
await rateLimiter.checkRateLimit(templatePath, method, req.headers);
|
|
294
|
-
const timeoutMs = requestTimeout ?? client.getTimeout();
|
|
295
|
-
const controller = new AbortController();
|
|
296
|
-
const timer = globalThis.setTimeout(() => controller.abort(), timeoutMs);
|
|
297
|
-
options.signal = controller.signal;
|
|
298
|
-
let response;
|
|
299
|
-
try {
|
|
300
|
-
response = await fetch(url, options);
|
|
301
|
-
}
|
|
302
|
-
catch (err) {
|
|
303
|
-
clearTimeout(timer);
|
|
304
|
-
if (err instanceof Error && err.name === 'AbortError') {
|
|
305
|
-
throw new error_1.TimeoutError(timeoutMs, url);
|
|
306
|
-
}
|
|
307
|
-
throw err;
|
|
308
|
-
}
|
|
309
|
-
clearTimeout(timer);
|
|
310
|
-
const parsed = (0, headersUtil_1.parseHeaders)(response.headers);
|
|
311
|
-
rateLimiter.updateFromResponse(parsed.raw, response.status, templatePath, method, req.headers);
|
|
312
|
-
if (cb) {
|
|
313
|
-
if (response.status >= 500 ||
|
|
314
|
-
response.status === 420 ||
|
|
315
|
-
response.status === 429) {
|
|
316
|
-
cb.recordFailure(endpoint, response.status);
|
|
317
|
-
}
|
|
318
|
-
else {
|
|
319
|
-
cb.recordSuccess(endpoint);
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
|
-
if (parsed.warning) {
|
|
323
|
-
(0, loggerUtil_1.logWarn)(`ESI Warning ${parsed.warning.code} for ${url}: ${parsed.warning.message}`);
|
|
324
|
-
}
|
|
325
|
-
return { response, parsed, url };
|
|
326
|
-
}
|
|
327
|
-
async function fetchOnePage(client, endpoint, method, body, requiresAuth = false, useETag = false, requestTimeout, templatePath) {
|
|
328
|
-
const { response, parsed, url } = await executeSingleFetch(client, endpoint, method, body, requiresAuth, useETag, requestTimeout, templatePath);
|
|
329
|
-
if (!response.ok) {
|
|
330
|
-
throw new error_1.EsiError(response.status, STATUS_MESSAGES[response.status] || response.statusText, url, parsed.requestId ?? undefined);
|
|
331
|
-
}
|
|
332
|
-
const data = await parseJsonBody(response, url);
|
|
333
|
-
return { data, parsed, url };
|
|
334
|
-
}
|
|
335
|
-
const executeRequest = async (client, endpoint, method, body, requiresAuth = false, useETag = true, requestTimeout, templatePath) => {
|
|
336
|
-
const startTime = Date.now();
|
|
337
|
-
const finish = (r) => {
|
|
338
|
-
r.responseTimeMs = Date.now() - startTime;
|
|
339
|
-
const rawUrl = `${client.getLink()}/${endpoint}`;
|
|
340
|
-
return applyResponseInterceptors(client, r, rawUrl, endpoint, method, startTime);
|
|
341
|
-
};
|
|
342
|
-
try {
|
|
343
|
-
const { response, parsed, url } = await executeSingleFetch(client, endpoint, method, body, requiresAuth, useETag, requestTimeout, templatePath);
|
|
344
|
-
if (response.status === 201) {
|
|
345
|
-
let data;
|
|
346
|
-
try {
|
|
347
|
-
data = (await response.json());
|
|
348
|
-
}
|
|
349
|
-
catch {
|
|
350
|
-
data = undefined;
|
|
351
|
-
}
|
|
352
|
-
return finish({ headers: parsed.raw, body: data });
|
|
353
|
-
}
|
|
354
|
-
const earlyResult = handleEarlyStatus(client, response.status, url, parsed, useETag);
|
|
355
|
-
if (earlyResult)
|
|
356
|
-
return finish(earlyResult);
|
|
357
|
-
if (!response.ok) {
|
|
358
|
-
const staleOrThrow = handleErrorResponse(client, response, url, parsed, useETag);
|
|
359
|
-
return finish(staleOrThrow);
|
|
360
|
-
}
|
|
361
|
-
const data = await parseJsonBody(response, url);
|
|
362
|
-
cacheResponse(client, url, method, endpoint, parsed, data, useETag);
|
|
363
|
-
const cursorResult = handleCursorPagination(parsed, data);
|
|
364
|
-
if (cursorResult)
|
|
365
|
-
return finish(cursorResult);
|
|
366
|
-
const pageFetch = async (paginatedEndpoint) => {
|
|
367
|
-
const result = await fetchOnePage(client, paginatedEndpoint, method, body, requiresAuth, false, requestTimeout, templatePath);
|
|
368
|
-
return Array.isArray(result.data)
|
|
369
|
-
? result.data
|
|
370
|
-
: [result.data];
|
|
371
|
-
};
|
|
372
|
-
const paginatedResult = await handleOffsetPagination(client, endpoint, method, requiresAuth, parsed, data, body, url, useETag, pageFetch, templatePath);
|
|
373
|
-
return finish(paginatedResult);
|
|
374
|
-
}
|
|
375
|
-
catch (error) {
|
|
376
|
-
wrapError(error);
|
|
377
|
-
}
|
|
378
|
-
};
|
|
379
|
-
const handleSinglePageRequest = async (client, endpoint, method, body, requiresAuth = false) => {
|
|
380
|
-
const { data, parsed } = await fetchOnePage(client, endpoint, method, body, requiresAuth);
|
|
381
|
-
return { headers: parsed.raw, body: data };
|
|
382
|
-
};
|
|
383
|
-
exports.handleSinglePageRequest = handleSinglePageRequest;
|
|
384
|
-
const handleRequest = async (client, endpoint, method, body, requiresAuth = false, useETag = true, templatePath, requestTimeout) => {
|
|
385
|
-
const rawUrl = `${client.getLink()}/${endpoint}`;
|
|
386
|
-
const specHit = trySpecAwareCacheHit(client, rawUrl, method, templatePath);
|
|
387
|
-
if (specHit)
|
|
388
|
-
return specHit;
|
|
389
|
-
const doExecute = () => executeRequest(client, endpoint, method, body, requiresAuth, useETag, requestTimeout, templatePath);
|
|
390
|
-
const dedup = client.getDeduplicator();
|
|
391
|
-
const canDedup = dedup && method === 'GET' && !body;
|
|
392
|
-
const retryConfig = client.getRetryConfig();
|
|
393
|
-
const maxRetries = retryConfig?.maxRetries ?? 0;
|
|
394
|
-
const canRetryMethod = method === 'GET' || retryConfig?.retryMutations === true;
|
|
395
|
-
const baseDelayMs = retryConfig?.baseDelayMs ?? 1000;
|
|
396
|
-
const maxDelayMs = retryConfig?.maxDelayMs ?? 30000;
|
|
397
|
-
let lastError;
|
|
398
|
-
for (let attempt = 0; attempt <= maxRetries; attempt++) {
|
|
399
|
-
try {
|
|
400
|
-
return canDedup
|
|
401
|
-
? await dedup.dedupe(endpoint, doExecute)
|
|
402
|
-
: await doExecute();
|
|
403
|
-
}
|
|
404
|
-
catch (error) {
|
|
405
|
-
if (error instanceof CircuitBreaker_1.CircuitOpenError) {
|
|
406
|
-
throw error;
|
|
407
|
-
}
|
|
408
|
-
if (error instanceof error_1.EsiError &&
|
|
409
|
-
error.statusCode === 401 &&
|
|
410
|
-
requiresAuth &&
|
|
411
|
-
client.hasTokenProvider()) {
|
|
412
|
-
(0, loggerUtil_1.logInfo)('Received 401, attempting token refresh...');
|
|
413
|
-
try {
|
|
414
|
-
await client.refreshToken();
|
|
415
|
-
(0, loggerUtil_1.logInfo)('Token refreshed, retrying request');
|
|
416
|
-
return await executeRequest(client, endpoint, method, body, requiresAuth, useETag, requestTimeout);
|
|
417
|
-
}
|
|
418
|
-
catch (refreshError) {
|
|
419
|
-
if (refreshError instanceof error_1.EsiError) {
|
|
420
|
-
throw refreshError;
|
|
421
|
-
}
|
|
422
|
-
const msg = refreshError instanceof Error
|
|
423
|
-
? refreshError.message
|
|
424
|
-
: String(refreshError);
|
|
425
|
-
(0, loggerUtil_1.logError)(`Token refresh failed: ${msg}`);
|
|
426
|
-
throw (0, error_1.buildError)(`Token refresh failed: ${msg}`, 'TOKEN_REFRESH_FAILED');
|
|
427
|
-
}
|
|
428
|
-
}
|
|
429
|
-
if (error instanceof error_1.EsiError &&
|
|
430
|
-
error.retryable &&
|
|
431
|
-
canRetryMethod &&
|
|
432
|
-
attempt < maxRetries) {
|
|
433
|
-
const delay = (0, retry_1.retryDelay)(attempt, baseDelayMs, maxDelayMs);
|
|
434
|
-
(0, loggerUtil_1.logWarn)(`Request to ${endpoint} failed (${error.statusCode}), retrying in ${Math.round(delay)}ms (attempt ${attempt + 1}/${maxRetries})`);
|
|
435
|
-
await (0, sleep_1.sleep)(delay);
|
|
436
|
-
lastError = error;
|
|
437
|
-
continue;
|
|
438
|
-
}
|
|
439
|
-
throw error;
|
|
440
|
-
}
|
|
441
|
-
}
|
|
442
|
-
throw lastError;
|
|
443
|
-
};
|
|
444
|
-
exports.handleRequest = handleRequest;
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.batchFetch = batchFetch;
|
|
4
|
-
exports.batchPost = batchPost;
|
|
5
|
-
const error_1 = require("./util/error");
|
|
6
|
-
const loggerUtil_1 = require("./logger/loggerUtil");
|
|
7
|
-
async function batchFetch(keys, fetcher, options = {}) {
|
|
8
|
-
const concurrency = options.concurrency ?? 20;
|
|
9
|
-
const results = new Map();
|
|
10
|
-
const errors = new Map();
|
|
11
|
-
let completed = 0;
|
|
12
|
-
let running = 0;
|
|
13
|
-
let index = 0;
|
|
14
|
-
(0, loggerUtil_1.logInfo)(`Batch fetch: ${keys.length} items, concurrency=${concurrency}`);
|
|
15
|
-
return new Promise((resolve) => {
|
|
16
|
-
function next() {
|
|
17
|
-
while (running < concurrency && index < keys.length) {
|
|
18
|
-
const currentIndex = index++;
|
|
19
|
-
const key = keys[currentIndex];
|
|
20
|
-
running++;
|
|
21
|
-
fetcher(key)
|
|
22
|
-
.then((result) => {
|
|
23
|
-
results.set(key, result);
|
|
24
|
-
})
|
|
25
|
-
.catch((err) => {
|
|
26
|
-
const error = err instanceof error_1.EsiError || err instanceof Error
|
|
27
|
-
? err
|
|
28
|
-
: new Error(String(err));
|
|
29
|
-
errors.set(key, error);
|
|
30
|
-
})
|
|
31
|
-
.finally(() => {
|
|
32
|
-
running--;
|
|
33
|
-
completed++;
|
|
34
|
-
if (options.onProgress) {
|
|
35
|
-
options.onProgress(completed, keys.length);
|
|
36
|
-
}
|
|
37
|
-
if (completed === keys.length) {
|
|
38
|
-
(0, loggerUtil_1.logDebug)(`Batch complete: ${results.size} succeeded, ${errors.size} failed`);
|
|
39
|
-
resolve({ results, errors });
|
|
40
|
-
}
|
|
41
|
-
else {
|
|
42
|
-
next();
|
|
43
|
-
}
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
if (keys.length === 0) {
|
|
48
|
-
resolve({ results, errors });
|
|
49
|
-
return;
|
|
50
|
-
}
|
|
51
|
-
next();
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
async function batchPost(ids, poster, chunkSize = 1000) {
|
|
55
|
-
const chunks = [];
|
|
56
|
-
for (let i = 0; i < ids.length; i += chunkSize) {
|
|
57
|
-
chunks.push(ids.slice(i, i + chunkSize));
|
|
58
|
-
}
|
|
59
|
-
(0, loggerUtil_1.logInfo)(`Batch POST: ${ids.length} IDs in ${chunks.length} chunks of ${chunkSize}`);
|
|
60
|
-
const results = [];
|
|
61
|
-
for (const chunk of chunks) {
|
|
62
|
-
const chunkResult = await poster(chunk);
|
|
63
|
-
results.push(...chunkResult);
|
|
64
|
-
}
|
|
65
|
-
return results;
|
|
66
|
-
}
|
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.AccessListsClient = exports.MercenaryClient = exports.SkyhooksClient = exports.FreelanceJobsClient = exports.MetaClient = exports.WarsClient = exports.WalletClient = exports.UniverseClient = exports.UiClient = exports.StatusClient = exports.SovereigntyClient = exports.CharacterSkillsClient = exports.SearchClient = exports.RouteClient = exports.PiClient = exports.MarketClient = exports.MailClient = exports.LoyaltyClient = exports.LocationClient = exports.KillmailsClient = exports.InsuranceClient = exports.IndustryClient = exports.IncursionsClient = exports.FleetClient = exports.FittingsClient = exports.FactionClient = exports.DogmaClient = exports.CorporationsClient = exports.ContractsClient = exports.ContactsClient = exports.ClonesClient = exports.CharacterClient = exports.CalendarClient = exports.AssetsClient = exports.AllianceClient = void 0;
|
|
4
|
-
exports.createClientInstance = createClientInstance;
|
|
5
|
-
const AllianceClient_1 = require("../clients/AllianceClient");
|
|
6
|
-
Object.defineProperty(exports, "AllianceClient", { enumerable: true, get: function () { return AllianceClient_1.AllianceClient; } });
|
|
7
|
-
const AssetsClient_1 = require("../clients/AssetsClient");
|
|
8
|
-
Object.defineProperty(exports, "AssetsClient", { enumerable: true, get: function () { return AssetsClient_1.AssetsClient; } });
|
|
9
|
-
const CalendarClient_1 = require("../clients/CalendarClient");
|
|
10
|
-
Object.defineProperty(exports, "CalendarClient", { enumerable: true, get: function () { return CalendarClient_1.CalendarClient; } });
|
|
11
|
-
const CharacterClient_1 = require("../clients/CharacterClient");
|
|
12
|
-
Object.defineProperty(exports, "CharacterClient", { enumerable: true, get: function () { return CharacterClient_1.CharacterClient; } });
|
|
13
|
-
const ClonesClient_1 = require("../clients/ClonesClient");
|
|
14
|
-
Object.defineProperty(exports, "ClonesClient", { enumerable: true, get: function () { return ClonesClient_1.ClonesClient; } });
|
|
15
|
-
const ContactsClient_1 = require("../clients/ContactsClient");
|
|
16
|
-
Object.defineProperty(exports, "ContactsClient", { enumerable: true, get: function () { return ContactsClient_1.ContactsClient; } });
|
|
17
|
-
const ContractsClient_1 = require("../clients/ContractsClient");
|
|
18
|
-
Object.defineProperty(exports, "ContractsClient", { enumerable: true, get: function () { return ContractsClient_1.ContractsClient; } });
|
|
19
|
-
const CorporationsClient_1 = require("../clients/CorporationsClient");
|
|
20
|
-
Object.defineProperty(exports, "CorporationsClient", { enumerable: true, get: function () { return CorporationsClient_1.CorporationsClient; } });
|
|
21
|
-
const DogmaClient_1 = require("../clients/DogmaClient");
|
|
22
|
-
Object.defineProperty(exports, "DogmaClient", { enumerable: true, get: function () { return DogmaClient_1.DogmaClient; } });
|
|
23
|
-
const FactionClient_1 = require("../clients/FactionClient");
|
|
24
|
-
Object.defineProperty(exports, "FactionClient", { enumerable: true, get: function () { return FactionClient_1.FactionClient; } });
|
|
25
|
-
const FittingsClient_1 = require("../clients/FittingsClient");
|
|
26
|
-
Object.defineProperty(exports, "FittingsClient", { enumerable: true, get: function () { return FittingsClient_1.FittingsClient; } });
|
|
27
|
-
const FleetClient_1 = require("../clients/FleetClient");
|
|
28
|
-
Object.defineProperty(exports, "FleetClient", { enumerable: true, get: function () { return FleetClient_1.FleetClient; } });
|
|
29
|
-
const IncursionsClient_1 = require("../clients/IncursionsClient");
|
|
30
|
-
Object.defineProperty(exports, "IncursionsClient", { enumerable: true, get: function () { return IncursionsClient_1.IncursionsClient; } });
|
|
31
|
-
const IndustryClient_1 = require("../clients/IndustryClient");
|
|
32
|
-
Object.defineProperty(exports, "IndustryClient", { enumerable: true, get: function () { return IndustryClient_1.IndustryClient; } });
|
|
33
|
-
const InsuranceClient_1 = require("../clients/InsuranceClient");
|
|
34
|
-
Object.defineProperty(exports, "InsuranceClient", { enumerable: true, get: function () { return InsuranceClient_1.InsuranceClient; } });
|
|
35
|
-
const KillmailsClient_1 = require("../clients/KillmailsClient");
|
|
36
|
-
Object.defineProperty(exports, "KillmailsClient", { enumerable: true, get: function () { return KillmailsClient_1.KillmailsClient; } });
|
|
37
|
-
const LocationClient_1 = require("../clients/LocationClient");
|
|
38
|
-
Object.defineProperty(exports, "LocationClient", { enumerable: true, get: function () { return LocationClient_1.LocationClient; } });
|
|
39
|
-
const LoyaltyClient_1 = require("../clients/LoyaltyClient");
|
|
40
|
-
Object.defineProperty(exports, "LoyaltyClient", { enumerable: true, get: function () { return LoyaltyClient_1.LoyaltyClient; } });
|
|
41
|
-
const MailClient_1 = require("../clients/MailClient");
|
|
42
|
-
Object.defineProperty(exports, "MailClient", { enumerable: true, get: function () { return MailClient_1.MailClient; } });
|
|
43
|
-
const MarketClient_1 = require("../clients/MarketClient");
|
|
44
|
-
Object.defineProperty(exports, "MarketClient", { enumerable: true, get: function () { return MarketClient_1.MarketClient; } });
|
|
45
|
-
const PiClient_1 = require("../clients/PiClient");
|
|
46
|
-
Object.defineProperty(exports, "PiClient", { enumerable: true, get: function () { return PiClient_1.PiClient; } });
|
|
47
|
-
const RouteClient_1 = require("../clients/RouteClient");
|
|
48
|
-
Object.defineProperty(exports, "RouteClient", { enumerable: true, get: function () { return RouteClient_1.RouteClient; } });
|
|
49
|
-
const SearchClient_1 = require("../clients/SearchClient");
|
|
50
|
-
Object.defineProperty(exports, "SearchClient", { enumerable: true, get: function () { return SearchClient_1.SearchClient; } });
|
|
51
|
-
const SkillsClient_1 = require("../clients/SkillsClient");
|
|
52
|
-
Object.defineProperty(exports, "CharacterSkillsClient", { enumerable: true, get: function () { return SkillsClient_1.CharacterSkillsClient; } });
|
|
53
|
-
const SovereigntyClient_1 = require("../clients/SovereigntyClient");
|
|
54
|
-
Object.defineProperty(exports, "SovereigntyClient", { enumerable: true, get: function () { return SovereigntyClient_1.SovereigntyClient; } });
|
|
55
|
-
const StatusClient_1 = require("../clients/StatusClient");
|
|
56
|
-
Object.defineProperty(exports, "StatusClient", { enumerable: true, get: function () { return StatusClient_1.StatusClient; } });
|
|
57
|
-
const UiClient_1 = require("../clients/UiClient");
|
|
58
|
-
Object.defineProperty(exports, "UiClient", { enumerable: true, get: function () { return UiClient_1.UiClient; } });
|
|
59
|
-
const UniverseClient_1 = require("../clients/UniverseClient");
|
|
60
|
-
Object.defineProperty(exports, "UniverseClient", { enumerable: true, get: function () { return UniverseClient_1.UniverseClient; } });
|
|
61
|
-
const WalletClient_1 = require("../clients/WalletClient");
|
|
62
|
-
Object.defineProperty(exports, "WalletClient", { enumerable: true, get: function () { return WalletClient_1.WalletClient; } });
|
|
63
|
-
const WarsClient_1 = require("../clients/WarsClient");
|
|
64
|
-
Object.defineProperty(exports, "WarsClient", { enumerable: true, get: function () { return WarsClient_1.WarsClient; } });
|
|
65
|
-
const MetaClient_1 = require("../clients/MetaClient");
|
|
66
|
-
Object.defineProperty(exports, "MetaClient", { enumerable: true, get: function () { return MetaClient_1.MetaClient; } });
|
|
67
|
-
const FreelanceJobsClient_1 = require("../clients/FreelanceJobsClient");
|
|
68
|
-
Object.defineProperty(exports, "FreelanceJobsClient", { enumerable: true, get: function () { return FreelanceJobsClient_1.FreelanceJobsClient; } });
|
|
69
|
-
const SkyhooksClient_1 = require("../clients/SkyhooksClient");
|
|
70
|
-
Object.defineProperty(exports, "SkyhooksClient", { enumerable: true, get: function () { return SkyhooksClient_1.SkyhooksClient; } });
|
|
71
|
-
const MercenaryClient_1 = require("../clients/MercenaryClient");
|
|
72
|
-
Object.defineProperty(exports, "MercenaryClient", { enumerable: true, get: function () { return MercenaryClient_1.MercenaryClient; } });
|
|
73
|
-
const AccessListsClient_1 = require("../clients/AccessListsClient");
|
|
74
|
-
Object.defineProperty(exports, "AccessListsClient", { enumerable: true, get: function () { return AccessListsClient_1.AccessListsClient; } });
|
|
75
|
-
const clientFactories = {
|
|
76
|
-
alliance: AllianceClient_1.AllianceClient,
|
|
77
|
-
assets: AssetsClient_1.AssetsClient,
|
|
78
|
-
calendar: CalendarClient_1.CalendarClient,
|
|
79
|
-
characters: CharacterClient_1.CharacterClient,
|
|
80
|
-
clones: ClonesClient_1.ClonesClient,
|
|
81
|
-
contacts: ContactsClient_1.ContactsClient,
|
|
82
|
-
contracts: ContractsClient_1.ContractsClient,
|
|
83
|
-
corporations: CorporationsClient_1.CorporationsClient,
|
|
84
|
-
dogma: DogmaClient_1.DogmaClient,
|
|
85
|
-
factions: FactionClient_1.FactionClient,
|
|
86
|
-
fittings: FittingsClient_1.FittingsClient,
|
|
87
|
-
fleets: FleetClient_1.FleetClient,
|
|
88
|
-
incursions: IncursionsClient_1.IncursionsClient,
|
|
89
|
-
industry: IndustryClient_1.IndustryClient,
|
|
90
|
-
insurance: InsuranceClient_1.InsuranceClient,
|
|
91
|
-
killmails: KillmailsClient_1.KillmailsClient,
|
|
92
|
-
location: LocationClient_1.LocationClient,
|
|
93
|
-
loyalty: LoyaltyClient_1.LoyaltyClient,
|
|
94
|
-
mail: MailClient_1.MailClient,
|
|
95
|
-
market: MarketClient_1.MarketClient,
|
|
96
|
-
pi: PiClient_1.PiClient,
|
|
97
|
-
route: RouteClient_1.RouteClient,
|
|
98
|
-
search: SearchClient_1.SearchClient,
|
|
99
|
-
skills: SkillsClient_1.CharacterSkillsClient,
|
|
100
|
-
sovereignty: SovereigntyClient_1.SovereigntyClient,
|
|
101
|
-
status: StatusClient_1.StatusClient,
|
|
102
|
-
ui: UiClient_1.UiClient,
|
|
103
|
-
universe: UniverseClient_1.UniverseClient,
|
|
104
|
-
wallet: WalletClient_1.WalletClient,
|
|
105
|
-
wars: WarsClient_1.WarsClient,
|
|
106
|
-
meta: MetaClient_1.MetaClient,
|
|
107
|
-
freelanceJobs: FreelanceJobsClient_1.FreelanceJobsClient,
|
|
108
|
-
skyhooks: SkyhooksClient_1.SkyhooksClient,
|
|
109
|
-
mercenary: MercenaryClient_1.MercenaryClient,
|
|
110
|
-
accessLists: AccessListsClient_1.AccessListsClient,
|
|
111
|
-
};
|
|
112
|
-
function createClientInstance(name, apiClient) {
|
|
113
|
-
// eslint-disable-next-line security/detect-object-injection
|
|
114
|
-
return new clientFactories[name](apiClient);
|
|
115
|
-
}
|
|
116
|
-
const allClientTypes = Object.keys(clientFactories);
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.EsiDiagnostics = void 0;
|
|
4
|
-
class EsiDiagnostics {
|
|
5
|
-
apiClient;
|
|
6
|
-
etagCacheEnabled;
|
|
7
|
-
deduplicator;
|
|
8
|
-
constructor(apiClient, etagCacheEnabled, deduplicator) {
|
|
9
|
-
this.apiClient = apiClient;
|
|
10
|
-
this.etagCacheEnabled = etagCacheEnabled;
|
|
11
|
-
this.deduplicator = deduplicator;
|
|
12
|
-
}
|
|
13
|
-
getCacheStats() {
|
|
14
|
-
if (!this.etagCacheEnabled)
|
|
15
|
-
return null;
|
|
16
|
-
const cache = this.apiClient.getCache();
|
|
17
|
-
return cache ? cache.getStats() : null;
|
|
18
|
-
}
|
|
19
|
-
clearCache() {
|
|
20
|
-
const cache = this.apiClient.getCache();
|
|
21
|
-
if (cache) {
|
|
22
|
-
cache.clear();
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
updateCacheConfig(newConfig) {
|
|
26
|
-
const cache = this.apiClient.getCache();
|
|
27
|
-
if (cache) {
|
|
28
|
-
cache.updateConfig(newConfig);
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
getCircuitBreakerStats() {
|
|
32
|
-
const cb = this.apiClient.getCircuitBreaker();
|
|
33
|
-
return cb ? cb.getStats() : null;
|
|
34
|
-
}
|
|
35
|
-
resetCircuitBreaker(endpoint) {
|
|
36
|
-
const cb = this.apiClient.getCircuitBreaker();
|
|
37
|
-
if (cb) {
|
|
38
|
-
cb.reset(endpoint);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
getDeduplicatorStats() {
|
|
42
|
-
return this.deduplicator
|
|
43
|
-
? { pendingRequests: this.deduplicator.pending }
|
|
44
|
-
: null;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
exports.EsiDiagnostics = EsiDiagnostics;
|