@datastax/astra-db-ts
Version:
Data API TypeScript client
55 lines (54 loc) • 2.4 kB
JavaScript
// Copyright Datastax, Inc
// SPDX-License-Identifier: Apache-2.0
import { OptionsHandler } from '../../lib/opts-handlers.js';
import { HeadersProvider, TokenProvider } from '../../lib/index.js';
import { exact } from 'decoders';
import { Timeouts } from '../../lib/api/timeouts/timeouts.js';
import { InternalLogger } from '../../lib/logging/internal-logger.js';
import { EnvironmentCfgHandler } from '../../client/opts-handlers/environment-cfg-handler.js';
import { CallerCfgHandler } from '../../client/opts-handlers/caller-cfg-handler.js';
import { DbOptsHandler } from '../../client/opts-handlers/db-opts-handler.js';
import { AdminOptsHandler } from '../../client/opts-handlers/admin-opts-handler.js';
import { HttpOptsHandler } from '../../client/opts-handlers/http-opts-handler.js';
const decoder = exact({
logging: InternalLogger.cfg.decoder,
environment: EnvironmentCfgHandler.decoder,
httpOptions: HttpOptsHandler.decoder,
dbOptions: DbOptsHandler.decoder,
adminOptions: AdminOptsHandler.decoder,
caller: CallerCfgHandler.decoder,
timeoutDefaults: Timeouts.cfg.decoder,
additionalHeaders: HeadersProvider.opts.fromObj.decoder,
});
export const RootOptsHandler = (defaultToken, client) => {
const transformer = decoder.transform((input) => {
const dbAndAdminCommon = {
timeoutDefaults: input.timeoutDefaults,
logging: input.logging,
};
return {
additionalHeaders: input.additionalHeaders,
environment: input.environment,
fetchCtx: input.httpOptions,
caller: input.caller,
client: client,
dbOptions: DbOptsHandler.concat([input.dbOptions, {
...DbOptsHandler.empty,
token: TokenProvider.opts.concat([
defaultToken,
input.dbOptions.token,
]),
...dbAndAdminCommon,
}]),
adminOptions: AdminOptsHandler.concat([input.adminOptions, {
...AdminOptsHandler.empty,
adminToken: TokenProvider.opts.concat([
defaultToken,
input.adminOptions.adminToken,
]),
...dbAndAdminCommon,
}]),
};
});
return new OptionsHandler(transformer);
};