@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
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { IndustryJobSchema, CorporationIndustryJobSchema, MiningLedgerEntrySchema, IndustryFacilitySchema, IndustrySystemSchema, MoonExtractionTimerSchema, MiningObserverSchema, MiningObserverEntrySchema } from '../schemas/industry.mjs';
|
|
3
|
+
export type IndustryJob = z.infer<typeof IndustryJobSchema>;
|
|
4
|
+
export type CorporationIndustryJob = z.infer<typeof CorporationIndustryJobSchema>;
|
|
5
|
+
export type MiningLedgerEntry = z.infer<typeof MiningLedgerEntrySchema>;
|
|
6
|
+
export type IndustryFacility = z.infer<typeof IndustryFacilitySchema>;
|
|
7
|
+
export type IndustrySystem = z.infer<typeof IndustrySystemSchema>;
|
|
8
|
+
export type MoonExtractionTimer = z.infer<typeof MoonExtractionTimerSchema>;
|
|
9
|
+
export type MiningObserver = z.infer<typeof MiningObserverSchema>;
|
|
10
|
+
export type MiningObserverEntry = z.infer<typeof MiningObserverEntrySchema>;
|
|
11
|
+
//# sourceMappingURL=industry.d.ts.map
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { KillmailSummarySchema, KillmailSchema } from '../schemas/killmails.mjs';
|
|
3
|
+
export type KillmailSummary = z.infer<typeof KillmailSummarySchema>;
|
|
4
|
+
export type Killmail = z.infer<typeof KillmailSchema>;
|
|
5
|
+
//# sourceMappingURL=killmails.d.ts.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { CharacterLocationSchema, CharacterOnlineSchema, CharacterShipSchema } from '../schemas/location.mjs';
|
|
3
|
+
export type CharacterLocation = z.infer<typeof CharacterLocationSchema>;
|
|
4
|
+
export type CharacterOnline = z.infer<typeof CharacterOnlineSchema>;
|
|
5
|
+
export type CharacterShip = z.infer<typeof CharacterShipSchema>;
|
|
6
|
+
//# sourceMappingURL=location.d.ts.map
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { LoyaltyPointsSchema, LoyaltyStoreOfferSchema } from '../schemas/loyalty.mjs';
|
|
3
|
+
export type LoyaltyPoints = z.infer<typeof LoyaltyPointsSchema>;
|
|
4
|
+
export type LoyaltyStoreOffer = z.infer<typeof LoyaltyStoreOfferSchema>;
|
|
5
|
+
//# sourceMappingURL=loyalty.d.ts.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { MailHeaderSchema, MailMessageSchema, MailLabelSchema } from '../schemas/mail.mjs';
|
|
3
|
+
export type MailHeader = z.infer<typeof MailHeaderSchema>;
|
|
4
|
+
export type MailMessage = z.infer<typeof MailMessageSchema>;
|
|
5
|
+
export type MailLabel = z.infer<typeof MailLabelSchema>;
|
|
6
|
+
//# sourceMappingURL=mail.d.ts.map
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { MarketOrderSchema, CharacterMarketOrderSchema, CharacterMarketOrderHistorySchema, CorporationMarketOrderSchema, CorporationMarketOrderHistorySchema, StructureMarketOrderSchema, MarketHistorySchema, MarketPriceSchema, MarketGroupSchema } from '../schemas/market.mjs';
|
|
3
|
+
export type MarketOrder = z.infer<typeof MarketOrderSchema>;
|
|
4
|
+
export type CharacterMarketOrder = z.infer<typeof CharacterMarketOrderSchema>;
|
|
5
|
+
export type CharacterMarketOrderHistory = z.infer<typeof CharacterMarketOrderHistorySchema>;
|
|
6
|
+
export type CorporationMarketOrder = z.infer<typeof CorporationMarketOrderSchema>;
|
|
7
|
+
export type CorporationMarketOrderHistory = z.infer<typeof CorporationMarketOrderHistorySchema>;
|
|
8
|
+
export type StructureMarketOrder = z.infer<typeof StructureMarketOrderSchema>;
|
|
9
|
+
export type MarketHistory = z.infer<typeof MarketHistorySchema>;
|
|
10
|
+
export type MarketPrice = z.infer<typeof MarketPriceSchema>;
|
|
11
|
+
export type MarketGroup = z.infer<typeof MarketGroupSchema>;
|
|
12
|
+
//# sourceMappingURL=market.d.ts.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { MercenaryDenSchema, MercenaryTacticalOperationSchema, MercenaryDenDetailSchema, MercenaryTacticalOperationDetailSchema } from '../schemas/mercenary.mjs';
|
|
3
|
+
export type MercenaryDen = z.infer<typeof MercenaryDenSchema>;
|
|
4
|
+
export type MercenaryTacticalOperation = z.infer<typeof MercenaryTacticalOperationSchema>;
|
|
5
|
+
export type MercenaryDenDetail = z.infer<typeof MercenaryDenDetailSchema>;
|
|
6
|
+
export type MercenaryTacticalOperationDetail = z.infer<typeof MercenaryTacticalOperationDetailSchema>;
|
|
7
|
+
//# sourceMappingURL=mercenary.d.ts.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { MetaChangelogSchema, MetaChangelogEntrySchema, MetaCompatibilityDatesSchema, MetaNameSchema, MetaStatusSchema, MetaRouteStatusSchema } from '../schemas/meta.mjs';
|
|
3
|
+
export type MetaChangelog = z.infer<typeof MetaChangelogSchema>;
|
|
4
|
+
export type MetaChangelogEntry = z.infer<typeof MetaChangelogEntrySchema>;
|
|
5
|
+
export type MetaCompatibilityDates = z.infer<typeof MetaCompatibilityDatesSchema>;
|
|
6
|
+
export type MetaName = z.infer<typeof MetaNameSchema>;
|
|
7
|
+
export type MetaStatus = z.infer<typeof MetaStatusSchema>;
|
|
8
|
+
export type MetaRouteStatus = z.infer<typeof MetaRouteStatusSchema>;
|
|
9
|
+
//# sourceMappingURL=meta.d.ts.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { MilitaryCampaignSchema, MilitaryCampaignObjectiveSchema, CharacterMilitaryCampaignObjectiveSchema } from '../schemas/military-campaigns.mjs';
|
|
3
|
+
export type MilitaryCampaign = z.infer<typeof MilitaryCampaignSchema>;
|
|
4
|
+
export type MilitaryCampaignObjective = z.infer<typeof MilitaryCampaignObjectiveSchema>;
|
|
5
|
+
export type CharacterMilitaryCampaignObjective = z.infer<typeof CharacterMilitaryCampaignObjectiveSchema>;
|
|
6
|
+
//# sourceMappingURL=military-campaigns.d.ts.map
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { ParagonHubSkinrListingSchema, ParagonHubCharacterListingSchema, ParagonHubSkinrResponseSchema, ParagonHubCharacterSkinrResponseSchema, ParagonHubCursorSchema } from '../schemas/paragon-hub.mjs';
|
|
3
|
+
export type ParagonHubSkinrListing = z.infer<typeof ParagonHubSkinrListingSchema>;
|
|
4
|
+
export type ParagonHubCharacterListing = z.infer<typeof ParagonHubCharacterListingSchema>;
|
|
5
|
+
export type ParagonHubSkinrResponse = z.infer<typeof ParagonHubSkinrResponseSchema>;
|
|
6
|
+
export type ParagonHubCharacterSkinrResponse = z.infer<typeof ParagonHubCharacterSkinrResponseSchema>;
|
|
7
|
+
export type ParagonHubCursor = z.infer<typeof ParagonHubCursorSchema>;
|
|
8
|
+
//# sourceMappingURL=paragon-hub.d.ts.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { PlanetaryColonySchema, CustomsOfficeSchema, ColonyLayoutSchema } from '../schemas/pi.mjs';
|
|
3
|
+
export type PlanetaryColony = z.infer<typeof PlanetaryColonySchema>;
|
|
4
|
+
export type CustomsOffice = z.infer<typeof CustomsOfficeSchema>;
|
|
5
|
+
export type ColonyLayout = z.infer<typeof ColonyLayoutSchema>;
|
|
6
|
+
//# sourceMappingURL=pi.d.ts.map
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { CharacterSkillSchema, SkillQueueSchema } from '../schemas/skills.mjs';
|
|
3
|
+
export type CharacterSkill = z.infer<typeof CharacterSkillSchema>;
|
|
4
|
+
export type SkillQueue = z.infer<typeof SkillQueueSchema>;
|
|
5
|
+
//# sourceMappingURL=skills.d.ts.map
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { SovereigntyHubSchema, OrbitalSkyhookSchema, RaidableSkyhookSchema, SkyhookDetailSchema, SovereigntyHubDetailSchema } from '../schemas/skyhooks.mjs';
|
|
3
|
+
export type SovereigntyHub = z.infer<typeof SovereigntyHubSchema>;
|
|
4
|
+
export type OrbitalSkyhook = z.infer<typeof OrbitalSkyhookSchema>;
|
|
5
|
+
export type RaidableSkyhook = z.infer<typeof RaidableSkyhookSchema>;
|
|
6
|
+
export type SkyhookDetail = z.infer<typeof SkyhookDetailSchema>;
|
|
7
|
+
export type SovereigntyHubDetail = z.infer<typeof SovereigntyHubDetailSchema>;
|
|
8
|
+
//# sourceMappingURL=skyhooks.d.ts.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { SovereigntyCampaignSchema, SovereigntySystemStructureSchema, SovereigntySystemSchema } from '../schemas/sovereignty.mjs';
|
|
3
|
+
export type SovereigntyCampaign = z.infer<typeof SovereigntyCampaignSchema>;
|
|
4
|
+
export type SovereigntySystemStructure = z.infer<typeof SovereigntySystemStructureSchema>;
|
|
5
|
+
export type SovereigntySystem = z.infer<typeof SovereigntySystemSchema>;
|
|
6
|
+
//# sourceMappingURL=sovereignty.d.ts.map
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { SolarSystemInfoSchema, ConstellationInfoSchema, RegionInfoSchema, AncestrySchema, BloodlineSchema, FactionSchema, RaceSchema, StationInfoSchema, TypeInfoSchema, AsteroidBeltInfoSchema, GraphicInfoSchema, ItemCategorySchema, ItemGroupSchema, MoonInfoSchema, PlanetInfoSchema, StarInfoSchema, StargateInfoSchema, StructureInfoSchema, SystemJumpSchema, SystemKillSchema, BulkIdResultSchema, NameAndCategorySchema, SchematicInfoSchema, SearchResultSchema } from '../schemas/universe.mjs';
|
|
3
|
+
export type SolarSystemInfo = z.infer<typeof SolarSystemInfoSchema>;
|
|
4
|
+
export type ConstellationInfo = z.infer<typeof ConstellationInfoSchema>;
|
|
5
|
+
export type RegionInfo = z.infer<typeof RegionInfoSchema>;
|
|
6
|
+
export type Ancestry = z.infer<typeof AncestrySchema>;
|
|
7
|
+
export type Bloodline = z.infer<typeof BloodlineSchema>;
|
|
8
|
+
export type Faction = z.infer<typeof FactionSchema>;
|
|
9
|
+
export type Race = z.infer<typeof RaceSchema>;
|
|
10
|
+
export type StationInfo = z.infer<typeof StationInfoSchema>;
|
|
11
|
+
export type TypeInfo = z.infer<typeof TypeInfoSchema>;
|
|
12
|
+
export type AsteroidBeltInfo = z.infer<typeof AsteroidBeltInfoSchema>;
|
|
13
|
+
export type GraphicInfo = z.infer<typeof GraphicInfoSchema>;
|
|
14
|
+
export type ItemCategory = z.infer<typeof ItemCategorySchema>;
|
|
15
|
+
export type ItemGroup = z.infer<typeof ItemGroupSchema>;
|
|
16
|
+
export type MoonInfo = z.infer<typeof MoonInfoSchema>;
|
|
17
|
+
export type PlanetInfo = z.infer<typeof PlanetInfoSchema>;
|
|
18
|
+
export type StarInfo = z.infer<typeof StarInfoSchema>;
|
|
19
|
+
export type StargateInfo = z.infer<typeof StargateInfoSchema>;
|
|
20
|
+
export type StructureInfo = z.infer<typeof StructureInfoSchema>;
|
|
21
|
+
export type SystemJump = z.infer<typeof SystemJumpSchema>;
|
|
22
|
+
export type SystemKill = z.infer<typeof SystemKillSchema>;
|
|
23
|
+
export type BulkIdResult = z.infer<typeof BulkIdResultSchema>;
|
|
24
|
+
export type NameAndCategory = z.infer<typeof NameAndCategorySchema>;
|
|
25
|
+
export type SchematicInfo = z.infer<typeof SchematicInfoSchema>;
|
|
26
|
+
export type SearchResult = z.infer<typeof SearchResultSchema>;
|
|
27
|
+
//# sourceMappingURL=universe.d.ts.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { WalletTransactionSchema, CorporationWalletTransactionSchema, WalletJournalSchema } from '../schemas/wallet.mjs';
|
|
3
|
+
export type WalletTransaction = z.infer<typeof WalletTransactionSchema>;
|
|
4
|
+
export type CorporationWalletTransaction = z.infer<typeof CorporationWalletTransactionSchema>;
|
|
5
|
+
export type WalletJournal = z.infer<typeof WalletJournalSchema>;
|
|
6
|
+
//# sourceMappingURL=wallet.d.ts.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lgriffin/esi.ts",
|
|
3
|
-
"version": "10.
|
|
3
|
+
"version": "10.2.0",
|
|
4
4
|
"description": "This is a TypeScript Implementation for the EVE Online API offered through ESI",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.mjs",
|
|
@@ -14,34 +14,64 @@
|
|
|
14
14
|
},
|
|
15
15
|
"exports": {
|
|
16
16
|
".": {
|
|
17
|
-
"
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
"import": {
|
|
18
|
+
"types": "./dist/index.d.mts",
|
|
19
|
+
"default": "./dist/index.mjs"
|
|
20
|
+
},
|
|
21
|
+
"require": {
|
|
22
|
+
"types": "./dist/index.d.ts",
|
|
23
|
+
"default": "./dist/index.js"
|
|
24
|
+
}
|
|
20
25
|
},
|
|
21
26
|
"./schemas": {
|
|
22
|
-
"
|
|
23
|
-
|
|
24
|
-
|
|
27
|
+
"import": {
|
|
28
|
+
"types": "./dist/schemas/index.d.mts",
|
|
29
|
+
"default": "./dist/schemas/index.mjs"
|
|
30
|
+
},
|
|
31
|
+
"require": {
|
|
32
|
+
"types": "./dist/schemas/index.d.ts",
|
|
33
|
+
"default": "./dist/schemas/index.js"
|
|
34
|
+
}
|
|
25
35
|
},
|
|
26
36
|
"./errors": {
|
|
27
|
-
"
|
|
28
|
-
|
|
29
|
-
|
|
37
|
+
"import": {
|
|
38
|
+
"types": "./dist/errors.d.mts",
|
|
39
|
+
"default": "./dist/errors.mjs"
|
|
40
|
+
},
|
|
41
|
+
"require": {
|
|
42
|
+
"types": "./dist/errors.d.ts",
|
|
43
|
+
"default": "./dist/errors.js"
|
|
44
|
+
}
|
|
30
45
|
},
|
|
31
46
|
"./testing": {
|
|
32
|
-
"
|
|
33
|
-
|
|
34
|
-
|
|
47
|
+
"import": {
|
|
48
|
+
"types": "./dist/testing/index.d.mts",
|
|
49
|
+
"default": "./dist/testing/index.mjs"
|
|
50
|
+
},
|
|
51
|
+
"require": {
|
|
52
|
+
"types": "./dist/testing/index.d.ts",
|
|
53
|
+
"default": "./dist/testing/index.js"
|
|
54
|
+
}
|
|
35
55
|
},
|
|
36
56
|
"./sde": {
|
|
37
|
-
"
|
|
38
|
-
|
|
39
|
-
|
|
57
|
+
"import": {
|
|
58
|
+
"types": "./dist/sde/index.d.mts",
|
|
59
|
+
"default": "./dist/sde/index.mjs"
|
|
60
|
+
},
|
|
61
|
+
"require": {
|
|
62
|
+
"types": "./dist/sde/index.d.ts",
|
|
63
|
+
"default": "./dist/sde/index.js"
|
|
64
|
+
}
|
|
40
65
|
},
|
|
41
66
|
"./sde/memory": {
|
|
42
|
-
"
|
|
43
|
-
|
|
44
|
-
|
|
67
|
+
"import": {
|
|
68
|
+
"types": "./dist/sde/memory.d.mts",
|
|
69
|
+
"default": "./dist/sde/memory.mjs"
|
|
70
|
+
},
|
|
71
|
+
"require": {
|
|
72
|
+
"types": "./dist/sde/memory.d.ts",
|
|
73
|
+
"default": "./dist/sde/memory.js"
|
|
74
|
+
}
|
|
45
75
|
},
|
|
46
76
|
"./package.json": "./package.json"
|
|
47
77
|
},
|
|
@@ -52,7 +82,7 @@
|
|
|
52
82
|
"CHANGELOG.md"
|
|
53
83
|
],
|
|
54
84
|
"scripts": {
|
|
55
|
-
"build": "tsup && tsc --emitDeclarationOnly",
|
|
85
|
+
"build": "tsup && tsc --emitDeclarationOnly && node scripts/esm-declarations.cjs",
|
|
56
86
|
"typecheck": "tsc --noEmit",
|
|
57
87
|
"help": "ts-node scripts/npm-help.ts",
|
|
58
88
|
"start": "ts-node examples/character-profile.ts",
|
|
@@ -104,8 +134,9 @@
|
|
|
104
134
|
"example:freelance-jobs": "ts-node examples/freelance-jobs.ts",
|
|
105
135
|
"example:military-campaigns": "ts-node examples/military-campaigns.ts",
|
|
106
136
|
"example:sde-basic": "ts-node examples/sde-basic-lookup.ts",
|
|
107
|
-
"example:sde-
|
|
108
|
-
"sde
|
|
137
|
+
"example:sde-fitting": "ts-node examples/sde-fitting.ts",
|
|
138
|
+
"example:sde-industry": "ts-node examples/sde-industry.ts",
|
|
139
|
+
"example:sde-market-tree": "ts-node examples/sde-market-tree.ts",
|
|
109
140
|
"sde:ingest": "ts-node scripts/sde-ingest.ts",
|
|
110
141
|
"example:write-ops": "ts-node examples/write-operations.ts",
|
|
111
142
|
"token:create": "ts-node scripts/create-token.ts",
|
|
@@ -114,6 +145,10 @@
|
|
|
114
145
|
"lint:fix": "eslint src --fix",
|
|
115
146
|
"lint:bdd-seam": "eslint --config eslint.bdd-seam.config.mjs tests/bdd",
|
|
116
147
|
"lint:determinism": "ts-node scripts/determinism-lint.ts",
|
|
148
|
+
"lint:suite-health": "eslint --config eslint.suite-health.config.mjs tests",
|
|
149
|
+
"lint:workflows": "ts-node scripts/workflow-lint.ts",
|
|
150
|
+
"lint:package": "ts-node scripts/package-lint.ts",
|
|
151
|
+
"size": "size-limit",
|
|
117
152
|
"format": "prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"",
|
|
118
153
|
"format:check": "prettier --check \"src/**/*.ts\" \"tests/**/*.ts\"",
|
|
119
154
|
"test": "jest --config jest.unit.config.cjs",
|
|
@@ -171,14 +206,26 @@
|
|
|
171
206
|
"contract": "jest --config jest.contract.config.cjs",
|
|
172
207
|
"contract:live": "jest --config jest.contract.live.config.cjs",
|
|
173
208
|
"contract:snapshot": "ts-node scripts/snapshot-openapi.ts",
|
|
209
|
+
"contract:record": "ts-node tests/contract/record.ts",
|
|
210
|
+
"contract:replay": "jest --config jest.contract.replay.config.cjs",
|
|
211
|
+
"contract:shape-diff": "ts-node tests/contract/shape-diff.ts",
|
|
174
212
|
"contract:diff": "docker run --rm -v ./tests/contract/snapshots:/specs tufin/oasdiff breaking /specs/esi-openapi.snapshot.json https://esi.evetech.net/meta/openapi.json",
|
|
175
|
-
"benchmark": "
|
|
213
|
+
"benchmark": "ts-node scripts/bench-ab.ts --head .",
|
|
214
|
+
"bench:ab": "ts-node scripts/bench-ab.ts",
|
|
215
|
+
"bench:compare": "ts-node scripts/bench-compare.ts",
|
|
216
|
+
"bench:trend": "ts-node scripts/bench-trend.ts",
|
|
217
|
+
"soak": "node --expose-gc -r ts-node/register/transpile-only scripts/soak.ts",
|
|
176
218
|
"fuzz": "jest --config jest.fuzz.config.cjs",
|
|
219
|
+
"fuzz:properties": "jest --config jest.fuzz.config.cjs --testPathPatterns=property.test",
|
|
177
220
|
"fuzz:api": "bash scripts/run-schemathesis.sh",
|
|
221
|
+
"faults": "jest --config jest.faults.config.cjs",
|
|
222
|
+
"faults:nightly": "jest --config jest.faults.nightly.config.cjs",
|
|
178
223
|
"mock:esi": "prism mock https://esi.evetech.net/meta/openapi.json -p 4010",
|
|
179
224
|
"test:types": "tsd --files 'tests/typetests/*.test-d.ts'",
|
|
180
225
|
"test:export-coverage": "ts-node scripts/export-coverage.ts",
|
|
226
|
+
"test:type-mutation": "ts-node scripts/type-mutation.ts",
|
|
181
227
|
"test:consumer": "ts-node scripts/consumer-contract.ts",
|
|
228
|
+
"test:docs-examples": "ts-node scripts/doc-examples.ts",
|
|
182
229
|
"generate:types": "ts-node scripts/generate-esi-types.ts",
|
|
183
230
|
"generate:okf": "ts-node scripts/generate-okf.ts",
|
|
184
231
|
"generate:endpoints": "ts-node scripts/generate-endpoint-scaffold.ts",
|
|
@@ -188,10 +235,16 @@
|
|
|
188
235
|
"validate:auth-scopes": "ts-node scripts/validate-auth-scopes.ts",
|
|
189
236
|
"validate:spec": "redocly lint",
|
|
190
237
|
"validate": "npm run lint && npm run format:check && npm run build && npm run coverage && knip --no-exit-code",
|
|
238
|
+
"release:canary": "ts-node scripts/release-canary.ts",
|
|
239
|
+
"release:sbom": "ts-node scripts/release-sbom.ts",
|
|
191
240
|
"validate:versions": "ts-node scripts/validate-versions.ts",
|
|
192
241
|
"spec:audit": "ts-node scripts/spec-audit.ts",
|
|
193
242
|
"spec:audit:verbose": "ts-node scripts/spec-audit.ts --verbose",
|
|
243
|
+
"bdd:report": "ts-node scripts/bdd-report.ts",
|
|
194
244
|
"validate:spec-consistency": "ts-node scripts/rule-schema-check.ts",
|
|
245
|
+
"check:local": "ts-node scripts/verify-local.ts",
|
|
246
|
+
"check:local:fast": "ts-node scripts/verify-local.ts --fast",
|
|
247
|
+
"check:local:all": "ts-node scripts/verify-local.ts --all",
|
|
195
248
|
"check:all": "npm run lint && npm run format:check && npm run build && npm run coverage && knip --no-exit-code && npm run validate:esi && npm run validate:spec && npm run validate:versions && npm run spec:audit && npm run validate:spec-consistency",
|
|
196
249
|
"docs": "typedoc --options typedoc.json",
|
|
197
250
|
"docs:watch": "typedoc --options typedoc.json --watch",
|
|
@@ -203,7 +256,14 @@
|
|
|
203
256
|
"mutation": "stryker run",
|
|
204
257
|
"mutation:report": "stryker run --reporters html,clear-text",
|
|
205
258
|
"mutation:bdd": "stryker run stryker.bdd.config.mjs",
|
|
259
|
+
"mutation:bdd:merge": "ts-node scripts/mutation-merge.ts",
|
|
260
|
+
"mutation:unit:merge": "ts-node scripts/mutation-merge.ts --shards mutation-unit-shards.json --shard-dir reports/mutation/shards --out reports/mutation/mutation.json",
|
|
206
261
|
"mutation:bdd:ratchet": "ts-node scripts/mutation-ratchet.ts",
|
|
262
|
+
"mutation:ratchet": "ts-node scripts/mutation-ratchet.ts --suite unit",
|
|
263
|
+
"mutation:pr": "ts-node scripts/mutation-pr.ts",
|
|
264
|
+
"mutation:pr:shard": "ts-node scripts/mutation-pr.ts --baseline-shard",
|
|
265
|
+
"mutation:pr:gate": "ts-node scripts/mutation-pr-gate.ts",
|
|
266
|
+
"mutation:fixture": "ts-node scripts/mutation-fixture.ts",
|
|
207
267
|
"api-report": "api-extractor run --local --verbose",
|
|
208
268
|
"api-report:check": "api-extractor run --verbose",
|
|
209
269
|
"api-report:semver": "ts-node scripts/api-semver-gate.ts",
|
|
@@ -245,12 +305,15 @@
|
|
|
245
305
|
"url": "https://github.com/lgriffin/ESI.ts"
|
|
246
306
|
},
|
|
247
307
|
"devDependencies": {
|
|
308
|
+
"@arethetypeswrong/cli": "^0.18.5",
|
|
248
309
|
"@commitlint/cli": "^21.0.2",
|
|
249
310
|
"@commitlint/config-conventional": "^21.1.0",
|
|
250
311
|
"@cucumber/gherkin": "^42.0.1",
|
|
251
312
|
"@cucumber/messages": "^34.2.1",
|
|
252
313
|
"@microsoft/api-extractor": "^7.58.9",
|
|
253
314
|
"@redocly/cli": "^2.48.0",
|
|
315
|
+
"@size-limit/esbuild": "^12.1.0",
|
|
316
|
+
"@size-limit/file": "^12.1.0",
|
|
254
317
|
"@stoplight/prism-cli": "^5.14.2",
|
|
255
318
|
"@stryker-mutator/core": "^10.0.0",
|
|
256
319
|
"@stryker-mutator/jest-runner": "^10.0.0",
|
|
@@ -261,8 +324,10 @@
|
|
|
261
324
|
"@types/node": "^26.3.0",
|
|
262
325
|
"adm-zip": "^0.6.0",
|
|
263
326
|
"better-sqlite3": "^11.0.0",
|
|
327
|
+
"esbuild": "^0.28.2",
|
|
264
328
|
"eslint": "^10.9.1",
|
|
265
329
|
"eslint-config-prettier": "^10.1.8",
|
|
330
|
+
"eslint-plugin-jest": "^29.16.6",
|
|
266
331
|
"eslint-plugin-security": "^4.0.0",
|
|
267
332
|
"eslint-plugin-sonarjs": "^4.0.3",
|
|
268
333
|
"fast-check": "^4.8.0",
|
|
@@ -274,7 +339,10 @@
|
|
|
274
339
|
"js-yaml": "^5.4.0",
|
|
275
340
|
"knip": "^6.6.1",
|
|
276
341
|
"lint-staged": "^17.0.8",
|
|
342
|
+
"mitata": "^1.0.34",
|
|
277
343
|
"prettier": "^3.3.2",
|
|
344
|
+
"publint": "^0.3.24",
|
|
345
|
+
"size-limit": "^12.1.0",
|
|
278
346
|
"ts-jest": "^29.4.11",
|
|
279
347
|
"ts-node": "^10.9.2",
|
|
280
348
|
"tsd": "^0.33.0",
|
|
@@ -309,7 +377,7 @@
|
|
|
309
377
|
"fast-xml-parser": ">=5.7.0",
|
|
310
378
|
"qs": ">=6.16.0",
|
|
311
379
|
"brace-expansion": ">=5.0.8",
|
|
312
|
-
"esbuild": "
|
|
380
|
+
"esbuild": "$esbuild",
|
|
313
381
|
"uuid": "~11.1.1",
|
|
314
382
|
"@faker-js/faker": ">=10.5.0",
|
|
315
383
|
"fast-uri": "^3.1.6",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/logger/DefaultLogger.ts","../src/core/logger/loggerUtil.ts","../src/core/logger/resolveLogger.ts","../src/core/logger/clientLog.ts","../src/core/circuitBreaker/CircuitBreaker.ts","../src/core/util/error.ts"],"sourcesContent":["import pino from 'pino';\nimport type { ILogger, LogContext } from './ILogger';\n\n/**\n * The default `ILogger` implementation — a thin wrapper around pino.\n *\n * Level resolution (highest precedence first):\n * 1. `level` passed to `createDefaultLogger` (e.g. from\n * `EsiClientConfig.logLevel`).\n * 2. The `ESI_LOG_LEVEL` environment variable.\n * 3. `'warn'` (library default — quiet unless the app opts in).\n *\n * The logger writes to `process.stdout` and can be swapped entirely via\n * `EsiClientConfig.logger` or the global `setLogger()` fallback.\n */\nexport type LogLevel = 'fatal' | 'error' | 'warn' | 'info' | 'debug' | 'trace';\n\nexport function createDefaultLogger(level?: string): ILogger {\n const resolved = level || process.env.ESI_LOG_LEVEL || 'warn';\n const pinoLogger = pino({ level: resolved });\n return toPinoLogger(pinoLogger);\n}\n\n/**\n * Adapt any pino-compatible logger (pino, pino-http child, custom sink) to the\n * `ILogger` contract. Context objects are spread onto the log event so they\n * appear as structured fields rather than being stringified into the message.\n */\nexport function toPinoLogger(p: {\n fatal: (...a: unknown[]) => void;\n error: (...a: unknown[]) => void;\n warn: (...a: unknown[]) => void;\n info: (...a: unknown[]) => void;\n debug: (...a: unknown[]) => void;\n trace: (...a: unknown[]) => void;\n}): ILogger {\n // Call through the sink object so pino methods keep their `this` binding.\n const emit =\n (level: LogLevel) =>\n (message: string, context?: LogContext): void =>\n context ? p[level](context, message) : p[level](message);\n return {\n fatal: emit('fatal'),\n error: emit('error'),\n warn: emit('warn'),\n info: emit('info'),\n debug: emit('debug'),\n trace: emit('trace'),\n };\n}\n\n/** Backwards-compatible default instance (level from `ESI_LOG_LEVEL`). */\nexport const defaultLogger: ILogger = createDefaultLogger();\n","import type { ILogger, LogContext } from './ILogger';\nimport { defaultLogger } from './DefaultLogger';\n\nexport type { ILogger, LogContext } from './ILogger';\n\n/**\n * Global logger fallback.\n *\n * The request pipeline reads the *per-client* logger first and only falls\n * back to this global when a client has none (e.g. the raw factory\n * `EsiApiFactory` clients, or unit tests that call pipeline modules\n * directly). Production apps can rely on the per-client logger from\n * `EsiClientConfig.logger`; this global exists for backwards compatibility\n * and for apps that want one shared logger across all clients.\n */\nlet activeLogger: ILogger = defaultLogger;\n\nexport const setLogger = (customLogger: ILogger): void => {\n activeLogger = customLogger;\n};\n\nexport const getLogger = (): ILogger => activeLogger;\n\nconst ctx = (context?: LogContext): LogContext | undefined =>\n context && Object.keys(context).length > 0 ? context : undefined;\n\nexport const logFatal = (message: string, context?: LogContext): void => {\n activeLogger.fatal(message, ctx(context));\n};\n\nexport const logError = (message: string, context?: LogContext): void => {\n activeLogger.error(message, ctx(context));\n};\n\nexport const logWarn = (message: string, context?: LogContext): void => {\n activeLogger.warn(message, ctx(context));\n};\n\nexport const logInfo = (message: string, context?: LogContext): void => {\n activeLogger.info(message, ctx(context));\n};\n\nexport const logDebug = (message: string, context?: LogContext): void => {\n activeLogger.debug(message, ctx(context));\n};\n\nexport const logTrace = (message: string, context?: LogContext): void => {\n activeLogger.trace(message, ctx(context));\n};\n","import type { ILogger } from './ILogger';\nimport { defaultLogger } from './DefaultLogger';\nimport { getLogger } from './loggerUtil';\n\n/**\n * Resolve the logger for a given API client: per-client logger first,\n * global (via `setLogger`) if a non-default one was installed, then the\n * built-in pino default.\n */\nexport function resolveLogger(\n client: { getLogger?: () => ILogger | null } | null | undefined,\n): ILogger {\n const perClient = client?.getLogger?.();\n if (perClient) return perClient;\n const global = getLogger();\n if (global !== defaultLogger) return global;\n return defaultLogger;\n}\n","import type { ApiClient } from '../ApiClient';\nimport type { LogContext } from './ILogger';\nimport { resolveLogger } from './resolveLogger';\n\ntype Level = 'fatal' | 'error' | 'warn' | 'info' | 'debug' | 'trace';\n\ntype Emit = (\n client: ApiClient | null | undefined,\n message: string,\n context?: LogContext,\n) => void;\n\nconst emit =\n (level: Level): Emit =>\n (client, message, context) => {\n resolveLogger(client)[level](\n message,\n context && Object.keys(context).length > 0 ? context : undefined,\n );\n };\n\nexport const logFatal: Emit = emit('fatal');\nexport const logError: Emit = emit('error');\nexport const logWarn: Emit = emit('warn');\nexport const logInfo: Emit = emit('info');\nexport const logDebug: Emit = emit('debug');\nexport const logTrace: Emit = emit('trace');\n","import { ApiClient } from '../ApiClient';\nimport { logWarn, logInfo } from '../logger/clientLog';\nimport { ICircuitBreaker } from './ICircuitBreaker';\n\nexport type CircuitState = 'closed' | 'open' | 'half-open';\n\nexport interface CircuitBreakerConfig {\n failureThreshold?: number;\n resetTimeoutMs?: number;\n halfOpenMaxAttempts?: number;\n staleThresholdMs?: number;\n /** 'resolved' (default, current behavior) | 'template' (group by endpoint template path) */\n keyStrategy?: 'resolved' | 'template';\n /** Interval in ms for automatic cleanup of stale circuits. 0 or undefined disables. Recommended value: staleThresholdMs. */\n cleanupIntervalMs?: number;\n}\n\ninterface CircuitRecord {\n state: CircuitState;\n failures: number;\n lastFailureTime: number;\n halfOpenAttempts: number;\n}\n\nexport class CircuitBreaker implements ICircuitBreaker {\n private circuits: Map<string, CircuitRecord> = new Map();\n private readonly failureThreshold: number;\n private readonly resetTimeoutMs: number;\n private readonly halfOpenMaxAttempts: number;\n private readonly staleThresholdMs: number;\n private readonly keyStrategy: 'resolved' | 'template';\n private cleanupTimer: ReturnType<typeof setInterval> | null = null;\n private client: ApiClient | null = null;\n\n setClient(client: ApiClient | null): void {\n this.client = client;\n }\n\n constructor(config: CircuitBreakerConfig = {}) {\n this.failureThreshold = config.failureThreshold ?? 5;\n this.resetTimeoutMs = config.resetTimeoutMs ?? 30_000;\n this.halfOpenMaxAttempts = config.halfOpenMaxAttempts ?? 1;\n this.staleThresholdMs = config.staleThresholdMs ?? 3_600_000;\n this.keyStrategy = config.keyStrategy ?? 'resolved';\n\n const cleanupIntervalMs = config.cleanupIntervalMs;\n if (cleanupIntervalMs !== undefined && cleanupIntervalMs > 0) {\n this.startCleanupTimer(cleanupIntervalMs);\n }\n }\n\n private getKey(endpoint: string): string {\n return endpoint.split('?')[0]!;\n }\n\n private getOrCreate(key: string): CircuitRecord {\n let record = this.circuits.get(key);\n if (!record) {\n record = {\n state: 'closed',\n failures: 0,\n lastFailureTime: 0,\n halfOpenAttempts: 0,\n };\n this.circuits.set(key, record);\n }\n return record;\n }\n\n checkCircuit(endpoint: string): void {\n const key = this.getKey(endpoint);\n const record = this.getOrCreate(key);\n\n if (record.state === 'closed') return;\n\n if (record.state === 'open') {\n const elapsed = Date.now() - record.lastFailureTime;\n if (elapsed >= this.resetTimeoutMs) {\n record.state = 'half-open';\n record.halfOpenAttempts = 0;\n logInfo(\n this.client,\n `Circuit half-open for ${key}, allowing probe request`,\n { key },\n );\n return;\n }\n const remainingMs = this.resetTimeoutMs - elapsed;\n throw new CircuitOpenError(key, record.failures, remainingMs);\n }\n\n if (record.state === 'half-open') {\n if (record.halfOpenAttempts >= this.halfOpenMaxAttempts) {\n throw new CircuitOpenError(key, record.failures, this.resetTimeoutMs);\n }\n record.halfOpenAttempts++;\n }\n }\n\n recordSuccess(endpoint: string): void {\n const key = this.getKey(endpoint);\n const record = this.circuits.get(key);\n if (!record) return;\n\n if (record.state === 'half-open') {\n logInfo(this.client, `Circuit closed for ${key} after successful probe`, {\n key,\n });\n }\n\n record.state = 'closed';\n record.failures = 0;\n record.halfOpenAttempts = 0;\n }\n\n recordFailure(endpoint: string, statusCode: number): void {\n // statusCode 0 = network/timeout; 420/429 = rate limited; >=500 = server errors\n if (\n statusCode !== 0 &&\n statusCode < 500 &&\n statusCode !== 420 &&\n statusCode !== 429\n ) {\n return;\n }\n\n const key = this.getKey(endpoint);\n const record = this.getOrCreate(key);\n\n record.failures++;\n record.lastFailureTime = Date.now();\n\n if (record.state === 'half-open') {\n record.state = 'open';\n logWarn(\n this.client,\n `Circuit re-opened for ${key} after failed probe (${record.failures} failures)`,\n { key, failures: record.failures },\n );\n return;\n }\n\n if (record.failures >= this.failureThreshold) {\n record.state = 'open';\n logWarn(\n this.client,\n `Circuit opened for ${key} after ${record.failures} consecutive failures`,\n { key, failures: record.failures },\n );\n }\n }\n\n getState(endpoint: string): CircuitState {\n const key = this.getKey(endpoint);\n const record = this.circuits.get(key);\n if (!record) return 'closed';\n\n if (record.state === 'open') {\n const elapsed = Date.now() - record.lastFailureTime;\n if (elapsed >= this.resetTimeoutMs) {\n return 'half-open';\n }\n }\n\n return record.state;\n }\n\n getStats(): {\n totalCircuits: number;\n openCircuits: number;\n circuits: Record<string, { state: CircuitState; failures: number }>;\n } {\n const circuits: Record<string, { state: CircuitState; failures: number }> =\n {};\n let openCircuits = 0;\n\n for (const [key, record] of this.circuits.entries()) {\n const state = this.getState(key);\n // eslint-disable-next-line security/detect-object-injection\n circuits[key] = { state, failures: record.failures };\n if (state === 'open') openCircuits++;\n }\n\n return {\n totalCircuits: this.circuits.size,\n openCircuits,\n circuits,\n };\n }\n\n reset(endpoint?: string): void {\n if (endpoint) {\n this.circuits.delete(this.getKey(endpoint));\n } else {\n this.circuits.clear();\n }\n }\n\n cleanup(): number {\n const now = Date.now();\n let cleaned = 0;\n for (const [key, record] of this.circuits.entries()) {\n if (\n record.state === 'closed' &&\n record.failures === 0 &&\n record.lastFailureTime > 0 &&\n now - record.lastFailureTime > this.staleThresholdMs\n ) {\n this.circuits.delete(key);\n cleaned++;\n }\n }\n if (cleaned > 0) {\n logInfo(\n this.client,\n `Circuit breaker cleanup: removed ${cleaned} stale circuits`,\n {\n cleaned,\n },\n );\n }\n return cleaned;\n }\n\n getKeyStrategy(): 'resolved' | 'template' {\n return this.keyStrategy;\n }\n\n destroy(): void {\n if (this.cleanupTimer) {\n clearInterval(this.cleanupTimer);\n this.cleanupTimer = null;\n }\n this.circuits.clear();\n }\n\n shutdown(): void {\n this.destroy();\n }\n\n private startCleanupTimer(intervalMs: number): void {\n this.cleanupTimer = setInterval(() => {\n this.cleanup();\n }, intervalMs);\n // Don't prevent process exit (important for test runners and CLI tools)\n this.cleanupTimer.unref();\n }\n}\n\nexport class CircuitOpenError extends Error {\n readonly endpoint: string;\n readonly failures: number;\n readonly retryAfterMs: number;\n\n constructor(endpoint: string, failures: number, retryAfterMs: number) {\n super(\n `Circuit breaker open for ${endpoint} after ${failures} failures (retry after ${Math.ceil(retryAfterMs / 1000)}s)`,\n );\n this.name = 'CircuitOpenError';\n this.endpoint = endpoint;\n this.failures = failures;\n this.retryAfterMs = retryAfterMs;\n }\n}\n","const SENSITIVE_PARAMS = [\n 'token',\n 'access_token',\n 'api_key',\n 'refresh_token',\n 'client_secret',\n 'code',\n 'key',\n 'secret',\n 'auth',\n 'password',\n 'bearer',\n];\n\nexport function sanitizeUrl(url?: string): string | undefined {\n if (!url) return url;\n try {\n const parsed = new URL(url);\n for (const param of SENSITIVE_PARAMS) {\n if (parsed.searchParams.has(param)) {\n parsed.searchParams.set(param, '[REDACTED]');\n }\n }\n return parsed.toString();\n } catch {\n const qIndex = url.indexOf('?');\n return qIndex >= 0 ? url.substring(0, qIndex) + '?[params-redacted]' : url;\n }\n}\n\nexport class EsiError extends Error {\n public readonly url?: string;\n\n constructor(\n public readonly statusCode: number,\n message: string,\n url?: string,\n public readonly requestId?: string,\n ) {\n super(message);\n this.name = 'EsiError';\n this.url = sanitizeUrl(url);\n }\n\n isRateLimited(): boolean {\n return this.statusCode === 420 || this.statusCode === 429;\n }\n\n isNotFound(): boolean {\n return this.statusCode === 404;\n }\n\n isUnauthorized(): boolean {\n return this.statusCode === 401;\n }\n\n isForbidden(): boolean {\n return this.statusCode === 403;\n }\n\n isServerError(): boolean {\n return this.statusCode >= 500;\n }\n\n isTimeout(): boolean {\n return this.statusCode === 0;\n }\n\n get retryable(): boolean {\n return (\n this.statusCode === 0 ||\n this.statusCode === 420 ||\n this.statusCode === 429 ||\n this.statusCode === 502 ||\n this.statusCode === 503 ||\n this.statusCode === 504\n );\n }\n}\n\nexport function isEsiError(error: unknown): error is EsiError {\n return error instanceof EsiError;\n}\n\nexport function isRateLimited(error: unknown): error is EsiError {\n return error instanceof EsiError && error.isRateLimited();\n}\n\nexport function isNotFound(error: unknown): error is EsiError {\n return error instanceof EsiError && error.isNotFound();\n}\n\nexport function isUnauthorized(error: unknown): error is EsiError {\n return error instanceof EsiError && error.isUnauthorized();\n}\n\nexport function isForbidden(error: unknown): error is EsiError {\n return error instanceof EsiError && error.isForbidden();\n}\n\nexport function isServerError(error: unknown): error is EsiError {\n return error instanceof EsiError && error.isServerError();\n}\n\nexport class TimeoutError extends EsiError {\n constructor(\n public readonly timeoutMs: number,\n url?: string,\n requestId?: string,\n ) {\n super(0, `Request timed out after ${timeoutMs}ms`, url, requestId);\n this.name = 'TimeoutError';\n }\n}\n\nexport function isTimeout(error: unknown): error is TimeoutError {\n return error instanceof TimeoutError;\n}\n\nexport function isRetryable(error: unknown): error is EsiError {\n return error instanceof EsiError && error.retryable;\n}\n\n// Re-export CircuitOpenError for the type guard — avoid forcing consumers\n// to import from the circuitBreaker subpath just for error checking.\nimport { CircuitOpenError } from '../circuitBreaker/CircuitBreaker';\n\nexport function isCircuitOpen(error: unknown): error is CircuitOpenError {\n return error instanceof CircuitOpenError;\n}\n\nexport const buildError = (\n message: string,\n type: string = 'ERROR',\n url?: string,\n): Error => {\n const error = new Error(`[${type}] ${message}`);\n if (url) {\n (error as Error & { url: string }).url = url;\n }\n return error;\n};\n\nexport type ValidationDirection = 'request' | 'response';\n\nexport class EsiValidationError extends EsiError {\n public readonly validationError: unknown;\n public readonly direction: ValidationDirection;\n\n constructor(\n url: string,\n zodError: unknown,\n requestId?: string,\n direction: ValidationDirection = 'response',\n ) {\n const safeUrl = sanitizeUrl(url) ?? url;\n const label = direction === 'request' ? 'Request body' : 'Response';\n super(0, `${label} validation failed for ${safeUrl}`, url, requestId);\n this.name = 'EsiValidationError';\n this.validationError = zodError;\n this.direction = direction;\n }\n}\n\nexport function isValidationError(error: unknown): error is EsiValidationError {\n return error instanceof EsiValidationError;\n}\n"],"mappings":"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","names":["emit","logFatal","logError","logWarn","logInfo","logDebug","logTrace","logInfo","logWarn"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/ESI.ts/ESI.ts/dist/chunk-HPSACXX3.js","../src/core/logger/DefaultLogger.ts","../src/core/logger/loggerUtil.ts","../src/core/logger/resolveLogger.ts","../src/core/logger/clientLog.ts","../src/core/circuitBreaker/CircuitBreaker.ts","../src/core/util/error.ts"],"names":["emit","logFatal","logError","logWarn","logInfo","logDebug","logTrace"],"mappings":"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","file":"/home/runner/work/ESI.ts/ESI.ts/dist/chunk-HPSACXX3.js","sourcesContent":[null,"import pino from 'pino';\nimport type { ILogger, LogContext } from './ILogger';\n\n/**\n * The default `ILogger` implementation — a thin wrapper around pino.\n *\n * Level resolution (highest precedence first):\n * 1. `level` passed to `createDefaultLogger` (e.g. from\n * `EsiClientConfig.logLevel`).\n * 2. The `ESI_LOG_LEVEL` environment variable.\n * 3. `'warn'` (library default — quiet unless the app opts in).\n *\n * The logger writes to `process.stdout` and can be swapped entirely via\n * `EsiClientConfig.logger` or the global `setLogger()` fallback.\n */\nexport type LogLevel = 'fatal' | 'error' | 'warn' | 'info' | 'debug' | 'trace';\n\nexport function createDefaultLogger(level?: string): ILogger {\n const resolved = level || process.env.ESI_LOG_LEVEL || 'warn';\n const pinoLogger = pino({ level: resolved });\n return toPinoLogger(pinoLogger);\n}\n\n/**\n * Adapt any pino-compatible logger (pino, pino-http child, custom sink) to the\n * `ILogger` contract. Context objects are spread onto the log event so they\n * appear as structured fields rather than being stringified into the message.\n */\nexport function toPinoLogger(p: {\n fatal: (...a: unknown[]) => void;\n error: (...a: unknown[]) => void;\n warn: (...a: unknown[]) => void;\n info: (...a: unknown[]) => void;\n debug: (...a: unknown[]) => void;\n trace: (...a: unknown[]) => void;\n}): ILogger {\n // Call through the sink object so pino methods keep their `this` binding.\n const emit =\n (level: LogLevel) =>\n (message: string, context?: LogContext): void =>\n context ? p[level](context, message) : p[level](message);\n return {\n fatal: emit('fatal'),\n error: emit('error'),\n warn: emit('warn'),\n info: emit('info'),\n debug: emit('debug'),\n trace: emit('trace'),\n };\n}\n\n/** Backwards-compatible default instance (level from `ESI_LOG_LEVEL`). */\nexport const defaultLogger: ILogger = createDefaultLogger();\n","import type { ILogger, LogContext } from './ILogger';\nimport { defaultLogger } from './DefaultLogger';\n\nexport type { ILogger, LogContext } from './ILogger';\n\n/**\n * Global logger fallback.\n *\n * The request pipeline reads the *per-client* logger first and only falls\n * back to this global when a client has none (e.g. the raw factory\n * `EsiApiFactory` clients, or unit tests that call pipeline modules\n * directly). Production apps can rely on the per-client logger from\n * `EsiClientConfig.logger`; this global exists for backwards compatibility\n * and for apps that want one shared logger across all clients.\n */\nlet activeLogger: ILogger = defaultLogger;\n\nexport const setLogger = (customLogger: ILogger): void => {\n activeLogger = customLogger;\n};\n\nexport const getLogger = (): ILogger => activeLogger;\n\nconst ctx = (context?: LogContext): LogContext | undefined =>\n context && Object.keys(context).length > 0 ? context : undefined;\n\nexport const logFatal = (message: string, context?: LogContext): void => {\n activeLogger.fatal(message, ctx(context));\n};\n\nexport const logError = (message: string, context?: LogContext): void => {\n activeLogger.error(message, ctx(context));\n};\n\nexport const logWarn = (message: string, context?: LogContext): void => {\n activeLogger.warn(message, ctx(context));\n};\n\nexport const logInfo = (message: string, context?: LogContext): void => {\n activeLogger.info(message, ctx(context));\n};\n\nexport const logDebug = (message: string, context?: LogContext): void => {\n activeLogger.debug(message, ctx(context));\n};\n\nexport const logTrace = (message: string, context?: LogContext): void => {\n activeLogger.trace(message, ctx(context));\n};\n","import type { ILogger } from './ILogger';\nimport { defaultLogger } from './DefaultLogger';\nimport { getLogger } from './loggerUtil';\n\n/**\n * Resolve the logger for a given API client: per-client logger first,\n * global (via `setLogger`) if a non-default one was installed, then the\n * built-in pino default.\n */\nexport function resolveLogger(\n client: { getLogger?: () => ILogger | null } | null | undefined,\n): ILogger {\n const perClient = client?.getLogger?.();\n if (perClient) return perClient;\n const global = getLogger();\n if (global !== defaultLogger) return global;\n return defaultLogger;\n}\n","import type { ApiClient } from '../ApiClient';\nimport type { LogContext } from './ILogger';\nimport { resolveLogger } from './resolveLogger';\n\ntype Level = 'fatal' | 'error' | 'warn' | 'info' | 'debug' | 'trace';\n\ntype Emit = (\n client: ApiClient | null | undefined,\n message: string,\n context?: LogContext,\n) => void;\n\nconst emit =\n (level: Level): Emit =>\n (client, message, context) => {\n resolveLogger(client)[level](\n message,\n context && Object.keys(context).length > 0 ? context : undefined,\n );\n };\n\nexport const logFatal: Emit = emit('fatal');\nexport const logError: Emit = emit('error');\nexport const logWarn: Emit = emit('warn');\nexport const logInfo: Emit = emit('info');\nexport const logDebug: Emit = emit('debug');\nexport const logTrace: Emit = emit('trace');\n","import { ApiClient } from '../ApiClient';\nimport { logWarn, logInfo } from '../logger/clientLog';\nimport { ICircuitBreaker } from './ICircuitBreaker';\n\nexport type CircuitState = 'closed' | 'open' | 'half-open';\n\nexport interface CircuitBreakerConfig {\n failureThreshold?: number;\n resetTimeoutMs?: number;\n halfOpenMaxAttempts?: number;\n staleThresholdMs?: number;\n /** 'resolved' (default, current behavior) | 'template' (group by endpoint template path) */\n keyStrategy?: 'resolved' | 'template';\n /** Interval in ms for automatic cleanup of stale circuits. 0 or undefined disables. Recommended value: staleThresholdMs. */\n cleanupIntervalMs?: number;\n}\n\ninterface CircuitRecord {\n state: CircuitState;\n failures: number;\n lastFailureTime: number;\n halfOpenAttempts: number;\n}\n\nexport class CircuitBreaker implements ICircuitBreaker {\n private circuits: Map<string, CircuitRecord> = new Map();\n private readonly failureThreshold: number;\n private readonly resetTimeoutMs: number;\n private readonly halfOpenMaxAttempts: number;\n private readonly staleThresholdMs: number;\n private readonly keyStrategy: 'resolved' | 'template';\n private cleanupTimer: ReturnType<typeof setInterval> | null = null;\n private client: ApiClient | null = null;\n\n setClient(client: ApiClient | null): void {\n this.client = client;\n }\n\n constructor(config: CircuitBreakerConfig = {}) {\n this.failureThreshold = config.failureThreshold ?? 5;\n this.resetTimeoutMs = config.resetTimeoutMs ?? 30_000;\n this.halfOpenMaxAttempts = config.halfOpenMaxAttempts ?? 1;\n this.staleThresholdMs = config.staleThresholdMs ?? 3_600_000;\n this.keyStrategy = config.keyStrategy ?? 'resolved';\n\n const cleanupIntervalMs = config.cleanupIntervalMs;\n if (cleanupIntervalMs !== undefined && cleanupIntervalMs > 0) {\n this.startCleanupTimer(cleanupIntervalMs);\n }\n }\n\n private getKey(endpoint: string): string {\n return endpoint.split('?')[0]!;\n }\n\n private getOrCreate(key: string): CircuitRecord {\n let record = this.circuits.get(key);\n if (!record) {\n record = {\n state: 'closed',\n failures: 0,\n lastFailureTime: 0,\n halfOpenAttempts: 0,\n };\n this.circuits.set(key, record);\n }\n return record;\n }\n\n checkCircuit(endpoint: string): void {\n const key = this.getKey(endpoint);\n const record = this.getOrCreate(key);\n\n if (record.state === 'closed') return;\n\n if (record.state === 'open') {\n const elapsed = Date.now() - record.lastFailureTime;\n if (elapsed >= this.resetTimeoutMs) {\n record.state = 'half-open';\n record.halfOpenAttempts = 0;\n logInfo(\n this.client,\n `Circuit half-open for ${key}, allowing probe request`,\n { key },\n );\n return;\n }\n const remainingMs = this.resetTimeoutMs - elapsed;\n throw new CircuitOpenError(key, record.failures, remainingMs);\n }\n\n if (record.state === 'half-open') {\n if (record.halfOpenAttempts >= this.halfOpenMaxAttempts) {\n throw new CircuitOpenError(key, record.failures, this.resetTimeoutMs);\n }\n record.halfOpenAttempts++;\n }\n }\n\n recordSuccess(endpoint: string): void {\n const key = this.getKey(endpoint);\n const record = this.circuits.get(key);\n if (!record) return;\n\n if (record.state === 'half-open') {\n logInfo(this.client, `Circuit closed for ${key} after successful probe`, {\n key,\n });\n }\n\n record.state = 'closed';\n record.failures = 0;\n record.halfOpenAttempts = 0;\n }\n\n recordFailure(endpoint: string, statusCode: number): void {\n // statusCode 0 = network/timeout; 420/429 = rate limited; >=500 = server errors\n if (\n statusCode !== 0 &&\n statusCode < 500 &&\n statusCode !== 420 &&\n statusCode !== 429\n ) {\n return;\n }\n\n const key = this.getKey(endpoint);\n const record = this.getOrCreate(key);\n\n record.failures++;\n record.lastFailureTime = Date.now();\n\n if (record.state === 'half-open') {\n record.state = 'open';\n logWarn(\n this.client,\n `Circuit re-opened for ${key} after failed probe (${record.failures} failures)`,\n { key, failures: record.failures },\n );\n return;\n }\n\n if (record.failures >= this.failureThreshold) {\n record.state = 'open';\n logWarn(\n this.client,\n `Circuit opened for ${key} after ${record.failures} consecutive failures`,\n { key, failures: record.failures },\n );\n }\n }\n\n getState(endpoint: string): CircuitState {\n const key = this.getKey(endpoint);\n const record = this.circuits.get(key);\n if (!record) return 'closed';\n\n if (record.state === 'open') {\n const elapsed = Date.now() - record.lastFailureTime;\n if (elapsed >= this.resetTimeoutMs) {\n return 'half-open';\n }\n }\n\n return record.state;\n }\n\n getStats(): {\n totalCircuits: number;\n openCircuits: number;\n circuits: Record<string, { state: CircuitState; failures: number }>;\n } {\n const circuits: Record<string, { state: CircuitState; failures: number }> =\n {};\n let openCircuits = 0;\n\n for (const [key, record] of this.circuits.entries()) {\n const state = this.getState(key);\n // eslint-disable-next-line security/detect-object-injection\n circuits[key] = { state, failures: record.failures };\n if (state === 'open') openCircuits++;\n }\n\n return {\n totalCircuits: this.circuits.size,\n openCircuits,\n circuits,\n };\n }\n\n reset(endpoint?: string): void {\n if (endpoint) {\n this.circuits.delete(this.getKey(endpoint));\n } else {\n this.circuits.clear();\n }\n }\n\n cleanup(): number {\n const now = Date.now();\n let cleaned = 0;\n for (const [key, record] of this.circuits.entries()) {\n if (\n record.state === 'closed' &&\n record.failures === 0 &&\n record.lastFailureTime > 0 &&\n now - record.lastFailureTime > this.staleThresholdMs\n ) {\n this.circuits.delete(key);\n cleaned++;\n }\n }\n if (cleaned > 0) {\n logInfo(\n this.client,\n `Circuit breaker cleanup: removed ${cleaned} stale circuits`,\n {\n cleaned,\n },\n );\n }\n return cleaned;\n }\n\n getKeyStrategy(): 'resolved' | 'template' {\n return this.keyStrategy;\n }\n\n destroy(): void {\n if (this.cleanupTimer) {\n clearInterval(this.cleanupTimer);\n this.cleanupTimer = null;\n }\n this.circuits.clear();\n }\n\n shutdown(): void {\n this.destroy();\n }\n\n private startCleanupTimer(intervalMs: number): void {\n this.cleanupTimer = setInterval(() => {\n this.cleanup();\n }, intervalMs);\n // Don't prevent process exit (important for test runners and CLI tools)\n this.cleanupTimer.unref();\n }\n}\n\nexport class CircuitOpenError extends Error {\n readonly endpoint: string;\n readonly failures: number;\n readonly retryAfterMs: number;\n\n constructor(endpoint: string, failures: number, retryAfterMs: number) {\n super(\n `Circuit breaker open for ${endpoint} after ${failures} failures (retry after ${Math.ceil(retryAfterMs / 1000)}s)`,\n );\n this.name = 'CircuitOpenError';\n this.endpoint = endpoint;\n this.failures = failures;\n this.retryAfterMs = retryAfterMs;\n }\n}\n","const SENSITIVE_PARAMS = [\n 'token',\n 'access_token',\n 'api_key',\n 'refresh_token',\n 'client_secret',\n 'code',\n 'key',\n 'secret',\n 'auth',\n 'password',\n 'bearer',\n];\n\nexport function sanitizeUrl(url?: string): string | undefined {\n if (!url) return url;\n try {\n const parsed = new URL(url);\n for (const param of SENSITIVE_PARAMS) {\n if (parsed.searchParams.has(param)) {\n parsed.searchParams.set(param, '[REDACTED]');\n }\n }\n return parsed.toString();\n } catch {\n const qIndex = url.indexOf('?');\n return qIndex >= 0 ? url.substring(0, qIndex) + '?[params-redacted]' : url;\n }\n}\n\nexport class EsiError extends Error {\n public readonly url?: string;\n\n constructor(\n public readonly statusCode: number,\n message: string,\n url?: string,\n public readonly requestId?: string,\n ) {\n super(message);\n this.name = 'EsiError';\n this.url = sanitizeUrl(url);\n }\n\n isRateLimited(): boolean {\n return this.statusCode === 420 || this.statusCode === 429;\n }\n\n isNotFound(): boolean {\n return this.statusCode === 404;\n }\n\n isUnauthorized(): boolean {\n return this.statusCode === 401;\n }\n\n isForbidden(): boolean {\n return this.statusCode === 403;\n }\n\n isServerError(): boolean {\n return this.statusCode >= 500;\n }\n\n isTimeout(): boolean {\n return this.statusCode === 0;\n }\n\n get retryable(): boolean {\n return (\n this.statusCode === 0 ||\n this.statusCode === 420 ||\n this.statusCode === 429 ||\n this.statusCode === 502 ||\n this.statusCode === 503 ||\n this.statusCode === 504\n );\n }\n}\n\nexport function isEsiError(error: unknown): error is EsiError {\n return error instanceof EsiError;\n}\n\nexport function isRateLimited(error: unknown): error is EsiError {\n return error instanceof EsiError && error.isRateLimited();\n}\n\nexport function isNotFound(error: unknown): error is EsiError {\n return error instanceof EsiError && error.isNotFound();\n}\n\nexport function isUnauthorized(error: unknown): error is EsiError {\n return error instanceof EsiError && error.isUnauthorized();\n}\n\nexport function isForbidden(error: unknown): error is EsiError {\n return error instanceof EsiError && error.isForbidden();\n}\n\nexport function isServerError(error: unknown): error is EsiError {\n return error instanceof EsiError && error.isServerError();\n}\n\nexport class TimeoutError extends EsiError {\n constructor(\n public readonly timeoutMs: number,\n url?: string,\n requestId?: string,\n ) {\n super(0, `Request timed out after ${timeoutMs}ms`, url, requestId);\n this.name = 'TimeoutError';\n }\n}\n\nexport function isTimeout(error: unknown): error is TimeoutError {\n return error instanceof TimeoutError;\n}\n\nexport function isRetryable(error: unknown): error is EsiError {\n return error instanceof EsiError && error.retryable;\n}\n\n// Re-export CircuitOpenError for the type guard — avoid forcing consumers\n// to import from the circuitBreaker subpath just for error checking.\nimport { CircuitOpenError } from '../circuitBreaker/CircuitBreaker';\n\nexport function isCircuitOpen(error: unknown): error is CircuitOpenError {\n return error instanceof CircuitOpenError;\n}\n\nexport const buildError = (\n message: string,\n type: string = 'ERROR',\n url?: string,\n): Error => {\n const error = new Error(`[${type}] ${message}`);\n if (url) {\n (error as Error & { url: string }).url = url;\n }\n return error;\n};\n\nexport type ValidationDirection = 'request' | 'response';\n\nexport class EsiValidationError extends EsiError {\n public readonly validationError: unknown;\n public readonly direction: ValidationDirection;\n\n constructor(\n url: string,\n zodError: unknown,\n requestId?: string,\n direction: ValidationDirection = 'response',\n ) {\n const safeUrl = sanitizeUrl(url) ?? url;\n const label = direction === 'request' ? 'Request body' : 'Response';\n super(0, `${label} validation failed for ${safeUrl}`, url, requestId);\n this.name = 'EsiValidationError';\n this.validationError = zodError;\n this.direction = direction;\n }\n}\n\nexport function isValidationError(error: unknown): error is EsiValidationError {\n return error instanceof EsiValidationError;\n}\n"]}
|