@lgriffin/esi.ts 9.7.0 → 10.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +512 -0
- package/README.md +182 -236
- package/dist/EsiClient.d.mts +140 -0
- package/dist/EsiClient.d.ts +4 -0
- package/dist/EsiClient.d.ts.map +1 -1
- package/dist/EsiClientBuilder.d.mts +75 -0
- package/dist/EsiClientBuilder.d.ts.map +1 -1
- package/dist/auth/EsiTokenManager.d.mts +200 -0
- package/dist/auth/EsiTokenManager.d.ts +200 -0
- package/dist/auth/EsiTokenManager.d.ts.map +1 -0
- package/dist/auth/EveSsoClient.d.mts +88 -0
- package/dist/auth/EveSsoClient.d.ts +88 -0
- package/dist/auth/EveSsoClient.d.ts.map +1 -0
- package/dist/auth/errors.d.mts +42 -0
- package/dist/auth/errors.d.ts +42 -0
- package/dist/auth/errors.d.ts.map +1 -0
- package/dist/auth/index.d.mts +14 -0
- package/dist/auth/index.d.ts +14 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/jwt.d.mts +43 -0
- package/dist/auth/jwt.d.ts +43 -0
- package/dist/auth/jwt.d.ts.map +1 -0
- package/dist/auth/pkce.d.mts +21 -0
- package/dist/auth/pkce.d.ts +21 -0
- package/dist/auth/pkce.d.ts.map +1 -0
- package/dist/auth/storage/FileTokenStorage.d.mts +44 -0
- package/dist/auth/storage/FileTokenStorage.d.ts +44 -0
- package/dist/auth/storage/FileTokenStorage.d.ts.map +1 -0
- package/dist/auth/storage/MemoryTokenStorage.d.mts +18 -0
- package/dist/auth/storage/MemoryTokenStorage.d.ts +18 -0
- package/dist/auth/storage/MemoryTokenStorage.d.ts.map +1 -0
- package/dist/auth/types.d.mts +42 -0
- package/dist/auth/types.d.ts +42 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/chunk-3ZI5A37L.mjs +1065 -0
- package/dist/chunk-3ZI5A37L.mjs.map +1 -0
- package/dist/chunk-BBSHKVPI.js +71 -0
- package/dist/chunk-BBSHKVPI.js.map +1 -0
- package/dist/chunk-D5L5HZVF.mjs +417 -0
- package/dist/chunk-D5L5HZVF.mjs.map +1 -0
- package/dist/chunk-JIW4BXLP.mjs +17 -0
- package/dist/chunk-JIW4BXLP.mjs.map +1 -0
- package/dist/chunk-MSJHIJXA.js +1065 -0
- package/dist/chunk-MSJHIJXA.js.map +1 -0
- package/dist/chunk-PZ5AY32C.js +10 -0
- package/dist/chunk-PZ5AY32C.js.map +1 -0
- package/dist/chunk-R7D7M2LQ.mjs +71 -0
- package/dist/chunk-R7D7M2LQ.mjs.map +1 -0
- package/dist/chunk-SAQBXXTM.js +2614 -0
- package/dist/chunk-SAQBXXTM.js.map +1 -0
- package/dist/chunk-VZS32UQ3.mjs +2614 -0
- package/dist/chunk-VZS32UQ3.mjs.map +1 -0
- package/dist/chunk-XIB2OXEZ.js +417 -0
- package/dist/chunk-XIB2OXEZ.js.map +1 -0
- package/dist/clients/AccessListsClient.d.mts +25 -0
- package/dist/clients/AllianceClient.d.mts +59 -0
- package/dist/clients/AllianceClient.d.ts.map +1 -1
- package/dist/clients/AssetsClient.d.mts +65 -0
- package/dist/clients/BaseEsiClient.d.mts +19 -0
- package/dist/clients/CalendarClient.d.mts +48 -0
- package/dist/clients/CharacterClient.d.mts +134 -0
- package/dist/clients/ClonesClient.d.mts +27 -0
- package/dist/clients/ContactsClient.d.mts +96 -0
- package/dist/clients/ContractsClient.d.mts +91 -0
- package/dist/clients/ContractsClient.d.ts +12 -9
- package/dist/clients/ContractsClient.d.ts.map +1 -1
- package/dist/clients/CorporationProjectsClient.d.mts +54 -0
- package/dist/clients/CorporationProjectsClient.d.ts +22 -12
- package/dist/clients/CorporationProjectsClient.d.ts.map +1 -1
- package/dist/clients/CorporationsClient.d.mts +219 -0
- package/dist/clients/CosmeticsClient.d.mts +11 -0
- package/dist/clients/DogmaClient.d.mts +42 -0
- package/dist/clients/FactionClient.d.mts +60 -0
- package/dist/clients/FactionClient.d.ts +4 -4
- package/dist/clients/FactionClient.d.ts.map +1 -1
- package/dist/clients/FittingsClient.d.mts +38 -0
- package/dist/clients/FleetClient.d.mts +134 -0
- package/dist/clients/FreelanceJobsClient.d.mts +61 -0
- package/dist/clients/FreelanceJobsClient.d.ts +3 -3
- package/dist/clients/FreelanceJobsClient.d.ts.map +1 -1
- package/dist/clients/IncursionsClient.d.mts +14 -0
- package/dist/clients/IndustryClient.d.mts +86 -0
- package/dist/clients/IndustryClient.d.ts +4 -4
- package/dist/clients/IndustryClient.d.ts.map +1 -1
- package/dist/clients/InsuranceClient.d.mts +14 -0
- package/dist/clients/KillmailsClient.d.mts +37 -0
- package/dist/clients/LocationClient.d.mts +32 -0
- package/dist/clients/LoyaltyClient.d.mts +28 -0
- package/dist/clients/MailClient.d.mts +104 -0
- package/dist/clients/MailClient.d.ts +4 -4
- package/dist/clients/MailClient.d.ts.map +1 -1
- package/dist/clients/MarketClient.d.mts +102 -0
- package/dist/clients/MercenaryClient.d.mts +42 -0
- package/dist/clients/MetaClient.d.mts +45 -0
- package/dist/clients/MetaClient.d.ts +3 -2
- package/dist/clients/MetaClient.d.ts.map +1 -1
- package/dist/clients/MilitaryCampaignsClient.d.mts +53 -0
- package/dist/clients/ParagonHubClient.d.mts +13 -0
- package/dist/clients/PiClient.d.mts +45 -0
- package/dist/clients/RouteClient.d.mts +25 -0
- package/dist/clients/SearchClient.d.mts +17 -0
- package/dist/clients/SkillsClient.d.mts +39 -0
- package/dist/clients/SkyhooksClient.d.mts +48 -0
- package/dist/clients/SovereigntyClient.d.mts +20 -0
- package/dist/clients/StatusClient.d.mts +14 -0
- package/dist/clients/UiClient.d.mts +44 -0
- package/dist/clients/UniverseClient.d.mts +212 -0
- package/dist/clients/WalletClient.d.mts +70 -0
- package/dist/clients/WalletClient.d.ts +4 -4
- package/dist/clients/WalletClient.d.ts.map +1 -1
- package/dist/clients/WarsClient.d.mts +33 -0
- package/dist/core/ApiClient.d.mts +73 -0
- package/dist/core/ApiClient.d.ts +4 -0
- package/dist/core/ApiClient.d.ts.map +1 -1
- package/dist/core/ApiClientBuilder.d.mts +24 -0
- package/dist/core/ApiRequestHandler.d.ts.map +1 -1
- package/dist/core/BatchRequestHandler.d.mts +12 -0
- package/dist/core/BatchRequestHandler.d.ts.map +1 -1
- package/dist/core/ClientRegistry.d.mts +45 -0
- package/dist/core/EsiDiagnostics.d.mts +35 -0
- package/dist/core/IDeduplicator.d.mts +22 -0
- package/dist/core/IDeduplicator.d.ts +16 -0
- package/dist/core/IDeduplicator.d.ts.map +1 -1
- package/dist/core/IRetryStrategy.d.mts +5 -0
- package/dist/core/RequestDeduplicator.d.mts +21 -0
- package/dist/core/RequestDeduplicator.d.ts +13 -0
- package/dist/core/RequestDeduplicator.d.ts.map +1 -1
- package/dist/core/RetryStrategy.d.mts +21 -0
- package/dist/core/RetryStrategy.d.ts +2 -0
- package/dist/core/RetryStrategy.d.ts.map +1 -1
- package/dist/core/cache/ETagCacheManager.d.mts +75 -0
- package/dist/core/cache/ETagCacheManager.d.ts +4 -0
- package/dist/core/cache/ETagCacheManager.d.ts.map +1 -1
- package/dist/core/cache/ICache.d.mts +27 -0
- package/dist/core/cache/cacheKey.d.ts +11 -0
- package/dist/core/cache/cacheKey.d.ts.map +1 -1
- package/dist/core/circuitBreaker/CircuitBreaker.d.mts +52 -0
- package/dist/core/circuitBreaker/CircuitBreaker.d.ts +3 -0
- package/dist/core/circuitBreaker/CircuitBreaker.d.ts.map +1 -1
- package/dist/core/circuitBreaker/ICircuitBreaker.d.mts +23 -0
- package/dist/core/configureApiClient.d.mts +18 -0
- package/dist/core/configureApiClient.d.ts.map +1 -1
- package/dist/core/constants.d.ts +2 -2
- package/dist/core/constants.d.ts.map +1 -1
- package/dist/core/endpoints/EndpointDefinition.d.mts +63 -0
- package/dist/core/endpoints/accessListEndpoints.d.mts +34 -0
- package/dist/core/endpoints/allianceEndpoints.d.mts +43 -0
- package/dist/core/endpoints/assetEndpoints.d.mts +76 -0
- package/dist/core/endpoints/buildEndpointPath.d.mts +7 -0
- package/dist/core/endpoints/calendarEndpoints.d.mts +54 -0
- package/dist/core/endpoints/calendarEndpoints.d.ts +7 -7
- package/dist/core/endpoints/characterEndpoints.d.mts +185 -0
- package/dist/core/endpoints/characterEndpoints.d.ts +2 -2
- package/dist/core/endpoints/cloneEndpoints.d.mts +32 -0
- package/dist/core/endpoints/cloneEndpoints.d.ts +2 -2
- package/dist/core/endpoints/contactEndpoints.d.mts +106 -0
- package/dist/core/endpoints/contractEndpoints.d.mts +168 -0
- package/dist/core/endpoints/contractEndpoints.d.ts +15 -22
- package/dist/core/endpoints/contractEndpoints.d.ts.map +1 -1
- package/dist/core/endpoints/corporationEndpoints.d.mts +324 -0
- package/dist/core/endpoints/corporationEndpoints.d.ts +19 -22
- package/dist/core/endpoints/corporationEndpoints.d.ts.map +1 -1
- package/dist/core/endpoints/corporationProjectEndpoints.d.mts +102 -0
- package/dist/core/endpoints/corporationProjectEndpoints.d.ts +75 -23
- package/dist/core/endpoints/corporationProjectEndpoints.d.ts.map +1 -1
- package/dist/core/endpoints/cosmeticsEndpoints.d.mts +52 -0
- package/dist/core/endpoints/createClient.d.mts +69 -0
- package/dist/core/endpoints/createClient.d.ts.map +1 -1
- package/dist/core/endpoints/dogmaEndpoints.d.mts +89 -0
- package/dist/core/endpoints/dogmaEndpoints.d.ts +2 -2
- package/dist/core/endpoints/esi-cache-ttls.generated.d.ts.map +1 -1
- package/dist/core/endpoints/esi-rate-limit-groups.generated.d.mts +7 -0
- package/dist/core/endpoints/esi-rate-limit-groups.generated.d.ts.map +1 -1
- package/dist/core/endpoints/esi-scopes.generated.d.mts +3 -0
- package/dist/core/endpoints/esi-scopes.generated.d.ts.map +1 -1
- package/dist/core/endpoints/factionEndpoints.d.mts +194 -0
- package/dist/core/endpoints/factionEndpoints.d.ts +36 -36
- package/dist/core/endpoints/factionEndpoints.d.ts.map +1 -1
- package/dist/core/endpoints/fittingEndpoints.d.mts +34 -0
- package/dist/core/endpoints/fleetEndpoints.d.mts +137 -0
- package/dist/core/endpoints/fleetEndpoints.d.ts +1 -1
- package/dist/core/endpoints/freelanceJobsEndpoints.d.mts +181 -0
- package/dist/core/endpoints/freelanceJobsEndpoints.d.ts +131 -122
- package/dist/core/endpoints/freelanceJobsEndpoints.d.ts.map +1 -1
- package/dist/core/endpoints/incursionEndpoints.d.mts +19 -0
- package/dist/core/endpoints/industryEndpoints.d.mts +138 -0
- package/dist/core/endpoints/industryEndpoints.d.ts +6 -6
- package/dist/core/endpoints/industryEndpoints.d.ts.map +1 -1
- package/dist/core/endpoints/insuranceEndpoints.d.mts +17 -0
- package/dist/core/endpoints/killmailEndpoints.d.mts +62 -0
- package/dist/core/endpoints/locationEndpoints.d.mts +37 -0
- package/dist/core/endpoints/loyaltyEndpoints.d.mts +32 -0
- package/dist/core/endpoints/mailEndpoints.d.mts +111 -0
- package/dist/core/endpoints/mailEndpoints.d.ts +3 -5
- package/dist/core/endpoints/mailEndpoints.d.ts.map +1 -1
- package/dist/core/endpoints/marketEndpoints.d.mts +191 -0
- package/dist/core/endpoints/mercenaryEndpoints.d.mts +79 -0
- package/dist/core/endpoints/mercenaryEndpoints.d.ts +1 -1
- package/dist/core/endpoints/metaEndpoints.d.mts +50 -0
- package/dist/core/endpoints/metaEndpoints.d.ts +5 -1
- package/dist/core/endpoints/metaEndpoints.d.ts.map +1 -1
- package/dist/core/endpoints/militaryCampaignEndpoints.d.mts +87 -0
- package/dist/core/endpoints/paragonHubEndpoints.d.mts +163 -0
- package/dist/core/endpoints/piEndpoints.d.mts +101 -0
- package/dist/core/endpoints/piEndpoints.d.ts +2 -2
- package/dist/core/endpoints/routeEndpoints.d.mts +14 -0
- package/dist/core/endpoints/searchEndpoints.d.mts +26 -0
- package/dist/core/endpoints/skillEndpoints.d.mts +52 -0
- package/dist/core/endpoints/skyhookEndpoints.d.mts +111 -0
- package/dist/core/endpoints/sovereigntyEndpoints.d.mts +59 -0
- package/dist/core/endpoints/statusEndpoints.d.mts +14 -0
- package/dist/core/endpoints/statusEndpoints.d.ts +1 -1
- package/dist/core/endpoints/uiEndpoints.d.mts +43 -0
- package/dist/core/endpoints/universeEndpoints.d.mts +456 -0
- package/dist/core/endpoints/universeEndpoints.d.ts +22 -22
- package/dist/core/endpoints/walletEndpoints.d.mts +98 -0
- package/dist/core/endpoints/walletEndpoints.d.ts +2 -3
- package/dist/core/endpoints/walletEndpoints.d.ts.map +1 -1
- package/dist/core/endpoints/warEndpoints.d.mts +51 -0
- package/dist/core/logger/DefaultLogger.d.mts +31 -0
- package/dist/core/logger/DefaultLogger.d.ts +31 -0
- package/dist/core/logger/DefaultLogger.d.ts.map +1 -0
- package/dist/core/logger/ILogger.d.mts +17 -0
- package/dist/core/logger/ILogger.d.ts +14 -4
- package/dist/core/logger/ILogger.d.ts.map +1 -1
- package/dist/core/logger/NoopLogger.d.mts +7 -0
- package/dist/core/logger/NoopLogger.d.ts +4 -0
- package/dist/core/logger/NoopLogger.d.ts.map +1 -1
- package/dist/core/logger/clientLog.d.ts +11 -0
- package/dist/core/logger/clientLog.d.ts.map +1 -0
- package/dist/core/logger/logger.d.ts +11 -3
- package/dist/core/logger/logger.d.ts.map +1 -1
- package/dist/core/logger/loggerUtil.d.mts +11 -0
- package/dist/core/logger/loggerUtil.d.ts +8 -6
- package/dist/core/logger/loggerUtil.d.ts.map +1 -1
- package/dist/core/logger/resolveLogger.d.ts +10 -0
- package/dist/core/logger/resolveLogger.d.ts.map +1 -0
- package/dist/core/middleware/Middleware.d.mts +30 -0
- package/dist/core/pagination/AsyncPaginationIterator.d.mts +12 -0
- package/dist/core/pagination/AsyncPaginationIterator.d.ts.map +1 -1
- package/dist/core/pagination/CursorPaginationHandler.d.mts +68 -0
- package/dist/core/pagination/CursorPaginationHandler.d.ts.map +1 -1
- package/dist/core/pagination/PaginationHandler.d.ts.map +1 -1
- package/dist/core/rateLimiter/IRateLimiter.d.mts +27 -0
- package/dist/core/rateLimiter/RateLimiter.d.mts +62 -0
- package/dist/core/rateLimiter/RateLimiter.d.ts.map +1 -1
- package/dist/core/requestPipeline/cachePolicy.d.ts +25 -1
- package/dist/core/requestPipeline/cachePolicy.d.ts.map +1 -1
- package/dist/core/requestPipeline/fetchExecution.d.ts +1 -1
- package/dist/core/requestPipeline/fetchExecution.d.ts.map +1 -1
- package/dist/core/requestPipeline/headers.d.ts.map +1 -1
- package/dist/core/requestPipeline/index.d.ts +2 -2
- package/dist/core/requestPipeline/index.d.ts.map +1 -1
- package/dist/core/requestPipeline/paginationOrchestration.d.ts +1 -1
- package/dist/core/requestPipeline/paginationOrchestration.d.ts.map +1 -1
- package/dist/core/requestPipeline/statusHandling.d.ts +14 -2
- package/dist/core/requestPipeline/statusHandling.d.ts.map +1 -1
- package/dist/core/util/concurrency.d.ts +29 -0
- package/dist/core/util/concurrency.d.ts.map +1 -0
- package/dist/core/util/error.d.mts +37 -0
- package/dist/core/util/retry.d.mts +8 -0
- package/dist/core/util/retry.d.ts.map +1 -1
- package/dist/errors.d.mts +5 -0
- package/dist/errors.d.ts +1 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +53 -195
- package/dist/errors.js.map +1 -1
- package/dist/errors.mjs +37 -129
- package/dist/errors.mjs.map +1 -1
- package/dist/index.d.mts +81 -0
- package/dist/index.d.ts +6 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2195 -3517
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1833 -3044
- package/dist/index.mjs.map +1 -1
- package/dist/schemas/access-lists.d.mts +16 -0
- package/dist/schemas/alliance.d.mts +26 -0
- package/dist/schemas/assets.d.mts +24 -0
- package/dist/schemas/calendar.d.mts +27 -0
- package/dist/schemas/calendar.d.ts +9 -7
- package/dist/schemas/calendar.d.ts.map +1 -1
- package/dist/schemas/character.d.mts +109 -0
- package/dist/schemas/character.d.ts +2 -2
- package/dist/schemas/clones.d.mts +17 -0
- package/dist/schemas/clones.d.ts +2 -2
- package/dist/schemas/common.d.mts +74 -0
- package/dist/schemas/contacts.d.mts +14 -0
- package/dist/schemas/contracts.d.mts +104 -0
- package/dist/schemas/contracts.d.ts +69 -6
- package/dist/schemas/contracts.d.ts.map +1 -1
- package/dist/schemas/corporation-projects.d.mts +104 -0
- package/dist/schemas/corporation-projects.d.ts +96 -9
- package/dist/schemas/corporation-projects.d.ts.map +1 -1
- package/dist/schemas/corporation.d.mts +193 -0
- package/dist/schemas/corporation.d.ts +34 -22
- package/dist/schemas/corporation.d.ts.map +1 -1
- package/dist/schemas/cosmetics.d.mts +58 -0
- package/dist/schemas/dogma.d.mts +57 -0
- package/dist/schemas/dogma.d.ts +2 -2
- package/dist/schemas/esiEnum.d.mts +3 -0
- package/dist/schemas/faction-warfare.d.mts +203 -0
- package/dist/schemas/faction-warfare.d.ts +125 -12
- package/dist/schemas/faction-warfare.d.ts.map +1 -1
- package/dist/schemas/fittings.d.mts +13 -0
- package/dist/schemas/fleet.d.mts +37 -0
- package/dist/schemas/fleet.d.ts +1 -1
- package/dist/schemas/freelance-jobs.d.mts +171 -0
- package/dist/schemas/freelance-jobs.d.ts +52 -22
- package/dist/schemas/freelance-jobs.d.ts.map +1 -1
- package/dist/schemas/incursions.d.mts +12 -0
- package/dist/schemas/index.d.mts +39 -0
- package/dist/schemas/index.js +420 -2479
- package/dist/schemas/index.js.map +1 -1
- package/dist/schemas/index.mjs +225 -2065
- package/dist/schemas/index.mjs.map +1 -1
- package/dist/schemas/industry.d.mts +99 -0
- package/dist/schemas/industry.d.ts +33 -0
- package/dist/schemas/industry.d.ts.map +1 -1
- package/dist/schemas/insurance.d.mts +10 -0
- package/dist/schemas/killmails.d.mts +38 -0
- package/dist/schemas/location.d.mts +18 -0
- package/dist/schemas/loyalty.d.mts +18 -0
- package/dist/schemas/mail.d.mts +53 -0
- package/dist/schemas/mail.d.ts +24 -5
- package/dist/schemas/mail.d.ts.map +1 -1
- package/dist/schemas/market.d.mts +123 -0
- package/dist/schemas/mercenary.d.mts +74 -0
- package/dist/schemas/mercenary.d.ts +1 -1
- package/dist/schemas/meta.d.mts +36 -0
- package/dist/schemas/meta.d.ts +12 -1
- package/dist/schemas/meta.d.ts.map +1 -1
- package/dist/schemas/military-campaigns.d.mts +26 -0
- package/dist/schemas/paragon-hub.d.mts +96 -0
- package/dist/schemas/pi.d.mts +71 -0
- package/dist/schemas/pi.d.ts +2 -2
- package/dist/schemas/skills.d.mts +28 -0
- package/dist/schemas/skyhooks.d.mts +129 -0
- package/dist/schemas/sovereignty.d.mts +56 -0
- package/dist/schemas/status.d.mts +8 -0
- package/dist/schemas/status.d.ts +1 -1
- package/dist/schemas/universe.d.mts +285 -0
- package/dist/schemas/universe.d.ts +22 -22
- package/dist/schemas/universe.d.ts.map +1 -1
- package/dist/schemas/wallet.d.mts +45 -0
- package/dist/schemas/wallet.d.ts +16 -0
- package/dist/schemas/wallet.d.ts.map +1 -1
- package/dist/schemas/wars.d.mts +27 -0
- package/dist/sde/IStaticDataProvider.d.mts +106 -0
- package/dist/sde/MemorySdeProvider.d.mts +167 -0
- package/dist/sde/SdeDataProvider.d.mts +119 -0
- package/dist/sde/SdeDataProvider.d.ts.map +1 -1
- package/dist/sde/SdeTestDataFactory.d.mts +33 -0
- package/dist/sde/errors.d.mts +23 -0
- package/dist/sde/index.d.mts +9 -0
- package/dist/sde/index.js +95 -1162
- package/dist/sde/index.js.map +1 -1
- package/dist/sde/index.mjs +73 -1091
- package/dist/sde/index.mjs.map +1 -1
- package/dist/sde/ingestion/SdeExtractor.d.ts.map +1 -1
- package/dist/sde/ingestion/metadata.d.ts +13 -0
- package/dist/sde/ingestion/metadata.d.ts.map +1 -0
- package/dist/sde/memory.d.mts +8 -0
- package/dist/sde/memory.js +21 -1095
- package/dist/sde/memory.js.map +1 -1
- package/dist/sde/memory.mjs +13 -1051
- package/dist/sde/memory.mjs.map +1 -1
- package/dist/sde/optionalPeers.d.ts +25 -0
- package/dist/sde/optionalPeers.d.ts.map +1 -0
- package/dist/sde/types.d.mts +1039 -0
- package/dist/sde/version.d.mts +7 -0
- package/dist/testing/TestDataFactory.d.mts +172 -0
- package/dist/testing/TestDataFactory.d.ts +28 -1
- package/dist/testing/TestDataFactory.d.ts.map +1 -1
- package/dist/testing/index.d.mts +2 -0
- package/dist/testing/index.js +116 -125
- package/dist/testing/index.js.map +1 -1
- package/dist/testing/index.mjs +110 -82
- package/dist/testing/index.mjs.map +1 -1
- package/dist/types/access-lists.d.mts +5 -0
- package/dist/types/alliance.d.mts +7 -0
- package/dist/types/api-responses.d.mts +40 -0
- package/dist/types/assets.d.mts +6 -0
- package/dist/types/branded.d.mts +23 -0
- package/dist/types/calendar.d.mts +6 -0
- package/dist/types/character.d.mts +17 -0
- package/dist/types/clones.d.mts +4 -0
- package/dist/types/common.d.mts +19 -0
- package/dist/types/contacts.d.mts +5 -0
- package/dist/types/contracts.d.mts +9 -0
- package/dist/types/contracts.d.ts +4 -1
- package/dist/types/contracts.d.ts.map +1 -1
- package/dist/types/corporation-projects.d.mts +10 -0
- package/dist/types/corporation-projects.d.ts +5 -1
- package/dist/types/corporation-projects.d.ts.map +1 -1
- package/dist/types/corporation.d.mts +19 -0
- package/dist/types/cosmetics.d.mts +8 -0
- package/dist/types/dogma.d.mts +6 -0
- package/dist/types/faction-warfare.d.mts +17 -0
- package/dist/types/faction-warfare.d.ts +9 -1
- package/dist/types/faction-warfare.d.ts.map +1 -1
- package/dist/types/fittings.d.mts +4 -0
- package/dist/types/fleet.d.mts +7 -0
- package/dist/types/freelance-jobs.d.mts +12 -0
- package/dist/types/freelance-jobs.d.ts +2 -1
- package/dist/types/freelance-jobs.d.ts.map +1 -1
- package/dist/types/generated/esi-spec.generated.d.mts +2136 -0
- package/dist/types/generated/esi-spec.generated.d.ts +164 -16
- package/dist/types/generated/esi-spec.generated.d.ts.map +1 -1
- package/dist/types/generated/spec-alignment.check.d.ts +2 -2
- package/dist/types/incursions.d.mts +4 -0
- package/dist/types/industry.d.mts +11 -0
- package/dist/types/industry.d.ts +2 -1
- package/dist/types/industry.d.ts.map +1 -1
- package/dist/types/insurance.d.mts +4 -0
- package/dist/types/killmails.d.mts +5 -0
- package/dist/types/location.d.mts +6 -0
- package/dist/types/loyalty.d.mts +5 -0
- package/dist/types/mail.d.mts +6 -0
- package/dist/types/mail.d.ts +2 -1
- package/dist/types/mail.d.ts.map +1 -1
- package/dist/types/market.d.mts +12 -0
- package/dist/types/mercenary.d.mts +7 -0
- package/dist/types/meta.d.mts +9 -0
- package/dist/types/meta.d.ts +2 -1
- package/dist/types/meta.d.ts.map +1 -1
- package/dist/types/military-campaigns.d.mts +6 -0
- package/dist/types/paragon-hub.d.mts +8 -0
- package/dist/types/pi.d.mts +6 -0
- package/dist/types/skills.d.mts +5 -0
- package/dist/types/skyhooks.d.mts +8 -0
- package/dist/types/sovereignty.d.mts +6 -0
- package/dist/types/status.d.mts +4 -0
- package/dist/types/universe.d.mts +27 -0
- package/dist/types/wallet.d.mts +6 -0
- package/dist/types/wallet.d.ts +2 -1
- package/dist/types/wallet.d.ts.map +1 -1
- package/dist/types/wars.d.mts +4 -0
- package/package.json +137 -46
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import { EsiClient, EsiClientConfig } from '../EsiClient';
|
|
2
|
+
import type { FetchLike, TokenProvider } from '../core/ApiClient';
|
|
3
|
+
import type { ILogger } from '../core/logger/ILogger';
|
|
4
|
+
import { EveSsoClient, AuthorizationUrlOptions, ExchangeCodeOptions } from './EveSsoClient';
|
|
5
|
+
import type { ITokenStorage, StoredToken } from './types';
|
|
6
|
+
export interface EsiTokenManagerConfig {
|
|
7
|
+
/** The application's SSO client id. */
|
|
8
|
+
clientId: string;
|
|
9
|
+
/** The application's SSO client secret. Omit for a public (PKCE) client. */
|
|
10
|
+
clientSecret?: string;
|
|
11
|
+
/** Redirect URI registered for the application. */
|
|
12
|
+
callbackUrl?: string;
|
|
13
|
+
/** Where tokens are persisted. Defaults to {@link MemoryTokenStorage}. */
|
|
14
|
+
storage?: ITokenStorage;
|
|
15
|
+
/** Pre-built SSO client. When given, `clientId`, `clientSecret`, `callbackUrl` and `fetch` are ignored for SSO calls. */
|
|
16
|
+
ssoClient?: EveSsoClient;
|
|
17
|
+
/** Custom fetch for SSO calls. Defaults to `globalThis.fetch`. */
|
|
18
|
+
fetch?: FetchLike;
|
|
19
|
+
/**
|
|
20
|
+
* How long before expiry a token counts as stale, in milliseconds.
|
|
21
|
+
* Defaults to 60 000 (one minute).
|
|
22
|
+
*/
|
|
23
|
+
refreshSkewMs?: number;
|
|
24
|
+
/**
|
|
25
|
+
* When true (the default), {@link EsiTokenManager.getToken} refreshes a
|
|
26
|
+
* stale token before returning it. When false it returns the stored token
|
|
27
|
+
* as-is and refresh only happens through {@link EsiTokenManager.refresh},
|
|
28
|
+
* {@link EsiTokenManager.refreshAll}, or the 401 path of a created client.
|
|
29
|
+
*/
|
|
30
|
+
autoRefresh?: boolean;
|
|
31
|
+
/** Called after a token is refreshed and persisted. */
|
|
32
|
+
onRefresh?: (token: StoredToken) => void;
|
|
33
|
+
/** Called when a refresh fails for a reason other than revocation. */
|
|
34
|
+
onRefreshError?: (characterId: number, error: Error) => void;
|
|
35
|
+
/** Called when SSO reports a character's refresh token as invalid. */
|
|
36
|
+
onRevoked?: (characterId: number) => void;
|
|
37
|
+
/** Logger for refresh activity. Defaults to the library logger. */
|
|
38
|
+
logger?: ILogger;
|
|
39
|
+
/** Clock override for tests. */
|
|
40
|
+
now?: () => number;
|
|
41
|
+
}
|
|
42
|
+
export interface AddCharacterOptions extends ExchangeCodeOptions {
|
|
43
|
+
/**
|
|
44
|
+
* When the character already has a stored token, revoke its refresh token
|
|
45
|
+
* at SSO before replacing it. Defaults to false.
|
|
46
|
+
*/
|
|
47
|
+
revokeReplaced?: boolean;
|
|
48
|
+
}
|
|
49
|
+
export interface RemoveCharacterOptions {
|
|
50
|
+
/** Revoke the refresh token at SSO before deleting it. Defaults to false. */
|
|
51
|
+
revoke?: boolean;
|
|
52
|
+
}
|
|
53
|
+
export interface RefreshAllOptions {
|
|
54
|
+
/** Maximum simultaneous SSO requests. Defaults to 5. */
|
|
55
|
+
concurrency?: number;
|
|
56
|
+
/**
|
|
57
|
+
* Only refresh tokens that expire within this many milliseconds (after
|
|
58
|
+
* applying the refresh skew). Omit to refresh every token.
|
|
59
|
+
*/
|
|
60
|
+
expiringWithinMs?: number;
|
|
61
|
+
/** Abort the run; remaining tokens are reported as skipped. */
|
|
62
|
+
signal?: AbortSignal;
|
|
63
|
+
/**
|
|
64
|
+
* Progress callback, invoked after each token settles. A callback that
|
|
65
|
+
* throws does not stop the run; the exception is discarded.
|
|
66
|
+
*/
|
|
67
|
+
onProgress?: (completed: number, total: number) => void;
|
|
68
|
+
}
|
|
69
|
+
export type RefreshStatus = 'refreshed' | 'skipped' | 'failed' | 'revoked';
|
|
70
|
+
export interface RefreshResult {
|
|
71
|
+
characterId: number;
|
|
72
|
+
status: RefreshStatus;
|
|
73
|
+
/** New expiry in epoch milliseconds, when refreshed. */
|
|
74
|
+
expiresAt?: number;
|
|
75
|
+
/** The error, when failed or revoked. */
|
|
76
|
+
error?: Error;
|
|
77
|
+
/** True when the failure was an SSO 429 or 5xx and can be retried later. */
|
|
78
|
+
retryable?: boolean;
|
|
79
|
+
/** Why the token was skipped. */
|
|
80
|
+
reason?: 'not-stale' | 'aborted';
|
|
81
|
+
}
|
|
82
|
+
/** Lightweight view of a stored character, without the secrets. */
|
|
83
|
+
export interface CharacterSummary {
|
|
84
|
+
characterId: number;
|
|
85
|
+
characterName: string;
|
|
86
|
+
scopes: string[];
|
|
87
|
+
expiresAt: number;
|
|
88
|
+
revoked: boolean;
|
|
89
|
+
}
|
|
90
|
+
/** EsiClient options a manager-created client accepts; token fields are supplied by the manager. */
|
|
91
|
+
export type ManagedClientConfig = Omit<EsiClientConfig, 'accessToken' | 'onTokenRefresh'>;
|
|
92
|
+
/**
|
|
93
|
+
* Keeps one valid SSO token per character on top of a pluggable
|
|
94
|
+
* {@link ITokenStorage}, refreshing ahead of expiry, coalescing concurrent
|
|
95
|
+
* refreshes, persisting rotated refresh tokens, and recording revocations so
|
|
96
|
+
* SSO is not hammered with a dead refresh token.
|
|
97
|
+
*/
|
|
98
|
+
export declare class EsiTokenManager {
|
|
99
|
+
private readonly storage;
|
|
100
|
+
private readonly sso;
|
|
101
|
+
private readonly refreshSkewMs;
|
|
102
|
+
private readonly autoRefresh;
|
|
103
|
+
private readonly logger;
|
|
104
|
+
private readonly now;
|
|
105
|
+
private readonly hooks;
|
|
106
|
+
private readonly inFlight;
|
|
107
|
+
/**
|
|
108
|
+
* Per-character write generation. Bumped whenever a record is replaced or
|
|
109
|
+
* removed so a refresh that was already waiting on SSO can tell its result
|
|
110
|
+
* is stale and must not be persisted over the newer state.
|
|
111
|
+
*/
|
|
112
|
+
private readonly generations;
|
|
113
|
+
constructor(config: EsiTokenManagerConfig);
|
|
114
|
+
/** The SSO client used for all token traffic. */
|
|
115
|
+
getSsoClient(): EveSsoClient;
|
|
116
|
+
/** The storage adapter backing this manager. */
|
|
117
|
+
getStorage(): ITokenStorage;
|
|
118
|
+
/** Build the SSO login URL. See {@link EveSsoClient.getAuthorizationUrl}. */
|
|
119
|
+
getAuthorizationUrl(options: AuthorizationUrlOptions): string;
|
|
120
|
+
/**
|
|
121
|
+
* Exchange an authorization code and store the resulting token under the
|
|
122
|
+
* character it belongs to. An existing token for that character is
|
|
123
|
+
* replaced; storage never holds two entries for one character.
|
|
124
|
+
*/
|
|
125
|
+
addCharacter(code: string, options?: AddCharacterOptions): Promise<StoredToken>;
|
|
126
|
+
/**
|
|
127
|
+
* Import tokens obtained elsewhere (a previous library version, another
|
|
128
|
+
* tool, a migration). The character identity is decoded from the access
|
|
129
|
+
* token; `expiresIn` is in seconds and defaults to the JWT `exp` claim.
|
|
130
|
+
*/
|
|
131
|
+
importToken(token: {
|
|
132
|
+
accessToken: string;
|
|
133
|
+
refreshToken: string;
|
|
134
|
+
expiresIn?: number;
|
|
135
|
+
}): Promise<StoredToken>;
|
|
136
|
+
/** Delete a character's token, optionally revoking it at SSO first. */
|
|
137
|
+
removeCharacter(characterId: number, options?: RemoveCharacterOptions): Promise<void>;
|
|
138
|
+
/** The stored record for a character, or null. */
|
|
139
|
+
getStoredToken(characterId: number): Promise<StoredToken | null>;
|
|
140
|
+
/** Every stored token. */
|
|
141
|
+
listTokens(): Promise<StoredToken[]>;
|
|
142
|
+
/** Every stored character without its secrets. */
|
|
143
|
+
listCharacters(): Promise<CharacterSummary[]>;
|
|
144
|
+
/** True when the stored token grants every listed scope. */
|
|
145
|
+
hasScopes(characterId: number, scopes: readonly string[]): Promise<boolean>;
|
|
146
|
+
/**
|
|
147
|
+
* A usable access token for the character. With `autoRefresh` on, a token
|
|
148
|
+
* inside the refresh skew is refreshed first.
|
|
149
|
+
*
|
|
150
|
+
* @throws CharacterNotFoundError when no token is stored
|
|
151
|
+
* @throws TokenRevokedError when the character's refresh token is revoked
|
|
152
|
+
*/
|
|
153
|
+
getToken(characterId: number): Promise<string>;
|
|
154
|
+
/**
|
|
155
|
+
* Refresh a character's token through SSO regardless of expiry. Concurrent
|
|
156
|
+
* calls for the same character share one SSO request.
|
|
157
|
+
*/
|
|
158
|
+
refresh(characterId: number): Promise<StoredToken>;
|
|
159
|
+
/**
|
|
160
|
+
* Refresh stored tokens with bounded concurrency. Per-character failures
|
|
161
|
+
* never reject: each character gets its own {@link RefreshResult}. The one
|
|
162
|
+
* rejection is a failing `storage.list()`, because with no records there
|
|
163
|
+
* is no character to attribute the fault to and a silent empty run would
|
|
164
|
+
* hide a broken store from a scheduler.
|
|
165
|
+
*/
|
|
166
|
+
refreshAll(options?: RefreshAllOptions): Promise<RefreshResult[]>;
|
|
167
|
+
/**
|
|
168
|
+
* A {@link TokenProvider} bound to a character, for `onTokenRefresh`. Every
|
|
169
|
+
* invocation refreshes through SSO (coalesced), because the client only
|
|
170
|
+
* calls it after ESI has rejected the current token.
|
|
171
|
+
*/
|
|
172
|
+
tokenProviderFor(characterId: number): TokenProvider;
|
|
173
|
+
/**
|
|
174
|
+
* An {@link EsiClient} whose access token and refresh provider are bound to
|
|
175
|
+
* the character. The token is validated (and refreshed if stale) first.
|
|
176
|
+
*/
|
|
177
|
+
createClient(characterId: number, config?: ManagedClientConfig): Promise<EsiClient>;
|
|
178
|
+
private isStale;
|
|
179
|
+
private requireStored;
|
|
180
|
+
private generationOf;
|
|
181
|
+
private bumpGeneration;
|
|
182
|
+
/**
|
|
183
|
+
* After an SSO round trip, decide whether the refresh still owns the
|
|
184
|
+
* character's record. Returns null when it does. When the record was
|
|
185
|
+
* replaced meanwhile, returns the current record so the caller hands out
|
|
186
|
+
* the newer credentials; when it was removed, throws CharacterNotFoundError.
|
|
187
|
+
*/
|
|
188
|
+
private supersededBy;
|
|
189
|
+
private doRefresh;
|
|
190
|
+
private refreshOne;
|
|
191
|
+
private storeResponse;
|
|
192
|
+
/**
|
|
193
|
+
* Build the record to persist. When adding a character the access token
|
|
194
|
+
* must decode, because it is the only source of the character id. On a
|
|
195
|
+
* refresh the identity is already known, so a token that does not decode
|
|
196
|
+
* (a proxy, a future SSO format) keeps the previous record's identity.
|
|
197
|
+
*/
|
|
198
|
+
private buildStoredToken;
|
|
199
|
+
}
|
|
200
|
+
//# sourceMappingURL=EsiTokenManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EsiTokenManager.d.ts","sourceRoot":"","sources":["../../src/auth/EsiTokenManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import type { FetchLike } from '../core/ApiClient.mjs';
|
|
2
|
+
export declare const DEFAULT_SSO_BASE_URL = "https://login.eveonline.com";
|
|
3
|
+
export interface EveSsoClientConfig {
|
|
4
|
+
/** The application's client id from developers.eveonline.com. */
|
|
5
|
+
clientId: string;
|
|
6
|
+
/**
|
|
7
|
+
* The application's client secret. Omit for a public (PKCE) client; token
|
|
8
|
+
* requests then identify the application by `client_id` in the form body.
|
|
9
|
+
*/
|
|
10
|
+
clientSecret?: string;
|
|
11
|
+
/** Redirect URI registered for the application. Used by {@link EveSsoClient.getAuthorizationUrl}. */
|
|
12
|
+
callbackUrl?: string;
|
|
13
|
+
/** Override the SSO host, for tests or a proxy. Defaults to https://login.eveonline.com. */
|
|
14
|
+
ssoBaseUrl?: string;
|
|
15
|
+
/** Custom fetch implementation. Defaults to `globalThis.fetch` resolved at call time. */
|
|
16
|
+
fetch?: FetchLike;
|
|
17
|
+
}
|
|
18
|
+
/** A successful response from the SSO token endpoint. */
|
|
19
|
+
export interface SsoTokenResponse {
|
|
20
|
+
accessToken: string;
|
|
21
|
+
refreshToken: string;
|
|
22
|
+
/** Lifetime of `accessToken` in seconds, as reported by SSO. */
|
|
23
|
+
expiresIn: number;
|
|
24
|
+
tokenType: string;
|
|
25
|
+
}
|
|
26
|
+
export interface AuthorizationUrlOptions {
|
|
27
|
+
/** Scopes to request. */
|
|
28
|
+
scopes: readonly string[];
|
|
29
|
+
/** Opaque value echoed back on the callback; use {@link generateState}. */
|
|
30
|
+
state: string;
|
|
31
|
+
/** PKCE challenge for public clients; see {@link generatePkcePair}. */
|
|
32
|
+
codeChallenge?: string;
|
|
33
|
+
/** Overrides `callbackUrl` from the config. */
|
|
34
|
+
redirectUri?: string;
|
|
35
|
+
}
|
|
36
|
+
export interface ExchangeCodeOptions {
|
|
37
|
+
/** PKCE verifier that produced the challenge sent in the authorization URL. */
|
|
38
|
+
codeVerifier?: string;
|
|
39
|
+
/**
|
|
40
|
+
* The redirect URI that was sent in the authorization request. Defaults to
|
|
41
|
+
* the configured `callbackUrl`; when neither is set the field is omitted.
|
|
42
|
+
*/
|
|
43
|
+
redirectUri?: string;
|
|
44
|
+
}
|
|
45
|
+
export interface RefreshOptions {
|
|
46
|
+
/** Request a subset of the originally granted scopes. */
|
|
47
|
+
scopes?: readonly string[];
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Minimal client for the EVE SSO OAuth2 endpoints: building the login URL,
|
|
51
|
+
* exchanging an authorization code, refreshing, and revoking.
|
|
52
|
+
*
|
|
53
|
+
* Supports confidential clients (HTTP Basic with the client secret) and
|
|
54
|
+
* public clients (PKCE with `client_id` in the body). No JWT signature
|
|
55
|
+
* verification is performed; tokens are trusted because they arrive directly
|
|
56
|
+
* from SSO over TLS.
|
|
57
|
+
*/
|
|
58
|
+
export declare class EveSsoClient {
|
|
59
|
+
private readonly clientId;
|
|
60
|
+
private readonly clientSecret?;
|
|
61
|
+
private readonly callbackUrl?;
|
|
62
|
+
private readonly baseUrl;
|
|
63
|
+
private readonly fetchFn?;
|
|
64
|
+
constructor(config: EveSsoClientConfig);
|
|
65
|
+
/** True when a client secret is configured (confidential client). */
|
|
66
|
+
isConfidential(): boolean;
|
|
67
|
+
get tokenUrl(): string;
|
|
68
|
+
get authorizeUrl(): string;
|
|
69
|
+
get revokeUrl(): string;
|
|
70
|
+
/** Build the URL to send a player to for login. */
|
|
71
|
+
getAuthorizationUrl(options: AuthorizationUrlOptions): string;
|
|
72
|
+
/** Exchange the authorization code from the callback for tokens. */
|
|
73
|
+
exchangeCode(code: string, options?: ExchangeCodeOptions): Promise<SsoTokenResponse>;
|
|
74
|
+
/** Obtain a new access token (and rotated refresh token) from a refresh token. */
|
|
75
|
+
refresh(refreshToken: string, options?: RefreshOptions): Promise<SsoTokenResponse>;
|
|
76
|
+
/** Revoke a refresh token so it can no longer be used. */
|
|
77
|
+
revoke(token: string, tokenTypeHint?: 'refresh_token' | 'access_token'): Promise<void>;
|
|
78
|
+
private tokenRequest;
|
|
79
|
+
private post;
|
|
80
|
+
/**
|
|
81
|
+
* Map a non-2xx SSO response to an error. `invalid_grant` means "the
|
|
82
|
+
* refresh token is dead" only for a refresh grant; on a code exchange (or
|
|
83
|
+
* a revoke) it describes the login code or request, so it stays an
|
|
84
|
+
* `SsoError` and does not trigger the re-authentication path.
|
|
85
|
+
*/
|
|
86
|
+
private errorFromResponse;
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=EveSsoClient.d.ts.map
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import type { FetchLike } from '../core/ApiClient';
|
|
2
|
+
export declare const DEFAULT_SSO_BASE_URL = "https://login.eveonline.com";
|
|
3
|
+
export interface EveSsoClientConfig {
|
|
4
|
+
/** The application's client id from developers.eveonline.com. */
|
|
5
|
+
clientId: string;
|
|
6
|
+
/**
|
|
7
|
+
* The application's client secret. Omit for a public (PKCE) client; token
|
|
8
|
+
* requests then identify the application by `client_id` in the form body.
|
|
9
|
+
*/
|
|
10
|
+
clientSecret?: string;
|
|
11
|
+
/** Redirect URI registered for the application. Used by {@link EveSsoClient.getAuthorizationUrl}. */
|
|
12
|
+
callbackUrl?: string;
|
|
13
|
+
/** Override the SSO host, for tests or a proxy. Defaults to https://login.eveonline.com. */
|
|
14
|
+
ssoBaseUrl?: string;
|
|
15
|
+
/** Custom fetch implementation. Defaults to `globalThis.fetch` resolved at call time. */
|
|
16
|
+
fetch?: FetchLike;
|
|
17
|
+
}
|
|
18
|
+
/** A successful response from the SSO token endpoint. */
|
|
19
|
+
export interface SsoTokenResponse {
|
|
20
|
+
accessToken: string;
|
|
21
|
+
refreshToken: string;
|
|
22
|
+
/** Lifetime of `accessToken` in seconds, as reported by SSO. */
|
|
23
|
+
expiresIn: number;
|
|
24
|
+
tokenType: string;
|
|
25
|
+
}
|
|
26
|
+
export interface AuthorizationUrlOptions {
|
|
27
|
+
/** Scopes to request. */
|
|
28
|
+
scopes: readonly string[];
|
|
29
|
+
/** Opaque value echoed back on the callback; use {@link generateState}. */
|
|
30
|
+
state: string;
|
|
31
|
+
/** PKCE challenge for public clients; see {@link generatePkcePair}. */
|
|
32
|
+
codeChallenge?: string;
|
|
33
|
+
/** Overrides `callbackUrl` from the config. */
|
|
34
|
+
redirectUri?: string;
|
|
35
|
+
}
|
|
36
|
+
export interface ExchangeCodeOptions {
|
|
37
|
+
/** PKCE verifier that produced the challenge sent in the authorization URL. */
|
|
38
|
+
codeVerifier?: string;
|
|
39
|
+
/**
|
|
40
|
+
* The redirect URI that was sent in the authorization request. Defaults to
|
|
41
|
+
* the configured `callbackUrl`; when neither is set the field is omitted.
|
|
42
|
+
*/
|
|
43
|
+
redirectUri?: string;
|
|
44
|
+
}
|
|
45
|
+
export interface RefreshOptions {
|
|
46
|
+
/** Request a subset of the originally granted scopes. */
|
|
47
|
+
scopes?: readonly string[];
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Minimal client for the EVE SSO OAuth2 endpoints: building the login URL,
|
|
51
|
+
* exchanging an authorization code, refreshing, and revoking.
|
|
52
|
+
*
|
|
53
|
+
* Supports confidential clients (HTTP Basic with the client secret) and
|
|
54
|
+
* public clients (PKCE with `client_id` in the body). No JWT signature
|
|
55
|
+
* verification is performed; tokens are trusted because they arrive directly
|
|
56
|
+
* from SSO over TLS.
|
|
57
|
+
*/
|
|
58
|
+
export declare class EveSsoClient {
|
|
59
|
+
private readonly clientId;
|
|
60
|
+
private readonly clientSecret?;
|
|
61
|
+
private readonly callbackUrl?;
|
|
62
|
+
private readonly baseUrl;
|
|
63
|
+
private readonly fetchFn?;
|
|
64
|
+
constructor(config: EveSsoClientConfig);
|
|
65
|
+
/** True when a client secret is configured (confidential client). */
|
|
66
|
+
isConfidential(): boolean;
|
|
67
|
+
get tokenUrl(): string;
|
|
68
|
+
get authorizeUrl(): string;
|
|
69
|
+
get revokeUrl(): string;
|
|
70
|
+
/** Build the URL to send a player to for login. */
|
|
71
|
+
getAuthorizationUrl(options: AuthorizationUrlOptions): string;
|
|
72
|
+
/** Exchange the authorization code from the callback for tokens. */
|
|
73
|
+
exchangeCode(code: string, options?: ExchangeCodeOptions): Promise<SsoTokenResponse>;
|
|
74
|
+
/** Obtain a new access token (and rotated refresh token) from a refresh token. */
|
|
75
|
+
refresh(refreshToken: string, options?: RefreshOptions): Promise<SsoTokenResponse>;
|
|
76
|
+
/** Revoke a refresh token so it can no longer be used. */
|
|
77
|
+
revoke(token: string, tokenTypeHint?: 'refresh_token' | 'access_token'): Promise<void>;
|
|
78
|
+
private tokenRequest;
|
|
79
|
+
private post;
|
|
80
|
+
/**
|
|
81
|
+
* Map a non-2xx SSO response to an error. `invalid_grant` means "the
|
|
82
|
+
* refresh token is dead" only for a refresh grant; on a code exchange (or
|
|
83
|
+
* a revoke) it describes the login code or request, so it stays an
|
|
84
|
+
* `SsoError` and does not trigger the re-authentication path.
|
|
85
|
+
*/
|
|
86
|
+
private errorFromResponse;
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=EveSsoClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EveSsoClient.d.ts","sourceRoot":"","sources":["../../src/auth/EveSsoClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAInD,eAAO,MAAM,oBAAoB,gCAAgC,CAAC;AAElE,MAAM,WAAW,kBAAkB;IACjC,iEAAiE;IACjE,QAAQ,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qGAAqG;IACrG,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4FAA4F;IAC5F,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yFAAyF;IACzF,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAED,yDAAyD;AACzD,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,gEAAgE;IAChE,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,uBAAuB;IACtC,yBAAyB;IACzB,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,2EAA2E;IAC3E,KAAK,EAAE,MAAM,CAAC;IACd,uEAAuE;IACvE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,+CAA+C;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,+EAA+E;IAC/E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,yDAAyD;IACzD,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5B;AAqBD;;;;;;;;GAQG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAY;gBAEzB,MAAM,EAAE,kBAAkB;IActC,qEAAqE;IACrE,cAAc,IAAI,OAAO;IAIzB,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,mDAAmD;IACnD,mBAAmB,CAAC,OAAO,EAAE,uBAAuB,GAAG,MAAM;IAoB7D,oEAAoE;IAC9D,YAAY,CAChB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,gBAAgB,CAAC;IAiB5B,kFAAkF;IAC5E,OAAO,CACX,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,gBAAgB,CAAC;IAW5B,0DAA0D;IACpD,MAAM,CACV,KAAK,EAAE,MAAM,EACb,aAAa,GAAE,eAAe,GAAG,cAAgC,GAChE,OAAO,CAAC,IAAI,CAAC;YAWF,YAAY;YAgDZ,IAAI;IAkBlB;;;;;OAKG;YACW,iBAAiB;CA2BhC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/** Base class for every error raised by the auth subsystem. */
|
|
2
|
+
export declare class AuthError extends Error {
|
|
3
|
+
constructor(message: string);
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* EVE SSO answered a token or revoke request with a non-2xx status.
|
|
7
|
+
*
|
|
8
|
+
* `errorCode` is the OAuth2 `error` field from the response body
|
|
9
|
+
* (`invalid_client`, `invalid_request`, ...) or `unknown` when the body could
|
|
10
|
+
* not be parsed. `statusCode` is the HTTP status.
|
|
11
|
+
*/
|
|
12
|
+
export declare class SsoError extends AuthError {
|
|
13
|
+
readonly statusCode: number;
|
|
14
|
+
readonly errorCode: string;
|
|
15
|
+
readonly errorDescription?: string;
|
|
16
|
+
constructor(statusCode: number, errorCode: string, errorDescription?: string);
|
|
17
|
+
/** True for statuses where the same request can be retried later. */
|
|
18
|
+
isRetryable(): boolean;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* The refresh token is no longer accepted by SSO (`invalid_grant`), or the
|
|
22
|
+
* manager has already recorded that outcome for the character. The character
|
|
23
|
+
* must log in again; retrying cannot help.
|
|
24
|
+
*/
|
|
25
|
+
export declare class TokenRevokedError extends AuthError {
|
|
26
|
+
readonly characterId?: number;
|
|
27
|
+
constructor(message: string, characterId?: number);
|
|
28
|
+
}
|
|
29
|
+
/** A JWT access token could not be decoded into the claims the manager needs. */
|
|
30
|
+
export declare class TokenDecodeError extends AuthError {
|
|
31
|
+
constructor(message: string);
|
|
32
|
+
}
|
|
33
|
+
/** No token is stored for the requested character. */
|
|
34
|
+
export declare class CharacterNotFoundError extends AuthError {
|
|
35
|
+
readonly characterId: number;
|
|
36
|
+
constructor(characterId: number);
|
|
37
|
+
}
|
|
38
|
+
export declare function isAuthError(error: unknown): error is AuthError;
|
|
39
|
+
export declare function isSsoError(error: unknown): error is SsoError;
|
|
40
|
+
export declare function isTokenRevoked(error: unknown): error is TokenRevokedError;
|
|
41
|
+
export declare function isCharacterNotFound(error: unknown): error is CharacterNotFoundError;
|
|
42
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/** Base class for every error raised by the auth subsystem. */
|
|
2
|
+
export declare class AuthError extends Error {
|
|
3
|
+
constructor(message: string);
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* EVE SSO answered a token or revoke request with a non-2xx status.
|
|
7
|
+
*
|
|
8
|
+
* `errorCode` is the OAuth2 `error` field from the response body
|
|
9
|
+
* (`invalid_client`, `invalid_request`, ...) or `unknown` when the body could
|
|
10
|
+
* not be parsed. `statusCode` is the HTTP status.
|
|
11
|
+
*/
|
|
12
|
+
export declare class SsoError extends AuthError {
|
|
13
|
+
readonly statusCode: number;
|
|
14
|
+
readonly errorCode: string;
|
|
15
|
+
readonly errorDescription?: string;
|
|
16
|
+
constructor(statusCode: number, errorCode: string, errorDescription?: string);
|
|
17
|
+
/** True for statuses where the same request can be retried later. */
|
|
18
|
+
isRetryable(): boolean;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* The refresh token is no longer accepted by SSO (`invalid_grant`), or the
|
|
22
|
+
* manager has already recorded that outcome for the character. The character
|
|
23
|
+
* must log in again; retrying cannot help.
|
|
24
|
+
*/
|
|
25
|
+
export declare class TokenRevokedError extends AuthError {
|
|
26
|
+
readonly characterId?: number;
|
|
27
|
+
constructor(message: string, characterId?: number);
|
|
28
|
+
}
|
|
29
|
+
/** A JWT access token could not be decoded into the claims the manager needs. */
|
|
30
|
+
export declare class TokenDecodeError extends AuthError {
|
|
31
|
+
constructor(message: string);
|
|
32
|
+
}
|
|
33
|
+
/** No token is stored for the requested character. */
|
|
34
|
+
export declare class CharacterNotFoundError extends AuthError {
|
|
35
|
+
readonly characterId: number;
|
|
36
|
+
constructor(characterId: number);
|
|
37
|
+
}
|
|
38
|
+
export declare function isAuthError(error: unknown): error is AuthError;
|
|
39
|
+
export declare function isSsoError(error: unknown): error is SsoError;
|
|
40
|
+
export declare function isTokenRevoked(error: unknown): error is TokenRevokedError;
|
|
41
|
+
export declare function isCharacterNotFound(error: unknown): error is CharacterNotFoundError;
|
|
42
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/auth/errors.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,qBAAa,SAAU,SAAQ,KAAK;gBACtB,OAAO,EAAE,MAAM;CAI5B;AAED;;;;;;GAMG;AACH,qBAAa,QAAS,SAAQ,SAAS;IACrC,SAAgB,UAAU,EAAE,MAAM,CAAC;IACnC,SAAgB,SAAS,EAAE,MAAM,CAAC;IAClC,SAAgB,gBAAgB,CAAC,EAAE,MAAM,CAAC;gBAGxC,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,gBAAgB,CAAC,EAAE,MAAM;IAU3B,qEAAqE;IACrE,WAAW,IAAI,OAAO;CAGvB;AAED;;;;GAIG;AACH,qBAAa,iBAAkB,SAAQ,SAAS;IAC9C,SAAgB,WAAW,CAAC,EAAE,MAAM,CAAC;gBAEzB,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM;CAKlD;AAED,iFAAiF;AACjF,qBAAa,gBAAiB,SAAQ,SAAS;gBACjC,OAAO,EAAE,MAAM;CAI5B;AAED,sDAAsD;AACtD,qBAAa,sBAAuB,SAAQ,SAAS;IACnD,SAAgB,WAAW,EAAE,MAAM,CAAC;gBAExB,WAAW,EAAE,MAAM;CAKhC;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,SAAS,CAE9D;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,QAAQ,CAE5D;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,iBAAiB,CAEzE;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,sBAAsB,CAEjC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export type { ITokenStorage, StoredToken } from './types.mjs';
|
|
2
|
+
export { EveSsoClient, DEFAULT_SSO_BASE_URL } from './EveSsoClient.mjs';
|
|
3
|
+
export type { EveSsoClientConfig, SsoTokenResponse, AuthorizationUrlOptions, ExchangeCodeOptions, RefreshOptions, } from './EveSsoClient.mjs';
|
|
4
|
+
export { EsiTokenManager } from './EsiTokenManager.mjs';
|
|
5
|
+
export type { EsiTokenManagerConfig, AddCharacterOptions, RemoveCharacterOptions, RefreshAllOptions, RefreshResult, RefreshStatus, CharacterSummary, ManagedClientConfig, } from './EsiTokenManager.mjs';
|
|
6
|
+
export { MemoryTokenStorage } from './storage/MemoryTokenStorage.mjs';
|
|
7
|
+
export { FileTokenStorage } from './storage/FileTokenStorage.mjs';
|
|
8
|
+
export type { FileTokenStorageOptions } from './storage/FileTokenStorage.mjs';
|
|
9
|
+
export { AuthError, SsoError, TokenRevokedError, TokenDecodeError, CharacterNotFoundError, isAuthError, isSsoError, isTokenRevoked, isCharacterNotFound, } from './errors.mjs';
|
|
10
|
+
export { decodeAccessToken, decodeJwtPayload, parseCharacterId, parseScopes, } from './jwt.mjs';
|
|
11
|
+
export type { DecodedAccessToken, EveJwtClaims } from './jwt.mjs';
|
|
12
|
+
export { generatePkcePair, generateCodeVerifier, codeChallengeFromVerifier, generateState, } from './pkce.mjs';
|
|
13
|
+
export type { PkcePair } from './pkce.mjs';
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export type { ITokenStorage, StoredToken } from './types';
|
|
2
|
+
export { EveSsoClient, DEFAULT_SSO_BASE_URL } from './EveSsoClient';
|
|
3
|
+
export type { EveSsoClientConfig, SsoTokenResponse, AuthorizationUrlOptions, ExchangeCodeOptions, RefreshOptions, } from './EveSsoClient';
|
|
4
|
+
export { EsiTokenManager } from './EsiTokenManager';
|
|
5
|
+
export type { EsiTokenManagerConfig, AddCharacterOptions, RemoveCharacterOptions, RefreshAllOptions, RefreshResult, RefreshStatus, CharacterSummary, ManagedClientConfig, } from './EsiTokenManager';
|
|
6
|
+
export { MemoryTokenStorage } from './storage/MemoryTokenStorage';
|
|
7
|
+
export { FileTokenStorage } from './storage/FileTokenStorage';
|
|
8
|
+
export type { FileTokenStorageOptions } from './storage/FileTokenStorage';
|
|
9
|
+
export { AuthError, SsoError, TokenRevokedError, TokenDecodeError, CharacterNotFoundError, isAuthError, isSsoError, isTokenRevoked, isCharacterNotFound, } from './errors';
|
|
10
|
+
export { decodeAccessToken, decodeJwtPayload, parseCharacterId, parseScopes, } from './jwt';
|
|
11
|
+
export type { DecodedAccessToken, EveJwtClaims } from './jwt';
|
|
12
|
+
export { generatePkcePair, generateCodeVerifier, codeChallengeFromVerifier, generateState, } from './pkce';
|
|
13
|
+
export type { PkcePair } from './pkce';
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE1D,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACpE,YAAY,EACV,kBAAkB,EAClB,gBAAgB,EAChB,uBAAuB,EACvB,mBAAmB,EACnB,cAAc,GACf,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,YAAY,EACV,qBAAqB,EACrB,mBAAmB,EACnB,sBAAsB,EACtB,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,YAAY,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAE1E,OAAO,EACL,SAAS,EACT,QAAQ,EACR,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,EACtB,WAAW,EACX,UAAU,EACV,cAAc,EACd,mBAAmB,GACpB,MAAM,UAAU,CAAC;AAElB,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,GACZ,MAAM,OAAO,CAAC;AACf,YAAY,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAE9D,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,yBAAyB,EACzB,aAAa,GACd,MAAM,QAAQ,CAAC;AAChB,YAAY,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/** Claims EVE SSO places in an access token. Only the ones the manager reads are typed. */
|
|
2
|
+
export interface EveJwtClaims {
|
|
3
|
+
/** `CHARACTER:EVE:<characterId>` */
|
|
4
|
+
sub: string;
|
|
5
|
+
/** Character name. */
|
|
6
|
+
name?: string;
|
|
7
|
+
/** Granted scopes: a single string, or an array when more than one. */
|
|
8
|
+
scp?: string | string[];
|
|
9
|
+
/** Expiry as epoch seconds. */
|
|
10
|
+
exp?: number;
|
|
11
|
+
/** Issued-at as epoch seconds. */
|
|
12
|
+
iat?: number;
|
|
13
|
+
/** Owner hash; changes on character transfer. */
|
|
14
|
+
owner?: string;
|
|
15
|
+
iss?: string;
|
|
16
|
+
aud?: string | string[];
|
|
17
|
+
[claim: string]: unknown;
|
|
18
|
+
}
|
|
19
|
+
/** Identity and lifetime information extracted from an EVE SSO access token. */
|
|
20
|
+
export interface DecodedAccessToken {
|
|
21
|
+
characterId: number;
|
|
22
|
+
characterName: string;
|
|
23
|
+
scopes: string[];
|
|
24
|
+
/** Epoch milliseconds, or undefined when the token carries no `exp`. */
|
|
25
|
+
expiresAt?: number;
|
|
26
|
+
ownerHash?: string;
|
|
27
|
+
claims: EveJwtClaims;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Decode the payload of a JWT without verifying its signature.
|
|
31
|
+
*
|
|
32
|
+
* Tokens reach the manager directly from SSO over TLS, so the payload is
|
|
33
|
+
* trusted for the purpose of learning which character it belongs to. Do not
|
|
34
|
+
* use this to authenticate tokens presented by third parties.
|
|
35
|
+
*/
|
|
36
|
+
export declare function decodeJwtPayload(token: string): EveJwtClaims;
|
|
37
|
+
/** Parse the character id out of an SSO `sub` claim (`CHARACTER:EVE:123`). */
|
|
38
|
+
export declare function parseCharacterId(sub: unknown): number;
|
|
39
|
+
/** Normalise the `scp` claim, which SSO emits as a string for one scope and an array otherwise. */
|
|
40
|
+
export declare function parseScopes(scp: unknown): string[];
|
|
41
|
+
/** Decode an EVE SSO access token into the fields the token manager stores. */
|
|
42
|
+
export declare function decodeAccessToken(token: string): DecodedAccessToken;
|
|
43
|
+
//# sourceMappingURL=jwt.d.ts.map
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/** Claims EVE SSO places in an access token. Only the ones the manager reads are typed. */
|
|
2
|
+
export interface EveJwtClaims {
|
|
3
|
+
/** `CHARACTER:EVE:<characterId>` */
|
|
4
|
+
sub: string;
|
|
5
|
+
/** Character name. */
|
|
6
|
+
name?: string;
|
|
7
|
+
/** Granted scopes: a single string, or an array when more than one. */
|
|
8
|
+
scp?: string | string[];
|
|
9
|
+
/** Expiry as epoch seconds. */
|
|
10
|
+
exp?: number;
|
|
11
|
+
/** Issued-at as epoch seconds. */
|
|
12
|
+
iat?: number;
|
|
13
|
+
/** Owner hash; changes on character transfer. */
|
|
14
|
+
owner?: string;
|
|
15
|
+
iss?: string;
|
|
16
|
+
aud?: string | string[];
|
|
17
|
+
[claim: string]: unknown;
|
|
18
|
+
}
|
|
19
|
+
/** Identity and lifetime information extracted from an EVE SSO access token. */
|
|
20
|
+
export interface DecodedAccessToken {
|
|
21
|
+
characterId: number;
|
|
22
|
+
characterName: string;
|
|
23
|
+
scopes: string[];
|
|
24
|
+
/** Epoch milliseconds, or undefined when the token carries no `exp`. */
|
|
25
|
+
expiresAt?: number;
|
|
26
|
+
ownerHash?: string;
|
|
27
|
+
claims: EveJwtClaims;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Decode the payload of a JWT without verifying its signature.
|
|
31
|
+
*
|
|
32
|
+
* Tokens reach the manager directly from SSO over TLS, so the payload is
|
|
33
|
+
* trusted for the purpose of learning which character it belongs to. Do not
|
|
34
|
+
* use this to authenticate tokens presented by third parties.
|
|
35
|
+
*/
|
|
36
|
+
export declare function decodeJwtPayload(token: string): EveJwtClaims;
|
|
37
|
+
/** Parse the character id out of an SSO `sub` claim (`CHARACTER:EVE:123`). */
|
|
38
|
+
export declare function parseCharacterId(sub: unknown): number;
|
|
39
|
+
/** Normalise the `scp` claim, which SSO emits as a string for one scope and an array otherwise. */
|
|
40
|
+
export declare function parseScopes(scp: unknown): string[];
|
|
41
|
+
/** Decode an EVE SSO access token into the fields the token manager stores. */
|
|
42
|
+
export declare function decodeAccessToken(token: string): DecodedAccessToken;
|
|
43
|
+
//# sourceMappingURL=jwt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jwt.d.ts","sourceRoot":"","sources":["../../src/auth/jwt.ts"],"names":[],"mappings":"AAEA,2FAA2F;AAC3F,MAAM,WAAW,YAAY;IAC3B,oCAAoC;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,sBAAsB;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uEAAuE;IACvE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACxB,+BAA+B;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,iDAAiD;IACjD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACxB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AAED,gFAAgF;AAChF,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,wEAAwE;IACxE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,YAAY,CAAC;CACtB;AAMD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,CAiB5D;AAED,8EAA8E;AAC9E,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAWrD;AAED,mGAAmG;AACnG,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,EAAE,CAQlD;AAED,+EAA+E;AAC/E,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,kBAAkB,CAWnE"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A PKCE verifier/challenge pair for the authorization-code flow of a public
|
|
3
|
+
* client (one that cannot hold a client secret).
|
|
4
|
+
*/
|
|
5
|
+
export interface PkcePair {
|
|
6
|
+
/** Random secret sent with the token request as `code_verifier`. */
|
|
7
|
+
codeVerifier: string;
|
|
8
|
+
/** `BASE64URL(SHA256(codeVerifier))`, sent in the authorization URL. */
|
|
9
|
+
codeChallenge: string;
|
|
10
|
+
/** Always `S256`; EVE SSO does not accept the plain method. */
|
|
11
|
+
codeChallengeMethod: 'S256';
|
|
12
|
+
}
|
|
13
|
+
/** Generate a 32-byte base64url code verifier (43 characters). */
|
|
14
|
+
export declare function generateCodeVerifier(): string;
|
|
15
|
+
/** Derive the S256 code challenge for a verifier. */
|
|
16
|
+
export declare function codeChallengeFromVerifier(codeVerifier: string): string;
|
|
17
|
+
/** Generate a verifier and its challenge in one call. */
|
|
18
|
+
export declare function generatePkcePair(): PkcePair;
|
|
19
|
+
/** Generate an unguessable OAuth2 `state` value. */
|
|
20
|
+
export declare function generateState(): string;
|
|
21
|
+
//# sourceMappingURL=pkce.d.ts.map
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A PKCE verifier/challenge pair for the authorization-code flow of a public
|
|
3
|
+
* client (one that cannot hold a client secret).
|
|
4
|
+
*/
|
|
5
|
+
export interface PkcePair {
|
|
6
|
+
/** Random secret sent with the token request as `code_verifier`. */
|
|
7
|
+
codeVerifier: string;
|
|
8
|
+
/** `BASE64URL(SHA256(codeVerifier))`, sent in the authorization URL. */
|
|
9
|
+
codeChallenge: string;
|
|
10
|
+
/** Always `S256`; EVE SSO does not accept the plain method. */
|
|
11
|
+
codeChallengeMethod: 'S256';
|
|
12
|
+
}
|
|
13
|
+
/** Generate a 32-byte base64url code verifier (43 characters). */
|
|
14
|
+
export declare function generateCodeVerifier(): string;
|
|
15
|
+
/** Derive the S256 code challenge for a verifier. */
|
|
16
|
+
export declare function codeChallengeFromVerifier(codeVerifier: string): string;
|
|
17
|
+
/** Generate a verifier and its challenge in one call. */
|
|
18
|
+
export declare function generatePkcePair(): PkcePair;
|
|
19
|
+
/** Generate an unguessable OAuth2 `state` value. */
|
|
20
|
+
export declare function generateState(): string;
|
|
21
|
+
//# sourceMappingURL=pkce.d.ts.map
|