@lgriffin/esi.ts 9.4.0 → 9.7.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.
Files changed (130) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/README.md +71 -52
  3. package/dist/EsiClient.d.ts +4 -0
  4. package/dist/EsiClient.d.ts.map +1 -1
  5. package/dist/clients/AllianceClient.d.ts +2 -0
  6. package/dist/clients/AllianceClient.d.ts.map +1 -1
  7. package/dist/clients/AssetsClient.d.ts +2 -0
  8. package/dist/clients/AssetsClient.d.ts.map +1 -1
  9. package/dist/clients/BaseEsiClient.d.ts +1 -0
  10. package/dist/clients/BaseEsiClient.d.ts.map +1 -1
  11. package/dist/clients/CalendarClient.d.ts +2 -0
  12. package/dist/clients/CalendarClient.d.ts.map +1 -1
  13. package/dist/clients/CharacterClient.d.ts +8 -0
  14. package/dist/clients/CharacterClient.d.ts.map +1 -1
  15. package/dist/clients/ClonesClient.d.ts +1 -0
  16. package/dist/clients/ClonesClient.d.ts.map +1 -1
  17. package/dist/clients/ContactsClient.d.ts +6 -0
  18. package/dist/clients/ContactsClient.d.ts.map +1 -1
  19. package/dist/clients/ContractsClient.d.ts +3 -0
  20. package/dist/clients/ContractsClient.d.ts.map +1 -1
  21. package/dist/clients/CorporationsClient.d.ts +17 -0
  22. package/dist/clients/CorporationsClient.d.ts.map +1 -1
  23. package/dist/clients/CosmeticsClient.d.ts +11 -0
  24. package/dist/clients/CosmeticsClient.d.ts.map +1 -0
  25. package/dist/clients/FittingsClient.d.ts +1 -0
  26. package/dist/clients/FittingsClient.d.ts.map +1 -1
  27. package/dist/clients/FleetClient.d.ts +2 -0
  28. package/dist/clients/FleetClient.d.ts.map +1 -1
  29. package/dist/clients/IndustryClient.d.ts +8 -0
  30. package/dist/clients/IndustryClient.d.ts.map +1 -1
  31. package/dist/clients/KillmailsClient.d.ts +2 -0
  32. package/dist/clients/KillmailsClient.d.ts.map +1 -1
  33. package/dist/clients/LoyaltyClient.d.ts +2 -0
  34. package/dist/clients/LoyaltyClient.d.ts.map +1 -1
  35. package/dist/clients/MailClient.d.ts +5 -0
  36. package/dist/clients/MailClient.d.ts.map +1 -1
  37. package/dist/clients/MarketClient.d.ts +6 -0
  38. package/dist/clients/MarketClient.d.ts.map +1 -1
  39. package/dist/clients/MercenaryClient.d.ts +19 -1
  40. package/dist/clients/MercenaryClient.d.ts.map +1 -1
  41. package/dist/clients/ParagonHubClient.d.ts +13 -0
  42. package/dist/clients/ParagonHubClient.d.ts.map +1 -0
  43. package/dist/clients/PiClient.d.ts +2 -0
  44. package/dist/clients/PiClient.d.ts.map +1 -1
  45. package/dist/clients/SkillsClient.d.ts +1 -0
  46. package/dist/clients/SkillsClient.d.ts.map +1 -1
  47. package/dist/clients/SkyhooksClient.d.ts +19 -1
  48. package/dist/clients/SkyhooksClient.d.ts.map +1 -1
  49. package/dist/clients/WalletClient.d.ts +4 -0
  50. package/dist/clients/WalletClient.d.ts.map +1 -1
  51. package/dist/clients/WarsClient.d.ts +2 -0
  52. package/dist/clients/WarsClient.d.ts.map +1 -1
  53. package/dist/core/ApiClient.d.ts +4 -0
  54. package/dist/core/ApiClient.d.ts.map +1 -1
  55. package/dist/core/ApiClientBuilder.d.ts +3 -1
  56. package/dist/core/ApiClientBuilder.d.ts.map +1 -1
  57. package/dist/core/ApiRequestHandler.d.ts.map +1 -1
  58. package/dist/core/ClientRegistry.d.ts +5 -3
  59. package/dist/core/ClientRegistry.d.ts.map +1 -1
  60. package/dist/core/cache/cacheKey.d.ts +3 -0
  61. package/dist/core/cache/cacheKey.d.ts.map +1 -0
  62. package/dist/core/constants.d.ts +2 -2
  63. package/dist/core/endpoints/EndpointDefinition.d.ts +2 -2
  64. package/dist/core/endpoints/EndpointDefinition.d.ts.map +1 -1
  65. package/dist/core/endpoints/cosmeticsEndpoints.d.ts +52 -0
  66. package/dist/core/endpoints/cosmeticsEndpoints.d.ts.map +1 -0
  67. package/dist/core/endpoints/createClient.d.ts +2 -2
  68. package/dist/core/endpoints/createClient.d.ts.map +1 -1
  69. package/dist/core/endpoints/mercenaryEndpoints.d.ts +45 -0
  70. package/dist/core/endpoints/mercenaryEndpoints.d.ts.map +1 -1
  71. package/dist/core/endpoints/paragonHubEndpoints.d.ts +163 -0
  72. package/dist/core/endpoints/paragonHubEndpoints.d.ts.map +1 -0
  73. package/dist/core/endpoints/skyhookEndpoints.d.ts +64 -0
  74. package/dist/core/endpoints/skyhookEndpoints.d.ts.map +1 -1
  75. package/dist/core/logger/NoopLogger.d.ts +3 -0
  76. package/dist/core/logger/NoopLogger.d.ts.map +1 -0
  77. package/dist/core/pagination/AsyncPaginationIterator.d.ts +1 -0
  78. package/dist/core/pagination/AsyncPaginationIterator.d.ts.map +1 -1
  79. package/dist/core/rateLimiter/RateLimiter.d.ts +6 -0
  80. package/dist/core/rateLimiter/RateLimiter.d.ts.map +1 -1
  81. package/dist/core/requestPipeline/cachePolicy.d.ts +3 -3
  82. package/dist/core/requestPipeline/cachePolicy.d.ts.map +1 -1
  83. package/dist/core/requestPipeline/headers.d.ts.map +1 -1
  84. package/dist/core/requestPipeline/statusHandling.d.ts +2 -2
  85. package/dist/core/requestPipeline/statusHandling.d.ts.map +1 -1
  86. package/dist/index.d.ts +6 -3
  87. package/dist/index.d.ts.map +1 -1
  88. package/dist/index.js +1141 -76
  89. package/dist/index.js.map +1 -1
  90. package/dist/index.mjs +1137 -76
  91. package/dist/index.mjs.map +1 -1
  92. package/dist/schemas/common.d.ts +11 -1
  93. package/dist/schemas/common.d.ts.map +1 -1
  94. package/dist/schemas/cosmetics.d.ts +58 -0
  95. package/dist/schemas/cosmetics.d.ts.map +1 -0
  96. package/dist/schemas/index.d.ts +2 -0
  97. package/dist/schemas/index.d.ts.map +1 -1
  98. package/dist/schemas/index.js +1467 -1192
  99. package/dist/schemas/index.js.map +1 -1
  100. package/dist/schemas/index.mjs +1433 -1192
  101. package/dist/schemas/index.mjs.map +1 -1
  102. package/dist/schemas/mercenary.d.ts +54 -0
  103. package/dist/schemas/mercenary.d.ts.map +1 -1
  104. package/dist/schemas/paragon-hub.d.ts +96 -0
  105. package/dist/schemas/paragon-hub.d.ts.map +1 -0
  106. package/dist/schemas/skyhooks.d.ts +101 -0
  107. package/dist/schemas/skyhooks.d.ts.map +1 -1
  108. package/dist/sde/index.js +7 -5100
  109. package/dist/sde/index.js.map +1 -1
  110. package/dist/sde/index.mjs +12 -5134
  111. package/dist/sde/index.mjs.map +1 -1
  112. package/dist/sde/memory.d.ts +8 -0
  113. package/dist/sde/memory.d.ts.map +1 -0
  114. package/dist/sde/memory.js +1100 -0
  115. package/dist/sde/memory.js.map +1 -0
  116. package/dist/sde/memory.mjs +1064 -0
  117. package/dist/sde/memory.mjs.map +1 -0
  118. package/dist/types/api-responses.d.ts +2 -0
  119. package/dist/types/api-responses.d.ts.map +1 -1
  120. package/dist/types/cosmetics.d.ts +8 -0
  121. package/dist/types/cosmetics.d.ts.map +1 -0
  122. package/dist/types/generated/esi-spec.generated.d.ts +12 -12
  123. package/dist/types/generated/esi-spec.generated.d.ts.map +1 -1
  124. package/dist/types/mercenary.d.ts +3 -1
  125. package/dist/types/mercenary.d.ts.map +1 -1
  126. package/dist/types/paragon-hub.d.ts +8 -0
  127. package/dist/types/paragon-hub.d.ts.map +1 -0
  128. package/dist/types/skyhooks.d.ts +3 -1
  129. package/dist/types/skyhooks.d.ts.map +1 -1
  130. package/package.json +30 -9
