UNPKG

wehelpjs

Version:

wehelpjs is the JavaScript API Library for the WeYouMe blockchain

119 lines (90 loc) 4.36 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _bluebird = _interopRequireDefault(require("bluebird")); var _debug = _interopRequireDefault(require("debug")); var _helpers = _interopRequireDefault(require("./helpers")); var _formatter = _interopRequireDefault(require("../formatter")); var _operations = _interopRequireDefault(require("./operations")); var _api = _interopRequireDefault(require("../api")); var _auth = _interopRequireDefault(require("../auth")); var _utils = require("../utils"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const debug = (0, _debug.default)('api:broadcast'); const noop = function () {}; const formatter = (0, _formatter.default)(_api.default); const apiBroadcast = {}; // Base transaction logic ----------------------------------------------------- /** * Sign and broadcast transactions on a Protocol Specific Network */ apiBroadcast.send = function apiBroadcast$send(tx, privKeys, callback) { const resultP = apiBroadcast._prepareTransaction(tx).then(transaction => { debug('Signing transaction (transaction, transaction.operations)', transaction, transaction.operations); return _bluebird.default.join(transaction, _auth.default.signTransaction(transaction, privKeys)); }).spread((transaction, signedTransaction) => { debug('Broadcasting transaction (transaction, transaction.operations)', transaction, transaction.operations); return _api.default.broadcastTransactionSynchronousAsync(signedTransaction).then(result => { return Object.assign({}, result, signedTransaction); }); }); resultP.nodeify(callback || noop); }; apiBroadcast._prepareTransaction = function apiBroadcast$_prepareTransaction(tx) { const propertiesP = _api.default.getDynamicGlobalPropertiesAsync(); return propertiesP.then(properties => { // Set defaults on the transaction const chainDate = new Date(properties.time + 'Z'); const refBlockNum = properties.last_irreversible_block_num - 1 & 0xFFFF; return _api.default.getBlockAsync(properties.last_irreversible_block_num).then(block => { const headBlockId = block.previous; return Object.assign({ ref_block_num: refBlockNum, ref_block_prefix: new Buffer(headBlockId, 'hex').readUInt32LE(4), expiration: new Date(chainDate.getTime() + 600 * 1000) }, tx); }); }); }; // Generated wrapper ---------------------------------------------------------- // Generate operations from operations.json _operations.default.forEach(operation => { const operationName = (0, _utils.camelCase)(operation.operation); const operationParams = operation.params || []; const useCommentPermlink = operationParams.indexOf('parent_permlink') !== -1 && operationParams.indexOf('parent_permlink') !== -1; apiBroadcast[`${operationName}With`] = function apiBroadcast$specializedSendWith(wif, options, callback) { debug(`Sending operation "${operationName}" with`, { options, callback }); const keys = {}; if (operation.roles && operation.roles.length) { keys[operation.roles[0]] = wif; // TODO - Automatically pick a role? Send all? } return apiBroadcast.send({ extensions: [], operations: [[operation.operation, Object.assign({}, options, options.json != null ? { json: toString(options.json) } : {}, useCommentPermlink && options.permlink == null ? { permlink: formatter.commentPermlink(options.parent_author, options.parent_permlink) } : {})]] }, keys, callback); }; apiBroadcast[operationName] = function apiBroadcast$specializedSend(wif, ...args) { debug(`Parsing operation "${operationName}" with`, { args }); const options = operationParams.reduce((memo, param, i) => { memo[param] = args[i]; // eslint-disable-line no-param-reassign return memo; }, {}); const callback = args[operationParams.length]; return apiBroadcast[`${operationName}With`](wif, options, callback); }; }); const toString = obj => typeof obj === 'object' ? JSON.stringify(obj) : obj; (0, _helpers.default)(apiBroadcast); _bluebird.default.promisifyAll(apiBroadcast); exports = module.exports = apiBroadcast; var _default = apiBroadcast; exports.default = _default;