Skip to content

Commit 2a0ea50

Browse files
authored
Merge pull request #493 from ethereum/graceful-salesforce-disabled
Gracefully handle missing Salesforce credentials
2 parents 7c663ab + cd333c2 commit 2a0ea50

File tree

1 file changed

+22
-0
lines changed

1 file changed

+22
-0
lines changed

src/lib/sf/index.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,12 @@ const {
1717
export const WISHLIST_RECORD_TYPE_ID = '012Vj000008tfPKIAY';
1818
export const RFP_RECORD_TYPE_ID = '012Vj000008tfPJIAY';
1919

20+
const SALESFORCE_ENABLED = !!(SF_PROD_LOGIN_URL && SF_PROD_USERNAME && SF_PROD_PASSWORD && SF_PROD_SECURITY_TOKEN);
21+
22+
if (!SALESFORCE_ENABLED) {
23+
console.warn('Salesforce credentials not configured. See .env.local.example for required variables.');
24+
}
25+
2026
/**
2127
* Generate a JWT token for CSAT submission
2228
* @param applicationId - The Salesforce Application ID
@@ -57,6 +63,10 @@ export const createConnection = (): jsforce.Connection => {
5763

5864
export const loginToSalesforce = (conn: jsforce.Connection): Promise<void> => {
5965
return new Promise((resolve, reject) => {
66+
if (!SALESFORCE_ENABLED) {
67+
return reject(new Error('Salesforce integration disabled'));
68+
}
69+
6070
conn.login(SF_PROD_USERNAME!, `${SF_PROD_PASSWORD}${SF_PROD_SECURITY_TOKEN}`, err => {
6171
if (err) {
6272
console.error('Salesforce login error:', err);
@@ -177,6 +187,9 @@ export function getGrantInitiativeItems(type?: GrantInitiativeType) {
177187
return resolve(grantInitiativeItems);
178188
});
179189
} catch (error) {
190+
if (!SALESFORCE_ENABLED) {
191+
return resolve([]);
192+
}
180193
return reject(error);
181194
}
182195
});
@@ -208,6 +221,9 @@ export const createSalesforceRecord = async (
208221
resolve({ id: ret.id, success: ret.success });
209222
});
210223
} catch (error) {
224+
if (!SALESFORCE_ENABLED) {
225+
return resolve({ id: `MOCK_${objectType}_${Date.now()}`, success: true });
226+
}
211227
console.error(`Error in create${objectType}:`, error);
212228
reject(error);
213229
}
@@ -242,6 +258,9 @@ export const updateSalesforceRecord = async (
242258
resolve({ id: ret.id, success: ret.success });
243259
});
244260
} catch (error) {
261+
if (!SALESFORCE_ENABLED) {
262+
return resolve({ id, success: true });
263+
}
245264
console.error(`Error in update${objectType}:`, error);
246265
reject(error);
247266
}
@@ -325,6 +344,9 @@ export const uploadFileToSalesforce = async (
325344
}
326345
);
327346
} catch (error) {
347+
if (!SALESFORCE_ENABLED) {
348+
return resolve({ success: true, contentDocumentId: `MOCK_DOC_${Date.now()}` });
349+
}
328350
console.error('Error in uploadFileToSalesforce:', error);
329351
reject(error);
330352
}

0 commit comments

Comments
 (0)