@lgriffin/esi.ts 5.1.0 → 6.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +60 -0
- package/README.md +271 -9
- package/dist/EsiClient.d.ts +7 -0
- package/dist/EsiClient.d.ts.map +1 -1
- package/dist/EsiClient.js +19 -0
- package/dist/clients/AssetsClient.d.ts +3 -0
- package/dist/clients/AssetsClient.d.ts.map +1 -1
- package/dist/clients/AssetsClient.js +6 -0
- package/dist/clients/BaseEsiClient.d.ts +3 -1
- package/dist/clients/BaseEsiClient.d.ts.map +1 -1
- package/dist/clients/BaseEsiClient.js +7 -0
- package/dist/clients/ContractsClient.d.ts +4 -0
- package/dist/clients/ContractsClient.d.ts.map +1 -1
- package/dist/clients/ContractsClient.js +9 -0
- package/dist/clients/KillmailsClient.d.ts +3 -0
- package/dist/clients/KillmailsClient.d.ts.map +1 -1
- package/dist/clients/KillmailsClient.js +6 -0
- package/dist/clients/MarketClient.d.ts +7 -0
- package/dist/clients/MarketClient.d.ts.map +1 -1
- package/dist/clients/MarketClient.js +18 -0
- package/dist/clients/WalletClient.d.ts +4 -0
- package/dist/clients/WalletClient.d.ts.map +1 -1
- package/dist/clients/WalletClient.js +9 -0
- package/dist/core/ApiClient.d.ts +10 -0
- package/dist/core/ApiClient.d.ts.map +1 -1
- package/dist/core/ApiClient.js +21 -0
- package/dist/core/ApiRequestHandler.d.ts +4 -1
- package/dist/core/ApiRequestHandler.d.ts.map +1 -1
- package/dist/core/ApiRequestHandler.js +116 -41
- package/dist/core/BatchRequestHandler.d.ts +12 -0
- package/dist/core/BatchRequestHandler.d.ts.map +1 -0
- package/dist/core/BatchRequestHandler.js +66 -0
- package/dist/core/constants.d.ts +2 -2
- package/dist/core/constants.js +1 -1
- package/dist/core/endpoints/EndpointDefinition.d.ts +3 -0
- package/dist/core/endpoints/EndpointDefinition.d.ts.map +1 -1
- package/dist/core/endpoints/accessListEndpoints.d.ts +16 -0
- package/dist/core/endpoints/accessListEndpoints.d.ts.map +1 -1
- package/dist/core/endpoints/accessListEndpoints.js +2 -0
- package/dist/core/endpoints/allianceEndpoints.d.ts +14 -0
- package/dist/core/endpoints/allianceEndpoints.d.ts.map +1 -1
- package/dist/core/endpoints/allianceEndpoints.js +3 -0
- package/dist/core/endpoints/assetEndpoints.d.ts +27 -0
- package/dist/core/endpoints/assetEndpoints.d.ts.map +1 -1
- package/dist/core/endpoints/assetEndpoints.js +5 -0
- package/dist/core/endpoints/buildEndpointPath.d.ts +7 -0
- package/dist/core/endpoints/buildEndpointPath.d.ts.map +1 -0
- package/dist/core/endpoints/buildEndpointPath.js +44 -0
- package/dist/core/endpoints/calendarEndpoints.d.ts +40 -0
- package/dist/core/endpoints/calendarEndpoints.d.ts.map +1 -1
- package/dist/core/endpoints/calendarEndpoints.js +5 -0
- package/dist/core/endpoints/characterEndpoints.d.ts +105 -0
- package/dist/core/endpoints/characterEndpoints.d.ts.map +1 -1
- package/dist/core/endpoints/characterEndpoints.js +13 -0
- package/dist/core/endpoints/cloneEndpoints.d.ts +21 -0
- package/dist/core/endpoints/cloneEndpoints.d.ts.map +1 -1
- package/dist/core/endpoints/cloneEndpoints.js +2 -0
- package/dist/core/endpoints/contactEndpoints.d.ts +49 -0
- package/dist/core/endpoints/contactEndpoints.d.ts.map +1 -1
- package/dist/core/endpoints/contactEndpoints.js +8 -0
- package/dist/core/endpoints/contractEndpoints.d.ts +184 -0
- package/dist/core/endpoints/contractEndpoints.d.ts.map +1 -1
- package/dist/core/endpoints/contractEndpoints.js +11 -0
- package/dist/core/endpoints/corporationEndpoints.d.ts +192 -0
- package/dist/core/endpoints/corporationEndpoints.d.ts.map +1 -1
- package/dist/core/endpoints/corporationEndpoints.js +18 -0
- package/dist/core/endpoints/createClient.d.ts.map +1 -1
- package/dist/core/endpoints/createClient.js +29 -43
- package/dist/core/endpoints/dogmaEndpoints.d.ts +38 -0
- package/dist/core/endpoints/dogmaEndpoints.d.ts.map +1 -1
- package/dist/core/endpoints/dogmaEndpoints.js +4 -0
- package/dist/core/endpoints/esi-cache-ttls.generated.d.ts +2 -0
- package/dist/core/endpoints/esi-cache-ttls.generated.d.ts.map +1 -0
- package/dist/core/endpoints/esi-cache-ttls.generated.js +126 -0
- package/dist/core/endpoints/esi-rate-limit-groups.generated.d.ts +7 -0
- package/dist/core/endpoints/esi-rate-limit-groups.generated.d.ts.map +1 -0
- package/dist/core/endpoints/esi-rate-limit-groups.generated.js +153 -0
- package/dist/core/endpoints/esi-scopes.generated.d.ts +3 -0
- package/dist/core/endpoints/esi-scopes.generated.d.ts.map +1 -0
- package/dist/core/endpoints/esi-scopes.generated.js +127 -0
- package/dist/core/endpoints/factionEndpoints.d.ts +154 -0
- package/dist/core/endpoints/factionEndpoints.d.ts.map +1 -1
- package/dist/core/endpoints/factionEndpoints.js +10 -0
- package/dist/core/endpoints/fittingEndpoints.d.ts +12 -0
- package/dist/core/endpoints/fittingEndpoints.d.ts.map +1 -1
- package/dist/core/endpoints/fittingEndpoints.js +3 -0
- package/dist/core/endpoints/fleetEndpoints.d.ts +45 -0
- package/dist/core/endpoints/fleetEndpoints.d.ts.map +1 -1
- package/dist/core/endpoints/fleetEndpoints.js +6 -0
- package/dist/core/endpoints/freelanceJobsEndpoints.d.ts +122 -0
- package/dist/core/endpoints/freelanceJobsEndpoints.d.ts.map +1 -1
- package/dist/core/endpoints/freelanceJobsEndpoints.js +8 -0
- package/dist/core/endpoints/incursionEndpoints.d.ts +15 -0
- package/dist/core/endpoints/incursionEndpoints.d.ts.map +1 -1
- package/dist/core/endpoints/incursionEndpoints.js +3 -0
- package/dist/core/endpoints/industryEndpoints.d.ts +103 -0
- package/dist/core/endpoints/industryEndpoints.d.ts.map +1 -1
- package/dist/core/endpoints/industryEndpoints.js +10 -0
- package/dist/core/endpoints/insuranceEndpoints.d.ts +9 -0
- package/dist/core/endpoints/insuranceEndpoints.d.ts.map +1 -1
- package/dist/core/endpoints/insuranceEndpoints.js +3 -0
- package/dist/core/endpoints/killmailEndpoints.d.ts +41 -0
- package/dist/core/endpoints/killmailEndpoints.d.ts.map +1 -1
- package/dist/core/endpoints/killmailEndpoints.js +5 -0
- package/dist/core/endpoints/locationEndpoints.d.ts +16 -0
- package/dist/core/endpoints/locationEndpoints.d.ts.map +1 -1
- package/dist/core/endpoints/locationEndpoints.js +4 -0
- package/dist/core/endpoints/loyaltyEndpoints.d.ts +17 -0
- package/dist/core/endpoints/loyaltyEndpoints.d.ts.map +1 -1
- package/dist/core/endpoints/loyaltyEndpoints.js +4 -0
- package/dist/core/endpoints/mailEndpoints.d.ts +35 -0
- package/dist/core/endpoints/mailEndpoints.d.ts.map +1 -1
- package/dist/core/endpoints/mailEndpoints.js +4 -0
- package/dist/core/endpoints/marketEndpoints.d.ts +123 -0
- package/dist/core/endpoints/marketEndpoints.d.ts.map +1 -1
- package/dist/core/endpoints/marketEndpoints.js +9 -0
- package/dist/core/endpoints/mercenaryEndpoints.d.ts +24 -0
- package/dist/core/endpoints/mercenaryEndpoints.d.ts.map +1 -1
- package/dist/core/endpoints/mercenaryEndpoints.js +4 -0
- package/dist/core/endpoints/piEndpoints.d.ts +76 -0
- package/dist/core/endpoints/piEndpoints.d.ts.map +1 -1
- package/dist/core/endpoints/piEndpoints.js +5 -0
- package/dist/core/endpoints/skillEndpoints.d.ts +21 -0
- package/dist/core/endpoints/skillEndpoints.d.ts.map +1 -1
- package/dist/core/endpoints/skillEndpoints.js +5 -0
- package/dist/core/endpoints/skyhookEndpoints.d.ts +27 -0
- package/dist/core/endpoints/skyhookEndpoints.d.ts.map +1 -1
- package/dist/core/endpoints/skyhookEndpoints.js +5 -0
- package/dist/core/endpoints/sovereigntyEndpoints.d.ts +37 -0
- package/dist/core/endpoints/sovereigntyEndpoints.d.ts.map +1 -1
- package/dist/core/endpoints/sovereigntyEndpoints.js +4 -0
- package/dist/core/endpoints/statusEndpoints.d.ts +6 -0
- package/dist/core/endpoints/statusEndpoints.d.ts.map +1 -1
- package/dist/core/endpoints/statusEndpoints.js +2 -0
- package/dist/core/endpoints/universeEndpoints.d.ts +272 -0
- package/dist/core/endpoints/universeEndpoints.d.ts.map +1 -1
- package/dist/core/endpoints/universeEndpoints.js +25 -0
- package/dist/core/endpoints/walletEndpoints.d.ts +51 -0
- package/dist/core/endpoints/walletEndpoints.d.ts.map +1 -1
- package/dist/core/endpoints/walletEndpoints.js +6 -0
- package/dist/core/endpoints/warEndpoints.d.ts +30 -0
- package/dist/core/endpoints/warEndpoints.d.ts.map +1 -1
- package/dist/core/endpoints/warEndpoints.js +5 -0
- package/dist/core/pagination/AsyncPaginationIterator.js +2 -2
- package/dist/core/pagination/PaginationHandler.d.ts +1 -1
- package/dist/core/pagination/PaginationHandler.d.ts.map +1 -1
- package/dist/core/pagination/PaginationHandler.js +2 -2
- package/dist/core/rateLimiter/IRateLimiter.d.ts +13 -3
- package/dist/core/rateLimiter/IRateLimiter.d.ts.map +1 -1
- package/dist/core/rateLimiter/RateLimiter.d.ts +24 -51
- package/dist/core/rateLimiter/RateLimiter.d.ts.map +1 -1
- package/dist/core/rateLimiter/RateLimiter.js +208 -98
- package/dist/core/util/error.d.ts +10 -1
- package/dist/core/util/error.d.ts.map +1 -1
- package/dist/core/util/error.js +24 -2
- package/dist/core/util/retry.d.ts +8 -0
- package/dist/core/util/retry.d.ts.map +1 -0
- package/dist/core/util/retry.js +9 -0
- package/dist/core/util/stringUtil.d.ts +2 -0
- package/dist/core/util/stringUtil.d.ts.map +1 -0
- package/dist/core/util/stringUtil.js +6 -0
- package/dist/index.d.ts +8 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +37 -2
- package/dist/schemas/access-lists.d.ts +30 -0
- package/dist/schemas/access-lists.d.ts.map +1 -0
- package/dist/schemas/access-lists.js +14 -0
- package/dist/schemas/alliance.d.ts +30 -0
- package/dist/schemas/alliance.d.ts.map +1 -0
- package/dist/schemas/alliance.js +28 -0
- package/dist/schemas/assets.d.ts +28 -0
- package/dist/schemas/assets.d.ts.map +1 -0
- package/dist/schemas/assets.js +26 -0
- package/dist/schemas/calendar.d.ts +41 -0
- package/dist/schemas/calendar.d.ts.map +1 -0
- package/dist/schemas/calendar.js +43 -0
- package/dist/schemas/character.d.ts +122 -0
- package/dist/schemas/character.d.ts.map +1 -0
- package/dist/schemas/character.js +114 -0
- package/dist/schemas/clones.d.ts +23 -0
- package/dist/schemas/clones.d.ts.map +1 -0
- package/dist/schemas/clones.js +21 -0
- package/dist/schemas/common.d.ts +59 -0
- package/dist/schemas/common.d.ts.map +1 -0
- package/dist/schemas/common.js +34 -0
- package/dist/schemas/contacts.d.ts +18 -0
- package/dist/schemas/contacts.d.ts.map +1 -0
- package/dist/schemas/contacts.js +15 -0
- package/dist/schemas/contracts.d.ts +63 -0
- package/dist/schemas/contracts.d.ts.map +1 -0
- package/dist/schemas/contracts.js +58 -0
- package/dist/schemas/corporation.d.ts +193 -0
- package/dist/schemas/corporation.d.ts.map +1 -0
- package/dist/schemas/corporation.js +178 -0
- package/dist/schemas/dogma.d.ts +40 -0
- package/dist/schemas/dogma.d.ts.map +1 -0
- package/dist/schemas/dogma.js +42 -0
- package/dist/schemas/faction-warfare.d.ts +95 -0
- package/dist/schemas/faction-warfare.d.ts.map +1 -0
- package/dist/schemas/faction-warfare.js +92 -0
- package/dist/schemas/fittings.d.ts +13 -0
- package/dist/schemas/fittings.d.ts.map +1 -0
- package/dist/schemas/fittings.js +15 -0
- package/dist/schemas/fleet.d.ts +46 -0
- package/dist/schemas/fleet.d.ts.map +1 -0
- package/dist/schemas/fleet.js +48 -0
- package/dist/schemas/freelance-jobs.d.ts +141 -0
- package/dist/schemas/freelance-jobs.d.ts.map +1 -0
- package/dist/schemas/freelance-jobs.js +99 -0
- package/dist/schemas/incursions.d.ts +16 -0
- package/dist/schemas/incursions.d.ts.map +1 -0
- package/dist/schemas/incursions.js +14 -0
- package/dist/schemas/index.d.ts +33 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +48 -0
- package/dist/schemas/industry.d.ts +73 -0
- package/dist/schemas/industry.d.ts.map +1 -0
- package/dist/schemas/industry.js +75 -0
- package/dist/schemas/insurance.d.ts +10 -0
- package/dist/schemas/insurance.d.ts.map +1 -0
- package/dist/schemas/insurance.js +12 -0
- package/dist/schemas/killmails.d.ts +38 -0
- package/dist/schemas/killmails.d.ts.map +1 -0
- package/dist/schemas/killmails.js +42 -0
- package/dist/schemas/location.d.ts +18 -0
- package/dist/schemas/location.d.ts.map +1 -0
- package/dist/schemas/location.js +20 -0
- package/dist/schemas/loyalty.d.ts +18 -0
- package/dist/schemas/loyalty.d.ts.map +1 -0
- package/dist/schemas/loyalty.js +20 -0
- package/dist/schemas/mail.d.ts +25 -0
- package/dist/schemas/mail.d.ts.map +1 -0
- package/dist/schemas/mail.js +29 -0
- package/dist/schemas/market.d.ts +29 -0
- package/dist/schemas/market.d.ts.map +1 -0
- package/dist/schemas/market.js +26 -0
- package/dist/schemas/mercenary.d.ts +25 -0
- package/dist/schemas/mercenary.d.ts.map +1 -0
- package/dist/schemas/mercenary.js +22 -0
- package/dist/schemas/pi.d.ts +77 -0
- package/dist/schemas/pi.d.ts.map +1 -0
- package/dist/schemas/pi.js +85 -0
- package/dist/schemas/skills.d.ts +18 -0
- package/dist/schemas/skills.d.ts.map +1 -0
- package/dist/schemas/skills.js +20 -0
- package/dist/schemas/skyhooks.d.ts +28 -0
- package/dist/schemas/skyhooks.d.ts.map +1 -0
- package/dist/schemas/skyhooks.js +30 -0
- package/dist/schemas/sovereignty.d.ts +45 -0
- package/dist/schemas/sovereignty.d.ts.map +1 -0
- package/dist/schemas/sovereignty.js +43 -0
- package/dist/schemas/status.d.ts +8 -0
- package/dist/schemas/status.d.ts.map +1 -0
- package/dist/schemas/status.js +10 -0
- package/dist/schemas/universe.d.ts +286 -0
- package/dist/schemas/universe.d.ts.map +1 -0
- package/dist/schemas/universe.js +245 -0
- package/dist/schemas/wallet.d.ts +27 -0
- package/dist/schemas/wallet.d.ts.map +1 -0
- package/dist/schemas/wallet.js +29 -0
- package/dist/schemas/wars.d.ts +27 -0
- package/dist/schemas/wars.d.ts.map +1 -0
- package/dist/schemas/wars.js +31 -0
- package/dist/testing/TestDataFactory.d.ts +44 -3
- package/dist/testing/TestDataFactory.d.ts.map +1 -1
- package/dist/types/access-lists.d.ts +4 -10
- package/dist/types/access-lists.d.ts.map +1 -1
- package/dist/types/alliance.d.ts +6 -24
- package/dist/types/alliance.d.ts.map +1 -1
- package/dist/types/api-responses.d.ts +1 -0
- package/dist/types/api-responses.d.ts.map +1 -1
- package/dist/types/api-responses.js +24 -0
- package/dist/types/assets.d.ts +5 -22
- package/dist/types/assets.d.ts.map +1 -1
- package/dist/types/calendar.d.ts +5 -23
- package/dist/types/calendar.d.ts.map +1 -1
- package/dist/types/character.d.ts +15 -104
- package/dist/types/character.d.ts.map +1 -1
- package/dist/types/clones.d.ts +3 -15
- package/dist/types/clones.d.ts.map +1 -1
- package/dist/types/common.d.ts +4 -12
- package/dist/types/common.d.ts.map +1 -1
- package/dist/types/contacts.d.ts +4 -11
- package/dist/types/contacts.d.ts.map +1 -1
- package/dist/types/contracts.d.ts +5 -39
- package/dist/types/contracts.d.ts.map +1 -1
- package/dist/types/corporation.d.ts +18 -166
- package/dist/types/corporation.d.ts.map +1 -1
- package/dist/types/dogma.d.ts +5 -38
- package/dist/types/dogma.d.ts.map +1 -1
- package/dist/types/faction-warfare.d.ts +8 -88
- package/dist/types/faction-warfare.d.ts.map +1 -1
- package/dist/types/fittings.d.ts +3 -11
- package/dist/types/fittings.d.ts.map +1 -1
- package/dist/types/fleet.d.ts +6 -34
- package/dist/types/fleet.d.ts.map +1 -1
- package/dist/types/freelance-jobs.d.ts +10 -91
- package/dist/types/freelance-jobs.d.ts.map +1 -1
- package/dist/types/generated/esi-spec.generated.d.ts +1763 -0
- package/dist/types/generated/esi-spec.generated.d.ts.map +1 -0
- package/dist/types/generated/esi-spec.generated.js +6 -0
- package/dist/types/incursions.d.ts +3 -10
- package/dist/types/incursions.d.ts.map +1 -1
- package/dist/types/industry.d.ts +9 -64
- package/dist/types/industry.d.ts.map +1 -1
- package/dist/types/insurance.d.ts +3 -8
- package/dist/types/insurance.d.ts.map +1 -1
- package/dist/types/killmails.d.ts +4 -36
- package/dist/types/killmails.d.ts.map +1 -1
- package/dist/types/location.d.ts +5 -16
- package/dist/types/location.d.ts.map +1 -1
- package/dist/types/loyalty.d.ts +4 -16
- package/dist/types/loyalty.d.ts.map +1 -1
- package/dist/types/mail.d.ts +4 -18
- package/dist/types/mail.d.ts.map +1 -1
- package/dist/types/market.d.ts +4 -22
- package/dist/types/market.d.ts.map +1 -1
- package/dist/types/mercenary.d.ts +4 -18
- package/dist/types/mercenary.d.ts.map +1 -1
- package/dist/types/pi.d.ts +5 -66
- package/dist/types/pi.d.ts.map +1 -1
- package/dist/types/skills.d.ts +4 -16
- package/dist/types/skills.d.ts.map +1 -1
- package/dist/types/skyhooks.d.ts +5 -26
- package/dist/types/skyhooks.d.ts.map +1 -1
- package/dist/types/sovereignty.d.ts +5 -32
- package/dist/types/sovereignty.d.ts.map +1 -1
- package/dist/types/status.d.ts +3 -6
- package/dist/types/status.d.ts.map +1 -1
- package/dist/types/universe.d.ts +26 -274
- package/dist/types/universe.d.ts.map +1 -1
- package/dist/types/wallet.d.ts +4 -25
- package/dist/types/wallet.d.ts.map +1 -1
- package/dist/types/wars.d.ts +3 -25
- package/dist/types/wars.d.ts.map +1 -1
- package/package.json +51 -46
|
@@ -98,5 +98,14 @@ class ContractsClient extends BaseEsiClient_1.BaseEsiClient {
|
|
|
98
98
|
getCorporationContractItems(corporationId, contractId) {
|
|
99
99
|
return this.api.getCorporationContractItems(corporationId, contractId);
|
|
100
100
|
}
|
|
101
|
+
streamPublicContracts(regionId) {
|
|
102
|
+
return this.streamEndpoint('getPublicContracts', regionId);
|
|
103
|
+
}
|
|
104
|
+
streamCharacterContracts(characterId) {
|
|
105
|
+
return this.streamEndpoint('getCharacterContracts', characterId);
|
|
106
|
+
}
|
|
107
|
+
streamCorporationContracts(corporationId) {
|
|
108
|
+
return this.streamEndpoint('getCorporationContracts', corporationId);
|
|
109
|
+
}
|
|
101
110
|
}
|
|
102
111
|
exports.ContractsClient = ContractsClient;
|
|
@@ -2,6 +2,7 @@ import { ApiClient } from '../core/ApiClient';
|
|
|
2
2
|
import { BaseEsiClient } from './BaseEsiClient';
|
|
3
3
|
import { killmailEndpoints } from '../core/endpoints/killmailEndpoints';
|
|
4
4
|
import { KillmailSummary, Killmail } from '../types/api-responses';
|
|
5
|
+
import { PageResult } from '../core/pagination/AsyncPaginationIterator';
|
|
5
6
|
export declare class KillmailsClient extends BaseEsiClient<typeof killmailEndpoints> {
|
|
6
7
|
constructor(client: ApiClient);
|
|
7
8
|
/**
|
|
@@ -28,5 +29,7 @@ export declare class KillmailsClient extends BaseEsiClient<typeof killmailEndpoi
|
|
|
28
29
|
* @returns The full killmail details including victim, attackers, and items
|
|
29
30
|
*/
|
|
30
31
|
getKillmail(killmailId: number, killmailHash: string): Promise<Killmail>;
|
|
32
|
+
streamCharacterRecentKillmails(characterId: number): AsyncGenerator<PageResult<KillmailSummary>, void, undefined>;
|
|
33
|
+
streamCorporationRecentKillmails(corporationId: number): AsyncGenerator<PageResult<KillmailSummary>, void, undefined>;
|
|
31
34
|
}
|
|
32
35
|
//# sourceMappingURL=KillmailsClient.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KillmailsClient.d.ts","sourceRoot":"","sources":["../../src/clients/KillmailsClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"KillmailsClient.d.ts","sourceRoot":"","sources":["../../src/clients/KillmailsClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,4CAA4C,CAAC;AAExE,qBAAa,eAAgB,SAAQ,aAAa,CAAC,OAAO,iBAAiB,CAAC;gBAC9D,MAAM,EAAE,SAAS;IAI7B;;;;;;OAMG;IACH,2BAA2B,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAM5E;;;;;;OAMG;IACH,6BAA6B,CAC3B,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,eAAe,EAAE,CAAC;IAM7B;;;;;;OAMG;IACH,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAIxE,8BAA8B,CAC5B,WAAW,EAAE,MAAM,GAClB,cAAc,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC;IAO/D,gCAAgC,CAC9B,aAAa,EAAE,MAAM,GACpB,cAAc,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC;CAMhE"}
|
|
@@ -37,5 +37,11 @@ class KillmailsClient extends BaseEsiClient_1.BaseEsiClient {
|
|
|
37
37
|
getKillmail(killmailId, killmailHash) {
|
|
38
38
|
return this.api.getKillmail(killmailId, killmailHash);
|
|
39
39
|
}
|
|
40
|
+
streamCharacterRecentKillmails(characterId) {
|
|
41
|
+
return this.streamEndpoint('getCharacterRecentKillmails', characterId);
|
|
42
|
+
}
|
|
43
|
+
streamCorporationRecentKillmails(corporationId) {
|
|
44
|
+
return this.streamEndpoint('getCorporationRecentKillmails', corporationId);
|
|
45
|
+
}
|
|
40
46
|
}
|
|
41
47
|
exports.KillmailsClient = KillmailsClient;
|
|
@@ -2,6 +2,7 @@ import { ApiClient } from '../core/ApiClient';
|
|
|
2
2
|
import { BaseEsiClient } from './BaseEsiClient';
|
|
3
3
|
import { marketEndpoints } from '../core/endpoints/marketEndpoints';
|
|
4
4
|
import { MarketOrder, MarketHistory } from '../types/api-responses';
|
|
5
|
+
import { PageResult } from '../core/pagination/AsyncPaginationIterator';
|
|
5
6
|
export declare class MarketClient extends BaseEsiClient<typeof marketEndpoints> {
|
|
6
7
|
constructor(client: ApiClient);
|
|
7
8
|
/**
|
|
@@ -94,5 +95,11 @@ export declare class MarketClient extends BaseEsiClient<typeof marketEndpoints>
|
|
|
94
95
|
* @returns A list of active market orders in the structure
|
|
95
96
|
*/
|
|
96
97
|
getMarketOrdersInStructure(structureId: number): Promise<MarketOrder[]>;
|
|
98
|
+
streamMarketOrders(regionId: number): AsyncGenerator<PageResult<MarketOrder>, void, undefined>;
|
|
99
|
+
streamMarketTypes(regionId: number): AsyncGenerator<PageResult<number>, void, undefined>;
|
|
100
|
+
streamCharacterOrderHistory(characterId: number): AsyncGenerator<PageResult<MarketOrder>, void, undefined>;
|
|
101
|
+
streamCorporationOrders(corporationId: number): AsyncGenerator<PageResult<MarketOrder>, void, undefined>;
|
|
102
|
+
streamCorporationOrderHistory(corporationId: number): AsyncGenerator<PageResult<MarketOrder>, void, undefined>;
|
|
103
|
+
streamMarketOrdersInStructure(structureId: number): AsyncGenerator<PageResult<MarketOrder>, void, undefined>;
|
|
97
104
|
}
|
|
98
105
|
//# sourceMappingURL=MarketClient.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarketClient.d.ts","sourceRoot":"","sources":["../../src/clients/MarketClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"MarketClient.d.ts","sourceRoot":"","sources":["../../src/clients/MarketClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,4CAA4C,CAAC;AAExE,qBAAa,YAAa,SAAQ,aAAa,CAAC,OAAO,eAAe,CAAC;gBACzD,MAAM,EAAE,SAAS;IAI7B;;;;;;OAMG;IACH,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAI/D;;;;;;OAMG;IACH,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAMrE;;;;;;OAMG;IACH,oBAAoB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAMnE;;;;;;OAMG;IACH,0BAA0B,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAMzE;;;;;;OAMG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAM5E;;;;;OAKG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAIzD;;;;;OAKG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAInD;;;;OAIG;IACH,eAAe,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAIpC;;;;;OAKG;IACH,yBAAyB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC;QACxD,eAAe,EAAE,MAAM,CAAC;QACxB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,CAAC;IAUF;;;;OAIG;IACH,eAAe,IAAI,OAAO,CACxB;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CACvE;IAMD;;;;;OAKG;IACH,0BAA0B,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAMvE,kBAAkB,CAChB,QAAQ,EAAE,MAAM,GACf,cAAc,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC;IAI3D,iBAAiB,CACf,QAAQ,EAAE,MAAM,GACf,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC;IAItD,2BAA2B,CACzB,WAAW,EAAE,MAAM,GAClB,cAAc,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC;IAO3D,uBAAuB,CACrB,aAAa,EAAE,MAAM,GACpB,cAAc,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC;IAO3D,6BAA6B,CAC3B,aAAa,EAAE,MAAM,GACpB,cAAc,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC;IAO3D,6BAA6B,CAC3B,WAAW,EAAE,MAAM,GAClB,cAAc,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC;CAM5D"}
|
|
@@ -109,5 +109,23 @@ class MarketClient extends BaseEsiClient_1.BaseEsiClient {
|
|
|
109
109
|
getMarketOrdersInStructure(structureId) {
|
|
110
110
|
return this.api.getMarketOrdersInStructure(structureId);
|
|
111
111
|
}
|
|
112
|
+
streamMarketOrders(regionId) {
|
|
113
|
+
return this.streamEndpoint('getMarketOrders', regionId, 'all');
|
|
114
|
+
}
|
|
115
|
+
streamMarketTypes(regionId) {
|
|
116
|
+
return this.streamEndpoint('getMarketTypes', regionId);
|
|
117
|
+
}
|
|
118
|
+
streamCharacterOrderHistory(characterId) {
|
|
119
|
+
return this.streamEndpoint('getCharacterOrderHistory', characterId);
|
|
120
|
+
}
|
|
121
|
+
streamCorporationOrders(corporationId) {
|
|
122
|
+
return this.streamEndpoint('getCorporationOrders', corporationId);
|
|
123
|
+
}
|
|
124
|
+
streamCorporationOrderHistory(corporationId) {
|
|
125
|
+
return this.streamEndpoint('getCorporationOrderHistory', corporationId);
|
|
126
|
+
}
|
|
127
|
+
streamMarketOrdersInStructure(structureId) {
|
|
128
|
+
return this.streamEndpoint('getMarketOrdersInStructure', structureId);
|
|
129
|
+
}
|
|
112
130
|
}
|
|
113
131
|
exports.MarketClient = MarketClient;
|
|
@@ -2,6 +2,7 @@ import { ApiClient } from '../core/ApiClient';
|
|
|
2
2
|
import { BaseEsiClient } from './BaseEsiClient';
|
|
3
3
|
import { walletEndpoints } from '../core/endpoints/walletEndpoints';
|
|
4
4
|
import { WalletJournal, WalletTransaction } from '../types/api-responses';
|
|
5
|
+
import { PageResult } from '../core/pagination/AsyncPaginationIterator';
|
|
5
6
|
export declare class WalletClient extends BaseEsiClient<typeof walletEndpoints> {
|
|
6
7
|
constructor(client: ApiClient);
|
|
7
8
|
/**
|
|
@@ -57,5 +58,8 @@ export declare class WalletClient extends BaseEsiClient<typeof walletEndpoints>
|
|
|
57
58
|
* @requires Authentication
|
|
58
59
|
*/
|
|
59
60
|
getCorporationWalletTransactions(corporationId: number, division: number): Promise<WalletTransaction[]>;
|
|
61
|
+
streamCharacterWalletJournal(characterId: number): AsyncGenerator<PageResult<WalletJournal>, void, undefined>;
|
|
62
|
+
streamCorporationWalletJournal(corporationId: number, division: number): AsyncGenerator<PageResult<WalletJournal>, void, undefined>;
|
|
63
|
+
streamCharacterWalletTransactions(characterId: number): AsyncGenerator<PageResult<WalletTransaction>, void, undefined>;
|
|
60
64
|
}
|
|
61
65
|
//# sourceMappingURL=WalletClient.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WalletClient.d.ts","sourceRoot":"","sources":["../../src/clients/WalletClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"WalletClient.d.ts","sourceRoot":"","sources":["../../src/clients/WalletClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,MAAM,4CAA4C,CAAC;AAExE,qBAAa,YAAa,SAAQ,aAAa,CAAC,OAAO,eAAe,CAAC;gBACzD,MAAM,EAAE,SAAS;IAI7B;;;;;;OAMG;IACH,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIxD;;;;;;OAMG;IACH,yBAAyB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAMxE;;;;;;OAMG;IACH,8BAA8B,CAC5B,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAM/B;;;;;;OAMG;IACH,qBAAqB,CACnB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAMnD;;;;;;;OAOG;IACH,2BAA2B,CACzB,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,aAAa,EAAE,CAAC;IAO3B;;;;;;;OAOG;IACH,gCAAgC,CAC9B,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAO/B,4BAA4B,CAC1B,WAAW,EAAE,MAAM,GAClB,cAAc,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC;IAO7D,8BAA8B,CAC5B,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,GACf,cAAc,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC;IAQ7D,iCAAiC,CAC/B,WAAW,EAAE,MAAM,GAClB,cAAc,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC;CAMlE"}
|
|
@@ -69,5 +69,14 @@ class WalletClient extends BaseEsiClient_1.BaseEsiClient {
|
|
|
69
69
|
getCorporationWalletTransactions(corporationId, division) {
|
|
70
70
|
return this.api.getCorporationWalletTransactions(corporationId, division);
|
|
71
71
|
}
|
|
72
|
+
streamCharacterWalletJournal(characterId) {
|
|
73
|
+
return this.streamEndpoint('getCharacterWalletJournal', characterId);
|
|
74
|
+
}
|
|
75
|
+
streamCorporationWalletJournal(corporationId, division) {
|
|
76
|
+
return this.streamEndpoint('getCorporationWalletJournal', corporationId, division);
|
|
77
|
+
}
|
|
78
|
+
streamCharacterWalletTransactions(characterId) {
|
|
79
|
+
return this.streamEndpoint('getCharacterWalletTransactions', characterId);
|
|
80
|
+
}
|
|
72
81
|
}
|
|
73
82
|
exports.WalletClient = WalletClient;
|
package/dist/core/ApiClient.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ import { ICache } from './cache/ICache';
|
|
|
3
3
|
import { IRateLimiter } from './rateLimiter/IRateLimiter';
|
|
4
4
|
import { CircuitBreaker } from './circuitBreaker/CircuitBreaker';
|
|
5
5
|
import { RequestDeduplicator } from './RequestDeduplicator';
|
|
6
|
+
import { RetryConfig } from './util/retry';
|
|
6
7
|
export type EsiDatasource = 'tranquility' | 'singularity';
|
|
7
8
|
export type TokenProvider = () => Promise<string>;
|
|
8
9
|
export declare class ApiClient {
|
|
@@ -18,6 +19,9 @@ export declare class ApiClient {
|
|
|
18
19
|
private circuitBreaker;
|
|
19
20
|
private timeout;
|
|
20
21
|
private deduplicator;
|
|
22
|
+
private retryConfig;
|
|
23
|
+
private validateResponse;
|
|
24
|
+
private language?;
|
|
21
25
|
constructor(clientId: string, link: string, accessToken?: string | undefined);
|
|
22
26
|
getTimeout(): number;
|
|
23
27
|
setTimeout(timeout: number): void;
|
|
@@ -29,6 +33,10 @@ export declare class ApiClient {
|
|
|
29
33
|
setCircuitBreaker(cb: CircuitBreaker | null): void;
|
|
30
34
|
getDeduplicator(): RequestDeduplicator | null;
|
|
31
35
|
setDeduplicator(dedup: RequestDeduplicator | null): void;
|
|
36
|
+
getRetryConfig(): RetryConfig | null;
|
|
37
|
+
setRetryConfig(config: RetryConfig | null): void;
|
|
38
|
+
getValidateResponse(): boolean;
|
|
39
|
+
setValidateResponse(validate: boolean): void;
|
|
32
40
|
getMiddleware(): MiddlewareManager;
|
|
33
41
|
addRequestInterceptor(fn: RequestInterceptor): () => void;
|
|
34
42
|
addResponseInterceptor(fn: ResponseInterceptor): () => void;
|
|
@@ -36,6 +44,8 @@ export declare class ApiClient {
|
|
|
36
44
|
getLink(): string;
|
|
37
45
|
getDatasource(): EsiDatasource | undefined;
|
|
38
46
|
setDatasource(datasource: EsiDatasource | undefined): void;
|
|
47
|
+
getLanguage(): string | undefined;
|
|
48
|
+
setLanguage(language: string | undefined): void;
|
|
39
49
|
setAccessToken(token: string): void;
|
|
40
50
|
setTokenProvider(provider: TokenProvider | undefined): void;
|
|
41
51
|
hasTokenProvider(): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ApiClient.d.ts","sourceRoot":"","sources":["../../src/core/ApiClient.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"ApiClient.d.ts","sourceRoot":"","sources":["../../src/core/ApiClient.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG,aAAa,CAAC;AAE1D,MAAM,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;AAElD,qBAAa,SAAS;IAelB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,WAAW,CAAC;IAhBtB,OAAO,CAAC,UAAU,CAAC,CAAgB;IACnC,OAAO,CAAC,aAAa,CAAC,CAAgB;IACtC,OAAO,CAAC,eAAe,CAAC,CAAkB;IAC1C,OAAO,CAAC,UAAU,CAA8C;IAChE,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,WAAW,CAA6B;IAChD,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,YAAY,CAAoC;IACxD,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,gBAAgB,CAAiB;IACzC,OAAO,CAAC,QAAQ,CAAC,CAAS;gBAGhB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,WAAW,CAAC,EAAE,MAAM,YAAA;IAK9B,UAAU,IAAI,MAAM;IAIpB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIjC,QAAQ,IAAI,MAAM,GAAG,IAAI;IAIzB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAIpC,cAAc,IAAI,YAAY,GAAG,IAAI;IAIrC,cAAc,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,GAAG,IAAI;IAIlD,iBAAiB,IAAI,cAAc,GAAG,IAAI;IAI1C,iBAAiB,CAAC,EAAE,EAAE,cAAc,GAAG,IAAI,GAAG,IAAI;IAIlD,eAAe,IAAI,mBAAmB,GAAG,IAAI;IAI7C,eAAe,CAAC,KAAK,EAAE,mBAAmB,GAAG,IAAI,GAAG,IAAI;IAIxD,cAAc,IAAI,WAAW,GAAG,IAAI;IAIpC,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,GAAG,IAAI;IAIhD,mBAAmB,IAAI,OAAO;IAI9B,mBAAmB,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;IAI5C,aAAa,IAAI,iBAAiB;IAIlC,qBAAqB,CAAC,EAAE,EAAE,kBAAkB,GAAG,MAAM,IAAI;IAIzD,sBAAsB,CAAC,EAAE,EAAE,mBAAmB,GAAG,MAAM,IAAI;IAI3D,sBAAsB,IAAI,MAAM,GAAG,SAAS;IAI5C,OAAO,IAAI,MAAM;IAIjB,aAAa,IAAI,aAAa,GAAG,SAAS;IAI1C,aAAa,CAAC,UAAU,EAAE,aAAa,GAAG,SAAS,GAAG,IAAI;IAI1D,WAAW,IAAI,MAAM,GAAG,SAAS;IAIjC,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAI/C,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAInC,gBAAgB,CAAC,QAAQ,EAAE,aAAa,GAAG,SAAS,GAAG,IAAI;IAI3D,gBAAgB,IAAI,OAAO;IAIrB,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;CAuBtC"}
|
package/dist/core/ApiClient.js
CHANGED
|
@@ -15,6 +15,9 @@ class ApiClient {
|
|
|
15
15
|
circuitBreaker = null;
|
|
16
16
|
timeout = 30_000;
|
|
17
17
|
deduplicator = null;
|
|
18
|
+
retryConfig = null;
|
|
19
|
+
validateResponse = true;
|
|
20
|
+
language;
|
|
18
21
|
constructor(clientId, link, accessToken) {
|
|
19
22
|
this.clientId = clientId;
|
|
20
23
|
this.link = link;
|
|
@@ -51,6 +54,18 @@ class ApiClient {
|
|
|
51
54
|
setDeduplicator(dedup) {
|
|
52
55
|
this.deduplicator = dedup;
|
|
53
56
|
}
|
|
57
|
+
getRetryConfig() {
|
|
58
|
+
return this.retryConfig;
|
|
59
|
+
}
|
|
60
|
+
setRetryConfig(config) {
|
|
61
|
+
this.retryConfig = config;
|
|
62
|
+
}
|
|
63
|
+
getValidateResponse() {
|
|
64
|
+
return this.validateResponse;
|
|
65
|
+
}
|
|
66
|
+
setValidateResponse(validate) {
|
|
67
|
+
this.validateResponse = validate;
|
|
68
|
+
}
|
|
54
69
|
getMiddleware() {
|
|
55
70
|
return this.middleware;
|
|
56
71
|
}
|
|
@@ -72,6 +87,12 @@ class ApiClient {
|
|
|
72
87
|
setDatasource(datasource) {
|
|
73
88
|
this.datasource = datasource;
|
|
74
89
|
}
|
|
90
|
+
getLanguage() {
|
|
91
|
+
return this.language;
|
|
92
|
+
}
|
|
93
|
+
setLanguage(language) {
|
|
94
|
+
this.language = language;
|
|
95
|
+
}
|
|
75
96
|
setAccessToken(token) {
|
|
76
97
|
this.accessToken = token;
|
|
77
98
|
}
|
|
@@ -5,7 +5,10 @@ export interface EsiHandlerResponse {
|
|
|
5
5
|
body: unknown;
|
|
6
6
|
fromCache?: boolean;
|
|
7
7
|
stale?: boolean;
|
|
8
|
+
cacheHitType?: 'spec-ttl' | 'etag-304' | 'stale-on-error';
|
|
9
|
+
responseTimeMs?: number;
|
|
8
10
|
cursors?: CursorTokens;
|
|
9
11
|
}
|
|
10
|
-
export declare const
|
|
12
|
+
export declare const handleSinglePageRequest: (client: ApiClient, endpoint: string, method: string, body?: unknown, requiresAuth?: boolean) => Promise<EsiHandlerResponse>;
|
|
13
|
+
export declare const handleRequest: (client: ApiClient, endpoint: string, method: string, body?: unknown, requiresAuth?: boolean, useETag?: boolean, templatePath?: string, requestTimeout?: number) => Promise<EsiHandlerResponse>;
|
|
11
14
|
//# sourceMappingURL=ApiRequestHandler.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ApiRequestHandler.d.ts","sourceRoot":"","sources":["../../src/core/ApiRequestHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAYxC,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;
|
|
1
|
+
{"version":3,"file":"ApiRequestHandler.d.ts","sourceRoot":"","sources":["../../src/core/ApiRequestHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAYxC,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AASpE,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,UAAU,GAAG,UAAU,GAAG,gBAAgB,CAAC;IAC1D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,YAAY,CAAC;CACxB;AA0oBD,eAAO,MAAM,uBAAuB,GAClC,QAAQ,SAAS,EACjB,UAAU,MAAM,EAChB,QAAQ,MAAM,EACd,OAAO,OAAO,EACd,eAAc,OAAe,KAC5B,OAAO,CAAC,kBAAkB,CAS5B,CAAC;AAEF,eAAO,MAAM,aAAa,GACxB,QAAQ,SAAS,EACjB,UAAU,MAAM,EAChB,QAAQ,MAAM,EACd,OAAO,OAAO,EACd,eAAc,OAAe,EAC7B,UAAS,OAAc,EACvB,eAAe,MAAM,EACrB,iBAAiB,MAAM,KACtB,OAAO,CAAC,kBAAkB,CA8F5B,CAAC"}
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.handleRequest = void 0;
|
|
3
|
+
exports.handleRequest = exports.handleSinglePageRequest = void 0;
|
|
4
4
|
const error_1 = require("../core/util/error");
|
|
5
5
|
const loggerUtil_1 = require("../core/logger/loggerUtil");
|
|
6
6
|
const headersUtil_1 = require("../core/util/headersUtil");
|
|
7
7
|
const PaginationHandler_1 = require("./pagination/PaginationHandler");
|
|
8
8
|
const constants_1 = require("./constants");
|
|
9
|
+
const esi_cache_ttls_generated_1 = require("./endpoints/esi-cache-ttls.generated");
|
|
10
|
+
const retry_1 = require("./util/retry");
|
|
11
|
+
const sleep_1 = require("./util/sleep");
|
|
12
|
+
const CircuitBreaker_1 = require("./circuitBreaker/CircuitBreaker");
|
|
9
13
|
const STATUS_MESSAGES = {
|
|
10
14
|
201: 'Created',
|
|
11
15
|
204: 'No Content',
|
|
@@ -38,6 +42,39 @@ function resolveCircuitBreaker(client) {
|
|
|
38
42
|
return client.getCircuitBreaker();
|
|
39
43
|
}
|
|
40
44
|
// --- Pure helpers ---
|
|
45
|
+
const stringUtil_1 = require("./util/stringUtil");
|
|
46
|
+
function lookupSpecTtl(method, templatePath) {
|
|
47
|
+
const normalized = templatePath
|
|
48
|
+
.replace(/\/$/, '')
|
|
49
|
+
.replace(/\{(\w+)\}/g, (_, name) => `{${(0, stringUtil_1.camelToSnake)(name)}}`);
|
|
50
|
+
const key = `${method}:${normalized}`;
|
|
51
|
+
const seconds = esi_cache_ttls_generated_1.esiCacheTtls[key];
|
|
52
|
+
return typeof seconds === 'number' ? seconds * 1000 : undefined;
|
|
53
|
+
}
|
|
54
|
+
function trySpecAwareCacheHit(client, url, method, templatePath) {
|
|
55
|
+
if (method !== 'GET' || !templatePath)
|
|
56
|
+
return null;
|
|
57
|
+
const specTtlMs = lookupSpecTtl(method, templatePath);
|
|
58
|
+
if (!specTtlMs)
|
|
59
|
+
return null;
|
|
60
|
+
const cache = resolveCache(client);
|
|
61
|
+
if (!cache)
|
|
62
|
+
return null;
|
|
63
|
+
const entry = cache.get(url);
|
|
64
|
+
if (!entry)
|
|
65
|
+
return null;
|
|
66
|
+
const age = Date.now() - entry.timestamp;
|
|
67
|
+
if (age < specTtlMs) {
|
|
68
|
+
(0, loggerUtil_1.logDebug)(`Spec-aware cache hit for ${url} (age=${Math.round(age / 1000)}s, ttl=${Math.round(specTtlMs / 1000)}s)`);
|
|
69
|
+
return {
|
|
70
|
+
headers: entry.headers,
|
|
71
|
+
body: entry.data,
|
|
72
|
+
fromCache: true,
|
|
73
|
+
cacheHitType: 'spec-ttl',
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
41
78
|
const parseCacheControlTtl = (headers) => {
|
|
42
79
|
const cacheControl = headers['cache-control'] ?? headers['Cache-Control'];
|
|
43
80
|
if (!cacheControl)
|
|
@@ -51,6 +88,10 @@ function buildRequestHeaders(client, url, method, requiresAuth, useETag, body) {
|
|
|
51
88
|
'User-Agent': constants_1.USER_AGENT,
|
|
52
89
|
'X-Compatibility-Date': constants_1.COMPATIBILITY_DATE,
|
|
53
90
|
};
|
|
91
|
+
const language = client.getLanguage();
|
|
92
|
+
if (language) {
|
|
93
|
+
headers['Accept-Language'] = language;
|
|
94
|
+
}
|
|
54
95
|
if (requiresAuth) {
|
|
55
96
|
const authHeader = client.getAuthorizationHeader();
|
|
56
97
|
if (!authHeader) {
|
|
@@ -89,6 +130,7 @@ function handleEarlyStatus(client, status, url, parsed, useETag) {
|
|
|
89
130
|
headers: { ...cachedEntry.headers, ...parsed.raw },
|
|
90
131
|
body: cachedEntry.data,
|
|
91
132
|
fromCache: true,
|
|
133
|
+
cacheHitType: 'etag-304',
|
|
92
134
|
};
|
|
93
135
|
}
|
|
94
136
|
}
|
|
@@ -108,6 +150,7 @@ function tryStaleCacheResponse(client, url, parsed) {
|
|
|
108
150
|
body: cachedEntry.data,
|
|
109
151
|
fromCache: true,
|
|
110
152
|
stale: true,
|
|
153
|
+
cacheHitType: 'stale-on-error',
|
|
111
154
|
};
|
|
112
155
|
}
|
|
113
156
|
function cacheResponse(client, url, method, endpoint, parsed, data, useETag) {
|
|
@@ -141,7 +184,7 @@ function handleCursorPagination(parsed, data) {
|
|
|
141
184
|
};
|
|
142
185
|
return { headers: parsed.raw, body: data, cursors };
|
|
143
186
|
}
|
|
144
|
-
async function handleOffsetPagination(client, endpoint, method, requiresAuth, parsed, data, body, url, useETag, pageFetch) {
|
|
187
|
+
async function handleOffsetPagination(client, endpoint, method, requiresAuth, parsed, data, body, url, useETag, pageFetch, templatePath) {
|
|
145
188
|
const totalPages = parsed.xPages;
|
|
146
189
|
if (totalPages <= 1) {
|
|
147
190
|
return { headers: parsed.raw, body: data };
|
|
@@ -153,7 +196,7 @@ async function handleOffsetPagination(client, endpoint, method, requiresAuth, pa
|
|
|
153
196
|
maxPages: Math.min(totalPages, 1000),
|
|
154
197
|
stopOnEmptyPage: true,
|
|
155
198
|
maxRetries: 3,
|
|
156
|
-
}, pageFetch);
|
|
199
|
+
}, pageFetch, templatePath);
|
|
157
200
|
cacheResponse(client, url, method, endpoint, parsed, allData, useETag);
|
|
158
201
|
return { headers: parsed.raw, body: allData };
|
|
159
202
|
}
|
|
@@ -222,7 +265,7 @@ function handleErrorResponse(client, response, url, parsed, useETag) {
|
|
|
222
265
|
throw new error_1.EsiError(response.status, errorMessage, url, parsed.requestId ?? undefined);
|
|
223
266
|
}
|
|
224
267
|
function wrapError(error) {
|
|
225
|
-
if (error instanceof error_1.EsiError) {
|
|
268
|
+
if (error instanceof error_1.EsiError || error instanceof CircuitBreaker_1.CircuitOpenError) {
|
|
226
269
|
throw error;
|
|
227
270
|
}
|
|
228
271
|
if (error instanceof Error) {
|
|
@@ -232,7 +275,7 @@ function wrapError(error) {
|
|
|
232
275
|
(0, loggerUtil_1.logError)(`Unexpected error: ${String(error)}`);
|
|
233
276
|
throw (0, error_1.buildError)(String(error), 'ESIJS_ERROR');
|
|
234
277
|
}
|
|
235
|
-
async function executeSingleFetch(client, endpoint, method, body, requiresAuth, useETag) {
|
|
278
|
+
async function executeSingleFetch(client, endpoint, method, body, requiresAuth, useETag, requestTimeout, templatePath) {
|
|
236
279
|
const rawUrl = `${client.getLink()}/${endpoint}`;
|
|
237
280
|
const builtHeaders = buildRequestHeaders(client, rawUrl, method, requiresAuth, useETag, body);
|
|
238
281
|
const req = await applyRequestMiddleware(client, rawUrl, endpoint, method, builtHeaders, body);
|
|
@@ -247,8 +290,8 @@ async function executeSingleFetch(client, endpoint, method, body, requiresAuth,
|
|
|
247
290
|
if (cb)
|
|
248
291
|
cb.checkCircuit(endpoint);
|
|
249
292
|
const rateLimiter = resolveRateLimiter(client);
|
|
250
|
-
await rateLimiter.checkRateLimit();
|
|
251
|
-
const timeoutMs = client.getTimeout();
|
|
293
|
+
await rateLimiter.checkRateLimit(templatePath, method, req.headers);
|
|
294
|
+
const timeoutMs = requestTimeout ?? client.getTimeout();
|
|
252
295
|
const controller = new AbortController();
|
|
253
296
|
const timer = globalThis.setTimeout(() => controller.abort(), timeoutMs);
|
|
254
297
|
options.signal = controller.signal;
|
|
@@ -259,13 +302,13 @@ async function executeSingleFetch(client, endpoint, method, body, requiresAuth,
|
|
|
259
302
|
catch (err) {
|
|
260
303
|
clearTimeout(timer);
|
|
261
304
|
if (err instanceof Error && err.name === 'AbortError') {
|
|
262
|
-
throw new error_1.
|
|
305
|
+
throw new error_1.TimeoutError(timeoutMs, url);
|
|
263
306
|
}
|
|
264
307
|
throw err;
|
|
265
308
|
}
|
|
266
309
|
clearTimeout(timer);
|
|
267
310
|
const parsed = (0, headersUtil_1.parseHeaders)(response.headers);
|
|
268
|
-
rateLimiter.updateFromResponse(parsed.raw, response.status);
|
|
311
|
+
rateLimiter.updateFromResponse(parsed.raw, response.status, templatePath, method, req.headers);
|
|
269
312
|
if (cb) {
|
|
270
313
|
if (response.status >= 500 ||
|
|
271
314
|
response.status === 420 ||
|
|
@@ -281,22 +324,23 @@ async function executeSingleFetch(client, endpoint, method, body, requiresAuth,
|
|
|
281
324
|
}
|
|
282
325
|
return { response, parsed, url };
|
|
283
326
|
}
|
|
284
|
-
async function fetchOnePage(client, endpoint, method, body, requiresAuth = false, useETag = false) {
|
|
285
|
-
const { response, parsed, url } = await executeSingleFetch(client, endpoint, method, body, requiresAuth, useETag);
|
|
327
|
+
async function fetchOnePage(client, endpoint, method, body, requiresAuth = false, useETag = false, requestTimeout, templatePath) {
|
|
328
|
+
const { response, parsed, url } = await executeSingleFetch(client, endpoint, method, body, requiresAuth, useETag, requestTimeout, templatePath);
|
|
286
329
|
if (!response.ok) {
|
|
287
330
|
throw new error_1.EsiError(response.status, STATUS_MESSAGES[response.status] || response.statusText, url, parsed.requestId ?? undefined);
|
|
288
331
|
}
|
|
289
332
|
const data = await parseJsonBody(response, url);
|
|
290
333
|
return { data, parsed, url };
|
|
291
334
|
}
|
|
292
|
-
const executeRequest = async (client, endpoint, method, body, requiresAuth = false, useETag = true) => {
|
|
335
|
+
const executeRequest = async (client, endpoint, method, body, requiresAuth = false, useETag = true, requestTimeout, templatePath) => {
|
|
293
336
|
const startTime = Date.now();
|
|
294
337
|
const finish = (r) => {
|
|
338
|
+
r.responseTimeMs = Date.now() - startTime;
|
|
295
339
|
const rawUrl = `${client.getLink()}/${endpoint}`;
|
|
296
340
|
return applyResponseInterceptors(client, r, rawUrl, endpoint, method, startTime);
|
|
297
341
|
};
|
|
298
342
|
try {
|
|
299
|
-
const { response, parsed, url } = await executeSingleFetch(client, endpoint, method, body, requiresAuth, useETag);
|
|
343
|
+
const { response, parsed, url } = await executeSingleFetch(client, endpoint, method, body, requiresAuth, useETag, requestTimeout, templatePath);
|
|
300
344
|
if (response.status === 201) {
|
|
301
345
|
let data;
|
|
302
346
|
try {
|
|
@@ -320,50 +364,81 @@ const executeRequest = async (client, endpoint, method, body, requiresAuth = fal
|
|
|
320
364
|
if (cursorResult)
|
|
321
365
|
return finish(cursorResult);
|
|
322
366
|
const pageFetch = async (paginatedEndpoint) => {
|
|
323
|
-
const result = await fetchOnePage(client, paginatedEndpoint, method, body, requiresAuth);
|
|
367
|
+
const result = await fetchOnePage(client, paginatedEndpoint, method, body, requiresAuth, false, requestTimeout, templatePath);
|
|
324
368
|
return Array.isArray(result.data)
|
|
325
369
|
? result.data
|
|
326
370
|
: [result.data];
|
|
327
371
|
};
|
|
328
|
-
const paginatedResult = await handleOffsetPagination(client, endpoint, method, requiresAuth, parsed, data, body, url, useETag, pageFetch);
|
|
372
|
+
const paginatedResult = await handleOffsetPagination(client, endpoint, method, requiresAuth, parsed, data, body, url, useETag, pageFetch, templatePath);
|
|
329
373
|
return finish(paginatedResult);
|
|
330
374
|
}
|
|
331
375
|
catch (error) {
|
|
332
376
|
wrapError(error);
|
|
333
377
|
}
|
|
334
378
|
};
|
|
335
|
-
const
|
|
336
|
-
const
|
|
379
|
+
const handleSinglePageRequest = async (client, endpoint, method, body, requiresAuth = false) => {
|
|
380
|
+
const { data, parsed } = await fetchOnePage(client, endpoint, method, body, requiresAuth);
|
|
381
|
+
return { headers: parsed.raw, body: data };
|
|
382
|
+
};
|
|
383
|
+
exports.handleSinglePageRequest = handleSinglePageRequest;
|
|
384
|
+
const handleRequest = async (client, endpoint, method, body, requiresAuth = false, useETag = true, templatePath, requestTimeout) => {
|
|
385
|
+
const rawUrl = `${client.getLink()}/${endpoint}`;
|
|
386
|
+
const specHit = trySpecAwareCacheHit(client, rawUrl, method, templatePath);
|
|
387
|
+
if (specHit)
|
|
388
|
+
return specHit;
|
|
389
|
+
const doExecute = () => executeRequest(client, endpoint, method, body, requiresAuth, useETag, requestTimeout, templatePath);
|
|
337
390
|
const dedup = client.getDeduplicator();
|
|
338
391
|
const canDedup = dedup && method === 'GET' && !body;
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
392
|
+
const retryConfig = client.getRetryConfig();
|
|
393
|
+
const maxRetries = retryConfig?.maxRetries ?? 0;
|
|
394
|
+
const canRetryMethod = method === 'GET' || retryConfig?.retryMutations === true;
|
|
395
|
+
const baseDelayMs = retryConfig?.baseDelayMs ?? 1000;
|
|
396
|
+
const maxDelayMs = retryConfig?.maxDelayMs ?? 30000;
|
|
397
|
+
let lastError;
|
|
398
|
+
for (let attempt = 0; attempt <= maxRetries; attempt++) {
|
|
399
|
+
try {
|
|
400
|
+
return canDedup
|
|
401
|
+
? await dedup.dedupe(endpoint, doExecute)
|
|
402
|
+
: await doExecute();
|
|
403
|
+
}
|
|
404
|
+
catch (error) {
|
|
405
|
+
if (error instanceof CircuitBreaker_1.CircuitOpenError) {
|
|
406
|
+
throw error;
|
|
354
407
|
}
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
408
|
+
if (error instanceof error_1.EsiError &&
|
|
409
|
+
error.statusCode === 401 &&
|
|
410
|
+
requiresAuth &&
|
|
411
|
+
client.hasTokenProvider()) {
|
|
412
|
+
(0, loggerUtil_1.logInfo)('Received 401, attempting token refresh...');
|
|
413
|
+
try {
|
|
414
|
+
await client.refreshToken();
|
|
415
|
+
(0, loggerUtil_1.logInfo)('Token refreshed, retrying request');
|
|
416
|
+
return await executeRequest(client, endpoint, method, body, requiresAuth, useETag, requestTimeout);
|
|
417
|
+
}
|
|
418
|
+
catch (refreshError) {
|
|
419
|
+
if (refreshError instanceof error_1.EsiError) {
|
|
420
|
+
throw refreshError;
|
|
421
|
+
}
|
|
422
|
+
const msg = refreshError instanceof Error
|
|
423
|
+
? refreshError.message
|
|
424
|
+
: String(refreshError);
|
|
425
|
+
(0, loggerUtil_1.logError)(`Token refresh failed: ${msg}`);
|
|
426
|
+
throw (0, error_1.buildError)(`Token refresh failed: ${msg}`, 'TOKEN_REFRESH_FAILED');
|
|
358
427
|
}
|
|
359
|
-
const msg = refreshError instanceof Error
|
|
360
|
-
? refreshError.message
|
|
361
|
-
: String(refreshError);
|
|
362
|
-
(0, loggerUtil_1.logError)(`Token refresh failed: ${msg}`);
|
|
363
|
-
throw (0, error_1.buildError)(`Token refresh failed: ${msg}`, 'TOKEN_REFRESH_FAILED');
|
|
364
428
|
}
|
|
429
|
+
if (error instanceof error_1.EsiError &&
|
|
430
|
+
error.retryable &&
|
|
431
|
+
canRetryMethod &&
|
|
432
|
+
attempt < maxRetries) {
|
|
433
|
+
const delay = (0, retry_1.retryDelay)(attempt, baseDelayMs, maxDelayMs);
|
|
434
|
+
(0, loggerUtil_1.logWarn)(`Request to ${endpoint} failed (${error.statusCode}), retrying in ${Math.round(delay)}ms (attempt ${attempt + 1}/${maxRetries})`);
|
|
435
|
+
await (0, sleep_1.sleep)(delay);
|
|
436
|
+
lastError = error;
|
|
437
|
+
continue;
|
|
438
|
+
}
|
|
439
|
+
throw error;
|
|
365
440
|
}
|
|
366
|
-
throw error;
|
|
367
441
|
}
|
|
442
|
+
throw lastError;
|
|
368
443
|
};
|
|
369
444
|
exports.handleRequest = handleRequest;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { EsiError } from './util/error';
|
|
2
|
+
export interface BatchOptions {
|
|
3
|
+
concurrency?: number;
|
|
4
|
+
onProgress?: (completed: number, total: number) => void;
|
|
5
|
+
}
|
|
6
|
+
export interface BatchResult<K, T> {
|
|
7
|
+
results: Map<K, T>;
|
|
8
|
+
errors: Map<K, EsiError | Error>;
|
|
9
|
+
}
|
|
10
|
+
export declare function batchFetch<K, T>(keys: K[], fetcher: (key: K) => Promise<T>, options?: BatchOptions): Promise<BatchResult<K, T>>;
|
|
11
|
+
export declare function batchPost<T>(ids: number[], poster: (chunk: number[]) => Promise<T[]>, chunkSize?: number): Promise<T[]>;
|
|
12
|
+
//# sourceMappingURL=BatchRequestHandler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BatchRequestHandler.d.ts","sourceRoot":"","sources":["../../src/core/BatchRequestHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAGxC,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACzD;AAED,MAAM,WAAW,WAAW,CAAC,CAAC,EAAE,CAAC;IAC/B,OAAO,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACnB,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAC,CAAC;CAClC;AAED,wBAAsB,UAAU,CAAC,CAAC,EAAE,CAAC,EACnC,IAAI,EAAE,CAAC,EAAE,EACT,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,EAC/B,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAqD5B;AAED,wBAAsB,SAAS,CAAC,CAAC,EAC/B,GAAG,EAAE,MAAM,EAAE,EACb,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,CAAC,EAAE,CAAC,EACzC,SAAS,GAAE,MAAa,GACvB,OAAO,CAAC,CAAC,EAAE,CAAC,CAiBd"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.batchFetch = batchFetch;
|
|
4
|
+
exports.batchPost = batchPost;
|
|
5
|
+
const error_1 = require("./util/error");
|
|
6
|
+
const loggerUtil_1 = require("./logger/loggerUtil");
|
|
7
|
+
async function batchFetch(keys, fetcher, options = {}) {
|
|
8
|
+
const concurrency = options.concurrency ?? 20;
|
|
9
|
+
const results = new Map();
|
|
10
|
+
const errors = new Map();
|
|
11
|
+
let completed = 0;
|
|
12
|
+
let running = 0;
|
|
13
|
+
let index = 0;
|
|
14
|
+
(0, loggerUtil_1.logInfo)(`Batch fetch: ${keys.length} items, concurrency=${concurrency}`);
|
|
15
|
+
return new Promise((resolve) => {
|
|
16
|
+
function next() {
|
|
17
|
+
while (running < concurrency && index < keys.length) {
|
|
18
|
+
const currentIndex = index++;
|
|
19
|
+
const key = keys[currentIndex];
|
|
20
|
+
running++;
|
|
21
|
+
fetcher(key)
|
|
22
|
+
.then((result) => {
|
|
23
|
+
results.set(key, result);
|
|
24
|
+
})
|
|
25
|
+
.catch((err) => {
|
|
26
|
+
const error = err instanceof error_1.EsiError || err instanceof Error
|
|
27
|
+
? err
|
|
28
|
+
: new Error(String(err));
|
|
29
|
+
errors.set(key, error);
|
|
30
|
+
})
|
|
31
|
+
.finally(() => {
|
|
32
|
+
running--;
|
|
33
|
+
completed++;
|
|
34
|
+
if (options.onProgress) {
|
|
35
|
+
options.onProgress(completed, keys.length);
|
|
36
|
+
}
|
|
37
|
+
if (completed === keys.length) {
|
|
38
|
+
(0, loggerUtil_1.logDebug)(`Batch complete: ${results.size} succeeded, ${errors.size} failed`);
|
|
39
|
+
resolve({ results, errors });
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
next();
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
if (keys.length === 0) {
|
|
48
|
+
resolve({ results, errors });
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
next();
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
async function batchPost(ids, poster, chunkSize = 1000) {
|
|
55
|
+
const chunks = [];
|
|
56
|
+
for (let i = 0; i < ids.length; i += chunkSize) {
|
|
57
|
+
chunks.push(ids.slice(i, i + chunkSize));
|
|
58
|
+
}
|
|
59
|
+
(0, loggerUtil_1.logInfo)(`Batch POST: ${ids.length} IDs in ${chunks.length} chunks of ${chunkSize}`);
|
|
60
|
+
const results = [];
|
|
61
|
+
for (const chunk of chunks) {
|
|
62
|
+
const chunkResult = await poster(chunk);
|
|
63
|
+
results.push(...chunkResult);
|
|
64
|
+
}
|
|
65
|
+
return results;
|
|
66
|
+
}
|
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 = "5.
|
|
3
|
-
export declare const USER_AGENT = "esi.ts/5.
|
|
2
|
+
export declare const PACKAGE_VERSION = "5.3.0";
|
|
3
|
+
export declare const USER_AGENT = "esi.ts/5.3.0";
|
|
4
4
|
export declare const COMPATIBILITY_DATE = "2026-05-19";
|
|
5
5
|
//# sourceMappingURL=constants.d.ts.map
|