Line data Source code
1 : import type { ConnectorDescriptor } from '../connector_descriptor.js';
2 : import { CONNECTOR_INFOS, ConnectorType, SALESFORCE_DATA_CLOUD_CONNECTOR, SIDB_CONNECTOR } from '../connector_info.js';
3 : import { SALESFORCE_CATALOG_DATABASE, SALESFORCE_CATALOG_SCHEMA, SIDB_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 :
7 : /// Salesforce Data Cloud connections
8 1 : export const SALESFORCE_CONNECTOR_DESCRIPTOR: ConnectorDescriptor<'salesforce'> = {
9 1 : info: CONNECTOR_INFOS[ConnectorType.SALESFORCE_DATA_CLOUD],
10 1 : paramsKey: 'salesforce',
11 1 : detailsType: SALESFORCE_DATA_CLOUD_CONNECTOR,
12 1 : defaultParams: () => ({ instanceUrl: '', appConsumerKey: '', appConsumerSecret: '', login: '' }),
13 1 : createDetails: createSalesforceConnectionStateDetails,
14 1 : reduce: reduceSalesforceConnectionState,
15 1 : withoutDraftRows: params => params,
16 : // Keep instanceUrl, appConsumerKey and the login hint; drop the connected-app secret.
17 1 : sanitizeForSharing: (params, withLoginHint) => ({ ...params, appConsumerSecret: "", ...(withLoginHint ? {} : { login: "" }) }),
18 1 : loginHint: params => params.login || null,
19 : // The login stays out, another user of the same org reuses the cached results
20 1 : cacheSignature: params => ({
21 1 : case: "salesforce",
22 1 : instanceUrl: params.instanceUrl,
23 1 : appConsumerKey: params.appConsumerKey,
24 1 : }),
25 1 : catalogNameDefaults: () => ({ databaseName: SALESFORCE_CATALOG_DATABASE, schemaName: SALESFORCE_CATALOG_SCHEMA }),
26 1 : executeQuery: (details, args, abort) => requireChannel(args.channelOverride?.type === 'salesforce' ? args.channelOverride.channel : details.channel, 'Salesforce')
27 0 : .executeQuery(queryParam(args), abort),
28 1 : maxConcurrentQueries: () => 1,
29 1 : catalogIsDurable: () => true,
30 1 : readsAttachments: () => false,
31 1 : };
32 :
33 : /// SIDB connections, they behave like Salesforce Data Cloud connections for now
34 1 : export const SIDB_CONNECTOR_DESCRIPTOR: ConnectorDescriptor<'sidb'> = {
35 1 : ...SALESFORCE_CONNECTOR_DESCRIPTOR,
36 1 : info: CONNECTOR_INFOS[ConnectorType.SIDB],
37 1 : paramsKey: 'sidb',
38 1 : detailsType: SIDB_CONNECTOR,
39 1 : defaultParams: () => ({ ...SALESFORCE_CONNECTOR_DESCRIPTOR.defaultParams(), databaseName: SIDB_DEFAULT_DATABASE_NAME }),
40 1 : cacheSignature: params => ({
41 0 : ...SALESFORCE_CONNECTOR_DESCRIPTOR.cacheSignature(params) as object,
42 0 : case: "sidb",
43 0 : databaseName: params.databaseName || SIDB_DEFAULT_DATABASE_NAME,
44 0 : }),
45 1 : executeQuery: (details, args, abort) => requireChannel(args.channelOverride?.type === 'salesforce' ? args.channelOverride.channel : details.channel, 'SIDB')
46 0 : .executeQuery(queryParam(args), abort),
47 1 : };
|