123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- "use strict";
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
- 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) : adopt(result.value).then(fulfilled, rejected); }
- step((generator = generator.apply(thisArg, _arguments || [])).next());
- });
- };
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.getFaucetUrl = exports.FaucetNetwork = void 0;
- const https = require("https");
- const common_1 = require("../common");
- const schema_validator_1 = require("../common/schema-validator");
- const errors_1 = require("../common/errors");
- var FaucetNetwork;
- (function (FaucetNetwork) {
- FaucetNetwork["Testnet"] = "faucet.altnet.rippletest.net";
- FaucetNetwork["Devnet"] = "faucet.devnet.rippletest.net";
- })(FaucetNetwork = exports.FaucetNetwork || (exports.FaucetNetwork = {}));
- const INTERVAL_SECONDS = 1;
- const MAX_ATTEMPTS = 20;
- function generateFaucetWallet(address) {
- return __awaiter(this, void 0, void 0, function* () {
- if (!this.isConnected())
- throw new errors_1.RippledError("RippleAPI not connected, cannot call faucet");
- let body;
- let startingBalance = 0;
- let faucetUrl = getFaucetUrl(this);
- if (address && schema_validator_1.isValidAddress(address)) {
- body = new TextEncoder().encode(JSON.stringify({
- destination: address
- }));
- const addressToFundBalance = yield getAddressXrpBalance(this, address);
- if (addressToFundBalance && !isNaN(+addressToFundBalance)) {
- startingBalance = +addressToFundBalance;
- }
- else {
- startingBalance = 0;
- }
- }
- const options = {
- hostname: faucetUrl,
- port: 443,
- path: '/accounts',
- method: 'POST',
- headers: {
- 'Content-Type': 'application/json',
- 'Content-Length': body ? body.length : 0
- }
- };
- return new Promise((resolve, reject) => {
- const request = https.request(options, (response) => {
- const chunks = [];
- response.on('data', (d) => {
- chunks.push(d);
- });
- response.on('end', () => __awaiter(this, void 0, void 0, function* () {
- const body = Buffer.concat(chunks).toString();
- if (response.headers['content-type'].startsWith('application/json')) {
- const wallet = JSON.parse(body);
- const classicAddress = wallet.account.classicAddress;
- if (classicAddress) {
- try {
- const isFunded = yield hasAddressBalanceIncreased(this, classicAddress, startingBalance);
- if (isFunded) {
- resolve(wallet);
- }
- else {
- reject(new common_1.errors.XRPLFaucetError(`Unable to fund address with faucet after waiting ${INTERVAL_SECONDS * MAX_ATTEMPTS} seconds`));
- }
- }
- catch (err) {
- reject(new common_1.errors.XRPLFaucetError(err));
- }
- }
- else {
- reject(new common_1.errors.XRPLFaucetError(`The faucet account classic address is undefined`));
- }
- }
- else {
- reject({
- statusCode: response.statusCode,
- contentType: response.headers['content-type'],
- body
- });
- }
- }));
- });
- request.write(body ? body : '');
- request.on('error', (error) => {
- reject(error);
- });
- request.end();
- });
- });
- }
- function getAddressXrpBalance(api, address) {
- return __awaiter(this, void 0, void 0, function* () {
- try {
- const balances = yield api.getBalances(address);
- const xrpBalance = balances.filter((balance) => balance.currency.toUpperCase() === 'XRP');
- return xrpBalance[0].value;
- }
- catch (err) {
- return `Unable to retrieve ${address} balance. Error: ${err}`;
- }
- });
- }
- function hasAddressBalanceIncreased(api, address, originalBalance) {
- return __awaiter(this, void 0, void 0, function* () {
- return new Promise((resolve, reject) => {
- let attempts = MAX_ATTEMPTS;
- const interval = setInterval(() => __awaiter(this, void 0, void 0, function* () {
- if (attempts < 0) {
- clearInterval(interval);
- resolve(false);
- }
- else {
- attempts--;
- }
- try {
- const newBalance = +(yield getAddressXrpBalance(api, address));
- if (newBalance > originalBalance) {
- clearInterval(interval);
- resolve(true);
- }
- }
- catch (err) {
- clearInterval(interval);
- reject(new common_1.errors.XRPLFaucetError(`Unable to check if the address ${address} balance has increased. Error: ${err}`));
- }
- }), INTERVAL_SECONDS * 1000);
- });
- });
- }
- function getFaucetUrl(api) {
- const connectionUrl = api.connection.getUrl();
- if (connectionUrl.includes('altnet') || connectionUrl.includes('testnet')) {
- return FaucetNetwork.Testnet;
- }
- if (connectionUrl.includes('devnet')) {
- return FaucetNetwork.Devnet;
- }
- return undefined;
- }
- exports.getFaucetUrl = getFaucetUrl;
- exports.default = generateFaucetWallet;
- //# sourceMappingURL=wallet-generation.js.map
|