11/* eslint-disable no-bitwise */
2- import { AbstractSigner , Signer } from 'ethers' ;
32import { MagicTeeApiClients } from '@imtbl/generated-clients' ;
43import { Flow , trackDuration } from '@imtbl/metrics' ;
54import { WalletError , WalletErrorType } from '../errors' ;
65import { Auth } from '@imtbl/auth' ;
76import { withMetricsAsync } from '../utils/metrics' ;
8- import { isUserZkEvm , User } from '../types' ;
7+ import { isUserZkEvm , User , WalletSigner } from '../types' ;
98import { isAxiosError } from '../utils/http' ;
109
1110const CHAIN_IDENTIFIER = 'ETH' ;
@@ -58,7 +57,11 @@ const toBase64 = (value: string): string => {
5857 return output ;
5958} ;
6059
61- export default class MagicTEESigner extends AbstractSigner {
60+ /**
61+ * MagicTEESigner implements the WalletSigner interface for Magic TEE-based signing.
62+ * This signer delegates cryptographic operations to the Magic TEE service.
63+ */
64+ export default class MagicTEESigner implements WalletSigner {
6265 private readonly auth : Auth ;
6366
6467 private readonly magicTeeApiClient : MagicTeeApiClients ;
@@ -68,7 +71,6 @@ export default class MagicTEESigner extends AbstractSigner {
6871 private createWalletPromise : Promise < UserWallet > | null = null ;
6972
7073 constructor ( auth : Auth , magicTeeApiClient : MagicTeeApiClients ) {
71- super ( ) ;
7274 this . auth = auth ;
7375 this . magicTeeApiClient = magicTeeApiClient ;
7476 }
@@ -184,19 +186,19 @@ export default class MagicTEESigner extends AbstractSigner {
184186 } ;
185187 }
186188
187- public async getAddress ( ) : Promise < string > {
189+ public async getAddress ( ) : Promise < `0x${ string } ` > {
188190 const userWallet = await this . getUserWallet ( ) ;
189- return userWallet . walletAddress ;
191+ return userWallet . walletAddress as `0x${ string } ` ;
190192 }
191193
192- public async signMessage ( message : string | Uint8Array ) : Promise < string > {
194+ public async signMessage ( message : string | Uint8Array ) : Promise < `0x${ string } ` > {
193195 // Call getUserWallet to ensure that the createWallet endpoint has been called at least once,
194196 // as this is a prerequisite for signing messages.
195197 await this . getUserWallet ( ) ;
196198
197199 const messageToSign = message instanceof Uint8Array ? `0x${ toHex ( message ) } ` : message ;
198200 const user = await this . getUserOrThrow ( ) ;
199- const headers = await MagicTEESigner . getHeaders ( user ) ;
201+ const headers = MagicTEESigner . getHeaders ( user ) ;
200202
201203 return withMetricsAsync ( async ( flow : Flow ) => {
202204 try {
@@ -217,7 +219,7 @@ export default class MagicTEESigner extends AbstractSigner {
217219 Math . round ( performance . now ( ) - startTime ) ,
218220 ) ;
219221
220- return response . data . signature ;
222+ return response . data . signature as `0x${ string } ` ;
221223 } catch ( error ) {
222224 let errorMessage : string = 'MagicTEE: Failed to sign message using EOA' ;
223225
@@ -235,19 +237,4 @@ export default class MagicTEESigner extends AbstractSigner {
235237 }
236238 } , 'magicSignMessage' ) ;
237239 }
238-
239- // eslint-disable-next-line class-methods-use-this
240- connect ( ) : Signer {
241- throw new Error ( 'Method not implemented.' ) ;
242- }
243-
244- // eslint-disable-next-line class-methods-use-this
245- signTransaction ( ) : Promise < string > {
246- throw new Error ( 'Method not implemented.' ) ;
247- }
248-
249- // eslint-disable-next-line class-methods-use-this
250- signTypedData ( ) : Promise < string > {
251- throw new Error ( 'Method not implemented.' ) ;
252- }
253240}
0 commit comments