@lgriffin/esi.ts 9.7.0 → 10.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.
Files changed (216) hide show
  1. package/CHANGELOG.md +370 -0
  2. package/README.md +168 -231
  3. package/dist/EsiClient.d.ts +4 -0
  4. package/dist/EsiClient.d.ts.map +1 -1
  5. package/dist/EsiClientBuilder.d.ts.map +1 -1
  6. package/dist/auth/EsiTokenManager.d.ts +200 -0
  7. package/dist/auth/EsiTokenManager.d.ts.map +1 -0
  8. package/dist/auth/EveSsoClient.d.ts +88 -0
  9. package/dist/auth/EveSsoClient.d.ts.map +1 -0
  10. package/dist/auth/errors.d.ts +42 -0
  11. package/dist/auth/errors.d.ts.map +1 -0
  12. package/dist/auth/index.d.ts +14 -0
  13. package/dist/auth/index.d.ts.map +1 -0
  14. package/dist/auth/jwt.d.ts +43 -0
  15. package/dist/auth/jwt.d.ts.map +1 -0
  16. package/dist/auth/pkce.d.ts +21 -0
  17. package/dist/auth/pkce.d.ts.map +1 -0
  18. package/dist/auth/storage/FileTokenStorage.d.ts +44 -0
  19. package/dist/auth/storage/FileTokenStorage.d.ts.map +1 -0
  20. package/dist/auth/storage/MemoryTokenStorage.d.ts +18 -0
  21. package/dist/auth/storage/MemoryTokenStorage.d.ts.map +1 -0
  22. package/dist/auth/types.d.ts +42 -0
  23. package/dist/auth/types.d.ts.map +1 -0
  24. package/dist/chunk-3ZI5A37L.mjs +1065 -0
  25. package/dist/chunk-3ZI5A37L.mjs.map +1 -0
  26. package/dist/chunk-7A72QFDF.mjs +416 -0
  27. package/dist/chunk-7A72QFDF.mjs.map +1 -0
  28. package/dist/chunk-BBSHKVPI.js +71 -0
  29. package/dist/chunk-BBSHKVPI.js.map +1 -0
  30. package/dist/chunk-HPSACXX3.js +416 -0
  31. package/dist/chunk-HPSACXX3.js.map +1 -0
  32. package/dist/chunk-JIW4BXLP.mjs +17 -0
  33. package/dist/chunk-JIW4BXLP.mjs.map +1 -0
  34. package/dist/chunk-MSJHIJXA.js +1065 -0
  35. package/dist/chunk-MSJHIJXA.js.map +1 -0
  36. package/dist/chunk-PZ5AY32C.js +10 -0
  37. package/dist/chunk-PZ5AY32C.js.map +1 -0
  38. package/dist/chunk-R7D7M2LQ.mjs +71 -0
  39. package/dist/chunk-R7D7M2LQ.mjs.map +1 -0
  40. package/dist/chunk-SAQBXXTM.js +2614 -0
  41. package/dist/chunk-SAQBXXTM.js.map +1 -0
  42. package/dist/chunk-VZS32UQ3.mjs +2614 -0
  43. package/dist/chunk-VZS32UQ3.mjs.map +1 -0
  44. package/dist/clients/AllianceClient.d.ts.map +1 -1
  45. package/dist/clients/ContractsClient.d.ts +12 -9
  46. package/dist/clients/ContractsClient.d.ts.map +1 -1
  47. package/dist/clients/CorporationProjectsClient.d.ts +22 -12
  48. package/dist/clients/CorporationProjectsClient.d.ts.map +1 -1
  49. package/dist/clients/FactionClient.d.ts +4 -4
  50. package/dist/clients/FactionClient.d.ts.map +1 -1
  51. package/dist/clients/FreelanceJobsClient.d.ts +3 -3
  52. package/dist/clients/FreelanceJobsClient.d.ts.map +1 -1
  53. package/dist/clients/IndustryClient.d.ts +4 -4
  54. package/dist/clients/IndustryClient.d.ts.map +1 -1
  55. package/dist/clients/MailClient.d.ts +4 -4
  56. package/dist/clients/MailClient.d.ts.map +1 -1
  57. package/dist/clients/MetaClient.d.ts +3 -2
  58. package/dist/clients/MetaClient.d.ts.map +1 -1
  59. package/dist/clients/WalletClient.d.ts +4 -4
  60. package/dist/clients/WalletClient.d.ts.map +1 -1
  61. package/dist/core/ApiClient.d.ts +4 -0
  62. package/dist/core/ApiClient.d.ts.map +1 -1
  63. package/dist/core/ApiRequestHandler.d.ts.map +1 -1
  64. package/dist/core/BatchRequestHandler.d.ts.map +1 -1
  65. package/dist/core/RequestDeduplicator.d.ts +2 -0
  66. package/dist/core/RequestDeduplicator.d.ts.map +1 -1
  67. package/dist/core/RetryStrategy.d.ts +2 -0
  68. package/dist/core/RetryStrategy.d.ts.map +1 -1
  69. package/dist/core/cache/ETagCacheManager.d.ts +4 -0
  70. package/dist/core/cache/ETagCacheManager.d.ts.map +1 -1
  71. package/dist/core/circuitBreaker/CircuitBreaker.d.ts +3 -0
  72. package/dist/core/circuitBreaker/CircuitBreaker.d.ts.map +1 -1
  73. package/dist/core/configureApiClient.d.ts.map +1 -1
  74. package/dist/core/constants.d.ts +2 -2
  75. package/dist/core/constants.d.ts.map +1 -1
  76. package/dist/core/endpoints/calendarEndpoints.d.ts +7 -7
  77. package/dist/core/endpoints/characterEndpoints.d.ts +2 -2
  78. package/dist/core/endpoints/cloneEndpoints.d.ts +2 -2
  79. package/dist/core/endpoints/contractEndpoints.d.ts +15 -22
  80. package/dist/core/endpoints/contractEndpoints.d.ts.map +1 -1
  81. package/dist/core/endpoints/corporationEndpoints.d.ts +19 -22
  82. package/dist/core/endpoints/corporationEndpoints.d.ts.map +1 -1
  83. package/dist/core/endpoints/corporationProjectEndpoints.d.ts +75 -23
  84. package/dist/core/endpoints/corporationProjectEndpoints.d.ts.map +1 -1
  85. package/dist/core/endpoints/createClient.d.ts.map +1 -1
  86. package/dist/core/endpoints/dogmaEndpoints.d.ts +2 -2
  87. package/dist/core/endpoints/factionEndpoints.d.ts +36 -36
  88. package/dist/core/endpoints/factionEndpoints.d.ts.map +1 -1
  89. package/dist/core/endpoints/fleetEndpoints.d.ts +1 -1
  90. package/dist/core/endpoints/freelanceJobsEndpoints.d.ts +131 -122
  91. package/dist/core/endpoints/freelanceJobsEndpoints.d.ts.map +1 -1
  92. package/dist/core/endpoints/industryEndpoints.d.ts +6 -6
  93. package/dist/core/endpoints/industryEndpoints.d.ts.map +1 -1
  94. package/dist/core/endpoints/mailEndpoints.d.ts +3 -5
  95. package/dist/core/endpoints/mailEndpoints.d.ts.map +1 -1
  96. package/dist/core/endpoints/mercenaryEndpoints.d.ts +1 -1
  97. package/dist/core/endpoints/metaEndpoints.d.ts +5 -1
  98. package/dist/core/endpoints/metaEndpoints.d.ts.map +1 -1
  99. package/dist/core/endpoints/piEndpoints.d.ts +2 -2
  100. package/dist/core/endpoints/statusEndpoints.d.ts +1 -1
  101. package/dist/core/endpoints/universeEndpoints.d.ts +22 -22
  102. package/dist/core/endpoints/walletEndpoints.d.ts +2 -3
  103. package/dist/core/endpoints/walletEndpoints.d.ts.map +1 -1
  104. package/dist/core/logger/DefaultLogger.d.ts +31 -0
  105. package/dist/core/logger/DefaultLogger.d.ts.map +1 -0
  106. package/dist/core/logger/ILogger.d.ts +14 -4
  107. package/dist/core/logger/ILogger.d.ts.map +1 -1
  108. package/dist/core/logger/NoopLogger.d.ts +4 -0
  109. package/dist/core/logger/NoopLogger.d.ts.map +1 -1
  110. package/dist/core/logger/clientLog.d.ts +11 -0
  111. package/dist/core/logger/clientLog.d.ts.map +1 -0
  112. package/dist/core/logger/logger.d.ts +11 -3
  113. package/dist/core/logger/logger.d.ts.map +1 -1
  114. package/dist/core/logger/loggerUtil.d.ts +8 -6
  115. package/dist/core/logger/loggerUtil.d.ts.map +1 -1
  116. package/dist/core/logger/resolveLogger.d.ts +10 -0
  117. package/dist/core/logger/resolveLogger.d.ts.map +1 -0
  118. package/dist/core/pagination/AsyncPaginationIterator.d.ts.map +1 -1
  119. package/dist/core/pagination/CursorPaginationHandler.d.ts.map +1 -1
  120. package/dist/core/pagination/PaginationHandler.d.ts.map +1 -1
  121. package/dist/core/rateLimiter/RateLimiter.d.ts.map +1 -1
  122. package/dist/core/requestPipeline/cachePolicy.d.ts +14 -0
  123. package/dist/core/requestPipeline/cachePolicy.d.ts.map +1 -1
  124. package/dist/core/requestPipeline/fetchExecution.d.ts +1 -1
  125. package/dist/core/requestPipeline/fetchExecution.d.ts.map +1 -1
  126. package/dist/core/requestPipeline/headers.d.ts.map +1 -1
  127. package/dist/core/requestPipeline/index.d.ts +2 -2
  128. package/dist/core/requestPipeline/index.d.ts.map +1 -1
  129. package/dist/core/requestPipeline/paginationOrchestration.d.ts.map +1 -1
  130. package/dist/core/requestPipeline/statusHandling.d.ts +8 -2
  131. package/dist/core/requestPipeline/statusHandling.d.ts.map +1 -1
  132. package/dist/core/util/concurrency.d.ts +29 -0
  133. package/dist/core/util/concurrency.d.ts.map +1 -0
  134. package/dist/errors.d.ts +1 -0
  135. package/dist/errors.d.ts.map +1 -1
  136. package/dist/errors.js +53 -195
  137. package/dist/errors.js.map +1 -1
  138. package/dist/errors.mjs +37 -129
  139. package/dist/errors.mjs.map +1 -1
  140. package/dist/index.d.ts +6 -2
  141. package/dist/index.d.ts.map +1 -1
  142. package/dist/index.js +1972 -3472
  143. package/dist/index.js.map +1 -1
  144. package/dist/index.mjs +1606 -2995
  145. package/dist/index.mjs.map +1 -1
  146. package/dist/schemas/calendar.d.ts +9 -7
  147. package/dist/schemas/calendar.d.ts.map +1 -1
  148. package/dist/schemas/character.d.ts +2 -2
  149. package/dist/schemas/clones.d.ts +2 -2
  150. package/dist/schemas/contracts.d.ts +69 -6
  151. package/dist/schemas/contracts.d.ts.map +1 -1
  152. package/dist/schemas/corporation-projects.d.ts +96 -9
  153. package/dist/schemas/corporation-projects.d.ts.map +1 -1
  154. package/dist/schemas/corporation.d.ts +34 -22
  155. package/dist/schemas/corporation.d.ts.map +1 -1
  156. package/dist/schemas/dogma.d.ts +2 -2
  157. package/dist/schemas/faction-warfare.d.ts +125 -12
  158. package/dist/schemas/faction-warfare.d.ts.map +1 -1
  159. package/dist/schemas/fleet.d.ts +1 -1
  160. package/dist/schemas/freelance-jobs.d.ts +52 -22
  161. package/dist/schemas/freelance-jobs.d.ts.map +1 -1
  162. package/dist/schemas/index.js +420 -2479
  163. package/dist/schemas/index.js.map +1 -1
  164. package/dist/schemas/index.mjs +225 -2065
  165. package/dist/schemas/index.mjs.map +1 -1
  166. package/dist/schemas/industry.d.ts +33 -0
  167. package/dist/schemas/industry.d.ts.map +1 -1
  168. package/dist/schemas/mail.d.ts +24 -5
  169. package/dist/schemas/mail.d.ts.map +1 -1
  170. package/dist/schemas/mercenary.d.ts +1 -1
  171. package/dist/schemas/meta.d.ts +12 -1
  172. package/dist/schemas/meta.d.ts.map +1 -1
  173. package/dist/schemas/pi.d.ts +2 -2
  174. package/dist/schemas/status.d.ts +1 -1
  175. package/dist/schemas/universe.d.ts +22 -22
  176. package/dist/schemas/universe.d.ts.map +1 -1
  177. package/dist/schemas/wallet.d.ts +16 -0
  178. package/dist/schemas/wallet.d.ts.map +1 -1
  179. package/dist/sde/SdeDataProvider.d.ts.map +1 -1
  180. package/dist/sde/index.js +95 -1162
  181. package/dist/sde/index.js.map +1 -1
  182. package/dist/sde/index.mjs +73 -1091
  183. package/dist/sde/index.mjs.map +1 -1
  184. package/dist/sde/ingestion/SdeExtractor.d.ts.map +1 -1
  185. package/dist/sde/ingestion/metadata.d.ts +13 -0
  186. package/dist/sde/ingestion/metadata.d.ts.map +1 -0
  187. package/dist/sde/memory.js +21 -1095
  188. package/dist/sde/memory.js.map +1 -1
  189. package/dist/sde/memory.mjs +13 -1051
  190. package/dist/sde/memory.mjs.map +1 -1
  191. package/dist/sde/optionalPeers.d.ts +25 -0
  192. package/dist/sde/optionalPeers.d.ts.map +1 -0
  193. package/dist/testing/TestDataFactory.d.ts +28 -1
  194. package/dist/testing/TestDataFactory.d.ts.map +1 -1
  195. package/dist/testing/index.js +116 -125
  196. package/dist/testing/index.js.map +1 -1
  197. package/dist/testing/index.mjs +110 -82
  198. package/dist/testing/index.mjs.map +1 -1
  199. package/dist/types/contracts.d.ts +4 -1
  200. package/dist/types/contracts.d.ts.map +1 -1
  201. package/dist/types/corporation-projects.d.ts +5 -1
  202. package/dist/types/corporation-projects.d.ts.map +1 -1
  203. package/dist/types/faction-warfare.d.ts +9 -1
  204. package/dist/types/faction-warfare.d.ts.map +1 -1
  205. package/dist/types/freelance-jobs.d.ts +2 -1
  206. package/dist/types/freelance-jobs.d.ts.map +1 -1
  207. package/dist/types/generated/spec-alignment.check.d.ts +2 -2
  208. package/dist/types/industry.d.ts +2 -1
  209. package/dist/types/industry.d.ts.map +1 -1
  210. package/dist/types/mail.d.ts +2 -1
  211. package/dist/types/mail.d.ts.map +1 -1
  212. package/dist/types/meta.d.ts +2 -1
  213. package/dist/types/meta.d.ts.map +1 -1
  214. package/dist/types/wallet.d.ts +2 -1
  215. package/dist/types/wallet.d.ts.map +1 -1
  216. package/package.json +46 -23
