UNPKG

@cenoa/waas-js-sdk

Version:

Official Cenoa Wallet as a Service SDK

145 lines (144 loc) 7.08 kB
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; import { ethers } from 'ethers'; import Errors from '../errors'; import { apiHelper } from '../api'; import EncryptionHelper from './encryption/EncryptionHelper'; var WalletManager; (function (WalletManager) { function createPartnerWallet() { var _a; return __awaiter(this, void 0, void 0, function* () { // generate a random wallet const wallet = ethers.Wallet.createRandom(); // send the partner wallet address to the server yield setPartnerWallet({ walletAddress: wallet.address }); return { address: wallet.address, partnerPrivateKey: wallet.privateKey, mnemonicPhrase: (_a = wallet.mnemonic) === null || _a === void 0 ? void 0 : _a.phrase, }; }); } WalletManager.createPartnerWallet = createPartnerWallet; function setPartnerWallet(payload) { if (!(payload === null || payload === void 0 ? void 0 : payload.walletAddress)) { throw new Errors.InvalidWalletAddressError(); } return apiHelper.setPartnerWallet(payload); } WalletManager.setPartnerWallet = setPartnerWallet; function getPartnerWallet() { return __awaiter(this, void 0, void 0, function* () { const partnerWalletResp = yield apiHelper.getPartnerWallet(); return { address: partnerWalletResp.data.walletAddress, balance: partnerWalletResp.data.walletBalanceInUSDC, usdcEBalance: partnerWalletResp.data.usdcEBalance, usdcNativeBalance: partnerWalletResp.data.usdcNativeBalance, currency: 'USDC', }; }); } WalletManager.getPartnerWallet = getPartnerWallet; function createUserWallet(payload) { var _a; return __awaiter(this, void 0, void 0, function* () { if (!(payload === null || payload === void 0 ? void 0 : payload.cenoaUserId)) { throw new Errors.InvalidCenoaUserIdError(); } // generate a random wallet const wallet = ethers.Wallet.createRandom(); // send the wallet address to the server // get the key encryption key (KEK) for the user's wallet const walletEncryptionSecret = yield setUserWallet({ cenoaUserId: payload.cenoaUserId, walletAddress: wallet.address, }); const clientWalletData = { address: wallet.address, clientPrivateKey: wallet.privateKey, mnemonicPhrase: (_a = wallet.mnemonic) === null || _a === void 0 ? void 0 : _a.phrase, }; // encrypt the wallet data with the KEK const clientWalletKey = EncryptionHelper.encryptData(clientWalletData, walletEncryptionSecret.data); return Object.assign(Object.assign({}, clientWalletData), { clientWalletKey }); }); } WalletManager.createUserWallet = createUserWallet; function setUserWallet(payload) { if (!(payload === null || payload === void 0 ? void 0 : payload.cenoaUserId)) { throw new Errors.InvalidCenoaUserIdError(); } if (!(payload === null || payload === void 0 ? void 0 : payload.walletAddress)) { throw new Errors.InvalidWalletAddressError(); } return apiHelper.setUserWallet(payload); } WalletManager.setUserWallet = setUserWallet; function getUserWallet(payload) { return __awaiter(this, void 0, void 0, function* () { if (!(payload === null || payload === void 0 ? void 0 : payload.cenoaUserId)) { throw new Errors.InvalidCenoaUserIdError(); } const userWalletResp = yield apiHelper.getUserWallet(payload); return { address: userWalletResp.data.walletAddress, balance: userWalletResp.data.walletBalanceInUSDC, usdcEBalance: userWalletResp.data.usdcEBalance, usdcNativeBalance: userWalletResp.data.usdcNativeBalance, currency: 'USDC', }; }); } WalletManager.getUserWallet = getUserWallet; function getUserWalletSecret(payload) { if (!(payload === null || payload === void 0 ? void 0 : payload.cenoaUserId)) { throw new Errors.InvalidCenoaUserIdError(); } return apiHelper.getUserWalletSecret(payload); } WalletManager.getUserWalletSecret = getUserWalletSecret; function generateWalletWithPrivateKey(payload) { if (!(payload === null || payload === void 0 ? void 0 : payload.privateKey)) { throw new Errors.InvalidPrivateKeyError(); } // create a wallet with the provided private key const wallet = new ethers.Wallet(payload.privateKey); return wallet; } WalletManager.generateWalletWithPrivateKey = generateWalletWithPrivateKey; function generateWalletWithClientWalletKey(payload) { return __awaiter(this, void 0, void 0, function* () { if (!(payload === null || payload === void 0 ? void 0 : payload.cenoaUserId)) { throw new Errors.InvalidCenoaUserIdError(); } if (!(payload === null || payload === void 0 ? void 0 : payload.clientWalletKey)) { throw new Errors.InvalidClientWalletKeyError(); } // get the key encryption key (KEK) for the user const walletEncryptionSecret = yield getUserWalletSecret({ cenoaUserId: payload.cenoaUserId, }); // decrypt the wallet data with the KEK const decryptedWalletData = EncryptionHelper.decryptData(payload.clientWalletKey, walletEncryptionSecret.data); // decrypt the wallet private key with the KEK const decryptedPrivateKey = decryptedWalletData.clientPrivateKey; if (!decryptedPrivateKey) { throw new Errors.InvalidPrivateKeyError(); } // create a wallet with the decrypted private key const wallet = new ethers.Wallet(decryptedPrivateKey); return wallet; }); } WalletManager.generateWalletWithClientWalletKey = generateWalletWithClientWalletKey; })(WalletManager || (WalletManager = {})); export default WalletManager;