UNPKG

@keypo/typescript-sdk-server

Version:

Server-side SDK for Keypo with custom decrypt and proxy execute implementations

110 lines 4.08 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.clientToSigner = clientToSigner; exports.clientToProvider = clientToProvider; const ethers_1 = require("ethers"); /** * Custom ethers signer that wraps a viem wallet client */ class ViemSigner extends ethers_1.Signer { constructor(client, provider) { super(); this.client = client; this.provider = provider; } async getAddress() { return this.client.account.address; } async signMessage(message) { console.log("[DEBUG] ViemSigner.signMessage called with:", { message, type: typeof message }); let messageHex; if (typeof message === 'string') { // Convert string to hex messageHex = `0x${Buffer.from(message, 'utf8').toString('hex')}`; } else { // Convert Uint8Array to hex messageHex = `0x${Buffer.from(message).toString('hex')}`; } console.log("[DEBUG] ViemSigner.signMessage - messageHex:", messageHex); const signature = await this.client.signMessage({ message: { raw: messageHex }, account: this.client.account.address }); console.log("[DEBUG] ViemSigner.signMessage - signature:", signature); return signature; } async signTransaction(transaction) { // This would need to be implemented based on your specific needs throw new Error('signTransaction not implemented'); } connect(provider) { return new ViemSigner(this.client, provider); } } /** * Custom provider that wraps viem's transport for ethers compatibility */ class ViemProvider extends ethers_1.providers.JsonRpcProvider { constructor(client, network) { super('', network); this.client = client; } async send(method, params) { // Handle signing locally instead of through RPC if (method === 'personal_sign') { const [message, address] = params; console.log("[DEBUG] ViemProvider.send - personal_sign called with:", { message, address }); const signature = await this.client.signMessage({ message: { raw: message }, account: address }); console.log("[DEBUG] ViemProvider.send - personal_sign signature:", signature); return signature; } // For other RPC calls, use the transport const requestFn = this.client.transport.request || this.client.transport.transport?.request; if (!requestFn) { throw new Error('Unable to access transport request function'); } return await requestFn({ method, params }); } } /** * Converts a Viem Client to an ethers.js Signer * @param client - The viem wallet client * @returns An ethers v5 signer */ function clientToSigner(client) { console.log("[DEBUG] clientToSigner called with client:", { account: client.account?.address, chain: client.chain?.name }); const { account, chain } = client; const network = { chainId: chain.id, name: chain.name, ensAddress: chain.contracts?.ensRegistry?.address, }; const provider = new ViemProvider(client, network); const signer = new ViemSigner(client, provider); console.log("[DEBUG] clientToSigner created ViemSigner:", signer); return signer; } /** * Converts a Viem Client to an ethers.js Provider * @param client - The viem client * @returns An ethers v5 provider */ function clientToProvider(client) { const { chain, transport } = client; const network = { chainId: chain.id, name: chain.name, ensAddress: chain.contracts?.ensRegistry?.address, }; if (transport.type === 'fallback') return new ethers_1.providers.FallbackProvider(transport.transports.map(({ value }) => new ethers_1.providers.JsonRpcProvider(value?.url, network))); return new ethers_1.providers.JsonRpcProvider(transport.url, network); } //# sourceMappingURL=ethersAdapter.js.map