Skip to content

Commit 27ef6dd

Browse files
committed
refactor: Update Salesforce authentication logic
1 parent e689884 commit 27ef6dd

File tree

2 files changed

+29
-23
lines changed

2 files changed

+29
-23
lines changed

src/services/salesforce/auth.ts

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,28 +5,36 @@ import { Logger } from "@/utils/types";
55
const createSalesforceAuth = (opts: ConnectionOptions, logger: Logger) => {
66
return {
77
async authenticate(): Promise<Connection> {
8-
return new Promise<Connection>(async (resolve, reject) => {
9-
logger.info("Authenticating/Reauthenticating to Salesforce");
10-
const client = new Connection(opts);
11-
12-
const data = await client.oauth2.refreshToken(opts.refreshToken, (err, res) => {
13-
if (err) {
14-
logger.error({ message: "Error authenticating to Salesforce" });
15-
reject(err);
16-
}
8+
logger.info("Authenticating/Reauthenticating to Salesforce");
9+
10+
// Create the initial connection using full credentials.
11+
// Make sure opts includes refreshToken, clientId, and clientSecret.
12+
const client = new Connection(opts);
13+
14+
try {
15+
// Wrap the callback-based refreshToken method into a Promise.
16+
const data = await new Promise<any>((resolve, reject) => {
17+
client.oauth2.refreshToken(opts.refreshToken, (err, res) => {
18+
if (err) {
19+
logger.error({ message: "Error refreshing token", err });
20+
return reject(err);
21+
}
22+
resolve(res);
23+
});
1724
});
1825

19-
logger.debug(`Salesforce OAuth2 Refreshed: ${JSON.stringify(data, null, 2)}`);
20-
21-
const newClient = new Connection({
22-
accessToken: data.access_token,
23-
instanceUrl: data["instance_url"],
24-
});
26+
// Instead of creating a new connection, update the existing connection.
27+
client.accessToken = data.access_token;
28+
client.instanceUrl = data.instance_url;
2529

30+
logger.debug(`Salesforce OAuth2 Refreshed: ${JSON.stringify(data, null, 2)}`);
2631
logger.info("Authentication/Reauthentication Successful");
2732

28-
resolve(newClient);
29-
});
33+
return client;
34+
} catch (err) {
35+
logger.error({ message: "Error authenticating to Salesforce", err });
36+
throw err;
37+
}
3038
},
3139
};
3240
};

src/services/salesforce/service.ts

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,39 @@
11
import { Connection, ConnectionOptions } from "jsforce";
22

3-
import redisService from "@/services/redis/service";
43
import createSalesforceAuth from "@/services/salesforce/auth";
54
import createSalesforceMutations from "@/services/salesforce/mutations";
65
import createSalesforceQueries from "@/services/salesforce/query";
76
import createSalesforceStream from "@/services/salesforce/stream";
87
import createLogger from "@/utils/logger";
98
import { SalesforceServiceType } from "@/utils/types";
109

11-
/**
12-
* Create a singleton SalesforceService instance. Handles automatic authentication
13-
* and re-authentication to Salesforce APIs, making it suitable for long-running processes.
14-
*/
15-
1610
const logger = createLogger("Salesforce Service");
1711

1812
const createSalesforceService = async (params: ConnectionOptions): Promise<SalesforceServiceType> => {
1913
try {
14+
// Authenticate using our auth helper.
2015
const client = await createSalesforceAuth(params, logger).authenticate();
2116

2217
if (!client) {
2318
throw new Error("Failed to authenticate with Salesforce");
2419
}
2520

21+
// Attach a listener for token refresh events.
2622
client.on("refresh", async (accessToken: string, res: any) => {
2723
logger.debug(`Salesforce OAuth2 Refreshed: ${JSON.stringify(accessToken, null, 2)}`);
2824
});
2925

3026
logger.info("Salesforce connection established");
3127

28+
// Return the service object with query, mutation, and stream methods.
3229
return {
3330
query: createSalesforceQueries(client, logger),
3431
mutation: createSalesforceMutations(client, logger),
3532
stream: createSalesforceStream(client, logger),
3633
};
3734
} catch (err) {
3835
logger.error({ message: "Error authenticating to Salesforce", err });
36+
throw err;
3937
}
4038
};
4139

0 commit comments

Comments
 (0)