@@ -14,7 +14,7 @@ export async function setupIntercom(
14
14
return ;
15
15
}
16
16
17
- const { enableFeedbackPanel } = preferences . getPreferences ( ) ;
17
+ const { enableFeedbackPanel, networkTraffic } = preferences . getPreferences ( ) ;
18
18
19
19
const intercomAppId = process . env . HADRON_METRICS_INTERCOM_APP_ID ;
20
20
@@ -25,11 +25,6 @@ export async function setupIntercom(
25
25
return ;
26
26
}
27
27
28
- if ( ! ( await isIntercomAllowed ( ) ) ) {
29
- debug ( 'skipping Intercom (not allowed)' ) ;
30
- return ;
31
- }
32
-
33
28
const user = getActiveUser ( preferences ) ;
34
29
35
30
const metadata : IntercomMetadata = {
@@ -41,7 +36,19 @@ export async function setupIntercom(
41
36
app_stage : process . env . NODE_ENV ,
42
37
} ;
43
38
44
- if ( enableFeedbackPanel ) {
39
+ async function toggleEnableFeedbackPanel ( enableFeedbackPanel : boolean ) {
40
+ if ( enableFeedbackPanel ) {
41
+ if ( await isIntercomAllowed ( networkTraffic ) ) {
42
+ debug ( 'loading intercom script' ) ;
43
+ intercomScript . load ( metadata ) ;
44
+ }
45
+ } else {
46
+ debug ( 'unloading intercom script' ) ;
47
+ intercomScript . unload ( ) ;
48
+ }
49
+ }
50
+
51
+ if ( enableFeedbackPanel && ( await isIntercomAllowed ( networkTraffic ) ) ) {
45
52
// In some environment the network can be firewalled, this is a safeguard to avoid
46
53
// uncaught errors when injecting the script.
47
54
debug ( 'testing intercom availability' ) ;
@@ -59,29 +66,18 @@ export async function setupIntercom(
59
66
}
60
67
61
68
debug ( 'intercom is reachable, proceeding with the setup' ) ;
69
+ void toggleEnableFeedbackPanel ( true ) ;
62
70
} else {
63
71
debug (
64
- 'not testing intercom connectivity because enableFeedbackPanel == false'
72
+ 'not testing intercom connectivity because enableFeedbackPanel == false || isAllowed == false '
65
73
) ;
66
74
}
67
75
68
- const toggleEnableFeedbackPanel = ( enableFeedbackPanel : boolean ) => {
69
- if ( enableFeedbackPanel ) {
70
- debug ( 'loading intercom script' ) ;
71
- intercomScript . load ( metadata ) ;
72
- } else {
73
- debug ( 'unloading intercom script' ) ;
74
- intercomScript . unload ( ) ;
75
- }
76
- } ;
77
-
78
- toggleEnableFeedbackPanel ( ! ! enableFeedbackPanel ) ;
79
-
80
76
preferences . onPreferenceValueChanged (
81
77
'enableFeedbackPanel' ,
82
78
( enableFeedbackPanel ) => {
83
79
debug ( 'enableFeedbackPanel changed' ) ;
84
- toggleEnableFeedbackPanel ( enableFeedbackPanel ) ;
80
+ void toggleEnableFeedbackPanel ( enableFeedbackPanel ) ;
85
81
}
86
82
) ;
87
83
}
@@ -92,18 +88,20 @@ export async function setupIntercom(
92
88
*/
93
89
let isIntercomAllowedResponse : null | Promise < boolean > = null ;
94
90
95
- function isIntercomAllowed ( ) : Promise < boolean > {
91
+ function isIntercomAllowed ( allowNetworkTraffic = true ) : Promise < boolean > {
96
92
if ( ! isIntercomAllowedResponse ) {
97
- isIntercomAllowedResponse = fetchIntegrations ( ) . then (
98
- ( { intercom } ) => intercom ,
99
- ( error ) => {
100
- debug (
101
- 'Failed to fetch intercom integration status, defaulting to false' ,
102
- { error : error instanceof Error && error . message }
103
- ) ;
104
- return false ;
105
- }
106
- ) ;
93
+ isIntercomAllowedResponse = allowNetworkTraffic
94
+ ? fetchIntegrations ( ) . then (
95
+ ( { intercom } ) => intercom ,
96
+ ( error ) => {
97
+ debug (
98
+ 'Failed to fetch intercom integration status, defaulting to false' ,
99
+ { error : error instanceof Error && error . message }
100
+ ) ;
101
+ return false ;
102
+ }
103
+ )
104
+ : Promise . resolve ( false ) ;
107
105
}
108
106
return isIntercomAllowedResponse ;
109
107
}
0 commit comments