@dapix/react-native-fio
Version:
The FIO react-native-fio SDK communicates with the FIO Blockchain.
189 lines (188 loc) • 9.13 kB
JavaScript
"use strict";
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 });
const Transactions_1 = require("./transactions/Transactions");
const queries = require("./transactions/queries");
const SignedTransactions = require("./transactions/signed");
const constants_1 = require("./utils/constants");
const MockRegisterFioAddress_1 = require("./transactions/signed/MockRegisterFioAddress");
const { Ecc } = require('@dapix/fiojs');
const fiojs_1 = require("@dapix/fiojs");
class FIOSDK {
constructor(privateKey, publicKey, baseUrl, io, fetchjson, registerMockUrl = '') {
this.transactions = new Transactions_1.Transactions();
this.io = io;
Transactions_1.Transactions.baseUrl = baseUrl;
Transactions_1.Transactions.FioProvider = fiojs_1.Fio;
Transactions_1.Transactions.io = io;
Transactions_1.Transactions.fetchJson = fetchjson;
this.registerMockUrl = registerMockUrl;
this.privateKey = privateKey;
this.publicKey = publicKey;
for (let accountName of constants_1.Constants.rawAbiAccountName) {
this.getAbi(accountName).then(response => {
Transactions_1.Transactions.abiMap.set(response.account_name, response);
}).catch(error => {
throw error;
});
}
}
static createPrivateKey(entropy) {
return __awaiter(this, void 0, void 0, function* () {
const hdkey = require('hdkey');
const wif = require('wif');
const bip39 = require('bip39');
const mnemonic = bip39.entropyToMnemonic(entropy);
const seedBytes = yield bip39.mnemonicToSeed(mnemonic);
const seed = yield seedBytes.toString('hex');
const master = hdkey.fromMasterSeed(new Buffer(seed, 'hex'));
const node = master.derive("m/44'/235'/0'/0/0");
const fioKey = wif.encode(128, node._privateKey, false);
return { fioKey, mnemonic };
});
}
static derivedPublicKey(fioKey) {
const publicKey = Ecc.privateToPublic(fioKey, 'FIO');
return { publicKey };
}
getActor() {
return Transactions_1.Transactions.FioProvider.accountHash(this.publicKey);
}
getFioPublicKey() {
return this.publicKey;
}
registerFioAddress(fioAddress) {
let registerFioAddress = new SignedTransactions.RegisterFioAddress(fioAddress);
return registerFioAddress.execute(this.privateKey, this.publicKey);
}
registerFioDomain(fioDomain) {
let registerFioDomain = new SignedTransactions.RegisterFioDomain(fioDomain);
return registerFioDomain.execute(this.privateKey, this.publicKey);
}
addPublicAddress(fioAddress, tokenCode, publicAddress, maxFee) {
let addPublicAddress = new SignedTransactions.AddPublicAddress(fioAddress, tokenCode, publicAddress, maxFee);
return addPublicAddress.execute(this.privateKey, this.publicKey);
}
recordSend(fioReqID = '', payerFIOAddress, payeeFIOAddress, payerPublicAddress, payeePublicAddress, amount, tokenCode, obtID, memo, maxFee) {
let recordSend = new SignedTransactions.RecordSend(fioReqID, payerFIOAddress, payeeFIOAddress, payerPublicAddress, payeePublicAddress, amount, tokenCode, obtID, memo, maxFee);
return recordSend.execute(this.privateKey, this.publicKey);
}
rejectFundsRequest(fioRequestId, maxFee) {
let rejectFundsRequest = new SignedTransactions.RejectFundsRequest(fioRequestId, maxFee);
return rejectFundsRequest.execute(this.privateKey, this.publicKey);
}
requestFunds(payerFioAddress, payeeFioAddress, payeePublicAddress, amount, tokenCode, metaData, maxFee) {
let requestNewFunds = new SignedTransactions.RequestNewFunds(payerFioAddress, payeeFioAddress, payeePublicAddress, tokenCode, amount, metaData, maxFee);
return requestNewFunds.execute(this.privateKey, this.publicKey);
}
isAvailable(fioName) {
let availabilityCheck = new queries.AvailabilityCheck(fioName);
return availabilityCheck.execute(this.publicKey);
}
getFioBalance() {
let getFioBalance = new queries.GetFioBalance();
return getFioBalance.execute(this.publicKey);
}
getFioNames(fioPublicKey) {
let getNames = new queries.GetNames(fioPublicKey);
return getNames.execute(this.publicKey);
}
getPendingFioRequests(fioPublicKey) {
let pendingFioRequests = new queries.PendingFioRequests(fioPublicKey);
return pendingFioRequests.execute(this.publicKey);
}
getSentFioRequests(fioPublicKey) {
let sentFioRequest = new queries.SentFioRequests(fioPublicKey);
return sentFioRequest.execute(this.publicKey);
}
getPublicAddress(fioAddress, tokenCode) {
let publicAddressLookUp = new queries.PublicAddressLookUp(fioAddress, tokenCode);
return publicAddressLookUp.execute(this.publicKey);
}
transferTokens(payeePublicKey, amount, maxFee, dryRun = false) {
let transferTokens = new SignedTransactions.TransferTokens(payeePublicKey, amount, maxFee);
return transferTokens.execute(this.privateKey, this.publicKey, dryRun);
}
getFee(endPoint, fioAddress = "") {
let fioFee = new queries.GetFee(endPoint, fioAddress);
return fioFee.execute(this.publicKey);
}
getAbi(accountName) {
let abi = new queries.GetAbi(accountName);
return abi.execute(this.publicKey);
}
registerFioAddressOnBehalfOfUser(fioAddress, publicKey) {
let server = this.registerMockUrl; // "mock.dapix.io/mockd/DEV2"
let mockRegisterFioAddress = new MockRegisterFioAddress_1.MockRegisterFioAddress(fioAddress, publicKey, server);
return mockRegisterFioAddress.execute();
}
getMultiplier() {
return constants_1.Constants.multiplier;
}
genericAction(action, params) {
switch (action) {
case 'getActor':
return this.getActor();
break;
case 'getFioPublicKey':
return this.getFioPublicKey();
break;
case 'registerFioAddress':
return this.registerFioAddress(params.fioAddress);
break;
case 'registerFioDomain':
return this.registerFioDomain(params.FioDomain);
break;
case 'addPublicAddress':
return this.addPublicAddress(params.fioAddress, params.tokenCode, params.publicAddress, params.maxFee);
break;
case 'recordSend':
return this.recordSend(params.fioReqID, params.payerFIOAddress, params.payeeFIOAddress, params.payerPublicAddress, params.payeePublicAddress, params.amount, params.tokenCode, params.obtID, params.memo, params.maxFee);
break;
case 'rejectFundsRequest':
return this.rejectFundsRequest(params.fioRequestId, params.maxFee);
break;
case 'requestFunds':
return this.requestFunds(params.payerFioAddress, params.payeeFioAddress, params.payeePublicAddress, params.amount, params.tokenCode, params.metaData, params.maxFee);
break;
case 'isAvailable':
return this.isAvailable(params.fioName);
break;
case 'getFioBalance':
return this.getFioBalance();
break;
case 'getFioNames':
return this.getFioNames(params.fioPublicKey);
break;
case 'getPendingFioRequests':
return this.getPendingFioRequests(params.fioPublicKey);
break;
case 'getSentFioRequests':
return this.getSentFioRequests(params.fioPublicKey);
break;
case 'getPublicAddress':
return this.getPublicAddress(params.fioAddress, params.tokenCode);
break;
case 'transferTokens':
return this.transferTokens(params.payeePublicKey, params.amount, params.maxFee);
break;
case 'getAbi':
return this.getAbi(params.accountName);
break;
case 'getFee':
return this.getFee(params.endPoint, params.fioAddress);
break;
case 'getMultiplier':
return this.getMultiplier();
break;
}
}
}
exports.FIOSDK = FIOSDK;