package/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
  [![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)
5
5
  [![TypeScript](https://img.shields.io/badge/TypeScript-6.0%2B-blue)](https://www.typescriptlang.org/)
6
6
  [![CI/CD Pipeline](https://github.com/lgriffin/ESI.ts/actions/workflows/ci.yml/badge.svg)](https://github.com/lgriffin/ESI.ts/actions/workflows/ci.yml)
7
- [![Coverage](https://img.shields.io/badge/coverage-90%25%2B-brightgreen)](https://github.com/lgriffin/ESI.ts)
7
+ [![Coverage](https://img.shields.io/badge/coverage-95%25%2B-brightgreen)](https://github.com/lgriffin/ESI.ts)
8
8
  [![npm downloads](https://img.shields.io/npm/dm/%40lgriffin/esi.ts)](https://www.npmjs.com/package/@lgriffin/esi.ts)
9
9
  [![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/lgriffin/ESI.ts/badge)](https://scorecard.dev/viewer/?uri=github.com/lgriffin/ESI.ts)
10
10
 
@@ -41,7 +41,7 @@ Tools like `openapi-typescript` or `openapi-generator` can produce a typed clien
41
41
  | **Batch operations** | None. | `batch()` with bounded concurrency for GET fan-out, `batchPost()` with auto-chunking for large POST payloads. |
42
42
  | **Domain knowledge** | None — generic HTTP client. | 39 domain clients with typed methods, JSDoc documentation, and input validation (e.g., fleet wing/squad names are capped at 10 characters before hitting the API). |
43
43
  | **Streaming pagination** | None. | 21 domain clients with 73+ `stream*` methods via `AsyncGenerator` — process large datasets page-by-page without loading everything into memory. |
44
- | **Testing** | Whatever you write. | 167 test suites, 4,730 tests across 9 tiers including property-based fuzzing (fast-check), mutation testing (Stryker), deep contract tests against live OpenAPI spec, and consumer type tests (tsd). 52 runnable example scripts. |
44
+ | **Testing** | Whatever you write. | 171 test suites, 4,957 tests across 9 tiers including property-based fuzzing (fast-check), mutation testing (Stryker), deep contract tests against live OpenAPI spec, and consumer type tests (tsd). 52 runnable example scripts. |
45
45
 
46
46
  ### The real problem with generated clients
47
47
 
@@ -78,7 +78,7 @@ Verify everything works:
78
78
 
79
79
  ```bash
80
80
  npm run example:status # quick smoke test — checks ESI is reachable
81
- npm test # run the full test suite (167 suites, 4,730 tests)
81
+ npm test # run the full test suite (171 suites, 4,957 tests)
82
82
  ```
83
83
 
84
84
  ## Sub-path Exports
@@ -90,7 +90,7 @@ ESI.ts provides sub-path exports for targeted imports, reducing bundle size when
90
90
  import { MarketOrderSchema } from '@lgriffin/esi.ts/schemas';
91
91
 
92
92
  // Error classes and type guards
93
- import { EsiError, isCircuitOpen } from '@lgriffin/esi.ts/errors';
93
+ import { EsiError, isRetryable } from '@lgriffin/esi.ts/errors';
94
94
 
95
95
  // Test utilities
96
96
  import { TestDataFactory } from '@lgriffin/esi.ts/testing';
@@ -100,6 +100,15 @@ import { TestDataFactory } from '@lgriffin/esi.ts/testing';
100
100
 
101
101
  ESI.ts includes a standalone module for querying CCP's EVE Online Static Data Export — 102 YAML files loaded into in-memory Maps with 109 typed interfaces, Zod validation, and ~97 query methods. No database, no external services.
102
102
 
103
+ Reading SDE files needs two optional peer dependencies, which `npm install @lgriffin/esi.ts` does not install:
104
+
105
+ ```bash
106
+ npm install js-yaml # SdeDataProvider.fromDirectory and fromZip (parses the YAML)
107
+ npm install adm-zip # SdeDataProvider.fromZip (reads the ZIP archive)
108
+ ```
109
+
110
+ `@lgriffin/esi.ts/sde` loads without them, and `MemorySdeProvider` never needs them. A method that needs one that is missing throws an `SdeError` naming the package and the install command.
111
+
103
112
  ```typescript
104
113
  import { SdeDataProvider } from '@lgriffin/esi.ts/sde';
105
114
 
@@ -147,6 +156,28 @@ const wallet = await authedClient.wallet.getCharacterWallet(characterId);
147
156
  await client.shutdown();
148
157
  ```
149
158
 
159
+ ## Guides
160
+
161
+ The README orients; the guides are canonical. Each one opens with the [engineering charter](guides/CHARTER.md) requirements it implements.
162
+
163
+ | Guide | Covers |
164
+ | -------------------------------------------------- | ----------------------------------------------------------------------------------- |
165
+ | [Architecture](guides/ARCHITECTURE.md) | Layers, request path, caching, retry, rate limiting, circuit breaker, interceptors |
166
+ | [Design rules](guides/DESIGN-RULES.md) | Naming and schema conventions, adding an endpoint, adding a client, generated files |
167
+ | [Errors](guides/ERRORS.md) | Error classes, type guards, retryability, token refresh, safe mode |
168
+ | [Logging](guides/LOGGING.md) | `ILogger`, per-client loggers, pino, `ESI_LOG_LEVEL`, silencing in tests |
169
+ | [Pagination](guides/PAGINATION.md) | Offset and cursor pagination, `stream*`, `fetchAll*`, batch helpers |
170
+ | [Runtime validation](guides/RUNTIME-VALIDATION.md) | Zod response and request validation |
171
+ | [Security](guides/SECURITY.md) | Runtime defences and supply-chain controls ([policy](SECURITY.md)) |
172
+ | [Testing](guides/TESTING.md) | Test tiers, coverage, EARS specification |
173
+ | [Mutation testing](guides/MUTATION-TESTING.md) | Stryker configuration and scores |
174
+ | [Quality gates](guides/QUALITY-GATES.md) | What runs at commit, push, PR, nightly and release; every workflow and script |
175
+ | [Release](guides/RELEASE.md) | Cutting a release, changelog, provenance, signatures, supported versions |
176
+ | [Semantic versioning](guides/SEMVER.md) | What is public, major/minor/patch decisions, breaking-change commits, merge buttons |
177
+ | [OKF bundle](guides/OKF.md) | The generated Open Knowledge Format catalogue of ESI |
178
+ | [Documentation](guides/DOCUMENTATION.md) | Documentation surfaces and the TypeDoc reference |
179
+ | [Beads](guides/BEADS.md) | Issue tracking workflow |
180
+
150
181
  ## Configuration
151
182
 
152
183
  ```typescript
@@ -172,9 +203,10 @@ const client = new EsiClient({
172
203
  validateResponse: true, // Runtime Zod validation of ESI responses (default: true)
173
204
  validateRequest: false, // Opt-in request body Zod validation for POST/PUT/DELETE (default: false)
174
205
  retryStrategy: customRetryStrategy, // Injectable IRetryStrategy (default: built-in exponential backoff)
206
+ enableCircuitBreaker: false, // Opt-in circuit breaker (default: false); circuitBreakerConfig is ignored unless true
175
207
  circuitBreakerConfig: {
176
208
  keyStrategy: 'resolved', // CB keying: 'resolved' (per-URL) or 'template' (per-route) (default: 'resolved')
177
- cleanupIntervalMs: 300000, // Automatic stale circuit cleanup interval (default: 5 min)
209
+ cleanupIntervalMs: 3600000, // Stale circuit cleanup interval (default: disabled)
178
210
  },
179
211
  });
180
212
  ```
@@ -278,6 +310,107 @@ Key behaviors:
278
310
  - If the refresh callback throws (e.g., refresh token revoked), a `TOKEN_REFRESH_FAILED` error is raised
279
311
  - Without a token provider, 401 errors throw immediately as before
280
312
 
313
+ ### Token Manager (multi-character, persistent)
314
+
315
+ The refresh callback above is the low-level hook. For applications that hold tokens for one or many characters, `EsiTokenManager` does the whole lifecycle: the SSO code exchange, persistence through a pluggable storage adapter, proactive refresh ahead of expiry, coalescing of concurrent refreshes, persistence of the rotated refresh token, revocation tracking, and bulk refresh with a concurrency cap.
316
+
317
+ ```typescript
318
+ import {
319
+ EsiTokenManager,
320
+ FileTokenStorage,
321
+ generateState,
322
+ } from '@lgriffin/esi.ts';
323
+
324
+ const tokens = new EsiTokenManager({
325
+ clientId: process.env.ESI_SSO_CLIENT_ID!,
326
+ clientSecret: process.env.ESI_SSO_CLIENT_SECRET, // omit for a public (PKCE) client
327
+ callbackUrl: 'https://my-app.example/callback',
328
+ storage: new FileTokenStorage('./tokens.json'), // or MemoryTokenStorage, or your own
329
+ });
330
+
331
+ // 1. Send the player to SSO
332
+ const state = generateState();
333
+ const loginUrl = tokens.getAuthorizationUrl({
334
+ scopes: ['esi-wallet.read_character_wallet.v1'],
335
+ state,
336
+ });
337
+
338
+ // 2. On the callback, exchange the code. The character id, name and scopes
339
+ // are decoded from the token; you never have to say who just logged in.
340
+ const stored = await tokens.addCharacter(codeFromCallback);
341
+ console.log(`Added ${stored.characterName} (${stored.characterId})`);
342
+
343
+ // 3. Get a client bound to that character. Its token is refreshed before
344
+ // expiry, and again on a 401, through the manager.
345
+ const client = await tokens.createClient(stored.characterId);
346
+ const wallet = await client.wallet.getCharacterWallet(stored.characterId);
347
+
348
+ // Or just the access token, for use elsewhere
349
+ const accessToken = await tokens.getToken(stored.characterId);
350
+ ```
351
+
352
+ Public clients (desktop and CLI tools that cannot keep a secret) use PKCE:
353
+
354
+ ```typescript
355
+ import { generatePkcePair } from '@lgriffin/esi.ts';
356
+
357
+ const pkce = generatePkcePair();
358
+ const loginUrl = tokens.getAuthorizationUrl({
359
+ scopes,
360
+ state,
361
+ codeChallenge: pkce.codeChallenge,
362
+ });
363
+ // ...later, on the callback:
364
+ await tokens.addCharacter(code, { codeVerifier: pkce.codeVerifier });
365
+ ```
366
+
367
+ #### Bulk refresh
368
+
369
+ Applications holding many characters (corporation tools, alliance services) refresh in bulk. Per-character failures never reject the call; each character gets its own result. The one exception is a storage adapter that cannot list tokens, which rejects with the storage error.
370
+
371
+ ```typescript
372
+ const results = await tokens.refreshAll({
373
+ concurrency: 5, // simultaneous SSO requests (default 5)
374
+ expiringWithinMs: 5 * 60_000, // only tokens expiring in the next 5 minutes; omit for all
375
+ });
376
+
377
+ for (const r of results) {
378
+ switch (r.status) {
379
+ case 'refreshed':
380
+ break;
381
+ case 'skipped':
382
+ break; // not stale, or the run was aborted
383
+ case 'revoked':
384
+ console.log(`${r.characterId} must log in again`);
385
+ break;
386
+ case 'failed':
387
+ if (r.retryable) scheduleRetry(r.characterId);
388
+ break;
389
+ }
390
+ }
391
+ ```
392
+
393
+ #### Storage adapters
394
+
395
+ `ITokenStorage` is four async methods keyed by character id: `get`, `set`, `delete`, `list`. Two adapters ship with the library:
396
+
397
+ | Adapter | Use for |
398
+ | -------------------- | ---------------------------------------------------------------------- |
399
+ | `MemoryTokenStorage` | Tests, CLIs that log in every run, a cache in front of a durable store |
400
+ | `FileTokenStorage` | Single-process apps; atomic temp-file-and-rename writes, `0600` mode |
401
+
402
+ Implement the interface over Redis, Postgres, or a keychain for anything else. One rule matters: `set` must be durable before it resolves, because the manager persists the rotated refresh token before returning the new access token, and SSO invalidates the previous one.
403
+
404
+ Key behaviors:
405
+
406
+ - **One token per character** — re-authorizing replaces the stored token rather than accumulating a second one; a warning is logged if the new consent drops scopes
407
+ - **Proactive refresh** — `getToken` refreshes when the token is inside `refreshSkewMs` of expiry (default 60 s), so requests are never sent with a token about to fail
408
+ - **Coalescing** — concurrent refreshes for the same character share one SSO call, which matters because SSO rotates the refresh token on every use
409
+ - **Revocation tracking** — an `invalid_grant` from SSO marks the character revoked; later calls throw `TokenRevokedError` locally instead of hitting SSO again
410
+ - **Hooks** — `onRefresh`, `onRefreshError`, and `onRevoked` for logging, metrics, or prompting a re-login
411
+ - **No JWT signature verification** — tokens are trusted because they arrive directly from SSO over TLS; do not use `decodeAccessToken` to authenticate tokens presented by third parties
412
+ - **Single process per store** — two processes sharing one `FileTokenStorage` would each rotate refresh tokens the other cannot see
413
+
281
414
  ### Environment variables reference
282
415
 
283
416
  | Variable | Description | Default |
@@ -382,47 +515,15 @@ See [guides/RUNTIME-VALIDATION.md](guides/RUNTIME-VALIDATION.md) for the full gu
382
515
 
383
516
  ## Caching
384
517
 
385
- ETag caching is enabled by default. The client automatically:
386
-
387
- 1. Stores ETag and response data on GET requests
388
- 2. Sends `If-None-Match` on subsequent requests
389
- 3. Returns cached data on `304 Not Modified`
390
- 4. Parses `Cache-Control: max-age` from ESI for per-endpoint TTL
391
- 5. Serves stale cached data when ESI returns 5xx errors
392
- 6. Invalidates related GET caches when POST/PUT/DELETE requests are made
518
+ ETag caching is on by default and works in three tiers: a GET inside the spec-defined TTL is answered from cache with no HTTP call, an older entry is revalidated with `If-None-Match`, and a 5xx with a cached copy serves the stale body instead of throwing. Authenticated cache entries are isolated per token.
393
519
 
394
520
  ```typescript
395
- // Cache stats
396
- const stats = client.getCacheStats();
397
- console.log(`${stats.totalEntries}/${stats.maxEntries} entries cached`);
398
-
399
- // Manual cache operations
521
+ const client = new EsiClient({ etagCacheConfig: { maxEntries: 2000 } });
522
+ client.getCacheStats();
400
523
  client.clearCache();
401
- client.updateCacheConfig({ maxEntries: 2000 });
402
-
403
- // Disable caching entirely
404
- const uncachedClient = new EsiClient({ enableETagCache: false });
405
524
  ```
406
525
 
407
- ### Spec-Aware Cache TTLs
408
-
409
- The library reads `x-cache-age` from the ESI OpenAPI spec (126 of 195 endpoints). Within the TTL window, repeated GET requests return cached data with **zero HTTP calls** — not even a conditional GET.
410
-
411
- This layers on top of ETag caching in three tiers:
412
-
413
- 1. **Spec TTL** — data can't have changed yet, return cached data immediately
414
- 2. **ETag conditional GET** — data might have changed, send `If-None-Match` to check
415
- 3. **Full request** — no cache entry, fetch fresh data
416
-
417
- ```typescript
418
- const client = new EsiClient();
419
-
420
- // First call — fetches from ESI
421
- const alliances = await client.alliance.getAlliances();
422
-
423
- // Second call within the next 3600s — returns cached data, zero HTTP calls
424
- const same = await client.alliance.getAlliances();
425
- ```
526
+ See [Caching in the architecture guide](guides/ARCHITECTURE.md#4-caching) for TTL precedence, invalidation, keys and configuration.
426
527
 
427
528
  ## Batch Requests
428
529
 
@@ -433,7 +534,7 @@ import { EsiClient } from '@lgriffin/esi.ts';
433
534
 
434
535
  const client = new EsiClient();
435
536
 
436
- // Fetch 500 type details with at most 10 concurrent requests
537
+ // Fetch 500 type details with at most 10 concurrent requests (default 20)
437
538
  const result = await client.batch(
438
539
  typeIds,
439
540
  (id) => client.universe.getTypeById(id),
@@ -448,129 +549,36 @@ const result = await client.batch(
448
549
  console.log(`${result.results.size} succeeded, ${result.errors.size} failed`);
449
550
  ```
450
551
 
451
- For POST endpoints that accept arrays (e.g., `postUniverseNames` with a 1000-ID limit), `batchPost` auto-chunks and concatenates:
552
+ For POST endpoints that accept arrays (e.g., `postNamesAndCategories` with a 1000-ID limit), `batchPost` auto-chunks and concatenates:
452
553
 
453
554
  ```typescript
454
555
  const allNames = await client.batchPost(
455
556
  largeIdArray,
456
- (chunk) => client.universe.postUniverseNames(chunk),
557
+ (chunk) => client.universe.postNamesAndCategories(chunk),
457
558
  1000, // chunk size
458
559
  );
459
560
  ```
460
561
 
461
562
  ## Streaming Pagination
462
563
 
463
- For large paginated endpoints (market orders, contracts, assets), streaming yields one page at a time via `AsyncGenerator` instead of eagerly fetching all pages into memory:
564
+ Paginated endpoints can be consumed three ways: the plain method fetches every page and returns one array, `stream*` methods yield one validated page at a time, and `fetchAll*` methods fetch the remaining pages concurrently.
464
565
 
465
566
  ```typescript
466
- import { EsiClient } from '@lgriffin/esi.ts';
467
-
468
- const client = new EsiClient();
469
-
470
- // Stream all market orders in The Forge, page by page
471
567
  for await (const page of client.market.streamMarketOrders(10000002)) {
472
568
  console.log(
473
569
  `Page ${page.page}/${page.totalPages}: ${page.data.length} orders`,
474
570
  );
475
-
476
- // Process each order as it arrives
477
- for (const order of page.data) {
478
- if (order.is_buy_order && order.price > 1_000_000) {
479
- console.log(`High-value buy: ${order.type_id} @ ${order.price} ISK`);
480
- }
481
- }
482
-
483
- // Early termination — stops fetching remaining pages
484
- if (page.page >= 3) break;
571
+ if (page.page >= 3) break; // stops fetching the remaining pages
485
572
  }
486
573
  ```
487
574
 
488
- 21 domain clients expose 73+ streaming methods. `BaseEsiClient.streamEndpoint()` is also public as an escape hatch for any paginated endpoint not yet wrapped with a convenience method.
489
-
490
- Available streaming methods (representative selection):
491
-
492
- - **MarketClient** — `streamMarketOrders`, `streamMarketTypes`, `streamCharacterOrderHistory`, `streamCorporationOrders`, `streamCorporationOrderHistory`, `streamMarketOrdersInStructure`
493
- - **CorporationsClient** — `streamCorporationMembers`, `streamCorporationStructures`, `streamCorporationBlueprints`, + 14 more
494
- - **CharacterClient** — `streamCharacterBlueprints`, `streamCharacterNotifications`, `streamCharacterStandings`, + 5 more
495
- - **ContractsClient** — `streamPublicContracts`, `streamCharacterContracts`, `streamCorporationContracts`
496
- - **WalletClient** — `streamCharacterWalletJournal`, `streamCorporationWalletJournal`, `streamCharacterWalletTransactions`
497
- - **IndustryClient** — `streamCorporationIndustryJobs`, `streamCorporationMiningObservers`, + 6 more
498
- - **ContactsClient** — `streamAllianceContacts`, `streamCharacterContacts`, `streamCorporationContacts`, + 3 more
499
- - **AssetsClient** — `streamCharacterAssets`, `streamCorporationAssets`
500
- - **KillmailsClient** — `streamCharacterRecentKillmails`, `streamCorporationRecentKillmails`
501
- - **MailClient** — `streamCharacterMail`, `streamCharacterMailLabels`
502
- - **FleetsClient** — `streamFleetMembers`, `streamFleetWings`
503
- - **CalendarClient** — `streamCalendarEvents`
504
- - **FittingsClient** — `streamCharacterFittings`
505
- - **SkillsClient** — `streamCharacterSkillQueue`
506
- - **LoyaltyClient** — `streamCorporationLoyaltyStoreOffers`
507
- - **BookmarksClient** — `streamCharacterBookmarks`, `streamCorporationBookmarks`
508
- - **ClonesClient** — `streamCharacterImplants`
509
- - **PIClient** — `streamCharacterPlanets`
510
- - **WarsClient** — `streamWars`
511
- - **FactionWarfareClient** — `streamFactionWarfareStats`
512
- - **AllianceClient** — `streamAllianceCorporations`
513
-
514
- Try it: `npm run example:streaming`
575
+ Try it: `npm run example:streaming`. See [guides/PAGINATION.md](guides/PAGINATION.md) for the full method list, concurrency defaults and failure behaviour.
515
576
 
516
577
  ## Cursor-based Pagination
517
578
 
518
- Newer ESI routes (Freelance Jobs, and future routes) use cursor-based pagination with opaque `before`/`after` tokens in the response body. See the [ESI blog post](https://developers.eveonline.com/blog/changing-pagination-turning-a-new-page) for background.
579
+ Newer ESI routes such as Freelance Jobs page with opaque `before` / `after` cursor tokens instead of page numbers. `fetchAllCursorPages` follows them to the end of the dataset, and a saved `after` token can be polled later for changed records.
519
580
 
520
- ```typescript
521
- import { EsiClient, fetchAllCursorPages } from '@lgriffin/esi.ts';
522
-
523
- const client = new EsiClient();
524
-
525
- // Fetch first page — returns { cursor: { before, after }, freelance_jobs: [...] }
526
- const page = await client.freelanceJobs.getFreelanceJobs();
527
- console.log(page.freelance_jobs); // job records
528
- console.log(page.cursor.after); // opaque token for next page
529
-
530
- // Fetch next page using the cursor
531
- const nextPage = await client.freelanceJobs.getFreelanceJobs(
532
- undefined,
533
- page.cursor.after,
534
- );
535
-
536
- // Auto-fetch all pages in one call
537
- const allJobs = await fetchAllCursorPages(
538
- (before, after) => client.freelanceJobs.getFreelanceJobs(before, after),
539
- (response) => response.freelance_jobs,
540
- (response) => response.cursor,
541
- );
542
-
543
- // Authenticated endpoints — character/corporation freelance jobs
544
- const authedClient = new EsiClient({ accessToken: 'your-token' });
545
- const myJobs =
546
- await authedClient.freelanceJobs.getCharacterFreelanceJobs(characterId);
547
- const corpJobs =
548
- await authedClient.freelanceJobs.getCorporationFreelanceJobs(corporationId);
549
- ```
550
-
551
- **Polling for changes** — cursor tokens persist across sessions, so you can save the last `after` token and poll later to get only records that changed:
552
-
553
- ```typescript
554
- // After initial scan, save the final cursor
555
- let savedCursor = lastPage.cursor.after;
556
-
557
- // Later: check for updates (hours, days, or weeks later)
558
- const updates = await client.freelanceJobs.getFreelanceJobs(
559
- undefined,
560
- savedCursor,
561
- );
562
- if (updates.freelance_jobs.length > 0) {
563
- // Process changed records — duplicates are expected for modified records
564
- savedCursor = updates.cursor.after;
565
- }
566
- ```
567
-
568
- Key points:
569
-
570
- - Cursor tokens are **opaque strings** — never parse or validate them
571
- - An **empty result array** signals the end of the dataset (not a short page)
572
- - **Duplicates across pages** are expected when records are modified between requests
573
- - Existing offset-based routes (`getMarketOrders`, etc.) are unchanged
581
+ See [guides/PAGINATION.md](guides/PAGINATION.md) for cursor semantics and examples.
574
582
 
575
583
  ## Generated Types
576
584
 
@@ -619,43 +627,20 @@ const scope: EsiScope = 'esi-assets.read_assets.v1';
619
627
 
620
628
  ## Error Handling
621
629
 
622
- API errors throw `EsiError` with `statusCode`, `message`, and `url` properties:
630
+ Failed calls throw `EsiError` (with `statusCode`, a sanitised `url` and `retryable`) or one of its subclasses, `TimeoutError` and `EsiValidationError`. An open circuit throws `CircuitOpenError`. Type guards such as `isRetryable`, `isTimeout`, `isValidationError` and `isCircuitOpen` narrow them, and `withSafeMode()` returns a result envelope instead of throwing.
623
631
 
624
632
  ```typescript
625
- import {
626
- EsiError,
627
- TimeoutError,
628
- EsiValidationError,
629
- isTimeout,
630
- isRetryable,
631
- isValidationError,
632
- isCircuitOpen,
633
- } from '@lgriffin/esi.ts';
633
+ import { EsiError, isCircuitOpen } from '@lgriffin/esi.ts';
634
634
 
635
635
  try {
636
- const alliance = await client.alliance.getAllianceById(99999999);
637
- console.log('Alliance:', alliance.name);
636
+ await client.alliance.getAllianceById(99999999);
638
637
  } catch (err) {
639
- if (isCircuitOpen(err)) {
640
- console.log('Circuit breaker is open — endpoint temporarily unavailable');
641
- } else if (isValidationError(err)) {
642
- console.log('Response validation failed:', err.validationError);
643
- } else if (isTimeout(err)) {
644
- console.log(`Request timed out after ${err.timeoutMs}ms`);
645
- } else if (err instanceof EsiError) {
646
- console.log(`ESI error ${err.statusCode}: ${err.message}`);
647
- console.log(`Retryable: ${err.retryable}`);
648
- }
638
+ if (isCircuitOpen(err)) console.log(`Retry in ${err.retryAfterMs} ms`);
639
+ else if (err instanceof EsiError) console.log(err.statusCode, err.retryable);
649
640
  }
650
641
  ```
651
642
 
652
- - **204 No Content** — returns `undefined` (valid for DELETE/POST actions)
653
- - **304 Not Modified** — handled internally, returns cached data
654
- - **4xx/5xx** — throws `EsiError`
655
- - **5xx with cache** — returns stale cached data instead of throwing
656
- - **Timeout** — throws `TimeoutError` (extends `EsiError` with `statusCode: 0` and `timeoutMs`)
657
- - **Retryable errors** — `EsiError.retryable` returns `true` for 502, 503, 504, 420, 429, and timeouts
658
- - **Validation errors** — throws `EsiValidationError` (extends `EsiError`) when response data doesn't match the expected Zod schema
643
+ See [guides/ERRORS.md](guides/ERRORS.md) for the class hierarchy, retryability rules and safe mode.
659
644
 
660
645
  ## Response Metadata
661
646
 
@@ -688,42 +673,17 @@ The `meta` object includes:
688
673
 
689
674
  ## Rate Limiting
690
675
 
691
- ESI.ts automatically manages rate limiting using ESI's per-group token bucket system. The 36 rate limit groups from the ESI OpenAPI spec are extracted at build time, so each group (e.g., `market-order`, `char-notification`) gets its own independent bucket. A burst of market requests won't starve unrelated endpoints.
692
-
693
- Rate limiting works out of the box with no configuration. For multi-character applications, enable per-user bucketing:
676
+ Rate limiting is always on and needs no configuration. Each ESI rate-limit group from the OpenAPI spec gets its own bucket, the limiter learns remaining tokens from ESI's response headers, and a 420 or 429 blocks only the affected group. Multi-character applications can give each token its own buckets:
694
677
 
695
678
  ```typescript
696
- import { EsiClient } from '@lgriffin/esi.ts';
697
-
698
679
  const client = new EsiClient({
699
680
  rateLimiterConfig: {
700
- userKeyExtractor: (headers) => headers['authorization'] ?? 'anon',
681
+ userKeyExtractor: (headers) => headers['Authorization'] ?? 'anon',
701
682
  },
702
683
  });
703
684
  ```
704
685
 
705
- Monitor rate limit status per group:
706
-
707
- ```typescript
708
- const limiter = client.getRateLimiter();
709
-
710
- // Worst-case across all groups (backward-compatible)
711
- const status = limiter.getStatus();
712
- console.log(status.remaining, status.limit, status.group);
713
-
714
- // Specific group
715
- const marketStatus = limiter.getGroupStatus('market-order');
716
- console.log(marketStatus?.remaining); // tokens remaining in this group
717
-
718
- // All active groups
719
- const all = limiter.getAllGroupStatuses();
720
- for (const [group, info] of all) {
721
- console.log(`${group}: ${info.remaining}/${info.limit}`);
722
- }
723
-
724
- // Check if a specific group is blocked
725
- console.log(limiter.isBlocked('char-notification')); // true if 429'd
726
- ```
686
+ See [Rate limiting in the architecture guide](guides/ARCHITECTURE.md#6-rate-limiting) for the throttling rules, per-endpoint overrides and monitoring. Retry, deduplication, the opt-in [circuit breaker](guides/ARCHITECTURE.md#7-circuit-breaker) and [request/response interceptors](guides/ARCHITECTURE.md#8-interceptors) are documented alongside it.
727
687
 
728
688
  ## Lightweight Clients
729
689
 
@@ -876,11 +836,11 @@ try {
876
836
 
877
837
  ## Testing
878
838
 
879
- ESI.ts has a comprehensive multi-tier testing strategy with 139 suites and 4,104 tests:
839
+ ESI.ts has a comprehensive multi-tier testing strategy with 171 suites and 4,957 tests:
880
840
 
881
841
  | Tier | Tests | Purpose |
882
842
  | -------------------------- | ---------------- | ------------------------------------------------------------------ |
883
- | **TDD unit tests** | 100 files | Every client method, endpoint path, query param, and body format |
843
+ | **TDD unit tests** | 130 files | Every client method, endpoint path, query param, and body format |
884
844
  | **BDD scenario tests** | 41 feature files | Behavioral specifications in Gherkin (Given/When/Then) |
885
845
  | **Mocked integration** | Full suite | Cross-layer request flow with jest-fetch-mock |
886
846
  | **Live smoke tests** | 46 examples | Every endpoint against live Tranquility |
@@ -894,7 +854,7 @@ ESI.ts has a comprehensive multi-tier testing strategy with 139 suites and 4,104
894
854
  | **Spec-alignment** | Type assertions | Ensures hand-written types align with generated OpenAPI types |
895
855
 
896
856
  ```bash
897
- npm test # Unit + BDD tests (167 suites, 4,730 tests)
857
+ npm test # Unit + BDD tests (171 suites, 4,957 tests)
898
858
  npm run coverage # Tests with coverage report (thresholds enforced)
899
859
  npm run bdd # BDD scenario tests only
900
860
  npm run contract # Contract tests (skipped without ESI_LIVE_TESTS=true)
@@ -904,7 +864,7 @@ npm run benchmark # Performance benchmark tests
904
864
  npm run test:types # tsd consumer type tests
905
865
  ```
906
866
 
907
- Coverage: statements 98.47%, branches 90.10%, functions 97.54%, lines 98.59%. Thresholds enforced in CI: branches 80%, functions 75%, lines 90%, statements 90%.
867
+ Coverage: statements 98.37%, branches 95.14%, functions 96.09%, lines 98.17%. Thresholds enforced in CI: branches 80%, functions 75%, lines 90%, statements 90%.
908
868
 
909
869
  See [guides/TESTING.md](guides/TESTING.md) for the full testing guide, and [guides/ARCHITECTURE.md](guides/ARCHITECTURE.md) for architecture diagrams.
910
870
 
@@ -941,11 +901,11 @@ npm run format # Format code with Prettier
941
901
  npm run format:check # Check formatting without modifying
942
902
 
943
903
  # Testing
944
- npm test # Unit tests (167 suites, 4,730 tests)
904
+ npm test # Unit tests (171 suites, 4,957 tests)
945
905
  npm run test:all # Unit + BDD + integration + fuzz + type tests
946
906
  npm run coverage # Tests with coverage report (thresholds enforced)
947
907
  npm run bdd # BDD scenario tests
948
- npm run contract:live # Deep contract tests against live ESI spec
908
+ ESI_LIVE_TESTS=true npm run contract:live # Deep contract tests against live ESI spec (fails without the variable)
949
909
  npm run fuzz # Property-based fuzz tests (fast-check)
950
910
  npm run mutation # Mutation testing (Stryker)
951
911
  npm run benchmark # Performance benchmark tests
@@ -989,32 +949,9 @@ The project uses husky with lint-staged to run ESLint and Prettier on staged fil
989
949
 
990
950
  ### CI/CD
991
951
 
992
- Every pull request runs the full validation suite:
993
-
994
- - ESLint (with security and sonarjs plugins)
995
- - Prettier formatting check
996
- - TypeScript compilation
997
- - Generated types staleness check (regenerates from live ESI OpenAPI spec and verifies no diff)
998
- - Unit tests across Node.js 18, 20, and 22
999
- - BDD scenario tests
1000
- - Coverage threshold enforcement (branches: 80%, functions: 75%, lines: 90%, statements: 90%)
1001
- - Auth/scopes cross-validation
1002
- - Spec-alignment type assertions
1003
- - Schema drift detection
1004
- - Mutation testing (Stryker)
1005
- - Dead code detection via knip
1006
- - npm security audit — diff-aware on PRs (fails only on advisories the PR introduces), state-of-the-world nightly and at release, with a reviewed-acceptance allowlist in `scripts/audit-exceptions.json`
1007
-
1008
- **Supply chain security:**
1009
-
1010
- - All GitHub Actions pinned by SHA hash (not mutable tags) to prevent supply chain attacks
1011
- - Least-privilege `permissions:` on all workflows and jobs
1012
- - Script injection prevention (user-controlled inputs passed via `env:`, never interpolated in `run:`)
1013
- - npm publish with `--provenance` for SLSA attestations (verifiable build origin)
1014
- - GitHub release artifacts signed with Cosign (keyless) and published with SHA256 checksums
1015
- - OpenSSF Scorecard runs weekly via the `scorecard.yml` workflow
1016
-
1017
- See [.github/workflows/README.md](.github/workflows/README.md) for full workflow details.
952
+ Every push runs lint, format, build, typecheck and unit tests; pull requests to `master` run the full matrix behind a single Quality Gate check. Actions are SHA-pinned, packages publish with npm provenance, and release assets are cosign-signed.
953
+
954
+ See [guides/QUALITY-GATES.md](guides/QUALITY-GATES.md) for the gate matrix and every workflow, and [guides/SECURITY.md](guides/SECURITY.md) for the supply-chain controls.
1018
955
 
1019
956
  ## Contributing
1020
957
 
@@ -70,6 +70,10 @@ export interface EsiClientConfig {
70
70
  responseInterceptors?: ResponseInterceptor[];
71
71
  validateResponse?: boolean;
72
72
  validateRequest?: boolean;
73
+ /** Custom logger for this client. Falls back to the global logger, then pino. */
74
+ logger?: import('./core/logger/ILogger').ILogger;
75
+ /** Log level for the default pino logger (`error|warn|info|debug|trace`). Overrides `ESI_LOG_LEVEL`. */
76
+ logLevel?: import('./core/logger/DefaultLogger').LogLevel;
73
77
  }
74
78
  export declare class EsiClient {
75
79
  private apiClient;
@@ -1 +1 @@
1
- {"version":3,"file":"EsiClient.d.ts","sourceRoot":"","sources":["../src/EsiClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"EsiClient.d.ts","sourceRoot":"","sources":["../src/EsiClient.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"EsiClientBuilder.d.ts","sourceRoot":"","sources":["../src/EsiClientBuilder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"EsiClientBuilder.d.ts","sourceRoot":"","sources":["../src/EsiClientBuilder.ts"],"names":[],"mappings":"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"}