diff --git a/.changeset/pink-files-grin.md b/.changeset/pink-files-grin.md new file mode 100644 index 00000000000..8f6be4b7416 --- /dev/null +++ b/.changeset/pink-files-grin.md @@ -0,0 +1,5 @@ +--- +"@thirdweb-dev/wallets": patch +--- + +Add signTypedData to AwsKmsWallet diff --git a/packages/wallets/src/evm/wallets/aws-kms.ts b/packages/wallets/src/evm/wallets/aws-kms.ts index b3a460ed737..1483e1d2ab4 100644 --- a/packages/wallets/src/evm/wallets/aws-kms.ts +++ b/packages/wallets/src/evm/wallets/aws-kms.ts @@ -1,5 +1,5 @@ import { AbstractWallet } from "./abstract"; -import type { Signer } from "ethers"; +import { ethers, TypedDataDomain, type Signer, TypedDataField } from "ethers"; import type { AwsKmsSignerCredentials } from "ethers-aws-kms-signer"; /** @@ -44,7 +44,23 @@ export class AwsKmsWallet extends AbstractWallet { this.#signer = new Promise(async (resolve, reject) => { try { const { AwsKmsSigner } = await import("ethers-aws-kms-signer"); - resolve(new AwsKmsSigner(this.#options)); + const signer = new AwsKmsSigner(this.#options); + + // Need to add this because ethers-aws-kms-signer doesn't support + (signer as any)._signTypedData = async function ( + domain: TypedDataDomain, + types: Record>, + value: Record, + ) { + const hash = ethers.utils._TypedDataEncoder.hash( + domain, + types, + value, + ); + return signer._signDigest(hash); + }; + + resolve(signer); } catch (err) { // remove the cached promise so we can try again this.#signer = undefined;