@thirdweb-dev/wallets
Version:
<p align="center"> <br /> <a href="https://thirdweb.com"><img src="https://github.com/thirdweb-dev/js/blob/main/legacy_packages/sdk/logo.svg?raw=true" width="200" alt=""/></a> <br /> </p> <h1 align="center">thirdweb Wallet SDK</h1> <p align="center"> <a h
78 lines (73 loc) • 2.34 kB
JavaScript
import { AbstractWallet } from '../../abstract/dist/thirdweb-dev-wallets-evm-wallets-abstract.browser.esm.js';
import { ethers } from 'ethers';
import { AwsKmsSigner } from 'ethers-aws-kms-signer';
import '../../../../dist/defineProperty-350fc508.browser.esm.js';
import 'eventemitter3';
import '@thirdweb-dev/sdk';
class AwsSigner extends AwsKmsSigner {
constructor(options, provider) {
super(options);
// @ts-expect-error Allow passing null
ethers.utils.defineReadOnly(this, "provider", provider || null);
this._options = options;
}
async _signTypedData(domain, types, value) {
const hash = ethers.utils._TypedDataEncoder.hash(domain, types, value);
return this._signDigest(hash);
}
connect(provider) {
const newSigner = super.connect(provider);
newSigner._signTypedData = this._signTypedData;
return newSigner;
}
}
/**
* Connect to a custodial wallet with a signing key in [AWS Key Management Service](https://aws.amazon.com/kms/).
*
* In order to instantiate an AWS KMS wallet, you need to get the relevant credentials for the AWS KMS key that you want to use.
*
* @example
* ```js
* import { AwsKmsWallet } from "@thirdweb-dev/wallets/evm/wallets/aws-kms";
*
* const wallet = new AwsKmsWallet({
* region: "us-east-1",
* accessKeyId: process.env.AWS_ACCESS_KEY_ID,
* secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
* sessionToken: process.env.AWS_SESSION_TOKEN,
* keyId: process.env.AWS_KEY_ID,
* });
* ```
*
* @wallet
*/
class AwsKmsWallet extends AbstractWallet {
/**
* Create instance of `AwsKmsWallet`
* @param options -
* The `options` object of type `AwsKmsSignerCredentials` from `ethers-aws-kms-signer` package
*/
constructor(options) {
super();
this._options = options;
}
/**
* Get [ethers signer](https://docs.ethers.io/v5/api/signer/) of the connected wallet
*/
async getSigner() {
if (!this._signer) {
this._signer = new Promise(async (resolve, reject) => {
try {
const signer = new AwsSigner(this._options);
resolve(signer);
} catch (err) {
// remove the cached promise so we can try again
this._signer = undefined;
reject(err);
}
});
}
return this._signer;
}
}
export { AwsKmsWallet, AwsSigner };