Line data Source code
1 : import type { ConnectorDescriptor } from '../connector_descriptor.js';
2 : import { CONNECTOR_INFOS, ConnectorType, SALESFORCE_DATA_CLOUD_CONNECTOR, DBCOM_CONNECTOR } from '../connector_info.js';
3 : import { SALESFORCE_CATALOG_DATABASE, SALESFORCE_CATALOG_SCHEMA, HYPER_CLOUD_DEFAULT_DATABASE_NAME } from './salesforce_catalog_update.js';
4 : import { createSalesforceConnectionStateDetails, reduceSalesforceConnectionState } from './salesforce_connection_state.js';
5 : import { queryParam, requireChannel } from '../query_channel.js';
6 : import { SALESFORCE_CLIENT_FUNCTIONS } from './salesforce_client_functions.js';
7 :
8 : /// Salesforce Data Cloud connections
9 1 : export const SALESFORCE_CONNECTOR_DESCRIPTOR: ConnectorDescriptor<'salesforce'> = {
10 1 : info: CONNECTOR_INFOS[ConnectorType.SALESFORCE_DATA_CLOUD],
11 1 : paramsKey: 'salesforce',
12 1 : detailsType: SALESFORCE_DATA_CLOUD_CONNECTOR,
13 1 : defaultParams: () => ({ instanceUrl: '', appConsumerKey: '', appConsumerSecret: '', login: '' }),
14 1 : createDetails: createSalesforceConnectionStateDetails,
15 1 : reduce: reduceSalesforceConnectionState,
16 1 : withoutDraftRows: params => params,
17 : // Keep instanceUrl, appConsumerKey and the login hint; drop the connected-app secret.
18 1 : sanitizeForSharing: (params, withLoginHint) => ({ ...params, appConsumerSecret: "", ...(withLoginHint ? {} : { login: "" }) }),
19 1 : loginHint: params => params.login || null,
20 : // The login stays out, another user of the same org reuses the cached results
21 1 : cacheSignature: params => ({
22 1 : case: "salesforce",
23 1 : instanceUrl: params.instanceUrl,
24 1 : appConsumerKey: params.appConsumerKey,
25 1 : }),
26 1 : catalogNameDefaults: () => ({ databaseName: SALESFORCE_CATALOG_DATABASE, schemaName: SALESFORCE_CATALOG_SCHEMA }),
27 1 : executeQuery: (details, args, abort) => requireChannel(args.channelOverride?.type === 'salesforce' ? args.channelOverride.channel : details.channel, 'Salesforce')
28 0 : .executeQuery(queryParam(args), abort),
29 1 : maxConcurrentQueries: () => 1,
30 1 : catalogIsDurable: () => true,
31 1 : readsAttachments: () => false,
32 1 : clientFunctions: SALESFORCE_CLIENT_FUNCTIONS,
33 1 : };
34 :
35 : /// Database.com connections, they behave like Salesforce Data Cloud connections for now
36 1 : export const DBCOM_CONNECTOR_DESCRIPTOR: ConnectorDescriptor<'dbcom'> = {
37 1 : ...SALESFORCE_CONNECTOR_DESCRIPTOR,
38 1 : info: CONNECTOR_INFOS[ConnectorType.DBCOM],
39 1 : paramsKey: 'dbcom',
40 1 : detailsType: DBCOM_CONNECTOR,
41 1 : defaultParams: () => ({ ...SALESFORCE_CONNECTOR_DESCRIPTOR.defaultParams(), databaseName: HYPER_CLOUD_DEFAULT_DATABASE_NAME }),
42 : // It isn't known whether Database.com has the Data 360 API
43 1 : clientFunctions: undefined,
44 1 : cacheSignature: params => ({
45 0 : ...SALESFORCE_CONNECTOR_DESCRIPTOR.cacheSignature(params) as object,
46 0 : case: "dbcom",
47 0 : databaseName: params.databaseName || HYPER_CLOUD_DEFAULT_DATABASE_NAME,
48 0 : }),
49 1 : executeQuery: (details, args, abort) => requireChannel(args.channelOverride?.type === 'salesforce' ? args.channelOverride.channel : details.channel, 'Database.com')
50 0 : .executeQuery(queryParam(args), abort),
51 1 : };
|