UNPKG

ydb-sdk

Version:

Node.js bindings for working with YDB API over gRPC

102 lines (101 loc) 4.45 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const constants_1 = require("./constants"); const errors_1 = require("./errors"); const ssl_credentials_1 = require("./utils/ssl-credentials"); const discovery_service_1 = __importDefault(require("./discovery/discovery-service")); const table_1 = require("./table"); const scheme_client_1 = __importDefault(require("./schema/scheme-client")); const query_1 = require("./query"); const get_default_logger_1 = require("./logger/get-default-logger"); const topic_1 = require("./topic"); const retryStrategy_1 = require("./retries/retryStrategy"); const retryParameters_1 = require("./retries/retryParameters"); class Driver { get topic() { if (!this._topicClient) this._topicClient = new topic_1.TopicClient(this.clientSettings); return this._topicClient; } constructor(settings) { var _a, _b; let secure = false, endpoint = '', database = ''; this.logger = settings.logger || (0, get_default_logger_1.getDefaultLogger)(); if (settings.endpoint && settings.database) { (_a = settings.logger) === null || _a === void 0 ? void 0 : _a.warn('The "endpoint" and "database" fields are deprecated. Use "connectionString" instead'); secure = settings.endpoint.startsWith('grpcs://') || endpoint.startsWith('https://'); endpoint = settings.endpoint.replace(/^(grpcs?|https?):\/\//, ''); database = settings.database; } if (settings.connectionString) { let cs = new URL(settings.connectionString); endpoint = cs.host; database = cs.pathname || cs.searchParams.get('database') || ''; if (!database) { throw new Error('The "database" field is required in the connection string. It should be specified either in the path or as a `database` query parameter.'); } secure = cs.protocol === 'grpcs:' || cs.protocol === 'https:'; } if (!endpoint || !database) { throw new Error('Either "endpoint" and "database" or "connectionString" must be specified'); } const sslCredentials = secure ? (_b = settings.sslCredentials) !== null && _b !== void 0 ? _b : (0, ssl_credentials_1.makeDefaultSslCredentials)() : undefined; const retrier = settings.retrier || new retryStrategy_1.RetryStrategy(new retryParameters_1.RetryParameters(), this.logger); this.discoveryService = new discovery_service_1.default({ endpoint, database, discoveryPeriod: constants_1.ENDPOINT_DISCOVERY_PERIOD, authService: settings.authService, sslCredentials: sslCredentials, clientOptions: settings.clientOptions, retrier, logger: this.logger, }); this.clientSettings = { database, authService: settings.authService, sslCredentials, poolSettings: settings.poolSettings, clientOptions: settings.clientOptions, discoveryService: this.discoveryService, retrier, logger: this.logger, }; this.tableClient = new table_1.TableClient(this.clientSettings); this.queryClient = new query_1.QueryClient(this.clientSettings); this.schemeClient = new scheme_client_1.default(this.clientSettings); } async ready(timeout) { try { await this.discoveryService.ready(timeout); this.logger.debug('Driver is ready!'); return true; } catch (e) { if (e instanceof errors_1.TimeoutExpired) { return false; } else { throw e; } } } async destroy() { var _a; this.logger.debug('Destroying driver...'); this.discoveryService.destroy(); await Promise.all([ this.tableClient.destroy(), this.queryClient.destroy(), this.schemeClient.destroy(), (_a = this._topicClient) === null || _a === void 0 ? void 0 : _a.destroy(), ]); this.logger.debug('Driver has been destroyed.'); } } exports.default = Driver;