This commit is contained in:
nitowa
2023-08-15 22:28:03 +02:00
commit 1dae68b1c7
5529 changed files with 1659171 additions and 0 deletions
+15
View File
@@ -0,0 +1,15 @@
import { RippleAPI } from '..';
import { GeneratedAddress } from '../offline/generate-address';
export interface FaucetWallet {
account: GeneratedAddress;
amount: number;
balance: number;
}
export declare enum FaucetNetwork {
Testnet = "faucet.altnet.rippletest.net",
Devnet = "faucet.devnet.rippletest.net"
}
declare function generateFaucetWallet(this: RippleAPI, address?: string): Promise<FaucetWallet | void>;
export declare function getFaucetUrl(api: RippleAPI): FaucetNetwork;
export default generateFaucetWallet;
//# sourceMappingURL=wallet-generation.d.ts.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"wallet-generation.d.ts","sourceRoot":"","sources":["../../../src/wallet/wallet-generation.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,SAAS,EAAC,MAAM,IAAI,CAAA;AAE5B,OAAO,EAAC,gBAAgB,EAAC,MAAM,6BAA6B,CAAA;AAI5D,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,gBAAgB,CAAA;IACzB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,oBAAY,aAAa;IACvB,OAAO,iCAAiC;IACxC,MAAM,iCAAiC;CACxC;AAWD,iBAAe,oBAAoB,CACjC,IAAI,EAAE,SAAS,EACf,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAsG9B;AAyED,wBAAgB,YAAY,CAAC,GAAG,EAAE,SAAS,iBAa1C;AAED,eAAe,oBAAoB,CAAA"}
+150
View File
@@ -0,0 +1,150 @@
"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
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"wallet-generation.js","sourceRoot":"","sources":["../../../src/wallet/wallet-generation.ts"],"names":[],"mappings":"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"}