@ton.js/core
Version:
TonWeb - JavaScript API for TON blockchain
87 lines • 2.9 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.HttpProviderUtils = void 0;
const bn_js_1 = __importDefault(require("bn.js"));
const cell_1 = require("../boc/cell");
const base64_1 = require("../utils/base64");
/**
* @todo: extract all the static methods as individual functions
* there is no need to use class for this
*/
class HttpProviderUtils {
/**
* @todo: improve typing
*/
static parseObject(obj) {
const typeName = obj['@type'];
switch (typeName) {
case 'tvm.list':
case 'tvm.tuple':
return obj.elements.map(HttpProviderUtils.parseObject);
case 'tvm.stackEntryTuple':
return HttpProviderUtils.parseObject(obj.tuple);
case 'tvm.stackEntryNumber':
return HttpProviderUtils.parseObject(obj.number);
case 'tvm.numberDecimal':
return new bn_js_1.default(obj.number, 10);
default:
throw new Error('unknown type ' + typeName);
}
}
/**
* @todo: improve typing
*/
static parseResponseStack(pair) {
const typeName = pair[0];
const value = pair[1];
switch (typeName) {
case 'num':
return new bn_js_1.default(value.replace(/0x/, ''), 16);
case 'list':
case 'tuple':
return HttpProviderUtils.parseObject(value);
case 'cell':
const contentBytes = (0, base64_1.base64ToBytes)(value.bytes);
return cell_1.Cell.oneFromBoc(contentBytes);
default:
throw new Error(`Failed to parse response stack, ` +
`unknown type: ${typeName}`);
}
}
/**
* @todo: improve typing
*/
static parseResponse(result) {
if (result.exit_code !== 0) {
// @todo: use custom error class
const error = new Error('Failed to parse response');
error.result = result;
throw error;
}
const arr = (result.stack
.map(HttpProviderUtils.parseResponseStack));
return (arr.length === 1 ? arr[0] : arr);
}
/**
* @todo: function is unused: use or remove it
*/
static makeArg(arg) {
if (bn_js_1.default.isBN(arg) || typeof arg === 'number') {
return ['num', arg];
}
else {
throw new Error(`Unknown argument type: ${arg}`);
}
}
/**
* @todo: function is unused: use or remove it
*/
static makeArgs(args) {
return args.map(this.makeArg);
}
}
exports.HttpProviderUtils = HttpProviderUtils;
//# sourceMappingURL=http-provider-utils.js.map