Allow selecting HTTP transport in DBSQLClient.connect()
Nobody has claimed this yet.
Assessment
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Newbie friendliness
- 72/100
- Issue type
- Feature
- Clarity
- Mostly clear
- Activity status
- Active
- Tech stack
- node.js, typescript
- Domain
- api, networking
Research direction
Start with lib/contracts/IDBSQLClient.ts and lib/DBSQLClient.ts, then inspect the existing HTTP transport tests and the HTTP proxy E2E test. Confirm the public connection options expose the agreed transport setting, HTTPS remains the default, and an explicit HTTP selection reaches the existing connection implementation without the private-method workaround.
Written by the indexing model from the issue text.
Description
Summary
Please expose the existing HTTP transport support through the public DBSQLClient.connect() options.
I would be happy to submit a PR implementing this change if the maintainers agree with the proposed direction and public API.
The lower-level connection implementation supports both HTTP and HTTPS, but DBSQLClient currently hardcodes HTTPS.
Motivation
Some deployments connect to Databricks through a trusted local or internal reverse proxy, sidecar, or gateway:
Application --HTTP--> Internal proxy --HTTPS--> Databricks
In our concrete setup, authentication is also handled at the proxy level. The proxy injects the Databricks bearer token, while the application intentionally provides no authorization header.
This authentication arrangement is only one use case. The general issue is that callers cannot select the transport protocol for the endpoint supplied to DBSQLClient.
The existing proxy option does not address this scenario because it represents a forward proxy using CONNECT semantics, rather than a reverse proxy exposed as the Databricks endpoint.
Current behavior
The public ConnectionOptions type in lib/contracts/IDBSQLClient.ts does not expose an HTTP/HTTPS option.
Additionally, DBSQLClient.getConnectionOptions() in lib/DBSQLClient.ts hardcodes:
https: true,
Consequently, passing an untyped https: false value does not work: it is discarded and the client still connects using an https:// URL.
The internal implementation already appears to support the requested behavior:
IConnectionOptionsincludeshttps?: booleanHttpConnectionselects eitherhttp.Agentorhttps.AgentHttpConnectionconstructs either anhttp://orhttps://URL- existing tests exercise the HTTP behavior
- the HTTP proxy E2E test overrides
getConnectionOptions()to sethttps = false
Proposed API
Expose the existing option publicly while preserving HTTPS as the default:
await client.connect({
host: 'localhost',
port: 3015,
path: '/proxy/databricks/sql/1.0/warehouses/<warehouse-id>',
https: false,
authType: 'custom',
provider: {
async authenticate() {
return {};
},
},
});
The implementation could map it as follows:
https: options.https ?? true,
Alternatively, a more explicit public option could be introduced:
protocol?: 'http' | 'https';
HTTPS should remain the default, and HTTP should require explicit opt-in.
Current workaround
We currently override the private connection-options mapper:
type PublicConnectionOptions = Parameters<DBSQLClient['connect']>[0];
type InternalConnectionOptions = {
https?: boolean;
[key: string]: unknown;
};
type ClientConnectionOptionsFactory = {
getConnectionOptions(
options: PublicConnectionOptions,
): InternalConnectionOptions;
};
const client = new DBSQLClient();
const internalClient =
client as unknown as ClientConnectionOptionsFactory;
const getConnectionOptions =
internalClient.getConnectionOptions.bind(client);
internalClient.getConnectionOptions = (options) => ({
...getConnectionOptions(options),
https: false,
});
This works end to end and preserves the driver's normal connection handling, but it relies on a private method and may break between releases.
Security considerations
Plain HTTP should be documented as appropriate only for trusted local or private-network connections.
In our setup:
- the application-to-proxy connection is local/internal
- the proxy injects the Databricks token at the proxy layer
- the application does not send Databricks credentials over HTTP
- the proxy-to-Databricks connection uses HTTPS
Environment
@databricks/sql: 2.0.0
- Dominant language
- TypeScript
- Stars
- 36
- Forks
- 50
- Avg merge
- 13h 46m
- Merged PRs (30d)
- 9
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from databricks/databricks-sql-nodejs
-
engineer-bot
Difficulty 2/5 1-3 hours Newbie friendliness 64/100
databricks/databricks-sql-nodejs#274 · 1 comment · 1 reaction ·
-
Difficulty 3/5 1-2 days Newbie friendliness 68/100
-
Difficulty 4/5 3-5 days Newbie friendliness 35/100
-
Difficulty 4/5 3-5 days Newbie friendliness 48/100
-
Difficulty 4/5 3-5 days Newbie friendliness 52/100
All issues in databricks/databricks-sql-nodejs
Similar issues
-
calcite-components needs triage refactor
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
Esri/calcite-design-system#15203 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 91/100
-
community first-timers-only good first issue hacktoberfest help wanted low hanging fruit up-for-grabs
Difficulty 1/5 Under an hour Newbie friendliness 95/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
Automattic/studio#4908 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 90/100