@lgriffin/esi.ts 6.1.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/CHANGELOG.md +84 -1
- package/LICENSE +26 -26
- package/README.md +967 -896
- 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 +5 -0
- package/dist/clients/AllianceClient.d.ts.map +1 -1
- package/dist/clients/BaseEsiClient.d.ts +5 -3
- 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/constants.d.ts +2 -2
- package/dist/core/endpoints/EndpointDefinition.d.ts +2 -0
- package/dist/core/endpoints/EndpointDefinition.d.ts.map +1 -1
- package/dist/core/endpoints/allianceEndpoints.d.ts +17 -14
- package/dist/core/endpoints/allianceEndpoints.d.ts.map +1 -1
- package/dist/core/endpoints/assetEndpoints.d.ts +15 -0
- package/dist/core/endpoints/assetEndpoints.d.ts.map +1 -1
- package/dist/core/endpoints/calendarEndpoints.d.ts +1 -1
- package/dist/core/endpoints/characterEndpoints.d.ts +11 -3
- package/dist/core/endpoints/characterEndpoints.d.ts.map +1 -1
- package/dist/core/endpoints/cloneEndpoints.d.ts +17 -15
- package/dist/core/endpoints/cloneEndpoints.d.ts.map +1 -1
- 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 +30 -0
- package/dist/core/endpoints/corporationEndpoints.d.ts.map +1 -1
- package/dist/core/endpoints/createClient.d.ts +23 -2
- package/dist/core/endpoints/createClient.d.ts.map +1 -1
- package/dist/core/endpoints/dogmaEndpoints.d.ts +58 -38
- package/dist/core/endpoints/dogmaEndpoints.d.ts.map +1 -1
- package/dist/core/endpoints/esi-cache-ttls.generated.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 +26 -0
- package/dist/core/endpoints/mailEndpoints.d.ts.map +1 -1
- package/dist/core/endpoints/marketEndpoints.d.ts +44 -43
- package/dist/core/endpoints/marketEndpoints.d.ts.map +1 -1
- package/dist/core/endpoints/metaEndpoints.d.ts +2 -0
- package/dist/core/endpoints/metaEndpoints.d.ts.map +1 -1
- package/dist/core/endpoints/piEndpoints.d.ts +7 -0
- package/dist/core/endpoints/piEndpoints.d.ts.map +1 -1
- package/dist/core/endpoints/routeEndpoints.d.ts +4 -0
- package/dist/core/endpoints/routeEndpoints.d.ts.map +1 -1
- package/dist/core/endpoints/searchEndpoints.d.ts +13 -0
- package/dist/core/endpoints/searchEndpoints.d.ts.map +1 -1
- package/dist/core/endpoints/skillEndpoints.d.ts +10 -0
- package/dist/core/endpoints/skillEndpoints.d.ts.map +1 -1
- package/dist/core/endpoints/universeEndpoints.d.ts +21 -2
- package/dist/core/endpoints/universeEndpoints.d.ts.map +1 -1
- package/dist/core/endpoints/walletEndpoints.d.ts +9 -0
- package/dist/core/endpoints/walletEndpoints.d.ts.map +1 -1
- package/dist/core/endpoints/warEndpoints.d.ts +1 -0
- package/dist/core/endpoints/warEndpoints.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 +9 -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 +13 -0
- 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/mail.d.ts +13 -0
- package/dist/schemas/mail.d.ts.map +1 -1
- package/dist/schemas/market.d.ts +104 -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/skills.d.ts +10 -0
- package/dist/schemas/skills.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 +1 -0
- package/dist/testing/TestDataFactory.d.ts.map +1 -1
- package/dist/types/api-responses.d.ts +1 -0
- package/dist/types/api-responses.d.ts.map +1 -1
- package/dist/types/branded.d.ts +23 -0
- package/dist/types/branded.d.ts.map +1 -0
- package/dist/types/character.d.ts +2 -1
- package/dist/types/character.d.ts.map +1 -1
- package/dist/types/common.d.ts +10 -0
- package/dist/types/common.d.ts.map +1 -1
- package/dist/types/generated/esi-spec.generated.d.ts +655 -430
- package/dist/types/generated/esi-spec.generated.d.ts.map +1 -1
- package/dist/types/generated/spec-alignment.check.d.ts +22 -0
- package/dist/types/generated/spec-alignment.check.d.ts.map +1 -0
- package/dist/types/market.d.ts +8 -1
- package/dist/types/market.d.ts.map +1 -1
- package/package.json +235 -200
- 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 -70
- package/dist/clients/AssetsClient.js +0 -81
- package/dist/clients/BaseEsiClient.js +0 -31
- 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 -31
- package/dist/core/endpoints/assetEndpoints.js +0 -50
- package/dist/core/endpoints/buildEndpointPath.js +0 -44
- package/dist/core/endpoints/calendarEndpoints.js +0 -35
- package/dist/core/endpoints/characterEndpoints.js +0 -103
- package/dist/core/endpoints/cloneEndpoints.js +0 -19
- package/dist/core/endpoints/contactEndpoints.js +0 -72
- package/dist/core/endpoints/contractEndpoints.js +0 -70
- package/dist/core/endpoints/corporationEndpoints.js +0 -154
- package/dist/core/endpoints/createClient.js +0 -156
- package/dist/core/endpoints/dogmaEndpoints.js +0 -37
- package/dist/core/endpoints/esi-cache-ttls.generated.js +0 -126
- package/dist/core/endpoints/esi-rate-limit-groups.generated.js +0 -153
- package/dist/core/endpoints/esi-scopes.generated.js +0 -127
- 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 -66
- package/dist/core/endpoints/marketEndpoints.js +0 -80
- package/dist/core/endpoints/mercenaryEndpoints.js +0 -19
- package/dist/core/endpoints/metaEndpoints.js +0 -10
- package/dist/core/endpoints/piEndpoints.js +0 -34
- package/dist/core/endpoints/routeEndpoints.js +0 -12
- package/dist/core/endpoints/searchEndpoints.js +0 -12
- package/dist/core/endpoints/skillEndpoints.js +0 -28
- 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 -202
- package/dist/core/endpoints/walletEndpoints.js +0 -47
- package/dist/core/endpoints/warEndpoints.js +0 -27
- 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 -114
- 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 -178
- 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 -30
- package/dist/schemas/market.js +0 -26
- package/dist/schemas/mercenary.js +0 -22
- package/dist/schemas/pi.js +0 -85
- package/dist/schemas/skills.js +0 -20
- 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 -820
- package/dist/types/access-lists.js +0 -2
- package/dist/types/alliance.js +0 -2
- package/dist/types/api-responses.js +0 -72
- package/dist/types/assets.js +0 -2
- 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/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,307 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.RateLimiter = void 0;
|
|
4
|
-
const esi_rate_limit_groups_generated_1 = require("../endpoints/esi-rate-limit-groups.generated");
|
|
5
|
-
const stringUtil_1 = require("../util/stringUtil");
|
|
6
|
-
const loggerUtil_1 = require("../logger/loggerUtil");
|
|
7
|
-
const sleep_1 = require("../util/sleep");
|
|
8
|
-
function getTokenCost(statusCode) {
|
|
9
|
-
if (statusCode >= 200 && statusCode < 300)
|
|
10
|
-
return 2;
|
|
11
|
-
if (statusCode >= 300 && statusCode < 400)
|
|
12
|
-
return 1;
|
|
13
|
-
if (statusCode >= 400 && statusCode < 500)
|
|
14
|
-
return 5;
|
|
15
|
-
if (statusCode >= 500 && statusCode < 600)
|
|
16
|
-
return 0;
|
|
17
|
-
return 2;
|
|
18
|
-
}
|
|
19
|
-
const DEFAULT_WINDOW_MS = 900_000;
|
|
20
|
-
class RateLimiter {
|
|
21
|
-
minDelayMs;
|
|
22
|
-
decelerationThreshold;
|
|
23
|
-
userKeyExtractor;
|
|
24
|
-
lastRequestTime = 0;
|
|
25
|
-
isTestMode = false;
|
|
26
|
-
errorLimitRemain = 100;
|
|
27
|
-
errorLimitReset = 0;
|
|
28
|
-
defaultBuckets = new Map();
|
|
29
|
-
userBuckets = null;
|
|
30
|
-
fallbackBucket;
|
|
31
|
-
lastCleanup = 0;
|
|
32
|
-
static CLEANUP_INTERVAL_MS = 60_000;
|
|
33
|
-
constructor(config) {
|
|
34
|
-
this.minDelayMs = config?.minDelayMs ?? 50;
|
|
35
|
-
this.decelerationThreshold = config?.decelerationThreshold ?? 0.2;
|
|
36
|
-
this.userKeyExtractor = config?.userKeyExtractor;
|
|
37
|
-
if (this.userKeyExtractor) {
|
|
38
|
-
this.userBuckets = new Map();
|
|
39
|
-
}
|
|
40
|
-
this.fallbackBucket = this.createFallbackBucket();
|
|
41
|
-
}
|
|
42
|
-
createFallbackBucket() {
|
|
43
|
-
return {
|
|
44
|
-
group: '__fallback__',
|
|
45
|
-
remaining: -1,
|
|
46
|
-
limit: 0,
|
|
47
|
-
used: 0,
|
|
48
|
-
windowSizeMs: DEFAULT_WINDOW_MS,
|
|
49
|
-
blockedUntil: 0,
|
|
50
|
-
lastUpdated: 0,
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
createBucketFromSpec(spec) {
|
|
54
|
-
return {
|
|
55
|
-
group: spec.group,
|
|
56
|
-
remaining: spec.maxTokens,
|
|
57
|
-
limit: spec.maxTokens,
|
|
58
|
-
used: 0,
|
|
59
|
-
windowSizeMs: spec.windowSizeMs,
|
|
60
|
-
blockedUntil: 0,
|
|
61
|
-
lastUpdated: 0,
|
|
62
|
-
};
|
|
63
|
-
}
|
|
64
|
-
createBucketForGroup(groupName) {
|
|
65
|
-
return {
|
|
66
|
-
group: groupName,
|
|
67
|
-
remaining: -1,
|
|
68
|
-
limit: 0,
|
|
69
|
-
used: 0,
|
|
70
|
-
windowSizeMs: DEFAULT_WINDOW_MS,
|
|
71
|
-
blockedUntil: 0,
|
|
72
|
-
lastUpdated: 0,
|
|
73
|
-
};
|
|
74
|
-
}
|
|
75
|
-
lookupGroupSpec(method, templatePath) {
|
|
76
|
-
if (!templatePath || !method)
|
|
77
|
-
return undefined;
|
|
78
|
-
const normalized = templatePath
|
|
79
|
-
.replace(/\/$/, '')
|
|
80
|
-
.replace(/\{(\w+)\}/g, (_, name) => `{${(0, stringUtil_1.camelToSnake)(name)}}`);
|
|
81
|
-
const key = `${method}:${normalized}`;
|
|
82
|
-
return esi_rate_limit_groups_generated_1.esiRateLimitGroups[key];
|
|
83
|
-
}
|
|
84
|
-
resolveBucketMap(requestHeaders) {
|
|
85
|
-
if (!this.userBuckets || !this.userKeyExtractor || !requestHeaders) {
|
|
86
|
-
return this.defaultBuckets;
|
|
87
|
-
}
|
|
88
|
-
const userKey = this.userKeyExtractor(requestHeaders);
|
|
89
|
-
let userSet = this.userBuckets.get(userKey);
|
|
90
|
-
if (!userSet) {
|
|
91
|
-
userSet = { groups: new Map(), lastAccessed: Date.now() };
|
|
92
|
-
this.userBuckets.set(userKey, userSet);
|
|
93
|
-
}
|
|
94
|
-
userSet.lastAccessed = Date.now();
|
|
95
|
-
return userSet.groups;
|
|
96
|
-
}
|
|
97
|
-
getBucket(templatePath, method, requestHeaders, groupNameOverride) {
|
|
98
|
-
const bucketMap = this.resolveBucketMap(requestHeaders);
|
|
99
|
-
const spec = this.lookupGroupSpec(method, templatePath);
|
|
100
|
-
const groupName = groupNameOverride ?? spec?.group;
|
|
101
|
-
if (!groupName)
|
|
102
|
-
return this.fallbackBucket;
|
|
103
|
-
let bucket = bucketMap.get(groupName);
|
|
104
|
-
if (!bucket) {
|
|
105
|
-
bucket = spec
|
|
106
|
-
? this.createBucketFromSpec(spec)
|
|
107
|
-
: this.createBucketForGroup(groupName);
|
|
108
|
-
bucketMap.set(groupName, bucket);
|
|
109
|
-
}
|
|
110
|
-
return bucket;
|
|
111
|
-
}
|
|
112
|
-
cleanupStaleUsers() {
|
|
113
|
-
if (!this.userBuckets)
|
|
114
|
-
return;
|
|
115
|
-
const now = Date.now();
|
|
116
|
-
if (now - this.lastCleanup < RateLimiter.CLEANUP_INTERVAL_MS)
|
|
117
|
-
return;
|
|
118
|
-
this.lastCleanup = now;
|
|
119
|
-
for (const [userKey, userSet] of this.userBuckets) {
|
|
120
|
-
if (now - userSet.lastAccessed > DEFAULT_WINDOW_MS) {
|
|
121
|
-
this.userBuckets.delete(userKey);
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
updateFromResponse(headers, statusCode, templatePath, method, requestHeaders) {
|
|
126
|
-
if (this.isTestMode)
|
|
127
|
-
return;
|
|
128
|
-
const responseGroup = headers['x-ratelimit-group'] || undefined;
|
|
129
|
-
const bucket = this.getBucket(templatePath, method, requestHeaders, responseGroup);
|
|
130
|
-
if ('x-ratelimit-remaining' in headers) {
|
|
131
|
-
bucket.remaining = parseInt(headers['x-ratelimit-remaining'], 10);
|
|
132
|
-
}
|
|
133
|
-
if ('x-ratelimit-limit' in headers) {
|
|
134
|
-
bucket.limit = parseInt(headers['x-ratelimit-limit'], 10);
|
|
135
|
-
}
|
|
136
|
-
if ('x-ratelimit-used' in headers) {
|
|
137
|
-
bucket.used = parseInt(headers['x-ratelimit-used'], 10);
|
|
138
|
-
}
|
|
139
|
-
bucket.lastUpdated = Date.now();
|
|
140
|
-
if ('retry-after' in headers) {
|
|
141
|
-
const retrySeconds = parseInt(headers['retry-after'], 10);
|
|
142
|
-
bucket.blockedUntil = Date.now() + retrySeconds * 1000;
|
|
143
|
-
}
|
|
144
|
-
if (statusCode === 420 || statusCode === 429) {
|
|
145
|
-
if (bucket.blockedUntil <= Date.now()) {
|
|
146
|
-
bucket.blockedUntil = Date.now() + 60_000;
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
if ('x-esi-error-limit-remain' in headers) {
|
|
150
|
-
this.errorLimitRemain = parseInt(headers['x-esi-error-limit-remain'], 10);
|
|
151
|
-
}
|
|
152
|
-
if ('x-esi-error-limit-reset' in headers) {
|
|
153
|
-
this.errorLimitReset = parseInt(headers['x-esi-error-limit-reset'], 10);
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
updateRateLimitInfo(headers) {
|
|
157
|
-
this.updateFromResponse(headers, 200);
|
|
158
|
-
}
|
|
159
|
-
async checkRateLimit(templatePath, method, requestHeaders) {
|
|
160
|
-
if (this.isTestMode)
|
|
161
|
-
return;
|
|
162
|
-
this.cleanupStaleUsers();
|
|
163
|
-
const bucket = this.getBucket(templatePath, method, requestHeaders);
|
|
164
|
-
const now = Date.now();
|
|
165
|
-
if (bucket.blockedUntil > now) {
|
|
166
|
-
const waitTime = bucket.blockedUntil - now;
|
|
167
|
-
(0, loggerUtil_1.logWarn)(`[ESI Rate Limit] Group '${bucket.group}' blocked for ${Math.ceil(waitTime / 1000)}s (420/429 received)`);
|
|
168
|
-
await (0, sleep_1.sleep)(waitTime);
|
|
169
|
-
bucket.blockedUntil = 0;
|
|
170
|
-
return;
|
|
171
|
-
}
|
|
172
|
-
if (this.errorLimitRemain <= 10 && this.errorLimitRemain > 0) {
|
|
173
|
-
const resetMs = this.errorLimitReset * 1000;
|
|
174
|
-
const delay = Math.min(resetMs, 5000);
|
|
175
|
-
if (delay > 0) {
|
|
176
|
-
(0, loggerUtil_1.logWarn)(`[ESI Rate Limit] Legacy error limit low (${this.errorLimitRemain}), waiting ${delay}ms`);
|
|
177
|
-
await (0, sleep_1.sleep)(delay);
|
|
178
|
-
return;
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
if (this.errorLimitRemain <= 0 && this.errorLimitReset > 0) {
|
|
182
|
-
const waitTime = this.errorLimitReset * 1000;
|
|
183
|
-
(0, loggerUtil_1.logWarn)(`[ESI Rate Limit] Legacy error limit exhausted, waiting ${Math.ceil(waitTime / 1000)}s`);
|
|
184
|
-
await (0, sleep_1.sleep)(waitTime);
|
|
185
|
-
return;
|
|
186
|
-
}
|
|
187
|
-
if (bucket.remaining >= 0 && bucket.limit > 0) {
|
|
188
|
-
const ratio = bucket.remaining / bucket.limit;
|
|
189
|
-
if (bucket.remaining <= 0) {
|
|
190
|
-
(0, loggerUtil_1.logWarn)(`[ESI Rate Limit] Group '${bucket.group}' token bucket empty, waiting 1s`);
|
|
191
|
-
await (0, sleep_1.sleep)(1000);
|
|
192
|
-
return;
|
|
193
|
-
}
|
|
194
|
-
if (ratio <= this.decelerationThreshold) {
|
|
195
|
-
const extraDelay = Math.ceil((1 - ratio / this.decelerationThreshold) * 1000);
|
|
196
|
-
await (0, sleep_1.sleep)(extraDelay);
|
|
197
|
-
return;
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
await this.enforceMinDelay();
|
|
201
|
-
}
|
|
202
|
-
async enforceMinDelay() {
|
|
203
|
-
if (this.isTestMode) {
|
|
204
|
-
this.lastRequestTime = Date.now();
|
|
205
|
-
return;
|
|
206
|
-
}
|
|
207
|
-
const now = Date.now();
|
|
208
|
-
const timeSinceLastRequest = now - this.lastRequestTime;
|
|
209
|
-
if (timeSinceLastRequest < this.minDelayMs) {
|
|
210
|
-
await (0, sleep_1.sleep)(this.minDelayMs - timeSinceLastRequest);
|
|
211
|
-
}
|
|
212
|
-
this.lastRequestTime = Date.now();
|
|
213
|
-
}
|
|
214
|
-
getStatus() {
|
|
215
|
-
let worstBucket = this.fallbackBucket;
|
|
216
|
-
let worstRatio = Infinity;
|
|
217
|
-
const checkBucket = (bucket) => {
|
|
218
|
-
if (bucket.limit > 0) {
|
|
219
|
-
const ratio = bucket.remaining / bucket.limit;
|
|
220
|
-
if (ratio < worstRatio) {
|
|
221
|
-
worstRatio = ratio;
|
|
222
|
-
worstBucket = bucket;
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
};
|
|
226
|
-
for (const bucket of this.defaultBuckets.values()) {
|
|
227
|
-
checkBucket(bucket);
|
|
228
|
-
}
|
|
229
|
-
if (this.userBuckets) {
|
|
230
|
-
for (const userSet of this.userBuckets.values()) {
|
|
231
|
-
for (const bucket of userSet.groups.values()) {
|
|
232
|
-
checkBucket(bucket);
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
return {
|
|
237
|
-
remaining: worstBucket.remaining,
|
|
238
|
-
limit: worstBucket.limit,
|
|
239
|
-
used: worstBucket.used,
|
|
240
|
-
group: worstBucket.group === '__fallback__' ? null : worstBucket.group,
|
|
241
|
-
errorLimitRemain: this.errorLimitRemain,
|
|
242
|
-
errorLimitReset: this.errorLimitReset,
|
|
243
|
-
retryAfter: worstBucket.blockedUntil > Date.now()
|
|
244
|
-
? Math.ceil((worstBucket.blockedUntil - Date.now()) / 1000)
|
|
245
|
-
: null,
|
|
246
|
-
blockedUntil: worstBucket.blockedUntil,
|
|
247
|
-
};
|
|
248
|
-
}
|
|
249
|
-
getGroupStatus(group) {
|
|
250
|
-
const bucket = this.defaultBuckets.get(group);
|
|
251
|
-
if (!bucket)
|
|
252
|
-
return undefined;
|
|
253
|
-
return {
|
|
254
|
-
group: bucket.group,
|
|
255
|
-
remaining: bucket.remaining,
|
|
256
|
-
limit: bucket.limit,
|
|
257
|
-
used: bucket.used,
|
|
258
|
-
windowSizeMs: bucket.windowSizeMs,
|
|
259
|
-
blockedUntil: bucket.blockedUntil,
|
|
260
|
-
};
|
|
261
|
-
}
|
|
262
|
-
getAllGroupStatuses() {
|
|
263
|
-
const result = new Map();
|
|
264
|
-
for (const [name, bucket] of this.defaultBuckets) {
|
|
265
|
-
result.set(name, {
|
|
266
|
-
group: bucket.group,
|
|
267
|
-
remaining: bucket.remaining,
|
|
268
|
-
limit: bucket.limit,
|
|
269
|
-
used: bucket.used,
|
|
270
|
-
windowSizeMs: bucket.windowSizeMs,
|
|
271
|
-
blockedUntil: bucket.blockedUntil,
|
|
272
|
-
});
|
|
273
|
-
}
|
|
274
|
-
return result;
|
|
275
|
-
}
|
|
276
|
-
static getTokenCost(statusCode) {
|
|
277
|
-
return getTokenCost(statusCode);
|
|
278
|
-
}
|
|
279
|
-
isBlocked(group) {
|
|
280
|
-
const now = Date.now();
|
|
281
|
-
if (group) {
|
|
282
|
-
const bucket = this.defaultBuckets.get(group);
|
|
283
|
-
return bucket ? bucket.blockedUntil > now : false;
|
|
284
|
-
}
|
|
285
|
-
if (this.fallbackBucket.blockedUntil > now)
|
|
286
|
-
return true;
|
|
287
|
-
for (const bucket of this.defaultBuckets.values()) {
|
|
288
|
-
if (bucket.blockedUntil > now)
|
|
289
|
-
return true;
|
|
290
|
-
}
|
|
291
|
-
return false;
|
|
292
|
-
}
|
|
293
|
-
setTestMode(enabled) {
|
|
294
|
-
this.isTestMode = enabled;
|
|
295
|
-
}
|
|
296
|
-
reset() {
|
|
297
|
-
this.defaultBuckets.clear();
|
|
298
|
-
if (this.userBuckets)
|
|
299
|
-
this.userBuckets.clear();
|
|
300
|
-
this.fallbackBucket = this.createFallbackBucket();
|
|
301
|
-
this.errorLimitRemain = 100;
|
|
302
|
-
this.errorLimitReset = 0;
|
|
303
|
-
this.lastRequestTime = 0;
|
|
304
|
-
this.lastCleanup = 0;
|
|
305
|
-
}
|
|
306
|
-
}
|
|
307
|
-
exports.RateLimiter = RateLimiter;
|
package/dist/core/util/error.js
DELETED
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.EsiValidationError = exports.buildError = exports.TimeoutError = exports.EsiError = void 0;
|
|
4
|
-
exports.isEsiError = isEsiError;
|
|
5
|
-
exports.isRateLimited = isRateLimited;
|
|
6
|
-
exports.isNotFound = isNotFound;
|
|
7
|
-
exports.isUnauthorized = isUnauthorized;
|
|
8
|
-
exports.isForbidden = isForbidden;
|
|
9
|
-
exports.isServerError = isServerError;
|
|
10
|
-
exports.isTimeout = isTimeout;
|
|
11
|
-
exports.isRetryable = isRetryable;
|
|
12
|
-
exports.isValidationError = isValidationError;
|
|
13
|
-
function sanitizeUrl(url) {
|
|
14
|
-
if (!url)
|
|
15
|
-
return url;
|
|
16
|
-
try {
|
|
17
|
-
const parsed = new URL(url);
|
|
18
|
-
const sensitiveParams = ['token', 'access_token', 'api_key'];
|
|
19
|
-
for (const param of sensitiveParams) {
|
|
20
|
-
if (parsed.searchParams.has(param)) {
|
|
21
|
-
parsed.searchParams.set(param, '[REDACTED]');
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
return parsed.toString();
|
|
25
|
-
}
|
|
26
|
-
catch {
|
|
27
|
-
const qIndex = url.indexOf('?');
|
|
28
|
-
return qIndex >= 0 ? url.substring(0, qIndex) + '?[params-redacted]' : url;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
class EsiError extends Error {
|
|
32
|
-
statusCode;
|
|
33
|
-
requestId;
|
|
34
|
-
url;
|
|
35
|
-
constructor(statusCode, message, url, requestId) {
|
|
36
|
-
super(message);
|
|
37
|
-
this.statusCode = statusCode;
|
|
38
|
-
this.requestId = requestId;
|
|
39
|
-
this.name = 'EsiError';
|
|
40
|
-
this.url = sanitizeUrl(url);
|
|
41
|
-
}
|
|
42
|
-
isRateLimited() {
|
|
43
|
-
return this.statusCode === 420 || this.statusCode === 429;
|
|
44
|
-
}
|
|
45
|
-
isNotFound() {
|
|
46
|
-
return this.statusCode === 404;
|
|
47
|
-
}
|
|
48
|
-
isUnauthorized() {
|
|
49
|
-
return this.statusCode === 401;
|
|
50
|
-
}
|
|
51
|
-
isForbidden() {
|
|
52
|
-
return this.statusCode === 403;
|
|
53
|
-
}
|
|
54
|
-
isServerError() {
|
|
55
|
-
return this.statusCode >= 500;
|
|
56
|
-
}
|
|
57
|
-
isTimeout() {
|
|
58
|
-
return this.statusCode === 0;
|
|
59
|
-
}
|
|
60
|
-
get retryable() {
|
|
61
|
-
return (this.statusCode === 0 ||
|
|
62
|
-
this.statusCode === 420 ||
|
|
63
|
-
this.statusCode === 429 ||
|
|
64
|
-
this.statusCode === 502 ||
|
|
65
|
-
this.statusCode === 503 ||
|
|
66
|
-
this.statusCode === 504);
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
exports.EsiError = EsiError;
|
|
70
|
-
function isEsiError(error) {
|
|
71
|
-
return error instanceof EsiError;
|
|
72
|
-
}
|
|
73
|
-
function isRateLimited(error) {
|
|
74
|
-
return error instanceof EsiError && error.isRateLimited();
|
|
75
|
-
}
|
|
76
|
-
function isNotFound(error) {
|
|
77
|
-
return error instanceof EsiError && error.isNotFound();
|
|
78
|
-
}
|
|
79
|
-
function isUnauthorized(error) {
|
|
80
|
-
return error instanceof EsiError && error.isUnauthorized();
|
|
81
|
-
}
|
|
82
|
-
function isForbidden(error) {
|
|
83
|
-
return error instanceof EsiError && error.isForbidden();
|
|
84
|
-
}
|
|
85
|
-
function isServerError(error) {
|
|
86
|
-
return error instanceof EsiError && error.isServerError();
|
|
87
|
-
}
|
|
88
|
-
class TimeoutError extends EsiError {
|
|
89
|
-
timeoutMs;
|
|
90
|
-
constructor(timeoutMs, url, requestId) {
|
|
91
|
-
super(0, `Request timed out after ${timeoutMs}ms`, url, requestId);
|
|
92
|
-
this.timeoutMs = timeoutMs;
|
|
93
|
-
this.name = 'TimeoutError';
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
exports.TimeoutError = TimeoutError;
|
|
97
|
-
function isTimeout(error) {
|
|
98
|
-
return error instanceof TimeoutError;
|
|
99
|
-
}
|
|
100
|
-
function isRetryable(error) {
|
|
101
|
-
return error instanceof EsiError && error.retryable;
|
|
102
|
-
}
|
|
103
|
-
const buildError = (message, type = 'ERROR', url) => {
|
|
104
|
-
const error = new Error(`[${type}] ${message}`);
|
|
105
|
-
if (url) {
|
|
106
|
-
error.url = url;
|
|
107
|
-
}
|
|
108
|
-
return error;
|
|
109
|
-
};
|
|
110
|
-
exports.buildError = buildError;
|
|
111
|
-
class EsiValidationError extends EsiError {
|
|
112
|
-
validationError;
|
|
113
|
-
constructor(url, zodError, requestId) {
|
|
114
|
-
super(0, `Response validation failed for ${url}`, url, requestId);
|
|
115
|
-
this.name = 'EsiValidationError';
|
|
116
|
-
this.validationError = zodError;
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
exports.EsiValidationError = EsiValidationError;
|
|
120
|
-
function isValidationError(error) {
|
|
121
|
-
return error instanceof EsiValidationError;
|
|
122
|
-
}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.parseWarning = parseWarning;
|
|
4
|
-
exports.parseHeaders = parseHeaders;
|
|
5
|
-
function parseWarning(value) {
|
|
6
|
-
if (!value)
|
|
7
|
-
return null;
|
|
8
|
-
const match = /^(\d{3}) - "([^"]+)"$/.exec(value) ??
|
|
9
|
-
/^(\d{3}) - ([^ ].+[^ ])$/.exec(value);
|
|
10
|
-
if (!match)
|
|
11
|
-
return null;
|
|
12
|
-
const [, code, message] = match;
|
|
13
|
-
return { code: parseInt(code, 10), message: message };
|
|
14
|
-
}
|
|
15
|
-
function parseHeaders(fetchHeaders) {
|
|
16
|
-
const raw = {};
|
|
17
|
-
fetchHeaders.forEach((value, key) => {
|
|
18
|
-
raw[key.toLowerCase()] = value;
|
|
19
|
-
});
|
|
20
|
-
const cursorBefore = raw['x-cursor-before'] ?? null;
|
|
21
|
-
const cursorAfter = raw['x-cursor-after'] ?? null;
|
|
22
|
-
return {
|
|
23
|
-
raw,
|
|
24
|
-
xPages: parseInt(raw['x-pages'] ?? '1', 10),
|
|
25
|
-
etag: raw['etag'] ?? null,
|
|
26
|
-
cacheControl: raw['cache-control'] ?? null,
|
|
27
|
-
expires: raw['expires'] ?? null,
|
|
28
|
-
lastModified: raw['last-modified'] ?? null,
|
|
29
|
-
cursorBefore,
|
|
30
|
-
cursorAfter,
|
|
31
|
-
hasCursorPagination: 'x-cursor-before' in raw || 'x-cursor-after' in raw,
|
|
32
|
-
warning: parseWarning(raw['warning']),
|
|
33
|
-
requestId: raw['x-esi-request-id'] ?? null,
|
|
34
|
-
date: raw['date'] ?? null,
|
|
35
|
-
contentLanguage: raw['content-language'] ?? null,
|
|
36
|
-
};
|
|
37
|
-
}
|
package/dist/core/util/retry.js
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.retryDelay = retryDelay;
|
|
4
|
-
function retryDelay(attempt, baseMs, maxMs) {
|
|
5
|
-
const exponential = baseMs * Math.pow(2, attempt);
|
|
6
|
-
// eslint-disable-next-line sonarjs/pseudo-random
|
|
7
|
-
const jitter = exponential * (0.75 + Math.random() * 0.5);
|
|
8
|
-
return Math.min(jitter, maxMs);
|
|
9
|
-
}
|
package/dist/core/util/sleep.js
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getBody = void 0;
|
|
4
|
-
/* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-return */
|
|
5
|
-
const getBody = async (apiCall) => {
|
|
6
|
-
return apiCall();
|
|
7
|
-
};
|
|
8
|
-
exports.getBody = getBody;
|
|
9
|
-
/* eslint-enable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-return */
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.validatePathParam = validatePathParam;
|
|
4
|
-
exports.validateBaseUrl = validateBaseUrl;
|
|
5
|
-
exports.validateQueryParam = validateQueryParam;
|
|
6
|
-
const error_1 = require("./error");
|
|
7
|
-
const UNSAFE_PATH_CHARS = /[/\\?#@!$&'()*+,;=<>{}|^`]/;
|
|
8
|
-
function validatePathParam(paramName, value) {
|
|
9
|
-
if (value === null || value === undefined || value === '') {
|
|
10
|
-
throw (0, error_1.buildError)(`Path parameter '${paramName}' must not be empty`, 'VALIDATION_ERROR');
|
|
11
|
-
}
|
|
12
|
-
const str = `${value}`;
|
|
13
|
-
if (UNSAFE_PATH_CHARS.test(str)) {
|
|
14
|
-
throw (0, error_1.buildError)(`Path parameter '${paramName}' contains invalid characters`, 'VALIDATION_ERROR');
|
|
15
|
-
}
|
|
16
|
-
if (typeof value === 'number' && !Number.isFinite(value)) {
|
|
17
|
-
throw (0, error_1.buildError)(`Path parameter '${paramName}' must be a finite number`, 'VALIDATION_ERROR');
|
|
18
|
-
}
|
|
19
|
-
return str;
|
|
20
|
-
}
|
|
21
|
-
const ALLOWED_ESI_HOSTS = ['esi.evetech.net'];
|
|
22
|
-
function validateBaseUrl(url, allowCustomHost) {
|
|
23
|
-
let parsed;
|
|
24
|
-
try {
|
|
25
|
-
parsed = new URL(url);
|
|
26
|
-
}
|
|
27
|
-
catch {
|
|
28
|
-
throw (0, error_1.buildError)(`Invalid base URL: ${url}`, 'VALIDATION_ERROR');
|
|
29
|
-
}
|
|
30
|
-
if (parsed.protocol !== 'https:') {
|
|
31
|
-
throw (0, error_1.buildError)('Base URL must use HTTPS protocol', 'VALIDATION_ERROR');
|
|
32
|
-
}
|
|
33
|
-
if (!allowCustomHost && !ALLOWED_ESI_HOSTS.includes(parsed.hostname)) {
|
|
34
|
-
throw (0, error_1.buildError)(`Base URL host '${parsed.hostname}' is not in the allowlist. ` +
|
|
35
|
-
`Allowed hosts: ${ALLOWED_ESI_HOSTS.join(', ')}. ` +
|
|
36
|
-
`Set unsafeAllowCustomHost to bypass this check.`, 'VALIDATION_ERROR');
|
|
37
|
-
}
|
|
38
|
-
return url.replace(/\/$/, '');
|
|
39
|
-
}
|
|
40
|
-
function validateQueryParam(paramName, value) {
|
|
41
|
-
if (value === null || value === undefined) {
|
|
42
|
-
throw (0, error_1.buildError)(`Query parameter '${paramName}' must not be null or undefined`, 'VALIDATION_ERROR');
|
|
43
|
-
}
|
|
44
|
-
const str = `${value}`;
|
|
45
|
-
if (typeof value === 'number' && !Number.isFinite(value)) {
|
|
46
|
-
throw (0, error_1.buildError)(`Query parameter '${paramName}' must be a finite number`, 'VALIDATION_ERROR');
|
|
47
|
-
}
|
|
48
|
-
if (str.length > 2000) {
|
|
49
|
-
throw (0, error_1.buildError)(`Query parameter '${paramName}' exceeds maximum length`, 'VALIDATION_ERROR');
|
|
50
|
-
}
|
|
51
|
-
return str;
|
|
52
|
-
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.AccessListSchema = exports.AccessListEntrySchema = void 0;
|
|
4
|
-
const zod_1 = require("zod");
|
|
5
|
-
exports.AccessListEntrySchema = zod_1.z.looseObject({
|
|
6
|
-
entity_id: zod_1.z.number(),
|
|
7
|
-
entity_type: zod_1.z.enum(['character', 'corporation', 'alliance']),
|
|
8
|
-
access_type: zod_1.z.enum(['allowed', 'blocked']),
|
|
9
|
-
});
|
|
10
|
-
exports.AccessListSchema = zod_1.z.looseObject({
|
|
11
|
-
access_list_id: zod_1.z.number(),
|
|
12
|
-
name: zod_1.z.string(),
|
|
13
|
-
entries: zod_1.z.array(exports.AccessListEntrySchema),
|
|
14
|
-
});
|
package/dist/schemas/alliance.js
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.AllianceIconSchema = exports.AllianceContactLabelSchema = exports.AllianceContactSchema = exports.AllianceInfoSchema = void 0;
|
|
4
|
-
const zod_1 = require("zod");
|
|
5
|
-
exports.AllianceInfoSchema = zod_1.z.looseObject({
|
|
6
|
-
alliance_id: zod_1.z.number().optional(),
|
|
7
|
-
name: zod_1.z.string(),
|
|
8
|
-
ticker: zod_1.z.string(),
|
|
9
|
-
creator_id: zod_1.z.number(),
|
|
10
|
-
creator_corporation_id: zod_1.z.number(),
|
|
11
|
-
executor_corporation_id: zod_1.z.number().optional(),
|
|
12
|
-
date_founded: zod_1.z.string(),
|
|
13
|
-
faction_id: zod_1.z.number().optional(),
|
|
14
|
-
});
|
|
15
|
-
exports.AllianceContactSchema = zod_1.z.looseObject({
|
|
16
|
-
contact_id: zod_1.z.number(),
|
|
17
|
-
contact_type: zod_1.z.enum(['character', 'corporation', 'alliance']),
|
|
18
|
-
standing: zod_1.z.number(),
|
|
19
|
-
label_ids: zod_1.z.array(zod_1.z.number()).optional(),
|
|
20
|
-
});
|
|
21
|
-
exports.AllianceContactLabelSchema = zod_1.z.looseObject({
|
|
22
|
-
label_id: zod_1.z.number(),
|
|
23
|
-
label_name: zod_1.z.string(),
|
|
24
|
-
});
|
|
25
|
-
exports.AllianceIconSchema = zod_1.z.looseObject({
|
|
26
|
-
px64x64: zod_1.z.string().optional(),
|
|
27
|
-
px128x128: zod_1.z.string().optional(),
|
|
28
|
-
});
|
package/dist/schemas/assets.js
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.AssetNameSchema = exports.AssetLocationSchema = exports.CharacterAssetSchema = void 0;
|
|
4
|
-
const zod_1 = require("zod");
|
|
5
|
-
exports.CharacterAssetSchema = zod_1.z.looseObject({
|
|
6
|
-
item_id: zod_1.z.number(),
|
|
7
|
-
type_id: zod_1.z.number(),
|
|
8
|
-
quantity: zod_1.z.number(),
|
|
9
|
-
location_id: zod_1.z.number(),
|
|
10
|
-
location_type: zod_1.z.enum(['station', 'solar_system', 'item', 'other']),
|
|
11
|
-
location_flag: zod_1.z.string(),
|
|
12
|
-
is_singleton: zod_1.z.boolean(),
|
|
13
|
-
is_blueprint_copy: zod_1.z.boolean().optional(),
|
|
14
|
-
});
|
|
15
|
-
exports.AssetLocationSchema = zod_1.z.looseObject({
|
|
16
|
-
item_id: zod_1.z.number(),
|
|
17
|
-
position: zod_1.z.looseObject({
|
|
18
|
-
x: zod_1.z.number(),
|
|
19
|
-
y: zod_1.z.number(),
|
|
20
|
-
z: zod_1.z.number(),
|
|
21
|
-
}),
|
|
22
|
-
});
|
|
23
|
-
exports.AssetNameSchema = zod_1.z.looseObject({
|
|
24
|
-
item_id: zod_1.z.number(),
|
|
25
|
-
name: zod_1.z.string(),
|
|
26
|
-
});
|
package/dist/schemas/calendar.js
DELETED
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.CalendarEventAttendeeSchema = exports.CalendarEventDetailSchema = exports.CalendarEventSchema = void 0;
|
|
4
|
-
const zod_1 = require("zod");
|
|
5
|
-
exports.CalendarEventSchema = zod_1.z.looseObject({
|
|
6
|
-
event_id: zod_1.z.number(),
|
|
7
|
-
event_date: zod_1.z.string(),
|
|
8
|
-
title: zod_1.z.string(),
|
|
9
|
-
importance: zod_1.z.number(),
|
|
10
|
-
event_response: zod_1.z.enum([
|
|
11
|
-
'declined',
|
|
12
|
-
'not_responded',
|
|
13
|
-
'accepted',
|
|
14
|
-
'tentative',
|
|
15
|
-
]),
|
|
16
|
-
});
|
|
17
|
-
exports.CalendarEventDetailSchema = zod_1.z.looseObject({
|
|
18
|
-
event_id: zod_1.z.number(),
|
|
19
|
-
date: zod_1.z.string(),
|
|
20
|
-
title: zod_1.z.string(),
|
|
21
|
-
text: zod_1.z.string(),
|
|
22
|
-
owner_id: zod_1.z.number(),
|
|
23
|
-
owner_name: zod_1.z.string(),
|
|
24
|
-
owner_type: zod_1.z.enum([
|
|
25
|
-
'eve_server',
|
|
26
|
-
'corporation',
|
|
27
|
-
'faction',
|
|
28
|
-
'character',
|
|
29
|
-
'alliance',
|
|
30
|
-
]),
|
|
31
|
-
duration: zod_1.z.number(),
|
|
32
|
-
importance: zod_1.z.number(),
|
|
33
|
-
response: zod_1.z.string(),
|
|
34
|
-
});
|
|
35
|
-
exports.CalendarEventAttendeeSchema = zod_1.z.looseObject({
|
|
36
|
-
character_id: zod_1.z.number(),
|
|
37
|
-
event_response: zod_1.z.enum([
|
|
38
|
-
'declined',
|
|
39
|
-
'not_responded',
|
|
40
|
-
'accepted',
|
|
41
|
-
'tentative',
|
|
42
|
-
]),
|
|
43
|
-
});
|