Skip to content

Commit 85e608b

Browse files
authored
Salesforce url error and guide (#11421)
* Display Error on Salesforce setup form and fix guide link * Make sure we reload the code_challenge if needed
1 parent dd32410 commit 85e608b

File tree

2 files changed

+61
-36
lines changed

2 files changed

+61
-36
lines changed

front/components/data_source/SalesforceOAuthExtractConfig.tsx

Lines changed: 59 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -13,52 +13,64 @@ export function SalesforceOauthExtraConfig({
1313
setExtraConfig,
1414
setIsExtraConfigValid,
1515
}: ConnectorOauthExtraConfigProps) {
16-
const [pkceLoadingStatus, setPkceLoadingStatus] = useState<
17-
"idle" | "loading" | "error"
18-
>("idle");
16+
const [pkceStatus, setPkceStatus] = useState<{
17+
url: string;
18+
status: "success" | "loading" | "error" | "idle";
19+
}>({
20+
url: "",
21+
status: "idle",
22+
});
1923

2024
useEffect(() => {
2125
async function generatePKCE() {
22-
if (
23-
isValidSalesforceDomain(extraConfig.instance_url) &&
24-
!extraConfig.code_verifier &&
25-
pkceLoadingStatus === "idle"
26-
) {
27-
setPkceLoadingStatus("loading");
28-
try {
29-
const response = await fetch(
30-
`/api/oauth/pkce?domain=${extraConfig.instance_url}`,
31-
{
32-
method: "GET",
33-
headers: {
34-
"Content-Type": "application/json",
35-
},
36-
}
37-
);
38-
if (!response.ok) {
39-
throw new Error("Failed to generate PKCE challenge");
26+
try {
27+
setPkceStatus({
28+
url: extraConfig.instance_url,
29+
status: "loading",
30+
});
31+
const response = await fetch(
32+
`/api/oauth/pkce?domain=${extraConfig.instance_url}`,
33+
{
34+
method: "GET",
35+
headers: {
36+
"Content-Type": "application/json",
37+
},
4038
}
41-
const { code_verifier, code_challenge } = await response.json();
42-
setExtraConfig((extraConfig) => ({
43-
...extraConfig,
44-
code_verifier,
45-
code_challenge,
46-
}));
47-
setPkceLoadingStatus("idle");
48-
} catch (error) {
49-
console.error("Error generating PKCE challenge:", error);
50-
setPkceLoadingStatus("error");
39+
);
40+
if (!response.ok) {
41+
throw new Error("Failed to generate PKCE challenge");
5142
}
43+
const { code_verifier, code_challenge } = await response.json();
44+
setExtraConfig((extraConfig) => ({
45+
...extraConfig,
46+
code_verifier,
47+
code_challenge,
48+
}));
49+
setPkceStatus({
50+
url: extraConfig.instance_url,
51+
status: "success",
52+
});
53+
} catch (error) {
54+
console.error("Error generating PKCE challenge:", error);
55+
setPkceStatus({
56+
url: extraConfig.instance_url,
57+
status: "error",
58+
});
5259
}
5360
}
5461

55-
void generatePKCE();
62+
if (
63+
isValidSalesforceDomain(extraConfig.instance_url) &&
64+
pkceStatus.url !== extraConfig.instance_url
65+
) {
66+
void generatePKCE();
67+
}
5668
}, [
5769
extraConfig.instance_url,
5870
extraConfig.code_verifier,
59-
pkceLoadingStatus,
71+
pkceStatus,
6072
setExtraConfig,
61-
setPkceLoadingStatus,
73+
setPkceStatus,
6274
]);
6375

6476
useEffect(() => {
@@ -74,11 +86,22 @@ export function SalesforceOauthExtraConfig({
7486
);
7587
}, [extraConfig, setIsExtraConfigValid]);
7688

89+
const isErrorUrl =
90+
typeof extraConfig.instance_url === "string" &&
91+
extraConfig.instance_url.length > 0 &&
92+
!isValidSalesforceDomain(extraConfig.instance_url);
93+
94+
const isPkceError = pkceStatus.status === "error";
95+
7796
return (
7897
<>
7998
<Input
8099
label="Salesforce instance URL"
81-
message="The URL of your Salesforce organization instance."
100+
message={
101+
isPkceError
102+
? "Error loading Salesforce OAuth credentials. Check if your url is correct and try again or contact us at [email protected]."
103+
: "Must be a valid Salesforce domain in https and ending with .salesforce.com or .force.com"
104+
}
82105
name="instance_url"
83106
value={extraConfig.instance_url ?? ""}
84107
placeholder="https://my-org.salesforce.com"
@@ -88,6 +111,7 @@ export function SalesforceOauthExtraConfig({
88111
instance_url: e.target.value,
89112
}));
90113
}}
114+
messageStatus={isErrorUrl || isPkceError ? "error" : "default"}
91115
/>
92116
<Input
93117
label="Client ID"

front/lib/connector_providers.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -355,7 +355,8 @@ export const CONNECTOR_CONFIGURATIONS: Record<
355355
unselected: "none",
356356
},
357357
isDeletable: true,
358-
guideLink: "https://docs.dust.tt/docs/salesforce-connection",
358+
guideLink:
359+
"https://www.notion.so/dust-tt/Dust-Salesforce-Connection-Admin-Guide-for-beta-testers-1b428599d94180508c17ed762af5ef90",
359360
},
360361
gong: {
361362
name: "Gong",

0 commit comments

Comments
 (0)