Line data Source code
1 : import * as dashql from '@ankoh/dashql-core';
2 : import * as connection from '@ankoh/dashql-jsonschema/connection.js';
3 :
4 : import { ConnectionStateDetailsVariant } from './connection_state_details.js';
5 : import { LoggableException } from '../platform/logger/logger.js';
6 : import { CONNECTOR_INFOS, ConnectorInfo, ConnectorType, HYPER_CONNECTOR, SALESFORCE_DATA_CLOUD_CONNECTOR, SIDB_CONNECTOR, TRINO_CONNECTOR } from './connector_info.js';
7 : import { ConnectionState, createConnectionState } from './connection_state.js';
8 : import type { ConnectionParams } from './connection_params.js';
9 1 : const LOG_CTX = "connection";
10 :
11 1 : export function decodeConnectionFromProto(conn: connection.Connection, sessionId: string): [ConnectorInfo, ConnectionStateDetailsVariant] {
12 1 : if ('salesforce' in conn) {
13 1 : const info: ConnectorInfo = CONNECTOR_INFOS[ConnectorType.SALESFORCE_DATA_CLOUD];
14 : // Storage persists ConnectionParams (flat SalesforceConnectionParams),
15 : // not the Details wrapper. Normalize so proto.setupParams is populated.
16 1 : const sf = conn.salesforce as any;
17 1 : const proto = sf?.setupParams
18 1 : ? sf
19 1 : : { setupTimings: {}, setupParams: sf ?? {} };
20 : const details: ConnectionStateDetailsVariant = {
21 1 : type: SALESFORCE_DATA_CLOUD_CONNECTOR,
22 1 : value: {
23 1 : proto,
24 1 : channel: null,
25 1 : }
26 : };
27 1 : return [info, details];
28 1 : } else if ('sidb' in conn) {
29 1 : const info: ConnectorInfo = CONNECTOR_INFOS[ConnectorType.SIDB];
30 1 : const sidb = conn.sidb as any;
31 1 : const proto = sidb?.setupParams
32 1 : ? sidb
33 1 : : { setupTimings: {}, setupParams: sidb ?? {} };
34 : const details: ConnectionStateDetailsVariant = {
35 1 : type: SIDB_CONNECTOR,
36 1 : value: {
37 1 : proto,
38 1 : channel: null,
39 1 : }
40 : };
41 1 : return [info, details];
42 1 : } else if ('hyper' in conn) {
43 1 : const info: ConnectorInfo = CONNECTOR_INFOS[ConnectorType.HYPER];
44 1 : const hy = conn.hyper as any;
45 1 : const proto = hy?.setupParams
46 1 : ? hy
47 1 : : { setupTimings: {}, setupParams: hy ?? {} };
48 : const details: ConnectionStateDetailsVariant = {
49 1 : type: HYPER_CONNECTOR,
50 1 : value: {
51 1 : proto,
52 1 : channel: null,
53 1 : }
54 : };
55 1 : return [info, details];
56 1 : } else if ('trino' in conn) {
57 1 : const info: ConnectorInfo = CONNECTOR_INFOS[ConnectorType.TRINO];
58 1 : const tr = conn.trino as any;
59 1 : const proto = tr?.setupParams
60 1 : ? tr
61 1 : : { setupTimings: {}, setupParams: tr ?? {} };
62 : const details: ConnectionStateDetailsVariant = {
63 1 : type: TRINO_CONNECTOR,
64 1 : value: {
65 1 : proto,
66 1 : channel: null,
67 1 : }
68 : };
69 1 : return [info, details];
70 1 : } else {
71 1 : throw new LoggableException("unsupported connection details", { sessionId }, LOG_CTX);
72 : }
73 1 : }
74 :
75 1 : export function restoreConnectionState(instance: dashql.DashQL, connectionId: string, info: ConnectorInfo, details: ConnectionStateDetailsVariant, paramsDraft?: ConnectionParams): ConnectionState {
76 1 : return { ...createConnectionState(instance, info, details, { active: true, paramsDraft }), connectionId };
77 1 : }
|