@@ -13,52 +13,64 @@ export function SalesforceOauthExtraConfig({
13
13
setExtraConfig,
14
14
setIsExtraConfigValid,
15
15
} : 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
+ } ) ;
19
23
20
24
useEffect ( ( ) => {
21
25
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
+ } ,
40
38
}
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" ) ;
51
42
}
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
+ } ) ;
52
59
}
53
60
}
54
61
55
- void generatePKCE ( ) ;
62
+ if (
63
+ isValidSalesforceDomain ( extraConfig . instance_url ) &&
64
+ pkceStatus . url !== extraConfig . instance_url
65
+ ) {
66
+ void generatePKCE ( ) ;
67
+ }
56
68
} , [
57
69
extraConfig . instance_url ,
58
70
extraConfig . code_verifier ,
59
- pkceLoadingStatus ,
71
+ pkceStatus ,
60
72
setExtraConfig ,
61
- setPkceLoadingStatus ,
73
+ setPkceStatus ,
62
74
] ) ;
63
75
64
76
useEffect ( ( ) => {
@@ -74,11 +86,22 @@ export function SalesforceOauthExtraConfig({
74
86
) ;
75
87
} , [ extraConfig , setIsExtraConfigValid ] ) ;
76
88
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
+
77
96
return (
78
97
< >
79
98
< Input
80
99
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
+ }
82
105
name = "instance_url"
83
106
value = { extraConfig . instance_url ?? "" }
84
107
placeholder = "https://my-org.salesforce.com"
@@ -88,6 +111,7 @@ export function SalesforceOauthExtraConfig({
88
111
instance_url : e . target . value ,
89
112
} ) ) ;
90
113
} }
114
+ messageStatus = { isErrorUrl || isPkceError ? "error" : "default" }
91
115
/>
92
116
< Input
93
117
label = "Client ID"
0 commit comments