@lgriffin/esi.ts 10.0.0 → 10.2.1
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 +158 -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-4W66ONJI.mjs} +4 -7
- package/dist/chunk-4W66ONJI.mjs.map +1 -0
- package/dist/{chunk-HPSACXX3.js → chunk-N3B65VLB.js} +4 -7
- package/dist/chunk-N3B65VLB.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/logger/resolveLogger.d.ts +3 -3
- package/dist/core/logger/resolveLogger.d.ts.map +1 -1
- package/dist/core/middleware/Middleware.d.mts +30 -0
- package/dist/core/pagination/AsyncPaginationIterator.d.mts +12 -0
- package/dist/core/pagination/AsyncPaginationIterator.d.ts.map +1 -1
- package/dist/core/pagination/CursorPaginationHandler.d.mts +68 -0
- package/dist/core/pagination/CursorPaginationHandler.d.ts.map +1 -1
- 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/concurrency.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 +374 -197
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +267 -90
- 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,35 @@
|
|
|
1
|
+
import { ApiClient } from './ApiClient.mjs';
|
|
2
|
+
import { ETagCacheConfig } from './cache/ETagCacheManager.mjs';
|
|
3
|
+
import { RequestDeduplicator } from './RequestDeduplicator.mjs';
|
|
4
|
+
export interface CacheStats {
|
|
5
|
+
totalEntries: number;
|
|
6
|
+
maxEntries: number;
|
|
7
|
+
hits: number;
|
|
8
|
+
misses: number;
|
|
9
|
+
hitRate: number;
|
|
10
|
+
oldestEntry: number | null;
|
|
11
|
+
newestEntry: number | null;
|
|
12
|
+
}
|
|
13
|
+
export interface CircuitBreakerStats {
|
|
14
|
+
totalCircuits: number;
|
|
15
|
+
openCircuits: number;
|
|
16
|
+
circuits: Record<string, {
|
|
17
|
+
state: 'closed' | 'open' | 'half-open';
|
|
18
|
+
failures: number;
|
|
19
|
+
}>;
|
|
20
|
+
}
|
|
21
|
+
export declare class EsiDiagnostics {
|
|
22
|
+
private apiClient;
|
|
23
|
+
private etagCacheEnabled;
|
|
24
|
+
private deduplicator;
|
|
25
|
+
constructor(apiClient: ApiClient, etagCacheEnabled: boolean, deduplicator: RequestDeduplicator | null);
|
|
26
|
+
getCacheStats(): CacheStats | null;
|
|
27
|
+
clearCache(): void;
|
|
28
|
+
updateCacheConfig(newConfig: Partial<ETagCacheConfig>): void;
|
|
29
|
+
getCircuitBreakerStats(): CircuitBreakerStats | null;
|
|
30
|
+
resetCircuitBreaker(endpoint?: string): void;
|
|
31
|
+
getDeduplicatorStats(): {
|
|
32
|
+
pendingRequests: number;
|
|
33
|
+
} | null;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=EsiDiagnostics.d.ts.map
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export interface IDeduplicator {
|
|
2
|
+
dedupe<T>(key: string, execute: () => Promise<T>): Promise<T>;
|
|
3
|
+
readonly pending: number;
|
|
4
|
+
clear(): void;
|
|
5
|
+
/**
|
|
6
|
+
* Stop new callers joining in-flight requests whose key contains
|
|
7
|
+
* `pathSegment`, and report how many were detached.
|
|
8
|
+
*
|
|
9
|
+
* Called after a write succeeds. A read that starts after a DELETE has
|
|
10
|
+
* completed must not be answered by a GET that was sent before it: the
|
|
11
|
+
* response is pre-write data, and the caller has every reason to expect
|
|
12
|
+
* otherwise. Detaching leaves the in-flight request running and its existing
|
|
13
|
+
* joiners untouched — they asked before the write and their answer is still
|
|
14
|
+
* the one they asked for. It only removes the entry new callers would join.
|
|
15
|
+
*
|
|
16
|
+
* Optional, so a deduplicator written against an earlier version of this
|
|
17
|
+
* interface still satisfies it. A deduplicator that does not implement it
|
|
18
|
+
* keeps the old behaviour, which is why the pipeline calls it with `?.`.
|
|
19
|
+
*/
|
|
20
|
+
detachByPath?(pathSegment: string): number;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=IDeduplicator.d.ts.map
|
|
@@ -2,5 +2,21 @@ export interface IDeduplicator {
|
|
|
2
2
|
dedupe<T>(key: string, execute: () => Promise<T>): Promise<T>;
|
|
3
3
|
readonly pending: number;
|
|
4
4
|
clear(): void;
|
|
5
|
+
/**
|
|
6
|
+
* Stop new callers joining in-flight requests whose key contains
|
|
7
|
+
* `pathSegment`, and report how many were detached.
|
|
8
|
+
*
|
|
9
|
+
* Called after a write succeeds. A read that starts after a DELETE has
|
|
10
|
+
* completed must not be answered by a GET that was sent before it: the
|
|
11
|
+
* response is pre-write data, and the caller has every reason to expect
|
|
12
|
+
* otherwise. Detaching leaves the in-flight request running and its existing
|
|
13
|
+
* joiners untouched — they asked before the write and their answer is still
|
|
14
|
+
* the one they asked for. It only removes the entry new callers would join.
|
|
15
|
+
*
|
|
16
|
+
* Optional, so a deduplicator written against an earlier version of this
|
|
17
|
+
* interface still satisfies it. A deduplicator that does not implement it
|
|
18
|
+
* keeps the old behaviour, which is why the pipeline calls it with `?.`.
|
|
19
|
+
*/
|
|
20
|
+
detachByPath?(pathSegment: string): number;
|
|
5
21
|
}
|
|
6
22
|
//# sourceMappingURL=IDeduplicator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IDeduplicator.d.ts","sourceRoot":"","sources":["../../src/core/IDeduplicator.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC9D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,KAAK,IAAI,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"IDeduplicator.d.ts","sourceRoot":"","sources":["../../src/core/IDeduplicator.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC9D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,KAAK,IAAI,IAAI,CAAC;IACd;;;;;;;;;;;;;;OAcG;IACH,YAAY,CAAC,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC;CAC5C"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { IDeduplicator } from './IDeduplicator.mjs';
|
|
2
|
+
export declare class RequestDeduplicator implements IDeduplicator {
|
|
3
|
+
private inflight;
|
|
4
|
+
private client;
|
|
5
|
+
setClient(client: import('./ApiClient.mjs').ApiClient | null): void;
|
|
6
|
+
dedupe<T>(key: string, execute: () => Promise<T>): Promise<T>;
|
|
7
|
+
/**
|
|
8
|
+
* Drop the in-flight entries whose key contains `pathSegment`, so a call
|
|
9
|
+
* made after a write cannot join a request sent before it.
|
|
10
|
+
*
|
|
11
|
+
* The requests themselves keep running and whoever already joined them still
|
|
12
|
+
* gets their answer. Only the map entry goes, which is what new callers look
|
|
13
|
+
* in. Matching is `includes`, the same rule ETagCacheManager.deleteByPath
|
|
14
|
+
* uses, so one written path invalidates the cache and detaches the reads of
|
|
15
|
+
* it by the same test.
|
|
16
|
+
*/
|
|
17
|
+
detachByPath(pathSegment: string): number;
|
|
18
|
+
get pending(): number;
|
|
19
|
+
clear(): void;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=RequestDeduplicator.d.ts.map
|
|
@@ -4,6 +4,17 @@ export declare class RequestDeduplicator implements IDeduplicator {
|
|
|
4
4
|
private client;
|
|
5
5
|
setClient(client: import('./ApiClient').ApiClient | null): void;
|
|
6
6
|
dedupe<T>(key: string, execute: () => Promise<T>): Promise<T>;
|
|
7
|
+
/**
|
|
8
|
+
* Drop the in-flight entries whose key contains `pathSegment`, so a call
|
|
9
|
+
* made after a write cannot join a request sent before it.
|
|
10
|
+
*
|
|
11
|
+
* The requests themselves keep running and whoever already joined them still
|
|
12
|
+
* gets their answer. Only the map entry goes, which is what new callers look
|
|
13
|
+
* in. Matching is `includes`, the same rule ETagCacheManager.deleteByPath
|
|
14
|
+
* uses, so one written path invalidates the cache and detaches the reads of
|
|
15
|
+
* it by the same test.
|
|
16
|
+
*/
|
|
17
|
+
detachByPath(pathSegment: string): number;
|
|
7
18
|
get pending(): number;
|
|
8
19
|
clear(): void;
|
|
9
20
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RequestDeduplicator.d.ts","sourceRoot":"","sources":["../../src/core/RequestDeduplicator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,qBAAa,mBAAoB,YAAW,aAAa;IACvD,OAAO,CAAC,QAAQ,CAAuC;IACvD,OAAO,CAAC,MAAM,CAAgD;IAE9D,SAAS,CAAC,MAAM,EAAE,OAAO,aAAa,EAAE,SAAS,GAAG,IAAI,GAAG,IAAI;IAIzD,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAiBnE,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,KAAK,IAAI,IAAI;CAGd"}
|
|
1
|
+
{"version":3,"file":"RequestDeduplicator.d.ts","sourceRoot":"","sources":["../../src/core/RequestDeduplicator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,qBAAa,mBAAoB,YAAW,aAAa;IACvD,OAAO,CAAC,QAAQ,CAAuC;IACvD,OAAO,CAAC,MAAM,CAAgD;IAE9D,SAAS,CAAC,MAAM,EAAE,OAAO,aAAa,EAAE,SAAS,GAAG,IAAI,GAAG,IAAI;IAIzD,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAiBnE;;;;;;;;;OASG;IACH,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAiBzC,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,KAAK,IAAI,IAAI;CAGd"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { ApiClient } from './ApiClient.mjs';
|
|
2
|
+
import { RetryConfig } from './util/retry.mjs';
|
|
3
|
+
import { IRetryStrategy } from './IRetryStrategy.mjs';
|
|
4
|
+
export interface RetryContext {
|
|
5
|
+
client?: ApiClient;
|
|
6
|
+
endpoint: string;
|
|
7
|
+
method: string;
|
|
8
|
+
requiresAuth: boolean;
|
|
9
|
+
refreshToken?: () => Promise<void>;
|
|
10
|
+
/** @deprecated Unused — after refresh the strategy re-enters the main operation loop. */
|
|
11
|
+
retryOperation?: () => Promise<unknown>;
|
|
12
|
+
}
|
|
13
|
+
export declare class RetryStrategy implements IRetryStrategy {
|
|
14
|
+
private readonly maxRetries;
|
|
15
|
+
private readonly baseDelayMs;
|
|
16
|
+
private readonly maxDelayMs;
|
|
17
|
+
private readonly retryMutations;
|
|
18
|
+
constructor(config?: RetryConfig);
|
|
19
|
+
execute<T>(operation: () => Promise<T>, context: RetryContext): Promise<T>;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=RetryStrategy.d.ts.map
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { ApiClient } from '../ApiClient.mjs';
|
|
2
|
+
import { ICache, CacheEntry } from './ICache.mjs';
|
|
3
|
+
export type { CacheEntry } from './ICache.mjs';
|
|
4
|
+
export interface ETagCacheConfig {
|
|
5
|
+
maxEntries?: number;
|
|
6
|
+
defaultTtl?: number;
|
|
7
|
+
cleanupInterval?: number;
|
|
8
|
+
}
|
|
9
|
+
export declare class ETagCacheManager implements ICache {
|
|
10
|
+
private cache;
|
|
11
|
+
private config;
|
|
12
|
+
private cleanupTimer?;
|
|
13
|
+
private hits;
|
|
14
|
+
private misses;
|
|
15
|
+
private client;
|
|
16
|
+
setClient(client: ApiClient | null): void;
|
|
17
|
+
private log;
|
|
18
|
+
constructor(config?: ETagCacheConfig);
|
|
19
|
+
/**
|
|
20
|
+
* Get cached data if ETag matches
|
|
21
|
+
*/
|
|
22
|
+
get(url: string): CacheEntry | null;
|
|
23
|
+
/**
|
|
24
|
+
* Get ETag for a URL (for If-None-Match header)
|
|
25
|
+
*/
|
|
26
|
+
getETag(url: string): string | null;
|
|
27
|
+
/**
|
|
28
|
+
* Set cache entry
|
|
29
|
+
*/
|
|
30
|
+
set(url: string, etag: string, data: unknown, headers: Record<string, string>, customTtl?: number): void;
|
|
31
|
+
/**
|
|
32
|
+
* Check if cached data exists and is valid
|
|
33
|
+
*/
|
|
34
|
+
has(url: string): boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Clear specific cache entry
|
|
37
|
+
*/
|
|
38
|
+
delete(url: string): boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Delete all cache entries whose URL contains the given path segment
|
|
41
|
+
*/
|
|
42
|
+
deleteByPath(pathSegment: string): number;
|
|
43
|
+
/**
|
|
44
|
+
* Clear all cache entries
|
|
45
|
+
*/
|
|
46
|
+
clear(): void;
|
|
47
|
+
/**
|
|
48
|
+
* Get cache statistics
|
|
49
|
+
*/
|
|
50
|
+
getStats(): {
|
|
51
|
+
totalEntries: number;
|
|
52
|
+
maxEntries: number;
|
|
53
|
+
hits: number;
|
|
54
|
+
misses: number;
|
|
55
|
+
hitRate: number;
|
|
56
|
+
oldestEntry: number | null;
|
|
57
|
+
newestEntry: number | null;
|
|
58
|
+
};
|
|
59
|
+
/**
|
|
60
|
+
* Update cache configuration
|
|
61
|
+
*/
|
|
62
|
+
updateConfig(newConfig: Partial<ETagCacheConfig>): void;
|
|
63
|
+
/**
|
|
64
|
+
* Cleanup expired entries
|
|
65
|
+
*/
|
|
66
|
+
cleanup(): number;
|
|
67
|
+
/**
|
|
68
|
+
* Shutdown cache manager
|
|
69
|
+
*/
|
|
70
|
+
shutdown(): void;
|
|
71
|
+
private isExpired;
|
|
72
|
+
private evictOldest;
|
|
73
|
+
private startCleanupTimer;
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=ETagCacheManager.d.ts.map
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export interface CacheEntry {
|
|
2
|
+
etag: string;
|
|
3
|
+
data: unknown;
|
|
4
|
+
headers: Record<string, string>;
|
|
5
|
+
timestamp: number;
|
|
6
|
+
ttl?: number;
|
|
7
|
+
}
|
|
8
|
+
export interface ICache {
|
|
9
|
+
get(url: string): CacheEntry | null;
|
|
10
|
+
getETag(url: string): string | null;
|
|
11
|
+
set(url: string, etag: string, data: unknown, headers: Record<string, string>, customTtl?: number): void;
|
|
12
|
+
has(url: string): boolean;
|
|
13
|
+
delete(url: string): boolean;
|
|
14
|
+
deleteByPath(pathSegment: string): number;
|
|
15
|
+
clear(): void;
|
|
16
|
+
getStats(): {
|
|
17
|
+
totalEntries: number;
|
|
18
|
+
maxEntries: number;
|
|
19
|
+
hits: number;
|
|
20
|
+
misses: number;
|
|
21
|
+
hitRate: number;
|
|
22
|
+
oldestEntry: number | null;
|
|
23
|
+
newestEntry: number | null;
|
|
24
|
+
};
|
|
25
|
+
shutdown(): void;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=ICache.d.ts.map
|
|
@@ -1,3 +1,14 @@
|
|
|
1
1
|
import { ApiClient } from '../ApiClient';
|
|
2
|
+
/** The ETag cache key for a request: its URL, scoped to the identity. */
|
|
2
3
|
export declare function buildCacheKey(url: string, client: ApiClient, requiresAuth?: boolean): string;
|
|
4
|
+
/**
|
|
5
|
+
* The deduplication key for an in-flight request: its endpoint, scoped to the
|
|
6
|
+
* identity.
|
|
7
|
+
*
|
|
8
|
+
* Coalescing has to draw the same line the cache does. Two concurrent GETs to
|
|
9
|
+
* one authenticated endpoint under different tokens are two different
|
|
10
|
+
* questions, and answering both from one response hands one caller the other
|
|
11
|
+
* identity's data.
|
|
12
|
+
*/
|
|
13
|
+
export declare function buildDedupeKey(endpoint: string, client: ApiClient, requiresAuth?: boolean): string;
|
|
3
14
|
//# sourceMappingURL=cacheKey.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cacheKey.d.ts","sourceRoot":"","sources":["../../../src/core/cache/cacheKey.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"cacheKey.d.ts","sourceRoot":"","sources":["../../../src/core/cache/cacheKey.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AA8BzC,yEAAyE;AACzE,wBAAgB,aAAa,CAC3B,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,SAAS,EACjB,YAAY,GAAE,OAAe,GAC5B,MAAM,CAER;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,SAAS,EACjB,YAAY,GAAE,OAAe,GAC5B,MAAM,CAER"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { ApiClient } from '../ApiClient.mjs';
|
|
2
|
+
import { ICircuitBreaker } from './ICircuitBreaker.mjs';
|
|
3
|
+
export type CircuitState = 'closed' | 'open' | 'half-open';
|
|
4
|
+
export interface CircuitBreakerConfig {
|
|
5
|
+
failureThreshold?: number;
|
|
6
|
+
resetTimeoutMs?: number;
|
|
7
|
+
halfOpenMaxAttempts?: number;
|
|
8
|
+
staleThresholdMs?: number;
|
|
9
|
+
/** 'resolved' (default, current behavior) | 'template' (group by endpoint template path) */
|
|
10
|
+
keyStrategy?: 'resolved' | 'template';
|
|
11
|
+
/** Interval in ms for automatic cleanup of stale circuits. 0 or undefined disables. Recommended value: staleThresholdMs. */
|
|
12
|
+
cleanupIntervalMs?: number;
|
|
13
|
+
}
|
|
14
|
+
export declare class CircuitBreaker implements ICircuitBreaker {
|
|
15
|
+
private circuits;
|
|
16
|
+
private readonly failureThreshold;
|
|
17
|
+
private readonly resetTimeoutMs;
|
|
18
|
+
private readonly halfOpenMaxAttempts;
|
|
19
|
+
private readonly staleThresholdMs;
|
|
20
|
+
private readonly keyStrategy;
|
|
21
|
+
private cleanupTimer;
|
|
22
|
+
private client;
|
|
23
|
+
setClient(client: ApiClient | null): void;
|
|
24
|
+
constructor(config?: CircuitBreakerConfig);
|
|
25
|
+
private getKey;
|
|
26
|
+
private getOrCreate;
|
|
27
|
+
checkCircuit(endpoint: string): void;
|
|
28
|
+
recordSuccess(endpoint: string): void;
|
|
29
|
+
recordFailure(endpoint: string, statusCode: number): void;
|
|
30
|
+
getState(endpoint: string): CircuitState;
|
|
31
|
+
getStats(): {
|
|
32
|
+
totalCircuits: number;
|
|
33
|
+
openCircuits: number;
|
|
34
|
+
circuits: Record<string, {
|
|
35
|
+
state: CircuitState;
|
|
36
|
+
failures: number;
|
|
37
|
+
}>;
|
|
38
|
+
};
|
|
39
|
+
reset(endpoint?: string): void;
|
|
40
|
+
cleanup(): number;
|
|
41
|
+
getKeyStrategy(): 'resolved' | 'template';
|
|
42
|
+
destroy(): void;
|
|
43
|
+
shutdown(): void;
|
|
44
|
+
private startCleanupTimer;
|
|
45
|
+
}
|
|
46
|
+
export declare class CircuitOpenError extends Error {
|
|
47
|
+
readonly endpoint: string;
|
|
48
|
+
readonly failures: number;
|
|
49
|
+
readonly retryAfterMs: number;
|
|
50
|
+
constructor(endpoint: string, failures: number, retryAfterMs: number);
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=CircuitBreaker.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CircuitBreaker.d.ts","sourceRoot":"","sources":["../../../src/core/circuitBreaker/CircuitBreaker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;AAE3D,MAAM,WAAW,oBAAoB;IACnC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,4FAA4F;IAC5F,WAAW,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC;IACtC,4HAA4H;IAC5H,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AASD,qBAAa,cAAe,YAAW,eAAe;IACpD,OAAO,CAAC,QAAQ,CAAyC;IACzD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAS;IAC7C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA0B;IACtD,OAAO,CAAC,YAAY,CAA+C;IACnE,OAAO,CAAC,MAAM,CAA0B;IAExC,SAAS,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,GAAG,IAAI;gBAI7B,MAAM,GAAE,oBAAyB;IAa7C,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,WAAW;IAcnB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"CircuitBreaker.d.ts","sourceRoot":"","sources":["../../../src/core/circuitBreaker/CircuitBreaker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;AAE3D,MAAM,WAAW,oBAAoB;IACnC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,4FAA4F;IAC5F,WAAW,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC;IACtC,4HAA4H;IAC5H,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AASD,qBAAa,cAAe,YAAW,eAAe;IACpD,OAAO,CAAC,QAAQ,CAAyC;IACzD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAS;IAC7C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA0B;IACtD,OAAO,CAAC,YAAY,CAA+C;IACnE,OAAO,CAAC,MAAM,CAA0B;IAExC,SAAS,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,GAAG,IAAI;gBAI7B,MAAM,GAAE,oBAAyB;IAa7C,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,WAAW;IAcnB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IA+BpC,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAoBrC,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAqCzD,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY;IAexC,QAAQ,IAAI;QACV,aAAa,EAAE,MAAM,CAAC;QACtB,YAAY,EAAE,MAAM,CAAC;QACrB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE;YAAE,KAAK,EAAE,YAAY,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACrE;IAmBD,KAAK,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IAQ9B,OAAO,IAAI,MAAM;IA0BjB,cAAc,IAAI,UAAU,GAAG,UAAU;IAIzC,OAAO,IAAI,IAAI;IAQf,QAAQ,IAAI,IAAI;IAIhB,OAAO,CAAC,iBAAiB;CAO1B;AAED,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;gBAElB,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM;CASrE"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { CircuitState } from './CircuitBreaker.mjs';
|
|
2
|
+
export interface ICircuitBreaker {
|
|
3
|
+
checkCircuit(endpoint: string): void;
|
|
4
|
+
recordSuccess(endpoint: string): void;
|
|
5
|
+
recordFailure(endpoint: string, statusCode: number): void;
|
|
6
|
+
getState(endpoint: string): CircuitState;
|
|
7
|
+
getStats(): {
|
|
8
|
+
totalCircuits: number;
|
|
9
|
+
openCircuits: number;
|
|
10
|
+
circuits: Record<string, {
|
|
11
|
+
state: CircuitState;
|
|
12
|
+
failures: number;
|
|
13
|
+
}>;
|
|
14
|
+
};
|
|
15
|
+
reset(endpoint?: string): void;
|
|
16
|
+
cleanup(): number;
|
|
17
|
+
shutdown(): void;
|
|
18
|
+
/** Release resources (timers). Optional for backward compatibility. */
|
|
19
|
+
destroy?(): void;
|
|
20
|
+
/** Returns the configured key strategy. Optional for backward compatibility. */
|
|
21
|
+
getKeyStrategy?(): 'resolved' | 'template';
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=ICircuitBreaker.d.ts.map
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ApiClient } from './ApiClient.mjs';
|
|
2
|
+
import { RequestDeduplicator } from './RequestDeduplicator.mjs';
|
|
3
|
+
import type { EsiClientConfig } from '../EsiClient.mjs';
|
|
4
|
+
export interface ConfigureApiClientResult {
|
|
5
|
+
deduplicator: RequestDeduplicator | null;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Configures an existing ApiClient with the full middleware stack
|
|
9
|
+
* based on an EsiClientConfig. This is the single source of truth
|
|
10
|
+
* for how config maps to middleware — used by EsiClient,
|
|
11
|
+
* CustomEsiClient, and EsiApiFactory.
|
|
12
|
+
*
|
|
13
|
+
* The caller is responsible for creating the ApiClient (with baseUrl,
|
|
14
|
+
* clientId, accessToken) and setting datasource/language/tokenProvider
|
|
15
|
+
* before calling this function, since those vary by construction surface.
|
|
16
|
+
*/
|
|
17
|
+
export declare function configureApiClient(client: ApiClient, config?: EsiClientConfig): ConfigureApiClientResult;
|
|
18
|
+
//# sourceMappingURL=configureApiClient.d.ts.map
|
package/dist/core/constants.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export declare const PACKAGE_NAME = "esi.ts";
|
|
2
|
-
export declare const PACKAGE_VERSION = "10.
|
|
3
|
-
export declare const USER_AGENT = "esi.ts/10.
|
|
2
|
+
export declare const PACKAGE_VERSION = "10.2.1";
|
|
3
|
+
export declare const USER_AGENT = "esi.ts/10.2.1";
|
|
4
4
|
export declare const COMPATIBILITY_DATE = "2026-05-19";
|
|
5
5
|
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE';
|
|
3
|
+
export interface DeprecationInfo {
|
|
4
|
+
message?: string;
|
|
5
|
+
replacedBy?: string;
|
|
6
|
+
sunsetDate?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface EndpointDefinition {
|
|
9
|
+
/** URL template with placeholders, e.g. 'alliances/{allianceId}/' */
|
|
10
|
+
path: string;
|
|
11
|
+
/** HTTP method */
|
|
12
|
+
method: HttpMethod;
|
|
13
|
+
/** Whether the endpoint requires an auth token */
|
|
14
|
+
requiresAuth: boolean;
|
|
15
|
+
/** Path parameter names in method signature order */
|
|
16
|
+
pathParams?: readonly string[];
|
|
17
|
+
/** Maps method param name to query string key, e.g. { typeId: 'type_id' } */
|
|
18
|
+
queryParams?: Record<string, string>;
|
|
19
|
+
/** Whether the method accepts a body parameter (for POST/PUT/DELETE) */
|
|
20
|
+
hasBody?: boolean;
|
|
21
|
+
/** Custom body builder for endpoints that construct body from individual params */
|
|
22
|
+
bodyBuilder?: (...args: any[]) => unknown;
|
|
23
|
+
/** Whether this endpoint uses cursor-based pagination (before/after tokens) */
|
|
24
|
+
cursorPagination?: boolean;
|
|
25
|
+
/** Mark an endpoint as deprecated with optional migration guidance */
|
|
26
|
+
deprecated?: DeprecationInfo;
|
|
27
|
+
/** Zod schema for runtime response validation */
|
|
28
|
+
responseSchema?: z.ZodType;
|
|
29
|
+
/** Zod schema for runtime request body validation (opt-in via validateRequest) */
|
|
30
|
+
requestSchema?: z.ZodType;
|
|
31
|
+
}
|
|
32
|
+
export type EndpointMap = Record<string, EndpointDefinition>;
|
|
33
|
+
/** Convert a readonly string tuple to a tuple of number | string (one per path param) */
|
|
34
|
+
type PathParamArgs<P> = P extends readonly [
|
|
35
|
+
unknown,
|
|
36
|
+
...infer Rest extends readonly unknown[]
|
|
37
|
+
] ? [number | string, ...PathParamArgs<Rest>] : [];
|
|
38
|
+
/** Compute the method parameter tuple from an endpoint definition */
|
|
39
|
+
export type EndpointArgs<D> = D extends {
|
|
40
|
+
pathParams: infer P extends readonly string[];
|
|
41
|
+
} ? D extends {
|
|
42
|
+
bodyBuilder: (...args: infer BA) => unknown;
|
|
43
|
+
} ? D extends {
|
|
44
|
+
queryParams: Record<string, string>;
|
|
45
|
+
} ? [
|
|
46
|
+
...PathParamArgs<P>,
|
|
47
|
+
...(string | number | boolean | undefined)[],
|
|
48
|
+
...BA
|
|
49
|
+
] : [...PathParamArgs<P>, ...BA] : D extends {
|
|
50
|
+
hasBody: true;
|
|
51
|
+
} ? [...PathParamArgs<P>, body: object] : D extends {
|
|
52
|
+
queryParams: Record<string, string>;
|
|
53
|
+
} ? [...PathParamArgs<P>, ...(string | number | boolean | undefined)[]] : PathParamArgs<P> : D extends {
|
|
54
|
+
bodyBuilder: (...args: infer BA) => unknown;
|
|
55
|
+
} ? D extends {
|
|
56
|
+
queryParams: Record<string, string>;
|
|
57
|
+
} ? [...(string | number | boolean | undefined)[], ...BA] : BA : D extends {
|
|
58
|
+
hasBody: true;
|
|
59
|
+
} ? [body: object] : D extends {
|
|
60
|
+
queryParams: Record<string, string>;
|
|
61
|
+
} ? (string | number | boolean | undefined)[] : [];
|
|
62
|
+
export {};
|
|
63
|
+
//# sourceMappingURL=EndpointDefinition.d.ts.map
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const accessListEndpoints: {
|
|
3
|
+
readonly getAccessList: {
|
|
4
|
+
readonly path: "characters/{characterId}/access-lists/{accessListId}";
|
|
5
|
+
readonly method: "GET";
|
|
6
|
+
readonly requiresAuth: true;
|
|
7
|
+
readonly pathParams: readonly ["characterId", "accessListId"];
|
|
8
|
+
readonly responseSchema: z.ZodObject<{
|
|
9
|
+
access_list_id: z.ZodNumber;
|
|
10
|
+
name: z.ZodString;
|
|
11
|
+
entries: z.ZodArray<z.ZodObject<{
|
|
12
|
+
entity_id: z.ZodNumber;
|
|
13
|
+
entity_type: z.ZodType<(string & {}) | "character" | "corporation" | "alliance", unknown, z.core.$ZodTypeInternals<(string & {}) | "character" | "corporation" | "alliance", unknown>>;
|
|
14
|
+
access_type: z.ZodType<(string & {}) | "allowed" | "blocked", unknown, z.core.$ZodTypeInternals<(string & {}) | "allowed" | "blocked", unknown>>;
|
|
15
|
+
}, z.core.$loose>>;
|
|
16
|
+
}, z.core.$loose>;
|
|
17
|
+
};
|
|
18
|
+
readonly getCharacterAccessLists: {
|
|
19
|
+
readonly path: "characters/{characterId}/access-lists";
|
|
20
|
+
readonly method: "GET";
|
|
21
|
+
readonly requiresAuth: true;
|
|
22
|
+
readonly pathParams: readonly ["characterId"];
|
|
23
|
+
readonly responseSchema: z.ZodArray<z.ZodObject<{
|
|
24
|
+
access_list_id: z.ZodNumber;
|
|
25
|
+
name: z.ZodString;
|
|
26
|
+
entries: z.ZodArray<z.ZodObject<{
|
|
27
|
+
entity_id: z.ZodNumber;
|
|
28
|
+
entity_type: z.ZodType<(string & {}) | "character" | "corporation" | "alliance", unknown, z.core.$ZodTypeInternals<(string & {}) | "character" | "corporation" | "alliance", unknown>>;
|
|
29
|
+
access_type: z.ZodType<(string & {}) | "allowed" | "blocked", unknown, z.core.$ZodTypeInternals<(string & {}) | "allowed" | "blocked", unknown>>;
|
|
30
|
+
}, z.core.$loose>>;
|
|
31
|
+
}, z.core.$loose>>;
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=accessListEndpoints.d.ts.map
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const allianceEndpoints: {
|
|
3
|
+
readonly getAllianceById: {
|
|
4
|
+
readonly path: "alliances/{allianceId}/";
|
|
5
|
+
readonly method: "GET";
|
|
6
|
+
readonly requiresAuth: false;
|
|
7
|
+
readonly pathParams: readonly ["allianceId"];
|
|
8
|
+
readonly responseSchema: z.ZodObject<{
|
|
9
|
+
alliance_id: z.ZodOptional<z.ZodNumber>;
|
|
10
|
+
name: z.ZodString;
|
|
11
|
+
ticker: z.ZodString;
|
|
12
|
+
creator_id: z.ZodNumber;
|
|
13
|
+
creator_corporation_id: z.ZodNumber;
|
|
14
|
+
executor_corporation_id: z.ZodOptional<z.ZodNumber>;
|
|
15
|
+
date_founded: z.ZodString;
|
|
16
|
+
faction_id: z.ZodOptional<z.ZodNumber>;
|
|
17
|
+
}, z.core.$loose>;
|
|
18
|
+
};
|
|
19
|
+
readonly getCorporations: {
|
|
20
|
+
readonly path: "alliances/{allianceId}/corporations/";
|
|
21
|
+
readonly method: "GET";
|
|
22
|
+
readonly requiresAuth: false;
|
|
23
|
+
readonly pathParams: readonly ["allianceId"];
|
|
24
|
+
readonly responseSchema: z.ZodArray<z.ZodNumber>;
|
|
25
|
+
};
|
|
26
|
+
readonly getIcons: {
|
|
27
|
+
readonly path: "alliances/{allianceId}/icons/";
|
|
28
|
+
readonly method: "GET";
|
|
29
|
+
readonly requiresAuth: false;
|
|
30
|
+
readonly pathParams: readonly ["allianceId"];
|
|
31
|
+
readonly responseSchema: z.ZodObject<{
|
|
32
|
+
px64x64: z.ZodOptional<z.ZodString>;
|
|
33
|
+
px128x128: z.ZodOptional<z.ZodString>;
|
|
34
|
+
}, z.core.$loose>;
|
|
35
|
+
};
|
|
36
|
+
readonly getAlliances: {
|
|
37
|
+
readonly path: "alliances";
|
|
38
|
+
readonly method: "GET";
|
|
39
|
+
readonly requiresAuth: false;
|
|
40
|
+
readonly responseSchema: z.ZodArray<z.ZodNumber>;
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
//# sourceMappingURL=allianceEndpoints.d.ts.map
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const assetEndpoints: {
|
|
3
|
+
readonly getCharacterAssets: {
|
|
4
|
+
readonly path: "characters/{characterId}/assets/";
|
|
5
|
+
readonly method: "GET";
|
|
6
|
+
readonly requiresAuth: true;
|
|
7
|
+
readonly pathParams: readonly ["characterId"];
|
|
8
|
+
readonly responseSchema: z.ZodArray<z.ZodObject<{
|
|
9
|
+
item_id: z.ZodNumber;
|
|
10
|
+
type_id: z.ZodNumber;
|
|
11
|
+
quantity: z.ZodNumber;
|
|
12
|
+
location_id: z.ZodNumber;
|
|
13
|
+
location_type: z.ZodType<(string & {}) | "other" | "solar_system" | "station" | "item", unknown, z.core.$ZodTypeInternals<(string & {}) | "other" | "solar_system" | "station" | "item", unknown>>;
|
|
14
|
+
location_flag: z.ZodString;
|
|
15
|
+
is_singleton: z.ZodBoolean;
|
|
16
|
+
is_blueprint_copy: z.ZodOptional<z.ZodBoolean>;
|
|
17
|
+
}, z.core.$loose>>;
|
|
18
|
+
};
|
|
19
|
+
readonly getCorporationAssets: {
|
|
20
|
+
readonly path: "corporations/{corporationId}/assets/";
|
|
21
|
+
readonly method: "GET";
|
|
22
|
+
readonly requiresAuth: true;
|
|
23
|
+
readonly pathParams: readonly ["corporationId"];
|
|
24
|
+
readonly responseSchema: z.ZodArray<z.ZodObject<{
|
|
25
|
+
item_id: z.ZodNumber;
|
|
26
|
+
type_id: z.ZodNumber;
|
|
27
|
+
quantity: z.ZodNumber;
|
|
28
|
+
location_id: z.ZodNumber;
|
|
29
|
+
location_type: z.ZodType<(string & {}) | "other" | "solar_system" | "station" | "item", unknown, z.core.$ZodTypeInternals<(string & {}) | "other" | "solar_system" | "station" | "item", unknown>>;
|
|
30
|
+
location_flag: z.ZodString;
|
|
31
|
+
is_singleton: z.ZodBoolean;
|
|
32
|
+
is_blueprint_copy: z.ZodOptional<z.ZodBoolean>;
|
|
33
|
+
}, z.core.$loose>>;
|
|
34
|
+
};
|
|
35
|
+
readonly postCharacterAssetLocations: {
|
|
36
|
+
readonly path: "characters/{characterId}/assets/locations/";
|
|
37
|
+
readonly method: "POST";
|
|
38
|
+
readonly requiresAuth: true;
|
|
39
|
+
readonly pathParams: readonly ["characterId"];
|
|
40
|
+
readonly bodyBuilder: (itemIds: number[]) => number[];
|
|
41
|
+
readonly responseSchema: z.ZodArray<z.ZodObject<{
|
|
42
|
+
item_id: z.ZodNumber;
|
|
43
|
+
position: z.ZodObject<{
|
|
44
|
+
x: z.ZodNumber;
|
|
45
|
+
y: z.ZodNumber;
|
|
46
|
+
z: z.ZodNumber;
|
|
47
|
+
}, z.core.$loose>;
|
|
48
|
+
}, z.core.$loose>>;
|
|
49
|
+
};
|
|
50
|
+
readonly postCharacterAssetNames: {
|
|
51
|
+
readonly path: "characters/{characterId}/assets/names/";
|
|
52
|
+
readonly method: "POST";
|
|
53
|
+
readonly requiresAuth: true;
|
|
54
|
+
readonly pathParams: readonly ["characterId"];
|
|
55
|
+
readonly bodyBuilder: (itemIds: number[]) => number[];
|
|
56
|
+
readonly responseSchema: z.ZodArray<z.ZodObject<{
|
|
57
|
+
item_id: z.ZodNumber;
|
|
58
|
+
name: z.ZodString;
|
|
59
|
+
}, z.core.$loose>>;
|
|
60
|
+
};
|
|
61
|
+
readonly postCorporationAssetLocations: {
|
|
62
|
+
readonly path: "corporations/{corporationId}/assets/locations/";
|
|
63
|
+
readonly method: "POST";
|
|
64
|
+
readonly requiresAuth: true;
|
|
65
|
+
readonly pathParams: readonly ["corporationId"];
|
|
66
|
+
readonly bodyBuilder: (itemIds: number[]) => number[];
|
|
67
|
+
};
|
|
68
|
+
readonly postCorporationAssetNames: {
|
|
69
|
+
readonly path: "corporations/{corporationId}/assets/names/";
|
|
70
|
+
readonly method: "POST";
|
|
71
|
+
readonly requiresAuth: true;
|
|
72
|
+
readonly pathParams: readonly ["corporationId"];
|
|
73
|
+
readonly bodyBuilder: (itemIds: number[]) => number[];
|
|
74
|
+
};
|
|
75
|
+
};
|
|
76
|
+
//# sourceMappingURL=assetEndpoints.d.ts.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { EndpointDefinition } from './EndpointDefinition.mjs';
|
|
2
|
+
export interface EndpointPathResult {
|
|
3
|
+
path: string;
|
|
4
|
+
body: unknown;
|
|
5
|
+
}
|
|
6
|
+
export declare function buildEndpointPath(def: EndpointDefinition, args: unknown[], datasource?: string): EndpointPathResult;
|
|
7
|
+
//# sourceMappingURL=buildEndpointPath.d.ts.map
|