1
1
import Crypto from 'crypto-js' ;
2
2
3
- import { openOptionsPage } from '~/background/utils/openOptionsPage' ;
4
3
import { exchangeAuthorizationCode } from '~/db/auth.db' ;
5
4
import { isDefined } from '~/utils/isDefined' ;
6
5
7
6
// Open options page programmatically in a new tab.
8
- chrome . runtime . onInstalled . addListener ( ( details ) => {
9
- if ( details . reason === 'install' ) {
10
- openOptionsPage ( ) ;
11
- }
12
- } ) ;
7
+ // chrome.runtime.onInstalled.addListener((details) => {
8
+ // if (details.reason === 'install') {
9
+ // openOptionsPage();
10
+ // }
11
+ // });
13
12
14
- // Open options page when extension icon is clicked.
15
- chrome . action . onClicked . addListener ( ( tab ) => {
16
- chrome . tabs . sendMessage ( tab . id ?? 0 , { action : 'TOGGLE' } ) ;
17
- } ) ;
13
+ chrome . sidePanel . setPanelBehavior ( { openPanelOnActionClick : true } ) ;
18
14
19
15
// This listens for an event from other parts of the extension, such as the content script, and performs the required tasks.
20
16
// The cases themselves are labelled such that their operations are reflected by their names.
21
17
chrome . runtime . onMessage . addListener ( ( message , _ , sendResponse ) => {
22
18
switch ( message . action ) {
23
- case 'getActiveTab' : // e.g. "https://linkedin.com/company/twenty/"
24
- chrome . tabs . query ( { active : true , currentWindow : true } , ( tabs ) => {
25
- if ( isDefined ( tabs ) && isDefined ( tabs [ 0 ] ) ) {
26
- sendResponse ( { tab : tabs [ 0 ] } ) ;
19
+ case 'getActiveTab' : {
20
+ // e.g. "https://linkedin.com/company/twenty/"
21
+ chrome . tabs . query ( { active : true , currentWindow : true } , ( [ tab ] ) => {
22
+ if ( isDefined ( tab ) && isDefined ( tab . id ) ) {
23
+ sendResponse ( { tab } ) ;
27
24
}
28
25
} ) ;
29
26
break ;
30
- case 'openOptionsPage' :
31
- openOptionsPage ( ) ;
32
- break ;
33
- case 'CONNECT' :
27
+ }
28
+ case 'launchOAuth' : {
34
29
launchOAuth ( ( { status, message } ) => {
35
30
sendResponse ( { status, message } ) ;
36
31
} ) ;
37
32
break ;
33
+ }
34
+ case 'openSidepanel' : {
35
+ chrome . tabs . query ( { active : true , currentWindow : true } , ( [ tab ] ) => {
36
+ if ( isDefined ( tab ) && isDefined ( tab . id ) ) {
37
+ chrome . sidePanel . open ( { tabId : tab . id } ) ;
38
+ }
39
+ } ) ;
40
+ break ;
41
+ }
42
+ case 'changeSidepanelUrl' : {
43
+ chrome . tabs . query ( { active : true , currentWindow : true } , ( [ tab ] ) => {
44
+ if ( isDefined ( tab ) && isDefined ( tab . id ) ) {
45
+ chrome . tabs . sendMessage ( tab . id , {
46
+ action : 'changeSidepanelUrl' ,
47
+ message,
48
+ } ) ;
49
+ }
50
+ } ) ;
51
+ break ;
52
+ }
38
53
default :
39
54
break ;
40
55
}
@@ -101,13 +116,16 @@ const launchOAuth = (
101
116
102
117
callback ( { status : true , message : '' } ) ;
103
118
104
- chrome . tabs . query ( { active : true , currentWindow : true } , ( tabs ) => {
105
- if ( isDefined ( tabs ) && isDefined ( tabs [ 0 ] ) ) {
106
- chrome . tabs . sendMessage ( tabs [ 0 ] . id ?? 0 , {
107
- action : 'AUTHENTICATED' ,
108
- } ) ;
109
- }
110
- } ) ;
119
+ chrome . tabs . query (
120
+ { active : true , currentWindow : true } ,
121
+ ( [ tab ] ) => {
122
+ if ( isDefined ( tab ) && isDefined ( tab . id ) ) {
123
+ chrome . tabs . sendMessage ( tab . id , {
124
+ action : 'executeContentScript' ,
125
+ } ) ;
126
+ }
127
+ } ,
128
+ ) ;
111
129
}
112
130
} ) ;
113
131
}
@@ -117,14 +135,22 @@ const launchOAuth = (
117
135
} ) ;
118
136
} ;
119
137
120
- chrome . tabs . onUpdated . addListener ( ( tabId , changeInfo , tab ) => {
138
+ chrome . tabs . onUpdated . addListener ( async ( tabId , _ , tab ) => {
121
139
const isDesiredRoute =
122
140
tab . url ?. match ( / ^ h t t p s ? : \/ \/ (?: w w w \. ) ? l i n k e d i n \. c o m \/ c o m p a n y (?: \/ \S + ) ? / ) ||
123
141
tab . url ?. match ( / ^ h t t p s ? : \/ \/ (?: w w w \. ) ? l i n k e d i n \. c o m \/ i n (?: \/ \S + ) ? / ) ;
124
142
125
- if ( changeInfo . status === 'complete' && tab . active ) {
143
+ if ( tab . active === true ) {
126
144
if ( isDefined ( isDesiredRoute ) ) {
127
145
chrome . tabs . sendMessage ( tabId , { action : 'executeContentScript' } ) ;
128
146
}
129
147
}
148
+
149
+ await chrome . sidePanel . setOptions ( {
150
+ tabId,
151
+ path : tab . url ?. match ( / ^ h t t p s ? : \/ \/ (?: w w w \. ) ? l i n k e d i n \. c o m / )
152
+ ? 'sidepanel.html'
153
+ : 'page-inaccessible.html' ,
154
+ enabled : true ,
155
+ } ) ;
130
156
} ) ;
0 commit comments