@keypo/typescript-sdk-server
Version:
Server-side SDK for Keypo with custom decrypt and proxy execute implementations
110 lines • 4.08 kB
JavaScript
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
;