UNPKG

openchain-sdk-yxl-ts

Version:

OpenChain SDK for browser

205 lines (172 loc) 5.54 kB
import { keypair } from 'openchain-encryption-nodejs-yxl-ts'; // import errors from '../exception/index.js'; import CommonUtil from '../common/util.js'; class Account extends CommonUtil { constructor(options = {}) { super(options); if (!(this instanceof Account)) { return new Account(options); } } async create() { try { const kp = keypair.getKeyPair(); return this._responseData({ privateKey: kp.encPrivateKey, publicKey: kp.encPublicKey, address: kp.address, }); } catch (err) { console.error('Error in create:', err); return this._responseError(this.options.errors.ACCOUNT_CREATE_ERROR); } } async checkValid(address) { try { const isValid = keypair.checkAddress(address); return this._responseData({ isValid }); } catch (err) { console.error('Error in checkValid:', err); return this._responseError(this.options.errors.INVALID_ADDRESS_ERROR); } } async getInfo(address) { if (!keypair.checkAddress(address)) { return this._responseError(this.options.errors.INVALID_ADDRESS_ERROR); } try { const res = await this._request('get', 'getAccount', { address }); if (res.error_code !== 0) { return this._responseError(this.options.errors.ACCOUNT_NOT_EXIST); } return this._responseData({ ...res.result, nonce: res.result.nonce || 0, }); } catch (err) { console.error('Error in getInfo:', err); return this._responseError(this.options.errors.INVALID_ADDRESS_ERROR); } } async getBalance(address) { if (!keypair.checkAddress(address)) { return this._responseError(this.options.errors.INVALID_ADDRESS_ERROR); } try { const info = await this.getInfo(address); console.log('getBalance', info); if (info.errorCode === 0) { return this._responseData({ balance: info.result.balance, }); } return this._responseError(this.options.errors.INVALID_ADDRESS_ERROR); } catch (err) { console.error('Error in getBalance:', err); return this._responseError(this.options.errors.INVALID_ADDRESS_ERROR); } } async getNonce(address) { if (!keypair.checkAddress(address)) { return this._responseError(this.options.errors.INVALID_ADDRESS_ERROR); } try { const info = await this.getInfo(address); console.log('getNonce', info); if (info.errorCode === 0) { return this._responseData({ nonce: info.result.nonce, }); } return this._responseError(this.options.errors.INVALID_ADDRESS_ERROR); } catch (err) { console.error('Error in getNonce:', err); return this._responseError(this.options.errors.INVALID_ADDRESS_ERROR); } } async getAssets(address) { if (!keypair.checkAddress(address)) { return this._responseError(this.options.errors.INVALID_ADDRESS_ERROR); } try { const info = await this.getInfo(address); if (info.errorCode === 0) { return this._responseData({ assets: info.result.assets, }); } return this._responseError(this.options.errors.ACCOUNT_NOT_EXIST); } catch (err) { console.error('Error in getAssets:', err); return this._responseError(this.options.errors.ACCOUNT_NOT_EXIST); } } async getMetadata(args) { if (Array.isArray(args) || typeof args !== 'object' || args === null) { return this._responseError(this.options.errors.INVALID_ARGUMENTS); } const schema = { address: { required: true, address: true, }, key: { required: true, string: true, }, }; if (!this._validate(args, schema).tag) { return this._responseError(this.options.errors.INVALID_ARGUMENTS); } try { const info = await this._request('get', 'getAccount', { address: args.address, key: args.key }); if (info.error_code !== 0) { return this._responseError(this.options.errors.ACCOUNT_NOT_EXIST); } const { metadatas } = info.result; const metadata = {}; if (metadatas?.length > 0) { const found = metadatas.find(item => item.key === args.key); if (found) { metadata.key = found.key; metadata.value = found.value; metadata.version = found.version; } } return this._responseData({ metadata }); } catch (err) { console.error('Error in getMetadata:', err); return this._responseError(this.options.errors.ACCOUNT_NOT_EXIST); } } async isActivated(address) { if (address === undefined) { return this._responseError(this.options.errors.INVALID_ARGUMENTS); } if (!keypair.checkAddress(address)) { return this._responseError(this.options.errors.INVALID_ADDRESS_ERROR); } const schema = { address: { required: true, address: true, }, }; if (!this._validate({ address }, schema).tag) { return this._responseError(this.options.errors.INVALID_ARGUMENTS); } try { const info = await this._request('get', 'getAccount', { address }); return this._responseData({ isActivated: info.error_code === 0 }); } catch (err) { console.error('Error in isActivated:', err); return this._responseError(this.options.errors.ACCOUNT_NOT_EXIST); } } } export default Account;