package/dist/index.js CHANGED
@@ -46,6 +46,7 @@ __export(index_exports, {
46
46
  ContractsClient: () => ContractsClient,
47
47
  CorporationProjectsClient: () => CorporationProjectsClient,
48
48
  CorporationsClient: () => CorporationsClient,
49
+ CosmeticsClient: () => CosmeticsClient,
49
50
  CustomEsiClient: () => CustomEsiClient,
50
51
  DogmaClient: () => DogmaClient,
51
52
  ETagCacheManager: () => ETagCacheManager,
@@ -71,6 +72,7 @@ __export(index_exports, {
71
72
  MercenaryClient: () => MercenaryClient,
72
73
  MetaClient: () => MetaClient,
73
74
  MilitaryCampaignsClient: () => MilitaryCampaignsClient,
75
+ ParagonHubClient: () => ParagonHubClient,
74
76
  PiClient: () => PiClient,
75
77
  RateLimiter: () => RateLimiter,
76
78
  RequestDeduplicator: () => RequestDeduplicator,
@@ -90,8 +92,10 @@ __export(index_exports, {
90
92
  brand: () => brand,
91
93
  buildEndpointPath: () => buildEndpointPath,
92
94
  configureApiClient: () => configureApiClient,
95
+ createNoopLogger: () => createNoopLogger,
93
96
  esiEndpointScopes: () => esiEndpointScopes,
94
97
  fetchAllCursorPages: () => fetchAllCursorPages,
98
+ fetchAllPages: () => fetchAllPages,
95
99
  fetchPages: () => fetchPages,
96
100
  getDefaultClient: () => getDefaultClient,
97
101
  isCircuitOpen: () => isCircuitOpen,
@@ -179,6 +183,7 @@ var ApiClient = class {
179
183
  validateRequest = false;
180
184
  language;
181
185
  compatibilityDate;
186
+ fetchFn = null;
182
187
  getTimeout() {
183
188
  return this.timeout;
184
189
  }
@@ -233,6 +238,12 @@ var ApiClient = class {
233
238
  setValidateRequest(validate) {
234
239
  this.validateRequest = validate;
235
240
  }
241
+ getFetch() {
242
+ return this.fetchFn ?? globalThis.fetch;
243
+ }
244
+ setFetch(fn) {
245
+ this.fetchFn = fn;
246
+ }
236
247
  getMiddleware() {
237
248
  return this.middleware;
238
249
  }
@@ -267,9 +278,6 @@ var ApiClient = class {
267
278
  this.compatibilityDate = date;
268
279
  }
269
280
  setAccessToken(token) {
270
- if (this.accessToken !== token) {
271
- this.cache?.clear();
272
- }
273
281
  this.accessToken = token;
274
282
  }
275
283
  setTokenProvider(provider) {
@@ -303,9 +311,6 @@ var ApiClient = class {
303
311
  }
304
312
  this.refreshInFlight = this.tokenProvider().then(
305
313
  (token) => {
306
- if (this.accessToken !== token) {
307
- this.cache?.clear();
308
- }
309
314
  this.accessToken = token;
310
315
  this.refreshInFlight = void 0;
311
316
  return token;
@@ -649,9 +654,19 @@ function isValidationError(error) {
649
654
  return error instanceof EsiValidationError;
650
655
  }
651
656
 
657
+ // src/core/cache/cacheKey.ts
658
+ var import_crypto = require("crypto");
659
+ function buildCacheKey(url, client, requiresAuth = false) {
660
+ if (!requiresAuth) return url;
661
+ const authHeader = client.getAuthorizationHeader();
662
+ if (!authHeader) return url;
663
+ const hash = (0, import_crypto.createHash)("sha256").update(authHeader).digest("hex").slice(0, 16);
664
+ return `${hash}:${url}`;
665
+ }
666
+
652
667
  // src/core/constants.ts
653
668
  var PACKAGE_NAME = "esi.ts";
654
- var PACKAGE_VERSION = "9.2.0";
669
+ var PACKAGE_VERSION = "9.7.0";
655
670
  var USER_AGENT = `${PACKAGE_NAME}/${PACKAGE_VERSION}`;
656
671
  var COMPATIBILITY_DATE = "2026-05-19";
657
672
 
@@ -677,7 +692,10 @@ function buildRequestHeaders(client, url, method, requiresAuth, useETag, body, r
677
692
  const authHeader = client.getAuthorizationHeader();
678
693
  if (!authHeader) {
679
694
  throw buildError(
680
- "Authorization header is required but not provided",
695
+ [
696
+ "Authorization header is required for this endpoint but no access token is configured",
697
+ "Fix: set ESI_ACCESS_TOKEN in your environment (see .env.example), or call client.setAccessToken(token), or pass accessToken to the EsiClient constructor"
698
+ ].join(" \u2014 "),
681
699
  "NO_AUTH_TOKEN"
682
700
  );
683
701
  }
@@ -685,7 +703,8 @@ function buildRequestHeaders(client, url, method, requiresAuth, useETag, body, r
685
703
  }
686
704
  const cache = resolveCache2(client);
687
705
  if (useETag && method === "GET" && cache) {
688
- const cachedETag = cache.getETag(url);
706
+ const key = buildCacheKey(url, client, requiresAuth);
707
+ const cachedETag = cache.getETag(key);
689
708
  if (cachedETag) {
690
709
  headers["If-None-Match"] = cachedETag;
691
710
  logDebug(`Adding If-None-Match header: ${cachedETag}`);
@@ -839,13 +858,14 @@ function lookupSpecTtl(method, templatePath) {
839
858
  const seconds = esiCacheTtls[key];
840
859
  return typeof seconds === "number" ? seconds * 1e3 : void 0;
841
860
  }
842
- function trySpecAwareCacheHit(client, url, method, templatePath, resolveCache2) {
861
+ function trySpecAwareCacheHit(client, url, method, templatePath, resolveCache2, requiresAuth = false) {
843
862
  if (method !== "GET" || !templatePath) return null;
844
863
  const specTtlMs = lookupSpecTtl(method, templatePath);
845
864
  if (!specTtlMs) return null;
846
865
  const cache = resolveCache2(client);
847
866
  if (!cache) return null;
848
- const entry = cache.get(url);
867
+ const key = buildCacheKey(url, client, requiresAuth);
868
+ const entry = cache.get(key);
849
869
  if (!entry) return null;
850
870
  const age = Date.now() - entry.timestamp;
851
871
  if (age < specTtlMs) {
@@ -862,10 +882,11 @@ function trySpecAwareCacheHit(client, url, method, templatePath, resolveCache2)
862
882
  }
863
883
  return null;
864
884
  }
865
- function tryStaleCacheResponse(client, url, parsed, resolveCache2) {
885
+ function tryStaleCacheResponse(client, url, parsed, resolveCache2, requiresAuth = false) {
866
886
  const cache = resolveCache2(client);
867
887
  if (!cache) return null;
868
- const cachedEntry = cache.get(url);
888
+ const key = buildCacheKey(url, client, requiresAuth);
889
+ const cachedEntry = cache.get(key);
869
890
  if (!cachedEntry) return null;
870
891
  return {
871
892
  headers: { ...cachedEntry.headers, ...parsed.raw },
@@ -876,13 +897,14 @@ function tryStaleCacheResponse(client, url, parsed, resolveCache2) {
876
897
  cacheHitType: "stale-on-error"
877
898
  };
878
899
  }
879
- function cacheResponse(client, url, method, endpoint, parsed, data, useETag, resolveCache2, templatePath) {
900
+ function cacheResponse(client, url, method, endpoint, parsed, data, useETag, resolveCache2, templatePath, requiresAuth = false) {
880
901
  const cache = resolveCache2(client);
881
902
  if (useETag && method === "GET" && cache && parsed.etag) {
903
+ const key = buildCacheKey(url, client, requiresAuth);
882
904
  const headerTtl = parseCacheControlTtl(parsed.raw);
883
905
  const specTtlMs = templatePath ? lookupSpecTtl(method, templatePath) : void 0;
884
906
  const ttl = specTtlMs ?? headerTtl;
885
- cache.set(url, parsed.etag, data, parsed.raw, ttl);
907
+ cache.set(key, parsed.etag, data, parsed.raw, ttl);
886
908
  const ttlInfo = ttl ? ` (ttl=${ttl}ms)` : "";
887
909
  logDebug(`Cached response for ${url} with ETag ${parsed.etag}${ttlInfo}`);
888
910
  }
@@ -908,7 +930,7 @@ var STATUS_MESSAGES = {
908
930
  504: "Gateway Timeout",
909
931
  520: "Internal server error, did the request terminate too soon?"
910
932
  };
911
- function handleEarlyStatus(client, status, url, parsed, useETag, resolveCache2) {
933
+ function handleEarlyStatus(client, status, url, parsed, useETag, resolveCache2, requiresAuth = false) {
912
934
  if (status === 201) {
913
935
  return { headers: parsed.raw, body: void 0, status: 201 };
914
936
  }
@@ -919,7 +941,8 @@ function handleEarlyStatus(client, status, url, parsed, useETag, resolveCache2)
919
941
  if (status === 304) {
920
942
  const cache = resolveCache2(client);
921
943
  if (useETag && cache) {
922
- const cachedEntry = cache.get(url);
944
+ const key = buildCacheKey(url, client, requiresAuth);
945
+ const cachedEntry = cache.get(key);
923
946
  if (cachedEntry) {
924
947
  logInfo(`Cache hit (304) for endpoint: ${url}`);
925
948
  return {
@@ -940,14 +963,15 @@ function handleEarlyStatus(client, status, url, parsed, useETag, resolveCache2)
940
963
  }
941
964
  return null;
942
965
  }
943
- function handleErrorResponse(client, response, url, parsed, useETag, resolveCache2) {
966
+ function handleErrorResponse(client, response, url, parsed, useETag, resolveCache2, requiresAuth = false) {
944
967
  const errorMessage = STATUS_MESSAGES[response.status] || response.statusText;
945
968
  if (response.status >= 500 && useETag) {
946
969
  const staleResult = tryStaleCacheResponse(
947
970
  client,
948
971
  url,
949
972
  parsed,
950
- resolveCache2
973
+ resolveCache2,
974
+ requiresAuth
951
975
  );
952
976
  if (staleResult) {
953
977
  logWarn(`${errorMessage} for ${url} \u2014 serving stale cache`);
@@ -957,9 +981,15 @@ function handleErrorResponse(client, response, url, parsed, useETag, resolveCach
957
981
  if (response.status === 420 || response.status === 429) {
958
982
  logWarn(`Rate limited (${response.status}) on ${url}`);
959
983
  }
984
+ let message = errorMessage;
985
+ if (response.status === 401) {
986
+ message = `${errorMessage} \u2014 the access token was missing, expired, or lacks the required ESI scope. Fix: verify ESI_ACCESS_TOKEN, or configure onTokenRefresh for automatic refresh on 401`;
987
+ } else if (response.status === 403) {
988
+ message = `${errorMessage} \u2014 your access token does not have the OAuth scopes required for this endpoint. Check the scopes on your EVE SSO application`;
989
+ }
960
990
  throw new EsiError(
961
991
  response.status,
962
- errorMessage,
992
+ message,
963
993
  url,
964
994
  parsed.requestId ?? void 0
965
995
  );
@@ -1324,7 +1354,7 @@ async function executeSingleFetch(client, endpoint, method, body, requiresAuth,
1324
1354
  options.signal = controller.signal;
1325
1355
  let response;
1326
1356
  try {
1327
- response = await fetch(url, options);
1357
+ response = await client.getFetch()(url, options);
1328
1358
  } catch (err) {
1329
1359
  clearTimeout(timer);
1330
1360
  if (cb) {
@@ -1444,7 +1474,8 @@ var executeRequest = async (client, endpoint, method, body, requiresAuth = false
1444
1474
  url,
1445
1475
  parsed,
1446
1476
  useETag,
1447
- resolveCache
1477
+ resolveCache,
1478
+ requiresAuth
1448
1479
  );
1449
1480
  if (earlyResult) return finish(earlyResult);
1450
1481
  if (!response.ok) {
@@ -1454,7 +1485,8 @@ var executeRequest = async (client, endpoint, method, body, requiresAuth = false
1454
1485
  url,
1455
1486
  parsed,
1456
1487
  useETag,
1457
- resolveCache
1488
+ resolveCache,
1489
+ requiresAuth
1458
1490
  );
1459
1491
  return finish(staleOrThrow);
1460
1492
  }
@@ -1468,7 +1500,8 @@ var executeRequest = async (client, endpoint, method, body, requiresAuth = false
1468
1500
  data,
1469
1501
  useETag,
1470
1502
  resolveCache,
1471
- templatePath
1503
+ templatePath,
1504
+ requiresAuth
1472
1505
  );
1473
1506
  const cursorResult = handleCursorPagination(parsed, data);
1474
1507
  if (cursorResult) return finish(cursorResult);
@@ -1541,7 +1574,8 @@ var handleRequest = async (client, endpoint, method, body, requiresAuth = false,
1541
1574
  rawUrl,
1542
1575
  method,
1543
1576
  templatePath,
1544
- resolveCache
1577
+ resolveCache,
1578
+ requiresAuth
1545
1579
  );
1546
1580
  if (specHit) {
1547
1581
  return applyResponseInterceptors(
@@ -1705,6 +1739,20 @@ function buildMeta(response) {
1705
1739
  group: response.headers["x-ratelimit-group"] ?? null
1706
1740
  };
1707
1741
  }
1742
+ if (response.headers["etag"]) meta.etag = response.headers["etag"];
1743
+ if (response.headers["x-pages"])
1744
+ meta.pages = parseInt(response.headers["x-pages"], 10);
1745
+ if (response.headers["expires"]) meta.expires = response.headers["expires"];
1746
+ if (response.headers["x-esi-error-limit-remain"])
1747
+ meta.errorLimitRemain = parseInt(
1748
+ response.headers["x-esi-error-limit-remain"],
1749
+ 10
1750
+ );
1751
+ if (response.headers["x-esi-error-limit-reset"])
1752
+ meta.errorLimitReset = parseInt(
1753
+ response.headers["x-esi-error-limit-reset"],
1754
+ 10
1755
+ );
1708
1756
  return meta;
1709
1757
  }
1710
1758
  function createClient(apiClient, endpoints, options) {
@@ -1869,6 +1917,55 @@ function validatePageBody(body, schema, url, validate) {
1869
1917
  }
1870
1918
  return result.data;
1871
1919
  }
1920
+ async function fetchAllPages(client, endpoint, method, requiresAuth = false, body, templatePath, responseSchema, concurrency = 8) {
1921
+ const validate = client.getValidateResponse();
1922
+ const firstResponse = await handleSinglePageRequest(
1923
+ client,
1924
+ endpoint,
1925
+ method,
1926
+ body,
1927
+ requiresAuth,
1928
+ templatePath
1929
+ );
1930
+ const firstBody = validatePageBody(
1931
+ firstResponse.body,
1932
+ responseSchema,
1933
+ `${client.getLink()}/${endpoint}`,
1934
+ validate
1935
+ );
1936
+ const totalPages = parseInt(firstResponse.headers["x-pages"] || "1", 10);
1937
+ const result = extractArray(firstBody);
1938
+ if (totalPages <= 1) return result;
1939
+ const remaining = Array.from({ length: totalPages - 1 }, (_, i) => i + 2);
1940
+ for (let i = 0; i < remaining.length; i += concurrency) {
1941
+ const batch = remaining.slice(i, i + concurrency);
1942
+ const pages = await Promise.all(
1943
+ batch.map(async (page) => {
1944
+ const sep = endpoint.includes("?") ? "&" : "?";
1945
+ const pagedEndpoint = `${endpoint}${sep}page=${page}`;
1946
+ logInfo(`Fetching page ${page}/${totalPages}: ${pagedEndpoint}`);
1947
+ const response = await handleSinglePageRequest(
1948
+ client,
1949
+ pagedEndpoint,
1950
+ method,
1951
+ body,
1952
+ requiresAuth,
1953
+ templatePath
1954
+ );
1955
+ return validatePageBody(
1956
+ response.body,
1957
+ responseSchema,
1958
+ `${client.getLink()}/${pagedEndpoint}`,
1959
+ validate
1960
+ );
1961
+ })
1962
+ );
1963
+ for (const pageBody of pages) {
1964
+ result.push(...extractArray(pageBody));
1965
+ }
1966
+ }
1967
+ return result;
1968
+ }
1872
1969
  async function* fetchPages(client, endpoint, method, requiresAuth = false, body, templatePath, responseSchema) {
1873
1970
  const validate = client.getValidateResponse();
1874
1971
  const firstResponse = await handleSinglePageRequest(
@@ -1940,6 +2037,24 @@ var BaseEsiClient = class {
1940
2037
  def.responseSchema
1941
2038
  );
1942
2039
  }
2040
+ fetchAllEndpoint(endpointName, args, concurrency) {
2041
+ const def = this._endpoints[endpointName];
2042
+ const { path, body } = buildEndpointPath(
2043
+ def,
2044
+ args,
2045
+ this._client.getDatasource()
2046
+ );
2047
+ return fetchAllPages(
2048
+ this._client,
2049
+ path,
2050
+ def.method,
2051
+ def.requiresAuth,
2052
+ body,
2053
+ def.path,
2054
+ def.responseSchema,
2055
+ concurrency
2056
+ );
2057
+ }
1943
2058
  withMetadata() {
1944
2059
  if (!this._metaApi) {
1945
2060
  this._metaApi = createClient(this._client, this._endpoints, {
@@ -2146,9 +2261,7 @@ var AllianceClient = class extends BaseEsiClient {
2146
2261
  logWarn(
2147
2262
  "AllianceClient.getContacts() is deprecated. Use ContactsClient.getAllianceContacts() instead. Planned removal in next major version."
2148
2263
  );
2149
- return this.contactApi.getAllianceContacts(
2150
- allianceId
2151
- );
2264
+ return this.contactApi.getAllianceContacts(allianceId);
2152
2265
  }
2153
2266
  /**
2154
2267
  * Retrieve custom contact labels for an alliance.
@@ -2190,6 +2303,16 @@ var AllianceClient = class extends BaseEsiClient {
2190
2303
  getAlliances() {
2191
2304
  return this.api.getAlliances();
2192
2305
  }
2306
+ fetchAllAlliances(concurrency) {
2307
+ return this.fetchAllEndpoint("getAlliances", [], concurrency);
2308
+ }
2309
+ fetchAllCorporations(allianceId, concurrency) {
2310
+ return this.fetchAllEndpoint(
2311
+ "getCorporations",
2312
+ [allianceId],
2313
+ concurrency
2314
+ );
2315
+ }
2193
2316
  streamAlliances() {
2194
2317
  return this.streamEndpoint("getAlliances");
2195
2318
  }
@@ -2298,10 +2421,7 @@ var AssetsClient = class extends BaseEsiClient {
2298
2421
  * @requires Authentication
2299
2422
  */
2300
2423
  postCharacterAssetLocations(characterId, itemIds) {
2301
- return this.api.postCharacterAssetLocations(
2302
- characterId,
2303
- itemIds
2304
- );
2424
+ return this.api.postCharacterAssetLocations(characterId, itemIds);
2305
2425
  }
2306
2426
  /**
2307
2427
  * Look up the names of specific assets owned by a character via a bulk POST request.
@@ -2352,6 +2472,20 @@ var AssetsClient = class extends BaseEsiClient {
2352
2472
  itemIds
2353
2473
  );
2354
2474
  }
2475
+ fetchAllCharacterAssets(characterId, concurrency) {
2476
+ return this.fetchAllEndpoint(
2477
+ "getCharacterAssets",
2478
+ [characterId],
2479
+ concurrency
2480
+ );
2481
+ }
2482
+ fetchAllCorporationAssets(corporationId, concurrency) {
2483
+ return this.fetchAllEndpoint(
2484
+ "getCorporationAssets",
2485
+ [corporationId],
2486
+ concurrency
2487
+ );
2488
+ }
2355
2489
  streamCharacterAssets(characterId) {
2356
2490
  return this.streamEndpoint(
2357
2491
  "getCharacterAssets",
@@ -2495,6 +2629,20 @@ var CalendarClient = class extends BaseEsiClient {
2495
2629
  getEventAttendees(characterId, eventId) {
2496
2630
  return this.api.getEventAttendees(characterId, eventId);
2497
2631
  }
2632
+ fetchAllCalendarEvents(characterId, concurrency) {
2633
+ return this.fetchAllEndpoint(
2634
+ "getCalendarEvents",
2635
+ [characterId],
2636
+ concurrency
2637
+ );
2638
+ }
2639
+ fetchAllEventAttendees(characterId, eventId, concurrency) {
2640
+ return this.fetchAllEndpoint(
2641
+ "getEventAttendees",
2642
+ [characterId, eventId],
2643
+ concurrency
2644
+ );
2645
+ }
2498
2646
  streamCalendarEvents(characterId) {
2499
2647
  return this.streamEndpoint("getCalendarEvents", characterId);
2500
2648
  }
@@ -2654,7 +2802,12 @@ var EsiResponseMetaSchema = import_zod11.z.looseObject({
2654
2802
  date: import_zod11.z.string().optional(),
2655
2803
  contentLanguage: import_zod11.z.string().optional(),
2656
2804
  rateLimit: RateLimitMetaSchema.optional(),
2657
- responseTimeMs: import_zod11.z.number().optional()
2805
+ responseTimeMs: import_zod11.z.number().optional(),
2806
+ etag: import_zod11.z.string().optional(),
2807
+ pages: import_zod11.z.number().optional(),
2808
+ expires: import_zod11.z.string().optional(),
2809
+ errorLimitRemain: import_zod11.z.number().optional(),
2810
+ errorLimitReset: import_zod11.z.number().optional()
2658
2811
  });
2659
2812
  function esiResponse(dataSchema) {
2660
2813
  return import_zod11.z.object({
@@ -2909,6 +3062,62 @@ var CharacterClient = class extends BaseEsiClient {
2909
3062
  postCharacterAffiliation(characters) {
2910
3063
  return this.api.postCharacterAffiliation(characters);
2911
3064
  }
3065
+ fetchAllCharacterAgentsResearch(characterId, concurrency) {
3066
+ return this.fetchAllEndpoint(
3067
+ "getAgentsResearch",
3068
+ [characterId],
3069
+ concurrency
3070
+ );
3071
+ }
3072
+ fetchAllCharacterBlueprints(characterId, concurrency) {
3073
+ return this.fetchAllEndpoint(
3074
+ "getBlueprints",
3075
+ [characterId],
3076
+ concurrency
3077
+ );
3078
+ }
3079
+ fetchAllCharacterCorporationHistory(characterId, concurrency) {
3080
+ return this.fetchAllEndpoint(
3081
+ "getCorporationHistory",
3082
+ [characterId],
3083
+ concurrency
3084
+ );
3085
+ }
3086
+ fetchAllCharacterMedals(characterId, concurrency) {
3087
+ return this.fetchAllEndpoint(
3088
+ "getMedals",
3089
+ [characterId],
3090
+ concurrency
3091
+ );
3092
+ }
3093
+ fetchAllCharacterNotifications(characterId, concurrency) {
3094
+ return this.fetchAllEndpoint(
3095
+ "getNotifications",
3096
+ [characterId],
3097
+ concurrency
3098
+ );
3099
+ }
3100
+ fetchAllCharacterNotificationsContacts(characterId, concurrency) {
3101
+ return this.fetchAllEndpoint(
3102
+ "getContactNotifications",
3103
+ [characterId],
3104
+ concurrency
3105
+ );
3106
+ }
3107
+ fetchAllCharacterStandings(characterId, concurrency) {
3108
+ return this.fetchAllEndpoint(
3109
+ "getStandings",
3110
+ [characterId],
3111
+ concurrency
3112
+ );
3113
+ }
3114
+ fetchAllCharacterTitles(characterId, concurrency) {
3115
+ return this.fetchAllEndpoint(
3116
+ "getTitles",
3117
+ [characterId],
3118
+ concurrency
3119
+ );
3120
+ }
2912
3121
  streamCharacterAgentsResearch(characterId) {
2913
3122
  return this.streamEndpoint("getAgentsResearch", characterId);
2914
3123
  }
@@ -3007,6 +3216,13 @@ var ClonesClient = class extends BaseEsiClient {
3007
3216
  getImplants(characterId) {
3008
3217
  return this.api.getImplants(characterId);
3009
3218
  }
3219
+ fetchAllImplants(characterId, concurrency) {
3220
+ return this.fetchAllEndpoint(
3221
+ "getImplants",
3222
+ [characterId],
3223
+ concurrency
3224
+ );
3225
+ }
3010
3226
  streamImplants(characterId) {
3011
3227
  return this.streamEndpoint("getImplants", characterId);
3012
3228
  }
@@ -3117,6 +3333,48 @@ var ContactsClient = class extends BaseEsiClient {
3117
3333
  getCorporationContactLabels(corporationId) {
3118
3334
  return this.api.getCorporationContactLabels(corporationId);
3119
3335
  }
3336
+ fetchAllAllianceContacts(allianceId, concurrency) {
3337
+ return this.fetchAllEndpoint(
3338
+ "getAllianceContacts",
3339
+ [allianceId],
3340
+ concurrency
3341
+ );
3342
+ }
3343
+ fetchAllAllianceContactLabels(allianceId, concurrency) {
3344
+ return this.fetchAllEndpoint(
3345
+ "getAllianceContactLabels",
3346
+ [allianceId],
3347
+ concurrency
3348
+ );
3349
+ }
3350
+ fetchAllCharacterContacts(characterId, concurrency) {
3351
+ return this.fetchAllEndpoint(
3352
+ "getCharacterContacts",
3353
+ [characterId],
3354
+ concurrency
3355
+ );
3356
+ }
3357
+ fetchAllCharacterContactLabels(characterId, concurrency) {
3358
+ return this.fetchAllEndpoint(
3359
+ "getCharacterContactLabels",
3360
+ [characterId],
3361
+ concurrency
3362
+ );
3363
+ }
3364
+ fetchAllCorporationContacts(corporationId, concurrency) {
3365
+ return this.fetchAllEndpoint(
3366
+ "getCorporationContacts",
3367
+ [corporationId],
3368
+ concurrency
3369
+ );
3370
+ }
3371
+ fetchAllCorporationContactLabels(corporationId, concurrency) {
3372
+ return this.fetchAllEndpoint(
3373
+ "getCorporationContactLabels",
3374
+ [corporationId],
3375
+ concurrency
3376
+ );
3377
+ }
3120
3378
  streamAllianceContacts(allianceId) {
3121
3379
  return this.streamEndpoint("getAllianceContacts", allianceId);
3122
3380
  }
@@ -3301,10 +3559,7 @@ var ContractsClient = class extends BaseEsiClient {
3301
3559
  * @requires Authentication
3302
3560
  */
3303
3561
  getCharacterContractBids(characterId, contractId) {
3304
- return this.api.getCharacterContractBids(
3305
- characterId,
3306
- contractId
3307
- );
3562
+ return this.api.getCharacterContractBids(characterId, contractId);
3308
3563
  }
3309
3564
  /**
3310
3565
  * Retrieve the items included in a contract owned by a character.
@@ -3315,10 +3570,7 @@ var ContractsClient = class extends BaseEsiClient {
3315
3570
  * @requires Authentication
3316
3571
  */
3317
3572
  getCharacterContractItems(characterId, contractId) {
3318
- return this.api.getCharacterContractItems(
3319
- characterId,
3320
- contractId
3321
- );
3573
+ return this.api.getCharacterContractItems(characterId, contractId);
3322
3574
  }
3323
3575
  /**
3324
3576
  * Retrieve publicly available contracts in a specific region.
@@ -3366,10 +3618,7 @@ var ContractsClient = class extends BaseEsiClient {
3366
3618
  * @requires Authentication
3367
3619
  */
3368
3620
  getCorporationContractBids(corporationId, contractId) {
3369
- return this.api.getCorporationContractBids(
3370
- corporationId,
3371
- contractId
3372
- );
3621
+ return this.api.getCorporationContractBids(corporationId, contractId);
3373
3622
  }
3374
3623
  /**
3375
3624
  * Retrieve the items included in a contract owned by a corporation.
@@ -3380,9 +3629,27 @@ var ContractsClient = class extends BaseEsiClient {
3380
3629
  * @requires Authentication
3381
3630
  */
3382
3631
  getCorporationContractItems(corporationId, contractId) {
3383
- return this.api.getCorporationContractItems(
3384
- corporationId,
3385
- contractId
3632
+ return this.api.getCorporationContractItems(corporationId, contractId);
3633
+ }
3634
+ fetchAllPublicContracts(regionId, concurrency) {
3635
+ return this.fetchAllEndpoint(
3636
+ "getPublicContracts",
3637
+ [regionId],
3638
+ concurrency
3639
+ );
3640
+ }
3641
+ fetchAllCharacterContracts(characterId, concurrency) {
3642
+ return this.fetchAllEndpoint(
3643
+ "getCharacterContracts",
3644
+ [characterId],
3645
+ concurrency
3646
+ );
3647
+ }
3648
+ fetchAllCorporationContracts(corporationId, concurrency) {
3649
+ return this.fetchAllEndpoint(
3650
+ "getCorporationContracts",
3651
+ [corporationId],
3652
+ concurrency
3386
3653
  );
3387
3654
  }
3388
3655
  streamPublicContracts(regionId) {
@@ -3981,6 +4248,121 @@ var CorporationsClient = class extends BaseEsiClient {
3981
4248
  getNpcCorporations() {
3982
4249
  return this.api.getNpcCorporations();
3983
4250
  }
4251
+ fetchAllCorporationAllianceHistory(corporationId, concurrency) {
4252
+ return this.fetchAllEndpoint(
4253
+ "getCorporationAllianceHistory",
4254
+ [corporationId],
4255
+ concurrency
4256
+ );
4257
+ }
4258
+ fetchAllCorporationBlueprints(corporationId, concurrency) {
4259
+ return this.fetchAllEndpoint(
4260
+ "getCorporationBlueprints",
4261
+ [corporationId],
4262
+ concurrency
4263
+ );
4264
+ }
4265
+ fetchAllCorporationAlscLogs(corporationId, concurrency) {
4266
+ return this.fetchAllEndpoint(
4267
+ "getCorporationAlscLogs",
4268
+ [corporationId],
4269
+ concurrency
4270
+ );
4271
+ }
4272
+ fetchAllCorporationFacilities(corporationId, concurrency) {
4273
+ return this.fetchAllEndpoint(
4274
+ "getCorporationFacilities",
4275
+ [corporationId],
4276
+ concurrency
4277
+ );
4278
+ }
4279
+ fetchAllCorporationMedals(corporationId, concurrency) {
4280
+ return this.fetchAllEndpoint(
4281
+ "getCorporationMedals",
4282
+ [corporationId],
4283
+ concurrency
4284
+ );
4285
+ }
4286
+ fetchAllCorporationIssuedMedals(corporationId, concurrency) {
4287
+ return this.fetchAllEndpoint(
4288
+ "getCorporationIssuedMedals",
4289
+ [corporationId],
4290
+ concurrency
4291
+ );
4292
+ }
4293
+ fetchAllCorporationMembers(corporationId, concurrency) {
4294
+ return this.fetchAllEndpoint(
4295
+ "getCorporationMembers",
4296
+ [corporationId],
4297
+ concurrency
4298
+ );
4299
+ }
4300
+ fetchAllCorporationMemberTitles(corporationId, concurrency) {
4301
+ return this.fetchAllEndpoint(
4302
+ "getCorporationMembersTitles",
4303
+ [corporationId],
4304
+ concurrency
4305
+ );
4306
+ }
4307
+ fetchAllCorporationMemberTracking(corporationId, concurrency) {
4308
+ return this.fetchAllEndpoint(
4309
+ "getCorporationMemberTracking",
4310
+ [corporationId],
4311
+ concurrency
4312
+ );
4313
+ }
4314
+ fetchAllCorporationRoles(corporationId, concurrency) {
4315
+ return this.fetchAllEndpoint(
4316
+ "getCorporationMemberRoles",
4317
+ [corporationId],
4318
+ concurrency
4319
+ );
4320
+ }
4321
+ fetchAllCorporationRolesHistory(corporationId, concurrency) {
4322
+ return this.fetchAllEndpoint(
4323
+ "getCorporationMemberRolesHistory",
4324
+ [corporationId],
4325
+ concurrency
4326
+ );
4327
+ }
4328
+ fetchAllCorporationShareholders(corporationId, concurrency) {
4329
+ return this.fetchAllEndpoint(
4330
+ "getCorporationShareholders",
4331
+ [corporationId],
4332
+ concurrency
4333
+ );
4334
+ }
4335
+ fetchAllCorporationStandings(corporationId, concurrency) {
4336
+ return this.fetchAllEndpoint(
4337
+ "getCorporationStandings",
4338
+ [corporationId],
4339
+ concurrency
4340
+ );
4341
+ }
4342
+ fetchAllCorporationStarbases(corporationId, concurrency) {
4343
+ return this.fetchAllEndpoint(
4344
+ "getCorporationStarbases",
4345
+ [corporationId],
4346
+ concurrency
4347
+ );
4348
+ }
4349
+ fetchAllCorporationStructures(corporationId, concurrency) {
4350
+ return this.fetchAllEndpoint(
4351
+ "getCorporationStructures",
4352
+ [corporationId],
4353
+ concurrency
4354
+ );
4355
+ }
4356
+ fetchAllCorporationTitles(corporationId, concurrency) {
4357
+ return this.fetchAllEndpoint(
4358
+ "getCorporationTitles",
4359
+ [corporationId],
4360
+ concurrency
4361
+ );
4362
+ }
4363
+ fetchAllNpcCorporations(concurrency) {
4364
+ return this.fetchAllEndpoint("getNpcCorporations", [], concurrency);
4365
+ }
3984
4366
  streamCorporationAllianceHistory(corporationId) {
3985
4367
  return this.streamEndpoint(
3986
4368
  "getCorporationAllianceHistory",
@@ -4663,6 +5045,13 @@ var FittingsClient = class extends BaseEsiClient {
4663
5045
  deleteFitting(characterId, fittingId) {
4664
5046
  return this.api.deleteFitting(characterId, fittingId);
4665
5047
  }
5048
+ fetchAllFittings(characterId, concurrency) {
5049
+ return this.fetchAllEndpoint(
5050
+ "getFittings",
5051
+ [characterId],
5052
+ concurrency
5053
+ );
5054
+ }
4666
5055
  streamFittings(characterId) {
4667
5056
  return this.streamEndpoint("getFittings", characterId);
4668
5057
  }
@@ -4987,6 +5376,20 @@ var FleetClient = class extends BaseEsiClient {
4987
5376
  createFleetSquad(fleetId, wingId) {
4988
5377
  return this.api.createFleetSquad(fleetId, wingId);
4989
5378
  }
5379
+ fetchAllFleetMembers(fleetId, concurrency) {
5380
+ return this.fetchAllEndpoint(
5381
+ "getFleetMembers",
5382
+ [fleetId],
5383
+ concurrency
5384
+ );
5385
+ }
5386
+ fetchAllFleetWings(fleetId, concurrency) {
5387
+ return this.fetchAllEndpoint(
5388
+ "getFleetWings",
5389
+ [fleetId],
5390
+ concurrency
5391
+ );
5392
+ }
4990
5393
  streamFleetMembers(fleetId) {
4991
5394
  return this.streamEndpoint("getFleetMembers", fleetId);
4992
5395
  }
@@ -5255,6 +5658,62 @@ var IndustryClient = class extends BaseEsiClient {
5255
5658
  getIndustrySystems() {
5256
5659
  return this.api.getIndustrySystems();
5257
5660
  }
5661
+ fetchAllCharacterIndustryJobs(characterId, concurrency) {
5662
+ return this.fetchAllEndpoint(
5663
+ "getCharacterIndustryJobs",
5664
+ [characterId],
5665
+ concurrency
5666
+ );
5667
+ }
5668
+ fetchAllCharacterMiningLedger(characterId, concurrency) {
5669
+ return this.fetchAllEndpoint(
5670
+ "getCharacterMiningLedger",
5671
+ [characterId],
5672
+ concurrency
5673
+ );
5674
+ }
5675
+ fetchAllCorporationIndustryJobs(corporationId, concurrency) {
5676
+ return this.fetchAllEndpoint(
5677
+ "getCorporationIndustryJobs",
5678
+ [corporationId],
5679
+ concurrency
5680
+ );
5681
+ }
5682
+ fetchAllMoonExtractionTimers(corporationId, concurrency) {
5683
+ return this.fetchAllEndpoint(
5684
+ "getMoonExtractionTimers",
5685
+ [corporationId],
5686
+ concurrency
5687
+ );
5688
+ }
5689
+ fetchAllCorporationMiningObservers(corporationId, concurrency) {
5690
+ return this.fetchAllEndpoint(
5691
+ "getCorporationMiningObservers",
5692
+ [corporationId],
5693
+ concurrency
5694
+ );
5695
+ }
5696
+ fetchAllCorporationMiningObserver(corporationId, observerId, concurrency) {
5697
+ return this.fetchAllEndpoint(
5698
+ "getCorporationMiningObserver",
5699
+ [corporationId, observerId],
5700
+ concurrency
5701
+ );
5702
+ }
5703
+ fetchAllIndustryFacilities(concurrency) {
5704
+ return this.fetchAllEndpoint(
5705
+ "getIndustryFacilities",
5706
+ [],
5707
+ concurrency
5708
+ );
5709
+ }
5710
+ fetchAllIndustrySystems(concurrency) {
5711
+ return this.fetchAllEndpoint(
5712
+ "getIndustrySystems",
5713
+ [],
5714
+ concurrency
5715
+ );
5716
+ }
5258
5717
  streamCharacterIndustryJobs(characterId) {
5259
5718
  return this.streamEndpoint(
5260
5719
  "getCharacterIndustryJobs",
@@ -5445,6 +5904,20 @@ var KillmailsClient = class extends BaseEsiClient {
5445
5904
  getKillmail(killmailId, killmailHash) {
5446
5905
  return this.api.getKillmail(killmailId, killmailHash);
5447
5906
  }
5907
+ fetchAllCharacterRecentKillmails(characterId, concurrency) {
5908
+ return this.fetchAllEndpoint(
5909
+ "getCharacterRecentKillmails",
5910
+ [characterId],
5911
+ concurrency
5912
+ );
5913
+ }
5914
+ fetchAllCorporationRecentKillmails(corporationId, concurrency) {
5915
+ return this.fetchAllEndpoint(
5916
+ "getCorporationRecentKillmails",
5917
+ [corporationId],
5918
+ concurrency
5919
+ );
5920
+ }
5448
5921
  streamCharacterRecentKillmails(characterId) {
5449
5922
  return this.streamEndpoint(
5450
5923
  "getCharacterRecentKillmails",
@@ -5608,6 +6081,20 @@ var LoyaltyClient = class extends BaseEsiClient {
5608
6081
  getLoyaltyStoreOffers(corporationId) {
5609
6082
  return this.api.getLoyaltyStoreOffers(corporationId);
5610
6083
  }
6084
+ fetchAllLoyaltyPoints(characterId, concurrency) {
6085
+ return this.fetchAllEndpoint(
6086
+ "getLoyaltyPoints",
6087
+ [characterId],
6088
+ concurrency
6089
+ );
6090
+ }
6091
+ fetchAllLoyaltyStoreOffers(corporationId, concurrency) {
6092
+ return this.fetchAllEndpoint(
6093
+ "getLoyaltyStoreOffers",
6094
+ [corporationId],
6095
+ concurrency
6096
+ );
6097
+ }
5611
6098
  streamLoyaltyPoints(characterId) {
5612
6099
  return this.streamEndpoint("getLoyaltyPoints", characterId);
5613
6100
  }
@@ -5845,6 +6332,20 @@ var MailClient = class extends BaseEsiClient {
5845
6332
  getMailingLists(characterId) {
5846
6333
  return this.api.getMailingLists(characterId);
5847
6334
  }
6335
+ fetchAllMailHeaders(characterId, concurrency) {
6336
+ return this.fetchAllEndpoint(
6337
+ "getCharacterMailHeaders",
6338
+ [characterId],
6339
+ concurrency
6340
+ );
6341
+ }
6342
+ fetchAllMailingLists(characterId, concurrency) {
6343
+ return this.fetchAllEndpoint(
6344
+ "getMailingLists",
6345
+ [characterId],
6346
+ concurrency
6347
+ );
6348
+ }
5848
6349
  streamMailHeaders(characterId) {
5849
6350
  return this.streamEndpoint(
5850
6351
  "getCharacterMailHeaders",
@@ -6169,6 +6670,48 @@ var MarketClient = class extends BaseEsiClient {
6169
6670
  getMarketOrdersInStructure(structureId) {
6170
6671
  return this.api.getMarketOrdersInStructure(structureId);
6171
6672
  }
6673
+ fetchAllMarketOrders(regionId, concurrency) {
6674
+ return this.fetchAllEndpoint(
6675
+ "getMarketOrders",
6676
+ [regionId, "all"],
6677
+ concurrency
6678
+ );
6679
+ }
6680
+ fetchAllMarketTypes(regionId, concurrency) {
6681
+ return this.fetchAllEndpoint(
6682
+ "getMarketTypes",
6683
+ [regionId],
6684
+ concurrency
6685
+ );
6686
+ }
6687
+ fetchAllCharacterOrderHistory(characterId, concurrency) {
6688
+ return this.fetchAllEndpoint(
6689
+ "getCharacterOrderHistory",
6690
+ [characterId],
6691
+ concurrency
6692
+ );
6693
+ }
6694
+ fetchAllCorporationOrders(corporationId, concurrency) {
6695
+ return this.fetchAllEndpoint(
6696
+ "getCorporationOrders",
6697
+ [corporationId],
6698
+ concurrency
6699
+ );
6700
+ }
6701
+ fetchAllCorporationOrderHistory(corporationId, concurrency) {
6702
+ return this.fetchAllEndpoint(
6703
+ "getCorporationOrderHistory",
6704
+ [corporationId],
6705
+ concurrency
6706
+ );
6707
+ }
6708
+ fetchAllMarketOrdersInStructure(structureId, concurrency) {
6709
+ return this.fetchAllEndpoint(
6710
+ "getMarketOrdersInStructure",
6711
+ [structureId],
6712
+ concurrency
6713
+ );
6714
+ }
6172
6715
  streamMarketOrders(regionId) {
6173
6716
  return this.streamEndpoint("getMarketOrders", regionId, "all");
6174
6717
  }
@@ -6621,6 +7164,20 @@ var PiClient = class extends BaseEsiClient {
6621
7164
  getSchematicInformation(schematicId) {
6622
7165
  return this.api.getSchematicInformation(schematicId);
6623
7166
  }
7167
+ fetchAllColonies(characterId, concurrency) {
7168
+ return this.fetchAllEndpoint(
7169
+ "getColonies",
7170
+ [characterId],
7171
+ concurrency
7172
+ );
7173
+ }
7174
+ fetchAllCorporationCustomsOffices(corporationId, concurrency) {
7175
+ return this.fetchAllEndpoint(
7176
+ "getCorporationCustomsOffices",
7177
+ [corporationId],
7178
+ concurrency
7179
+ );
7180
+ }
6624
7181
  streamColonies(characterId) {
6625
7182
  return this.streamEndpoint("getColonies", characterId);
6626
7183
  }
@@ -6793,6 +7350,13 @@ var CharacterSkillsClient = class extends BaseEsiClient {
6793
7350
  getCharacterSkills(characterId) {
6794
7351
  return this.api.getCharacterSkills(characterId);
6795
7352
  }
7353
+ fetchAllCharacterSkillQueue(characterId, concurrency) {
7354
+ return this.fetchAllEndpoint(
7355
+ "getCharacterSkillQueue",
7356
+ [characterId],
7357
+ concurrency
7358
+ );
7359
+ }
6796
7360
  streamCharacterSkillQueue(characterId) {
6797
7361
  return this.streamEndpoint(
6798
7362
  "getCharacterSkillQueue",
@@ -7677,6 +8241,34 @@ var WalletClient = class extends BaseEsiClient {
7677
8241
  getCorporationWalletTransactions(corporationId, division) {
7678
8242
  return this.api.getCorporationWalletTransactions(corporationId, division);
7679
8243
  }
8244
+ fetchAllCharacterWalletJournal(characterId, concurrency) {
8245
+ return this.fetchAllEndpoint(
8246
+ "getCharacterWalletJournal",
8247
+ [characterId],
8248
+ concurrency
8249
+ );
8250
+ }
8251
+ fetchAllCorporationWalletJournal(corporationId, division, concurrency) {
8252
+ return this.fetchAllEndpoint(
8253
+ "getCorporationWalletJournal",
8254
+ [corporationId, division],
8255
+ concurrency
8256
+ );
8257
+ }
8258
+ fetchAllCharacterWalletTransactions(characterId, concurrency) {
8259
+ return this.fetchAllEndpoint(
8260
+ "getCharacterWalletTransactions",
8261
+ [characterId],
8262
+ concurrency
8263
+ );
8264
+ }
8265
+ fetchAllCorporationWalletTransactions(corporationId, division, concurrency) {
8266
+ return this.fetchAllEndpoint(
8267
+ "getCorporationWalletTransactions",
8268
+ [corporationId, division],
8269
+ concurrency
8270
+ );
8271
+ }
7680
8272
  streamCharacterWalletJournal(characterId) {
7681
8273
  return this.streamEndpoint(
7682
8274
  "getCharacterWalletJournal",
@@ -7793,6 +8385,16 @@ var WarsClient = class extends BaseEsiClient {
7793
8385
  getWarKillmails(warId) {
7794
8386
  return this.api.getWarKillmails(warId);
7795
8387
  }
8388
+ fetchAllWars(concurrency) {
8389
+ return this.fetchAllEndpoint("getWars", [], concurrency);
8390
+ }
8391
+ fetchAllWarKillmails(warId, concurrency) {
8392
+ return this.fetchAllEndpoint(
8393
+ "getWarKillmails",
8394
+ [warId],
8395
+ concurrency
8396
+ );
8397
+ }
7796
8398
  streamWars() {
7797
8399
  return this.streamEndpoint("getWars");
7798
8400
  }
@@ -8208,6 +8810,72 @@ var RaidableSkyhookSchema = import_zod62.z.looseObject({
8208
8810
  raidable_at: import_zod62.z.string().optional(),
8209
8811
  is_raidable: import_zod62.z.boolean()
8210
8812
  });
8813
+ var SkyhookDetailReagentSchema = import_zod62.z.looseObject({
8814
+ type_id: import_zod62.z.number(),
8815
+ secured_stock: import_zod62.z.number(),
8816
+ unsecured_stock: import_zod62.z.number(),
8817
+ last_cycle: import_zod62.z.string()
8818
+ });
8819
+ var SkyhookDetailReinforcementTimerSchema = import_zod62.z.looseObject({
8820
+ end: import_zod62.z.string()
8821
+ });
8822
+ var SkyhookDetailTheftVulnerabilitySchema = import_zod62.z.looseObject({
8823
+ start: import_zod62.z.string(),
8824
+ end: import_zod62.z.string()
8825
+ });
8826
+ var SkyhookDetailSchema = import_zod62.z.looseObject({
8827
+ id: import_zod62.z.number(),
8828
+ planet_id: import_zod62.z.number(),
8829
+ state: esiEnum([
8830
+ "Unspecified",
8831
+ "ShieldVulnerable",
8832
+ "ArmorReinforced",
8833
+ "ArmorVulnerable",
8834
+ "HullReinforced",
8835
+ "HullVulnerable"
8836
+ ]),
8837
+ is_active: import_zod62.z.boolean(),
8838
+ effective_workforce: import_zod62.z.number().optional(),
8839
+ reagents: import_zod62.z.array(SkyhookDetailReagentSchema).optional(),
8840
+ reinforcement_timer: SkyhookDetailReinforcementTimerSchema.optional(),
8841
+ theft_vulnerability: SkyhookDetailTheftVulnerabilitySchema.optional()
8842
+ });
8843
+ var SovereigntyHubDetailReagentSchema = import_zod62.z.looseObject({
8844
+ type_id: import_zod62.z.number(),
8845
+ amount: import_zod62.z.number(),
8846
+ burning_per_hour: import_zod62.z.number().optional()
8847
+ });
8848
+ var SovereigntyHubDetailReagentBaySchema = import_zod62.z.looseObject({
8849
+ last_updated: import_zod62.z.string(),
8850
+ reagents: import_zod62.z.array(SovereigntyHubDetailReagentSchema)
8851
+ });
8852
+ var SovereigntyHubDetailResourceSchema = import_zod62.z.looseObject({
8853
+ available: import_zod62.z.number().optional(),
8854
+ used: import_zod62.z.number().optional()
8855
+ });
8856
+ var SovereigntyHubDetailResourcesSchema = import_zod62.z.looseObject({
8857
+ power: SovereigntyHubDetailResourceSchema,
8858
+ workforce: SovereigntyHubDetailResourceSchema
8859
+ });
8860
+ var SovereigntyHubDetailUpgradeSchema = import_zod62.z.looseObject({
8861
+ type_id: import_zod62.z.number(),
8862
+ power_state: esiEnum(["Unspecified", "Online", "Offline", "Low", "Pending"])
8863
+ });
8864
+ var SovereigntyHubDetailVulnerabilityWindowSchema = import_zod62.z.looseObject({
8865
+ start: import_zod62.z.string(),
8866
+ end: import_zod62.z.string()
8867
+ });
8868
+ var SovereigntyHubDetailTransportSchema = import_zod62.z.looseObject({});
8869
+ var SovereigntyHubDetailSchema = import_zod62.z.looseObject({
8870
+ id: import_zod62.z.number(),
8871
+ solar_system_id: import_zod62.z.number(),
8872
+ upgrades: import_zod62.z.array(SovereigntyHubDetailUpgradeSchema),
8873
+ reagent_bay: SovereigntyHubDetailReagentBaySchema,
8874
+ resources: SovereigntyHubDetailResourcesSchema,
8875
+ workforce_transport: SovereigntyHubDetailTransportSchema,
8876
+ fuel_access_list_id: import_zod62.z.number().optional(),
8877
+ vulnerability_window: SovereigntyHubDetailVulnerabilityWindowSchema.optional()
8878
+ });
8211
8879
 
8212
8880
  // src/core/endpoints/skyhookEndpoints.ts
8213
8881
  var skyhookEndpoints = {
@@ -8230,6 +8898,20 @@ var skyhookEndpoints = {
8230
8898
  method: "GET",
8231
8899
  requiresAuth: false,
8232
8900
  responseSchema: import_zod63.z.array(RaidableSkyhookSchema)
8901
+ },
8902
+ getSkyhookDetail: {
8903
+ path: "corporations/{corporationId}/structures/skyhooks/{skyhookId}",
8904
+ method: "GET",
8905
+ requiresAuth: true,
8906
+ pathParams: ["corporationId", "skyhookId"],
8907
+ responseSchema: SkyhookDetailSchema
8908
+ },
8909
+ getSovereigntyHubDetail: {
8910
+ path: "corporations/{corporationId}/structures/sovereignty-hubs/{sovereigntyHubId}",
8911
+ method: "GET",
8912
+ requiresAuth: true,
8913
+ pathParams: ["corporationId", "sovereigntyHubId"],
8914
+ responseSchema: SovereigntyHubDetailSchema
8233
8915
  }
8234
8916
  };
8235
8917
 
@@ -8266,6 +8948,28 @@ var SkyhooksClient = class extends BaseEsiClient {
8266
8948
  getRaidableSkyhooks() {
8267
8949
  return this.api.getRaidableSkyhooks();
8268
8950
  }
8951
+ /**
8952
+ * Retrieves detail for a specific skyhook including reagents, reinforcement timer, and theft vulnerability.
8953
+ *
8954
+ * @param corporationId - The ID of the corporation
8955
+ * @param skyhookId - The ID of the skyhook
8956
+ * @returns Skyhook detail
8957
+ * @requires Authentication
8958
+ */
8959
+ getSkyhookDetail(corporationId, skyhookId) {
8960
+ return this.api.getSkyhookDetail(corporationId, skyhookId);
8961
+ }
8962
+ /**
8963
+ * Retrieves detail for a specific sovereignty hub including reagent bay, resources, upgrades, and vulnerability window.
8964
+ *
8965
+ * @param corporationId - The ID of the corporation
8966
+ * @param sovereigntyHubId - The ID of the sovereignty hub
8967
+ * @returns Sovereignty hub detail
8968
+ * @requires Authentication
8969
+ */
8970
+ getSovereigntyHubDetail(corporationId, sovereigntyHubId) {
8971
+ return this.api.getSovereigntyHubDetail(corporationId, sovereigntyHubId);
8972
+ }
8269
8973
  };
8270
8974
 
8271
8975
  // src/core/endpoints/mercenaryEndpoints.ts
@@ -8291,6 +8995,48 @@ var MercenaryTacticalOperationSchema = import_zod64.z.looseObject({
8291
8995
  started_at: import_zod64.z.string().optional(),
8292
8996
  expires_at: import_zod64.z.string().optional()
8293
8997
  });
8998
+ var MercenaryDenDetailEvolutionLevelSchema = import_zod64.z.looseObject({
8999
+ level: import_zod64.z.number().optional(),
9000
+ progress: import_zod64.z.number().optional()
9001
+ });
9002
+ var MercenaryDenDetailEvolutionSchema = import_zod64.z.looseObject({
9003
+ development: MercenaryDenDetailEvolutionLevelSchema,
9004
+ anarchy: MercenaryDenDetailEvolutionLevelSchema
9005
+ });
9006
+ var MercenaryDenDetailInfomorphsSchema = import_zod64.z.looseObject({
9007
+ amount: import_zod64.z.number()
9008
+ });
9009
+ var MercenaryDenDetailReinforcementTimerSchema = import_zod64.z.looseObject({
9010
+ end: import_zod64.z.string()
9011
+ });
9012
+ var MercenaryDenDetailSkyhookSchema = import_zod64.z.looseObject({
9013
+ id: import_zod64.z.number(),
9014
+ planet_id: import_zod64.z.number(),
9015
+ corporation_id: import_zod64.z.number()
9016
+ });
9017
+ var MercenaryDenDetailSchema = import_zod64.z.looseObject({
9018
+ id: import_zod64.z.number(),
9019
+ type_id: import_zod64.z.number(),
9020
+ state: esiEnum(["Unspecified", "Running", "Paused", "Disabled"]),
9021
+ skyhook: MercenaryDenDetailSkyhookSchema,
9022
+ infomorphs: MercenaryDenDetailInfomorphsSchema,
9023
+ evolution: MercenaryDenDetailEvolutionSchema,
9024
+ reinforcement_timer: MercenaryDenDetailReinforcementTimerSchema.optional()
9025
+ });
9026
+ var MercenaryTacticalOperationDetailSchema = import_zod64.z.looseObject({
9027
+ id: import_zod64.z.string(),
9028
+ mercenary_den_id: import_zod64.z.number(),
9029
+ state: esiEnum([
9030
+ "Unspecified",
9031
+ "Available",
9032
+ "Started",
9033
+ "Completed",
9034
+ "Expired",
9035
+ "Removed"
9036
+ ]),
9037
+ dungeon_type_id: import_zod64.z.number(),
9038
+ expires: import_zod64.z.string()
9039
+ });
8294
9040
 
8295
9041
  // src/core/endpoints/mercenaryEndpoints.ts
8296
9042
  var mercenaryEndpoints = {
@@ -8307,6 +9053,20 @@ var mercenaryEndpoints = {
8307
9053
  requiresAuth: true,
8308
9054
  pathParams: ["characterId"],
8309
9055
  responseSchema: import_zod65.z.array(MercenaryTacticalOperationSchema)
9056
+ },
9057
+ getMercenaryDenDetail: {
9058
+ path: "characters/{characterId}/structures/mercenary-dens/{mercenaryDenId}",
9059
+ method: "GET",
9060
+ requiresAuth: true,
9061
+ pathParams: ["characterId", "mercenaryDenId"],
9062
+ responseSchema: MercenaryDenDetailSchema
9063
+ },
9064
+ getMercenaryTacticalOperationDetail: {
9065
+ path: "characters/{characterId}/mercenary-tactical-operations/{operationId}",
9066
+ method: "GET",
9067
+ requiresAuth: true,
9068
+ pathParams: ["characterId", "operationId"],
9069
+ responseSchema: MercenaryTacticalOperationDetailSchema
8310
9070
  }
8311
9071
  };
8312
9072
 
@@ -8335,6 +9095,31 @@ var MercenaryClient = class extends BaseEsiClient {
8335
9095
  getMercenaryTacticalOperations(characterId) {
8336
9096
  return this.api.getMercenaryTacticalOperations(characterId);
8337
9097
  }
9098
+ /**
9099
+ * Retrieves detail for a specific mercenary den including evolution, infomorphs, and skyhook attachment.
9100
+ *
9101
+ * @param characterId - The ID of the character
9102
+ * @param mercenaryDenId - The ID of the mercenary den
9103
+ * @returns Mercenary den detail
9104
+ * @requires Authentication
9105
+ */
9106
+ getMercenaryDenDetail(characterId, mercenaryDenId) {
9107
+ return this.api.getMercenaryDenDetail(characterId, mercenaryDenId);
9108
+ }
9109
+ /**
9110
+ * Retrieves detail for a specific mercenary tactical operation.
9111
+ *
9112
+ * @param characterId - The ID of the character
9113
+ * @param operationId - The UUID of the tactical operation
9114
+ * @returns Mercenary tactical operation detail
9115
+ * @requires Authentication
9116
+ */
9117
+ getMercenaryTacticalOperationDetail(characterId, operationId) {
9118
+ return this.api.getMercenaryTacticalOperationDetail(
9119
+ characterId,
9120
+ operationId
9121
+ );
9122
+ }
8338
9123
  };
8339
9124
 
8340
9125
  // src/core/endpoints/accessListEndpoints.ts
@@ -8399,34 +9184,239 @@ var AccessListsClient = class extends BaseEsiClient {
8399
9184
  }
8400
9185
  };
8401
9186
 
8402
- // src/core/endpoints/militaryCampaignEndpoints.ts
9187
+ // src/schemas/cosmetics.ts
9188
+ var import_zod68 = require("zod");
9189
+ var SkinrLicenseSchema = import_zod68.z.looseObject({
9190
+ skinr_id: import_zod68.z.string(),
9191
+ activated: import_zod68.z.boolean(),
9192
+ unactivated: import_zod68.z.number()
9193
+ });
9194
+ var CharacterSkinrSchema = import_zod68.z.looseObject({
9195
+ licenses: import_zod68.z.array(SkinrLicenseSchema)
9196
+ });
9197
+ var SkinrComponentRunsSchema = import_zod68.z.looseObject({
9198
+ remaining: import_zod68.z.number().optional(),
9199
+ unlimited: import_zod68.z.boolean().optional()
9200
+ });
9201
+ var SkinrComponentLicenseSchema = import_zod68.z.looseObject({
9202
+ component_id: import_zod68.z.number(),
9203
+ type: esiEnum(["nanocoating", "pattern"]),
9204
+ runs: SkinrComponentRunsSchema
9205
+ });
9206
+ var CharacterSkinrComponentsSchema = import_zod68.z.looseObject({
9207
+ licenses: import_zod68.z.array(SkinrComponentLicenseSchema)
9208
+ });
9209
+ var SkinrTierSchema = import_zod68.z.looseObject({
9210
+ level: import_zod68.z.number()
9211
+ });
9212
+ var SkinrLayoutSlotSchema = import_zod68.z.looseObject({});
9213
+ var SkinrLayoutSchema = import_zod68.z.looseObject({
9214
+ slots: import_zod68.z.array(SkinrLayoutSlotSchema),
9215
+ pattern_blend_mode: esiEnum([
9216
+ "normal",
9217
+ "subtract",
9218
+ "exclusion",
9219
+ "nested",
9220
+ "nested_inverted"
9221
+ ])
9222
+ });
9223
+ var SkinrSchema = import_zod68.z.looseObject({
9224
+ id: import_zod68.z.string(),
9225
+ name: import_zod68.z.string(),
9226
+ creator_id: import_zod68.z.number(),
9227
+ ship_type_id: import_zod68.z.number(),
9228
+ line: import_zod68.z.string().optional(),
9229
+ tier: SkinrTierSchema,
9230
+ layout: SkinrLayoutSchema
9231
+ });
9232
+
9233
+ // src/core/endpoints/cosmeticsEndpoints.ts
9234
+ var cosmeticsEndpoints = {
9235
+ getCharacterSkinr: {
9236
+ path: "characters/{characterId}/cosmetics/skinr",
9237
+ method: "GET",
9238
+ requiresAuth: true,
9239
+ pathParams: ["characterId"],
9240
+ responseSchema: CharacterSkinrSchema
9241
+ },
9242
+ getCharacterSkinrComponents: {
9243
+ path: "characters/{characterId}/cosmetics/skinr/components",
9244
+ method: "GET",
9245
+ requiresAuth: true,
9246
+ pathParams: ["characterId"],
9247
+ responseSchema: CharacterSkinrComponentsSchema
9248
+ },
9249
+ getSkinr: {
9250
+ path: "cosmetics/skinr/{skinrId}",
9251
+ method: "GET",
9252
+ requiresAuth: false,
9253
+ pathParams: ["skinrId"],
9254
+ responseSchema: SkinrSchema
9255
+ }
9256
+ };
9257
+
9258
+ // src/clients/CosmeticsClient.ts
9259
+ var CosmeticsClient = class extends BaseEsiClient {
9260
+ constructor(client) {
9261
+ super(client, cosmeticsEndpoints);
9262
+ }
9263
+ getCharacterSkinr(characterId) {
9264
+ return this.api.getCharacterSkinr(characterId);
9265
+ }
9266
+ getCharacterSkinrComponents(characterId) {
9267
+ return this.api.getCharacterSkinrComponents(characterId);
9268
+ }
9269
+ getSkinr(skinrId) {
9270
+ return this.api.getSkinr(skinrId);
9271
+ }
9272
+ };
9273
+
9274
+ // src/schemas/paragon-hub.ts
8403
9275
  var import_zod69 = require("zod");
9276
+ var ParagonHubCursorSchema = import_zod69.z.looseObject({
9277
+ after: import_zod69.z.string().optional(),
9278
+ before: import_zod69.z.string().optional()
9279
+ });
9280
+ var ParagonHubSkinrPriceSchema = import_zod69.z.looseObject({
9281
+ isk: import_zod69.z.number().optional(),
9282
+ plex: import_zod69.z.number().optional()
9283
+ });
9284
+ var ParagonHubSkinrListingSchema = import_zod69.z.looseObject({
9285
+ id: import_zod69.z.string(),
9286
+ state: esiEnum(["listed", "sold_out", "expired", "removed"]),
9287
+ last_modified: import_zod69.z.string(),
9288
+ seller_id: import_zod69.z.number(),
9289
+ skinr_id: import_zod69.z.string(),
9290
+ created: import_zod69.z.string(),
9291
+ expires: import_zod69.z.string(),
9292
+ quantity: import_zod69.z.number(),
9293
+ price: ParagonHubSkinrPriceSchema
9294
+ });
9295
+ var ParagonHubSkinrTargetSchema = import_zod69.z.looseObject({
9296
+ character_id: import_zod69.z.number().optional(),
9297
+ corporation_id: import_zod69.z.number().optional(),
9298
+ alliance_id: import_zod69.z.number().optional(),
9299
+ public: import_zod69.z.boolean().optional()
9300
+ });
9301
+ var ParagonHubCharacterListingSchema = import_zod69.z.looseObject({
9302
+ id: import_zod69.z.string(),
9303
+ state: esiEnum(["listed", "sold_out", "expired", "removed"]),
9304
+ last_modified: import_zod69.z.string(),
9305
+ seller_id: import_zod69.z.number(),
9306
+ skinr_id: import_zod69.z.string(),
9307
+ created: import_zod69.z.string(),
9308
+ expires: import_zod69.z.string(),
9309
+ quantity: import_zod69.z.number(),
9310
+ price: ParagonHubSkinrPriceSchema,
9311
+ target: ParagonHubSkinrTargetSchema
9312
+ });
9313
+ var ParagonHubSkinrResponseSchema = import_zod69.z.looseObject({
9314
+ cursor: ParagonHubCursorSchema.optional(),
9315
+ listings: import_zod69.z.array(ParagonHubSkinrListingSchema)
9316
+ });
9317
+ var ParagonHubCharacterSkinrResponseSchema = import_zod69.z.looseObject({
9318
+ cursor: ParagonHubCursorSchema.optional(),
9319
+ listings: import_zod69.z.array(ParagonHubCharacterListingSchema)
9320
+ });
9321
+
9322
+ // src/core/endpoints/paragonHubEndpoints.ts
9323
+ var paragonHubEndpoints = {
9324
+ getPublicListings: {
9325
+ path: "paragon-hub/skinr",
9326
+ method: "GET",
9327
+ requiresAuth: false,
9328
+ queryParams: { after: "after", before: "before", limit: "limit" },
9329
+ responseSchema: ParagonHubSkinrResponseSchema
9330
+ },
9331
+ getCharacterListings: {
9332
+ path: "characters/{characterId}/paragon-hub/skinr",
9333
+ method: "GET",
9334
+ requiresAuth: true,
9335
+ pathParams: ["characterId"],
9336
+ queryParams: { after: "after", before: "before", limit: "limit" },
9337
+ responseSchema: ParagonHubCharacterSkinrResponseSchema
9338
+ },
9339
+ getAllianceListings: {
9340
+ path: "paragon-hub/skinr/alliances/{allianceId}",
9341
+ method: "GET",
9342
+ requiresAuth: true,
9343
+ pathParams: ["allianceId"],
9344
+ queryParams: { after: "after", before: "before", limit: "limit" },
9345
+ responseSchema: ParagonHubSkinrResponseSchema
9346
+ },
9347
+ getCharacterTargetedListings: {
9348
+ path: "paragon-hub/skinr/characters/{characterId}",
9349
+ method: "GET",
9350
+ requiresAuth: true,
9351
+ pathParams: ["characterId"],
9352
+ queryParams: { after: "after", before: "before", limit: "limit" },
9353
+ responseSchema: ParagonHubSkinrResponseSchema
9354
+ },
9355
+ getCorporationListings: {
9356
+ path: "paragon-hub/skinr/corporations/{corporationId}",
9357
+ method: "GET",
9358
+ requiresAuth: true,
9359
+ pathParams: ["corporationId"],
9360
+ queryParams: { after: "after", before: "before", limit: "limit" },
9361
+ responseSchema: ParagonHubSkinrResponseSchema
9362
+ }
9363
+ };
9364
+
9365
+ // src/clients/ParagonHubClient.ts
9366
+ var ParagonHubClient = class extends BaseEsiClient {
9367
+ constructor(client) {
9368
+ super(client, paragonHubEndpoints);
9369
+ }
9370
+ getPublicListings(after, before, limit) {
9371
+ return this.api.getPublicListings(after, before, limit);
9372
+ }
9373
+ getCharacterListings(characterId, after, before, limit) {
9374
+ return this.api.getCharacterListings(characterId, after, before, limit);
9375
+ }
9376
+ getAllianceListings(allianceId, after, before, limit) {
9377
+ return this.api.getAllianceListings(allianceId, after, before, limit);
9378
+ }
9379
+ getCharacterTargetedListings(characterId, after, before, limit) {
9380
+ return this.api.getCharacterTargetedListings(
9381
+ characterId,
9382
+ after,
9383
+ before,
9384
+ limit
9385
+ );
9386
+ }
9387
+ getCorporationListings(corporationId, after, before, limit) {
9388
+ return this.api.getCorporationListings(corporationId, after, before, limit);
9389
+ }
9390
+ };
9391
+
9392
+ // src/core/endpoints/militaryCampaignEndpoints.ts
9393
+ var import_zod71 = require("zod");
8404
9394
 
8405
9395
  // src/schemas/military-campaigns.ts
8406
- var import_zod68 = require("zod");
8407
- var MilitaryCampaignSchema = import_zod68.z.looseObject({
8408
- campaign_id: import_zod68.z.string(),
8409
- state: import_zod68.z.string(),
8410
- progress: import_zod68.z.number(),
8411
- start_time: import_zod68.z.string(),
8412
- finish_time: import_zod68.z.string().optional()
8413
- });
8414
- var MilitaryCampaignObjectiveSchema = import_zod68.z.looseObject({
8415
- objective_id: import_zod68.z.string(),
8416
- campaign_id: import_zod68.z.string(),
8417
- state: import_zod68.z.string(),
8418
- progress: import_zod68.z.number(),
8419
- participants: import_zod68.z.looseObject({
8420
- total: import_zod68.z.number(),
8421
- committed: import_zod68.z.number(),
8422
- contributors: import_zod68.z.number()
9396
+ var import_zod70 = require("zod");
9397
+ var MilitaryCampaignSchema = import_zod70.z.looseObject({
9398
+ campaign_id: import_zod70.z.string(),
9399
+ state: import_zod70.z.string(),
9400
+ progress: import_zod70.z.number(),
9401
+ start_time: import_zod70.z.string(),
9402
+ finish_time: import_zod70.z.string().optional()
9403
+ });
9404
+ var MilitaryCampaignObjectiveSchema = import_zod70.z.looseObject({
9405
+ objective_id: import_zod70.z.string(),
9406
+ campaign_id: import_zod70.z.string(),
9407
+ state: import_zod70.z.string(),
9408
+ progress: import_zod70.z.number(),
9409
+ participants: import_zod70.z.looseObject({
9410
+ total: import_zod70.z.number(),
9411
+ committed: import_zod70.z.number(),
9412
+ contributors: import_zod70.z.number()
8423
9413
  })
8424
9414
  });
8425
- var CharacterMilitaryCampaignObjectiveSchema = import_zod68.z.looseObject({
8426
- objective_id: import_zod68.z.string(),
8427
- campaign_id: import_zod68.z.string(),
8428
- committed: import_zod68.z.boolean(),
8429
- contribution: import_zod68.z.number()
9415
+ var CharacterMilitaryCampaignObjectiveSchema = import_zod70.z.looseObject({
9416
+ objective_id: import_zod70.z.string(),
9417
+ campaign_id: import_zod70.z.string(),
9418
+ committed: import_zod70.z.boolean(),
9419
+ contribution: import_zod70.z.number()
8430
9420
  });
8431
9421
 
8432
9422
  // src/core/endpoints/militaryCampaignEndpoints.ts
@@ -8435,7 +9425,7 @@ var militaryCampaignEndpoints = {
8435
9425
  path: "military-campaigns",
8436
9426
  method: "GET",
8437
9427
  requiresAuth: false,
8438
- responseSchema: import_zod69.z.array(MilitaryCampaignSchema)
9428
+ responseSchema: import_zod71.z.array(MilitaryCampaignSchema)
8439
9429
  },
8440
9430
  getMilitaryCampaign: {
8441
9431
  path: "military-campaigns/{campaignId}",
@@ -8449,7 +9439,7 @@ var militaryCampaignEndpoints = {
8449
9439
  method: "GET",
8450
9440
  requiresAuth: false,
8451
9441
  pathParams: ["campaignId"],
8452
- responseSchema: import_zod69.z.array(MilitaryCampaignObjectiveSchema)
9442
+ responseSchema: import_zod71.z.array(MilitaryCampaignObjectiveSchema)
8453
9443
  },
8454
9444
  getMilitaryCampaignObjective: {
8455
9445
  path: "military-campaigns/{campaignId}/objectives/{objectiveId}",
@@ -8463,7 +9453,7 @@ var militaryCampaignEndpoints = {
8463
9453
  method: "GET",
8464
9454
  requiresAuth: true,
8465
9455
  pathParams: ["characterId"],
8466
- responseSchema: import_zod69.z.array(CharacterMilitaryCampaignObjectiveSchema)
9456
+ responseSchema: import_zod71.z.array(CharacterMilitaryCampaignObjectiveSchema)
8467
9457
  },
8468
9458
  getCharacterMilitaryCampaignObjective: {
8469
9459
  path: "characters/{characterId}/military-campaigns/objectives/{objectiveId}",
@@ -8577,6 +9567,8 @@ var clientFactories = {
8577
9567
  meta: MetaClient,
8578
9568
  freelanceJobs: FreelanceJobsClient,
8579
9569
  skyhooks: SkyhooksClient,
9570
+ cosmetics: CosmeticsClient,
9571
+ paragonHub: ParagonHubClient,
8580
9572
  mercenary: MercenaryClient,
8581
9573
  militaryCampaigns: MilitaryCampaignsClient,
8582
9574
  accessLists: AccessListsClient
@@ -8988,8 +9980,8 @@ var esiRateLimitGroups = {
8988
9980
  "PUT:fleets/{fleet_id}/wings/{wing_id}": { group: "fleet", maxTokens: 1800, windowSizeMs: 9e5 },
8989
9981
  "DELETE:fleets/{fleet_id}/wings/{wing_id}": { group: "fleet", maxTokens: 1800, windowSizeMs: 9e5 },
8990
9982
  "POST:fleets/{fleet_id}/wings/{wing_id}/squads": { group: "fleet", maxTokens: 1800, windowSizeMs: 9e5 },
8991
- "GET:freelance-jobs": { group: "freelance-job", maxTokens: 900, windowSizeMs: 9e5 },
8992
- "GET:freelance-jobs/{job_id}": { group: "freelance-job", maxTokens: 900, windowSizeMs: 9e5 },
9983
+ "GET:freelance-jobs": { group: "freelance-job", maxTokens: 12e3, windowSizeMs: 9e5 },
9984
+ "GET:freelance-jobs/{job_id}": { group: "freelance-job", maxTokens: 12e3, windowSizeMs: 9e5 },
8993
9985
  "GET:fw/leaderboards": { group: "factional-warfare", maxTokens: 150, windowSizeMs: 9e5 },
8994
9986
  "GET:fw/leaderboards/characters": { group: "factional-warfare", maxTokens: 150, windowSizeMs: 9e5 },
8995
9987
  "GET:fw/leaderboards/corporations": { group: "factional-warfare", maxTokens: 150, windowSizeMs: 9e5 },
@@ -9034,6 +10026,7 @@ var RateLimiter = class _RateLimiter {
9034
10026
  minDelayMs;
9035
10027
  decelerationThreshold;
9036
10028
  userKeyExtractor;
10029
+ endpointOverrides;
9037
10030
  lastRequestTime = 0;
9038
10031
  minDelayChain = Promise.resolve();
9039
10032
  isTestMode = false;
@@ -9047,6 +10040,7 @@ var RateLimiter = class _RateLimiter {
9047
10040
  this.minDelayMs = config?.minDelayMs ?? 50;
9048
10041
  this.decelerationThreshold = config?.decelerationThreshold ?? 0.2;
9049
10042
  this.userKeyExtractor = config?.userKeyExtractor;
10043
+ this.endpointOverrides = config?.endpointOverrides ?? {};
9050
10044
  if (this.userKeyExtractor) {
9051
10045
  this.userBuckets = /* @__PURE__ */ new Map();
9052
10046
  }
@@ -9089,6 +10083,14 @@ var RateLimiter = class _RateLimiter {
9089
10083
  if (!templatePath || !method) return void 0;
9090
10084
  const normalized = templatePath.replace(/\/$/, "").replace(/\{(\w+)\}/g, (_, name) => `{${camelToSnake(name)}}`);
9091
10085
  const key = `${method}:${normalized}`;
10086
+ const override = this.endpointOverrides[key];
10087
+ if (override) {
10088
+ return {
10089
+ group: `endpoint:${key}`,
10090
+ maxTokens: override.maxTokens,
10091
+ windowSizeMs: override.windowSizeMs
10092
+ };
10093
+ }
9092
10094
  return esiRateLimitGroups[key];
9093
10095
  }
9094
10096
  resolveUserSet(requestHeaders) {
@@ -9571,6 +10573,12 @@ var EsiClient = class {
9571
10573
  get freelanceJobs() {
9572
10574
  return this.getClient("freelanceJobs");
9573
10575
  }
10576
+ get cosmetics() {
10577
+ return this.getClient("cosmetics");
10578
+ }
10579
+ get paragonHub() {
10580
+ return this.getClient("paragonHub");
10581
+ }
9574
10582
  get skyhooks() {
9575
10583
  return this.getClient("skyhooks");
9576
10584
  }
@@ -9947,6 +10955,7 @@ var ApiClientBuilder = class {
9947
10955
  cache;
9948
10956
  circuitBreaker;
9949
10957
  _timeout;
10958
+ _fetch;
9950
10959
  setClientId(clientId) {
9951
10960
  this.clientId = clientId;
9952
10961
  return this;
@@ -9975,12 +10984,17 @@ var ApiClientBuilder = class {
9975
10984
  this._timeout = timeout;
9976
10985
  return this;
9977
10986
  }
10987
+ setFetch(fn) {
10988
+ this._fetch = fn;
10989
+ return this;
10990
+ }
9978
10991
  build() {
9979
10992
  const client = new ApiClient(this.clientId, this.link, this.accessToken);
9980
10993
  client.setRateLimiter(this.rateLimiter ?? new RateLimiter());
9981
10994
  if (this.cache) client.setCache(this.cache);
9982
10995
  if (this.circuitBreaker) client.setCircuitBreaker(this.circuitBreaker);
9983
10996
  if (this._timeout !== void 0) client.setTimeout(this._timeout);
10997
+ if (this._fetch) client.setFetch(this._fetch);
9984
10998
  return client;
9985
10999
  }
9986
11000
  };
@@ -10116,6 +11130,19 @@ var esiEndpointScopes = {
10116
11130
  "GET:universe/structures/{structure_id}": ["esi-universe.read_structures.v1"]
10117
11131
  };
10118
11132
 
11133
+ // src/core/logger/NoopLogger.ts
11134
+ var noop = () => {
11135
+ };
11136
+ var noopLogger = {
11137
+ info: noop,
11138
+ warn: noop,
11139
+ error: noop,
11140
+ debug: noop
11141
+ };
11142
+ function createNoopLogger() {
11143
+ return noopLogger;
11144
+ }
11145
+
10119
11146
  // src/types/branded.ts
10120
11147
  function brand(value) {
10121
11148
  return value;
@@ -10160,6 +11187,8 @@ __export(schemas_exports, {
10160
11187
  CharacterShipSchema: () => CharacterShipSchema,
10161
11188
  CharacterSkillSchema: () => CharacterSkillSchema,
10162
11189
  CharacterSkillsResponseSchema: () => CharacterSkillsResponseSchema,
11190
+ CharacterSkinrComponentsSchema: () => CharacterSkinrComponentsSchema,
11191
+ CharacterSkinrSchema: () => CharacterSkinrSchema,
10163
11192
  CharacterTitleSchema: () => CharacterTitleSchema,
10164
11193
  CloneInfoSchema: () => CloneInfoSchema,
10165
11194
  ColonyLayoutSchema: () => ColonyLayoutSchema,
@@ -10240,7 +11269,13 @@ __export(schemas_exports, {
10240
11269
  MarketOrderSchema: () => MarketOrderSchema,
10241
11270
  MarketPriceSchema: () => MarketPriceSchema,
10242
11271
  MedalSchema: () => MedalSchema,
11272
+ MercenaryDenDetailEvolutionSchema: () => MercenaryDenDetailEvolutionSchema,
11273
+ MercenaryDenDetailInfomorphsSchema: () => MercenaryDenDetailInfomorphsSchema,
11274
+ MercenaryDenDetailReinforcementTimerSchema: () => MercenaryDenDetailReinforcementTimerSchema,
11275
+ MercenaryDenDetailSchema: () => MercenaryDenDetailSchema,
11276
+ MercenaryDenDetailSkyhookSchema: () => MercenaryDenDetailSkyhookSchema,
10243
11277
  MercenaryDenSchema: () => MercenaryDenSchema,
11278
+ MercenaryTacticalOperationDetailSchema: () => MercenaryTacticalOperationDetailSchema,
10244
11279
  MercenaryTacticalOperationSchema: () => MercenaryTacticalOperationSchema,
10245
11280
  MetaChangelogEntrySchema: () => MetaChangelogEntrySchema,
10246
11281
  MetaChangelogSchema: () => MetaChangelogSchema,
@@ -10257,6 +11292,13 @@ __export(schemas_exports, {
10257
11292
  NameAndCategorySchema: () => NameAndCategorySchema,
10258
11293
  NotificationSchema: () => NotificationSchema,
10259
11294
  OrbitalSkyhookSchema: () => OrbitalSkyhookSchema,
11295
+ ParagonHubCharacterListingSchema: () => ParagonHubCharacterListingSchema,
11296
+ ParagonHubCharacterSkinrResponseSchema: () => ParagonHubCharacterSkinrResponseSchema,
11297
+ ParagonHubCursorSchema: () => ParagonHubCursorSchema,
11298
+ ParagonHubSkinrListingSchema: () => ParagonHubSkinrListingSchema,
11299
+ ParagonHubSkinrPriceSchema: () => ParagonHubSkinrPriceSchema,
11300
+ ParagonHubSkinrResponseSchema: () => ParagonHubSkinrResponseSchema,
11301
+ ParagonHubSkinrTargetSchema: () => ParagonHubSkinrTargetSchema,
10260
11302
  PlanetInfoSchema: () => PlanetInfoSchema,
10261
11303
  PlanetaryColonySchema: () => PlanetaryColonySchema,
10262
11304
  RaceSchema: () => RaceSchema,
@@ -10267,8 +11309,27 @@ __export(schemas_exports, {
10267
11309
  SearchResultSchema: () => SearchResultSchema,
10268
11310
  ServerStatusSchema: () => ServerStatusSchema,
10269
11311
  SkillQueueSchema: () => SkillQueueSchema,
11312
+ SkinrComponentLicenseSchema: () => SkinrComponentLicenseSchema,
11313
+ SkinrComponentRunsSchema: () => SkinrComponentRunsSchema,
11314
+ SkinrLayoutSchema: () => SkinrLayoutSchema,
11315
+ SkinrLayoutSlotSchema: () => SkinrLayoutSlotSchema,
11316
+ SkinrLicenseSchema: () => SkinrLicenseSchema,
11317
+ SkinrSchema: () => SkinrSchema,
11318
+ SkinrTierSchema: () => SkinrTierSchema,
11319
+ SkyhookDetailReagentSchema: () => SkyhookDetailReagentSchema,
11320
+ SkyhookDetailReinforcementTimerSchema: () => SkyhookDetailReinforcementTimerSchema,
11321
+ SkyhookDetailSchema: () => SkyhookDetailSchema,
11322
+ SkyhookDetailTheftVulnerabilitySchema: () => SkyhookDetailTheftVulnerabilitySchema,
10270
11323
  SolarSystemInfoSchema: () => SolarSystemInfoSchema,
10271
11324
  SovereigntyCampaignSchema: () => SovereigntyCampaignSchema,
11325
+ SovereigntyHubDetailReagentBaySchema: () => SovereigntyHubDetailReagentBaySchema,
11326
+ SovereigntyHubDetailReagentSchema: () => SovereigntyHubDetailReagentSchema,
11327
+ SovereigntyHubDetailResourceSchema: () => SovereigntyHubDetailResourceSchema,
11328
+ SovereigntyHubDetailResourcesSchema: () => SovereigntyHubDetailResourcesSchema,
11329
+ SovereigntyHubDetailSchema: () => SovereigntyHubDetailSchema,
11330
+ SovereigntyHubDetailTransportSchema: () => SovereigntyHubDetailTransportSchema,
11331
+ SovereigntyHubDetailUpgradeSchema: () => SovereigntyHubDetailUpgradeSchema,
11332
+ SovereigntyHubDetailVulnerabilityWindowSchema: () => SovereigntyHubDetailVulnerabilityWindowSchema,
10272
11333
  SovereigntyHubSchema: () => SovereigntyHubSchema2,
10273
11334
  SovereigntySystemSchema: () => SovereigntySystemSchema,
10274
11335
  SovereigntySystemStructureSchema: () => SovereigntySystemStructureSchema,
@@ -10305,6 +11366,7 @@ __export(schemas_exports, {
10305
11366
  ContractsClient,
10306
11367
  CorporationProjectsClient,
10307
11368
  CorporationsClient,
11369
+ CosmeticsClient,
10308
11370
  CustomEsiClient,
10309
11371
  DogmaClient,
10310
11372
  ETagCacheManager,
@@ -10330,6 +11392,7 @@ __export(schemas_exports, {
10330
11392
  MercenaryClient,
10331
11393
  MetaClient,
10332
11394
  MilitaryCampaignsClient,
11395
+ ParagonHubClient,
10333
11396
  PiClient,
10334
11397
  RateLimiter,
10335
11398
  RequestDeduplicator,
@@ -10349,8 +11412,10 @@ __export(schemas_exports, {
10349
11412
  brand,
10350
11413
  buildEndpointPath,
10351
11414
  configureApiClient,
11415
+ createNoopLogger,
10352
11416
  esiEndpointScopes,
10353
11417
  fetchAllCursorPages,
11418
+ fetchAllPages,
10354
11419
  fetchPages,
10355
11420
  getDefaultClient,
10356
11421
  isCircuitOpen,