Big News: Socket raises $60M Series C at a $1B valuation to secure software supply chains for AI-driven development.Announcement
Sign In

@databricks/sql

Package Overview
Dependencies
Maintainers
0
Versions
25
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@databricks/sql - npm Package Compare versions

Comparing version
1.13.0
to
1.14.0
+73
dist/telemetry/CircuitBreaker.d.ts
/**
* Copyright (c) 2025 Databricks Contributors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import IClientContext from '../contracts/IClientContext';
export declare enum CircuitBreakerState {
CLOSED = "CLOSED",
OPEN = "OPEN",
HALF_OPEN = "HALF_OPEN"
}
export interface CircuitBreakerConfig {
failureThreshold: number;
timeout: number;
successThreshold: number;
}
export declare const DEFAULT_CIRCUIT_BREAKER_CONFIG: Readonly<CircuitBreakerConfig>;
export declare const CIRCUIT_BREAKER_OPEN_CODE: "CIRCUIT_BREAKER_OPEN";
/**
* Thrown when execute() is called while the breaker is OPEN or a HALF_OPEN
* probe is already in flight. Callers identify the condition via
* `instanceof CircuitBreakerOpenError` or `err.code === CIRCUIT_BREAKER_OPEN_CODE`
* rather than string-matching the message.
*/
export declare class CircuitBreakerOpenError extends Error {
readonly code: "CIRCUIT_BREAKER_OPEN";
constructor(message?: string);
}
export declare class CircuitBreaker {
private context;
private state;
private failureCount;
private successCount;
private nextAttempt?;
private halfOpenInflight;
private readonly config;
constructor(context: IClientContext, config?: Partial<CircuitBreakerConfig>);
execute<T>(operation: () => Promise<T>): Promise<T>;
/**
* Synchronous admission check. Returning `null` means "reject". Returning
* an object means the caller is admitted; `wasHalfOpenProbe` indicates
* whether this admission consumed the single HALF_OPEN probe slot so the
* caller can decrement it in `finally`.
*
* Running this as a single synchronous block is what prevents the
* concurrent-probe race that existed in the previous implementation.
*/
private tryAdmit;
getState(): CircuitBreakerState;
getFailureCount(): number;
getSuccessCount(): number;
private onSuccess;
private onFailure;
}
export declare class CircuitBreakerRegistry {
private context;
private breakers;
constructor(context: IClientContext);
getCircuitBreaker(host: string, config?: Partial<CircuitBreakerConfig>): CircuitBreaker;
getAllBreakers(): Map<string, CircuitBreaker>;
removeCircuitBreaker(host: string): void;
clear(): void;
}
"use strict";
/**
* Copyright (c) 2025 Databricks Contributors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.CircuitBreakerRegistry = exports.CircuitBreaker = exports.CircuitBreakerOpenError = exports.CIRCUIT_BREAKER_OPEN_CODE = exports.DEFAULT_CIRCUIT_BREAKER_CONFIG = exports.CircuitBreakerState = void 0;
const IDBSQLLogger_1 = require("../contracts/IDBSQLLogger");
var CircuitBreakerState;
(function (CircuitBreakerState) {
CircuitBreakerState["CLOSED"] = "CLOSED";
CircuitBreakerState["OPEN"] = "OPEN";
CircuitBreakerState["HALF_OPEN"] = "HALF_OPEN";
})(CircuitBreakerState = exports.CircuitBreakerState || (exports.CircuitBreakerState = {}));
exports.DEFAULT_CIRCUIT_BREAKER_CONFIG = Object.freeze({
failureThreshold: 5,
timeout: 60000,
successThreshold: 2,
});
exports.CIRCUIT_BREAKER_OPEN_CODE = 'CIRCUIT_BREAKER_OPEN';
/**
* Thrown when execute() is called while the breaker is OPEN or a HALF_OPEN
* probe is already in flight. Callers identify the condition via
* `instanceof CircuitBreakerOpenError` or `err.code === CIRCUIT_BREAKER_OPEN_CODE`
* rather than string-matching the message.
*/
class CircuitBreakerOpenError extends Error {
constructor(message = 'Circuit breaker OPEN') {
super(message);
this.code = exports.CIRCUIT_BREAKER_OPEN_CODE;
this.name = 'CircuitBreakerOpenError';
}
}
exports.CircuitBreakerOpenError = CircuitBreakerOpenError;
class CircuitBreaker {
constructor(context, config) {
this.context = context;
this.state = CircuitBreakerState.CLOSED;
this.failureCount = 0;
this.successCount = 0;
this.halfOpenInflight = 0;
this.config = {
...exports.DEFAULT_CIRCUIT_BREAKER_CONFIG,
...config,
};
}
async execute(operation) {
const admitted = this.tryAdmit();
if (!admitted) {
throw new CircuitBreakerOpenError();
}
const { wasHalfOpenProbe } = admitted;
try {
const result = await operation();
this.onSuccess();
return result;
}
catch (error) {
this.onFailure();
throw error;
}
finally {
if (wasHalfOpenProbe && this.halfOpenInflight > 0) {
this.halfOpenInflight -= 1;
}
}
}
/**
* Synchronous admission check. Returning `null` means "reject". Returning
* an object means the caller is admitted; `wasHalfOpenProbe` indicates
* whether this admission consumed the single HALF_OPEN probe slot so the
* caller can decrement it in `finally`.
*
* Running this as a single synchronous block is what prevents the
* concurrent-probe race that existed in the previous implementation.
*/
tryAdmit() {
const logger = this.context.getLogger();
if (this.state === CircuitBreakerState.OPEN) {
if (this.nextAttempt && Date.now() < this.nextAttempt.getTime()) {
return null;
}
this.state = CircuitBreakerState.HALF_OPEN;
this.successCount = 0;
this.halfOpenInflight = 0;
logger.log(IDBSQLLogger_1.LogLevel.debug, 'Circuit breaker transitioned to HALF_OPEN');
}
if (this.state === CircuitBreakerState.HALF_OPEN) {
if (this.halfOpenInflight > 0) {
return null;
}
this.halfOpenInflight += 1;
return { wasHalfOpenProbe: true };
}
return { wasHalfOpenProbe: false };
}
getState() {
return this.state;
}
getFailureCount() {
return this.failureCount;
}
getSuccessCount() {
return this.successCount;
}
onSuccess() {
const logger = this.context.getLogger();
this.failureCount = 0;
if (this.state === CircuitBreakerState.HALF_OPEN) {
this.successCount += 1;
logger.log(IDBSQLLogger_1.LogLevel.debug, `Circuit breaker success in HALF_OPEN (${this.successCount}/${this.config.successThreshold})`);
if (this.successCount >= this.config.successThreshold) {
this.state = CircuitBreakerState.CLOSED;
this.successCount = 0;
this.nextAttempt = undefined;
logger.log(IDBSQLLogger_1.LogLevel.debug, 'Circuit breaker transitioned to CLOSED');
}
}
}
onFailure() {
const logger = this.context.getLogger();
this.failureCount += 1;
this.successCount = 0;
logger.log(IDBSQLLogger_1.LogLevel.debug, `Circuit breaker failure (${this.failureCount}/${this.config.failureThreshold})`);
if (this.state === CircuitBreakerState.HALF_OPEN || this.failureCount >= this.config.failureThreshold) {
this.state = CircuitBreakerState.OPEN;
this.nextAttempt = new Date(Date.now() + this.config.timeout);
logger.log(IDBSQLLogger_1.LogLevel.warn, `Telemetry circuit breaker OPEN after ${this.failureCount} failures (will retry after ${this.config.timeout}ms)`);
}
}
}
exports.CircuitBreaker = CircuitBreaker;
class CircuitBreakerRegistry {
constructor(context) {
this.context = context;
this.breakers = new Map();
}
getCircuitBreaker(host, config) {
let breaker = this.breakers.get(host);
if (!breaker) {
breaker = new CircuitBreaker(this.context, config);
this.breakers.set(host, breaker);
const logger = this.context.getLogger();
logger.log(IDBSQLLogger_1.LogLevel.debug, `Created circuit breaker for host: ${host}`);
}
else if (config) {
const logger = this.context.getLogger();
logger.log(IDBSQLLogger_1.LogLevel.debug, `Circuit breaker for host ${host} already exists; provided config will be ignored`);
}
return breaker;
}
getAllBreakers() {
return new Map(this.breakers);
}
removeCircuitBreaker(host) {
this.breakers.delete(host);
const logger = this.context.getLogger();
logger.log(IDBSQLLogger_1.LogLevel.debug, `Removed circuit breaker for host: ${host}`);
}
clear() {
this.breakers.clear();
}
}
exports.CircuitBreakerRegistry = CircuitBreakerRegistry;
//# sourceMappingURL=CircuitBreaker.js.map
{"version":3,"file":"CircuitBreaker.js","sourceRoot":"","sources":["../../lib/telemetry/CircuitBreaker.ts"],"names":[],"mappings":"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"}
/**
* Copyright (c) 2025 Databricks Contributors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import IClientContext from '../contracts/IClientContext';
import IAuthentication from '../connection/contracts/IAuthentication';
import HiveDriverError from '../errors/HiveDriverError';
import { TelemetryMetric } from './types';
import { CircuitBreakerRegistry } from './CircuitBreaker';
/**
* Thrown for non-credential terminal telemetry failures (e.g. refusal to
* export to an invalid host). Separate from `AuthenticationError` so the
* classifier can keep the "short-circuit, don't retry, count as breaker
* failure" contract without muddying the auth taxonomy used by the rest of
* the driver.
*/
export declare class TelemetryTerminalError extends HiveDriverError {
readonly terminal: true;
}
/**
* Exports telemetry metrics to the Databricks telemetry service.
*
* CRITICAL: export() never throws — all errors are swallowed and logged at
* LogLevel.debug (the one exception is a single warn on the first observed
* auth-missing, re-armed on recovery).
*/
export default class DatabricksTelemetryExporter {
private context;
private host;
private circuitBreakerRegistry;
private authProvider?;
private readonly circuitBreaker;
private readonly authenticatedUserAgent;
/** User-Agent used for the unauthenticated endpoint; strips any
* caller-supplied `userAgentEntry` that could identify the customer. */
private readonly unauthenticatedUserAgent;
private authMissingWarned;
constructor(context: IClientContext, host: string, circuitBreakerRegistry: CircuitBreakerRegistry, authProvider?: IAuthentication | undefined);
/**
* Release the per-host circuit breaker. Intended for the owning client's
* close() path.
*
* NOTE: `CircuitBreakerRegistry` currently shares one breaker per host
* across consumers; calling this while another consumer is active will
* reset their failure-count memory. The owning-client is expected to be
* the last consumer on its host; multi-consumer refcounting on the
* registry will land in the consumer-wiring PR.
*/
dispose(): void;
export(metrics: TelemetryMetric[]): Promise<void>;
/**
* Retry wrapper shaped after HttpRetryPolicy: retries only on errors
* classified as retryable by ExceptionClassifier, stops on terminal ones,
* surfaces the last error to the circuit breaker.
*
* `maxRetries` is the number of retries *after* the first attempt (i.e.
* attempts = maxRetries + 1), matching HttpRetryPolicy's semantics.
*/
private exportWithRetry;
private exportInternal;
private getAuthHeaders;
private sendRequest;
private toTelemetryLog;
private sleep;
}
"use strict";
/**
* Copyright (c) 2025 Databricks Contributors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.TelemetryTerminalError = void 0;
const uuid_1 = require("uuid");
const node_fetch_1 = __importStar(require("node-fetch"));
const IDBSQLLogger_1 = require("../contracts/IDBSQLLogger");
const AuthenticationError_1 = __importDefault(require("../errors/AuthenticationError"));
const HiveDriverError_1 = __importDefault(require("../errors/HiveDriverError"));
const types_1 = require("./types");
const CircuitBreaker_1 = require("./CircuitBreaker");
const ExceptionClassifier_1 = __importDefault(require("./ExceptionClassifier"));
const telemetryUtils_1 = require("./telemetryUtils");
const buildUserAgentString_1 = __importDefault(require("../utils/buildUserAgentString"));
/**
* Thrown for non-credential terminal telemetry failures (e.g. refusal to
* export to an invalid host). Separate from `AuthenticationError` so the
* classifier can keep the "short-circuit, don't retry, count as breaker
* failure" contract without muddying the auth taxonomy used by the rest of
* the driver.
*/
class TelemetryTerminalError extends HiveDriverError_1.default {
constructor() {
super(...arguments);
this.terminal = true;
}
}
exports.TelemetryTerminalError = TelemetryTerminalError;
/**
* Exports telemetry metrics to the Databricks telemetry service.
*
* CRITICAL: export() never throws — all errors are swallowed and logged at
* LogLevel.debug (the one exception is a single warn on the first observed
* auth-missing, re-armed on recovery).
*/
class DatabricksTelemetryExporter {
constructor(context, host, circuitBreakerRegistry, authProvider) {
this.context = context;
this.host = host;
this.circuitBreakerRegistry = circuitBreakerRegistry;
this.authProvider = authProvider;
this.authMissingWarned = false;
this.circuitBreaker = circuitBreakerRegistry.getCircuitBreaker(host);
const config = this.context.getConfig();
this.authenticatedUserAgent = (0, buildUserAgentString_1.default)(config.userAgentEntry);
this.unauthenticatedUserAgent = (0, buildUserAgentString_1.default)(undefined);
}
/**
* Release the per-host circuit breaker. Intended for the owning client's
* close() path.
*
* NOTE: `CircuitBreakerRegistry` currently shares one breaker per host
* across consumers; calling this while another consumer is active will
* reset their failure-count memory. The owning-client is expected to be
* the last consumer on its host; multi-consumer refcounting on the
* registry will land in the consumer-wiring PR.
*/
dispose() {
this.circuitBreakerRegistry.removeCircuitBreaker(this.host);
}
async export(metrics) {
var _a;
if (!metrics || metrics.length === 0) {
return;
}
const logger = this.context.getLogger();
try {
await this.circuitBreaker.execute(() => this.exportWithRetry(metrics));
}
catch (error) {
if (error instanceof CircuitBreaker_1.CircuitBreakerOpenError) {
logger.log(IDBSQLLogger_1.LogLevel.debug, 'Circuit breaker OPEN - dropping telemetry');
}
else if (error instanceof AuthenticationError_1.default) {
logger.log(IDBSQLLogger_1.LogLevel.debug, `Telemetry export auth failure: ${error.message}`);
}
else if (error instanceof TelemetryTerminalError) {
logger.log(IDBSQLLogger_1.LogLevel.debug, `Telemetry export refused: ${error.message}`);
}
else {
logger.log(IDBSQLLogger_1.LogLevel.debug, `Telemetry export error: ${(_a = error === null || error === void 0 ? void 0 : error.message) !== null && _a !== void 0 ? _a : error}`);
}
}
}
/**
* Retry wrapper shaped after HttpRetryPolicy: retries only on errors
* classified as retryable by ExceptionClassifier, stops on terminal ones,
* surfaces the last error to the circuit breaker.
*
* `maxRetries` is the number of retries *after* the first attempt (i.e.
* attempts = maxRetries + 1), matching HttpRetryPolicy's semantics.
*/
async exportWithRetry(metrics) {
var _a, _b, _c, _d, _e, _f;
const config = this.context.getConfig();
const logger = this.context.getLogger();
const rawMaxRetries = (_a = config.telemetryMaxRetries) !== null && _a !== void 0 ? _a : types_1.DEFAULT_TELEMETRY_CONFIG.maxRetries;
const maxRetries = Number.isFinite(rawMaxRetries) && rawMaxRetries >= 0 ? rawMaxRetries : types_1.DEFAULT_TELEMETRY_CONFIG.maxRetries;
const baseMs = (_b = config.telemetryBackoffBaseMs) !== null && _b !== void 0 ? _b : types_1.DEFAULT_TELEMETRY_CONFIG.backoffBaseMs;
const maxMs = (_c = config.telemetryBackoffMaxMs) !== null && _c !== void 0 ? _c : types_1.DEFAULT_TELEMETRY_CONFIG.backoffMaxMs;
const jitterMs = (_d = config.telemetryBackoffJitterMs) !== null && _d !== void 0 ? _d : types_1.DEFAULT_TELEMETRY_CONFIG.backoffJitterMs;
const totalAttempts = maxRetries + 1;
let lastError = null;
/* eslint-disable no-await-in-loop */
for (let attempt = 0; attempt < totalAttempts; attempt += 1) {
try {
await this.exportInternal(metrics);
return;
}
catch (error) {
lastError = error;
if (error instanceof AuthenticationError_1.default ||
error instanceof TelemetryTerminalError ||
ExceptionClassifier_1.default.isTerminal(error)) {
throw error;
}
if (!ExceptionClassifier_1.default.isRetryable(error)) {
throw error;
}
if (attempt >= totalAttempts - 1) {
throw error;
}
const base = Math.min(baseMs * 2 ** attempt, maxMs);
const jitter = Math.random() * jitterMs;
const delay = Math.min(base + jitter, maxMs);
// Include the failing error so ops can see what's being retried,
// not just the cadence.
logger.log(IDBSQLLogger_1.LogLevel.debug, `Retrying telemetry export (attempt ${attempt + 1}/${totalAttempts}) after ${Math.round(delay)}ms: ${(_e = error === null || error === void 0 ? void 0 : error.statusCode) !== null && _e !== void 0 ? _e : ''} ${(0, telemetryUtils_1.redactSensitive)((_f = error === null || error === void 0 ? void 0 : error.message) !== null && _f !== void 0 ? _f : '')}`);
await this.sleep(delay);
}
}
/* eslint-enable no-await-in-loop */
if (lastError) {
throw lastError;
}
}
async exportInternal(metrics) {
var _a;
const config = this.context.getConfig();
const logger = this.context.getLogger();
const authenticatedExport = (_a = config.telemetryAuthenticatedExport) !== null && _a !== void 0 ? _a : types_1.DEFAULT_TELEMETRY_CONFIG.authenticatedExport;
const endpoint = (0, telemetryUtils_1.buildTelemetryUrl)(this.host, authenticatedExport ? '/telemetry-ext' : '/telemetry-unauth');
if (!endpoint) {
// Malformed / deny-listed host — drop the batch rather than letting
// it target an attacker-controlled destination.
throw new TelemetryTerminalError('Refusing telemetry export: host failed validation');
}
const userAgent = authenticatedExport ? this.authenticatedUserAgent : this.unauthenticatedUserAgent;
let headers = {
'Content-Type': 'application/json',
'User-Agent': userAgent,
};
if (authenticatedExport) {
headers = { ...headers, ...(await this.getAuthHeaders()) };
if (!(0, telemetryUtils_1.hasAuthorization)(headers)) {
if (!this.authMissingWarned) {
this.authMissingWarned = true;
logger.log(IDBSQLLogger_1.LogLevel.warn, 'Telemetry: Authorization header missing — metrics will be dropped');
}
throw new AuthenticationError_1.default('Telemetry export: missing Authorization header');
}
}
const protoLogs = metrics.map((m) => this.toTelemetryLog(m, authenticatedExport, userAgent));
const body = JSON.stringify({
uploadTime: Date.now(),
items: [],
protoLogs: protoLogs.map((log) => JSON.stringify(log)),
});
logger.log(IDBSQLLogger_1.LogLevel.debug, `Exporting ${metrics.length} telemetry metrics to ${authenticatedExport ? 'authenticated' : 'unauthenticated'} endpoint`);
const response = await this.sendRequest(endpoint, {
method: 'POST',
headers,
body,
timeout: 10000,
});
if (!response.ok) {
await response.text().catch(() => { });
const error = new Error(`Telemetry export failed: ${response.status} ${response.statusText}`);
error.statusCode = response.status;
throw error;
}
await response.text().catch(() => { });
// Successful round-trip re-arms the "auth missing" warn so operators see
// a fresh signal the next time auth breaks.
this.authMissingWarned = false;
logger.log(IDBSQLLogger_1.LogLevel.debug, `Successfully exported ${metrics.length} telemetry metrics`);
}
async getAuthHeaders() {
var _a;
if (!this.authProvider) {
return {};
}
const logger = this.context.getLogger();
try {
return (0, telemetryUtils_1.normalizeHeaders)(await this.authProvider.authenticate());
}
catch (error) {
logger.log(IDBSQLLogger_1.LogLevel.debug, `Telemetry: auth provider threw: ${(_a = error === null || error === void 0 ? void 0 : error.message) !== null && _a !== void 0 ? _a : error}`);
return {};
}
}
async sendRequest(url, init) {
const connectionProvider = await this.context.getConnectionProvider();
const agent = await connectionProvider.getAgent();
const retryPolicy = await connectionProvider.getRetryPolicy();
const requestConfig = { agent, ...init };
const result = await retryPolicy.invokeWithRetry(() => {
const request = new node_fetch_1.Request(url, requestConfig);
return (0, node_fetch_1.default)(request).then((response) => ({ request, response }));
});
return result.response;
}
toTelemetryLog(metric, authenticatedExport, userAgent) {
var _a, _b;
// Unauthenticated export must not ship correlation IDs, fingerprint
// data, or raw error detail — an on-path observer could otherwise link
// sessions → workspaces → user activity without any auth.
const includeCorrelation = authenticatedExport;
const log = {
workspace_id: includeCorrelation ? metric.workspaceId : undefined,
frontend_log_event_id: (0, uuid_1.v4)(),
context: {
client_context: {
timestamp_millis: metric.timestamp,
user_agent: userAgent,
},
},
entry: {
sql_driver_log: {
session_id: includeCorrelation ? metric.sessionId : undefined,
sql_statement_id: includeCorrelation ? metric.statementId : undefined,
},
},
};
if (metric.metricType === 'connection' && metric.driverConfig && includeCorrelation) {
// system_configuration is a high-entropy client fingerprint (OS, arch,
// locale, process, runtime). Only ship on the authenticated path.
log.entry.sql_driver_log.system_configuration = {
driver_version: metric.driverConfig.driverVersion,
driver_name: metric.driverConfig.driverName,
runtime_name: 'Node.js',
runtime_version: metric.driverConfig.nodeVersion,
runtime_vendor: metric.driverConfig.runtimeVendor,
os_name: metric.driverConfig.platform,
os_version: metric.driverConfig.osVersion,
os_arch: metric.driverConfig.osArch,
locale_name: metric.driverConfig.localeName,
char_set_encoding: metric.driverConfig.charSetEncoding,
process_name: (0, telemetryUtils_1.sanitizeProcessName)(metric.driverConfig.processName) || undefined,
};
}
else if (metric.metricType === 'statement') {
log.entry.sql_driver_log.operation_latency_ms = metric.latencyMs;
if (metric.resultFormat || metric.chunkCount) {
log.entry.sql_driver_log.sql_operation = {
execution_result: metric.resultFormat,
};
if (metric.chunkCount && metric.chunkCount > 0) {
log.entry.sql_driver_log.sql_operation.chunk_details = {
total_chunks_present: metric.chunkCount,
total_chunks_iterated: metric.chunkCount,
};
}
}
}
else if (metric.metricType === 'error') {
const stackOrMessage = (_b = (_a = metric.errorStack) !== null && _a !== void 0 ? _a : metric.errorMessage) !== null && _b !== void 0 ? _b : '';
log.entry.sql_driver_log.error_info = {
error_name: metric.errorName || 'UnknownError',
// Redact common secret shapes and cap length. On the unauth path we
// keep only the error class — no message body.
stack_trace: includeCorrelation ? (0, telemetryUtils_1.redactSensitive)(stackOrMessage) : '',
};
}
return log;
}
sleep(ms) {
return new Promise((resolve) => {
setTimeout(resolve, ms);
});
}
}
exports.default = DatabricksTelemetryExporter;
//# sourceMappingURL=DatabricksTelemetryExporter.js.map
{"version":3,"file":"DatabricksTelemetryExporter.js","sourceRoot":"","sources":["../../lib/telemetry/DatabricksTelemetryExporter.ts"],"names":[],"mappings":"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"}
/**
* Copyright (c) 2025 Databricks Contributors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import IClientContext from '../contracts/IClientContext';
import IAuthentication from '../connection/contracts/IAuthentication';
export interface FeatureFlagContext {
telemetryEnabled?: boolean;
lastFetched?: Date;
refCount: number;
cacheDuration: number;
}
/**
* Per-host feature-flag cache used to gate telemetry emission. Responsibilities:
* - dedupe in-flight fetches (thundering-herd protection);
* - ref-count so context goes away when the last consumer closes;
* - clamp server-provided TTL into a safe band.
*
* Shares HTTP plumbing (agent, user agent) with DatabricksTelemetryExporter.
* Consumer wiring lands in a later PR in this stack (see PR description).
*/
export default class FeatureFlagCache {
private context;
private authProvider?;
private contexts;
private fetchPromises;
private readonly userAgent;
private readonly CACHE_DURATION_MS;
private readonly MIN_CACHE_DURATION_S;
private readonly MAX_CACHE_DURATION_S;
private readonly FEATURE_FLAG_NAME;
constructor(context: IClientContext, authProvider?: IAuthentication | undefined);
getOrCreateContext(host: string): FeatureFlagContext;
releaseContext(host: string): void;
isTelemetryEnabled(host: string): Promise<boolean>;
/**
* Strips the `-oss` suffix the feature-flag API does not accept. The server
* keys off the SemVer triplet only, so anything appended would 404.
*/
private getDriverVersion;
private fetchFeatureFlag;
/**
* Retries transient network errors once before giving up. Without a retry
* a single hiccup would leave telemetry disabled for the full cache TTL
* (15 min). One retry gives an ephemeral DNS / connection-reset failure
* a second chance without pushing sustained load at a broken endpoint.
*/
private fetchWithRetry;
private getAuthHeaders;
}
"use strict";
/**
* Copyright (c) 2025 Databricks Contributors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const node_fetch_1 = __importStar(require("node-fetch"));
const IDBSQLLogger_1 = require("../contracts/IDBSQLLogger");
const telemetryUtils_1 = require("./telemetryUtils");
const buildUserAgentString_1 = __importDefault(require("../utils/buildUserAgentString"));
const version_1 = __importDefault(require("../version"));
/**
* Per-host feature-flag cache used to gate telemetry emission. Responsibilities:
* - dedupe in-flight fetches (thundering-herd protection);
* - ref-count so context goes away when the last consumer closes;
* - clamp server-provided TTL into a safe band.
*
* Shares HTTP plumbing (agent, user agent) with DatabricksTelemetryExporter.
* Consumer wiring lands in a later PR in this stack (see PR description).
*/
class FeatureFlagCache {
constructor(context, authProvider) {
this.context = context;
this.authProvider = authProvider;
this.fetchPromises = new Map();
this.CACHE_DURATION_MS = 15 * 60 * 1000;
this.MIN_CACHE_DURATION_S = 60;
this.MAX_CACHE_DURATION_S = 3600;
this.FEATURE_FLAG_NAME = 'databricks.partnerplatform.clientConfigsFeatureFlags.enableTelemetryForNodeJs';
this.contexts = new Map();
this.userAgent = (0, buildUserAgentString_1.default)(this.context.getConfig().userAgentEntry);
}
getOrCreateContext(host) {
let ctx = this.contexts.get(host);
if (!ctx) {
ctx = {
refCount: 0,
cacheDuration: this.CACHE_DURATION_MS,
};
this.contexts.set(host, ctx);
}
ctx.refCount += 1;
return ctx;
}
releaseContext(host) {
const ctx = this.contexts.get(host);
if (ctx) {
ctx.refCount -= 1;
if (ctx.refCount <= 0) {
this.contexts.delete(host);
this.fetchPromises.delete(host);
}
}
}
async isTelemetryEnabled(host) {
var _a;
const logger = this.context.getLogger();
const ctx = this.contexts.get(host);
if (!ctx) {
return false;
}
const isExpired = !ctx.lastFetched || Date.now() - ctx.lastFetched.getTime() > ctx.cacheDuration;
if (isExpired) {
if (!this.fetchPromises.has(host)) {
const fetchPromise = this.fetchFeatureFlag(host)
.then((enabled) => {
ctx.telemetryEnabled = enabled;
ctx.lastFetched = new Date();
return enabled;
})
.catch((error) => {
var _a;
logger.log(IDBSQLLogger_1.LogLevel.debug, `Error fetching feature flag: ${error.message}`);
return (_a = ctx.telemetryEnabled) !== null && _a !== void 0 ? _a : false;
})
.finally(() => {
this.fetchPromises.delete(host);
});
this.fetchPromises.set(host, fetchPromise);
}
await this.fetchPromises.get(host);
}
return (_a = ctx.telemetryEnabled) !== null && _a !== void 0 ? _a : false;
}
/**
* Strips the `-oss` suffix the feature-flag API does not accept. The server
* keys off the SemVer triplet only, so anything appended would 404.
*/
getDriverVersion() {
return version_1.default.replace(/-oss$/, '');
}
async fetchFeatureFlag(host) {
const logger = this.context.getLogger();
try {
const endpoint = (0, telemetryUtils_1.buildTelemetryUrl)(host, `/api/2.0/connector-service/feature-flags/NODEJS/${this.getDriverVersion()}`);
if (!endpoint) {
logger.log(IDBSQLLogger_1.LogLevel.debug, `Feature flag fetch skipped: invalid host ${host}`);
return false;
}
const headers = {
'Content-Type': 'application/json',
'User-Agent': this.userAgent,
...(await this.getAuthHeaders()),
};
logger.log(IDBSQLLogger_1.LogLevel.debug, `Fetching feature flags from ${endpoint}`);
const response = await this.fetchWithRetry(endpoint, {
method: 'GET',
headers,
timeout: 10000,
});
if (!response.ok) {
await response.text().catch(() => { });
logger.log(IDBSQLLogger_1.LogLevel.debug, `Feature flag fetch failed: ${response.status} ${response.statusText}`);
return false;
}
const data = await response.json();
if (data && data.flags && Array.isArray(data.flags)) {
const ctx = this.contexts.get(host);
if (ctx && typeof data.ttl_seconds === 'number' && data.ttl_seconds > 0) {
const clampedTtl = Math.max(this.MIN_CACHE_DURATION_S, Math.min(this.MAX_CACHE_DURATION_S, data.ttl_seconds));
ctx.cacheDuration = clampedTtl * 1000;
logger.log(IDBSQLLogger_1.LogLevel.debug, `Updated cache duration to ${clampedTtl} seconds`);
}
const flag = data.flags.find((f) => f.name === this.FEATURE_FLAG_NAME);
if (flag) {
const enabled = String(flag.value).toLowerCase() === 'true';
logger.log(IDBSQLLogger_1.LogLevel.debug, `Feature flag ${this.FEATURE_FLAG_NAME}: ${enabled}`);
return enabled;
}
}
logger.log(IDBSQLLogger_1.LogLevel.debug, `Feature flag ${this.FEATURE_FLAG_NAME} not found in response`);
return false;
}
catch (error) {
logger.log(IDBSQLLogger_1.LogLevel.debug, `Error fetching feature flag from ${host}: ${error.message}`);
return false;
}
}
/**
* Retries transient network errors once before giving up. Without a retry
* a single hiccup would leave telemetry disabled for the full cache TTL
* (15 min). One retry gives an ephemeral DNS / connection-reset failure
* a second chance without pushing sustained load at a broken endpoint.
*/
async fetchWithRetry(url, init) {
const connectionProvider = await this.context.getConnectionProvider();
const agent = await connectionProvider.getAgent();
const retryPolicy = await connectionProvider.getRetryPolicy();
const requestConfig = { agent, ...init };
const result = await retryPolicy.invokeWithRetry(() => {
const request = new node_fetch_1.Request(url, requestConfig);
return (0, node_fetch_1.default)(request).then((response) => ({ request, response }));
});
return result.response;
}
async getAuthHeaders() {
var _a;
if (!this.authProvider) {
return {};
}
try {
return (0, telemetryUtils_1.normalizeHeaders)(await this.authProvider.authenticate());
}
catch (error) {
this.context.getLogger().log(IDBSQLLogger_1.LogLevel.debug, `Feature flag auth failed: ${(_a = error === null || error === void 0 ? void 0 : error.message) !== null && _a !== void 0 ? _a : error}`);
return {};
}
}
}
exports.default = FeatureFlagCache;
//# sourceMappingURL=FeatureFlagCache.js.map
{"version":3,"file":"FeatureFlagCache.js","sourceRoot":"","sources":["../../lib/telemetry/FeatureFlagCache.ts"],"names":[],"mappings":"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"}
/**
* Copyright (c) 2025 Databricks Contributors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import IClientContext from '../contracts/IClientContext';
import { TelemetryEvent } from './types';
import DatabricksTelemetryExporter from './DatabricksTelemetryExporter';
/**
* Aggregates telemetry events by statement_id and manages batching/flushing.
*
* Overflow policy — when the pending buffer hits `maxPendingMetrics`, error
* metrics are preserved preferentially over connection/statement metrics.
* The first-failure error is usually the most valuable signal in post-mortem
* debugging; dropping it FIFO would defeat the purpose of capture.
*/
export default class MetricsAggregator {
private context;
private exporter;
private statementMetrics;
private pendingMetrics;
private flushTimer;
private closed;
private closing;
private batchSize;
private flushIntervalMs;
private maxPendingMetrics;
private maxErrorsPerStatement;
private statementTtlMs;
constructor(context: IClientContext, exporter: DatabricksTelemetryExporter);
processEvent(event: TelemetryEvent): void;
private processConnectionEvent;
private processErrorEvent;
private pushBoundedError;
private processStatementEvent;
private getOrCreateStatementDetails;
/**
* Drop entries older than `statementTtlMs`, emitting their buffered error
* events as standalone metrics first so the first-failure signal survives
* the eviction. Called from the periodic flush timer so idle clients
* don't leak orphan entries.
*/
private evictExpiredStatements;
completeStatement(statementId: string): void;
/**
* Append `metric` to the pending buffer, enforcing `maxPendingMetrics`.
*
* Overflow drops the oldest non-error entry (single `splice` — no new
* allocation). Under an all-error buffer it falls back to dropping the
* oldest entry at index 0.
*/
private addPendingMetric;
private findDropIndex;
/**
* Drain the pending buffer and return a promise that resolves when the
* exporter finishes with the drained batch. `close()` awaits this so
* `process.exit()` after `client.close()` doesn't truncate the POST.
*/
flush(resetTimer?: boolean): Promise<void>;
private startFlushTimer;
close(): Promise<void>;
}
"use strict";
/**
* Copyright (c) 2025 Databricks Contributors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
Object.defineProperty(exports, "__esModule", { value: true });
const IDBSQLLogger_1 = require("../contracts/IDBSQLLogger");
const types_1 = require("./types");
/**
* Aggregates telemetry events by statement_id and manages batching/flushing.
*
* Overflow policy — when the pending buffer hits `maxPendingMetrics`, error
* metrics are preserved preferentially over connection/statement metrics.
* The first-failure error is usually the most valuable signal in post-mortem
* debugging; dropping it FIFO would defeat the purpose of capture.
*/
class MetricsAggregator {
constructor(context, exporter) {
var _a, _b, _c, _d, _e;
this.context = context;
this.exporter = exporter;
this.statementMetrics = new Map();
this.pendingMetrics = [];
this.flushTimer = null;
this.closed = false;
this.closing = false;
try {
const config = context.getConfig();
this.batchSize = (_a = config.telemetryBatchSize) !== null && _a !== void 0 ? _a : types_1.DEFAULT_TELEMETRY_CONFIG.batchSize;
this.flushIntervalMs = (_b = config.telemetryFlushIntervalMs) !== null && _b !== void 0 ? _b : types_1.DEFAULT_TELEMETRY_CONFIG.flushIntervalMs;
this.maxPendingMetrics = (_c = config.telemetryMaxPendingMetrics) !== null && _c !== void 0 ? _c : types_1.DEFAULT_TELEMETRY_CONFIG.maxPendingMetrics;
this.maxErrorsPerStatement =
(_d = config.telemetryMaxErrorsPerStatement) !== null && _d !== void 0 ? _d : types_1.DEFAULT_TELEMETRY_CONFIG.maxErrorsPerStatement;
this.statementTtlMs = (_e = config.telemetryStatementTtlMs) !== null && _e !== void 0 ? _e : types_1.DEFAULT_TELEMETRY_CONFIG.statementTtlMs;
this.startFlushTimer();
}
catch (error) {
const logger = this.context.getLogger();
logger.log(IDBSQLLogger_1.LogLevel.debug, `MetricsAggregator constructor error: ${error.message}`);
this.batchSize = types_1.DEFAULT_TELEMETRY_CONFIG.batchSize;
this.flushIntervalMs = types_1.DEFAULT_TELEMETRY_CONFIG.flushIntervalMs;
this.maxPendingMetrics = types_1.DEFAULT_TELEMETRY_CONFIG.maxPendingMetrics;
this.maxErrorsPerStatement = types_1.DEFAULT_TELEMETRY_CONFIG.maxErrorsPerStatement;
this.statementTtlMs = types_1.DEFAULT_TELEMETRY_CONFIG.statementTtlMs;
}
}
processEvent(event) {
if (this.closed)
return;
const logger = this.context.getLogger();
try {
if (event.eventType === types_1.TelemetryEventType.CONNECTION_OPEN) {
this.processConnectionEvent(event);
return;
}
if (event.eventType === types_1.TelemetryEventType.ERROR) {
this.processErrorEvent(event);
return;
}
if (event.statementId) {
this.processStatementEvent(event);
}
}
catch (error) {
logger.log(IDBSQLLogger_1.LogLevel.debug, `MetricsAggregator.processEvent error: ${error.message}`);
}
}
processConnectionEvent(event) {
const metric = {
metricType: 'connection',
timestamp: event.timestamp,
sessionId: event.sessionId,
workspaceId: event.workspaceId,
driverConfig: event.driverConfig,
};
this.addPendingMetric(metric);
}
processErrorEvent(event) {
const logger = this.context.getLogger();
// `isTerminal` is carried on the event by the emitter (it knows the
// call site's taxonomy). If callers ever drop it we default to
// retryable — buffering by statement is the safer choice.
const isTerminal = event.isTerminal === true;
if (isTerminal) {
logger.log(IDBSQLLogger_1.LogLevel.debug, 'Terminal error detected - flushing immediately');
if (event.statementId && this.statementMetrics.has(event.statementId)) {
const details = this.statementMetrics.get(event.statementId);
this.pushBoundedError(details, event);
this.completeStatement(event.statementId);
}
else {
const metric = {
metricType: 'error',
timestamp: event.timestamp,
sessionId: event.sessionId,
statementId: event.statementId,
workspaceId: event.workspaceId,
errorName: event.errorName,
errorMessage: event.errorMessage,
errorStack: event.errorStack,
};
this.addPendingMetric(metric);
}
// Fire-and-forget on the terminal-error path so customer code doesn't
// stall on telemetry HTTP. Do NOT reset the periodic flush timer:
// under burst failures that would keep the tail-drain timer from
// ever firing.
Promise.resolve(this.flush(false)).catch((err) => {
var _a;
logger.log(IDBSQLLogger_1.LogLevel.debug, `Terminal-error flush failed: ${(_a = err === null || err === void 0 ? void 0 : err.message) !== null && _a !== void 0 ? _a : err}`);
});
}
else if (event.statementId) {
const details = this.getOrCreateStatementDetails(event);
this.pushBoundedError(details, event);
}
}
pushBoundedError(details, event) {
if (details.errors.length >= this.maxErrorsPerStatement) {
details.errors.shift();
}
details.errors.push(event);
}
processStatementEvent(event) {
var _a, _b, _c, _d;
const details = this.getOrCreateStatementDetails(event);
switch (event.eventType) {
case types_1.TelemetryEventType.STATEMENT_START:
details.operationType = event.operationType;
details.startTime = event.timestamp;
break;
case types_1.TelemetryEventType.STATEMENT_COMPLETE:
details.executionLatencyMs = event.latencyMs;
details.resultFormat = event.resultFormat;
details.chunkCount = (_a = event.chunkCount) !== null && _a !== void 0 ? _a : 0;
details.bytesDownloaded = (_b = event.bytesDownloaded) !== null && _b !== void 0 ? _b : 0;
details.pollCount = (_c = event.pollCount) !== null && _c !== void 0 ? _c : 0;
break;
case types_1.TelemetryEventType.CLOUDFETCH_CHUNK:
details.chunkCount += 1;
details.bytesDownloaded += (_d = event.bytes) !== null && _d !== void 0 ? _d : 0;
if (event.compressed !== undefined) {
details.compressionEnabled = event.compressed;
}
break;
default:
break;
}
}
getOrCreateStatementDetails(event) {
const statementId = event.statementId;
if (!this.statementMetrics.has(statementId)) {
this.statementMetrics.set(statementId, {
statementId,
sessionId: event.sessionId,
workspaceId: event.workspaceId,
startTime: event.timestamp,
chunkCount: 0,
bytesDownloaded: 0,
pollCount: 0,
errors: [],
});
}
return this.statementMetrics.get(statementId);
}
/**
* Drop entries older than `statementTtlMs`, emitting their buffered error
* events as standalone metrics first so the first-failure signal survives
* the eviction. Called from the periodic flush timer so idle clients
* don't leak orphan entries.
*/
evictExpiredStatements() {
const cutoff = Date.now() - this.statementTtlMs;
let evicted = 0;
for (const [id, details] of this.statementMetrics) {
if (details.startTime < cutoff) {
for (const errorEvent of details.errors) {
this.addPendingMetric({
metricType: 'error',
timestamp: errorEvent.timestamp,
sessionId: details.sessionId,
statementId: details.statementId,
workspaceId: details.workspaceId,
errorName: errorEvent.errorName,
errorMessage: errorEvent.errorMessage,
errorStack: errorEvent.errorStack,
});
}
this.statementMetrics.delete(id);
evicted += 1;
}
}
if (evicted > 0) {
this.context
.getLogger()
.log(IDBSQLLogger_1.LogLevel.debug, `Evicted ${evicted} abandoned statement(s) past ${this.statementTtlMs}ms TTL`);
}
}
completeStatement(statementId) {
if (this.closed)
return;
const logger = this.context.getLogger();
try {
const details = this.statementMetrics.get(statementId);
if (!details) {
return;
}
const metric = {
metricType: 'statement',
timestamp: details.startTime,
sessionId: details.sessionId,
statementId: details.statementId,
workspaceId: details.workspaceId,
latencyMs: details.executionLatencyMs,
resultFormat: details.resultFormat,
chunkCount: details.chunkCount,
bytesDownloaded: details.bytesDownloaded,
pollCount: details.pollCount,
};
this.addPendingMetric(metric);
for (const errorEvent of details.errors) {
const errorMetric = {
metricType: 'error',
timestamp: errorEvent.timestamp,
sessionId: details.sessionId,
statementId: details.statementId,
workspaceId: details.workspaceId,
errorName: errorEvent.errorName,
errorMessage: errorEvent.errorMessage,
errorStack: errorEvent.errorStack,
};
this.addPendingMetric(errorMetric);
}
this.statementMetrics.delete(statementId);
}
catch (error) {
logger.log(IDBSQLLogger_1.LogLevel.debug, `MetricsAggregator.completeStatement error: ${error.message}`);
}
}
/**
* Append `metric` to the pending buffer, enforcing `maxPendingMetrics`.
*
* Overflow drops the oldest non-error entry (single `splice` — no new
* allocation). Under an all-error buffer it falls back to dropping the
* oldest entry at index 0.
*/
addPendingMetric(metric) {
if (this.closed)
return;
this.pendingMetrics.push(metric);
if (this.pendingMetrics.length > this.maxPendingMetrics) {
const dropIndex = this.findDropIndex();
this.pendingMetrics.splice(dropIndex, 1);
const logger = this.context.getLogger();
logger.log(IDBSQLLogger_1.LogLevel.debug, `Dropped 1 oldest non-error telemetry metric (buffer full at ${this.maxPendingMetrics})`);
}
if (this.pendingMetrics.length >= this.batchSize && !this.closing) {
// resetTimer=false so the periodic tail-drain keeps its cadence even
// under sustained batch-size bursts.
const logger = this.context.getLogger();
Promise.resolve(this.flush(false)).catch((err) => {
var _a;
logger.log(IDBSQLLogger_1.LogLevel.debug, `Batch-trigger flush failed: ${(_a = err === null || err === void 0 ? void 0 : err.message) !== null && _a !== void 0 ? _a : err}`);
});
}
}
findDropIndex() {
for (let i = 0; i < this.pendingMetrics.length; i += 1) {
if (this.pendingMetrics[i].metricType !== 'error') {
return i;
}
}
return 0;
}
/**
* Drain the pending buffer and return a promise that resolves when the
* exporter finishes with the drained batch. `close()` awaits this so
* `process.exit()` after `client.close()` doesn't truncate the POST.
*/
async flush(resetTimer = true) {
var _a;
const logger = this.context.getLogger();
let exportPromise = null;
try {
if (this.pendingMetrics.length === 0) {
if (resetTimer && !this.closed) {
this.startFlushTimer();
}
return;
}
const metricsToExport = this.pendingMetrics;
this.pendingMetrics = [];
logger.log(IDBSQLLogger_1.LogLevel.debug, `Flushing ${metricsToExport.length} telemetry metrics`);
exportPromise = this.exporter.export(metricsToExport);
if (resetTimer && !this.closed) {
this.startFlushTimer();
}
}
catch (error) {
logger.log(IDBSQLLogger_1.LogLevel.debug, `MetricsAggregator.flush error: ${error.message}`);
}
if (exportPromise) {
try {
await exportPromise;
}
catch (err) {
logger.log(IDBSQLLogger_1.LogLevel.debug, `Unexpected export error: ${(_a = err === null || err === void 0 ? void 0 : err.message) !== null && _a !== void 0 ? _a : err}`);
}
}
}
startFlushTimer() {
if (this.closed)
return;
const logger = this.context.getLogger();
try {
if (this.flushTimer) {
clearInterval(this.flushTimer);
}
this.flushTimer = setInterval(() => {
var _a;
// Idle eviction: run before the flush so orphan-error metrics have
// a chance to batch into this drain rather than wait for the next.
try {
this.evictExpiredStatements();
}
catch (err) {
logger.log(IDBSQLLogger_1.LogLevel.debug, `evictExpiredStatements error: ${(_a = err === null || err === void 0 ? void 0 : err.message) !== null && _a !== void 0 ? _a : err}`);
}
Promise.resolve(this.flush(false)).catch((err) => {
var _a;
logger.log(IDBSQLLogger_1.LogLevel.debug, `Periodic flush failed: ${(_a = err === null || err === void 0 ? void 0 : err.message) !== null && _a !== void 0 ? _a : err}`);
});
}, this.flushIntervalMs);
this.flushTimer.unref();
}
catch (error) {
logger.log(IDBSQLLogger_1.LogLevel.debug, `MetricsAggregator.startFlushTimer error: ${error.message}`);
}
}
async close() {
const logger = this.context.getLogger();
try {
// Suppress batch-triggered fire-and-forget flushes from addPendingMetric
// so no promises escape past the single awaited flush below.
this.closing = true;
if (this.flushTimer) {
clearInterval(this.flushTimer);
this.flushTimer = null;
}
// closed is still false here so completeStatement → addPendingMetric works normally.
const remainingStatements = [...this.statementMetrics.keys()];
for (const statementId of remainingStatements) {
this.completeStatement(statementId);
}
this.closed = true;
await this.flush(false);
}
catch (error) {
logger.log(IDBSQLLogger_1.LogLevel.debug, `MetricsAggregator.close error: ${error.message}`);
}
}
}
exports.default = MetricsAggregator;
//# sourceMappingURL=MetricsAggregator.js.map
{"version":3,"file":"MetricsAggregator.js","sourceRoot":"","sources":["../../lib/telemetry/MetricsAggregator.ts"],"names":[],"mappings":"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"}
/**
* Copyright (c) 2025 Databricks Contributors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import IClientContext from '../contracts/IClientContext';
/**
* Telemetry client for a specific host.
* Managed by TelemetryClientProvider with reference counting.
* One client instance is shared across all connections to the same host.
*/
declare class TelemetryClient {
private context;
private host;
private closed;
constructor(context: IClientContext, host: string);
/**
* Gets the host associated with this client.
*/
getHost(): string;
/**
* Checks if the client has been closed.
*/
isClosed(): boolean;
/**
* Closes the telemetry client and releases resources.
* Should only be called by TelemetryClientProvider when reference count reaches zero.
*/
close(): void;
}
export default TelemetryClient;
"use strict";
/**
* Copyright (c) 2025 Databricks Contributors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
Object.defineProperty(exports, "__esModule", { value: true });
const IDBSQLLogger_1 = require("../contracts/IDBSQLLogger");
/**
* Telemetry client for a specific host.
* Managed by TelemetryClientProvider with reference counting.
* One client instance is shared across all connections to the same host.
*/
class TelemetryClient {
constructor(context, host) {
this.context = context;
this.host = host;
this.closed = false;
const logger = context.getLogger();
logger.log(IDBSQLLogger_1.LogLevel.debug, `Created TelemetryClient for host: ${host}`);
}
/**
* Gets the host associated with this client.
*/
getHost() {
return this.host;
}
/**
* Checks if the client has been closed.
*/
isClosed() {
return this.closed;
}
/**
* Closes the telemetry client and releases resources.
* Should only be called by TelemetryClientProvider when reference count reaches zero.
*/
close() {
if (this.closed) {
return;
}
try {
this.context.getLogger().log(IDBSQLLogger_1.LogLevel.debug, `Closing TelemetryClient for host: ${this.host}`);
}
catch (_a) {
// swallow
}
finally {
this.closed = true;
}
}
}
exports.default = TelemetryClient;
//# sourceMappingURL=TelemetryClient.js.map
{"version":3,"file":"TelemetryClient.js","sourceRoot":"","sources":["../../lib/telemetry/TelemetryClient.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;AAGH,4DAAqD;AAErD;;;;GAIG;AACH,MAAM,eAAe;IAGnB,YAAoB,OAAuB,EAAU,IAAY;QAA7C,YAAO,GAAP,OAAO,CAAgB;QAAU,SAAI,GAAJ,IAAI,CAAQ;QAFzD,WAAM,GAAY,KAAK,CAAC;QAG9B,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;QACnC,MAAM,CAAC,GAAG,CAAC,uBAAQ,CAAC,KAAK,EAAE,qCAAqC,IAAI,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED;;OAEG;IACH,OAAO;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;;OAGG;IACH,KAAK;QACH,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,OAAO;SACR;QACD,IAAI;YACF,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,uBAAQ,CAAC,KAAK,EAAE,qCAAqC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;SAChG;QAAC,WAAM;YACN,UAAU;SACX;gBAAS;YACR,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;SACpB;IACH,CAAC;CACF;AAED,kBAAe,eAAe,CAAC"}
/**
* Copyright (c) 2025 Databricks Contributors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import IClientContext from '../contracts/IClientContext';
import TelemetryClient from './TelemetryClient';
/**
* Manages one telemetry client per host.
* Prevents rate limiting by sharing clients across connections to the same host.
* Instance-based (not singleton), stored in DBSQLClient.
*
* Reference counts are incremented and decremented synchronously, and
* `close()` is sync today, so there is no await between map mutation and
* client teardown. The map entry is removed before `close()` runs so a
* concurrent `getOrCreateClient` call for the same host gets a fresh
* instance rather than receiving this closing one. When `close()` becomes
* async (e.g. HTTP flush in [5/7]) the flow will need to `await` after the
* delete to preserve the same invariant.
*/
declare class TelemetryClientProvider {
private context;
private clients;
private softLimitWarned;
constructor(context: IClientContext);
/**
* Canonicalize host so aliases (scheme, default port, trailing slash, case,
* trailing dot, surrounding whitespace) map to the same entry. Kept to a
* lightweight lexical normalization — `buildTelemetryUrl` still performs
* the strict security validation when a request is actually built.
*/
private static normalizeHostKey;
/**
* Gets or creates a telemetry client for the specified host.
* Increments the reference count for the client.
*
* @param host The host identifier (e.g., "workspace.cloud.databricks.com")
* @returns The telemetry client for the host
*/
getOrCreateClient(host: string): TelemetryClient;
/**
* Releases a telemetry client for the specified host.
* Decrements the reference count and closes the client when it reaches zero.
*
* @param host The host identifier
*/
releaseClient(host: string): void;
/**
* @internal Exposed for testing only.
*/
getRefCount(host: string): number;
/**
* @internal Exposed for testing only.
*/
getActiveClients(): Map<string, TelemetryClient>;
}
export default TelemetryClientProvider;
"use strict";
/**
* Copyright (c) 2025 Databricks Contributors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const IDBSQLLogger_1 = require("../contracts/IDBSQLLogger");
const TelemetryClient_1 = __importDefault(require("./TelemetryClient"));
// Soft cap on distinct host entries. Above this the provider warns once so a
// misconfigured caller (per-request hosts, unnormalized aliases) is visible in
// logs rather than silently growing the map.
const MAX_CLIENTS_SOFT_LIMIT = 128;
/**
* Manages one telemetry client per host.
* Prevents rate limiting by sharing clients across connections to the same host.
* Instance-based (not singleton), stored in DBSQLClient.
*
* Reference counts are incremented and decremented synchronously, and
* `close()` is sync today, so there is no await between map mutation and
* client teardown. The map entry is removed before `close()` runs so a
* concurrent `getOrCreateClient` call for the same host gets a fresh
* instance rather than receiving this closing one. When `close()` becomes
* async (e.g. HTTP flush in [5/7]) the flow will need to `await` after the
* delete to preserve the same invariant.
*/
class TelemetryClientProvider {
constructor(context) {
this.context = context;
this.softLimitWarned = false;
this.clients = new Map();
const logger = context.getLogger();
logger.log(IDBSQLLogger_1.LogLevel.debug, 'Created TelemetryClientProvider');
}
/**
* Canonicalize host so aliases (scheme, default port, trailing slash, case,
* trailing dot, surrounding whitespace) map to the same entry. Kept to a
* lightweight lexical normalization — `buildTelemetryUrl` still performs
* the strict security validation when a request is actually built.
*/
static normalizeHostKey(host) {
return host
.trim()
.toLowerCase()
.replace(/^https?:\/\//, '')
.replace(/\/+$/, '')
.replace(/\.$/, '')
.replace(/:443$/, '');
}
/**
* Gets or creates a telemetry client for the specified host.
* Increments the reference count for the client.
*
* @param host The host identifier (e.g., "workspace.cloud.databricks.com")
* @returns The telemetry client for the host
*/
getOrCreateClient(host) {
const logger = this.context.getLogger();
const key = TelemetryClientProvider.normalizeHostKey(host);
let holder = this.clients.get(key);
if (!holder) {
const client = new TelemetryClient_1.default(this.context, key);
holder = {
client,
refCount: 0,
};
this.clients.set(key, holder);
logger.log(IDBSQLLogger_1.LogLevel.debug, `Created new TelemetryClient for host: ${host}`);
if (!this.softLimitWarned && this.clients.size > MAX_CLIENTS_SOFT_LIMIT) {
this.softLimitWarned = true;
logger.log(IDBSQLLogger_1.LogLevel.warn, `TelemetryClientProvider has ${this.clients.size} distinct hosts — possible alias or leak`);
}
}
holder.refCount += 1;
logger.log(IDBSQLLogger_1.LogLevel.debug, `TelemetryClient reference count for ${host}: ${holder.refCount}`);
return holder.client;
}
/**
* Releases a telemetry client for the specified host.
* Decrements the reference count and closes the client when it reaches zero.
*
* @param host The host identifier
*/
releaseClient(host) {
const logger = this.context.getLogger();
const key = TelemetryClientProvider.normalizeHostKey(host);
const holder = this.clients.get(key);
if (!holder) {
logger.log(IDBSQLLogger_1.LogLevel.debug, `No TelemetryClient found for host: ${host}`);
return;
}
// Guard against double-release: a caller releasing more times than it got
// would otherwise drive refCount negative and close a client another
// caller is still holding. Warn loudly and refuse to decrement further.
if (holder.refCount <= 0) {
logger.log(IDBSQLLogger_1.LogLevel.warn, `Unbalanced release for TelemetryClient host: ${host}`);
return;
}
holder.refCount -= 1;
logger.log(IDBSQLLogger_1.LogLevel.debug, `TelemetryClient reference count for ${host}: ${holder.refCount}`);
// Close and remove client when reference count reaches zero.
// Remove from map before calling close so a concurrent getOrCreateClient
// creates a fresh client rather than receiving this closing one.
if (holder.refCount <= 0) {
this.clients.delete(key);
try {
holder.client.close();
logger.log(IDBSQLLogger_1.LogLevel.debug, `Closed and removed TelemetryClient for host: ${host}`);
}
catch (error) {
const msg = error instanceof Error ? error.message : String(error);
logger.log(IDBSQLLogger_1.LogLevel.debug, `Error releasing TelemetryClient: ${msg}`);
}
}
}
/**
* @internal Exposed for testing only.
*/
getRefCount(host) {
const holder = this.clients.get(TelemetryClientProvider.normalizeHostKey(host));
return holder ? holder.refCount : 0;
}
/**
* @internal Exposed for testing only.
*/
getActiveClients() {
const result = new Map();
for (const [host, holder] of this.clients.entries()) {
result.set(host, holder.client);
}
return result;
}
}
exports.default = TelemetryClientProvider;
//# sourceMappingURL=TelemetryClientProvider.js.map
{"version":3,"file":"TelemetryClientProvider.js","sourceRoot":"","sources":["../../lib/telemetry/TelemetryClientProvider.ts"],"names":[],"mappings":"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"}
/**
* Copyright (c) 2025 Databricks Contributors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/// <reference types="node" />
import { EventEmitter } from 'events';
import IClientContext from '../contracts/IClientContext';
import { DriverConfiguration } from './types';
/**
* EventEmitter for driver telemetry.
* Emits events at key driver operations.
*
* CRITICAL REQUIREMENT: ALL exceptions must be caught and logged at LogLevel.debug ONLY
* (never warn/error) to avoid customer anxiety. NO console logging allowed - only IDBSQLLogger.
*
* All emit methods are wrapped in try-catch blocks that swallow exceptions completely.
* Event emission respects the telemetryEnabled flag from context config.
*/
export default class TelemetryEventEmitter extends EventEmitter {
private context;
private enabled;
constructor(context: IClientContext);
/**
* Emit a connection open event.
*
* @param data Connection event data including sessionId, workspaceId, and driverConfig
*/
emitConnectionOpen(data: {
sessionId: string;
workspaceId: string;
driverConfig: DriverConfiguration;
}): void;
/**
* Emit a statement start event.
*
* @param data Statement start data including statementId, sessionId, and operationType
*/
emitStatementStart(data: {
statementId: string;
sessionId: string;
operationType?: string;
}): void;
/**
* Emit a statement complete event.
*
* @param data Statement completion data including latency, result format, and metrics
*/
emitStatementComplete(data: {
statementId: string;
sessionId: string;
latencyMs?: number;
resultFormat?: string;
chunkCount?: number;
bytesDownloaded?: number;
pollCount?: number;
}): void;
/**
* Emit a CloudFetch chunk download event.
*
* @param data CloudFetch chunk data including chunk index, latency, bytes, and compression
*/
emitCloudFetchChunk(data: {
statementId: string;
chunkIndex: number;
latencyMs?: number;
bytes: number;
compressed?: boolean;
}): void;
/**
* Emit an error event.
*
* @param data Error event data including error details and terminal status
*/
emitError(data: {
statementId?: string;
sessionId?: string;
errorName: string;
errorMessage: string;
errorStack?: string;
isTerminal: boolean;
}): void;
}
"use strict";
/**
* Copyright (c) 2025 Databricks Contributors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
Object.defineProperty(exports, "__esModule", { value: true });
const events_1 = require("events");
const IDBSQLLogger_1 = require("../contracts/IDBSQLLogger");
const types_1 = require("./types");
/**
* EventEmitter for driver telemetry.
* Emits events at key driver operations.
*
* CRITICAL REQUIREMENT: ALL exceptions must be caught and logged at LogLevel.debug ONLY
* (never warn/error) to avoid customer anxiety. NO console logging allowed - only IDBSQLLogger.
*
* All emit methods are wrapped in try-catch blocks that swallow exceptions completely.
* Event emission respects the telemetryEnabled flag from context config.
*/
class TelemetryEventEmitter extends events_1.EventEmitter {
constructor(context) {
var _a;
super();
this.context = context;
// Check if telemetry is enabled from config
// Default to false for safe rollout
const config = context.getConfig();
this.enabled = (_a = config.telemetryEnabled) !== null && _a !== void 0 ? _a : false;
}
/**
* Emit a connection open event.
*
* @param data Connection event data including sessionId, workspaceId, and driverConfig
*/
emitConnectionOpen(data) {
if (!this.enabled)
return;
const logger = this.context.getLogger();
try {
const event = {
eventType: types_1.TelemetryEventType.CONNECTION_OPEN,
timestamp: Date.now(),
sessionId: data.sessionId,
workspaceId: data.workspaceId,
driverConfig: data.driverConfig,
};
this.emit(types_1.TelemetryEventType.CONNECTION_OPEN, event);
}
catch (error) {
// Swallow all exceptions - log at debug level only
logger.log(IDBSQLLogger_1.LogLevel.debug, `Error emitting connection event: ${error.message}`);
}
}
/**
* Emit a statement start event.
*
* @param data Statement start data including statementId, sessionId, and operationType
*/
emitStatementStart(data) {
if (!this.enabled)
return;
const logger = this.context.getLogger();
try {
const event = {
eventType: types_1.TelemetryEventType.STATEMENT_START,
timestamp: Date.now(),
statementId: data.statementId,
sessionId: data.sessionId,
operationType: data.operationType,
};
this.emit(types_1.TelemetryEventType.STATEMENT_START, event);
}
catch (error) {
// Swallow all exceptions - log at debug level only
logger.log(IDBSQLLogger_1.LogLevel.debug, `Error emitting statement start: ${error.message}`);
}
}
/**
* Emit a statement complete event.
*
* @param data Statement completion data including latency, result format, and metrics
*/
emitStatementComplete(data) {
if (!this.enabled)
return;
const logger = this.context.getLogger();
try {
const event = {
eventType: types_1.TelemetryEventType.STATEMENT_COMPLETE,
timestamp: Date.now(),
statementId: data.statementId,
sessionId: data.sessionId,
latencyMs: data.latencyMs,
resultFormat: data.resultFormat,
chunkCount: data.chunkCount,
bytesDownloaded: data.bytesDownloaded,
pollCount: data.pollCount,
};
this.emit(types_1.TelemetryEventType.STATEMENT_COMPLETE, event);
}
catch (error) {
// Swallow all exceptions - log at debug level only
logger.log(IDBSQLLogger_1.LogLevel.debug, `Error emitting statement complete: ${error.message}`);
}
}
/**
* Emit a CloudFetch chunk download event.
*
* @param data CloudFetch chunk data including chunk index, latency, bytes, and compression
*/
emitCloudFetchChunk(data) {
if (!this.enabled)
return;
const logger = this.context.getLogger();
try {
const event = {
eventType: types_1.TelemetryEventType.CLOUDFETCH_CHUNK,
timestamp: Date.now(),
statementId: data.statementId,
chunkIndex: data.chunkIndex,
latencyMs: data.latencyMs,
bytes: data.bytes,
compressed: data.compressed,
};
this.emit(types_1.TelemetryEventType.CLOUDFETCH_CHUNK, event);
}
catch (error) {
// Swallow all exceptions - log at debug level only
logger.log(IDBSQLLogger_1.LogLevel.debug, `Error emitting cloudfetch chunk: ${error.message}`);
}
}
/**
* Emit an error event.
*
* @param data Error event data including error details and terminal status
*/
emitError(data) {
if (!this.enabled)
return;
const logger = this.context.getLogger();
try {
const event = {
eventType: types_1.TelemetryEventType.ERROR,
timestamp: Date.now(),
statementId: data.statementId,
sessionId: data.sessionId,
errorName: data.errorName,
errorMessage: data.errorMessage,
errorStack: data.errorStack,
isTerminal: data.isTerminal,
};
this.emit(types_1.TelemetryEventType.ERROR, event);
}
catch (error) {
// Swallow all exceptions - log at debug level only
logger.log(IDBSQLLogger_1.LogLevel.debug, `Error emitting error event: ${error.message}`);
}
}
}
exports.default = TelemetryEventEmitter;
//# sourceMappingURL=TelemetryEventEmitter.js.map
{"version":3,"file":"TelemetryEventEmitter.js","sourceRoot":"","sources":["../../lib/telemetry/TelemetryEventEmitter.ts"],"names":[],"mappings":"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"}
/**
* Copyright (c) 2025 Databricks Contributors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* Build an HTTPS telemetry URL from a host and a path.
*
* Refuses anything beyond a bare `host[:port]` so a compromised or mistyped
* host cannot redirect the authenticated request to an attacker-controlled
* endpoint. Defeated historical bypasses include:
* - protocol-relative prefix: `//attacker.com`
* - zero-width / ASCII whitespace in the host
* - userinfo (`user:pass@host`)
* - path/query/fragment
* - CRLF (header injection on some fetch backends)
* - loopback / link-local / RFC1918 / cloud-metadata addresses
*
* Returns `null` when the host fails any check; callers drop the batch.
*/
export declare function buildTelemetryUrl(host: string, path: string): string | null;
/**
* Strips common secret shapes from a free-form error string and caps length.
* Applied before anything is shipped off-box. Redaction happens before
* truncation so a long stack cannot bury a secret past the cap; truncation
* then runs a second pass to catch anything that appeared only in the tail.
*/
export declare function redactSensitive(value: string | undefined, maxLen?: number): string;
/**
* Normalises any `HeadersInit` shape (`Headers`, `[string,string][]`, or
* `Record<string, string>`) into a plain string dictionary. Non-string
* values are dropped. Shared by the exporter and FeatureFlagCache so there
* is one source of truth for auth-header handling.
*/
export declare function normalizeHeaders(raw: unknown): Record<string, string>;
/**
* Case-insensitive check for a non-empty `Authorization` header.
*/
export declare function hasAuthorization(headers: Record<string, string>): boolean;
/**
* Returns a safe `process_name` value: the basename of the first whitespace-
* delimited token, with trailing whitespace trimmed. This defeats both the
* absolute-path PII leak (`/home/<user>/app.js`) and the argv-leak shape
* (`node --db-password=X app.js`) that some producers pass in.
*/
export declare function sanitizeProcessName(name: string | undefined): string;
"use strict";
/**
* Copyright (c) 2025 Databricks Contributors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.sanitizeProcessName = exports.hasAuthorization = exports.normalizeHeaders = exports.redactSensitive = exports.buildTelemetryUrl = void 0;
/**
* Hosts we always refuse to send authenticated telemetry to. Targeted at the
* `/api/2.0/sql/telemetry-ext` exfil vector: an attacker-influenced `host`
* (env var, tampered config, etc.) must not be able to redirect the Bearer
* token to a loopback/IMDS/RFC1918 endpoint.
*/
const BLOCKED_HOST_PATTERNS = [
/^(?:127\.|0\.|10\.|169\.254\.|172\.(?:1[6-9]|2[0-9]|3[01])\.|192\.168\.)/,
/^(?:localhost|metadata\.google\.internal|metadata\.azure\.com)$/i,
/^\[?::1\]?$/,
/^\[?(?:fc|fd)[0-9a-f]{2}:/i,
/^\[?::ffff:(?:127|10|0|169\.254)\./i,
];
/**
* Build an HTTPS telemetry URL from a host and a path.
*
* Refuses anything beyond a bare `host[:port]` so a compromised or mistyped
* host cannot redirect the authenticated request to an attacker-controlled
* endpoint. Defeated historical bypasses include:
* - protocol-relative prefix: `//attacker.com`
* - zero-width / ASCII whitespace in the host
* - userinfo (`user:pass@host`)
* - path/query/fragment
* - CRLF (header injection on some fetch backends)
* - loopback / link-local / RFC1918 / cloud-metadata addresses
*
* Returns `null` when the host fails any check; callers drop the batch.
*/
function buildTelemetryUrl(host, path) {
if (typeof host !== 'string' || host.length === 0) {
return null;
}
// Reject ASCII whitespace + common zero-width/BOM codepoints that JS `\s`
// does not cover but `new URL` silently strips.
if (/[\s\u200b-\u200f\u2060\ufeff]/.test(host)) {
return null;
}
const cleanHost = host.replace(/^https?:\/\//, '').replace(/\/+$/, '');
if (cleanHost.length === 0) {
return null;
}
// Reject anything that looks like userinfo / path / protocol-relative
// prefix before URL parsing. `new URL('https://' + '//x')` would otherwise
// normalise the doubled slash and accept `x` as the host.
if (/[/\\@]/.test(cleanHost)) {
return null;
}
let parsed;
try {
parsed = new URL(`https://${cleanHost}`);
}
catch (_a) {
return null;
}
if (parsed.pathname !== '/' ||
parsed.search !== '' ||
parsed.hash !== '' ||
parsed.username !== '' ||
parsed.password !== '') {
return null;
}
// Defence in depth: ensure `new URL` did not silently rewrite the host we
// validated (e.g. by stripping a codepoint we missed above). `new URL`
// normalises away the default :443 for https, so compare using the
// port-stripped hostname instead of .host.
const expectedHost = cleanHost.toLowerCase().replace(/:443$/, '');
const actualHost = parsed.host.toLowerCase().replace(/:443$/, '');
if (actualHost !== expectedHost) {
return null;
}
if (BLOCKED_HOST_PATTERNS.some((r) => r.test(parsed.hostname))) {
return null;
}
return `https://${parsed.host}${path}`;
}
exports.buildTelemetryUrl = buildTelemetryUrl;
/**
* Prefixes the Databricks driver uses for internal token formats. Kept in
* sync with `lib/utils/buildUserAgentString.ts`'s `redactInternalToken`.
* Extending one list should extend the other.
*/
const DATABRICKS_TOKEN_PREFIXES = ['dkea', 'dskea', 'dapi', 'dsapi', 'dose'];
const SECRET_PATTERNS = [
// `Authorization: Bearer <token>` / `Bearer <token>` anywhere in a stack.
[/Bearer\s+[A-Za-z0-9._\-+/=]+/gi, 'Bearer <REDACTED>'],
// `Authorization: Basic <base64>`.
[/Basic\s+[A-Za-z0-9+/=]+/gi, 'Basic <REDACTED>'],
// URL userinfo: `https://user:pass@host/…`.
[/([a-z][a-z0-9+.-]*:\/\/)[^/\s:@]+:[^/\s@]+@/gi, '$1<REDACTED>@'],
// Databricks PATs / service-token prefixes without `Bearer`, e.g.
// `token is dapi0123…` — appears in error stacks that echo the raw value.
[new RegExp(`\\b(?:${DATABRICKS_TOKEN_PREFIXES.join('|')})[A-Za-z0-9]{8,}`, 'g'), '<REDACTED>'],
// JWTs (three base64url segments separated by dots).
[/\beyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}\b/g, '<REDACTED_JWT>'],
// JSON-encoded secrets: `"client_secret":"..."`, `"access_token":"..."` etc.
[
/"(password|token|client_secret|refresh_token|access_token|id_token|secret|api[_-]?key|apikey)"\s*:\s*"[^"]*"/gi,
'"$1":"<REDACTED>"',
],
// Form-URL-encoded / key=value secrets.
[
/\b(token|password|client_secret|refresh_token|access_token|id_token|secret|api[_-]?key|apikey)=[^\s&"']+/gi,
'$1=<REDACTED>',
],
];
/**
* Strips common secret shapes from a free-form error string and caps length.
* Applied before anything is shipped off-box. Redaction happens before
* truncation so a long stack cannot bury a secret past the cap; truncation
* then runs a second pass to catch anything that appeared only in the tail.
*/
function redactSensitive(value, maxLen = 2048) {
if (!value) {
return '';
}
let redacted = value;
for (const [pattern, replacement] of SECRET_PATTERNS) {
redacted = redacted.replace(pattern, replacement);
}
if (redacted.length > maxLen) {
redacted = `${redacted.slice(0, maxLen)}…[truncated]`;
for (const [pattern, replacement] of SECRET_PATTERNS) {
redacted = redacted.replace(pattern, replacement);
}
}
return redacted;
}
exports.redactSensitive = redactSensitive;
/**
* Normalises any `HeadersInit` shape (`Headers`, `[string,string][]`, or
* `Record<string, string>`) into a plain string dictionary. Non-string
* values are dropped. Shared by the exporter and FeatureFlagCache so there
* is one source of truth for auth-header handling.
*/
function normalizeHeaders(raw) {
if (!raw || typeof raw !== 'object') {
return {};
}
// Avoid importing node-fetch here; use structural check.
if (typeof raw.forEach === 'function' && !Array.isArray(raw)) {
const out = {};
raw.forEach((value, key) => {
if (typeof key === 'string' && typeof value === 'string') {
out[key] = value;
}
});
return out;
}
if (Array.isArray(raw)) {
const out = {};
for (const entry of raw) {
if (Array.isArray(entry) && entry.length === 2 && typeof entry[0] === 'string' && typeof entry[1] === 'string') {
const [key, value] = entry;
out[key] = value;
}
}
return out;
}
const out = {};
for (const [k, v] of Object.entries(raw)) {
if (typeof v === 'string') {
out[k] = v;
}
}
return out;
}
exports.normalizeHeaders = normalizeHeaders;
/**
* Case-insensitive check for a non-empty `Authorization` header.
*/
function hasAuthorization(headers) {
for (const key of Object.keys(headers)) {
if (key.toLowerCase() === 'authorization' && headers[key]) {
return true;
}
}
return false;
}
exports.hasAuthorization = hasAuthorization;
/**
* Returns a safe `process_name` value: the basename of the first whitespace-
* delimited token, with trailing whitespace trimmed. This defeats both the
* absolute-path PII leak (`/home/<user>/app.js`) and the argv-leak shape
* (`node --db-password=X app.js`) that some producers pass in.
*/
function sanitizeProcessName(name) {
if (!name) {
return '';
}
const trimmed = name.trim();
if (trimmed.length === 0) {
return '';
}
// Drop argv tail: anything after the first whitespace — argv[0] shouldn't
// contain spaces, but producers sometimes pass `argv.join(' ')`.
const firstToken = trimmed.split(/\s/, 1)[0];
if (!firstToken) {
return '';
}
const lastSep = Math.max(firstToken.lastIndexOf('/'), firstToken.lastIndexOf('\\'));
return lastSep < 0 ? firstToken : firstToken.slice(lastSep + 1);
}
exports.sanitizeProcessName = sanitizeProcessName;
//# sourceMappingURL=telemetryUtils.js.map
{"version":3,"file":"telemetryUtils.js","sourceRoot":"","sources":["../../lib/telemetry/telemetryUtils.ts"],"names":[],"mappings":"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"}
/**
* Copyright (c) 2025 Databricks Contributors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* Build full URL from host and path, handling protocol correctly.
* @param host The hostname (with or without protocol)
* @param path The path to append (should start with /)
* @returns Full URL with protocol
*/
export declare function buildUrl(host: string, path: string): string;
"use strict";
/**
* Copyright (c) 2025 Databricks Contributors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.buildUrl = void 0;
/**
* Build full URL from host and path, handling protocol correctly.
* @param host The hostname (with or without protocol)
* @param path The path to append (should start with /)
* @returns Full URL with protocol
*/
// eslint-disable-next-line import/prefer-default-export
function buildUrl(host, path) {
// Check if host already has protocol
if (host.startsWith('http://') || host.startsWith('https://')) {
return `${host}${path}`;
}
// Add https:// if no protocol present
return `https://${host}${path}`;
}
exports.buildUrl = buildUrl;
//# sourceMappingURL=urlUtils.js.map
{"version":3,"file":"urlUtils.js","sourceRoot":"","sources":["../../lib/telemetry/urlUtils.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;;AAEH;;;;;GAKG;AACH,wDAAwD;AACxD,SAAgB,QAAQ,CAAC,IAAY,EAAE,IAAY;IACjD,qCAAqC;IACrC,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;QAC7D,OAAO,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC;KACzB;IACD,sCAAsC;IACtC,OAAO,WAAW,IAAI,GAAG,IAAI,EAAE,CAAC;AAClC,CAAC;AAPD,4BAOC"}
/**
* Detects whether the Node.js SQL driver is being invoked by an AI coding agent
* by checking for well-known environment variables that agents set in their
* spawned shell processes.
*
* Detection only succeeds when exactly one agent environment variable is present,
* to avoid ambiguous attribution when multiple agent environments overlap.
*
* Adding a new agent requires only a new entry in `knownAgents`.
*
* References for each environment variable:
* - ANTIGRAVITY_AGENT: Closed source. Google Antigravity sets this variable.
* - CLAUDECODE: https://github.com/anthropics/claude-code (sets CLAUDECODE=1)
* - CLINE_ACTIVE: https://github.com/cline/cline (shipped in v3.24.0)
* - CODEX_CI: https://github.com/openai/codex (part of UNIFIED_EXEC_ENV array in codex-rs)
* - CURSOR_AGENT: Closed source. Referenced in a gist by johnlindquist.
* - GEMINI_CLI: https://google-gemini.github.io/gemini-cli/docs/tools/shell.html (sets GEMINI_CLI=1)
* - OPENCODE: https://github.com/opencode-ai/opencode (sets OPENCODE=1)
*/
export default function detectAgent(env?: Record<string, string | undefined>): string;
"use strict";
/**
* Detects whether the Node.js SQL driver is being invoked by an AI coding agent
* by checking for well-known environment variables that agents set in their
* spawned shell processes.
*
* Detection only succeeds when exactly one agent environment variable is present,
* to avoid ambiguous attribution when multiple agent environments overlap.
*
* Adding a new agent requires only a new entry in `knownAgents`.
*
* References for each environment variable:
* - ANTIGRAVITY_AGENT: Closed source. Google Antigravity sets this variable.
* - CLAUDECODE: https://github.com/anthropics/claude-code (sets CLAUDECODE=1)
* - CLINE_ACTIVE: https://github.com/cline/cline (shipped in v3.24.0)
* - CODEX_CI: https://github.com/openai/codex (part of UNIFIED_EXEC_ENV array in codex-rs)
* - CURSOR_AGENT: Closed source. Referenced in a gist by johnlindquist.
* - GEMINI_CLI: https://google-gemini.github.io/gemini-cli/docs/tools/shell.html (sets GEMINI_CLI=1)
* - OPENCODE: https://github.com/opencode-ai/opencode (sets OPENCODE=1)
*/
Object.defineProperty(exports, "__esModule", { value: true });
const knownAgents = [
{ envVar: 'ANTIGRAVITY_AGENT', product: 'antigravity' },
{ envVar: 'CLAUDECODE', product: 'claude-code' },
{ envVar: 'CLINE_ACTIVE', product: 'cline' },
{ envVar: 'CODEX_CI', product: 'codex' },
{ envVar: 'CURSOR_AGENT', product: 'cursor' },
{ envVar: 'GEMINI_CLI', product: 'gemini-cli' },
{ envVar: 'OPENCODE', product: 'opencode' },
];
function detectAgent(env = process.env) {
const detected = knownAgents.filter((a) => env[a.envVar]).map((a) => a.product);
if (detected.length === 1) {
return detected[0];
}
return '';
}
exports.default = detectAgent;
//# sourceMappingURL=agentDetector.js.map
{"version":3,"file":"agentDetector.js","sourceRoot":"","sources":["../../lib/utils/agentDetector.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;;AAEH,MAAM,WAAW,GAA+C;IAC9D,EAAE,MAAM,EAAE,mBAAmB,EAAE,OAAO,EAAE,aAAa,EAAE;IACvD,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE;IAChD,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,EAAE;IAC5C,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE;IACxC,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,QAAQ,EAAE;IAC7C,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE;IAC/C,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE;CAC5C,CAAC;AAEF,SAAwB,WAAW,CAAC,MAA0C,OAAO,CAAC,GAAG;IACvF,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAEhF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;QACzB,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;KACpB;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAPD,8BAOC"}
/**
* Serializes a query tags dictionary into a string for use in confOverlay.
*
* Format: comma-separated key:value pairs, e.g. "key1:value1,key2:value2"
* - If a value is null or undefined, the key is included without a colon or value
* - Backslashes in keys are escaped; other special characters in keys are not escaped
* - Special characters (backslash, colon, comma) in values are backslash-escaped
*
* @param queryTags - dictionary of query tag key-value pairs
* @returns serialized string, or undefined if input is empty/null/undefined
*/
export default function serializeQueryTags(queryTags: Record<string, string | null | undefined> | null | undefined): string | undefined;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
/**
* Serializes a query tags dictionary into a string for use in confOverlay.
*
* Format: comma-separated key:value pairs, e.g. "key1:value1,key2:value2"
* - If a value is null or undefined, the key is included without a colon or value
* - Backslashes in keys are escaped; other special characters in keys are not escaped
* - Special characters (backslash, colon, comma) in values are backslash-escaped
*
* @param queryTags - dictionary of query tag key-value pairs
* @returns serialized string, or undefined if input is empty/null/undefined
*/
function serializeQueryTags(queryTags) {
if (queryTags == null) {
return undefined;
}
const keys = Object.keys(queryTags);
if (keys.length === 0) {
return undefined;
}
return keys
.map((key) => {
const escapedKey = key.replace(/\\/g, '\\\\');
const value = queryTags[key];
if (value == null) {
return escapedKey;
}
const escapedValue = value.replace(/[\\:,]/g, (c) => `\\${c}`);
return `${escapedKey}:${escapedValue}`;
})
.join(',');
}
exports.default = serializeQueryTags;
//# sourceMappingURL=queryTags.js.map
{"version":3,"file":"queryTags.js","sourceRoot":"","sources":["../../lib/utils/queryTags.ts"],"names":[],"mappings":";;AAAA;;;;;;;;;;GAUG;AACH,SAAwB,kBAAkB,CACxC,SAAuE;IAEvE,IAAI,SAAS,IAAI,IAAI,EAAE;QACrB,OAAO,SAAS,CAAC;KAClB;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACpC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;QACrB,OAAO,SAAS,CAAC;KAClB;IAED,OAAO,IAAI;SACR,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QACX,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC9C,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,KAAK,IAAI,IAAI,EAAE;YACjB,OAAO,UAAU,CAAC;SACnB;QACD,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC/D,OAAO,GAAG,UAAU,IAAI,YAAY,EAAE,CAAC;IACzC,CAAC,CAAC;SACD,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;AAvBD,qCAuBC"}
+7
-0

@@ -24,5 +24,12 @@ import IDBSQLLogger from './IDBSQLLogger';

telemetryMaxRetries?: number;
telemetryBackoffBaseMs?: number;
telemetryBackoffMaxMs?: number;
telemetryBackoffJitterMs?: number;
telemetryAuthenticatedExport?: boolean;
telemetryCircuitBreakerThreshold?: number;
telemetryCircuitBreakerTimeout?: number;
telemetryMaxPendingMetrics?: number;
telemetryMaxErrorsPerStatement?: number;
telemetryStatementTtlMs?: number;
userAgentEntry?: string;
}

@@ -29,0 +36,0 @@ export default interface IClientContext {

@@ -55,2 +55,8 @@ import IDBSQLLogger from './IDBSQLLogger';

};
/**
* Session-level query tags as key-value pairs. Serialized and passed via session configuration
* as "QUERY_TAGS". Values may be null/undefined to include a key without a value.
* If both queryTags and configuration.QUERY_TAGS are specified, queryTags takes precedence.
*/
queryTags?: Record<string, string | null | undefined>;
}

@@ -57,0 +63,0 @@ export default interface IDBSQLClient {

@@ -23,2 +23,8 @@ import Int64 from 'node-int64';

ordinalParameters?: Array<DBSQLParameter | DBSQLParameterValue>;
/**
* Per-statement query tags as key-value pairs. Serialized and passed via confOverlay
* as "query_tags". Values may be null/undefined to include a key without a value.
* These tags apply only to this statement and do not persist across queries.
*/
queryTags?: Record<string, string | null | undefined>;
};

@@ -25,0 +31,0 @@ export type TypeInfoRequest = {

@@ -60,2 +60,10 @@ /// <reference types="node" />

getDriver(): Promise<IDriver>;
/**
* Returns the authentication provider associated with this client, if any.
* Intended for internal telemetry/feature-flag call sites that need to
* obtain auth headers directly without routing through `IClientContext`.
*
* @internal Not part of the public API. May change without notice.
*/
getAuthProvider(): IAuthentication | undefined;
}

@@ -185,2 +185,7 @@ "use strict";

}
// Persist userAgentEntry so telemetry and feature-flag call sites reuse
// the same value as the primary Thrift connection's User-Agent.
if (options.userAgentEntry !== undefined) {
this.config.userAgentEntry = options.userAgentEntry;
}
this.authProvider = this.createAuthProvider(options, authProvider);

@@ -231,2 +236,12 @@ this.connectionProvider = this.createConnectionProvider(options);

}
// Serialize queryTags dict and set in configuration; takes precedence over configuration.QUERY_TAGS
if (request.queryTags !== undefined) {
const serialized = (0, utils_1.serializeQueryTags)(request.queryTags);
if (serialized) {
configuration.QUERY_TAGS = serialized;
}
else {
delete configuration.QUERY_TAGS;
}
}
const response = await this.driver.openSession({

@@ -280,4 +295,14 @@ client_protocol_i64: new node_int64_1.default(TCLIService_types_1.TProtocolVersion.SPARK_CLI_SERVICE_PROTOCOL_V8),

}
/**
* Returns the authentication provider associated with this client, if any.
* Intended for internal telemetry/feature-flag call sites that need to
* obtain auth headers directly without routing through `IClientContext`.
*
* @internal Not part of the public API. May change without notice.
*/
getAuthProvider() {
return this.authProvider;
}
}
exports.default = DBSQLClient;
//# sourceMappingURL=DBSQLClient.js.map
+1
-1

@@ -1,1 +0,1 @@

{"version":3,"file":"DBSQLClient.js","sourceRoot":"","sources":["../lib/DBSQLClient.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"DBSQLClient.js","sourceRoot":"","sources":["../lib/DBSQLClient.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,oDAA4B;AAC5B,4DAA+B;AAE/B,mCAAsC;AACtC,wEAAgD;AAChD,mEAA+D;AAK/D,mEAA2C;AAC3C,kEAA0C;AAG1C,6FAAqE;AAErE,0DAAkC;AAClC,+EAAuD;AACvD,mCAAmF;AACnF,wGAAgF;AAChF,qFAA+E;AAC/E,mEAOyC;AACzC,2DAAkE;AAClE,gEAAwC;AACxC,sFAA8D;AAG9D,SAAS,YAAY,CAAC,GAAW;IAC/B,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;QAC3C,OAAO,IAAI,GAAG,EAAE,CAAC;KAClB;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,0BAA0B,CAAC,WAAoB,EAAE,UAAmB;IAC3E,IAAI,CAAC,WAAW,IAAI,CAAC,UAAU,EAAE;QAC/B,OAAO,EAAE,CAAC;KACX;IAED,OAAO;QACL,gBAAgB,EAAE;YAChB,WAAW;YACX,UAAU;SACX;KACF,CAAC;AACJ,CAAC;AAID,MAAqB,WAAY,SAAQ,qBAAY;IAqB3C,MAAM,CAAC,gBAAgB;QAC7B,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACvB,IAAI,CAAC,aAAa,GAAG,IAAI,qBAAW,EAAE,CAAC;SACxC;QACD,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAEO,MAAM,CAAC,gBAAgB;QAC7B,OAAO;YACL,2BAA2B,EAAE,MAAM;YACnC,wBAAwB,EAAE,MAAM;YAEhC,YAAY,EAAE,IAAI;YAClB,mBAAmB,EAAE,IAAI;YACzB,aAAa,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI;YAE7B,gBAAgB,EAAE,CAAC;YACnB,cAAc,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI;YAC9B,aAAa,EAAE,CAAC,GAAG,IAAI;YACvB,aAAa,EAAE,EAAE,GAAG,IAAI;YAExB,aAAa,EAAE,IAAI;YACnB,6BAA6B,EAAE,EAAE;YACjC,4BAA4B,EAAE,GAAG;YAEjC,iBAAiB,EAAE,IAAI;SACxB,CAAC;IACJ,CAAC;IAED,YAAY,OAAuB;;QACjC,KAAK,EAAE,CAAC;QAxCO,WAAM,GAAG,IAAI,oBAAU,CAAC;YACvC,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;QAIK,WAAM,GAAkB,gBAAM,CAAC;QAEtB,aAAQ,GAAG,IAAI,6BAAmB,EAAgB,CAAC;QAiClE,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,gBAAgB,EAAE,CAAC;QAC7C,IAAI,CAAC,MAAM,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,mCAAI,WAAW,CAAC,gBAAgB,EAAE,CAAC;QAChE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,uBAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAC,CAAC;IACxD,CAAC;IAEO,oBAAoB,CAAC,OAA0B;QACrD,OAAO;YACL,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,GAAG;YACzB,IAAI,EAAE,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC;YAChC,KAAK,EAAE,IAAI;YACX,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,OAAO,EAAE;gBACP,YAAY,EAAE,IAAA,4BAAoB,EAAC,OAAO,CAAC,cAAc,CAAC;aAC3D;SACF,CAAC;IACJ,CAAC;IAEO,kBAAkB,CAAC,OAA0B,EAAE,YAA8B;QACnF,IAAI,YAAY,EAAE;YAChB,OAAO,YAAY,CAAC;SACrB;QAED,QAAQ,OAAO,CAAC,QAAQ,EAAE;YACxB,KAAK,SAAS,CAAC;YACf,KAAK,cAAc;gBACjB,OAAO,IAAI,iCAAuB,CAAC;oBACjC,QAAQ,EAAE,OAAO;oBACjB,QAAQ,EAAE,OAAO,CAAC,KAAK;oBACvB,OAAO,EAAE,IAAI;iBACd,CAAC,CAAC;YACL,KAAK,kBAAkB;gBACrB,OAAO,IAAI,yBAAe,CAAC;oBACzB,IAAI,EAAE,OAAO,CAAC,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,2BAAS,CAAC,GAAG,CAAC,CAAC,CAAC,2BAAS,CAAC,GAAG;oBAC7E,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,WAAW,EAAE,OAAO,CAAC,WAAW;oBAChC,aAAa,EAAE,OAAO,CAAC,aAAa;oBACpC,QAAQ,EAAE,OAAO,CAAC,aAAa;oBAC/B,YAAY,EAAE,OAAO,CAAC,iBAAiB;oBACvC,yBAAyB,EAAE,OAAO,CAAC,yBAAyB;oBAC5D,OAAO,EAAE,IAAI;iBACd,CAAC,CAAC;YACL,KAAK,QAAQ;gBACX,OAAO,OAAO,CAAC,QAAQ,CAAC;YAC1B,KAAK,gBAAgB;gBACnB,OAAO,IAAI,0CAA0B,CACnC,IAAI,CAAC,iBAAiB,CACpB,OAAO,CAAC,aAAa,EACrB,OAAO,CAAC,IAAI,EACZ,OAAO,CAAC,qBAAqB,EAC7B,OAAO,CAAC,kBAAkB,CAC3B,EACD,IAAI,CACL,CAAC;YACJ,KAAK,gBAAgB;gBACnB,OAAO,IAAI,0CAA0B,CACnC,IAAI,CAAC,iBAAiB,CACpB,IAAI,qCAAqB,CAAC,OAAO,CAAC,QAAQ,CAAC,EAC3C,OAAO,CAAC,IAAI,EACZ,OAAO,CAAC,qBAAqB,EAC7B,OAAO,CAAC,kBAAkB,CAC3B,EACD,IAAI,CACL,CAAC;YACJ,KAAK,cAAc;gBACjB,OAAO,IAAI,0CAA0B,CACnC,IAAI,CAAC,iBAAiB,CACpB,mCAAmB,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,EAChD,OAAO,CAAC,IAAI,EACZ,OAAO,CAAC,qBAAqB,EAC7B,OAAO,CAAC,kBAAkB,CAC3B,EACD,IAAI,CACL,CAAC;YACJ,aAAa;SACd;IACH,CAAC;IAED;;;OAGG;IACK,iBAAiB,CACvB,QAAwB,EACxB,IAAY,EACZ,gBAA0B,EAC1B,kBAA2B;QAE3B,iCAAiC;QACjC,IAAI,OAAO,GAAmB,IAAI,mCAAmB,CAAC,QAAQ,CAAC,CAAC;QAEhE,kCAAkC;QAClC,IAAI,gBAAgB,EAAE;YACpB,OAAO,GAAG,IAAI,kCAAkB,CAAC,OAAO,EAAE,IAAI,EAAE;gBAC9C,QAAQ,EAAE,kBAAkB;aAC7B,CAAC,CAAC;SACJ;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,wBAAwB,CAAC,OAA0B;QACzD,OAAO,IAAI,wBAAc,CAAC,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC;IACtE,CAAC;IAED;;;;;;;;OAQG;IACI,KAAK,CAAC,OAAO,CAAC,OAA0B,EAAE,YAA8B;QAC7E,MAAM,kBAAkB,GAAI,OAAe,CAAC,QAAQ,CAAC;QACrD,IAAI,kBAAkB,KAAK,SAAS,EAAE;YACpC,IAAI,CAAC,MAAM,CAAC,GAAG,CACb,uBAAQ,CAAC,IAAI,EACb,oFAAoF,CACrF,CAAC;YACF,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE;gBAC3B,OAAO,CAAC,cAAc,GAAG,kBAAkB,CAAC;aAC7C;SACF;QAED,+CAA+C;QAC/C,IAAI,OAAO,CAAC,wBAAwB,KAAK,SAAS,EAAE;YAClD,IAAI,CAAC,MAAM,CAAC,wBAAwB,GAAG,OAAO,CAAC,wBAAwB,CAAC;SACzE;QAED,wEAAwE;QACxE,gEAAgE;QAChE,IAAI,OAAO,CAAC,cAAc,KAAK,SAAS,EAAE;YACxC,IAAI,CAAC,MAAM,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;SACrD;QAED,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QAEnE,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC;QAEjE,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,EAAE,CAAC;QAE7E,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAY,EAAE,EAAE;YAC5C,kFAAkF;YAClF,mDAAmD;YACnD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,uBAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,GAAG,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAClF,IAAI;gBACF,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;aAC3B;YAAC,OAAO,CAAC,EAAE;gBACV,uEAAuE;gBACvE,2EAA2E;aAC5E;QACH,CAAC,CAAC,CAAC;QAEH,gBAAgB,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,MAA0C,EAAE,EAAE;YACjF,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,uBAAQ,CAAC,KAAK,EAAE,yBAAyB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACnF,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAChC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,uBAAQ,CAAC,KAAK,EAAE,qBAAqB,CAAC,CAAC;YACvD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrB,CAAC,CAAC,CAAC;QAEH,gBAAgB,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;YAClC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,uBAAQ,CAAC,KAAK,EAAE,uBAAuB,CAAC,CAAC;YACzD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;;;OAQG;IACI,KAAK,CAAC,WAAW,CAAC,UAA8B,EAAE;QACvD,gCAAgC;QAChC,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAEhF,6CAA6C;QAC7C,IAAI,IAAI,CAAC,MAAM,CAAC,wBAAwB,EAAE;YACxC,aAAa,CAAC,oDAAoD,CAAC,GAAG,MAAM,CAAC;SAC9E;QAED,oGAAoG;QACpG,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,EAAE;YACnC,MAAM,UAAU,GAAG,IAAA,0BAAkB,EAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YACzD,IAAI,UAAU,EAAE;gBACd,aAAa,CAAC,UAAU,GAAG,UAAU,CAAC;aACvC;iBAAM;gBACL,OAAO,aAAa,CAAC,UAAU,CAAC;aACjC;SACF;QAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;YAC7C,mBAAmB,EAAE,IAAI,oBAAK,CAAC,oCAAgB,CAAC,6BAA6B,CAAC;YAC9E,GAAG,0BAA0B,CAAC,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,aAAa,CAAC;YAC5E,aAAa;YACb,sBAAsB,EAAE,IAAI;SAC7B,CAAC,CAAC;QAEH,gBAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC/B,MAAM,OAAO,GAAG,IAAI,sBAAY,CAAC;YAC/B,MAAM,EAAE,IAAA,sBAAc,EAAC,QAAQ,CAAC,aAAa,CAAC;YAC9C,OAAO,EAAE,IAAI;YACb,qBAAqB,EAAE,QAAQ,CAAC,qBAAqB;SACtD,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC3B,OAAO,OAAO,CAAC;IACjB,CAAC;IAEM,KAAK,CAAC,KAAK;QAChB,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;QAE/B,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QACxB,IAAI,CAAC,kBAAkB,GAAG,SAAS,CAAC;QACpC,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;IAChC,CAAC;IAEM,SAAS;QACd,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAEM,SAAS;QACd,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAEM,KAAK,CAAC,qBAAqB;QAChC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;YAC5B,MAAM,IAAI,yBAAe,CAAC,4BAA4B,CAAC,CAAC;SACzD;QAED,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACjC,CAAC;IAEM,KAAK,CAAC,SAAS;QACpB,MAAM,kBAAkB,GAAG,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAE9D,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,uBAAQ,CAAC,IAAI,EAAE,yCAAyC,CAAC,CAAC;YAC1E,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,qBAAW,EAAE,MAAM,kBAAkB,CAAC,mBAAmB,EAAE,CAAC,CAAC;SACrG;QAED,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;YAC3D,kBAAkB,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;SAC5C;QAED,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAEM,KAAK,CAAC,SAAS;QACpB,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;;;;;OAMG;IACI,eAAe;QACpB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;CACF;AArUD,8BAqUC"}

@@ -184,2 +184,6 @@ "use strict";

}
const serializedQueryTags = (0, utils_1.serializeQueryTags)(options.queryTags);
if (serializedQueryTags !== undefined) {
request.confOverlay = { ...request.confOverlay, query_tags: serializedQueryTags };
}
if (utils_1.ProtocolVersion.supportsCloudFetch(this.serverProtocolVersion)) {

@@ -186,0 +190,0 @@ request.canDownloadResult = (_a = options.useCloudFetch) !== null && _a !== void 0 ? _a : clientConfig.useCloudFetch;

@@ -1,1 +0,1 @@

{"version":3,"file":"DBSQLSession.js","sourceRoot":"","sources":["../lib/DBSQLSession.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"DBSQLSession.js","sourceRoot":"","sources":["../lib/DBSQLSession.ts"],"names":[],"mappings":"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"}

@@ -15,2 +15,4 @@ import './polyfills';

export type { default as ITokenProvider } from './connection/auth/tokenProvider/ITokenProvider';
export { CircuitBreakerOpenError, CIRCUIT_BREAKER_OPEN_CODE } from './telemetry/CircuitBreaker';
export { TelemetryTerminalError } from './telemetry/DatabricksTelemetryExporter';
export declare const auth: {

@@ -17,0 +19,0 @@ PlainHttpAuthentication: typeof PlainHttpAuthentication;

@@ -6,3 +6,3 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
exports.LogLevel = exports.DBSQLLogger = exports.DBSQLParameterType = exports.DBSQLParameter = exports.DBSQLSession = exports.DBSQLClient = exports.utils = exports.thrift = exports.connections = exports.TProtocolExceptionType = exports.TProtocolException = exports.TApplicationExceptionType = exports.TApplicationException = exports.TException = exports.auth = void 0;
exports.LogLevel = exports.DBSQLLogger = exports.DBSQLParameterType = exports.DBSQLParameter = exports.DBSQLSession = exports.DBSQLClient = exports.utils = exports.thrift = exports.connections = exports.TProtocolExceptionType = exports.TProtocolException = exports.TApplicationExceptionType = exports.TApplicationException = exports.TException = exports.auth = exports.TelemetryTerminalError = exports.CIRCUIT_BREAKER_OPEN_CODE = exports.CircuitBreakerOpenError = void 0;
// Don't move this import - it should be placed before any other

@@ -28,2 +28,9 @@ require("./polyfills");

Object.defineProperty(exports, "LogLevel", { enumerable: true, get: function () { return IDBSQLLogger_1.LogLevel; } });
// Re-export telemetry error classes so consumers can instanceof-check rather
// than string-matching error messages.
var CircuitBreaker_1 = require("./telemetry/CircuitBreaker");
Object.defineProperty(exports, "CircuitBreakerOpenError", { enumerable: true, get: function () { return CircuitBreaker_1.CircuitBreakerOpenError; } });
Object.defineProperty(exports, "CIRCUIT_BREAKER_OPEN_CODE", { enumerable: true, get: function () { return CircuitBreaker_1.CIRCUIT_BREAKER_OPEN_CODE; } });
var DatabricksTelemetryExporter_1 = require("./telemetry/DatabricksTelemetryExporter");
Object.defineProperty(exports, "TelemetryTerminalError", { enumerable: true, get: function () { return DatabricksTelemetryExporter_1.TelemetryTerminalError; } });
exports.auth = {

@@ -30,0 +37,0 @@ PlainHttpAuthentication: PlainHttpAuthentication_1.default,

@@ -1,1 +0,1 @@

{"version":3,"file":"index.js","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":";;;;;;AAAA,gEAAgE;AAChE,uBAAqB;AAErB,mCAAgC;AAChC,wEAAgD;AAChD,oFAA4D;AAC5D,gEAAwC;AA+C/B,sBA/CF,qBAAW,CA+CE;AA9CpB,kEAA0C;AA8CpB,uBA9Cf,sBAAY,CA8Ce;AA7ClC,qDAAsE;AA6ClC,+FA7C3B,+BAAc,OA6C2B;AAAE,mGA7C3B,mCAAkB,OA6C2B;AA5CtE,gEAAwC;AA4CgC,sBA5CjE,qBAAW,CA4CiE;AA3CnF,wGAAgF;AAChF,mEAMyC;AACzC,6FAAqE;AACrE,mCAAyC;AACzC,2DAAoD;AAiCiC,yFAjC5E,uBAAQ,OAiC4E;AA5BhF,QAAA,IAAI,GAAG;IAClB,uBAAuB,EAAvB,iCAAuB;IACvB,mDAAmD;IACnD,KAAK,EAAL,qBAAK;IACL,mBAAmB,EAAnB,mCAAmB;IACnB,qBAAqB,EAArB,qCAAqB;IACrB,mBAAmB,EAAnB,mCAAmB;IACnB,kBAAkB,EAAlB,kCAAkB;CACnB,CAAC;AAEF,MAAM,EAAE,UAAU,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,GAChH,eAAM,CAAC;AAEA,gCAAU;AAAE,sDAAqB;AAAE,8DAAyB;AAAE,gDAAkB;AAAE,wDAAsB;AAEpG,QAAA,WAAW,GAAG;IACzB,cAAc,EAAd,wBAAc;CACf,CAAC;AAEW,QAAA,MAAM,GAAG;IACpB,WAAW,EAAX,qBAAW;IACX,iBAAiB,EAAjB,2BAAiB;CAClB,CAAC;AAEW,QAAA,KAAK,GAAG;IACnB,cAAc,EAAd,sBAAc;CACf,CAAC"}
{"version":3,"file":"index.js","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":";;;;;;AAAA,gEAAgE;AAChE,uBAAqB;AAErB,mCAAgC;AAChC,wEAAgD;AAChD,oFAA4D;AAC5D,gEAAwC;AAoD/B,sBApDF,qBAAW,CAoDE;AAnDpB,kEAA0C;AAmDpB,uBAnDf,sBAAY,CAmDe;AAlDlC,qDAAsE;AAkDlC,+FAlD3B,+BAAc,OAkD2B;AAAE,mGAlD3B,mCAAkB,OAkD2B;AAjDtE,gEAAwC;AAiDgC,sBAjDjE,qBAAW,CAiDiE;AAhDnF,wGAAgF;AAChF,mEAMyC;AACzC,6FAAqE;AACrE,mCAAyC;AACzC,2DAAoD;AAsCiC,yFAtC5E,uBAAQ,OAsC4E;AAjC7F,6EAA6E;AAC7E,uCAAuC;AACvC,6DAAgG;AAAvF,yHAAA,uBAAuB,OAAA;AAAE,2HAAA,yBAAyB,OAAA;AAC3D,uFAAiF;AAAxE,qIAAA,sBAAsB,OAAA;AAElB,QAAA,IAAI,GAAG;IAClB,uBAAuB,EAAvB,iCAAuB;IACvB,mDAAmD;IACnD,KAAK,EAAL,qBAAK;IACL,mBAAmB,EAAnB,mCAAmB;IACnB,qBAAqB,EAArB,qCAAqB;IACrB,mBAAmB,EAAnB,mCAAmB;IACnB,kBAAkB,EAAlB,kCAAkB;CACnB,CAAC;AAEF,MAAM,EAAE,UAAU,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,GAChH,eAAM,CAAC;AAEA,gCAAU;AAAE,sDAAqB;AAAE,8DAAyB;AAAE,gDAAkB;AAAE,wDAAsB;AAEpG,QAAA,WAAW,GAAG;IACzB,cAAc,EAAd,wBAAc;CACf,CAAC;AAEW,QAAA,MAAM,GAAG;IACpB,WAAW,EAAX,qBAAW;IACX,iBAAiB,EAAjB,2BAAiB;CAClB,CAAC;AAEW,QAAA,KAAK,GAAG;IACnB,cAAc,EAAd,sBAAc;CACf,CAAC"}

@@ -83,2 +83,14 @@ "use strict";

}
// Transient network errors. Notably does NOT include `ENOTFOUND`:
// DNS "not found" usually indicates a misconfigured host, not a transient
// fault. Retrying pushes load at the resolver without any expectation of
// success; circuit-breaker failure accounting is the better response.
const errorCode = error.code;
if (errorCode === 'ECONNREFUSED' ||
errorCode === 'ECONNRESET' ||
errorCode === 'EHOSTUNREACH' ||
errorCode === 'ETIMEDOUT' ||
errorCode === 'EAI_AGAIN') {
return true;
}
// Check for HTTP status codes in error properties

@@ -85,0 +97,0 @@ // Supporting both 'statusCode' and 'status' property names for flexibility

@@ -1,1 +0,1 @@

{"version":3,"file":"ExceptionClassifier.js","sourceRoot":"","sources":["../../lib/telemetry/ExceptionClassifier.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;;;;AAEH,wFAAgE;AAChE,sEAA8C;AAE9C;;;;;;;;;GASG;AACH,MAAqB,mBAAmB;IACtC;;;;;;;;;OASG;IACH,MAAM,CAAC,UAAU,CAAC,KAAY;;QAC5B,2CAA2C;QAC3C,IAAI,KAAK,YAAY,6BAAmB,EAAE;YACxC,OAAO,IAAI,CAAC;SACb;QAED,kDAAkD;QAClD,2EAA2E;QAC3E,MAAM,UAAU,GAAG,MAAC,KAAa,CAAC,UAAU,mCAAK,KAAa,CAAC,MAAM,CAAC;QAEtE,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;YAClC,8BAA8B;YAC9B,6CAA6C;YAC7C,+CAA+C;YAC/C,sCAAsC;YACtC,4CAA4C;YAC5C,OAAO,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,GAAG,CAAC;SAC7F;QAED,2CAA2C;QAC3C,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;;;;OAQG;IACH,MAAM,CAAC,WAAW,CAAC,KAAY;;QAC7B,8CAA8C;QAC9C,IAAI,KAAK,YAAY,oBAAU,EAAE;YAC/B,OAAO,IAAI,CAAC;SACb;QAED,mCAAmC;QACnC,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;YACtE,OAAO,IAAI,CAAC;SACb;QAED,kDAAkD;QAClD,2EAA2E;QAC3E,MAAM,UAAU,GAAG,MAAC,KAAa,CAAC,UAAU,mCAAK,KAAa,CAAC,MAAM,CAAC;QAEtE,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;YAClC,+BAA+B;YAC/B,0CAA0C;YAC1C,8BAA8B;YAC9B,oBAAoB;YACpB,4BAA4B;YAC5B,wBAAwB;YACxB,OAAO,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,GAAG,CAAC;SACnH;QAED,2CAA2C;QAC3C,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAvED,sCAuEC"}
{"version":3,"file":"ExceptionClassifier.js","sourceRoot":"","sources":["../../lib/telemetry/ExceptionClassifier.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;;;;AAEH,wFAAgE;AAChE,sEAA8C;AAE9C;;;;;;;;;GASG;AACH,MAAqB,mBAAmB;IACtC;;;;;;;;;OASG;IACH,MAAM,CAAC,UAAU,CAAC,KAAY;;QAC5B,2CAA2C;QAC3C,IAAI,KAAK,YAAY,6BAAmB,EAAE;YACxC,OAAO,IAAI,CAAC;SACb;QAED,kDAAkD;QAClD,2EAA2E;QAC3E,MAAM,UAAU,GAAG,MAAC,KAAa,CAAC,UAAU,mCAAK,KAAa,CAAC,MAAM,CAAC;QAEtE,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;YAClC,8BAA8B;YAC9B,6CAA6C;YAC7C,+CAA+C;YAC/C,sCAAsC;YACtC,4CAA4C;YAC5C,OAAO,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,GAAG,CAAC;SAC7F;QAED,2CAA2C;QAC3C,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;;;;OAQG;IACH,MAAM,CAAC,WAAW,CAAC,KAAY;;QAC7B,8CAA8C;QAC9C,IAAI,KAAK,YAAY,oBAAU,EAAE;YAC/B,OAAO,IAAI,CAAC;SACb;QAED,mCAAmC;QACnC,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;YACtE,OAAO,IAAI,CAAC;SACb;QAED,kEAAkE;QAClE,0EAA0E;QAC1E,yEAAyE;QACzE,sEAAsE;QACtE,MAAM,SAAS,GAAI,KAAa,CAAC,IAAI,CAAC;QACtC,IACE,SAAS,KAAK,cAAc;YAC5B,SAAS,KAAK,YAAY;YAC1B,SAAS,KAAK,cAAc;YAC5B,SAAS,KAAK,WAAW;YACzB,SAAS,KAAK,WAAW,EACzB;YACA,OAAO,IAAI,CAAC;SACb;QAED,kDAAkD;QAClD,2EAA2E;QAC3E,MAAM,UAAU,GAAG,MAAC,KAAa,CAAC,UAAU,mCAAK,KAAa,CAAC,MAAM,CAAC;QAEtE,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;YAClC,+BAA+B;YAC/B,0CAA0C;YAC1C,8BAA8B;YAC9B,oBAAoB;YACpB,4BAA4B;YAC5B,wBAAwB;YACxB,OAAO,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,GAAG,CAAC;SACnH;QAED,2CAA2C;QAC3C,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAtFD,sCAsFC"}

@@ -17,2 +17,6 @@ /**

/**
* Driver name constant for telemetry
*/
export declare const DRIVER_NAME = "nodejs-sql-driver";
/**
* Event types emitted by the telemetry system

@@ -25,3 +29,3 @@ */

CLOUDFETCH_CHUNK = "cloudfetch.chunk",
ERROR = "error"
ERROR = "telemetry.error"
}

@@ -38,4 +42,10 @@ /**

flushIntervalMs?: number;
/** Maximum retry attempts for export */
/** Maximum retry attempts for export (attempts *after* the initial call) */
maxRetries?: number;
/** Minimum backoff delay in ms for retry backoff */
backoffBaseMs?: number;
/** Maximum backoff delay in ms (includes jitter) */
backoffMaxMs?: number;
/** Upper bound of added jitter in ms */
backoffJitterMs?: number;
/** Whether to use authenticated export endpoint */

@@ -47,2 +57,8 @@ authenticatedExport?: boolean;

circuitBreakerTimeout?: number;
/** Maximum number of pending metrics buffered before dropping oldest */
maxPendingMetrics?: number;
/** Maximum number of error events buffered per statement before dropping oldest */
maxErrorsPerStatement?: number;
/** TTL in ms after which abandoned statement aggregations are evicted */
statementTtlMs?: number;
}

@@ -52,3 +68,3 @@ /**

*/
export declare const DEFAULT_TELEMETRY_CONFIG: Required<TelemetryConfiguration>;
export declare const DEFAULT_TELEMETRY_CONFIG: Readonly<Required<TelemetryConfiguration>>;
/**

@@ -59,3 +75,3 @@ * Runtime telemetry event emitted by the driver

/** Type of the event */
eventType: TelemetryEventType | string;
eventType: TelemetryEventType;
/** Timestamp when the event occurred (milliseconds since epoch) */

@@ -93,2 +109,4 @@ timestamp: number;

errorMessage?: string;
/** Stack trace, captured at emission site; redacted before export */
errorStack?: string;
/** Whether the error is terminal (non-retryable) */

@@ -127,2 +145,4 @@ isTerminal?: boolean;

errorMessage?: string;
/** Stack trace, captured at emission site; redacted before export */
errorStack?: string;
}

@@ -143,2 +163,15 @@ /**

osVersion: string;
/** OS architecture (x64, arm64, etc.) */
osArch: string;
/** Runtime vendor (Node.js Foundation) */
runtimeVendor: string;
/** Locale name (e.g., en_US) */
localeName: string;
/** Character set encoding (e.g., UTF-8) */
charSetEncoding: string;
/**
* Process name. Producers MUST pass only a basename (no absolute path) —
* `sanitizeProcessName()` is applied at export time as a defence in depth.
*/
processName: string;
/** Whether CloudFetch is enabled */

@@ -145,0 +178,0 @@ cloudFetchEnabled: boolean;

@@ -18,4 +18,8 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
exports.DEFAULT_TELEMETRY_CONFIG = exports.TelemetryEventType = void 0;
exports.DEFAULT_TELEMETRY_CONFIG = exports.TelemetryEventType = exports.DRIVER_NAME = void 0;
/**
* Driver name constant for telemetry
*/
exports.DRIVER_NAME = 'nodejs-sql-driver';
/**
* Event types emitted by the telemetry system

@@ -29,3 +33,3 @@ */

TelemetryEventType["CLOUDFETCH_CHUNK"] = "cloudfetch.chunk";
TelemetryEventType["ERROR"] = "error";
TelemetryEventType["ERROR"] = "telemetry.error";
})(TelemetryEventType = exports.TelemetryEventType || (exports.TelemetryEventType = {}));

@@ -35,3 +39,3 @@ /**

*/
exports.DEFAULT_TELEMETRY_CONFIG = {
exports.DEFAULT_TELEMETRY_CONFIG = Object.freeze({
enabled: false,

@@ -41,6 +45,12 @@ batchSize: 100,

maxRetries: 3,
backoffBaseMs: 100,
backoffMaxMs: 1000,
backoffJitterMs: 100,
authenticatedExport: true,
circuitBreakerThreshold: 5,
circuitBreakerTimeout: 60000, // 1 minute
};
circuitBreakerTimeout: 60000,
maxPendingMetrics: 500,
maxErrorsPerStatement: 50,
statementTtlMs: 60 * 60 * 1000, // 1 hour
});
//# sourceMappingURL=types.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"types.js","sourceRoot":"","sources":["../../lib/telemetry/types.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;;AAEH;;GAEG;AACH,IAAY,kBAMX;AAND,WAAY,kBAAkB;IAC5B,yDAAmC,CAAA;IACnC,yDAAmC,CAAA;IACnC,+DAAyC,CAAA;IACzC,2DAAqC,CAAA;IACrC,qCAAe,CAAA;AACjB,CAAC,EANW,kBAAkB,GAAlB,0BAAkB,KAAlB,0BAAkB,QAM7B;AA4BD;;GAEG;AACU,QAAA,wBAAwB,GAAqC;IACxE,OAAO,EAAE,KAAK;IACd,SAAS,EAAE,GAAG;IACd,eAAe,EAAE,IAAI;IACrB,UAAU,EAAE,CAAC;IACb,mBAAmB,EAAE,IAAI;IACzB,uBAAuB,EAAE,CAAC;IAC1B,qBAAqB,EAAE,KAAK,EAAE,WAAW;CAC1C,CAAC"}
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../lib/telemetry/types.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;;AAEH;;GAEG;AACU,QAAA,WAAW,GAAG,mBAAmB,CAAC;AAE/C;;GAEG;AACH,IAAY,kBAMX;AAND,WAAY,kBAAkB;IAC5B,yDAAmC,CAAA;IACnC,yDAAmC,CAAA;IACnC,+DAAyC,CAAA;IACzC,2DAAqC,CAAA;IACrC,+CAAyB,CAAA;AAC3B,CAAC,EANW,kBAAkB,GAAlB,0BAAkB,KAAlB,0BAAkB,QAM7B;AA8CD;;GAEG;AACU,QAAA,wBAAwB,GAA+C,MAAM,CAAC,MAAM,CAAC;IAChG,OAAO,EAAE,KAAK;IACd,SAAS,EAAE,GAAG;IACd,eAAe,EAAE,IAAI;IACrB,UAAU,EAAE,CAAC;IACb,aAAa,EAAE,GAAG;IAClB,YAAY,EAAE,IAAI;IAClB,eAAe,EAAE,GAAG;IACpB,mBAAmB,EAAE,IAAI;IACzB,uBAAuB,EAAE,CAAC;IAC1B,qBAAqB,EAAE,KAAK;IAC5B,iBAAiB,EAAE,GAAG;IACtB,qBAAqB,EAAE,EAAE;IACzB,cAAc,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,SAAS;CAC1C,CAAC,CAAC"}

@@ -8,2 +8,3 @@ "use strict";

const version_1 = __importDefault(require("../version"));
const agentDetector_1 = __importDefault(require("./agentDetector"));
const productName = 'NodejsDatabricksSqlConnector';

@@ -30,5 +31,10 @@ function getNodeVersion() {

const extra = [userAgentEntry, getNodeVersion(), getOperatingSystemVersion()].filter(Boolean);
return `${productName}/${version_1.default} (${extra.join('; ')})`;
let ua = `${productName}/${version_1.default} (${extra.join('; ')})`;
const agentProduct = (0, agentDetector_1.default)();
if (agentProduct) {
ua += ` agent/${agentProduct}`;
}
return ua;
}
exports.default = buildUserAgentString;
//# sourceMappingURL=buildUserAgentString.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"buildUserAgentString.js","sourceRoot":"","sources":["../../lib/utils/buildUserAgentString.ts"],"names":[],"mappings":";;;;;AAAA,4CAAoB;AACpB,yDAAwC;AAExC,MAAM,WAAW,GAAG,8BAA8B,CAAC;AAEnD,SAAS,cAAc;IACrB,OAAO,WAAW,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AAC5C,CAAC;AAED,SAAS,yBAAyB;IAChC,OAAO,GAAG,YAAE,CAAC,IAAI,EAAE,IAAI,YAAE,CAAC,OAAO,EAAE,EAAE,CAAC;AACxC,CAAC;AAED,SAAS,mBAAmB,CAAC,cAAsB;IACjD,MAAM,qBAAqB,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IACzE,KAAK,MAAM,MAAM,IAAI,qBAAqB,EAAE;QAC1C,IAAI,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;YACrC,OAAO,YAAY,CAAC;SACrB;KACF;IACD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,SAAwB,oBAAoB,CAAC,cAAuB;IAClE,IAAI,cAAc,EAAE;QAClB,cAAc,GAAG,mBAAmB,CAAC,cAAc,CAAC,CAAC;KACtD;IAED,MAAM,KAAK,GAAG,CAAC,cAAc,EAAE,cAAc,EAAE,EAAE,yBAAyB,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC9F,OAAO,GAAG,WAAW,IAAI,iBAAc,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AAClE,CAAC;AAPD,uCAOC"}
{"version":3,"file":"buildUserAgentString.js","sourceRoot":"","sources":["../../lib/utils/buildUserAgentString.ts"],"names":[],"mappings":";;;;;AAAA,4CAAoB;AACpB,yDAAwC;AACxC,oEAA0C;AAE1C,MAAM,WAAW,GAAG,8BAA8B,CAAC;AAEnD,SAAS,cAAc;IACrB,OAAO,WAAW,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AAC5C,CAAC;AAED,SAAS,yBAAyB;IAChC,OAAO,GAAG,YAAE,CAAC,IAAI,EAAE,IAAI,YAAE,CAAC,OAAO,EAAE,EAAE,CAAC;AACxC,CAAC;AAED,SAAS,mBAAmB,CAAC,cAAsB;IACjD,MAAM,qBAAqB,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IACzE,KAAK,MAAM,MAAM,IAAI,qBAAqB,EAAE;QAC1C,IAAI,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;YACrC,OAAO,YAAY,CAAC;SACrB;KACF;IACD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,SAAwB,oBAAoB,CAAC,cAAuB;IAClE,IAAI,cAAc,EAAE;QAClB,cAAc,GAAG,mBAAmB,CAAC,cAAc,CAAC,CAAC;KACtD;IAED,MAAM,KAAK,GAAG,CAAC,cAAc,EAAE,cAAc,EAAE,EAAE,yBAAyB,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC9F,IAAI,EAAE,GAAG,GAAG,WAAW,IAAI,iBAAc,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;IAElE,MAAM,YAAY,GAAG,IAAA,uBAAW,GAAE,CAAC;IACnC,IAAI,YAAY,EAAE;QAChB,EAAE,IAAI,UAAU,YAAY,EAAE,CAAC;KAChC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAdD,uCAcC"}

@@ -6,2 +6,3 @@ import definedOrError from './definedOrError';

import * as ProtocolVersion from './protocolVersion';
export { definedOrError, buildUserAgentString, formatProgress, ProgressUpdateTransformer, LZ4, ProtocolVersion };
import serializeQueryTags from './queryTags';
export { definedOrError, buildUserAgentString, formatProgress, ProgressUpdateTransformer, LZ4, ProtocolVersion, serializeQueryTags, };

@@ -29,3 +29,3 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
exports.ProtocolVersion = exports.LZ4 = exports.ProgressUpdateTransformer = exports.formatProgress = exports.buildUserAgentString = exports.definedOrError = void 0;
exports.serializeQueryTags = exports.ProtocolVersion = exports.LZ4 = exports.ProgressUpdateTransformer = exports.formatProgress = exports.buildUserAgentString = exports.definedOrError = void 0;
const definedOrError_1 = __importDefault(require("./definedOrError"));

@@ -42,2 +42,4 @@ exports.definedOrError = definedOrError_1.default;

exports.ProtocolVersion = ProtocolVersion;
const queryTags_1 = __importDefault(require("./queryTags"));
exports.serializeQueryTags = queryTags_1.default;
//# sourceMappingURL=index.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"index.js","sourceRoot":"","sources":["../../lib/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,sEAA8C;AAMrC,yBANF,wBAAc,CAME;AALvB,kFAA0D;AAKjC,+BALlB,8BAAoB,CAKkB;AAJ7C,mEAA6E;AAI9B,yBAJxC,wBAAc,CAIwC;AAAE,0GAJtC,0CAAyB,OAIsC;AAHxF,gDAAwB;AAGkE,cAHnF,aAAG,CAGmF;AAF7F,mEAAqD;AAE0C,0CAAe"}
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../lib/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,sEAA8C;AAQ5C,yBARK,wBAAc,CAQL;AAPhB,kFAA0D;AAQxD,+BARK,8BAAoB,CAQL;AAPtB,mEAA6E;AAQ3E,yBARK,wBAAc,CAQL;AACd,0GATuB,0CAAyB,OASvB;AAR3B,gDAAwB;AAStB,cATK,aAAG,CASL;AARL,mEAAqD;AASnD,0CAAe;AARjB,4DAA6C;AAS3C,6BATK,mBAAkB,CASL"}

@@ -1,2 +0,2 @@

declare const _default: "1.13.0";
declare const _default: "1.14.0";
export default _default;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = '1.13.0';
exports.default = '1.14.0';
//# sourceMappingURL=version.js.map
{
"name": "@databricks/sql",
"version": "1.13.0",
"version": "1.14.0",
"description": "Driver for connection to Databricks SQL via Thrift API.",

@@ -5,0 +5,0 @@ "main": "dist/index.js",