@dapix/react-native-fio
Version:
The FIO react-native-fio SDK communicates with the FIO Blockchain.
106 lines (105 loc) • 4.53 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
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) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
class Transactions {
constructor() {
this.publicKey = '';
this.privateKey = '';
this.serilizeEndpoint = "chain/serialize_json";
}
getActor(publicKey = '') {
const actor = Transactions.FioProvider.accountHash((publicKey == '') ? this.publicKey : publicKey);
return actor;
}
getChainInfo() {
return __awaiter(this, void 0, void 0, function* () {
let options = {
method: 'GET',
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
}
};
const res = yield Transactions.fetchJson(Transactions.baseUrl + 'chain/get_info', options);
return res;
});
}
getBlock(chain) {
return __awaiter(this, void 0, void 0, function* () {
if (chain == undefined) {
throw new Error("chain undefined");
}
if (chain.last_irreversible_block_num == undefined) {
throw new Error("chain.last_irreversible_block_num undefined");
}
const res = yield Transactions.fetchJson(Transactions.baseUrl + 'chain/get_block', {
method: 'POST',
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify({
block_num_or_id: chain.last_irreversible_block_num
})
});
return res;
});
}
pushToServer(transaction, endpoint, dryRun) {
return __awaiter(this, void 0, void 0, function* () {
const privky = new Array();
privky.push(this.privateKey);
let chain = yield this.getChainInfo().catch((error) => console.error("chain:: " + error));
let block = yield this.getBlock(chain).catch((error) => console.error("block: " + error));
transaction.ref_block_num = block.block_num & 0xFFFF;
transaction.ref_block_prefix = block.ref_block_prefix;
let expiration = new Date(block.timestamp + "Z");
expiration.setSeconds(expiration.getSeconds() + 120);
let expirationStr = expiration.toISOString();
transaction.expiration = expirationStr.substr(0, expirationStr.length - 1);
if (dryRun) {
return Transactions.FioProvider.prepareTransaction({
transaction, chainId: chain.chain_id, privateKeys: privky, abiMap: Transactions.abiMap,
textDecoder: new TextDecoder(), textEncoder: new TextEncoder()
});
}
else {
const signedTransaction = yield Transactions.FioProvider.prepareTransaction({
transaction, chainId: chain.chain_id, privateKeys: privky, abiMap: Transactions.abiMap,
textDecoder: new TextDecoder(), textEncoder: new TextEncoder()
});
return this.executeCall(endpoint, JSON.stringify(signedTransaction));
}
});
}
executeCall(endPoint, body, fetchOptions) {
let options;
if (fetchOptions != null) {
options = fetchOptions;
if (body != null) {
options.body = body;
}
}
else {
options = {
method: 'POST',
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
},
body: body
};
}
const res = Transactions.fetchJson(Transactions.baseUrl + endPoint, options);
return res;
}
}
Transactions.abiMap = new Map();
exports.Transactions = Transactions;