@confluentinc/schemaregistry
Version:
Node.js client for Confluent Schema Registry
68 lines (67 loc) • 2.73 kB
JavaScript
;
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;