@lgriffin/esi.ts 10.0.0 → 10.2.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 +142 -0
- package/README.md +14 -5
- package/dist/EsiClient.d.mts +140 -0
- package/dist/EsiClientBuilder.d.mts +75 -0
- package/dist/auth/EsiTokenManager.d.mts +200 -0
- package/dist/auth/EveSsoClient.d.mts +88 -0
- package/dist/auth/errors.d.mts +42 -0
- package/dist/auth/index.d.mts +14 -0
- package/dist/auth/jwt.d.mts +43 -0
- package/dist/auth/pkce.d.mts +21 -0
- package/dist/auth/storage/FileTokenStorage.d.mts +44 -0
- package/dist/auth/storage/MemoryTokenStorage.d.mts +18 -0
- package/dist/auth/types.d.mts +42 -0
- package/dist/{chunk-7A72QFDF.mjs → chunk-D5L5HZVF.mjs} +3 -2
- package/dist/chunk-D5L5HZVF.mjs.map +1 -0
- package/dist/{chunk-HPSACXX3.js → chunk-XIB2OXEZ.js} +3 -2
- package/dist/chunk-XIB2OXEZ.js.map +1 -0
- package/dist/clients/AccessListsClient.d.mts +25 -0
- package/dist/clients/AllianceClient.d.mts +59 -0
- package/dist/clients/AssetsClient.d.mts +65 -0
- package/dist/clients/BaseEsiClient.d.mts +19 -0
- package/dist/clients/CalendarClient.d.mts +48 -0
- package/dist/clients/CharacterClient.d.mts +134 -0
- package/dist/clients/ClonesClient.d.mts +27 -0
- package/dist/clients/ContactsClient.d.mts +96 -0
- package/dist/clients/ContractsClient.d.mts +91 -0
- package/dist/clients/CorporationProjectsClient.d.mts +54 -0
- package/dist/clients/CorporationsClient.d.mts +219 -0
- package/dist/clients/CosmeticsClient.d.mts +11 -0
- package/dist/clients/DogmaClient.d.mts +42 -0
- package/dist/clients/FactionClient.d.mts +60 -0
- package/dist/clients/FittingsClient.d.mts +38 -0
- package/dist/clients/FleetClient.d.mts +134 -0
- package/dist/clients/FreelanceJobsClient.d.mts +61 -0
- package/dist/clients/IncursionsClient.d.mts +14 -0
- package/dist/clients/IndustryClient.d.mts +86 -0
- package/dist/clients/InsuranceClient.d.mts +14 -0
- package/dist/clients/KillmailsClient.d.mts +37 -0
- package/dist/clients/LocationClient.d.mts +32 -0
- package/dist/clients/LoyaltyClient.d.mts +28 -0
- package/dist/clients/MailClient.d.mts +104 -0
- package/dist/clients/MarketClient.d.mts +102 -0
- package/dist/clients/MercenaryClient.d.mts +42 -0
- package/dist/clients/MetaClient.d.mts +45 -0
- package/dist/clients/MilitaryCampaignsClient.d.mts +53 -0
- package/dist/clients/ParagonHubClient.d.mts +13 -0
- package/dist/clients/PiClient.d.mts +45 -0
- package/dist/clients/RouteClient.d.mts +25 -0
- package/dist/clients/SearchClient.d.mts +17 -0
- package/dist/clients/SkillsClient.d.mts +39 -0
- package/dist/clients/SkyhooksClient.d.mts +48 -0
- package/dist/clients/SovereigntyClient.d.mts +20 -0
- package/dist/clients/StatusClient.d.mts +14 -0
- package/dist/clients/UiClient.d.mts +44 -0
- package/dist/clients/UniverseClient.d.mts +212 -0
- package/dist/clients/WalletClient.d.mts +70 -0
- package/dist/clients/WarsClient.d.mts +33 -0
- package/dist/core/ApiClient.d.mts +73 -0
- package/dist/core/ApiClientBuilder.d.mts +24 -0
- package/dist/core/ApiRequestHandler.d.ts.map +1 -1
- package/dist/core/BatchRequestHandler.d.mts +12 -0
- package/dist/core/ClientRegistry.d.mts +45 -0
- package/dist/core/EsiDiagnostics.d.mts +35 -0
- package/dist/core/IDeduplicator.d.mts +22 -0
- package/dist/core/IDeduplicator.d.ts +16 -0
- package/dist/core/IDeduplicator.d.ts.map +1 -1
- package/dist/core/IRetryStrategy.d.mts +5 -0
- package/dist/core/RequestDeduplicator.d.mts +21 -0
- package/dist/core/RequestDeduplicator.d.ts +11 -0
- package/dist/core/RequestDeduplicator.d.ts.map +1 -1
- package/dist/core/RetryStrategy.d.mts +21 -0
- package/dist/core/cache/ETagCacheManager.d.mts +75 -0
- package/dist/core/cache/ICache.d.mts +27 -0
- package/dist/core/cache/cacheKey.d.ts +11 -0
- package/dist/core/cache/cacheKey.d.ts.map +1 -1
- package/dist/core/circuitBreaker/CircuitBreaker.d.mts +52 -0
- package/dist/core/circuitBreaker/CircuitBreaker.d.ts.map +1 -1
- package/dist/core/circuitBreaker/ICircuitBreaker.d.mts +23 -0
- package/dist/core/configureApiClient.d.mts +18 -0
- package/dist/core/constants.d.ts +2 -2
- package/dist/core/endpoints/EndpointDefinition.d.mts +63 -0
- package/dist/core/endpoints/accessListEndpoints.d.mts +34 -0
- package/dist/core/endpoints/allianceEndpoints.d.mts +43 -0
- package/dist/core/endpoints/assetEndpoints.d.mts +76 -0
- package/dist/core/endpoints/buildEndpointPath.d.mts +7 -0
- package/dist/core/endpoints/calendarEndpoints.d.mts +54 -0
- package/dist/core/endpoints/characterEndpoints.d.mts +185 -0
- package/dist/core/endpoints/cloneEndpoints.d.mts +32 -0
- package/dist/core/endpoints/contactEndpoints.d.mts +106 -0
- package/dist/core/endpoints/contractEndpoints.d.mts +168 -0
- package/dist/core/endpoints/corporationEndpoints.d.mts +324 -0
- package/dist/core/endpoints/corporationProjectEndpoints.d.mts +102 -0
- package/dist/core/endpoints/cosmeticsEndpoints.d.mts +52 -0
- package/dist/core/endpoints/createClient.d.mts +69 -0
- package/dist/core/endpoints/dogmaEndpoints.d.mts +89 -0
- package/dist/core/endpoints/esi-cache-ttls.generated.d.ts.map +1 -1
- package/dist/core/endpoints/esi-rate-limit-groups.generated.d.mts +7 -0
- package/dist/core/endpoints/esi-rate-limit-groups.generated.d.ts.map +1 -1
- package/dist/core/endpoints/esi-scopes.generated.d.mts +3 -0
- package/dist/core/endpoints/esi-scopes.generated.d.ts.map +1 -1
- package/dist/core/endpoints/factionEndpoints.d.mts +194 -0
- package/dist/core/endpoints/fittingEndpoints.d.mts +34 -0
- package/dist/core/endpoints/fleetEndpoints.d.mts +137 -0
- package/dist/core/endpoints/freelanceJobsEndpoints.d.mts +181 -0
- package/dist/core/endpoints/incursionEndpoints.d.mts +19 -0
- package/dist/core/endpoints/industryEndpoints.d.mts +138 -0
- package/dist/core/endpoints/insuranceEndpoints.d.mts +17 -0
- package/dist/core/endpoints/killmailEndpoints.d.mts +62 -0
- package/dist/core/endpoints/locationEndpoints.d.mts +37 -0
- package/dist/core/endpoints/loyaltyEndpoints.d.mts +32 -0
- package/dist/core/endpoints/mailEndpoints.d.mts +111 -0
- package/dist/core/endpoints/marketEndpoints.d.mts +191 -0
- package/dist/core/endpoints/mercenaryEndpoints.d.mts +79 -0
- package/dist/core/endpoints/metaEndpoints.d.mts +50 -0
- package/dist/core/endpoints/militaryCampaignEndpoints.d.mts +87 -0
- package/dist/core/endpoints/paragonHubEndpoints.d.mts +163 -0
- package/dist/core/endpoints/piEndpoints.d.mts +101 -0
- package/dist/core/endpoints/routeEndpoints.d.mts +14 -0
- package/dist/core/endpoints/searchEndpoints.d.mts +26 -0
- package/dist/core/endpoints/skillEndpoints.d.mts +52 -0
- package/dist/core/endpoints/skyhookEndpoints.d.mts +111 -0
- package/dist/core/endpoints/sovereigntyEndpoints.d.mts +59 -0
- package/dist/core/endpoints/statusEndpoints.d.mts +14 -0
- package/dist/core/endpoints/uiEndpoints.d.mts +43 -0
- package/dist/core/endpoints/universeEndpoints.d.mts +456 -0
- package/dist/core/endpoints/walletEndpoints.d.mts +98 -0
- package/dist/core/endpoints/warEndpoints.d.mts +51 -0
- package/dist/core/logger/DefaultLogger.d.mts +31 -0
- package/dist/core/logger/ILogger.d.mts +17 -0
- package/dist/core/logger/NoopLogger.d.mts +7 -0
- package/dist/core/logger/loggerUtil.d.mts +11 -0
- package/dist/core/middleware/Middleware.d.mts +30 -0
- package/dist/core/pagination/AsyncPaginationIterator.d.mts +12 -0
- package/dist/core/pagination/CursorPaginationHandler.d.mts +68 -0
- package/dist/core/rateLimiter/IRateLimiter.d.mts +27 -0
- package/dist/core/rateLimiter/RateLimiter.d.mts +62 -0
- package/dist/core/rateLimiter/RateLimiter.d.ts.map +1 -1
- package/dist/core/requestPipeline/cachePolicy.d.ts +11 -1
- package/dist/core/requestPipeline/cachePolicy.d.ts.map +1 -1
- package/dist/core/requestPipeline/fetchExecution.d.ts.map +1 -1
- package/dist/core/requestPipeline/index.d.ts +1 -1
- package/dist/core/requestPipeline/index.d.ts.map +1 -1
- package/dist/core/requestPipeline/paginationOrchestration.d.ts +1 -1
- package/dist/core/requestPipeline/paginationOrchestration.d.ts.map +1 -1
- package/dist/core/requestPipeline/statusHandling.d.ts +6 -0
- package/dist/core/requestPipeline/statusHandling.d.ts.map +1 -1
- package/dist/core/util/error.d.mts +37 -0
- package/dist/core/util/retry.d.mts +8 -0
- package/dist/core/util/retry.d.ts.map +1 -1
- package/dist/errors.d.mts +5 -0
- package/dist/errors.js +2 -2
- package/dist/errors.mjs +1 -1
- package/dist/index.d.mts +81 -0
- package/dist/index.js +373 -195
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +266 -88
- package/dist/index.mjs.map +1 -1
- package/dist/schemas/access-lists.d.mts +16 -0
- package/dist/schemas/alliance.d.mts +26 -0
- package/dist/schemas/assets.d.mts +24 -0
- package/dist/schemas/calendar.d.mts +27 -0
- package/dist/schemas/character.d.mts +109 -0
- package/dist/schemas/clones.d.mts +17 -0
- package/dist/schemas/common.d.mts +74 -0
- package/dist/schemas/contacts.d.mts +14 -0
- package/dist/schemas/contracts.d.mts +104 -0
- package/dist/schemas/corporation-projects.d.mts +104 -0
- package/dist/schemas/corporation.d.mts +193 -0
- package/dist/schemas/cosmetics.d.mts +58 -0
- package/dist/schemas/dogma.d.mts +57 -0
- package/dist/schemas/esiEnum.d.mts +3 -0
- package/dist/schemas/faction-warfare.d.mts +203 -0
- package/dist/schemas/fittings.d.mts +13 -0
- package/dist/schemas/fleet.d.mts +37 -0
- package/dist/schemas/freelance-jobs.d.mts +171 -0
- package/dist/schemas/incursions.d.mts +12 -0
- package/dist/schemas/index.d.mts +39 -0
- package/dist/schemas/industry.d.mts +99 -0
- package/dist/schemas/insurance.d.mts +10 -0
- package/dist/schemas/killmails.d.mts +38 -0
- package/dist/schemas/location.d.mts +18 -0
- package/dist/schemas/loyalty.d.mts +18 -0
- package/dist/schemas/mail.d.mts +53 -0
- package/dist/schemas/market.d.mts +123 -0
- package/dist/schemas/mercenary.d.mts +74 -0
- package/dist/schemas/meta.d.mts +36 -0
- package/dist/schemas/military-campaigns.d.mts +26 -0
- package/dist/schemas/paragon-hub.d.mts +96 -0
- package/dist/schemas/pi.d.mts +71 -0
- package/dist/schemas/skills.d.mts +28 -0
- package/dist/schemas/skyhooks.d.mts +129 -0
- package/dist/schemas/sovereignty.d.mts +56 -0
- package/dist/schemas/status.d.mts +8 -0
- package/dist/schemas/universe.d.mts +285 -0
- package/dist/schemas/wallet.d.mts +45 -0
- package/dist/schemas/wars.d.mts +27 -0
- package/dist/sde/IStaticDataProvider.d.mts +106 -0
- package/dist/sde/MemorySdeProvider.d.mts +167 -0
- package/dist/sde/SdeDataProvider.d.mts +119 -0
- package/dist/sde/SdeTestDataFactory.d.mts +33 -0
- package/dist/sde/errors.d.mts +23 -0
- package/dist/sde/index.d.mts +9 -0
- package/dist/sde/memory.d.mts +8 -0
- package/dist/sde/types.d.mts +1039 -0
- package/dist/sde/version.d.mts +7 -0
- package/dist/testing/TestDataFactory.d.mts +172 -0
- package/dist/testing/index.d.mts +2 -0
- package/dist/testing/index.js +2 -2
- package/dist/testing/index.mjs +1 -1
- package/dist/types/access-lists.d.mts +5 -0
- package/dist/types/alliance.d.mts +7 -0
- package/dist/types/api-responses.d.mts +40 -0
- package/dist/types/assets.d.mts +6 -0
- package/dist/types/branded.d.mts +23 -0
- package/dist/types/calendar.d.mts +6 -0
- package/dist/types/character.d.mts +17 -0
- package/dist/types/clones.d.mts +4 -0
- package/dist/types/common.d.mts +19 -0
- package/dist/types/contacts.d.mts +5 -0
- package/dist/types/contracts.d.mts +9 -0
- package/dist/types/corporation-projects.d.mts +10 -0
- package/dist/types/corporation.d.mts +19 -0
- package/dist/types/cosmetics.d.mts +8 -0
- package/dist/types/dogma.d.mts +6 -0
- package/dist/types/faction-warfare.d.mts +17 -0
- package/dist/types/fittings.d.mts +4 -0
- package/dist/types/fleet.d.mts +7 -0
- package/dist/types/freelance-jobs.d.mts +12 -0
- package/dist/types/generated/esi-spec.generated.d.mts +2136 -0
- package/dist/types/generated/esi-spec.generated.d.ts +164 -16
- package/dist/types/generated/esi-spec.generated.d.ts.map +1 -1
- package/dist/types/generated/spec-alignment.check.d.ts +2 -2
- package/dist/types/incursions.d.mts +4 -0
- package/dist/types/industry.d.mts +11 -0
- package/dist/types/insurance.d.mts +4 -0
- package/dist/types/killmails.d.mts +5 -0
- package/dist/types/location.d.mts +6 -0
- package/dist/types/loyalty.d.mts +5 -0
- package/dist/types/mail.d.mts +6 -0
- package/dist/types/market.d.mts +12 -0
- package/dist/types/mercenary.d.mts +7 -0
- package/dist/types/meta.d.mts +9 -0
- package/dist/types/military-campaigns.d.mts +6 -0
- package/dist/types/paragon-hub.d.mts +8 -0
- package/dist/types/pi.d.mts +6 -0
- package/dist/types/skills.d.mts +5 -0
- package/dist/types/skyhooks.d.mts +8 -0
- package/dist/types/sovereignty.d.mts +6 -0
- package/dist/types/status.d.mts +4 -0
- package/dist/types/universe.d.mts +27 -0
- package/dist/types/wallet.d.mts +6 -0
- package/dist/types/wars.d.mts +4 -0
- package/package.json +92 -24
- package/dist/chunk-7A72QFDF.mjs.map +0 -1
- package/dist/chunk-HPSACXX3.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,148 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [10.2.0](https://github.com/lgriffin/ESI.ts/compare/v10.1.1...v10.2.0) (2026-09-19)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
* **release:** attach a signed CycloneDX SBOM to each release ([bf6c045](https://github.com/lgriffin/ESI.ts/commit/bf6c0458b81fc9123ca29f712db8a89948e2b382))
|
|
14
|
+
* **release:** attach a signed CycloneDX SBOM to each release ([1e29d7d](https://github.com/lgriffin/ESI.ts/commit/1e29d7de39237ecd250dcac3ef90da54a9c52df3))
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
### Testing
|
|
18
|
+
|
|
19
|
+
* **contract:** re-record ESI payloads whose shape changed ([2ea4198](https://github.com/lgriffin/ESI.ts/commit/2ea4198d8832d12618e9f9a9da0720ffb9b07f55))
|
|
20
|
+
* **contract:** recorded ESI payloads changed shape ([06fa27a](https://github.com/lgriffin/ESI.ts/commit/06fa27ab0516af9f9d450059cb0cb3fcd6463345))
|
|
21
|
+
|
|
22
|
+
## [10.1.1](https://github.com/lgriffin/ESI.ts/compare/v10.1.0...v10.1.1) (2026-09-18)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
### Documentation
|
|
26
|
+
|
|
27
|
+
* **mutation:** record the first complete sharded run, and fix what it exposed ([7acf195](https://github.com/lgriffin/ESI.ts/commit/7acf1950d5781dad571e2f79e52d03324683f7bd))
|
|
28
|
+
* **mutation:** record the first complete sharded run, and fix what it exposed ([3209241](https://github.com/lgriffin/ESI.ts/commit/32092415c551cbc7cc75266fa7158ab884040aad))
|
|
29
|
+
|
|
30
|
+
## [10.1.0](https://github.com/lgriffin/ESI.ts/compare/v10.0.0...v10.1.0) (2026-09-18)
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
### Added
|
|
34
|
+
|
|
35
|
+
* **dedupe:** detach in-flight reads of a path a write has just changed ([0339db7](https://github.com/lgriffin/ESI.ts/commit/0339db70d2cd34827c5575f1d731006fa1500ea0))
|
|
36
|
+
* **dedupe:** detach in-flight reads of a path a write has just changed ([e3a3d91](https://github.com/lgriffin/ESI.ts/commit/e3a3d91d2ef74759245cd43affb2e109040bf221))
|
|
37
|
+
* **release:** verify what npm serves, not only what CI built ([999125c](https://github.com/lgriffin/ESI.ts/commit/999125cd2c167410cdba7f35590afe6b5fa025d8))
|
|
38
|
+
* **release:** verify what npm serves, not only what CI built ([281e008](https://github.com/lgriffin/ESI.ts/commit/281e008d9fd65e45619f73c6abeb7a48dbc70831))
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
### Fixed
|
|
42
|
+
|
|
43
|
+
* add the composition and concurrency test tier and fix the five pipeline races it found ([c7a7642](https://github.com/lgriffin/ESI.ts/commit/c7a764213ebc34fc47bd8396863b4f8f7938f4a1))
|
|
44
|
+
* **bdd:** escape backslashes in the job summary's table cells ([751d098](https://github.com/lgriffin/ESI.ts/commit/751d098f4d2fa81c86c80e7a8e8221991c81495d))
|
|
45
|
+
* **benchmark:** keep the harness filter a substring and gate the soak heap trend on Node 20 ([d559157](https://github.com/lgriffin/ESI.ts/commit/d5591576dcdb2823a7df8e2692597b7fc92575fe))
|
|
46
|
+
* **cache:** do not store a read that a write overtook while it was in flight ([e2f3141](https://github.com/lgriffin/ESI.ts/commit/e2f3141b2a4713bf4a46c2ea58ad42e02bc40814))
|
|
47
|
+
* **cache:** keep the stored ETag when a late 304 names an older one ([bb63097](https://github.com/lgriffin/ESI.ts/commit/bb6309753938f8868fcb1ea9684d44989933086a))
|
|
48
|
+
* **cache:** refetch when a 304 arrives for an entry evicted in flight ([4ae476e](https://github.com/lgriffin/ESI.ts/commit/4ae476e9462ae1eac33569b9d4c70bb36ad545d3))
|
|
49
|
+
* **ci:** pack the downloaded dist with npm 11 ([7e7ff71](https://github.com/lgriffin/ESI.ts/commit/7e7ff7131a3b383cae3ae65c79f677a28f1369b7))
|
|
50
|
+
* **circuit-breaker:** count the call that opens half-open as the first probe ([b418625](https://github.com/lgriffin/ESI.ts/commit/b418625bbf7ade64217fde9970bd76229dbb8ffd))
|
|
51
|
+
* **circuit-breaker:** keep an open circuit open when an earlier call succeeds ([03b27a5](https://github.com/lgriffin/ESI.ts/commit/03b27a5e1e641ddcf015f5e08f1420966c60b4ce))
|
|
52
|
+
* **ci:** read the attw report from a file so CI gets the whole JSON ([dac266d](https://github.com/lgriffin/ESI.ts/commit/dac266d5ec13b5bb2ba13a0a6f7a94b25da0ba0c))
|
|
53
|
+
* **dedupe:** key in-flight requests by identity as well as endpoint ([5bab05c](https://github.com/lgriffin/ESI.ts/commit/5bab05c85cfb8067baecffd8e740f6c1c27b6629))
|
|
54
|
+
* **dedupe:** key in-flight requests by identity as well as endpoint ([5d662d9](https://github.com/lgriffin/ESI.ts/commit/5d662d9699aab9f9bb34af93a8fb5809a02ccde6))
|
|
55
|
+
* five defects found by new model-based property tests (circuit breaker, pagination cache, backoff) ([80fcafa](https://github.com/lgriffin/ESI.ts/commit/80fcafa5bb99aed93348c30722c090e526b85fb7))
|
|
56
|
+
* **generate:** generate from the compatibility date the client actually sends ([ff781bd](https://github.com/lgriffin/ESI.ts/commit/ff781bd54777b2c3fda5189772e431e4d9de3657))
|
|
57
|
+
* **generate:** generate from the compatibility date the client actually sends ([5ea4a2f](https://github.com/lgriffin/ESI.ts/commit/5ea4a2fe0891bcba5c3d08171bb3d858639ea3f4))
|
|
58
|
+
* **mutation:** escape backslashes in the job summary table cells ([9ab23fa](https://github.com/lgriffin/ESI.ts/commit/9ab23fa685f68288b138dad749aed9bf871c215f))
|
|
59
|
+
* **package:** ship ES module declarations for the import condition ([2090682](https://github.com/lgriffin/ESI.ts/commit/20906829b64a093e8d66e2b6890cf2bbadb012c7))
|
|
60
|
+
* **package:** ship ES module declarations for the import condition ([d53fe91](https://github.com/lgriffin/ESI.ts/commit/d53fe914a156faad1835c1e748cd500254e57b69))
|
|
61
|
+
* **pagination:** cache an authenticated paginated result under the token-scoped key ([23313ff](https://github.com/lgriffin/ESI.ts/commit/23313ff95cf45a043ce2c27ea61d483969701366))
|
|
62
|
+
* **pagination:** never revalidate page 1 alone when a later page exhausts its retries ([8c48085](https://github.com/lgriffin/ESI.ts/commit/8c48085366af3eeb278be8bf033b45e53d353962))
|
|
63
|
+
* **pipeline:** name the status when an error response has no reason phrase ([94827fb](https://github.com/lgriffin/ESI.ts/commit/94827fb5652d8e76b27d509eb3eabb2ae21c6ecc))
|
|
64
|
+
* **pipeline:** time out and retry a response body that stalls or resets ([8e8753f](https://github.com/lgriffin/ESI.ts/commit/8e8753f36c272cbd796f93a92776c8c3d3fd7d0a))
|
|
65
|
+
* **rate-limiter:** honour Retry-After given as an HTTP date ([1fb7cba](https://github.com/lgriffin/ESI.ts/commit/1fb7cba9a6b553f969fa2466f181018102d63bf3))
|
|
66
|
+
* **rate-limit:** keep the error-limit back-off when a late response reports budget left ([1c7279b](https://github.com/lgriffin/ESI.ts/commit/1c7279b9223702e64943e71bef3278488b4762d6))
|
|
67
|
+
* **release:** keep the canary off the shared npm cache ([8604246](https://github.com/lgriffin/ESI.ts/commit/86042464188ec6603f681d5564984275acd40866))
|
|
68
|
+
* **release:** publish the tarball that was tested and signed ([8c7c25f](https://github.com/lgriffin/ESI.ts/commit/8c7c25f77413349eca764f542015e944a55f738f))
|
|
69
|
+
* **release:** publish the tarball that was tested and signed ([c4ac638](https://github.com/lgriffin/ESI.ts/commit/c4ac6389a1844ddddc37fb7d380377e296e90ba1))
|
|
70
|
+
* **retry:** return a zero backoff instead of NaN past attempt 1023 ([ae36c02](https://github.com/lgriffin/ESI.ts/commit/ae36c022ce2c05fc33474110a801bd9121cb2438))
|
|
71
|
+
* **retry:** serve a retry from a fresh cache entry a concurrent call stored ([de5f7ee](https://github.com/lgriffin/ESI.ts/commit/de5f7eee75b89a45bbbe8e909462145ea805fba1))
|
|
72
|
+
* **type-mutation:** resolve entry points whose types sit under a condition ([1dd356d](https://github.com/lgriffin/ESI.ts/commit/1dd356d7874ecad0ff5b81a2f56695f408b0ad93))
|
|
73
|
+
* **type-mutation:** resolve entry points whose types sit under a condition ([330c69e](https://github.com/lgriffin/ESI.ts/commit/330c69e78b7854e6a7a9718fa2ce0fff4257c3ef))
|
|
74
|
+
* **types:** escape backslashes before pipes in the type mutation survivor table ([8d7d4de](https://github.com/lgriffin/ESI.ts/commit/8d7d4de6278cd968070c0c58f3e5e781815ad512))
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
### Changed
|
|
78
|
+
|
|
79
|
+
* **bdd:** share the feature outline and feature bindings ([f75f261](https://github.com/lgriffin/ESI.ts/commit/f75f261958addd53fb22571ac649de9153b8cdab))
|
|
80
|
+
* **ci:** lint the packed tarball and budget each exports sub-path's size ([63c5f26](https://github.com/lgriffin/ESI.ts/commit/63c5f26d19236d6ab397e5e95b5d3ee3328aead9))
|
|
81
|
+
* **ci:** run the properties nightly at 10000 runs and document the tier ([06c79d2](https://github.com/lgriffin/ESI.ts/commit/06c79d268c85cd654d8f8e48b6b93ceb4d2cfc5d))
|
|
82
|
+
* **ci:** sample four overlapping calls nightly in seeded random order ([510b940](https://github.com/lgriffin/ESI.ts/commit/510b940f2cdf10abdbaaa38097f289143d7bf307))
|
|
83
|
+
* **lint:** lint tests/ for focused, skipped, assertion-free and silenced tests ([9bdf6bf](https://github.com/lgriffin/ESI.ts/commit/9bdf6bf174fe0476a213389ca4103fe90b00898c))
|
|
84
|
+
* **scripts:** check that every npm script points at a file that exists ([7b1fe81](https://github.com/lgriffin/ESI.ts/commit/7b1fe81b2cc52ac958a34490fdcd445eb57b2528))
|
|
85
|
+
* **scripts:** check that every npm script points at a file that exists ([55b03c7](https://github.com/lgriffin/ESI.ts/commit/55b03c77f0b6d636b7ec6ce6837f2bf642cb48c9))
|
|
86
|
+
* **scripts:** run every offline CI tier locally with one command ([14fc738](https://github.com/lgriffin/ESI.ts/commit/14fc738a13e5a8e6c782b032c708e46243b66087))
|
|
87
|
+
* **scripts:** run every offline CI tier locally with one command ([31197ac](https://github.com/lgriffin/ESI.ts/commit/31197accc81750b20a7412421e7b9e3ada57f9c6))
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
### Documentation
|
|
91
|
+
|
|
92
|
+
* **agents:** pin the semver rules against drift, and fix a retired config reference ([52ad44f](https://github.com/lgriffin/ESI.ts/commit/52ad44fa6e79018d21d0fafac6c98ab42117fe44))
|
|
93
|
+
* **agents:** pin the semver rules against drift, and fix a retired config reference ([d2af258](https://github.com/lgriffin/ESI.ts/commit/d2af258aa7a2d82a12eb56a014432f1d14c1a558))
|
|
94
|
+
* **bdd:** document the execution check, bug tags and when a Rule is protection ([fa0be02](https://github.com/lgriffin/ESI.ts/commit/fa0be0281996fd5e7fadeffcadbece5c81299b59))
|
|
95
|
+
* **contract:** name the real reason those endpoints cannot be recorded ([1b864da](https://github.com/lgriffin/ESI.ts/commit/1b864da3c9688833cf90ac748acb775f135d39b5))
|
|
96
|
+
* **contract:** name the real reason those endpoints cannot be recorded ([b8ea80d](https://github.com/lgriffin/ESI.ts/commit/b8ea80d3861813490fe012fcc1abda57bdce5485))
|
|
97
|
+
* declare TypeScript 5.4 as the oldest supported version ([f9e5f66](https://github.com/lgriffin/ESI.ts/commit/f9e5f66c4a3065ac82d8f0dab809b44d931e2a0a))
|
|
98
|
+
* describe the benchmark and heap soak tier ([f28cc2c](https://github.com/lgriffin/ESI.ts/commit/f28cc2c9d74115ebffce382a27ed362d96e5401a))
|
|
99
|
+
* **mutation:** record the measured pull request job timings ([62c70c9](https://github.com/lgriffin/ESI.ts/commit/62c70c93c7f0904a4804e64a8c7a62d971e79cea))
|
|
100
|
+
* **testing:** describe the composition and concurrency tier ([e1ee338](https://github.com/lgriffin/ESI.ts/commit/e1ee338f738a35c8bcdcfc461304a8d8c560e0c3))
|
|
101
|
+
* **testing:** describe the fault tier and the decisions it pins ([39416c7](https://github.com/lgriffin/ESI.ts/commit/39416c72167ab589dce475912a75832fc2318c1e))
|
|
102
|
+
* **testing:** describe the recorded payload replay tier ([1b190f3](https://github.com/lgriffin/ESI.ts/commit/1b190f31e4c2d10de462905f83681881ecb9ee20))
|
|
103
|
+
* **testing:** map the suite in C4 and refresh the tier counts ([06facdb](https://github.com/lgriffin/ESI.ts/commit/06facdb6994e41bff84eea7ca5fe1fe649066ba6))
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
### Testing
|
|
107
|
+
|
|
108
|
+
* **bdd:** let the transport seam fail an exchange the way a network does ([8f0a7a9](https://github.com/lgriffin/ESI.ts/commit/8f0a7a9d9eb4dc9c7eeb9a2ffe1d958ca64d7f2f))
|
|
109
|
+
* **bdd:** prove every scenario executes, name JUnit cases by Rule, and link [@bug](https://github.com/bug) to a tracker ([752de4c](https://github.com/lgriffin/ESI.ts/commit/752de4caa193c8fbb6d4f6d79de2a54fc071a46f))
|
|
110
|
+
* **bdd:** report every scenario by Rule and fail when one did not run ([b04a2d7](https://github.com/lgriffin/ESI.ts/commit/b04a2d7818754cd3daa1b504ed17d2fe1af4bd23))
|
|
111
|
+
* **bdd:** state what the performance scenarios verify, not a latency budget ([12b4461](https://github.com/lgriffin/ESI.ts/commit/12b44616b7b2f7e59cac06fc27e1d9eaed797815))
|
|
112
|
+
* **benchmark:** decide regressions statistically, not by percentage ([a3da1f8](https://github.com/lgriffin/ESI.ts/commit/a3da1f875fd2853e4312b41b2a3aaa799f49db9b))
|
|
113
|
+
* **benchmark:** measure the client hot paths with a mitata harness ([307b978](https://github.com/lgriffin/ESI.ts/commit/307b97850e4d5127b1572b6bed9313dcee17b698))
|
|
114
|
+
* **benchmark:** soak the pipeline for 100 000 requests and watch the heap ([34ab5ec](https://github.com/lgriffin/ESI.ts/commit/34ab5eca8c4918ee9f1147e0ff41318078e81d43))
|
|
115
|
+
* **benchmark:** statistical benchmark comparison, heap soak and a smoke-only latency spec ([1c62567](https://github.com/lgriffin/ESI.ts/commit/1c625674c1befaa90bf39438f931e16f15eb4119))
|
|
116
|
+
* **composition:** add a deterministic interleaving scheduler at the transport seam ([9ebbedb](https://github.com/lgriffin/ESI.ts/commit/9ebbedbc0935e3351e3fad55f56984cf9ea0d457))
|
|
117
|
+
* **composition:** escape backslashes in the printed reproduce command ([d96de7b](https://github.com/lgriffin/ESI.ts/commit/d96de7ba999268d0438661d67b407e8df945d86b))
|
|
118
|
+
* **composition:** explore retry inside an opening circuit and stale-on-error during a refresh ([309658d](https://github.com/lgriffin/ESI.ts/commit/309658d9490261e7eef84b5a6de1da12e16e161a))
|
|
119
|
+
* **composition:** explore three overlapping calls on PRs and four nightly ([4122f14](https://github.com/lgriffin/ESI.ts/commit/4122f14693ed1927f957836304999db42078393e))
|
|
120
|
+
* **consumer:** check the tarball as a matrix of consumer cells ([81c0cd0](https://github.com/lgriffin/ESI.ts/commit/81c0cd0cd97f548b35266991aad7c1ec805a233d))
|
|
121
|
+
* **consumer:** stop esbuild once the tree-shaking check has run ([9e9bea3](https://github.com/lgriffin/ESI.ts/commit/9e9bea30affcc0fdd73a015c9cb516f8b3d79144))
|
|
122
|
+
* **consumer:** widen the consumer contract to a Node x TypeScript x resolution matrix ([14880dd](https://github.com/lgriffin/ESI.ts/commit/14880dd5e341ec66f0871d5fadd5092e1e681b52))
|
|
123
|
+
* **contract:** assert replay failures through named helpers the lint knows ([48cd863](https://github.com/lgriffin/ESI.ts/commit/48cd863d5f74d0ea38c42f3bf2b60cdc236bcde9))
|
|
124
|
+
* **contract:** assert replay failures through named helpers the lint knows ([53e4b03](https://github.com/lgriffin/ESI.ts/commit/53e4b032ba437a71841086ec68541ea9fa78f295))
|
|
125
|
+
* **contract:** re-record ESI payloads whose shape changed ([bfe9af5](https://github.com/lgriffin/ESI.ts/commit/bfe9af5bb1ef26b639c5f836446633d7fb76a924))
|
|
126
|
+
* **contract:** re-record ESI payloads whose shape changed ([1f1be53](https://github.com/lgriffin/ESI.ts/commit/1f1be53fdec4f2a42ba260d5113c3e85d4dc0a4c))
|
|
127
|
+
* **contract:** record public ESI payloads and replay them through the client pipeline ([60d897e](https://github.com/lgriffin/ESI.ts/commit/60d897e45f845bb729cda580730412c5bb2d4ecb))
|
|
128
|
+
* **contract:** record sanitised public ESI payloads as fixtures ([d08cae6](https://github.com/lgriffin/ESI.ts/commit/d08cae62d9dc09ca86f773602641f89363044c69))
|
|
129
|
+
* **contract:** recorded ESI payloads changed shape ([184d67f](https://github.com/lgriffin/ESI.ts/commit/184d67f781e32c6be8763eb93ef8a4ffa293c509))
|
|
130
|
+
* **contract:** recorded ESI payloads changed shape ([6d1bbe8](https://github.com/lgriffin/ESI.ts/commit/6d1bbe83f3ecd2239b3abffe5df472b2b02ccdfe))
|
|
131
|
+
* **contract:** replay recorded ESI payloads through the client pipeline ([ee8f0df](https://github.com/lgriffin/ESI.ts/commit/ee8f0dff5dd527ad089d77c5246456f48fa08c9b))
|
|
132
|
+
* **docs:** type-check documentation examples against the packed package ([7746ada](https://github.com/lgriffin/ESI.ts/commit/7746ada98d04b8af72a005cc3645efc205e83cc3))
|
|
133
|
+
* **faults:** add a 400 served while the cache holds an entry ([d85b4fb](https://github.com/lgriffin/ESI.ts/commit/d85b4fba2c2e496337b46f3dce6ff1974870775e))
|
|
134
|
+
* **faults:** add a status the client has no text for, without a reason phrase ([1fe646a](https://github.com/lgriffin/ESI.ts/commit/1fe646a526ece7434966e0211c4a933071aad0b5))
|
|
135
|
+
* **faults:** add a transport fault catalogue run through the real pipeline ([1f5f055](https://github.com/lgriffin/ESI.ts/commit/1f5f055c2721cb7da9e67518d6237425b599e980))
|
|
136
|
+
* **faults:** assert through the helpers the suite-health lint knows ([0064539](https://github.com/lgriffin/ESI.ts/commit/0064539656221bdd30e1b0559da5d9854ee88e5c))
|
|
137
|
+
* **faults:** drop the x-pages gap the pagination fix closed ([6e367d6](https://github.com/lgriffin/ESI.ts/commit/6e367d6f1b6f6e864654384ba656cb00b709efa2))
|
|
138
|
+
* **faults:** drop the x-pages gap the pagination fix closed ([2f89d91](https://github.com/lgriffin/ESI.ts/commit/2f89d919c531c2b06f1eb41539e4c5ed71f4297a))
|
|
139
|
+
* **faults:** fault injection and fuzzing tier (transport fault catalogue) ([e3cee50](https://github.com/lgriffin/ESI.ts/commit/e3cee50f55a9f4c75b3d73569c55b1a608580acf))
|
|
140
|
+
* **faults:** fuzz every endpoint's payloads from its Zod schema nightly ([49dc045](https://github.com/lgriffin/ESI.ts/commit/49dc045d33fb538483e046c1c525d1982c7a0512))
|
|
141
|
+
* **fuzz:** model-based properties with a vacuity check for every property ([d2890ab](https://github.com/lgriffin/ESI.ts/commit/d2890ab5b6e1b9de690b6ba4ac7c08d8e33af253))
|
|
142
|
+
* **fuzz:** require eager pagination repeat calls to come from the cache ([cc57bc8](https://github.com/lgriffin/ESI.ts/commit/cc57bc8507f76af3614ddfc8441b6172fcde73d1))
|
|
143
|
+
* **fuzz:** respell all occurrences in cache-key lookalikes; ratchet export baseline ([1554338](https://github.com/lgriffin/ESI.ts/commit/155433898d56a6f52055f13f4847cf5ca025c56d))
|
|
144
|
+
* **mutation:** gate changed files per directory and prove the gate can fail ([c9a1b44](https://github.com/lgriffin/ESI.ts/commit/c9a1b4436643d529d30049eceaad8fb088a9b029))
|
|
145
|
+
* reference the exports v10 added and drop ContractBid from the export baseline ([dcb2081](https://github.com/lgriffin/ESI.ts/commit/dcb208160d195fef9cbfe226c61c9cc16a9c187d))
|
|
146
|
+
* reference the exports v10 added and drop ContractBid from the export baseline ([2633694](https://github.com/lgriffin/ESI.ts/commit/26336943d3897e1a8af85b82d0f9cc5754f54b75))
|
|
147
|
+
* **spec-audit:** require a tracker tag beside every [@bug](https://github.com/bug) ([04ad7a0](https://github.com/lgriffin/ESI.ts/commit/04ad7a00ed0e1b009c39db799740b2e32bbbcaa0))
|
|
148
|
+
* **types:** mutate the built declarations nightly and ratchet the tsd kill score ([5d0a8a8](https://github.com/lgriffin/ESI.ts/commit/5d0a8a8c3ba32ac383e01de768040ac9d075bd64))
|
|
149
|
+
|
|
8
150
|
## [10.0.0](https://github.com/lgriffin/ESI.ts/compare/v9.9.0...v10.0.0) (2026-09-17)
|
|
9
151
|
|
|
10
152
|
|
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://badge.fury.io/js/%40lgriffin%2Fesi.ts)
|
|
4
4
|
[](https://www.gnu.org/licenses/gpl-3.0)
|
|
5
|
-
[](https://www.typescriptlang.org/)
|
|
6
6
|
[](https://github.com/lgriffin/ESI.ts/actions/workflows/ci.yml)
|
|
7
7
|
[](https://github.com/lgriffin/ESI.ts)
|
|
8
8
|
[](https://www.npmjs.com/package/@lgriffin/esi.ts)
|
|
@@ -60,6 +60,8 @@ A generated client faithfully reproduces these spec bugs. ESI.ts fixes them.
|
|
|
60
60
|
npm install @lgriffin/esi.ts
|
|
61
61
|
```
|
|
62
62
|
|
|
63
|
+
Requires Node.js 18 or later. TypeScript projects need TypeScript 5.4 or later, with ES module or CommonJS code under `node16`, `nodenext` or `bundler` module resolution; the consumer contract checks each of those against the published tarball.
|
|
64
|
+
|
|
63
65
|
### Building from Source
|
|
64
66
|
|
|
65
67
|
```bash
|
|
@@ -595,7 +597,12 @@ const order: EsiSpec.MarketsRegionIdOrdersGet = {
|
|
|
595
597
|
volume_remain: 1000,
|
|
596
598
|
volume_total: 5000,
|
|
597
599
|
is_buy_order: false,
|
|
598
|
-
|
|
600
|
+
duration: 90,
|
|
601
|
+
issued: '2026-09-01T12:00:00Z',
|
|
602
|
+
location_id: 60003760,
|
|
603
|
+
system_id: 30000142,
|
|
604
|
+
min_volume: 1,
|
|
605
|
+
range: 'region',
|
|
599
606
|
};
|
|
600
607
|
```
|
|
601
608
|
|
|
@@ -824,7 +831,9 @@ console.log(`Best sell: ${Math.min(...sellOrders.map((o) => o.price))}`);
|
|
|
824
831
|
|
|
825
832
|
Always call `shutdown()` when you're done to clean up cache timers:
|
|
826
833
|
|
|
827
|
-
```typescript
|
|
834
|
+
```typescript runnable
|
|
835
|
+
import { EsiClient } from '@lgriffin/esi.ts';
|
|
836
|
+
|
|
828
837
|
const client = new EsiClient();
|
|
829
838
|
try {
|
|
830
839
|
const status = await client.status.getStatus();
|
|
@@ -860,7 +869,7 @@ npm run bdd # BDD scenario tests only
|
|
|
860
869
|
npm run contract # Contract tests (skipped without ESI_LIVE_TESTS=true)
|
|
861
870
|
npm run fuzz # Property-based fuzz tests (601 tests)
|
|
862
871
|
npm run mutation # Mutation testing (Stryker)
|
|
863
|
-
npm run benchmark #
|
|
872
|
+
npm run benchmark # Micro-benchmarks (mitata); npm run soak for the heap soak
|
|
864
873
|
npm run test:types # tsd consumer type tests
|
|
865
874
|
```
|
|
866
875
|
|
|
@@ -908,7 +917,7 @@ npm run bdd # BDD scenario tests
|
|
|
908
917
|
ESI_LIVE_TESTS=true npm run contract:live # Deep contract tests against live ESI spec (fails without the variable)
|
|
909
918
|
npm run fuzz # Property-based fuzz tests (fast-check)
|
|
910
919
|
npm run mutation # Mutation testing (Stryker)
|
|
911
|
-
npm run benchmark #
|
|
920
|
+
npm run benchmark # Micro-benchmarks (mitata)
|
|
912
921
|
npm run test:types # Consumer type tests (tsd)
|
|
913
922
|
npm run mock:esi # Start Prism mock ESI server on port 4010
|
|
914
923
|
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { TokenProvider } from './core/ApiClient.mjs';
|
|
2
|
+
import { RequestInterceptor, ResponseInterceptor } from './core/middleware/Middleware.mjs';
|
|
3
|
+
import { AllianceClient } from './clients/AllianceClient.mjs';
|
|
4
|
+
import { AssetsClient } from './clients/AssetsClient.mjs';
|
|
5
|
+
import { CalendarClient } from './clients/CalendarClient.mjs';
|
|
6
|
+
import { CharacterClient } from './clients/CharacterClient.mjs';
|
|
7
|
+
import { ClonesClient } from './clients/ClonesClient.mjs';
|
|
8
|
+
import { ContactsClient } from './clients/ContactsClient.mjs';
|
|
9
|
+
import { ContractsClient } from './clients/ContractsClient.mjs';
|
|
10
|
+
import { CorporationsClient } from './clients/CorporationsClient.mjs';
|
|
11
|
+
import { CorporationProjectsClient } from './clients/CorporationProjectsClient.mjs';
|
|
12
|
+
import { DogmaClient } from './clients/DogmaClient.mjs';
|
|
13
|
+
import { FactionClient } from './clients/FactionClient.mjs';
|
|
14
|
+
import { FittingsClient } from './clients/FittingsClient.mjs';
|
|
15
|
+
import { FleetClient } from './clients/FleetClient.mjs';
|
|
16
|
+
import { IncursionsClient } from './clients/IncursionsClient.mjs';
|
|
17
|
+
import { IndustryClient } from './clients/IndustryClient.mjs';
|
|
18
|
+
import { InsuranceClient } from './clients/InsuranceClient.mjs';
|
|
19
|
+
import { KillmailsClient } from './clients/KillmailsClient.mjs';
|
|
20
|
+
import { LocationClient } from './clients/LocationClient.mjs';
|
|
21
|
+
import { LoyaltyClient } from './clients/LoyaltyClient.mjs';
|
|
22
|
+
import { MailClient } from './clients/MailClient.mjs';
|
|
23
|
+
import { MarketClient } from './clients/MarketClient.mjs';
|
|
24
|
+
import { PiClient } from './clients/PiClient.mjs';
|
|
25
|
+
import { RouteClient } from './clients/RouteClient.mjs';
|
|
26
|
+
import { SearchClient } from './clients/SearchClient.mjs';
|
|
27
|
+
import { CharacterSkillsClient } from './clients/SkillsClient.mjs';
|
|
28
|
+
import { SovereigntyClient } from './clients/SovereigntyClient.mjs';
|
|
29
|
+
import { StatusClient } from './clients/StatusClient.mjs';
|
|
30
|
+
import { UiClient } from './clients/UiClient.mjs';
|
|
31
|
+
import { UniverseClient } from './clients/UniverseClient.mjs';
|
|
32
|
+
import { WalletClient } from './clients/WalletClient.mjs';
|
|
33
|
+
import { WarsClient } from './clients/WarsClient.mjs';
|
|
34
|
+
import { MetaClient } from './clients/MetaClient.mjs';
|
|
35
|
+
import { FreelanceJobsClient } from './clients/FreelanceJobsClient.mjs';
|
|
36
|
+
import { CosmeticsClient } from './clients/CosmeticsClient.mjs';
|
|
37
|
+
import { ParagonHubClient } from './clients/ParagonHubClient.mjs';
|
|
38
|
+
import { SkyhooksClient } from './clients/SkyhooksClient.mjs';
|
|
39
|
+
import { MercenaryClient } from './clients/MercenaryClient.mjs';
|
|
40
|
+
import { AccessListsClient } from './clients/AccessListsClient.mjs';
|
|
41
|
+
import { MilitaryCampaignsClient } from './clients/MilitaryCampaignsClient.mjs';
|
|
42
|
+
import { ETagCacheConfig } from './core/cache/ETagCacheManager.mjs';
|
|
43
|
+
import { CircuitBreakerConfig } from './core/circuitBreaker/CircuitBreaker.mjs';
|
|
44
|
+
import { RateLimiterConfig } from './core/rateLimiter/RateLimiter.mjs';
|
|
45
|
+
import { RetryConfig } from './core/util/retry.mjs';
|
|
46
|
+
import { IRetryStrategy } from './core/IRetryStrategy.mjs';
|
|
47
|
+
import { EsiDiagnostics } from './core/EsiDiagnostics.mjs';
|
|
48
|
+
import { BatchOptions, BatchResult } from './core/BatchRequestHandler.mjs';
|
|
49
|
+
export type EsiDatasource = 'tranquility' | 'singularity';
|
|
50
|
+
export interface EsiClientConfig {
|
|
51
|
+
clientId?: string;
|
|
52
|
+
baseUrl?: string;
|
|
53
|
+
accessToken?: string;
|
|
54
|
+
datasource?: EsiDatasource;
|
|
55
|
+
onTokenRefresh?: TokenProvider;
|
|
56
|
+
timeout?: number;
|
|
57
|
+
retryAttempts?: number;
|
|
58
|
+
retryConfig?: RetryConfig;
|
|
59
|
+
retryStrategy?: IRetryStrategy;
|
|
60
|
+
enableETagCache?: boolean;
|
|
61
|
+
etagCacheConfig?: ETagCacheConfig;
|
|
62
|
+
enableCircuitBreaker?: boolean;
|
|
63
|
+
circuitBreakerConfig?: CircuitBreakerConfig;
|
|
64
|
+
unsafeAllowCustomHost?: boolean;
|
|
65
|
+
enableRequestDeduplication?: boolean;
|
|
66
|
+
language?: string;
|
|
67
|
+
compatibilityDate?: string;
|
|
68
|
+
rateLimiterConfig?: RateLimiterConfig;
|
|
69
|
+
requestInterceptors?: RequestInterceptor[];
|
|
70
|
+
responseInterceptors?: ResponseInterceptor[];
|
|
71
|
+
validateResponse?: boolean;
|
|
72
|
+
validateRequest?: boolean;
|
|
73
|
+
/** Custom logger for this client. Falls back to the global logger, then pino. */
|
|
74
|
+
logger?: import('./core/logger/ILogger.mjs').ILogger;
|
|
75
|
+
/** Log level for the default pino logger (`error|warn|info|debug|trace`). Overrides `ESI_LOG_LEVEL`. */
|
|
76
|
+
logLevel?: import('./core/logger/DefaultLogger.mjs').LogLevel;
|
|
77
|
+
}
|
|
78
|
+
export declare class EsiClient {
|
|
79
|
+
private apiClient;
|
|
80
|
+
private clients;
|
|
81
|
+
private etagCacheEnabled;
|
|
82
|
+
private _diagnostics;
|
|
83
|
+
private deduplicator;
|
|
84
|
+
constructor(config?: EsiClientConfig);
|
|
85
|
+
private getClient;
|
|
86
|
+
get alliance(): AllianceClient;
|
|
87
|
+
get assets(): AssetsClient;
|
|
88
|
+
get calendar(): CalendarClient;
|
|
89
|
+
get characters(): CharacterClient;
|
|
90
|
+
get clones(): ClonesClient;
|
|
91
|
+
get contacts(): ContactsClient;
|
|
92
|
+
get contracts(): ContractsClient;
|
|
93
|
+
get corporations(): CorporationsClient;
|
|
94
|
+
get corporationProjects(): CorporationProjectsClient;
|
|
95
|
+
get dogma(): DogmaClient;
|
|
96
|
+
get factions(): FactionClient;
|
|
97
|
+
get fittings(): FittingsClient;
|
|
98
|
+
get fleets(): FleetClient;
|
|
99
|
+
get incursions(): IncursionsClient;
|
|
100
|
+
get industry(): IndustryClient;
|
|
101
|
+
get insurance(): InsuranceClient;
|
|
102
|
+
get killmails(): KillmailsClient;
|
|
103
|
+
get location(): LocationClient;
|
|
104
|
+
get loyalty(): LoyaltyClient;
|
|
105
|
+
get mail(): MailClient;
|
|
106
|
+
get market(): MarketClient;
|
|
107
|
+
get pi(): PiClient;
|
|
108
|
+
get route(): RouteClient;
|
|
109
|
+
get search(): SearchClient;
|
|
110
|
+
get skills(): CharacterSkillsClient;
|
|
111
|
+
get sovereignty(): SovereigntyClient;
|
|
112
|
+
get status(): StatusClient;
|
|
113
|
+
get ui(): UiClient;
|
|
114
|
+
get universe(): UniverseClient;
|
|
115
|
+
get wallet(): WalletClient;
|
|
116
|
+
get wars(): WarsClient;
|
|
117
|
+
get meta(): MetaClient;
|
|
118
|
+
get freelanceJobs(): FreelanceJobsClient;
|
|
119
|
+
get cosmetics(): CosmeticsClient;
|
|
120
|
+
get paragonHub(): ParagonHubClient;
|
|
121
|
+
get skyhooks(): SkyhooksClient;
|
|
122
|
+
get mercenary(): MercenaryClient;
|
|
123
|
+
get militaryCampaigns(): MilitaryCampaignsClient;
|
|
124
|
+
get accessLists(): AccessListsClient;
|
|
125
|
+
addRequestInterceptor(fn: RequestInterceptor): () => void;
|
|
126
|
+
addResponseInterceptor(fn: ResponseInterceptor): () => void;
|
|
127
|
+
setAccessToken(token: string): void;
|
|
128
|
+
setTokenProvider(provider: TokenProvider | undefined): void;
|
|
129
|
+
get diagnostics(): EsiDiagnostics;
|
|
130
|
+
getCacheStats(): import("./index.mjs").CacheStats | null;
|
|
131
|
+
clearCache(): void;
|
|
132
|
+
updateCacheConfig(newConfig: Partial<ETagCacheConfig>): void;
|
|
133
|
+
getCircuitBreakerStats(): import("./index.mjs").CircuitBreakerStats | null;
|
|
134
|
+
resetCircuitBreaker(endpoint?: string): void;
|
|
135
|
+
batch<K, T>(keys: K[], fetcher: (key: K) => Promise<T>, options?: BatchOptions): Promise<BatchResult<K, T>>;
|
|
136
|
+
batchPost<T>(ids: number[], poster: (chunk: number[]) => Promise<T[]>, chunkSize?: number): Promise<T[]>;
|
|
137
|
+
shutdown(): void;
|
|
138
|
+
}
|
|
139
|
+
export declare function getDefaultClient(): EsiClient;
|
|
140
|
+
//# sourceMappingURL=EsiClient.d.ts.map
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { ApiClientType, ClientInstance, AllianceClient, AssetsClient, CalendarClient, CharacterClient, ClonesClient, ContactsClient, ContractsClient, CorporationsClient, DogmaClient, FactionClient, FittingsClient, FleetClient, IncursionsClient, IndustryClient, InsuranceClient, KillmailsClient, LocationClient, LoyaltyClient, MailClient, MarketClient, PiClient, RouteClient, SearchClient, CharacterSkillsClient, SovereigntyClient, StatusClient, UiClient, UniverseClient, WalletClient, WarsClient, MetaClient, FreelanceJobsClient, SkyhooksClient, MercenaryClient, AccessListsClient } from './core/ClientRegistry.mjs';
|
|
2
|
+
import { EsiClientConfig } from './EsiClient.mjs';
|
|
3
|
+
export { ApiClientType, ClientInstance };
|
|
4
|
+
export declare class CustomEsiClient {
|
|
5
|
+
private apiClient;
|
|
6
|
+
private clients;
|
|
7
|
+
private enabledClients;
|
|
8
|
+
private deduplicator;
|
|
9
|
+
constructor(config: EsiClientConfig & {
|
|
10
|
+
clients: ApiClientType[];
|
|
11
|
+
});
|
|
12
|
+
getClient(clientType: ApiClientType): ClientInstance | undefined;
|
|
13
|
+
hasClient(clientType: ApiClientType): boolean;
|
|
14
|
+
getEnabledClients(): ApiClientType[];
|
|
15
|
+
get alliance(): AllianceClient | undefined;
|
|
16
|
+
get assets(): AssetsClient | undefined;
|
|
17
|
+
get calendar(): CalendarClient | undefined;
|
|
18
|
+
get characters(): CharacterClient | undefined;
|
|
19
|
+
get clones(): ClonesClient | undefined;
|
|
20
|
+
get contacts(): ContactsClient | undefined;
|
|
21
|
+
get contracts(): ContractsClient | undefined;
|
|
22
|
+
get corporations(): CorporationsClient | undefined;
|
|
23
|
+
get dogma(): DogmaClient | undefined;
|
|
24
|
+
get factions(): FactionClient | undefined;
|
|
25
|
+
get fittings(): FittingsClient | undefined;
|
|
26
|
+
get fleets(): FleetClient | undefined;
|
|
27
|
+
get incursions(): IncursionsClient | undefined;
|
|
28
|
+
get industry(): IndustryClient | undefined;
|
|
29
|
+
get insurance(): InsuranceClient | undefined;
|
|
30
|
+
get killmails(): KillmailsClient | undefined;
|
|
31
|
+
get location(): LocationClient | undefined;
|
|
32
|
+
get loyalty(): LoyaltyClient | undefined;
|
|
33
|
+
get mail(): MailClient | undefined;
|
|
34
|
+
get market(): MarketClient | undefined;
|
|
35
|
+
get pi(): PiClient | undefined;
|
|
36
|
+
get route(): RouteClient | undefined;
|
|
37
|
+
get search(): SearchClient | undefined;
|
|
38
|
+
get skills(): CharacterSkillsClient | undefined;
|
|
39
|
+
get sovereignty(): SovereigntyClient | undefined;
|
|
40
|
+
get status(): StatusClient | undefined;
|
|
41
|
+
get ui(): UiClient | undefined;
|
|
42
|
+
get universe(): UniverseClient | undefined;
|
|
43
|
+
get wallet(): WalletClient | undefined;
|
|
44
|
+
get wars(): WarsClient | undefined;
|
|
45
|
+
get meta(): MetaClient | undefined;
|
|
46
|
+
get freelanceJobs(): FreelanceJobsClient | undefined;
|
|
47
|
+
get skyhooks(): SkyhooksClient | undefined;
|
|
48
|
+
get mercenary(): MercenaryClient | undefined;
|
|
49
|
+
get accessLists(): AccessListsClient | undefined;
|
|
50
|
+
shutdown(): void;
|
|
51
|
+
}
|
|
52
|
+
export declare class EsiApiFactory {
|
|
53
|
+
static createAllianceClient(config?: EsiClientConfig): AllianceClient;
|
|
54
|
+
static createCharacterClient(config?: EsiClientConfig): CharacterClient;
|
|
55
|
+
static createCorporationClient(config?: EsiClientConfig): CorporationsClient;
|
|
56
|
+
static createMarketClient(config?: EsiClientConfig): MarketClient;
|
|
57
|
+
static createUniverseClient(config?: EsiClientConfig): UniverseClient;
|
|
58
|
+
static createFleetClient(config?: EsiClientConfig): FleetClient;
|
|
59
|
+
static createAssetsClient(config?: EsiClientConfig): AssetsClient;
|
|
60
|
+
static createWalletClient(config?: EsiClientConfig): WalletClient;
|
|
61
|
+
static createMailClient(config?: EsiClientConfig): MailClient;
|
|
62
|
+
static createClient(clientType: ApiClientType, config?: EsiClientConfig): ClientInstance;
|
|
63
|
+
private static buildApiClient;
|
|
64
|
+
}
|
|
65
|
+
export declare class EsiClientBuilder {
|
|
66
|
+
private clients;
|
|
67
|
+
private config;
|
|
68
|
+
addClient(clientType: ApiClientType): this;
|
|
69
|
+
addClients(clientTypes: ApiClientType[]): this;
|
|
70
|
+
withConfig(config: EsiClientConfig): this;
|
|
71
|
+
withClientId(clientId: string): this;
|
|
72
|
+
withAccessToken(accessToken: string): this;
|
|
73
|
+
build(): CustomEsiClient;
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=EsiClientBuilder.d.ts.map
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import { EsiClient, EsiClientConfig } from '../EsiClient.mjs';
|
|
2
|
+
import type { FetchLike, TokenProvider } from '../core/ApiClient.mjs';
|
|
3
|
+
import type { ILogger } from '../core/logger/ILogger.mjs';
|
|
4
|
+
import { EveSsoClient, AuthorizationUrlOptions, ExchangeCodeOptions } from './EveSsoClient.mjs';
|
|
5
|
+
import type { ITokenStorage, StoredToken } from './types.mjs';
|
|
6
|
+
export interface EsiTokenManagerConfig {
|
|
7
|
+
/** The application's SSO client id. */
|
|
8
|
+
clientId: string;
|
|
9
|
+
/** The application's SSO client secret. Omit for a public (PKCE) client. */
|
|
10
|
+
clientSecret?: string;
|
|
11
|
+
/** Redirect URI registered for the application. */
|
|
12
|
+
callbackUrl?: string;
|
|
13
|
+
/** Where tokens are persisted. Defaults to {@link MemoryTokenStorage}. */
|
|
14
|
+
storage?: ITokenStorage;
|
|
15
|
+
/** Pre-built SSO client. When given, `clientId`, `clientSecret`, `callbackUrl` and `fetch` are ignored for SSO calls. */
|
|
16
|
+
ssoClient?: EveSsoClient;
|
|
17
|
+
/** Custom fetch for SSO calls. Defaults to `globalThis.fetch`. */
|
|
18
|
+
fetch?: FetchLike;
|
|
19
|
+
/**
|
|
20
|
+
* How long before expiry a token counts as stale, in milliseconds.
|
|
21
|
+
* Defaults to 60 000 (one minute).
|
|
22
|
+
*/
|
|
23
|
+
refreshSkewMs?: number;
|
|
24
|
+
/**
|
|
25
|
+
* When true (the default), {@link EsiTokenManager.getToken} refreshes a
|
|
26
|
+
* stale token before returning it. When false it returns the stored token
|
|
27
|
+
* as-is and refresh only happens through {@link EsiTokenManager.refresh},
|
|
28
|
+
* {@link EsiTokenManager.refreshAll}, or the 401 path of a created client.
|
|
29
|
+
*/
|
|
30
|
+
autoRefresh?: boolean;
|
|
31
|
+
/** Called after a token is refreshed and persisted. */
|
|
32
|
+
onRefresh?: (token: StoredToken) => void;
|
|
33
|
+
/** Called when a refresh fails for a reason other than revocation. */
|
|
34
|
+
onRefreshError?: (characterId: number, error: Error) => void;
|
|
35
|
+
/** Called when SSO reports a character's refresh token as invalid. */
|
|
36
|
+
onRevoked?: (characterId: number) => void;
|
|
37
|
+
/** Logger for refresh activity. Defaults to the library logger. */
|
|
38
|
+
logger?: ILogger;
|
|
39
|
+
/** Clock override for tests. */
|
|
40
|
+
now?: () => number;
|
|
41
|
+
}
|
|
42
|
+
export interface AddCharacterOptions extends ExchangeCodeOptions {
|
|
43
|
+
/**
|
|
44
|
+
* When the character already has a stored token, revoke its refresh token
|
|
45
|
+
* at SSO before replacing it. Defaults to false.
|
|
46
|
+
*/
|
|
47
|
+
revokeReplaced?: boolean;
|
|
48
|
+
}
|
|
49
|
+
export interface RemoveCharacterOptions {
|
|
50
|
+
/** Revoke the refresh token at SSO before deleting it. Defaults to false. */
|
|
51
|
+
revoke?: boolean;
|
|
52
|
+
}
|
|
53
|
+
export interface RefreshAllOptions {
|
|
54
|
+
/** Maximum simultaneous SSO requests. Defaults to 5. */
|
|
55
|
+
concurrency?: number;
|
|
56
|
+
/**
|
|
57
|
+
* Only refresh tokens that expire within this many milliseconds (after
|
|
58
|
+
* applying the refresh skew). Omit to refresh every token.
|
|
59
|
+
*/
|
|
60
|
+
expiringWithinMs?: number;
|
|
61
|
+
/** Abort the run; remaining tokens are reported as skipped. */
|
|
62
|
+
signal?: AbortSignal;
|
|
63
|
+
/**
|
|
64
|
+
* Progress callback, invoked after each token settles. A callback that
|
|
65
|
+
* throws does not stop the run; the exception is discarded.
|
|
66
|
+
*/
|
|
67
|
+
onProgress?: (completed: number, total: number) => void;
|
|
68
|
+
}
|
|
69
|
+
export type RefreshStatus = 'refreshed' | 'skipped' | 'failed' | 'revoked';
|
|
70
|
+
export interface RefreshResult {
|
|
71
|
+
characterId: number;
|
|
72
|
+
status: RefreshStatus;
|
|
73
|
+
/** New expiry in epoch milliseconds, when refreshed. */
|
|
74
|
+
expiresAt?: number;
|
|
75
|
+
/** The error, when failed or revoked. */
|
|
76
|
+
error?: Error;
|
|
77
|
+
/** True when the failure was an SSO 429 or 5xx and can be retried later. */
|
|
78
|
+
retryable?: boolean;
|
|
79
|
+
/** Why the token was skipped. */
|
|
80
|
+
reason?: 'not-stale' | 'aborted';
|
|
81
|
+
}
|
|
82
|
+
/** Lightweight view of a stored character, without the secrets. */
|
|
83
|
+
export interface CharacterSummary {
|
|
84
|
+
characterId: number;
|
|
85
|
+
characterName: string;
|
|
86
|
+
scopes: string[];
|
|
87
|
+
expiresAt: number;
|
|
88
|
+
revoked: boolean;
|
|
89
|
+
}
|
|
90
|
+
/** EsiClient options a manager-created client accepts; token fields are supplied by the manager. */
|
|
91
|
+
export type ManagedClientConfig = Omit<EsiClientConfig, 'accessToken' | 'onTokenRefresh'>;
|
|
92
|
+
/**
|
|
93
|
+
* Keeps one valid SSO token per character on top of a pluggable
|
|
94
|
+
* {@link ITokenStorage}, refreshing ahead of expiry, coalescing concurrent
|
|
95
|
+
* refreshes, persisting rotated refresh tokens, and recording revocations so
|
|
96
|
+
* SSO is not hammered with a dead refresh token.
|
|
97
|
+
*/
|
|
98
|
+
export declare class EsiTokenManager {
|
|
99
|
+
private readonly storage;
|
|
100
|
+
private readonly sso;
|
|
101
|
+
private readonly refreshSkewMs;
|
|
102
|
+
private readonly autoRefresh;
|
|
103
|
+
private readonly logger;
|
|
104
|
+
private readonly now;
|
|
105
|
+
private readonly hooks;
|
|
106
|
+
private readonly inFlight;
|
|
107
|
+
/**
|
|
108
|
+
* Per-character write generation. Bumped whenever a record is replaced or
|
|
109
|
+
* removed so a refresh that was already waiting on SSO can tell its result
|
|
110
|
+
* is stale and must not be persisted over the newer state.
|
|
111
|
+
*/
|
|
112
|
+
private readonly generations;
|
|
113
|
+
constructor(config: EsiTokenManagerConfig);
|
|
114
|
+
/** The SSO client used for all token traffic. */
|
|
115
|
+
getSsoClient(): EveSsoClient;
|
|
116
|
+
/** The storage adapter backing this manager. */
|
|
117
|
+
getStorage(): ITokenStorage;
|
|
118
|
+
/** Build the SSO login URL. See {@link EveSsoClient.getAuthorizationUrl}. */
|
|
119
|
+
getAuthorizationUrl(options: AuthorizationUrlOptions): string;
|
|
120
|
+
/**
|
|
121
|
+
* Exchange an authorization code and store the resulting token under the
|
|
122
|
+
* character it belongs to. An existing token for that character is
|
|
123
|
+
* replaced; storage never holds two entries for one character.
|
|
124
|
+
*/
|
|
125
|
+
addCharacter(code: string, options?: AddCharacterOptions): Promise<StoredToken>;
|
|
126
|
+
/**
|
|
127
|
+
* Import tokens obtained elsewhere (a previous library version, another
|
|
128
|
+
* tool, a migration). The character identity is decoded from the access
|
|
129
|
+
* token; `expiresIn` is in seconds and defaults to the JWT `exp` claim.
|
|
130
|
+
*/
|
|
131
|
+
importToken(token: {
|
|
132
|
+
accessToken: string;
|
|
133
|
+
refreshToken: string;
|
|
134
|
+
expiresIn?: number;
|
|
135
|
+
}): Promise<StoredToken>;
|
|
136
|
+
/** Delete a character's token, optionally revoking it at SSO first. */
|
|
137
|
+
removeCharacter(characterId: number, options?: RemoveCharacterOptions): Promise<void>;
|
|
138
|
+
/** The stored record for a character, or null. */
|
|
139
|
+
getStoredToken(characterId: number): Promise<StoredToken | null>;
|
|
140
|
+
/** Every stored token. */
|
|
141
|
+
listTokens(): Promise<StoredToken[]>;
|
|
142
|
+
/** Every stored character without its secrets. */
|
|
143
|
+
listCharacters(): Promise<CharacterSummary[]>;
|
|
144
|
+
/** True when the stored token grants every listed scope. */
|
|
145
|
+
hasScopes(characterId: number, scopes: readonly string[]): Promise<boolean>;
|
|
146
|
+
/**
|
|
147
|
+
* A usable access token for the character. With `autoRefresh` on, a token
|
|
148
|
+
* inside the refresh skew is refreshed first.
|
|
149
|
+
*
|
|
150
|
+
* @throws CharacterNotFoundError when no token is stored
|
|
151
|
+
* @throws TokenRevokedError when the character's refresh token is revoked
|
|
152
|
+
*/
|
|
153
|
+
getToken(characterId: number): Promise<string>;
|
|
154
|
+
/**
|
|
155
|
+
* Refresh a character's token through SSO regardless of expiry. Concurrent
|
|
156
|
+
* calls for the same character share one SSO request.
|
|
157
|
+
*/
|
|
158
|
+
refresh(characterId: number): Promise<StoredToken>;
|
|
159
|
+
/**
|
|
160
|
+
* Refresh stored tokens with bounded concurrency. Per-character failures
|
|
161
|
+
* never reject: each character gets its own {@link RefreshResult}. The one
|
|
162
|
+
* rejection is a failing `storage.list()`, because with no records there
|
|
163
|
+
* is no character to attribute the fault to and a silent empty run would
|
|
164
|
+
* hide a broken store from a scheduler.
|
|
165
|
+
*/
|
|
166
|
+
refreshAll(options?: RefreshAllOptions): Promise<RefreshResult[]>;
|
|
167
|
+
/**
|
|
168
|
+
* A {@link TokenProvider} bound to a character, for `onTokenRefresh`. Every
|
|
169
|
+
* invocation refreshes through SSO (coalesced), because the client only
|
|
170
|
+
* calls it after ESI has rejected the current token.
|
|
171
|
+
*/
|
|
172
|
+
tokenProviderFor(characterId: number): TokenProvider;
|
|
173
|
+
/**
|
|
174
|
+
* An {@link EsiClient} whose access token and refresh provider are bound to
|
|
175
|
+
* the character. The token is validated (and refreshed if stale) first.
|
|
176
|
+
*/
|
|
177
|
+
createClient(characterId: number, config?: ManagedClientConfig): Promise<EsiClient>;
|
|
178
|
+
private isStale;
|
|
179
|
+
private requireStored;
|
|
180
|
+
private generationOf;
|
|
181
|
+
private bumpGeneration;
|
|
182
|
+
/**
|
|
183
|
+
* After an SSO round trip, decide whether the refresh still owns the
|
|
184
|
+
* character's record. Returns null when it does. When the record was
|
|
185
|
+
* replaced meanwhile, returns the current record so the caller hands out
|
|
186
|
+
* the newer credentials; when it was removed, throws CharacterNotFoundError.
|
|
187
|
+
*/
|
|
188
|
+
private supersededBy;
|
|
189
|
+
private doRefresh;
|
|
190
|
+
private refreshOne;
|
|
191
|
+
private storeResponse;
|
|
192
|
+
/**
|
|
193
|
+
* Build the record to persist. When adding a character the access token
|
|
194
|
+
* must decode, because it is the only source of the character id. On a
|
|
195
|
+
* refresh the identity is already known, so a token that does not decode
|
|
196
|
+
* (a proxy, a future SSO format) keeps the previous record's identity.
|
|
197
|
+
*/
|
|
198
|
+
private buildStoredToken;
|
|
199
|
+
}
|
|
200
|
+
//# sourceMappingURL=EsiTokenManager.d.ts.map
|