openchain-sdk-yxl-ts
Version:
OpenChain SDK for browser
92 lines (76 loc) • 2.04 kB
JavaScript
import errors from '../exception/index.js';
import CommonUtil from '../common/util.js';
class Asset extends CommonUtil {
constructor(options = {}) {
super(options);
if (!(this instanceof Asset)) {
return new Asset(options);
}
}
async getInfo(args) {
try {
if (Array.isArray(args) || typeof args !== 'object' || args === null) {
return this._responseError(errors.INVALID_ARGUMENTS);
}
const { address, code, issuer } = args;
const schema = {
address: {
required: true,
address: true,
},
code: {
required: true,
string: true,
},
issuer: {
required: true,
address: true,
},
};
const validation = this._validate(args, schema);
if (!validation.tag) {
return this._responseError(errors[validation.msg]);
}
const data = await this._request('get', 'getAccountAssets', { address });
if (data.error_code === 0 && data.result?.length > 0) {
const matchingAssets = data.result.filter(item =>
item.key.code === code && item.key.issuer === issuer
);
return this._responseData({
assets: matchingAssets
});
}
return this._responseData({
assets: []
});
} catch (err) {
console.error('Error in getInfo:', err);
throw err;
}
}
// 添加辅助方法用于验证资产参数
_validateAssetParams(params) {
const schema = {
code: {
required: true,
string: true
},
issuer: {
required: true,
address: true
}
};
return this._validate(params, schema);
}
// 添加辅助方法用于格式化资产信息
_formatAssetInfo(assetData) {
if (!assetData) return null;
return {
code: assetData.key?.code,
issuer: assetData.key?.issuer,
amount: assetData.amount,
details: assetData.details || {}
};
}
}
export default Asset;