@@ -185,20 +185,48 @@ export class ApprovalsService {
185185 resolvers . reject ( new Error ( "Sign Tx rejected" ) ) ;
186186 }
187187
188- async isConnectionApproved ( interfaceOrigin : string ) : Promise < boolean > {
188+ async isConnectionApproved (
189+ interfaceOrigin : string ,
190+ chainId ?: string
191+ ) : Promise < boolean > {
189192 const approvedOrigins =
190193 ( await this . localStorage . getApprovedOrigins ( ) ) || [ ] ;
191194
195+ if ( chainId ) {
196+ const currentChainId = await this . chainService . getChain ( ) ;
197+ if ( chainId !== currentChainId ) {
198+ return false ;
199+ }
200+ }
201+
192202 return approvedOrigins . includes ( interfaceOrigin ) ;
193203 }
194204
195- async approveConnection ( interfaceOrigin : string ) : Promise < void > {
196- const alreadyApproved = await this . isConnectionApproved ( interfaceOrigin ) ;
205+ async approveConnection (
206+ interfaceOrigin : string ,
207+ chainId ?: string
208+ ) : Promise < void > {
209+ const alreadyApproved = await this . isConnectionApproved (
210+ interfaceOrigin ,
211+ chainId
212+ ) ;
213+
214+ const approveConnectionPopupProps : {
215+ interfaceOrigin : string ;
216+ chainId ?: string ;
217+ } = {
218+ interfaceOrigin,
219+ } ;
220+
221+ if ( chainId ) {
222+ approveConnectionPopupProps [ "chainId" ] = chainId ;
223+ }
197224
198225 if ( ! alreadyApproved ) {
199- return this . launchApprovalPopup ( TopLevelRoute . ApproveConnection , {
200- interfaceOrigin,
201- } ) ;
226+ return this . launchApprovalPopup (
227+ TopLevelRoute . ApproveConnection ,
228+ approveConnectionPopupProps
229+ ) ;
202230 }
203231
204232 // A resolved promise is implicitly returned here if the origin had
@@ -208,13 +236,26 @@ export class ApprovalsService {
208236 async approveConnectionResponse (
209237 popupTabId : number ,
210238 interfaceOrigin : string ,
211- allowConnection : boolean
239+ allowConnection : boolean ,
240+ chainId ?: string
212241 ) : Promise < void > {
213242 const resolvers = this . getResolver ( popupTabId ) ;
214243
215244 if ( allowConnection ) {
216245 try {
217- await this . localStorage . addApprovedOrigin ( interfaceOrigin ) ;
246+ if (
247+ ! ( await this . localStorage . getApprovedOrigins ( ) ) ?. includes (
248+ interfaceOrigin
249+ )
250+ ) {
251+ // Add approved origin if it hasn't been added
252+ await this . localStorage . addApprovedOrigin ( interfaceOrigin ) ;
253+ }
254+
255+ if ( chainId ) {
256+ // Set approved signing chainId
257+ await this . chainService . updateChain ( chainId ) ;
258+ }
218259 } catch ( e ) {
219260 resolvers . reject ( e ) ;
220261 }
@@ -224,8 +265,14 @@ export class ApprovalsService {
224265 }
225266 }
226267
227- async approveDisconnection ( interfaceOrigin : string ) : Promise < void > {
228- const isConnected = await this . isConnectionApproved ( interfaceOrigin ) ;
268+ async approveDisconnection (
269+ interfaceOrigin : string ,
270+ chainId ?: string
271+ ) : Promise < void > {
272+ const isConnected = await this . isConnectionApproved (
273+ interfaceOrigin ,
274+ chainId
275+ ) ;
229276
230277 if ( isConnected ) {
231278 return this . launchApprovalPopup ( TopLevelRoute . ApproveDisconnection , {
0 commit comments