UNPKG

@confluentinc/schemaregistry

Version:
68 lines (67 loc) 2.73 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports._AbstractOAuthClient = exports._AbstractOauthTokenProvider = exports._AbstractBearerTokenProviderBuilder = void 0; const retry_helper_1 = require("../retry-helper"); const boom_1 = require("@hapi/boom"); class AbstractBearerTokenProviderBuilder { constructor(bearerAuthCredentials) { this.bearerAuthCredentials = bearerAuthCredentials; } validate() { const headers = ['logicalCluster', 'identityPoolId']; const missingHeader = headers.find(header => !(header in this.bearerAuthCredentials)); if (missingHeader) { throw new Error(`Bearer auth header '${missingHeader}' not provided`); } } } exports._AbstractBearerTokenProviderBuilder = AbstractBearerTokenProviderBuilder; class AbstractOauthTokenProvider { constructor(bearerAuthCredentials) { this.additionalHeaders = { 'target-sr-cluster': bearerAuthCredentials.logicalCluster, 'Confluent-Identity-Pool-Id': bearerAuthCredentials.identityPoolId, }; } getAdditionalHeaders() { return this.additionalHeaders; } } exports._AbstractOauthTokenProvider = AbstractOauthTokenProvider; class AbstractOAuthClient extends AbstractOauthTokenProvider { constructor(bearerAuthCredentials, maxRetries, retriesWaitMs, retriesMaxWaitMs) { super(bearerAuthCredentials); this.token = null; this.maxRetries = maxRetries; this.retriesWaitMs = retriesWaitMs; this.retriesMaxWaitMs = retriesMaxWaitMs; } async getAccessToken() { if (this.token === null || this.tokenExpired()) { await this.generateAccessToken(); if (this.token === null) throw new Error(`token must be available here`); } return this.token; } async generateAccessToken() { for (let i = 0; i < this.maxRetries + 1; i++) { try { this.token = await this.fetchToken(); return; } catch (error) { if ((0, boom_1.isBoom)(error) && i < this.maxRetries) { const statusCode = error.output.statusCode; if ((0, retry_helper_1.isRetriable)(statusCode)) { const waitTime = (0, retry_helper_1.fullJitter)(this.retriesWaitMs, this.retriesMaxWaitMs, i); await (0, retry_helper_1.sleep)(waitTime); continue; } } throw new Error(`Failed to get token from server: ${error}`); } } } } exports._AbstractOAuthClient = AbstractOAuthClient;